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

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
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码
  • ¥50 pc微信3.6.0.18不能登陆 有偿解决问题
  • ¥20 MATLAB绘制两隐函数曲面的交线