だから私はヒューリスティックアルゴリズムを実装しています、そして私はこの関数に出くわしました。
私は1からnの配列を持っています(Cでは0からn-1、w / e)。別の配列にコピーする要素の数を選択したいと思います。パラメータy(0 <y <= 1)が与えられた場合、平均が(y * n)である数の分布が必要です。つまり、この関数を呼び出すと、0からnまでの数値が返され、これらの数値の平均はy*nになります。
著者によると、「l」は乱数です:0<l<n。私のテストコードでは、現在生成されている0 <= l<=nです。そして、私は正しいコードを持っていました、しかし私は今何時間もこれをいじっています、そして私はそれを元に戻すのが面倒です。
そこで、関数の最初の部分をコーディングしました。y<= 0.5の場合、yを0.2に設定し、nを100に設定しました。つまり、0から99までの数値、平均20を返す必要がありました。結果はその間にありません。 0とnですが、一部は変動します。そして、nが大きいほど、このフロートは小さくなります。
これはCテストコードです。「x」は「l」パラメータです。
//hate how code tag works, it's not even working now
int n = 100;
float y = 0.2;
float n_copy;
for(int i = 0 ; i < 20 ; i++)
{
float x = (float) (rand()/(float)RAND_MAX); // 0 <= x <= 1
x = x * n; // 0 <= x <= n
float p1 = (1 - y) / (n*y);
float p2 = (1 - ( x / n ));
float exp = (1 - (2*y)) / y;
p2 = pow(p2, exp);
n_copy = p1 * p2;
printf("%.5f\n", n_copy);
}
そして、ここにいくつかの結果があります(小数点以下5桁が切り捨てられます):
0.03354
0.00484
0.00003
0.00029
0.00020
0.00028
0.00263
0.01619
0.00032
0.00000
0.03598
0.03975
0.00704
0.00176
0.00001
0.01333
0.03396
0.02795
0.00005
0.00860
記事は次のとおりです。
http://www.scribd.com/doc/3097936/cAS-The-Cunning-Ant-System
6ページと7ページ。
またはグーグルで「cAS:狡猾なアリシステム」を検索してください。
だから私は何が間違っているのですか?これと同じ機能を説明している論文が5つ以上あるので、著者が間違っているとは思いません。
私を助けてくれる人への私のすべてのインターネット。これは私の仕事にとって重要です。
ありがとう :)