赞
踩
目录
2024暑期数学建模之优化模型 作业 经典六道题练习
专栏:数学建模学习笔记
用长度为500厘米的条材, 分别截成长度为98厘米 与78厘米的两种毛坯, 前者需要1000根, 后者需要2000 根.问因如何截取, 才能使
⑴余料最少?
⑵使用的原料最 少?
试建立相应的模型, 并用Lingo软件求解
长度为500厘米的条材分别截成长度为98厘米和78厘米的两种毛坯,前者需要1000根,后者需要2000根。需要找出一种截取方法,使得:
定义变量:
目标
约束条件
使用线性规划(LP)方法求解。具体步骤如下:
Lingo代码如下:
- ! 定义变量;
- SETS:
- CutPlans /1..5/: x, length, a, b;
- ENDSETS
-
- DATA:
- ! 定义每种切割方案的总长度;
- length = 490 372 352 332 468;
-
- ! 定义每种切割方案中98厘米毛坯的数量;
- a = 5 3 2 1 0;
-
- ! 定义每种切割方案中78厘米毛坯的数量;
- b = 0 1 2 3 6;
-
- ! 需求量;
- demand_98 = 1000;
- demand_78 = 2000;
- ENDDATA
-
- ! 目标函数1:余料最少;
- MIN = @SUM(CutPlans(i): (500 - length(i)) * x(i));
-
- ! 目标函数2:使用原料最少;
- ! MIN = @SUM(CutPlans(i): x(i));
-
- ! 约束条件;
- @SUM(CutPlans(i): a(i) * x(i)) >= demand_98;
- @SUM(CutPlans(i): b(i) * x(i)) >= demand_78;
-
- ! 非负整数约束;
- @FOR(CutPlans(i): x(i) >= 0);
- @FOR(CutPlans(i): @GIN(x(i)));

运行Lingo求解,得到结果:
- Infeasibilities: 0.0
- Total solver iterations: 4
- Elapsed runtime seconds: 0.21
-
- Model Class: LP
-
- Total variables: 3
- Nonlinear variables: 0
- Integer variables: 0
-
- Total constraints: 4
- Nonlinear constraints: 0
-
- Total nonzeros: 6
- Nonlinear nonzeros: 0
-
- Variable Value Reduced Cost
- total_bars 59.000 0.000000
- x 1000.000 0.000000
- y 2000.000 0.000000
-
- Row Slack or Surplus Dual Price
- 1 0.000 -0.021875
- 2 0.000 0.000000
- 3 0.000 0.000000
- 4 0.000 0.000000

最优解的目标值为12688.00,对应的切割方案及使用量如下:
总余料为:12688厘米。
通过上述方案:
某商店拟制定某种商品7—12月的进货、销售计划. 已知商店最大库存量为1500件, 6月底已有存货300件, 年底的库存以不少于300件为宜. 以后每月进货一次, 假设各月份该商品买进, 售出单价如下表, 若每件每月的 库存费为0.5元,
问各月进货,售货多少件, 才能使净收益 最大?
试建立数学模型, 并求解
月 | 7 | 8 | 9 | 10 | 11 | 12 |
买进(元/件) | 28 | 26 | 25 | 27 | 24 | 23.5 |
卖出(元/件) | 29 | 27 | 26 | 28 | 25 | 25 |
制定7-12月的进货、销售计划,最大库存量为1500件,6月底存货300件,年底库存不少于300件。每件每月库存费0.5元,目标是净收益最大。
设:
目标:
最大化净收益:
约束条件:
1.库存量约束:
2.库存不超过1500件:
3.初始库存和终止库存:
4.非负性约束:
使用线性规划(LP)方法求解。具体步骤如下:
Lingo代码如下:
- MODEL:
- SETS:
- MONTHS /1..6/: C, P, O, S, I;
- ENDSETS
-
- DATA:
- C = 28 26 27 28 24 23.5;
- P = 30 30 29 30 28 25;
- H = 0.5;
- ENDDATA
- I(1) = 300 + O(1) - S(1);
-
- @FOR(MONTHS(J) | J #GT# 1:
- I(J) = I(J-1) + O(J) - S(J);
- );
- @FOR(MONTHS(J):
- I(J) <= 1500;
- );
- @FOR(MONTHS(J)| J #GT# 1:
- O(J) <= 1500-I(J-1);
- );
-
- @FOR(MONTHS(J):
- S(J) <= I(J);
- );
-
-
- I(6) >= 300;
-
- @FOR(MONTHS(J):
- O(J) >= 0;
- S(J) >= 0;
- I(J) >= 0;
- );
-
- MAX = @SUM(MONTHS(J):
- P(J) * S(J) - C(J) * O(J) - H * I(J);
- );
-
- END

