vera栎 2014-12-16 08:39 采纳率: 33.3%
浏览 1435

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

程序是对工序进行排列,使工人总的工资成本最低。
用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条回答

  • threenewbee 2014-12-16 09:35
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料