这里是用遗传算法,C语言编的解决工序排序的问题。
每条工序时间不同,工人们参加每条工序的成本也不同,工人必须呆到自己负责的工序结束了才能走,最终想要得到使成本最低的工序排序。
现在问题出在输出在文件的结果很不稳定,有时是0,有时是很小的负数,有时就是空的,但问题本身成本一定是正数的~
ps:以下是成本的计算部分,即适应度的计算,麻烦大家看看指出问题所在,虚心求教了~
void fenpei(FILE*ffp)
{int i,j,k,l;_
for(i=0;i<popsize;i++)
for(j=0;j<M;j++)
for(l=0;k<N;k++)
for(k=0;l<N;l++)
{
if(a[j][k]==oldpop[i].chrom[l])
J[j][l]=1;
else
J[j][l]=0;
} //记录每个工人参与位置
}
void calculateobjectfitness() //计算染色体个体适应值
{
int i,j,s,r,x;
int temp;
int H[6]; //6个工人工作的总工时
int u[N]={1,1,2,1,3,1,1,2,1,2,1,1}; //M=6,N=12,此为12道工序持续的时间长。
for(i=0;i<popsize;i++)
{
oldpop[i].fitness=0.0;
for(s=0;s<N;s++)
r=oldpop[i].chrom[s]-1;
temp=u[r];
u[r]=u[s];
u[s]=temp; //根据初始化的染色体,对工序时间进行变换
for(j=0;j<M;j++) //记录工人们在工序中的参与位置
{
int p=0;
while(J[j][p]!=1&&p<11)
{
p++;
}
x=1;
H[j]=u[p];
while(x<T[j]&&p<11) //每个工人总共参与的工序量是一定的
{
p++;
H[j]=H[j]+u[p];
if(J[j][p]==1)
x++;
}
oldpop[i].fitness=oldpop[i].fitness+H[j]*c[j]; //个体适应度(每次工序排列得到的总成本)计算
}
}
}