基于年龄匹配算法的php中的正态分布

时间:2013-05-31 05:20:28

标签: php algorithm math probability

我认为这可能是数学正态分布问题,但我想在php中编码。 这就是问题所在。

在我的约会网站上,我想为每个男人介绍两个女人。 有年龄基础问题。 男人就像女人一样-8~ + 4岁。 (当然,每个国家都可能不同。但在中国,大多数情侣都在这个范围内。) 因此,男性比女性两年(-2)年龄大的匹配得分最高,并且对于-8~ + 4岁女性,匹配覆盖率必须为98%。

$min = -8;
$max = 4;
$coverage_percent = 0.98f;

function matching_score($man_age, $woman_age)
{
  $score = <- some normal distribution function ->;
  return $score;
}

我会为每个男人挑选两个女性最高分。

这种方法对所有夫妻的概率为98%。

php中是否存在快速正态分布概率函数?

1 个答案:

答案 0 :(得分:1)

我所知道的编程语言没有内置的正态分布函数,因此必须要么得到一个库,要么实现自己。像Excel和Matlab这样的更高级别的环境提供了这样的东西。我不知道PHP,但下面是我在C#中使用的正常分发实现,所以可能你可以转换为PHP。它有CDF(累积分布函数)和PDF(概率分布函数)。

public class Normal {
    public const double INVRTP = .398942280401433; // INVerse of Root Two Pi  !!
    private const double    y0  = 0.2316419,
                            a0 = 0.31938153,
                            a1 = -0.356563782,
                            a2 = 1.781477937,
                            a3 = -1.821255978,
                            a4 = 1.330274429;
    public static double NormalCDF(double x) {
        double y = 1.0 / (1 + y0 * System.Math.Abs(x));
        y = 1.0 - NormalPDF(x) * (y * (a0 + y * (a1 + y * (a2 + y * (a3 + y * a4)))));
        return (x <= 0.0) ? 1.0 - y : y;
    }
    public static double NormalPDF(double x) {
        return INVRTP * System.Math.Exp(-x * x / 2.0);
    }
}