这真是一个数学问题,我试图根据两件事给用户排名:他们做某事的时间和百分比。
基本上,最短时间+最高百分比给出最佳排名。相反,最长的时间+最低的百分比将给出最差的等级。
我试图为此找到一个公式。理想情况下,它会返回x点,然后我会根据用户所拥有的点对用户进行排序。
示例(完全随机):
- 用户有94%和2.3秒:他将获得123的排名点
- 用户有56%和2.3秒:他将获得87的排名点
- 用户有56%和5.1秒:他将得到73的排名点
选项:百分比的重量应超过最终结果中的时间
这是一个多么好的公式?
答案 0 :(得分:2)
有两件事需要考虑:
<强>冲击强>
这基本上分别对两个因素中的每一个进行评分,但将它们标准化并权衡它们。
score = (factor_A_impact * player_score_of_factor_A / maximum_score_of_factor_A) + (factor_B_impact * player_score_of_factor_B / maximum_score_of_factor_B);
<强>跨过强>
这会增加交叉效果。实际上,得分A比B更重要,因为它影响B的结束值。交叉因子的范围从1到0. 0不调制b的影响,1是B因子的完全调制一个因素。您可以根据需要添加任意数量的因子,并以各种复杂的方式将它们链接起来。
crossOverFactor = 0.2
score_factor_A_normalised = (player_score_of_factor_A / maximum_score_of_factor_A);
score_factor_B_normalised = (player_score_of_factor_B / maximum_score_of_factor_B);
score_B_crossOveredByA = score_factor_B_normalised*(1-crossOverFactor) + (score_factor_A_normalised*crossOverFactor*score_factor_B_normalised);
score = (score_factor_A_normalised*factor_A_impact) + (score_B_crossOveredByA * factor_B_impact);
答案 1 :(得分:0)
请说明最终目标是什么。它取决于什么,根据你更重要 - 百分比或时间。然后,您可以分配点,例如,如果有25个数据点,
stepValue = 100/25 # = 4
percentagePoints = ((25+1) - percentageRank)*stepValue
这将获得最高%100,接下来的96,然后是92等等。时间相同。
如果你认为一个比另一个更重要,那么可以采用两个分数的简单平均值/总和,或加权平均值(并设法确定哪一个比另一个更重要重要)。