如何使威尔逊得分间隔随时间减少

Jor*_*anc 10 php mysql algorithm rating-system

所以我正在研究威尔逊的得分间隔,以便在我的网站上整理趋势内容,但现在它只是静态的.我的意思是它会一直保持相同的分数,直到有人投票或投票.

这就是我想要实现分数随时间减少的原因.喜欢这篇文章.Reddit排名算法的工作原理.在那篇文章中,他们解释了内容的Reddit得分随着时间的推移而降低.

目前我有这个PHP功能,给我一个基于上下投票的分数:

function wilsonScore($up, $down)
{

    $score = (($up + 1.9208) / ($up + $down) - 1.96 * sqrt(($up * $down) / 
             ($up + $down) + 0.9604) / ($up + $down)) / (1 + 3.8416 / ($up + $down)) ;

    return $score;
}
Run Code Online (Sandbox Code Playgroud)

我希望得分是相同的,但在整理时添加一些东西给SQL代码.

SQL代码如下所示:

SELECT *
FROM photos
WHERE   status = 0 
    AND net_votes > 0          // display only picture that got rated over 0
ORDER BY score DESC
Run Code Online (Sandbox Code Playgroud)

我的想法是最终得到一个算法,该算法会以对数方式降低分数,发布时间的前1-2-3天不会影响分数,然后分数开始下降.

编辑

从理论上讲,在分数中添加一些内容是否可行,以便用户在网站上获得的声誉(如SO)越多,他的评分值越高?在互联网上做过类似的事吗?

有人在这里已经使用过这样的东西吗?

小智 0

因此,本质上,您每次调用该函数时都会生成该分数,并在每次显示该函数时调用该函数?那么我要做的是使用以下成员创建一个分数对象,反映数据库中的某些行

$score->id; //int
$score->score; //float
$score->up; //int
$score->down; //int
$score->last_vote; //timestamp
Run Code Online (Sandbox Code Playgroud)

从那里每次有人投票赞成或反对时,您都会处理一个新的分数。您不必在每次有人查看它时都重新处理它,除非您也想考虑这一点。您还可以每天运行一次 cron 作业,以惩罚长时间未更新的分数。