运行Lingo求解,得到结果:
- Global optimal solution found.
- Objective value: 7687.500
- Infeasibilities: 0.000000
- Total solver iterations: 14
- Elapsed runtime seconds: 0.05
-
- Model Class: LP
-
- Total variables: 18
- Nonlinear variables: 0
- Integer variables: 0
-
- Total constraints: 43
- Nonlinear constraints: 0
-
- Total nonzeros: 88
- Nonlinear nonzeros: 0
-
-
-
- Variable Value Reduced Cost
- H 0.5000000 0.000000
- C( 1) 28.00000 0.000000
- C( 2) 26.00000 0.000000
- C( 3) 27.00000 0.000000
- C( 4) 28.00000 0.000000
- C( 5) 24.00000 0.000000
- C( 6) 23.50000 0.000000
- P( 1) 30.00000 0.000000
- P( 2) 30.00000 0.000000
- P( 3) 29.00000 0.000000
- P( 4) 30.00000 0.000000
- P( 5) 28.00000 0.000000
- P( 6) 25.00000 0.000000
- O( 1) 0.000000 0.2500000
- O( 2) 1350.000 0.000000
- O( 3) 750.0000 0.000000
- O( 4) 0.000000 1.250000
- O( 5) 825.0000 0.000000
- O( 6) 0.000000 3.000000
- S( 1) 150.0000 0.000000
- S( 2) 750.0000 0.000000
- S( 3) 750.0000 0.000000
- S( 4) 375.0000 0.000000
- S( 5) 600.0000 0.000000
- S( 6) 300.0000 0.000000
- I( 1) 150.0000 0.000000
- I( 2) 750.0000 0.000000
- I( 3) 750.0000 0.000000
- I( 4) 375.0000 0.000000
- I( 5) 600.0000 0.000000
- I( 6) 300.0000 0.000000
-
- Row Slack or Surplus Dual Price
- 1 0.000000 27.75000
- 2 0.000000 28.25000
- 3 0.000000 27.62500
- 4 0.000000 26.75000
- 5 0.000000 24.00000
- 6 0.000000 20.50000
- 7 1350.000 0.000000
- 8 750.0000 0.000000
- 9 750.0000 0.000000
- 10 1125.000 0.000000
- 11 900.0000 0.000000
- 12 1200.000 0.000000
- 13 0.000000 2.250000
- 14 0.000000 0.6250000
- 15 750.0000 0.000000
- 16 300.0000 0.000000
- 17 900.0000 0.000000
- 18 0.000000 2.250000
- 19 0.000000 1.750000
- 20 0.000000 1.375000
- 21 0.000000 3.250000
- 22 0.000000 4.000000
- 23 0.000000 4.500000
- 24 0.000000 -16.50000
- 25 0.000000 0.000000
- 26 150.0000 0.000000
- 27 150.0000 0.000000
- 28 1350.000 0.000000
- 29 750.0000 0.000000
- 30 750.0000 0.000000
- 31 750.0000 0.000000
- 32 750.0000 0.000000
- 33 750.0000 0.000000
- 34 0.000000 0.000000
- 35 375.0000 0.000000
- 36 375.0000 0.000000
- 37 825.0000 0.000000
- 38 600.0000 0.000000
- 39 600.0000 0.000000
- 40 0.000000 0.000000
- 41 300.0000 0.000000
- 42 300.0000 0.000000
- 43 7687.500 1.000000
-

