运筹学
实验报告
姓 名:
学 号:
班 级:
指 导 老 师:
实验内容
1、线性规划问题:
(1) 给出原始代码;(2) 计算结果(包括灵敏度分析,求解结果粘贴);
(3) 回答下列问题(手写):a) 最优解及最优目标函数值是多少;
b) 资源的对偶价格各为多少,并说明对偶价格的含义;
c) 为了使目标函数值增加最多,让你选择一个约束条件,将它的常数项增加一个单位,你将选择哪一个约束条件?这时目标函数值将是多少?
d) 对x2的目标函数系数进行灵敏度分析;
e) 对第2个约束的约束右端项进行灵敏度分析;
f ) 结合本题的结果解释“Reduced Cost”的含义。
解:(1) max=8*x1+6*x2;
9*x1+8*x2<=12;
7*x1+11*x2<=24;
9*x1+11*x2<=13;
(2)计算结果: Objective value: 10.66667
Total solver iterations: 2
Variable Value Reduced Cost
X1 1.333333 0.000000
X2 0.000000 1.111111
Row Slack or Surplus Dual Price
1 10.66667 1.000000
2 0.000000 0.8888889
3 14.66667 0.000000
4 1.000000 0.000000
灵敏度分析: Objective Coefficient Ranges
Current Allowable Allowable
Variable Coefficient Increase Decrease
X1 8.000000 INFINITY 1.250000
X2 6.000000 1.111111 INFINITY
Righthand Side Ranges
Row Current Allowable Allowable
RHS Increase Decrease
2 12.00000 1.000000 12.00000
3 24.00000 INFINITY 14.66667
4 13.00000 INFINITY 1.000000
(3)a)该LP问题的最优解x={x1,x2}={1.333333,0.000000} 目标函数值z=10.66667
b)第2行资源的对偶价格为0.8888889,3、4行的对偶价格为0、0.
对偶价格的含义:表示当对应约束有微小变动时, 目标函数的变化率。例如此题中将第一个约束条件变为9*x1+8*x2<=13,目标函数值将变为10.66667+0.8888889=11.66667。
c)为了使目标函数值增加最多,选择第一个约束条件,目标函数值变为11.66667
d)x2原来为6,当它在[6-∞,6+1.111111] = [-∞,7.111111]范围变化时,最优基保持不变。
e)第2行约束中右端项原来为24,当它在[24- 14.66667,24+∞] = [9.33333,∞]范围变化时,最优基保持不变。
f)“Reduced Cost”代表的值表示当变量有微小变动时, 目标函数的变化率。本题中变量x2的reduced cost的值为 1.111111,表示当非基变量x2的值从0变为 1时最优的目标函数值z=10.66667-1.111111=9.555559.
2、运输问题:
已知6个发点8个收点的最小费用运输问题。产销量及单位运价如下表。
(1) 给出原始代码;(2) 计算结果(决策变量求解结果粘贴)
解:(1)原始代码为
model:
sets:
warehouses/wh1..wh6/: capacity;
vendors/v1..v8/: demand;
links(warehouses,vendors): cost, volume;
endsets
min=@sum(links: cost*volume);
@for(vendors(J):
@sum(warehouses(I): volume(I,J))<=demand(J));
@for(warehouses(I):
@sum(vendors(J): volume(I,J)) =capacity(I));
data:
capacity=55 47 42 52 41 32;
demand=60 55 51 43 41 52 43 38;
cost=6 2 9 7 4 2 5 9
4 5 5 3 8 5 3 2
5 2 1 3 7 4 8 3
7 6 7 9 9 2 7 1
2 3 6 5 7 2 6 5
5 9 2 2 8 1 4 3;
enddata
end
(2)计算结果: Objective value: 473.0000
Total solver iterations: 9
Variable Value Reduced Cost
VOLUME( WH1, V1) 0.000000 4.000000
VOLUME( WH1, V2) 55.00000 0.000000
VOLUME( WH1, V3) 0.000000 7.000000
VOLUME( WH1, V4) 0.000000 5.000000
VOLUME( WH1, V5) 0.000000 2.000000
VOLUME( WH1, V6) 0.000000 0.000000
VOLUME( WH1, V7) 0.000000 3.000000
VOLUME( WH1, V8) 0.000000 8.000000
VOLUME( WH2, V1) 0.000000 1.000000
VOLUME( WH2, V2) 0.000000 2.000000
VOLUME( WH2, V3) 0.000000 2.000000
VOLUME( WH2, V4) 43.00000 0.000000
VOLUME( WH2, V5) 0.000000 5.000000
VOLUME( WH2, V6) 0.000000 2.000000
VOLUME( WH2, V7) 4.000000 0.000000
VOLUME( WH2, V8) 0.000000 0.000000
VOLUME( WH3, V1) 0.000000 4.000000
VOLUME( WH3, V2) 0.000000 1.000000
VOLUME( WH3, V3) 42.00000 0.000000
VOLUME( WH3, V4) 0.000000 2.000000
VOLUME( WH3, V5) 0.000000 6.000000
VOLUME( WH3, V6) 0.000000 3.000000
VOLUME( WH3, V7) 0.000000 7.000000
VOLUME( WH3, V8) 0.000000 3.000000
VOLUME( WH4, V1) 0.000000 5.000000
VOLUME( WH4, V2) 0.000000 4.000000
VOLUME( WH4, V3) 0.000000 5.000000
VOLUME( WH4, V4) 0.000000 7.000000
VOLUME( WH4, V5) 0.000000 7.000000
VOLUME( WH4, V6) 14.00000 0.000000
VOLUME( WH4, V7) 0.000000 5.000000
VOLUME( WH4, V8) 38.00000 0.000000
VOLUME( WH5, V1) 41.00000 0.000000
VOLUME( WH5, V2) 0.000000 1.000000
VOLUME( WH5, V3) 0.000000 4.000000
VOLUME( WH5, V4) 0.000000 3.000000
VOLUME( WH5, V5) 0.000000 5.000000
VOLUME( WH5, V6) 0.000000 0.000000
VOLUME( WH5, V7) 0.000000 4.000000
VOLUME( WH5, V8) 0.000000 4.000000
VOLUME( WH6, V1) 0.000000 4.000000
VOLUME( WH6, V2) 0.000000 8.000000
VOLUME( WH6, V3) 0.000000 1.000000
VOLUME( WH6, V4) 0.000000 1.000000
VOLUME( WH6, V5) 0.000000 7.000000
VOLUME( WH6, V6) 32.00000 0.000000
VOLUME( WH6, V7) 0.000000 3.000000
VOLUME( WH6, V8) 0.000000 3.000000
故该运输问题所需的最小运输费用为473。A1运往B2,A2运往B4,B7,A3运往B3,A4运往B6,B8,A5运往B1, A6运往B6 .
3、一般整数规划问题:
某服务部门各时段(每2h为一时段)需要的服务员人数见下表。按规定,服务员连续工作8h(即四个时段)为一班。现要求安排服务员的工作时间,使服务部门服务员总数最少。
(1) 给出原始代码;(2) 计算结果(决策变量求解结果粘贴)
解:(1)原始代码为:
model:
sets:
time/1..8/: required,start;
endsets
data:
required = 10 8 9 11 13 8 5 3;
enddata
min=@sum(time: start);
@for(time(J):
@sum(time(I) | I #le# 4:
start(@wrap(J+I+2,8))) >= required(J));
end
(2):计算结果为:Objective value: 23.00000
Total solver iterations: 3
Variable Value Reduced Cost
START( 1) 13.00000 0.000000
START( 4) 2.000000 0.000000
START( 5) 8.000000 0.000000
故该整数规划问题的结果为:最少服务员总数为23。
4、指派问题:
已知如下效率矩阵,求极大化指派问题。
(1) 给出原始代码;(2) 计算结果(决策变量求解结果粘贴)
解:(1)原始代码为:
model:
sets:
workers/A1..A5/;
jobs/B1..B5/;
links(workers,jobs): cost,volume;
endsets
max=@sum(links: cost*volume);
@for(workers(I):
@sum(jobs(J): volume(I,J))=1;
);
@for(jobs(J):
@sum(workers(I): volume(I,J))=1;
);
data:
cost= 4 8 7 15 12
7 9 17 14 10
6 9 12 8 7
6 7 14 6 10
6 9 12 10 6;
enddata
(2):计算结果:Objective value: 57.00000
Total solver iterations: 10
Variable Value Reduced Cost
VOLUME( A1, B4) 1.000000 0.000000
VOLUME( A2, B3) 1.000000 0.000000
VOLUME( A3, B1) 1.000000 0.000000
VOLUME( A4, B5) 1.000000 0.000000
VOLUME( A5, B2) 1.000000 0.000000
故指派问题结果为:A1做B4工作,A2做B3工作,A3做B1工作,A4做B5工作,A5做B2工作。
5、一维资源分配问题:
某工业部门根据国家计划的安排,拟将某种高效率的设备五台,分配给所属的甲、乙、丙三个工厂,各工厂若获得这种设备之后,可以为国家提供的盈利如下表所示。问:这五台设备如何分配给各工厂,才能使国家得到的盈利最大。
(1) 给出原始代码;(2) 计算结果(决策变量求解结果粘贴)
解:(1)原始代码为:
model:
sets:
factory/1 2 3/;
facility_amount/1..6/;
arcs(factory,facility_amount):benefit,selection,status;
endsets
data:;
benefit=0,5,15,40,80,90
0,5,15,40,60,70
0,4,26,40,45,50;
status=0,1,2,3,4,5
0,1,2,3,4,5
0,1,2,3,4,5;
enddata
[obj]max=@sum(arcs(i,j):benefit(i,j)*selection(i,j));
@for(arcs:@bin(selection));
@for(factory(i):@sum(arcs(i,k):selection(i,k))=1);
@sum(arcs(i,j):status(i,j)*selection(i,j))=5;
end
(2)计算结果:
Objective value: 90.00000
Extended solver steps: 0
Total solver iterations: 0
Variable Value Reduced Cost
SELECTION( 1, 6) 1.000000 -90.00000
SELECTION( 2, 1) 1.000000 0.000000
SELECTION( 3, 1) 1.000000 0.000000
故该分配问题的结果为:甲工厂需用设备6台,乙工厂需用设备1台,丙工厂需用设备1台。此时为国家盈利总额为90.
6、最短路问题:
求从V1至V10的最短路。
l1,2=6, l1,3=5, l2,4=3, l2,5=6, l2,6=9, l3,4=7, l3,5=5, l3,6=11, l4,7=9, l4,8=1, l5,7=8, l5,8=7, l5,9=5, l6,8=4, l6,9=10, l7,10=5, l8,10=7, l9,10=9
(li,j表示Vi到Vj之间的权重)
(1) 给出原始代码;(2) 计算结果(决策变量求解结果粘贴)
解:(1):
model:
data:
n=10;
enddata
sets:
cities/1..n/: F;
roads(cities,cities)/
1,2 1,3
2,4 2,5 2,6
3,4 3,5 3,6
4,7 4,8
5,7 5,8 5,9
6,8 6,9
7,10
8,10
9,10
/: D, P;
endsets
data:
D=6 5
3 6 9
7 5 11
9 1
8 7 5
4 10
5
7
9;
enddata
F(n)=0;
@for(cities(i) | i #lt# n:
F(i)=@min(roads(i,j): D(i,j)+F(j));
);
@for(roads(i,j):
P(i,j)=@if(F(i) #eq# D(i,j)+F(j),1,0)
);
end
(2):计算结果: Total solver iterations: 0
Variable Value
N 10.00000
F( 1) 17.00000
F( 2) 11.00000
F( 3) 15.00000
F( 4) 8.000000
F( 5) 13.00000
F( 6) 11.00000
F( 7) 5.000000
F( 8) 7.000000
F( 9) 9.000000
F( 10) 0.000000
P( 1, 2) 1.000000
P( 1, 3) 0.000000
P( 2, 4) 1.000000
P( 2, 5) 0.000000
P( 2, 6) 0.000000
P( 3, 4) 1.000000
P( 3, 5) 0.000000
P( 3, 6) 0.000000
P( 4, 7) 0.000000
P( 4, 8) 1.000000
P( 5, 7) 1.000000
P( 5, 8) 0.000000
P( 5, 9) 0.000000
P( 6, 8) 1.000000
P( 6, 9) 0.000000
P( 7, 10) 1.000000
P( 8, 10) 1.000000
P( 9, 10) 1.000000
故此最短路问题的结果是:V1 →V2 →V4 →V8 →V10。