0

我定义了一个随机函数 ( int random(int sup, int seed)),它返回一个介于 0 和sup-1. 我已经定义了一个结构点,其中 pos_parents 和 population 是二维数组。交换函数交换 v 数组的元素,它是一个“索引”数组。所有这些都是为了从总体成员中将 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(route locations-array size), 8(pop_size), 1(time limit), 1 (par_n)

这是整个代码(不到150行),总是插入1到time_limit,因为我还没有完成循环。 https://docs.google.com/open?id=0ByylOngTmkJddVZqbGs1cS1IZkE

PS我正在尝试编写一个进化算法,用于路线优化

4

1 回答 1

1

循环v[i] = i;from04 * par_n,但v它是一个大小为 的数组pop_size。这看起来像是一个等待罢工的越界问题。对于 in 中的计数器i也是如此r = random(pop_size - i, i);,因为i在 中使用v[i]

于 2012-08-18T17:33:21.027 回答