1、数学建模实验一 数学规划模型AMPL求解实验一: 数学规划模型AMPL求解一、实验目的1.熟悉启动AMPL的方法。 2.熟悉SCITE编辑软件的运行。 3.熟悉AMPL基本编程。4.熟悉AMPL求解数学规划模型的过程。二、实验原理 1. AMPL的启动与运行一奶制品加工厂用牛奶生产A1和A2两种奶制品,1桶牛奶可以在甲类设备上用12小时加工成3公斤A1或者在乙类设备上用8小时加工成4公斤A2,且都能全部售出,且每公斤A1获利24元,每公斤A2获利16元。先加工厂每天能得到50桶牛奶的供应,每天工人总的劳动时间为480小时,并且甲类设备每天至多加工100公斤A1,乙类设备的加工能力没有限制,试为
2、该厂制定一个计划,使每天的获利最大。建模:决策变量:x1桶牛奶生产A1 ,x2桶牛奶生产A2 目标函数: 约束条件:AMPL安装与设置(Windows下):(1)下载ampl.zip,限制版本,带求解器cplex(解线性规划),minos(解线性或非线性规划,默认求解器);(2)把ampl.zip解压至一个目录下,然后找到ampl.exe文件所在的目录,称为ampl根目录,比如C:ampl;(3)把ampl根目录设置到Windows路径上,方法:鼠标右击我的电脑-属性高级-点击环境变量出现环境变量窗口,在图下方的系统变量窗口找到Path变量,把C:ampl增加在变量值后面(注意前面加分号),如
3、下图;AMPL求解过程:(1)下载文本编辑器Scite.rar并解压到安装目录,双击scite.exe,得到如下界面 (2)建立模型文件:在空白窗口中输入如下代码,语言选项选择AMPL,保存为milk.modset Products ordered; #产品集合param Timei in Products 0; #加工时间param Quani in Products0; #单位产量param Profiti in Products0; #单位利润var xi in Products=0; #决策变量maximize profit: sumi in Products Profit i* Qu
4、an i*xi;subject to raw: sumi in Productsxi =50;subject to time:sumi in ProductsTimei*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: sumj in Jci,j = di;subject to Ej j in J: sumi in Ici,j
5、0; #加工时间param Quani in Products0; #单位产量param Profiti in Products0; #单位利润var xi in Products=0; #决策变量maximize profit: sumi in Products Profit i* Quan i*xi;subject to raw: sumi in Productsxi =50;subject to time:sumi in ProductsTimei*xi=480;subject to capacity: Quanfirst(Products)*xfirst(Products)=0; mi
6、nimize tonkilometre: sumj in J(sumi in Ici,j*sqrt(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 =0;#决策变量:料场j到工地i的运量var xj in J;#料场x坐标var yj in J;#料场y坐标#目标函数minimize f:sumj in J(sumi in Ici,j*sqrt(xj-ai)2+(yj-bi)2);# 约束函数subject to Di i in I: sumj in J
7、ci,j = di;subject to Ej j in J: sumi in Ici,j = ej;创建数据文件concrete.dat:param a := 1 1.25 2 8.75 3 0.5 4 5.75 5 3 6 7.25;param b := 1 1.25 2 0.75 3 4.75 4 5 5 6.5 6 7.75;param d := 1 3 2 5 3 4 4 7 5 6 6 11;param e := 1 20 2 20;创建模型文件concrete.run:model concrete.mod;data concrete.dat;option solver minos
8、;solve;display x,y;display c;display f;运行输出:结果:新料场位置(xj, yj)如下: xjyj17.257.7524.743.50运量cij分配如下:i123456ci10003611ci2354400时,总吨公里数最小,为97.6617公里。 3. 某班准备从5名游泳队员中选择4人组成接力队,参与学校的4*100m混合接力比赛。5名队员4种泳姿的百米成绩如表所示,应如何选拔队员组成接力队?提示:1)建立0-1规划模型。2)若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 ,AMPL程序中0-1变量声明:var xi in I, j i
9、n J binary; 3)5名队员4种泳姿的百米成绩的表格可以采用矩阵描述如param Grade: 甲 乙 丙 丁 戊:= 蝶泳 仰泳 蛙泳 自由泳解:创建模型文件concrete.mod:set I := 1.5;set J := 1.4;param ci in I,j in J;#队员i 第j 种泳姿的百米成绩var xi in I,j in J binary;#选择队员i参加泳姿j 的比赛minimize z:sumj in J(sumi in Ici,j*xi,j);subject to Ai in I:sumj in Jxi,j=1;subject to Bj in J:sumi
10、 in Ixi,j=1;创建数据文件concrete.dat:param c:1 2 3 4:= 1 66.8 75.6 87 58.62 57.2 66 66.4 533 78 67.8 84.6 59.44 70 74.2 69.6 57.25 67.4 71 83.8 62.4;创建模型文件concrete.run:model swim.mod;data swim.dat;option solver minos;solve; display x;display z;运行输出:结果:由队员1参加自由泳,由队员2参加蝶泳,由队员3参加仰泳,由队员4参加蛙泳,队员5不参加比赛,此时用时最短,为253.2秒。四、实验心得在实验过程中掌握了AMPL语言的基本编程和使用方法,并用之求解数学规划和0-1模型等数学模型,在这三个实验中,体会到了不同的求解器minos和cplex之间的不同之处,minos无法进行灵敏度分析,而cplex可以,此外,minos求解器得出的值具有较大的精度,可以显示到小数点17位,而cplex无法达到这样的精度。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1