vera栎
2015-01-02 07:58
采纳率: 33.3%
浏览 1.8k
已采纳

c语言程序输出异常,请大家来帮忙~

这里是用遗传算法,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];     //个体适应度(每次工序排列得到的总成本)计算
  }

}
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 91program 2015-01-02 13:14
    已采纳

    你的这段代码,问题太多了。这样大家帮你找错误也不是办法。
    建议你对代码进行调试,调试过程你会发现这些问题、和其它未发现的问题。当然前提是你对这些源代码有一定的了解,知道那里应该得到什么正确的值。
    这样,对你学习编程才有作用。否则,这些别人帮你改完,你依然是不会的。以后遇到问题,还是解决不了。

    点赞 打赏 评论
  • 91program 2015-01-02 08:15

    第三个 for 循环是不是写错了。

    点赞 打赏 评论
  • autocyz 2015-01-02 08:25

    for(s=0;s<N;s++)这一句需要加 { } 吧,不然这个for就只执行 r=oldpop[i].chrom[s]-1;

    点赞 打赏 评论
  • oyljerry 2015-01-02 08:34

    for(s=0;s<N;s++)

    这里要括起来循环代码

    点赞 打赏 评论

相关推荐 更多相似问题