1、数学建模实验一数学规划模型AMPL求解实验一: 数学规划模型AMPL求解专业年级: 2014级信息与计算科学1班姓名: 黄志锐 学号:*一、实验目的1. 熟悉启动AMPL的方法。 2. 熟悉SCITE编辑软件的运行。 3. 熟悉AMPL基本编程。4. 熟悉AMPL求解数学规划模型的过程。二、实验内容1. 用AMPL求解下列问题并作灵敏度分析: 一奶制品加工厂用牛奶生产A1和A2两种奶制品,1桶牛奶可以在甲类设备上用12小时加工成3公斤A1或者在乙类设备上用8小时加工成4公斤A2,且都能全部售出,且每公斤A1获利24元,每公斤A2获利16元。先加工厂每天能得到50桶牛奶的供应,每天工人总的劳动时
2、间为480小时,并且甲类设备每天至多加工100公斤A1,乙类设备的加工能力没有限制,试为该厂制定一个计划,使每天的获利最大。基本模型:根据题意,设每天用桶牛奶生产,用桶牛奶生产,每天获利为元,则可建立线性规划模型如下:模型求解:使用AMPL编程求解上述线性规划模型(并作敏感性分析)代码如下:milk.mod:123456789set Products ordered; #产品集合param Timei in Products 0; #加工时间param Quani in Products0; #单位产量param Profiti in Products0; #单位利润var xi in Pro
3、ducts=0; #决策变量maximize profit:sumi in Products Profiti*Quani*xi;subject to raw:sumi in Products xi=50;subject to time:sumi in Products Timei*xi=480;subject to capacity: Quanfirst(Products)*xfirst(Products)=0; minimize tonkilometre:sumj in J(sumi in Ici,j*sqrt(xj-ai)2+(yj-bi)2);subject to Di i in I:
4、sumj in Jci,j = di;subject to Ej j in J: sumi in Ici,j =0;minimize tonkilometre: sumj in J(sumi in Ici,j*sqrt(1e-20+(xj-ai)2+(yj-bi)2);subject to Di i in I: sumj in Jci,j = di;subject to Ej j in J: sumi in Ici,j = ej;build2.dat:1234param a := 1 1.25 2 8.75 3 0.50 4 5.75 5 3.0 6 7.25;param b := 1 1.2
5、5 2 0.75 3 4.75 4 5.00 5 6.5 6 7.75;param d := 1 3.00 2 5.00 3 4.00 4 7.00 5 6.0 6 11.0;param e := 1 20 2 20;build2.run:12345678model build2.mod;data build2.dat;option solver SNOPT;solve; # 默认求解器minos求解此规划会陷入局部极小display x;display y;display c;display tonkilometre;结果分析:使用AMPL编程求解上述非线性规划模型结果如下: 通过分析上述结
6、果可知,当新料场位置分别为、和运量满足下表时 ,在其它条件不变下使总吨公里数最小,为85.266吨公里。123456(料场A)0500011(料场B)3047603. 某班准备从5名游泳队员中选择4人组成接力队,参与学校的4*100m混合接力比赛。5名队员4种泳姿的百米成绩如表所示,应如何选拔队员组成接力队?提示:1)建立0-1规划模型。2)若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 ,AMPL程序中0-1变量声明:var xi in I, j in J binary; 3)5名队员4种泳姿的百米成绩的表格可以采用矩阵描述如param Grade: 甲 乙 丙 丁 戊:=
7、 蝶泳 仰泳 蛙泳 自由泳基本模型:根据题意,记甲乙丙丁戊分别为队员;记蝶泳,仰泳,蛙泳,自由泳分别为泳姿。记队员的第种泳姿的百米最好成绩为,则有:66.857.278.070.067.475.666.067.874.271.087.066.484.669.683.858.653.059.457.262.4引入0-1变量,若选择队员参加泳姿的比赛,则记,否则记。设接力队成绩为,则可建立0-1规划模型如下:模型求解:使用AMPL编程求解上述线性规划模型代码如下:swim.mod:12345678set I := 1.5; set J := 1.4;param cI, J; var xi in I
8、, j in J binary; minimize z: sumj in J(sumi in Ici,j*xi,j);subject to person i in I: sumj in Jxi,j = 1;subject to position j in J: sumi in Ixi,j = 1;swim.dat:123456param c : 1 2 3 4 := 1 66.8 75.6 87.0 58.6 2 57.2 66.0 66.4 53.0 3 78.0 67.8 84.6 59.4 4 70.0 74.2 69.6 57.2 5 67.4 71.0 83.8 62.4;swim.
9、run:12345model swim.mod;data swim.dat;option solver cplex;solve;display x;结果分析:使用AMPL编程求解上述线性规划模型结果如下: 通过分析上述结果可知,应当选派甲乙丙丁4人组成接力队,分别参加自由泳、蝶泳、仰泳、蛙泳的比赛,历史总平均成绩为253.2秒。三、实验心得 通过本次实验,本人熟悉了AMPL基本编程和SCITE编辑软件的运用,了解了AMPL求解数学规划模型的过程,并发现了在使用AMPL求解非线性规划要注意选择合适的求解器。因为不同的求解器是使用不同的算法去求解非线性规划,所以针对不同类型的非线性规划应当选择不同的求解器,避免陷入局部极小或局部极大的问题,以及出现“根号下为零”的问题。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1