一、投资计划问题
某地区在今后3年内有4种投资机会,第一种是在3年内每年年初投资,年底可获利润20%,并可将本金收回。第二种是在第一年年初投资,第二年年底可获利50%,并可将本金收回,但该项投资金额不超过2百万元。第三种是在第二年年初投资,第三年年底收回本金,并获利60%,但该项投资金额不超过1.5百万元。第四种是在第三年年初投资,第三年年底收回本金,并可获利40%,但该项投资金额不超过1百万元。现在该地区准备了3百万元资金,如何制定投资方案,使到第三年年末本利的和最大?
解:解:设x1,x2,x3,x4依次表示从一种投资方案到第四种投资方案的投资额
输入模型:
max=x1*1.2+x2*1.5+(x1+x3)*1.2+x4*1.6+(x1+x3+x5)*1.2+x6*1.4;
x1+x2+x3+x4+x5+x5+x6=3;
x2<2;
x4<1.5;
x6<1;
end
计算结果如下:
Global optimal solution found.
Objective value: 10.80000
Total solver iterations: 0
Variable Value Reduced Cost
X1 3.000000 0.000000
X2 0.000000 2.100000
X3 0.000000 1.200000
X4 0.000000 2.000000
X5 0.000000 6.000000
X6 0.000000 2.200000
Row Slack or Surplus Dual Price
1 10.80000 1.000000
2 0.000000 3.600000
3 2.000000 0.000000
4 1.500000 0.000000
5 1.000000 0.000000
本利和最大为10.80000
二、配料问题
某冶炼厂计划炼制含甲、乙、丙、丁4种金属成分的合金1吨,4种金属的含量比例为:甲不少于23%,乙不多于15%,丙不多于4%,丁介于35%~65%之间,此外不允许有其他成分。该厂准备用6种不同等级的矿石熔炼这种合金,各种矿石中的杂质在熔炼中废弃。现将每种矿石中的4种金属含量和价格列表如下,试计算如何选配各种矿石才能使合金的原料成本达到最低。
金属含量和价格
解:设x1,x2,x3,x4,x5,x6依次表示矿石1到矿石6所需的用量
程序如下:
min=23*x1+20*x2+18*x3+10*x4+27*x5+12*x6;
0.25*x1+0.4*x2+0.2*x3+0.2*x5+0.08*x6>0.23;
0.1*x1+0.1*x3+0.15*x4+0.2*x5+0.05*x6<0.15;
0.1*x1+0.05*x4+0.1*x6<0.04;
0.25*x1+0.3*x2+0.3*x3+0.2*x4+0.4*x5+0.17*x6>0.35;
0.25*x1+0.3*x2+0.3*x3+0.2*x4+0.4*x5+0.17*x6<0.65;
0.25*x1+0.4*x2+0.2*x3+0.2*x5+0.08*x6+0.1*x1+0.1*x3+0.15*x4+0.2*x5+0.05*x6+0.1*x1+0.05*x4+0.1*x6+0.25*x1+0.3*x2+0.3*x3+0.2*x4+0.4*x5+0.17*x6=1;
End
结果如下:
Global optimal solution found.
Objective value: 27.42857
Total solver iterations: 1
Variable Value Reduced Cost
X1 0.000000 5.857143
X2 0.9714286 0.000000
X3 0.000000 0.8571429
X4 0.8000000 0.000000
X5 0.000000 4.142857
X6 0.000000 3.428571
Row Slack or Surplus Dual Price
1 27.42857 -1.000000
2 0.1585714 0.000000
3 0.3000000E-01 0.000000
4 0.000000 28.57143
5 0.1014286 0.000000
6 0.1985714 0.000000
7 0.000000 -28.57143
解得 最低成本为27.42857 最优解 X2=0.971429,X4=0.8
三、下料问题
有一批500cm长的条材,要截成98cm长的毛坯1000根、78cm长的毛坯20##根。现有6种下料方法,每种方法截出两种毛坯的根数和残料的长度列表如下,要求计算如何下料可使所用条材根数最少。
6种下料方法比较
解:设x1为方法1所用的条材根数,x2为方法2所用的条材根数,x3为方法3所用的条材根数,x4为方法4所用的条材根数,x5为方法5所用的条材根数,x6为方法6所用的条材根数 输入程序:
min=x1+x2+x3+x4+x5+x6;
5*x1+4*x2+3*x3+2*x4+x5=1000;
x2+2*x3+3*x4+5*x5+6*x6=2000;
end
结果如下:
Global optimal solution found.
Objective value: 520.0000
Total solver iterations: 0
Variable Value Reduced Cost
X1 120.0000 0.000000
X2 0.000000 0.4000000E-01
X3 0.000000 0.8000000E-01
X4 0.000000 0.1200000
X5 400.0000 0.000000
X6 0.000000 0.4000000E-01
Row Slack or Surplus Dual Price
1 520.0000 -1.000000
2 0.000000 -0.2000000
3 0.000000 -0.1600000
解得 : 用掉条材根数最少为520 最优解 x1=120,x5=400
四、资源分配问题
某个中型的百货商场对售货人员的需求经过统计分析如下表所示。
为了保证销售人员充分休息,售货人员每周工作五天,工作的五天连续。休息两天,并要求休息的两天是连续的。问应该如何安排售货人员的作息,既能满足工作需要,又使配备的售货人员的人数最少?
解:x1,x2,x3,x4,x5,x6,x7依次表示每天安排的售货员人数
sets:
days/x1..x7/:required,start;
endsets
data:
required=15 24 25 19 31 28 28;
enddata
min=@sum(days:start);
@for(days(j):
@sum(days(i)|i#le#5:
start(@wrap(j+i+2,7))) >=required(j));
end
结果如下:
Global optimal solution found.
Objective value: 36.00000
Total solver iterations: 11
Variable Value Reduced Cost
REQUIRED( X1) 15.00000 0.000000
REQUIRED( X2) 24.00000 0.000000
REQUIRED( X3) 25.00000 0.000000
REQUIRED( X4) 19.00000 0.000000
REQUIRED( X5) 31.00000 0.000000
REQUIRED( X6) 28.00000 0.000000
REQUIRED( X7) 28.00000 0.000000
START( X1) 3.000000 0.000000
START( X2) 5.000000 0.000000
START( X3) 12.00000 0.000000
START( X4) 0.000000 0.3333333
START( X5) 11.00000 0.000000
START( X6) 0.000000 0.000000
START( X7) 5.000000 0.000000
Row Slack or Surplus Dual Price
1 36.00000 -1.000000
2 4.000000 0.000000
3 0.000000 -0.3333333
4 0.000000 -0.3333333
5 6.000000 0.000000
6 0.000000 -0.3333333
7 0.000000 0.000000
8 0.000000 -0.3333333
五、计算如下运输问题:
解:x1,x2,x3,x4,x5,x6是6个产地,y1,y2,y3,y4,y5,y6,y7,y8是8个销地
输入模型:
sets:
need/x1,x2,x3,x4,x5,x6/:re;
coul/y1,y2,y3,y4,y5,y6,y7,y8/:requ;
link(need,coul):cost,num;
endsets
data:
cost=6 2 6 7 4 2 5 9
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
re=60 55 51 43 41 52;
requ=35 37 22 32 41 32 43 38;
enddata
min=@sum(link:cost*num);
@for(need(i):
@sum(coul(j):num(i,j))<=re(i));
@for(coul(j):
@sum(need(i):num(i,j))>=requ(j));
end
结果如下:
Global optimal solution found.
Objective value: 664.0000
Total solver iterations: 25
Variable Value Reduced Cost
RE( X1) 60.00000 0.000000
RE( X2) 55.00000 0.000000
RE( X3) 51.00000 0.000000
RE( X4) 43.00000 0.000000
RE( X5) 41.00000 0.000000
RE( X6) 52.00000 0.000000
REQU( Y1) 35.00000 0.000000
REQU( Y2) 37.00000 0.000000
REQU( Y3) 22.00000 0.000000
REQU( Y4) 32.00000 0.000000
REQU( Y5) 41.00000 0.000000
REQU( Y6) 32.00000 0.000000
REQU( Y7) 43.00000 0.000000
REQU( Y8) 38.00000 0.000000
COST( X1, Y1) 6.000000 0.000000
COST( X1, Y2) 2.000000 0.000000
COST( X1, Y3) 6.000000 0.000000
COST( X1, Y4) 7.000000 0.000000
COST( X1, Y5) 4.000000 0.000000
COST( X1, Y6) 2.000000 0.000000
COST( X1, Y7) 5.000000 0.000000
COST( X1, Y8) 9.000000 0.000000
COST( X2, Y1) 4.000000 0.000000
COST( X2, Y2) 9.000000 0.000000
COST( X2, Y3) 5.000000 0.000000
COST( X2, Y4) 3.000000 0.000000
COST( X2, Y5) 8.000000 0.000000
COST( X2, Y6) 5.000000 0.000000
COST( X2, Y7) 8.000000 0.000000
COST( X2, Y8) 2.000000 0.000000
COST( X3, Y1) 5.000000 0.000000
COST( X3, Y2) 2.000000 0.000000
COST( X3, Y3) 1.000000 0.000000
COST( X3, Y4) 9.000000 0.000000
COST( X3, Y5) 7.000000 0.000000
COST( X3, Y6) 4.000000 0.000000
COST( X3, Y7) 3.000000 0.000000
COST( X3, Y8) 3.000000 0.000000
COST( X4, Y1) 7.000000 0.000000
COST( X4, Y2) 6.000000 0.000000
COST( X4, Y3) 7.000000 0.000000
COST( X4, Y4) 3.000000 0.000000
COST( X4, Y5) 9.000000 0.000000
COST( X4, Y6) 2.000000 0.000000
COST( X4, Y7) 7.000000 0.000000
COST( X4, Y8) 1.000000 0.000000
COST( X5, Y1) 2.000000 0.000000
COST( X5, Y2) 3.000000 0.000000
COST( X5, Y3) 9.000000 0.000000
COST( X5, Y4) 5.000000 0.000000
COST( X5, Y5) 7.000000 0.000000
COST( X5, Y6) 2.000000 0.000000
COST( X5, Y7) 6.000000 0.000000
COST( X5, Y8) 5.000000 0.000000
COST( X6, Y1) 5.000000 0.000000
COST( X6, Y2) 5.000000 0.000000
COST( X6, Y3) 2.000000 0.000000
COST( X6, Y4) 2.000000 0.000000
COST( X6, Y5) 8.000000 0.000000
COST( X6, Y6) 1.000000 0.000000
COST( X6, Y7) 4.000000 0.000000
COST( X6, Y8) 3.000000 0.000000
NUM( X1, Y1) 0.000000 5.000000
NUM( X1, Y2) 19.00000 0.000000
NUM( X1, Y3) 0.000000 5.000000
NUM( X1, Y4) 0.000000 7.000000
NUM( X1, Y5) 41.00000 0.000000
NUM( X1, Y6) 0.000000 2.000000
NUM( X1, Y7) 0.000000 2.000000
NUM( X1, Y8) 0.000000 10.00000
NUM( X2, Y1) 1.000000 0.000000
NUM( X2, Y2) 0.000000 4.000000
NUM( X2, Y3) 0.000000 1.000000
NUM( X2, Y4) 32.00000 0.000000
NUM( X2, Y5) 0.000000 1.000000
NUM( X2, Y6) 0.000000 2.000000
NUM( X2, Y7) 0.000000 2.000000
NUM( X2, Y8) 0.000000 0.000000
NUM( X3, Y1) 0.000000 4.000000
NUM( X3, Y2) 11.00000 0.000000
NUM( X3, Y3) 0.000000 0.000000
NUM( X3, Y4) 0.000000 9.000000
NUM( X3, Y5) 0.000000 3.000000
NUM( X3, Y6) 0.000000 4.000000
NUM( X3, Y7) 40.00000 0.000000
NUM( X3, Y8) 0.000000 4.000000
NUM( X4, Y1) 0.000000 4.000000
NUM( X4, Y2) 0.000000 2.000000
NUM( X4, Y3) 0.000000 4.000000
NUM( X4, Y4) 0.000000 1.000000
NUM( X4, Y5) 0.000000 3.000000
NUM( X4, Y6) 5.000000 0.000000
NUM( X4, Y7) 0.000000 2.000000
NUM( X4, Y8) 38.00000 0.000000
NUM( X5, Y1) 34.00000 0.000000
NUM( X5, Y2) 7.000000 0.000000
NUM( X5, Y3) 0.000000 7.000000
NUM( X5, Y4) 0.000000 4.000000
NUM( X5, Y5) 0.000000 2.000000
NUM( X5, Y6) 0.000000 1.000000
NUM( X5, Y7) 0.000000 2.000000
NUM( X5, Y8) 0.000000 5.000000
NUM( X6, Y1) 0.000000 3.000000
NUM( X6, Y2) 0.000000 2.000000
NUM( X6, Y3) 22.00000 0.000000
NUM( X6, Y4) 0.000000 1.000000
NUM( X6, Y5) 0.000000 3.000000
NUM( X6, Y6) 27.00000 0.000000
NUM( X6, Y7) 3.000000 0.000000
NUM( X6, Y8) 0.000000 3.000000
Row Slack or Surplus Dual Price
1 664.0000 -1.000000
2 0.000000 3.000000
3 22.00000 0.000000
4 0.000000 3.000000
5 0.000000 1.000000
6 0.000000 2.000000
7 0.000000 2.000000
8 0.000000 -4.000000
9 0.000000 -5.000000
10 0.000000 -4.000000
11 0.000000 -3.000000
12 0.000000 -7.000000
13 0.000000 -3.000000
14 0.000000 -6.000000
15 0.000000 -2.000000
六、目标规划
某单位领导在考虑单位职工的升级调资方案时,依次遵守以下规定:
(1)不超过年工资总额60000元;
(2)每级的人数不超过定编规定的人数;
(3)Ⅱ、Ⅲ级的升级面尽可能达到现有人数的20%;
(4)Ⅲ级不足编制的人数可录用新职工,又Ⅰ级的职工中有10%要退休。
有关资料汇总于下表中,问该领导应如何拟定一个满意的方案。
解:设x1,x2分别表示提升到Ⅰ级,Ⅱ级的人数,x3表示录用到Ⅲ级的新职工人数
min=10000*d1p+100*(d2p+d3p+d4p)+d5m+d6m;
2000*(9+x1)+1500*(12-x1+x2)+1000*(15-x2+x3)+d1p-d1m=60000;
9+x1+d2p-d2m=12;
12-x1+x2+d3p+d3m=15;
15-x2+x3+d4p-d4m=15;
x1+d5p-d5m=2.4;
x2+d6p-d6m=3;
end
结果如下:
Global optimal solution found.
Objective value: 0.6000000
Total solver iterations: 6
Variable Value Reduced Cost
D1P 0.000000 10000.00
D2P 0.000000 99.00000
D3P 0.000000 100.0000
D4P 0.000000 100.0000
D5M 0.6000000 0.000000
D6M 0.000000 1.000000
X1 3.000000 0.000000
X2 3.000000 0.000000
X3 6.000000 0.000000
D1M 0.000000 0.000000
D2M 0.000000 1.000000
D3M 3.000000 0.000000
D4M 3.000000 0.000000
D5P 0.000000 1.000000
D6P 0.000000 0.000000
Row Slack or Surplus Dual Price
1 0.6000000 -1.000000
2 0.000000 0.000000
3 0.000000 -1.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 1.000000
7 0.000000 0.000000
七、图论
设备更新问题
某企业使用一台设备,在每年年初,企业领导部门就要决定是购置新的,还是继续使用旧的。若购置新设备,就要支付一定的购置费用;若继续使用旧设备,则需支付一定的维修费用。现在的问题是如何制定一个几年之内的设备更新计划,使得总的支付费用最少。我们用一个五年之内要更新某种设备的计划为例。若已知改种设备在各年年初的价格为:
还已知使用不同时间(年)的设备所需要的维修费用为:
解:
程序如下:
data:
n=6;
enddata
sets:
ci/1..n/:f;
ro(ci,ci)/
1,2 1,3 1,4 1,5 1,6
2,3 2,4 2,5 2,6
3,4 3,5 3,6
4,5 4,6
5,6
/:d,p;
endsets
data:
d=16 22 30 41 59
16 22 30 41
17 23 31
17 23
18;
enddata
f(n)=0;
@for(ci(i)|i#lt#n:
f(i)=@min(ro(i,j):d(i,j)+f(j));
);
@for(ro(i,j):
p(i,j)=@if(f(i)#eq#d(i,j)+f(j),1,0)
);
end
结果如下:
Feasible solution found.
Total solver iterations: 0
Variable Value
N 6.000000
F( 1) 53.00000
F( 2) 41.00000
F( 3) 31.00000
F( 4) 23.00000
F( 5) 18.00000
F( 6) 0.000000
D( 1, 2) 16.00000
D( 1, 3) 22.00000
D( 1, 4) 30.00000
D( 1, 5) 41.00000
D( 1, 6) 59.00000
D( 2, 3) 16.00000
D( 2, 4) 22.00000
D( 2, 5) 30.00000
D( 2, 6) 41.00000
D( 3, 4) 17.00000
D( 3, 5) 23.00000
D( 3, 6) 31.00000
D( 4, 5) 17.00000
D( 4, 6) 23.00000
D( 5, 6) 18.00000
P( 1, 2) 0.000000
P( 1, 3) 1.000000
P( 1, 4) 1.000000
P( 1, 5) 0.000000
P( 1, 6) 0.000000
P( 2, 3) 0.000000
P( 2, 4) 0.000000
P( 2, 5) 0.000000
P( 2, 6) 1.000000
P( 3, 4) 0.000000
P( 3, 5) 0.000000
P( 3, 6) 1.000000
P( 4, 5) 0.000000
P( 4, 6) 1.000000
P( 5, 6) 1.000000
Row Slack or Surplus
1 0.000000
2 0.000000
3 0.000000
4 0.000000
5 0.000000
6 0.000000
7 0.000000
8 0.000000
9 0.000000
10 0.000000
11 0.000000
12 0.000000
13 0.000000
14 0.000000
15 0.000000
16 0.000000
17 0.000000
18 0.000000
19 0.000000
20 0.000000
21 0.000000
八、下图是一个电力输送网(单位:兆瓦)。现在要把电力从发电站Vs输送到地区Vt处,每条边上的数字表示每条输送线的最大输送能力。要求制定一个最优方案,将电力从Vs输送到Vt,使得输送电力达到最大。
解:设节点1到节点8表示电力输送网的8个节点,CAP,FLOW表示弧容量和弧流量
程序如下:
!maximum flow problem;
model:
SETS:
NODES/1..8/;
ARCS(NODES,NODES)/1,2 1,3 1,4 2,3 2,5 3,5 3,6 4,3 4,6 5,8 6,7 6,8 7,8 8,1/:CAP,FLOW;
ENDSETS
MAX=FLOW(8,1);
@FOR(ARCS(I,J):FLOW(I,J)<CAP(I,J));
@FOR(NODES(I):@SUM(ARCS(J,I):FLOW(J,I))
=@SUM(ARCS(I,J):FLOW(I,J)));
DATA:
CAP=10,7,8,9,5,8,10,5,6,9,7,12,8,1000;
ENDDATA
END
结果如下:
Global optimal solution found.
Objective value: 25.00000
Total solver iterations: 6
Variable Value Reduced Cost
CAP( 1, 2) 10.00000 0.000000
CAP( 1, 3) 7.000000 0.000000
CAP( 1, 4) 8.000000 0.000000
CAP( 2, 3) 9.000000 0.000000
CAP( 2, 5) 5.000000 0.000000
CAP( 3, 5) 8.000000 0.000000
CAP( 3, 6) 10.00000 0.000000
CAP( 4, 3) 5.000000 0.000000
CAP( 4, 6) 6.000000 0.000000
CAP( 5, 8) 9.000000 0.000000
CAP( 6, 7) 7.000000 0.000000
CAP( 6, 8) 12.00000 0.000000
CAP( 7, 8) 8.000000 0.000000
CAP( 8, 1) 1000.000 0.000000
FLOW( 1, 2) 10.00000 0.000000
FLOW( 1, 3) 7.000000 0.000000
FLOW( 1, 4) 8.000000 0.000000
FLOW( 2, 3) 5.000000 0.000000
FLOW( 2, 5) 5.000000 0.000000
FLOW( 3, 5) 4.000000 0.000000
FLOW( 3, 6) 10.00000 0.000000
FLOW( 4, 3) 2.000000 0.000000
FLOW( 4, 6) 6.000000 0.000000
FLOW( 5, 8) 9.000000 0.000000
FLOW( 6, 7) 7.000000 0.000000
FLOW( 6, 8) 9.000000 0.000000
FLOW( 7, 8) 7.000000 0.000000
FLOW( 8, 1) 25.00000 0.000000
Row Slack or Surplus Dual Price
1 25.00000 1.000000
2 0.000000 1.000000
3 0.000000 1.000000
4 0.000000 1.000000
5 4.000000 0.000000
6 0.000000 0.000000
7 4.000000 0.000000
8 0.000000 0.000000
9 3.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 0.000000 0.000000
13 3.000000 0.000000
14 1.000000 0.000000
15 975.0000 0.000000
16 0.000000 1.000000
17 0.000000 0.000000
18 0.000000 0.000000
19 0.000000 0.000000
20 0.000000 0.000000
21 0.000000 0.000000
22 0.000000 0.000000
23 0.000000 0.000000
实验心得:
运筹学是一门实用的学科,学习运筹学,结合生活实际运用运筹学,我们可以将资源最大化利用。学习理论的目的就是为了解决实际问题。最短路,最大流,最小树问题的实际上机操作分析可以解决很多生活中的实际问题,GIS网络分析、城市规划、电子导航等在交通咨询方面,寻找交通路网中两个城市间最短的行车路线就是最短路径问题的一个典型的例子
.在网络通信领域,信息包传递的路径选择问题也与最短路径问题息息相关。这三次的实验让我收获颇多,学会了操作懂得了一些运筹学的运用,结合实际生活解决问题。所以,通过这次实验,不仅对运筹学的有关知识有了进一步的掌握,同时对在自己的计算机操作水准也有了很大的提高。这次实验让我懂得了运筹学在电脑上的应用,让我对运输与数学相结合的应用理解更深了。
运筹学实验报告
指导老师:贾玉花
姓名:赵玉瑜
学号:01114031
班级:工商1101班
20##年12月