2 u013599381 u013599381 于 2014.12.16 16:39 提问

遗传算法程序出错,请大家帮忙改正~

程序是对工序进行排列,使工人总的工资成本最低。
用C编的,VS08报错说读取位置发生冲突。
程序太多,贴不全,主要是评价函数。
麻烦大家帮忙改改吧~很急,谢谢~~

部分源程序如下:

#include
#include
#include
#include
#include

#define N 5

#define M 2 //5个工序,2个工人
#define POPSIZE 500

int c[M]={2,5}; //工人每小时工作成本
int T[M]={3,2}; //每个工人参与工序的总次数
int J[M][N]; //记录工人在某个工序参加与否
int a[M][N]={{1,2,3},{3,4,5}}; //每个工人参加的工序集

void evaluateoldpop() //评价种群
{
calculateobjectfitness(); //计算种群个体的适应度
findbestindividual(); //找到最好和最差的染色体个体
}

void calculateobjectfitness() //计算染色体个体适应值
{

int i,j,k,l,s,r,x;
int p=0;
int temp;
int u[N]={1,2,1,2,1};
char X[M]={0,0};

for(i=0;i<popsize;i++)
{
oldpop[i].fitness=0.0;
for(s=0;s<N;s++)
{
r=oldpop[i].chrom[s];
temp=u[r];
u[r]=u[s];
u[s]=temp;
}
for(j=0;j<M;j++)
{
for(k=0;k<N;k++)
for(l=0;l<N;l++)
{
if(a[j][k]==oldpop[i].chrom[l])
J[j][l]=1;
else
J[j][l]=0; //记录各个工人在随机情景序列中的参与位置
}

    while(J[j][p]!=1)
    {
        p++;
    }
     x=1;
     X[j]=u[p];

     while(x<T[j])
     {
         p++;
         X[j]+=u[p];
         if(J[j][p]==1)
         x++;
     }
  }
  for(j=0;j<M;j++)
      oldpop[i].fitness+=X[j]*c[j];

}
}

2个回答

caozhy
caozhy   Ds   Rxr 2014.12.16 17:35

ask根本不适合贴代码,你看你第一行include就丢失了几个字。
建议你上传到download.csdn.net,或者发表在blog中,然后在这里给出链接。

另外要么给出完整的程序,要么给出详细的错误提示。

u013599381
u013599381 因为是错误的代码,上传怕误导大家。完整程序发在博文里超限了,也很无奈。。能麻烦下, 发你邮箱帮忙改下好么,我是初学,c也是自学的,还要向大家请教才能完善,非常感谢~~
3 年多之前 回复
u013599381
u013599381   2014.12.16 18:35

因为是错误的代码,上传怕误导大家。完整程序发在博文里超限了,也很无奈。。能麻烦下, 发你邮箱帮忙改下好么,我是初学,c也是自学的,还要向大家请教才能完善,非常感谢~~

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!