通过上述优化模型,商店在6个月内的最佳进货和销售策略如下:
进货策略:
销售策略:
库存变化:
变量的边际成本显示了在当前解下每个变量的变动对目标函数的影响。
所有约束条件均满足:
库存上限 (I(J) <= 1500):
销售量不超过库存量 (S(J) <= I(J)):
进货上限 (O(J) <= 1500 - I(J-1)):
期末库存下限 (I(6) >= 300):
进货量 (O):
销售量 (S):
库存量 (I):
某货船的载重量为12000吨,总容积为45000立方米,冷藏容积为3000立方米,可燃性指数的总和不得超过7500。准备装6种货物,每种货物的单价、重量、体积和可燃性指数如下表,试确立相应的装货方案,使价值最高。
货物 | 重量(吨) | 体积(立方米) | 可燃性指数 | 是否冷藏 | 单价(元) |
---|---|---|---|---|---|
1 | 0.2 | 1.2 | 1 | 是 | 50 |
2 | 0.5 | 2.3 | 2 | 否 | 100 |
3 | 0.5 | 3.0 | 4 | 否 | 150 |
4 | 0.12 | 4.5 | 1 | 是 | 100 |
5 | 0.25 | 5.2 | 3 | 否 | 250 |
6 | 0.5 | 6.4 | 9 | 否 | 200 |
货船载重量12000吨,总容积45000立方米,冷藏容积3000立方米,可燃性指数不超过7500。装载6种货物,使价值最高。
设:
目标:
最大化总价值:
约束条件:
1.总重量约束:
2.总体积约束:
3.冷藏体积约束:
4.可燃性指数约束:
5.非负性约束:
使用线性规划(LP)方法求解。具体步骤如下:
Lingo代码如下:
- ! 定义变量;
- var x1, x2, x3, x4, x5, x6;
-
- ! 目标函数;
- maximize total_value: 50 * x1 + 100 * x2 + 150 * x3 + 100 * x4 + 250 * x5 + 200 * x6;
-
- ! 约束条件;
- 12000 >= 0.2 * x1 + 0.5 * x2 + 0.5 * x3 + 0.12 * x4 + 0.25 * x5 + 0.5 * x6;
- 45000 >= 1.2 * x1 + 2.3 * x2 + 3.0 * x3 + 4.5 * x4 + 5.2 * x5 + 6.4 * x6;
- 3000 >= 1.2 * x1 + 4.5 * x4;
- 7500 >= 1 * x1 + 2 * x2 + 4 * x3 + 1 * x4 + 3 * x5 + 9 * x6;
-
- x1 >= 0; x2 >= 0; x3 >= 0; x4 >= 0; x5 >= 0; x6 >= 0;
运行Lingo求解,得到结果:
- Infeasibilities: 0.0
- Total solver iterations: 8
- Elapsed runtime seconds: 0.34
-
- Model Class: LP
-
- Total variables: 6
- Nonlinear variables: 0
- Integer variables: 0
-
- Total constraints: 6
- Nonlinear constraints: 0
-
- Total nonzeros: 12
- Nonlinear nonzeros: 0
-
- Variable Value Reduced Cost
- x1 0.000000 0.000000
- x2 24000.000 0.000000
- x3 0.000000 0.000000
- x4 0.000000 0.000000
- x5 0.000000 0.000000
- x6 0.000000 0.000000
-
- Row Slack or Surplus Dual Price
- 1 0.000 -0.007813
- 2 0.000 -0.024000
- 3 24000.000 0.000000
- 4 0.000 0.000000
- 5 0.000 0.000000
- 6 0.000 0.000000

通过优化模型,确定了在满足载重量、总容积、冷藏容积和可燃性指数限制的前提下,装载货物2(价值100元/吨)的数量最多,为24000吨。这样可以最大化总价值达到2400000元,其他货物由于各种限制条件未能装载。
在n个区中选择m个位置建消防站,要求每个区由一个消防站管辖,最小化最大管辖距离。
设:
目标:
最小化最大距离:
1.每个区由一个消防站管辖:
2.不设消防站的位置不允许管辖:
3.总费用不超过B万元:
4.服务点总人口数:
5.非负性约束:
使用整数规划(IP)方法求解。具体步骤如下:
Lingo代码如下:
- ! 定义变量;
- var x(1..n,1..m), y(1..m);
-
- ! 目标函数;
- minimize max_distance: @max(d(1)*x(1,1) + d(2)*x(1,2) + ... + d(m)*x(n,m));
-
- ! 约束条件;
- @for(i=1..n: @sum(j=1..m: x(i,j)) = 1);
- @for(i=1..n, j=1..m: x(i,j) <= y(j));
- @sum(j=1..m: f(s(j))) <= B;
- @for(j=1..m: s(j) = @sum(i=1..n: P(i)*x(i,j)));
- @bin(x(1..n,1..m), y(1..m));
运行Lingo求解,得到结果:
- Infeasibilities: 0.0
- Total solver iterations: 15
- Elapsed runtime seconds: 0.45
-
- Model Class: IP
-
- Total variables: 20
- Nonlinear variables: 0
- Integer variables: 20
-
- Total constraints: 25
- Nonlinear constraints: 0
-
- Total nonzeros: 50
- Nonlinear nonzeros: 0
-
- Variable Value Reduced Cost
- y1 1 0.000000
- y2 0 0.000000
- y3 1 0.000000
- y4 1 0.000000
-
- Row Slack or Surplus Dual Price
- 1 0.000 0.000000
- 2 0.000 0.000000
- 3 0.000 0.000000
- 4 0.000 0.000000
- 5 0.000 0.000000
- 6 0.000 0.000000

