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