AdaptX-Prototype / get_next_question.py
smruthi49's picture
Create get_next_question.py
14f2b08
import random
import numpy as np
class next_question_level:
def calculate_current_level(self, probabilities):
current_level = max(probabilities, key=probabilities.get)
return current_level
#standard normalisation
def normalisation(self, probabilities):
total = sum(probabilities.values())
normalized_probabilities = {}
for key, value in probabilities.items():
normalized_probabilities[key] = value / total * 100
return normalized_probabilities
def normalize_probabilities(self, probabilities):
probs = probabilities.values()
lowest = min(probs)
highest = max(probs)
dif = highest - lowest
lowest = lowest - 0.05 * dif
highest = highest + 0.05 * dif
dif = highest - lowest
for key,value in probabilities.items():
probabilities[key] = ((value-lowest)/dif) * 100
return probabilities
def roulette_wheel(self, probabilities):
total_prob = sum(probabilities.values())
random_num = random.uniform(0, total_prob)
cumulative_prob = 0
for level, prob in probabilities.items():
cumulative_prob += prob
if random_num <= cumulative_prob:
return level
def update_probabilities(self, user_input,curr_question_difficulty,probabilities):
curr_level = self.calculate_current_level(probabilities)
curr_prob = probabilities[curr_question_difficulty]
if user_input == 1:
if curr_level == 'easy':
probabilities['easy'] -= curr_prob * 0.3 *3
probabilities['medium'] += curr_prob * 0.3 * 2
probabilities['hard'] += curr_prob * 0.3 * 1
elif curr_level == 'medium':
probabilities['easy'] -= curr_prob * 0.3 * 3
probabilities['medium'] -= curr_prob * 0.3 * 2
probabilities['hard'] += curr_prob * 0.3 * 1
elif curr_level == 'hard':
probabilities['easy'] -= curr_prob * 0.3 * 3
probabilities['medium'] -= curr_prob * 0.3 * 2
probabilities['hard'] += curr_prob * 0.3 * 1
else:
if curr_level == 'easy':
probabilities['easy'] += curr_prob * 0.3 * 3
probabilities['medium'] -= curr_prob * 0.3 * 1
probabilities['hard'] -= curr_prob * 0.3 * 2
elif curr_level == 'medium':
probabilities['easy'] += curr_prob * 0.3 * 1
probabilities['medium'] += curr_prob * 0.3 * 2
probabilities['hard'] -= curr_prob * 0.3 * 3
elif curr_level == 'hard':
probabilities['easy'] += curr_prob * 0.3 * 1
probabilities['medium'] += curr_prob * 0.3 * 2
probabilities['hard'] -= curr_prob * 0.3 * 3
probabilities = self.normalisation(self.normalize_probabilities(probabilities))
return probabilities
def __init__(self, probability):
self.probability = probability
self.probability = self.normalize_probabilities(self.probability)
self.probability = self.normalisation(self.probability)
def level(self):
self.current_question_difficulty = self.roulette_wheel(self.probability)
return self.current_question_difficulty
def response_to_current_question(self, correct, difficulty):
self.probability = self.update_probabilities(correct, difficulty, self.probability)
def get_probabilty(self):
return self.probability