0

我计划为我的公告板引入一个投票系统,并且我正在寻找一种良好且有效的算法来奖励用户。我正在考虑的投票系统非常简单。让我给你解释一下。

  • 用户发表的每个帖子只能被董事会上的其他所有用户投票赞成或反对一次。用户不能投票给自己的帖子。
  • 赞成票需要 1 分,反对票需要 2 分(只是为了避免简单的抨击和围攻)。
  • 每 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() 函数中使用以下变量来计算用户的表现:

  1. T = 用户在过去 X 天内在线花费的时间
  2. P = 用户在过去 X 天内发表的帖子数
  3. V = 过去 X 天内对用户帖子的反对票和赞成票的总和(例如,如果用户收到 3 次赞成票和 2 次反对票,则 V=1)

我只是想不出一个好的算法来从这些变量中获取 0 到 10 之间的数字。

4

1 回答 1

2

这不是一个微不足道的问题,而且我认为您无法获得“完美的独特答案”,因为您想要的功能在很大程度上取决于您希望奖励如何发挥作用。

最明显的方法是找到一种将每个指标标准化为 0(糟糕)和 1(完美)之间的方法。然后,您可以在每个度量上获得 0 到 1 之间的分数,将它们相乘,然后乘以 10,得到一个定义在 0 到 10 之间的数字。时间会相当容易(0 = 没有花费时间, 1 = 在线花费的全部时间),另外 2 个需要设置一些最小和最大阈值,截断上面的所有内容。例如:10 个或更多帖子 = 1,0 个帖子 = 0,中间是 n 个帖子 / 10。

不过,这也有问题。首先,由于乘法效应,3 个中的任何一个为 0 都会使总分归零。更一般地说,很难获得高分,因为任何维度的低分都会严重影响总分。然后,设置界限要么是任意的(您决定最小值和最大值是多少),要么有些复杂(例如,您可以根据观察到的用户帖子数来确定最大值,并选择 90% 的分位数作为您的最大界限) . 这是一个问题的原因是边界将取决于您网站上的活动。如果您从 100 个用户开始,获得 99 个支持将非常困难。一旦你达到 100 万用户,这将变得更容易,奖励系统应该(可能)调整到这一点。

除了使用普通线性函数之间的乘法,您可以使用任何将每个度量映射到 [0; 1]。例如,具有递减斜率的函数(如日志)将为中等活跃用户提供“简单点”,但获得高分会更难。这是我建议使用 Excel 的其中一种情况,以可视化各种功能会发生什么。

或者,为了避免乘法问题,您可以使用可分离函数,并以时间分数 + 帖子分数 + 投票分数来打破总分。在这种情况下,您只需要这些函数中的每一个都从 0 开始,并且它们的最大值必须总和为 10。

但是,我认为最好的系统只是使用收到的选票。它可能与其他 2 个相关(不发帖就不能投票,不上网就不能发帖)。

于 2012-06-09T05:23:16.903 回答