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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog