我会尝试以一种简单但(我希望)有效的方式解决问题。
首先,您仅在投票与系统实际预期的不同时才更新锻炼评级。从现在开始,我将只考虑用户输出与系统实际预期不同的情况。
其次,我会更加重视两个级别差异很大的选票。对两个等级为 2 和 3 的练习的错误期望应该比对两个等级为 1 和 5 的练习的错误期望影响更小。
也就是说,我的算法是这样的:
1- 设置了一个恒定的百分比,我们称之为increment。它确定了投票的影响百分比,并且可以根据用户数量进行修改。
2- 对于“意外”投票,我将计算原始级别之间的差异(最小为 1)。
diff = max(1, abs(ex1.level - ex2.level))
3- 我会根据increment 和diff 的乘积按百分比更新每个锻炼评分。
if (ex1 level expected bigger)
ex1.rating = ex1.rating + diff*increment;
else
ex1.rating = ex1.rating - diff*increment;
Rating 是浮点数,level 是 rating 的四舍五入:
ex1.level = round(ex1.rating)
示例:
让我们设置increment = 0.1。 exA,评分为 2.0,级别 2 与 exB,评分为 3.0,级别 3 进行比较。
第一个用户选择exB 作为最难的。没有任何变化,因为这是系统预期的结果。
第二个用户选择exA。这不是预期的结果。两个练习之间的差为 1,因此评分被修正了一个因子 1*0.1 = 0.1,
导致exA.rating = 2.1 对应exB.rating = 2.9