0

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ルート最適化のために、進化的アルゴリズムを作成しようとしています

4

1 に答える 1

1

のループv[i] = i;は から0に進みます4 * par_nv、サイズ の配列ですpop_size。それは、ストライキを待っている範囲外の問題のようです。で使用されているためi、のカウンターについても同じことが言えます。r = random(pop_size - i, i);iv[i]

于 2012-08-18T17:33:21.027 に答える