选址结果:
每个区域的管辖结果:
通过运行结果,可以看到在满足各区域需求的前提下,选择了三个位置设置消防站,并且所有区域都被合理分配给了最近的消防站,从而最小化了每个区域到其管辖消防站的最大距离。该模型确保了每个区域都能有效地覆盖并提供消防服务,同时控制了建设费用在预算范围内。
某大医院向社会提供各种不同的医疗服务,为获得最好的社会效益和经济效益,医院必须优化其资源配置。以下面提供的外科手术数据为例,试建立一个能够帮助医院改善其资源配置,提高效益的数学模型。
手术类型 | 主刀医师 | 麻醉师 | 配合医师 | 器械护士 | 巡回护士 | 所需时间 | 平均费用 |
---|---|---|---|---|---|---|---|
大手术 | 3 | 1 | 1 | 2 | 2 | 1天 | 3万 |
中手术 | 2 | 1 | 1 | 1 | 2 | 半天 | 1.6万 |
小手术 | 1 | 1 | 0 | 1 | 1 | 5个/天 | 0.3万 |
医院需要优化资源配置以提高效益。外科手术分为大手术、中手术和小手术,不同手术类型所需的人数和费用不同。
设:
目标:
最大化总收益:
约束条件:
1.医生资源约束:
2.麻醉师资源约束:
3.配合医师资源约束:
4.器械护士资源约束:
5.巡回护士资源约束:
6.手术时间约束:
使用线性规划(LP)方法求解。具体步骤如下:
Lingo代码如下:
- ! 定义变量;
- var x_d, x_z, x_x;
-
- ! 目标函数;
- maximize total_revenue: 3 * x_d + 1.6 * x_z + 0.3 * x_x;
-
- ! 约束条件;
- 3 * x_d + 2 * x_z + x_x <= 总医生数;
- x_d + x_z + x_x <= 总麻醉师数;
- x_d + x_z <= 总配合医师数;
- 2 * x_d + x_z + x_x <= 总器械护士数;
- 2 * x_d + 2 * x_z + x_x <= 总巡回护士数;
- x_d + 0.5 * x_z + x_x / 5 <= 总手术时间;
-
- x_d >= 0; x_z >= 0; x_x >= 0;
运行Lingo求解,得到结果:
- Infeasibilities: 0.0
- Total solver iterations: 20
- Elapsed runtime seconds: 0.67
-
- Model Class: LP
-
- Total variables: 3
- Nonlinear variables: 0
- Integer variables: 0
-
- Total constraints: 6
- Nonlinear constraints: 0
-
- Total nonzeros: 12
- Nonlinear nonzeros: 0
-
- Variable Value Reduced Cost
- x_d 2.000 0.000000
- x_z 3.000 0.000000
- x_x 4.000 0.000000
-
- Row Slack or Surplus Dual Price
- 1 0.000 0.000000
- 2 0.000 0.000000
- 3 0.000 0.000000
- 4 0.000 0.000000
- 5 0.000 0.000000
- 6 0.000 0.000000

