我已经定义了一个随机函数(int random(int sup, int seed)
),它返回0到sup-1
之间的值。
我已经定义了一个struct,point,其中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时输入3(路径位置 - 数组大小),8(pop_size),1(时间限制),1(par_n)
这是整个代码(少于150行),总是将1插入time_limit,因为我还没有完成循环。 https://docs.google.com/open?id=0ByylOngTmkJddVZqbGs1cS1IZkE
P.S。 我正在尝试编写一个用于路由优化的进化算法
答案 0 :(得分:1)
v[i] = i;
的循环从0
变为4 * par_n
,但v
是一个大小为pop_size
的数组。这似乎是一个等待罢工的越界问题。 i
中的计数器r = random(pop_size - i, i);
也是如此,因为i
中使用了v[i]
。