您好,欢迎访问三七文档
-1-单纯行法第一题和第二题采用了单纯形法进行解决,单纯形法的理论依据是:线形规划问题的可行域是n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。顶点所对应的可行解称为基本可行解。单纯形法的基本思想是:先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。如果问题无最优解也可用此法判别。单纯形法的一般解题步骤可归纳如下:1.把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解。2.若基本可行解不存在,即约束条件有矛盾,则问题无解。3.若基本可行解存在,从初始基本可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。4.按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。5.若迭代过程中发现问题的目标函数值无界,则终止迭代。用单纯形法求解线性规划问题所需的迭代次数主要取决于约束条件的个数。1某工厂生产A和B两种产品。已知制造A产品,每公斤要用煤9吨、电力4千万、劳力3个;制造产品B,每公斤要用煤4吨、电力5千瓦-劳力10个。又知制成产品A每公斤的产值是7万元;B每公斤的产值是12万元。现该厂只有煤360吨、电力200千瓦、劳力300个。问在这种条件下,应该生产A、B产品各多少才能使产值为最高。试写出其数学模型,即约束方程和目标函数,并利用单纯形法求解该线性规划问题。解:设生产A、B产品各,xy吨9436045200310300xyxyxy-2-使max712Jxy引入附加变量123,,xxx,使不等式约束变为等式约束1239436045200310300xyxxyxxyx程序清单如下:#includeiostream#includeiomanipusingnamespacestd;intvarIn(doubledelta[5]);//计算进基变量intvarOut(doublesita[3],doublea[3][5],doubleb[3],doubledelta[5]);//计算出基变量voidcal(doublesita[3],doublea[3][5],doubleb[3],doubledelta[5]);//计算方程组系数和判别数double*A;//产品A的产量double*B;//产品B的产量intmain(){doublemax=0;//最高产值doubledelta[5]={-7,-12,0,0,0};//判别数doubleb[3]={360,200,300};//基可行解doublea[3][5]={9,4,1,0,0,//系数矩阵A4,5,0,1,0,3,10,0,0,1};doublesita[3];//出基变量判别数intin;//进入基变量位置intout;//出入基变量位置intflag=0;//判别数是否全部非负的标志while(!flag){in=varIn(delta);out=varOut(sita,a,b,delta);cal(sita,a,b,delta);flag=1;for(inti=0;i5;i++){if(delta[i]0)//是否所有的判别数都大于0flag=0;}-3-}cout生产A和B产品的产量和最大产值:endl;cout*****************************endl;max=7*(*A)+12*(*B);cout产值最大时A产品的产量:x=*A,endl;cout产值最大时B产品的产量:y=*B,endl;cout最大产值为:optimal=maxendl;cout*****************************endl;return0;}intvarIn(doubledelta[5]){intk=0;doublemindelta=delta[0];for(inti=1;i5;i++){if(delta[i]mindelta){mindelta=delta[i];k=i;}}returnk;}intvarOut(doublesita[3],doublea[3][5],doubleb[3],doubledelta[5]){intl=0;doubleminsita=1000;for(inti=1;i3;i++){if(a[i][varIn(delta)]0)sita[i]=b[i]/a[i][varIn(delta)];if(sita[i]minsita){minsita=sita[i];l=i;}}returnl;}voidcal(doublesita[3],doublea[3][5],doubleb[3],doubledelta[5]){-4-inti,j,k,l;doublea1[3][5];doubleb1[3];doubledelta1[5];k=varIn(delta);l=varOut(sita,a,b,delta);for(i=0;i3;i++){b1[i]=b[i];for(j=0;j5;j++){a1[i][j]=a[i][j];delta1[j]=delta[j];}}for(i=0;i3;i++){for(j=0;j5;j++){if(i!=l){a[i][j]=a1[i][j]-a1[l][j]*a1[i][k]/a1[l][k];b[i]=b1[i]-b1[l]*a1[i][k]/a1[l][k];}else{a[i][j]=a1[l][j]/a1[l][k];b[i]=b1[l]/a1[l][k];}delta[j]=delta1[j]-a1[l][j]*delta1[k]/a1[l][k];}}if(k==0){A=&b[l];}elseif(k==1){B=&b[l];}}程序运行结果为:-5-2某车间有一批长度为180公分的钢管(数量充分多)。为制造零件的需要,要将其截成3种不同长度的管料:70公分、52公分、35公分。经过试算,可以由以下8种截法:(一)(二)(三)(四)(五)(六)(七)(八)70公分2111000052公分0210321035公分10130235边料5cm6cm23cm5cm24cm6cm23cm5cm问应如何同时采取若干种截法配合起来,既满足下列情况的配套要求,而又使总的边料为最少。(a)要求:70公分长的管料不少于100根,52公分长的管料不少于100根,35公分长的管料不多于100根。(b)要求:70公分、52公分、35公分长的管料均不少于100根。(c)要求:70公分长的管料不少于100根,52公分长的管料不多于150根,35公分长的管料不少于100根。试分别写出上述3种要求下的约束条件和目标函数。利用单纯形法由计算机分别求解3个线性规划问题。解:-6-(a)设八种截法各截出的管料数为:1,2345678,,,,,,xxxxxxxx12342356713467821002321503235100xxxxxxxxxxxxxxx使min1234567856235246235Jxxxxxxxx引入附加变量91011,,xxx和人为变量1213,xx使不等式约束变为等式约束12349122356710134678111321002321503235100xxxxxxxxxxxxxxxxxxxxmin1234567856235246235Jxxxxxxxx(b)设八种截法各截出的管料数为:1,2345678,,,,,,xxxxxxxx12342356713467821002321003235100xxxxxxxxxxxxxxx使min1234567856235246235Jxxxxxxxx引入附加变量91011,,xxx和人为变量12,1314,xxx使不等式约束变为等式约束1234912235671013134678111421002321003235100xxxxxxxxxxxxxxxxxxxxx使min1234567856235246235Jxxxxxxxx(c)设八种截法各截出的管料数为:1,2345678,,,,,,xxxxxxxx12342356713467821002321503235100xxxxxxxxxxxxxxx使min1234567856235246235Jxxxxxxxx引入附加变量91011,,xxx和人为变量1213,xx,使不等式约束变为等式约束12349122356710134678111321002321503235100xxxxxxxxxxxxxxxxxxxx使min1234567856235246235Jxxxxxxxx-7-程序清单如下:#includestdio.h#includemath.h#includeiostream.hdoubleM=10000000;staticdoubleA[20][20];doublefunction(doublex1,doublex2,doublex3,doublex4,doublex5,doublex6,doublex7,doublex8){doubleval;val=5*x1+6*x2+23*x3+5*x4+24*x5+6*x6+23*x7+5*x8;returnval;}voidinit_Array(intsign){switch(sign){case1:A[0][1]=5;A[0][2]=6;A[0][3]=23;A[0][4]=5;A[0][5]=24;A[0][6]=6;A[0][7]=23;A[0][8]=5;A[1][0]=100;A[1][1]=2;A[1][2]=1;A[1][3]=1;A[1][4]=1;A[1][5]=0;A[1][6]=0;A[1][7]=0;A[1][8]=0;A[1][9]=-1;A[1][10]=0;A[1][11]=0;A[2][0]=100;A[2][1]=0;A[2][2]=2;A[2][3]=1;A[2][4]=0;A[2][5]=3;A[2][6]=2;A[2][7]=1;A[2][8]=0;A[2][9]=0;A[2][10]=-1;A[2][11]=0;A[3][0]=100;A[3][1]=1;A[3][2]=0;A[3][3]=1;A[3][4]=3;A[3][5]=0;A[3][6]=2;A[3][7]=3;A[3][8]=5;A[3][9]=0;A[3][10]=0;A[3][11]=1;break;case2:A[0][1]=5;A[0][2]=6;A[0][3]=23;A[0][4]=5;A[0][5]=24;A[0][6]=6;A[0][7]=23;A[0][8]=5;A[1][0]=100;A[1][1]=2;A[1][2]=1;A[1][3]=1;A[1][4]=1;A[1][5]=0;A[1][6]=0;A[1][7]=0;A[1][8]=0;A[1][9]=-1;A[1][10]=0;A[1][11]=0;A[2][0]=100;A[2][1]=0;A[2][2]=2;A[2][3]=1;A[2][4]=0;A[2][5]=3;A[2][6]=2;A[2][7]=1;A[2][8]=0;A[2][9
本文标题:最优控制大作业
链接地址:https://www.777doc.com/doc-6847284 .html