我打算为我的公告板引入投票系统,我正在寻找一种优秀且高效的算法来奖励用户。我正在考虑的投票系统非常简单。让我解释一下。
每隔X天,董事会中的每位用户都会收到一个基于简单公式的上下投票点数A:
A = 5 + AwardUserPerformance();
Where AwardUserPerformance() is a function that returns a value between 0 and 10 depending on the performance of the user during the past X days.
我可以在AwardUserPerformance()函数中使用以下变量来计算用户的表现:
我无法找出一个好的算法来从这些变量中获得0到10之间的数字。
答案 0 :(得分:2)
这不是一个微不足道的问题,我认为你不会得到一个“完美的独特答案”,因为你想要的功能很大程度上取决于你希望你的奖励如何发挥作用。
最明显的方法是找到一种在0(可怕)和1(完美)之间规范化每个指标的方法。然后,您可以在每个度量上获得0到1之间的分数,将它们相乘,然后乘以10,得到一个定义在0到10之间的数字。时间相当容易(0 =没有花费时间) ,1 =在线花费的整个时间),其他2个需要设置一些最小和最大阈值,截断上面的所有内容。例如:10个帖子以及更多= 1,0个帖子= 0,中间是n个帖子/ 10.
但是存在这方面的问题。首先,由于乘法效应,3中任何一个上的0将使总得分为零。更一般地说,很难获得大分,因为任何维度的低分都会严重影响总分。然后,设置边界要么是任意的(你决定最小值和最大值是什么),要么有些复杂(你可以根据用户观察到的帖子数量来确定最大值,并选择90%的分数作为你的最大界限) 。这是一个问题的原因是边界将取决于您网站上的活动。如果你从100个用户开始,获得99个upvotes将非常困难。一旦你达到100万用户,这将变得更容易,奖励系统应该(可能)调整。
您可以使用将每个度量映射到[0; 1]。具有递减斜率的函数(如日志)将为适度活跃的用户提供“简单点”,但获得高分将更难。这是其中一种情况,我建议使用Excel,以便可视化各种功能会发生什么。
或者,为了避免乘法问题,您可以使用可分离函数,并在时间分数+分数+投票分数中打破总分。在这种情况下,您只需要将这些函数中的每一个从0开始,并且它们的最大值必须总和为10.
但是,我认为最好的系统只会使用收到的投票。它可能与其他2个相关(如果没有发布,你就无法投票,而且你不能在没有在线的情况下发帖)。