0

数学的な正規分布の問題だと思いますが、phpでコーディングしたいです。これが問題です。

私の出会い系サイトでは、男性1人に対して女性2人を紹介したいと思っています。年齢層の問題があります。-8~+4歳の女性と同じような男性。(もちろん、国によって違いはありますが、中国ではほとんどのカップルがこの範囲内です。) したがって、男性が女性より2歳年上(-2)の場合のマッチングスコアが最も高く、-8〜+4歳の場合はマッチングスコアが高くなります。 woman の場合、マッチング カバレッジ パーセンテージは 98% である必要があります。

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

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

すべての男性に対して、最高得点の女性を 2 人選びます。

この方法は、すべてのカップルで 98% の確率である必要があります。

PHPに高速正規分布確率関数はありますか?

4

1 に答える 1

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);
    }
}
于 2013-05-31T09:06:33.360 に答える