資源描述:
《最優(yōu)化實例和matlab源程序》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、最優(yōu)化平時作業(yè)一、目標(biāo)規(guī)劃1、題目:見書中例題P110例42、解題方法:利用Lingo求解3、具體步驟(1).對應(yīng)于第一優(yōu)先等級,建立線性規(guī)劃問題:model:min=-d1;5*x1+10*x2<=60;x1-2*x2+d1_-d1=0;end運行結(jié)果:-d1=0(2)對應(yīng)于第二優(yōu)先等級,將-d1=0作為約束條件,建立線性規(guī)劃問題:min=d2_;5*x1+10*x2<=60;x1-2*x2+d1_-d1=0;4*x1+4*x2+d2_-d2=36;-d1=0;end運行結(jié)果:d2=0;(3).對應(yīng)于第三優(yōu)先等級,將-d1=0,-
2、d1=0作為約束條件,建立線性規(guī)劃問題:min=d3_;5*x1+10*x2<=60;x1-2*x2+d1_-d1=0;4*x1+4*x2+d2_-d2=36;6x1+8*x2+d3_-d3=48;-d1=0;d2=0;end運行結(jié)果:d3=0;X14.800000X22.400000二、動態(tài)規(guī)劃之0-1背包問題1、題目:給定n種物品和一背包。物品i的重量是Wi,其價值為Vi,背包的容量是c,問應(yīng)如何選擇裝入背包中的物品,使得裝入背包中物品的總價值最大。2、解題方法與思路:利用java求解,.思想方法是回溯思想3、需求分析對于給定n
3、種物品和一背包。在容量最大值固定的情況下,要求裝入的物品價值最大化4、java源程序及運行結(jié)果BackTrace.java*Tochangethistemplate,chooseTools
4、TemplateManager*andopenthetemplateintheeditor.*/packagesunfa;importjava.util.Date;publicclassBackTrace{/***@paramargs*/publicstaticvoidmain(String[]args){doublew[]={2,2,6,5,4
5、};doublev[]={6,3,5,4,6};intn=5;doublec=10;knapsack(v,w,c);System.out.println(bestp);}//比較兩個元素大小的類privatestaticclassElementimplementsComparable{intid;doubled;privateElement(intidd,doubledd){id=idd;d=dd;}publicintcompareTo(Objectx){doublexd=((Element)x).d;if(d6、1;if(d==xd)return0;return1;}publicbooleanequals(Objectx){returnd==((Element)x).d;}}staticdoublec;//背包容量staticintn;//物品數(shù)staticdouble[]w;//物品重量數(shù)組staticdouble[]p;//物品價值數(shù)組staticdoublecw;//當(dāng)前重量staticdoublecp;//當(dāng)前價值staticdoublebestp;//當(dāng)前最優(yōu)值staticint[]x;//解staticint[]sortX;//
7、排好序之后的解staticint[]bestX;//最有解staticDatedate=null;//@jve:decl-index=0:publicstaticdoubleknapsack(double[]pp,double[]ww,doublecc){c=cc;n=pp.length-1;cw=0.0;cp=0.0;bestp=0.0;Element[]q=newElement[n];//q為單位重量價值數(shù)組for(inti=1;i<=n;i++)q[i-1]=newElement(i,pp[i]/ww[i]);MergeSor
8、t.mergeSort(q);p=newdouble[n+1];w=newdouble[n+1];x=newint[n+1];sortX=newint[n+1];bestX=newint[n+1];for(inti=1;i<=n;i++){p[i]=pp[q[n-i].id];w[i]=ww[q[n-i].id];sortX[i]=q[n-i].id;}backtrack(1);//回溯搜索returnbestp;}privatestaticvoidbacktrack(inti){if(i>=n){if(cp>bestp){best
9、p=cp;for(intj=1;j<=n;j++){bestX[j]=x[j];}}return;}//搜索子樹if(cw+w[i]<=c){//進(jìn)入左子樹x[sortX[i]]=1;cw+=w[i];cp+=p[i];backtra