数学建模实验一 数学规划模型AMPL求解Word下载.docx
- 文档编号:17093402
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:211.79KB
数学建模实验一 数学规划模型AMPL求解Word下载.docx
《数学建模实验一 数学规划模型AMPL求解Word下载.docx》由会员分享,可在线阅读,更多相关《数学建模实验一 数学规划模型AMPL求解Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
(1)下载文本编辑器Scite.rar并解压到安装目录,双击scite.exe,得到如下界面
(2)建立模型文件:
在空白窗口中输入如下代码,语言选项选择AMPL,保存为milk.mod
setProductsordered;
#产品集合
paramTime{iinProducts}>
0;
#加工时间
paramQuan{iinProducts}>
#单位产量
paramProfit{iinProducts}>
#单位利润
varx{iinProducts}>
=0;
#决策变量
maximizeprofit:
sum{iinProducts}Profit[i]*Quan[i]*x[i];
subjecttoraw:
sum{iinProducts}x[i]<
=50;
subjecttotime:
sum{iinProducts}Time[i]*x[i]<
=480;
subjecttocapacity:
Quan[first(Products)]*x[first(Products)]<
=100;
(2)建立数据文件:
新建文件,输入如下代码,保存为milk.dat
setProducts:
=A1A2;
paramTime:
=A112A28;
paramQuan:
=A13A24;
paramProfit:
=A124A216;
(3)建立批处理文件:
新建文件,输入如下代码,保存为milk.run
modelmilk.mod;
datamilk.dat;
optionsolvercplex;
solve;
displayx;
注意:
模型文件、数据文件和批处理文件的文件名应该相同,保存在同一文件夹。
最好保存在安装路径的根目录,如C:
\ampl。
(4)运行,按F5(或工具/运行),结果如下:
(5)灵敏度分析:
optioncplex_options'
sensitivity'
;
displayx.rc,x.down,x.up;
displayraw,time,capacity;
displayraw.down,raw.up,raw.current,raw.slack;
1.目标函数系数变化范围:
x.rcx.downx.up:
=
A106496
A204872
x.rc最优解下“资源”增加1单位时“效益”的增量;
x.down,x.up最优解不变时目标函数系数允许变化范围。
2.影子价格
displayraw,time,capacity;
raw=48原料增加1单位,利润增长48;
time=2时间增加1单位,利润增长2;
capacity=0加工能力增长不影响利润
3.影子价格有意义时约束右端的允许变化范围;
raw.down=43.3333
raw.up=60
raw.current=50
raw.slack=0
原料最少到43.3,最大到60,slack=0意为原料用完.
除了在Scite的界面下运行程序以外,也可以双击ampl文件夹中的sw.exe,在窗口中输入ampl,在ampl提示符下输入命令。
如下图:
2 编写AMPL程序并求解
某公司有6个建筑工地,位置坐标为(ai,bi)(单位:
公里),水泥日用量di(单位:
吨)
i
1
2
3
4
5
6
a
1.25
8.75
0.5
5.75
3
7.25
b
0.75
4.75
5
6.5
7.75
d
4
7
6
11
1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨,制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。
2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij,在其它条件不变下使总吨公里数最小。
提示:
1)问题1为线性规划,问题2为非线性规划。
2)CPLEX无法求解非线性规划问题。
可以用默认求解器MINOS求解(能求解线性和非线性规划)。
问题1参考:
模型:
AMPL程序:
(1)模型文件:
setI:
=1..6;
setJ:
={1,2};
paramx{jinJ};
paramy{jinJ};
parama{iinI};
paramb{iinI};
paramd{iinI};
parame{jinJ};
varc{iinI,jinJ}>
minimizetonkilometre:
sum{jinJ}(sum{iinI}c[i,j]*sqrt((x[j]-a[i])^2+(y[j]-b[i])^2));
subjecttoDi{iinI}:
sum{jinJ}c[i,j]=d[i];
subjecttoEj{jinJ}:
sum{iinI}c[i,j]<
=e[j];
(2)数据文件:
paramx:
=1522;
paramy:
=1127;
parama:
=11.2528.7530.545.755367.25;
paramb:
=11.2520.7534.754556.567.75;
paramd:
=1325344756611;
parame:
=120220;
(3)批处理文件:
modeladd.mod;
dataadd.dat;
#默认求解器minos
displayc;
三、实验内容
1.用AMPL求解下列问题并作灵敏度分析:
解:
创建模型文件milk.mod,输入:
创建数据文件milk.dat,输入:
创建处理文件milk.run,输入:
optionsolverminos;
displayprofit;
运行输出:
结果:
得出最优解为x1=20,x2=30,获利最大为3360元。
2.某公司有6个建筑工地,位置坐标为(ai,bi)(单位:
(1)
创建模型文件concrete.mod:
创建数据文件concrete.dat:
=1522;
=1127;
=11.2528.7530.545.755367.25;
=11.2520.7534.754556.567.75;
=1325344756611;
=120220;
创建模型文件concrete.run:
modelconcrete.mod;
dataconcrete.dat;
水泥分配如下表:
1
2
A
B
10
可得总的吨公里数最小,为136.228公里。
(2)
#工地x坐标
#工地y坐标
#水泥日用量
#料场日产水泥量
#决策变量:
料场j到工地i的运量
varx{jinJ};
#料场x坐标
vary{jinJ};
#料场y坐标
#目标函数
minimizef:
sum{jinJ}(sum{iinI}c[i,j]*sqrt((x[j]-a[i])^2+(y[j]-b[i])^2));
#约束函数
displayx,y;
displayf;
新料场位置(xj,yj)如下:
xj
yj
4.74
3.50
运量cij分配如下:
ci1
ci2
时,总吨公里数最小,为97.6617公里。
3.某班准备从5名游泳队员中选择4人组成接力队,参与学校的4*100m混合接力比赛。
5名队员4种泳姿的百米成绩如表所示,应如何选拔队员组成接力队?
1)建立0-1规划模型。
2)若选择队员i参加泳姿j的比赛,记xij=1,否则记xij=0,AMPL程序中0-1变量声明:
varx{iinI,jinJ}binary;
3)5名队员4种泳姿的百米成绩的表格可以采用矩阵描述如
paramGrade:
甲乙丙丁戊:
蝶泳
仰泳
蛙泳
自由泳
=1..5;
=1..4;
paramc{iinI,jinJ};
#队员i第j种泳姿的百米成绩
varx{iinI,jinJ}binary;
#选择队员i参加泳姿j的比赛
minimizez:
sum{jinJ}(sum{iinI}c[i,j]*x[i,j]);
subjecttoA{iinI}:
sum{jinJ}x[i,j]<
=1;
subjecttoB{jinJ}:
sum{iinI}x[i,j]=1;
paramc:
1234:
=
166.875.68758.6
257.26666.453
37867.884.659.4
47074.269.657.2
567.47183.862.4;
modelswim.mod;
dataswim.dat;
displayz;
由队员1参加自由泳,由队员2参加蝶泳,由队员3参加仰泳,由队员4参加蛙泳,队员5不参加比赛,此时用时最短,为253.2秒。
四、实验心得
在实验过程中掌握了AMPL语言的基本编程和使用方法,并用之求解数学规划和0-1模型等数学模型,在这三个实验中,体会到了不同的求解器minos和cplex之间的不同之处,minos无法进行灵敏度分析,而cplex可以,此外,minos求解器得出的值具有较大的精度,可以显示到小数点17位,而cplex无法达到这样的精度。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学建模实验一 数学规划模型AMPL求解 数学 建模 实验 规划 模型 AMPL 求解