int random(int sup, int seed)
0 ~ の値を返すランダム関数 ( ) を定義しましたsup-1
。pos_parents とpopulation が 2 次元配列である構造体 point を定義しました。swap 関数は、「インデックス」の配列である v 配列の要素を交換します。同じメンバーを 2 回ソートせずに、母集団メンバーから par_n メンバーを pos_parents にソートするためにすべてが行われます。
これにより、セグメンテーション違反が発生します。
r
内部の変数population[v[r]][j]
を明示的な値に置き換えると、すべて機能します。これはどのように可能ですか?ランダム機能を試してみましたが、問題はないようです。
さらに、セグメンテーション違反が発生すると、最初のループで printf もアクティブになりません。
point population[pop_size][array_size];
point pos_parents[4*par_n][array_size];
int v[pop_size];
for (i=0; i<4*par_n;i++)
v[i]=i;
for(t=0;t<time_limit;t++) //The cycle of life
{
for(i=0;i<4*par_n;i++)
{
r=random(pop_size-i,i);
printf("%d\t",r);
for(j=0;j<array_size;j++)
{
pos_parents[i][j]=population[v[r]][j];
}
swap(&(v[r]),&(v[pop_size-1-i]));
}
i type 実行時 3(経路位置-配列サイズ)、8(pop_size)、1(制限時間)、1(par_n)
これはコード全体 (150 行未満) です。まだサイクルを完了していないため、常に time_limit に 1 を挿入します。 https://docs.google.com/open?id=0ByylOngTmkJddVZqbGs1cS1IZkE
PSルート最適化のために、進化的アルゴリズムを作成しようとしています