Spaces:
Sleeping
Sleeping
| 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 |