数学建模实验一数学规划模型AMPL求解.docx

上传人:b****1 文档编号:22882459 上传时间:2023-04-28 格式:DOCX 页数:15 大小:114.90KB
下载 相关 举报
数学建模实验一数学规划模型AMPL求解.docx_第1页
第1页 / 共15页
数学建模实验一数学规划模型AMPL求解.docx_第2页
第2页 / 共15页
数学建模实验一数学规划模型AMPL求解.docx_第3页
第3页 / 共15页
数学建模实验一数学规划模型AMPL求解.docx_第4页
第4页 / 共15页
数学建模实验一数学规划模型AMPL求解.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数学建模实验一数学规划模型AMPL求解.docx

《数学建模实验一数学规划模型AMPL求解.docx》由会员分享,可在线阅读,更多相关《数学建模实验一数学规划模型AMPL求解.docx(15页珍藏版)》请在冰豆网上搜索。

数学建模实验一数学规划模型AMPL求解.docx

数学建模实验一数学规划模型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桶牛奶的供应,每天工人总的劳动时间为480小时,并且甲类设备每天至多加工100公斤A1,乙类设备的加工能力没有限制,试为该厂制定一个计划,使每天的获利最大。

基本模型:

根据题意,设每天用

桶牛奶生产

,用

桶牛奶生产

,每天获利为

元,则可建立线性规划模型如下:

模型求解:

使用AMPL编程求解上述线性规划模型(并作敏感性分析)代码如下:

milk.mod:

1

2

3

4

5

6

7

8

9

setProductsordered;#产品集合

paramTime{iinProducts}>0;#加工时间

paramQuan{iinProducts}>0;#单位产量

paramProfit{iinProducts}>0;#单位利润

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;

milk.dat:

1

2

3

4

setProducts:

=A1A2;

paramTime:

=A112A28;

paramQuan:

=A13A24;

paramProfit:

=A124A216;

milk.run:

1

2

3

4

5

6

7

8

9

modelmilk.mod;

datamilk.dat;

optionsolvercplex;

optioncplex_options'sensitivity';

solve;

displayx;

displayx.rc,x.down,x.up;

displayraw,time,capacity;

displayraw.down,raw.up,raw.current,raw.slack;

结果分析:

使用AMPL编程求解上述线性规划模型(并作敏感性分析)结果如下:

通过分析上述结果可知,该线性规划模型的全局最优解为

,则最优值为3360(即最大利润为3360元)。

求解过程中迭代次数为2次。

对上述线性规划模型进行敏感度分析有:

1.目标函数系数变化范围:

x.rcx.downx.up:

=

x106496

x204872

;

即x.rc为最优解下“资源”增加1单位时“效益”的增量;x.down,x.up为最优解不变时目标函数系数允许变化范围。

2.影子价格

raw=48原料增加1单位,利润增长48;

time=2时间增加1单位,利润增长2;

capacity=0加工能力增长不影响利润

即1桶牛奶的影子价格为48元,1小时劳动的影子价格为2元,甲类设备的影子价格为0元。

3.影子价格有意义时约束右端的允许变化范围;

raw.down=43.3333

raw.up=60

raw.current=50

raw.slack=0

即原料最少到43.3,最大到60,slack=0意为原料用完。

2.某公司有6个建筑工地,位置坐标为(ai,bi)(单位:

公里),水泥日用量di(单位:

吨)

i

a

1.25

8.75

0.5

5.75

3

7.25

b

1.25

0.75

4.75

5

6.5

7.75

d

3

5

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):

基本模型:

根据题意,设从A,B两料场分别向各工地运送

吨水泥,则可建立线性规划模型如下:

模型求解:

使用AMPL编程求解上述线性规划模型代码如下:

build1.mod:

1

2

3

4

5

6

7

8

9

10

11

12

13

setI:

=1..6;

setJ:

={1,2};

paramx{jinJ};

paramy{jinJ};

parama{iinI};

paramb{iinI};

paramd{iinI};

parame{jinJ};

varc{iinI,jinJ}>=0;

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];

build1.dat:

1

2

3

4

5

6

paramx:

=1522;

paramy:

=1127;

parama:

=11.2528.7530.5045.7553.067.25;

paramb:

=11.2520.7534.7545.0056.567.75;

