Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使Wilson评分间隔随时间减少_Php_Mysql_Algorithm_Rating System - Fatal编程技术网

Php 如何使Wilson评分间隔随时间减少

Php 如何使Wilson评分间隔随时间减少,php,mysql,algorithm,rating-system,Php,Mysql,Algorithm,Rating System,因此,我正在研究威尔逊评分区间,以整理我网站上的趋势内容,但目前它只是静态的。我的意思是,在有人投赞成票或反对票之前,它将始终保持相同的分数 这就是为什么我想实现分数随着时间的推移而降低。就像在这篇文章中。在那篇文章中,他们解释说Reddit在内容上的分数会随着时间的推移而降低 目前,我有一个php函数,它根据上下投票给我打分: function wilsonScore($up, $down) { $score = (($up + 1.9208) / ($up + $down) - 1

因此,我正在研究威尔逊评分区间,以整理我网站上的趋势内容,但目前它只是静态的。我的意思是,在有人投赞成票或反对票之前,它将始终保持相同的分数

这就是为什么我想实现分数随着时间的推移而降低。就像在这篇文章中。在那篇文章中,他们解释说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;
}
我希望分数是相同的,但在排序时向SQL代码添加一些内容

SQL代码如下所示:

SELECT *
FROM photos
WHERE   status = 0 
    AND net_votes > 0          // display only picture that got rated over 0
ORDER BY score DESC
我的一个想法是,最终使用一种算法,以对数方式降低分数,在发布的前1-2-3天,时间对分数的影响不会太大,然后分数开始下降

编辑 从理论上讲,在分数上增加一些东西,这样用户在网站上获得的声誉越高,他的评分值就越高,这是否可行?互联网上已经有类似的东西了吗


这里已经有人使用过类似的东西了吗?

所以本质上,每次调用该函数时都会生成分数,每次显示该函数时都会调用该分数?我要做的是用以下成员创建一个score对象,这些成员反映了数据库中的一些行

$score->id; //int
$score->score; //float
$score->up; //int
$score->down; //int
$score->last_vote; //timestamp

从那以后,每次有人投赞成票或反对票,你都会得到一个新的分数。你不应该每次有人看它的时候都重新处理它,除非你也想把它考虑进去。您还可以每天运行一次cron作业,以惩罚长时间未更新的分数

您可以在SQL中执行此操作:

$sql = "SELECT  `up`,
                `down`, 
                `date`, 
                (((`up` + 1.9208) / (`up` + `down`) - 1.96 * SQRT((`up` * `down`) / (`up` + `down`) + 0.9604) / (`up` + `down`)) / (1 + 3.8416 / (`up` + `down`))) AS `wilson`, 
                ((((`up` + 1.9208) / (`up` + `down`) - 1.96 * SQRT((`up` * `down`) / (`up` + `down`) + 0.9604) / (`up` + `down`)) / (1 + 3.8416 / (`up` + `down`))) / LN(DATEDIFF(NOW(), `date`) + EXP(1))) AS `weighted_wilson` 

    FROM        `photos`

    ORDER BY    `weighted_wilson` DESC
    ";
使用自然对数衰减(调整为从原始威尔逊分数开始)。显然,你可以利用这些价值观


当然,您可以根据每个用户调整授予的向上或向下投票数(即有经验的用户授予更大的向上/向下移动)。

您可以查看OSQA的源代码。它是stackoverflow的开源克隆。