注册 登录
编程论坛 C++教室

程序循环出现问题,哪位大神帮忙看看

凉薯 发布于 2014-08-19 15:48, 422 次点击
以下程序,当将两个循环部分注释起来的时候,可以运行出来结果,如果加上循环,运行页面一直运行不出结果,这个部分的循环次数也不是特别多,次数一共是50*100*100*100次,程序还有一个地方也有一样的程序,有10000*1000次循环(这两个地方的循环式相加的关系),但是那里就没有问题。
     while(temp1>0.3)   //温度下降50次就可以达到这个温度
     {
        while(num1<=100)
        {
            for(j=0;j<N;j++)
            {
                do
                {
                    i=rand()%N;   //改变活动的执行模式
                    if(Mode[i]>1)
                       MList[i]^=1;

                    ELstart();
                }while(es[j]>ls[j]);
            }

            for(i=0;i<N;i++)
            {
                s[i]=es[i];
                f[i]=d[i];
            }

            payactivity_orderly();
            NPV_calculate();
            NPV1=NPV;   //计算净现金现值

            while(temp2>0.026)  //温度下降100次
            {
                while(num2<=100)
                {
                    do
                    {
                        i=1+rand()%(N-1);  //在[1,N-1]中随机选择一个活动
                        s[i]=es[i]+1+rand()%(ls[i]-es[i]);  //在活动的事件窗(es[],ls[]]中随机选择一个时间作为开始时间
                        for(j=i+1;j<N;j++)
                        {
                            int max=0;
                            for(k=i;k<N;k++)
                            {
                                if(network[k][j]==1&&s[k]+d[k]>max)
                                    max=s[k]+d[k];
                            }
                            s[j]=max;
                        }
                        for(j=0;j<N;j++)
                        {
                            if(s[j]<es[j])
                                s[j]=es[j];
                            f[j]=s[j]+d[j];
                        }
                    }while(f[N-1]<deadline1||f[N-1]>deadline2);

                    payactivity_orderly();
                    NPV_calculate();
                    NPV2=NPV;

                    if(NPV2-NPV1>0)
                    {
                        for(i=0;i<N;i++)
                            s_curr[i]=s[i];
                        NPV1=NPV2;
                    }
                    else
                    {
                        double r=exp((NPV2-NPV1)/temp2);
                        double R=(double)(rand()%1001)/1000;
                        if(R<=r)
                        {
                            for(i=0;i<N;i++)
                                s_curr[i]=s[i];
                            NPV1=NPV2;
                        }
                    }
                    num2++;
                }
                temp2=temp2*cool_rate;
            }

            if(NPV1-NPV0>0)
            {
                for(i=0;i<N;i++)
                    MList_curr[i]=MList[i];
                NPV0=NPV1;
            }

            else
            {
                double r=exp(NPV1-NPV0)/temp1;
                double R=(double)(rand()%1001)/1000;
                if(R<=r)
                {
                    for(i=0;i<N;i++)
                        MList_curr[i]=MList[i];
                    NPV0=NPV1;
                }
            }
            num1++;
        }
        temp1=temp1*cool_rate1;
    }
2 回复
#2
stop12042014-08-19 18:02
检查下循环条件.i j n
#3
llwwzz2014-08-21 22:33
没有仔细看,但是给你点建议,for循环if判断的条件最好都用  !=        ,好判断,执行也快
1