paramd:

=13.0025.0034.0047.0056.0611.0;

parame:

=120220;

build1.run:

1

2

3

4

5

modelbuild1.mod;

databuild1.dat;

optionsolvercplex;

solve;

displayc;

结果分析:

使用AMPL编程求解上述线性规划模型结果如下:

通过分析上述结果可知,从A,B两料场按下表分别向各工地运送水泥,使总的吨公里数最小,约为136.2吨公里。

1

2

3

4

5

6

(料场A)

3

5

0

7

0

1

(料场B)

0

0

4

0

6

10

问题2):

基本模型:

根据题意,可建立非线性规划模型如下:

模型求解:

使用AMPL编程求解上述非线性规划模型代码如下:

build2.mod:

1

2

3

4

5

6

7

8

9

10

11

12

13

setI:

=1..6;

setJ:

={1,2};

parama{iinI};

paramb{iinI};

paramd{iinI};

parame{jinJ};

varx{jinJ};

vary{jinJ};

varc{iinI,jinJ}>=0;

minimizetonkilometre:

sum{jinJ}(sum{iinI}c[i,j]*sqrt(1e-20+(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];

build2.dat:

1

2

3

4

parama:

=11.2528.7530.5045.7553.067.25;

paramb:

=11.2520.7534.7545.0056.567.75;

paramd:

=13.0025.0034.0047.0056.0611.0;

parame:

=120220;

build2.run:

1

2

3

4

5

6

7

8

modelbuild2.mod;

databuild2.dat;

optionsolverSNOPT;

solve;#默认求解器minos求解此规划会陷入局部极小

displayx;

displayy;

displayc;

displaytonkilometre;

结果分析:

使用AMPL编程求解上述非线性规划模型结果如下:

通过分析上述结果可知,当新料场位置分别为

和运量满足下表时,在其它条件不变下使总吨公里数最小,为85.266吨公里。

1

2

3

4

5

6

(料场A)

0

5

0

0

0

11

(料场B)

3

0

4

7

6

0

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:

甲乙丙丁戊:

=

蝶泳

仰泳

蛙泳

自由泳

基本模型:

根据题意,记甲乙丙丁戊分别为队员

;记蝶泳,仰泳,蛙泳,自由泳分别为泳姿

记队员

的第

种泳姿的百米最好成绩

为,则有:

66.8

57.2

78.0

70.0

67.4

75.6

66.0

67.8

74.2

71.0

87.0

66.4

84.6

69.6

83.8

58.6

53.0

59.4

57.2

62.4

引入0-1变量

,若选择队员

参加泳姿

的比赛,则记

,否则记

设接力队成绩为

,则可建立0-1规划模型如下:

模型求解:

使用AMPL编程求解上述线性规划模型代码如下:

swim.mod:

1

2

3

4

5

6

7

8

setI:

=1..5;

setJ:

=1..4;

paramc{I,J};

varx{iinI,jinJ}binary;

minimizez:

sum{jinJ}(sum{iinI}c[i,j]*x[i,j]);

subjecttoperson{iinI}:

sum{jinJ}x[i,j]<=1;

subjecttoposition{jinJ}:

sum{iinI}x[i,j]=1;

swim.dat:

1

2

3

4

5

6

paramc:

1234:

=

166.875.687.058.6

257.266.066.453.0

378.067.884.659.4

470.074.269.657.2

567.471.083.862.4;

swim.run:

1

2

3

4

5

modelswim.mod;

dataswim.dat;

optionsolvercplex;

solve;

displayx;

结果分析:

使用AMPL编程求解上述线性规划模型结果如下:

通过分析上述结果可知,应当选派甲乙丙丁4人组成接力队,分别参加自由泳、蝶泳、仰泳、蛙泳的比赛,历史总平均成绩为253.2秒。

 

三、实验心得

通过本次实验,本人熟悉了AMPL基本编程和SCITE编辑软件的运用,了解了AMPL求解数学规划模型的过程,并发现了在使用AMPL求解非线性规划要注意选择合适的求解器。

因为不同的求解器是使用不同的算法去求解非线性规划,所以针对不同类型的非线性规划应当选择不同的求解器,避免陷入局部极小或局部极大的问题,以及出现“根号下为零”的问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1