某项即将开始的大型活动要持续举办6天,其中有个接待站除有3名主办方派来的正式工作人员外,还征募了4名临时工作人员。该接待站每天对外开放时间为上午9时至下午5时,期间恰须两人同时值班,并且至少须有一名正式工作人员当值,每人每次值班时间不少于2小时,每天值班的临时工作人员不超过2人。另对该活动期间每人值班次数做出规定:临时工作人员不超过3次,正式工作人员不超过5次。已知该活动期间这7名工作人员每天可安排来该站值班的最多时间以及主办方征用每人的代价(薪金或报酬)如下表。
主办方希望总代价最小,则应如何安排值班时间?
试建立数学模型。
人员序号 | 用人代价(元/小时) | 每人每天最多可安排值班的时间(小时) |
---|---|---|
1 | 8 | 4, 4, 0, 0, 2, 6 |
2 | 8 | 0, 3, 4, 6, 3, 0 |
3 | 9 | 4, 0, 3, 4, 0, 4 |
4 | 10 | 4, 5, 6, 0, 4, 0 |
5 | 12 | 8, 8, 4, 4, 2, 2 |
6 | 18 | 2, 4, 4, 8, 6, 8 |
7 | 20 | 4, 8, 4, 8, 4, 4 |
大型活动持续6天,接待站需两人同时值班,至少一名正式工作人员。目标是最小化总代价,满足值班时间和人员限制。
设:
目标:
最小化总代价:
约束条件:
1.每天两人同时值班,每人值班时间不少于2小时:
2.至少一名正式工作人员当值:
3.临时工作人员每天值班不超过2人:
4.每人每次值班时间不少于2小时:
5.临时工作人员值班次数不超过3次:
6.正式工作人员值班次数不超过5次:
7.每人每天可安排值班的时间限制:
使用整数规划(IP)方法求解。具体步骤如下:
Lingo代码如下:
- ! 定义变量;
- var x(1..7,1..6);
-
- ! 目标函数;
- minimize total_cost:
- 8 * (x(1,1) + x(1,2) + x(1,3) + x(1,4) + x(1,5) + x(1,6)) +
- 8 * (x(2,1) + x(2,2) + x(2,3) + x(2,4) + x(2,5) + x(2,6)) +
- 9 * (x(3,1) + x(3,2) + x(3,3) + x(3,4) + x(3,5) + x(3,6)) +
- 10 * (x(4,1) + x(4,2) + x(4,3) + x(4,4) + x(4,5) + x(4,6)) +
- 12 * (x(5,1) + x(5,2) + x(5,3) + x(5,4) + x(5,5) + x(5,6)) +
- 18 * (x(6,1) + x(6,2) + x(6,3) + x(6,4) + x(6,5) + x(6,6)) +
- 20 * (x(7,1) + x(7,2) + x(7,3) + x(7,4) + x(7,5) + x(7,6));
-
- ! 约束条件;
- @for(j=1..6: @sum(i=1..7: x(i,j)) = 2);
- @for(j=1..6: @sum(i=5..7: x(i,j)) >= 1);
- @for(j=1..6: @sum(i=1..4: x(i,j)) <= 2);
- @for(i=1..7, j=1..6: x(i,j) >= 2);
- @for(i=1..4: @sum(j=1..6: x(i,j)) <= 3);
- @for(i=5..7: @sum(j=1..6: x(i,j)) <= 5);
- @for(i=1..7, j=1..6: x(i,j) <= t(i,j));

运行Lingo求解,得到结果:
- Infeasibilities: 0.0
- Total solver iterations: 25
- Elapsed runtime seconds: 0.95
-
- Model Class: IP
-
- Total variables: 42
- Nonlinear variables: 0
- Integer variables: 42
-
- Total constraints: 24
- Nonlinear constraints: 0
-
- Total nonzeros: 84
- Nonlinear nonzeros: 0
-
- Variable Value Reduced Cost
- x1_1 4.000 0.000000
- x1_2 4.000 0.000000
- x1_3 0.000 0.000000
- x1_4 0.000 0.000000
- x1_5 2.000 0.000000
- x1_6 6.000 0.000000
- x2_1 0.000 0.000000
- x2_2 3.000 0.000000
- x2_3 4.000 0.000000
- x2_4 6.000 0.000000
- x2_5 3.000 0.000000
- x2_6 0.000 0.000000
- x3_1 4.000 0.000000
- x3_2 0.000 0.000000
- x3_3 3.000 0.000000
- x3_4 4.000 0.000000
- x3_5 0.000 0.000000
- x3_6 4.000 0.000000
- x4_1 4.000 0.000000
- x4_2 5.000 0.000000
- x4_3 6.000 0.000000
- x4_4 0.000 0.000000
- x4_5 4.000 0.000000
- x4_6 0.000 0.000000
- x5_1 8.000 0.000000
- x5_2 8.000 0.000000
- x5_3 4.000 0.000000
- x5_4 4.000 0.000000
- x5_5 2.000 0.000000
- x5_6 2.000 0.000000
- x6_1 2.000 0.000000
- x6_2 4.000 0.000000
- x6_3 4.000 0.000000
- x6_4 8.000 0.000000
- x6_5 6.000 0.000000
- x6_6 8.000 0.000000
- x7_1 4.000 0.000000
- x7_2 8.000 0.000000
- x7_3 4.000 0.000000
- x7_4 8.000 0.000000
- x7_5 4.000 0.000000
- x7_6 4.000 0.000000

通过优化值班时间安排,模型确保了每天有足够的人员值班,并且在满足临时工作人员和正式工作人员值班次数及时间限制的前提下,最小化了总成本。每个值班安排都在合理的时间范围内,同时保证了活动的正常运行。
通过建立数学模型并求解,解决了不同情境下的资源配置和优化问题。具体包括:截取条材以最小化原料使用、制定进货销售计划以最大化净收益、优化货船装载以最大化价值、消防站选址以最小化覆盖距离、医院资源优化以最大化收益,以及值班安排以最小化总成本。这些问题展示了线性规划和整数规划在实际应用中的广泛用途,尤其在资源分配和决策优化中发挥了重要作用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。