【精品】运筹学_张伯生_案例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海市教委重点课程建设
运筹学案例集与
Matlab求解
上海工程技术大学
管理学院运筹学课题组
2007年12月
目录
1。
1案例分析一与Matlab求解 (3)
1.2案例分析二与Matlab求解 (9)
1。
3案例分析三与Matlab求解 (9)
1.4案例分析四与Matlab求解 (12)
§2案例分析与Matlab求解 (14)
2。
1案例分析一与Matlab求解 (14)
2.2案例分析二与Matlab求解 (17)
2。
3案例分析三与Matlab求解 (17)
§3案例分析与Matlab求解 (20)
3。
1案例分析一与Matlab求解 (20)
3.2案例分析二与Matlab求解 (23)
3。
3案例分析三与Matlab求解 (29)
4。
1案例分析 (33)
4.2Matlab求解 (34)
§5案例分析与Matlab求解 (35)
5.1案例分析一与Matlab求解 (35)
5.2案例分析二与Matlab求解 (40)
§6案例分析与Matlab求解 (44)
6。
1中国石油天然气集团公司天然气的运送案例分析 (44)
6。
2中国石油天然气集团公司天然气的运送Matlab求解 (45)
§7案例分析与Matlab求解 (47)
7.1案例分析一与Matlab求解 (47)
7。
2案例分析二与Matlab求解 (51)
7。
3案例分析三与Matlab求解 (54)
8.1案例分析 (60)
8。
2MATLAB求解 (62)
8.3MATLAB运行分析 (64)
§9案例分析与Matlab求解 (65)
9。
1案例分析 (65)
9.2MATLAB求解 (66)
9。
3MATLAB运行分析 (68)
§10案例分析与Matlab求解 (69)
10。
1案例分析 (69)
10.2序列决策例题MATLAB求解72
§1案例分析与Matlab求解
1.1案例分析一与Matlab求解
1。
1.1案例分析
用线性规划测算上海市最低生活标准(以2005年以前数据计算)。
建立统一、规范和完善的社会保障体系,是治国安邦的根本大计,也是一项社会主义的基本制度建设。
上海市最低生活保障制度从1993年实施以来,已经将近有十几个年头了。
在这十几年里,上海的经济文化水平发生了巨大的变化,上海的社会保障体系也在不断地调整和完善。
目前,最低生活保障标准已经从1993年的120元增长到了2002年的290元.
●最低生活保障制度的概念
目前,最低生活保障制度是指世界上绝大多数市场经济国家普遍实行的以保障全体公民基本生存权利为目标的社会救助制度.它的通常做法是,根据维持最起码的生活需求的标准,设立一条最低生活保障线。
每一个公民当其收入水平低于最低生活保障线而生活发生困难时,有权利依据国家公布的法定标准和程序获得政府提供的现金和实物救助。
●上海建立最低生活保障制度的演进
上海于1993年6月1日正式执行上海市城镇最低生活保障制度。
1993—2002年最低保障标准及增长率见表1-11.
表1-11最低保障标准历年变化表
年份1993199419951996199719981999200020012002
最低
120145165185195205280280280290保障
标准
增长
0。
00 20。
83 13.79 12。
12 5。
41 5.13 36.59 0.00 0.00 3.57 率%
●保障对象的范围
城市居民最低生活保障制度的保障对象是家庭人均收入低于当地最低生活保障标准的持有非农业户口的城市居民,主要包括以下三类人员:
1无生活来源、无劳动能力、无法定赡养人或抚养人的居民;
2领取失业救济金期间或失业救济期满仍未能重新就业,家庭人均收入低于最低生活保障标准的居民;
3在职人员和下岗人员在领取工资或最低工资、基本生活费后以及退休人员领取退休金后,其家庭人均收入仍低于最低生活保障标准的居民。
●保障标准
城市居民最低生活保障标准由当地人民政府自行确定.本着既保障基本生活、又有利于克服依赖思想的原则,按照当地基本生活必需品费用和财政承受能力,实事求是地确定保障标准.
●最低生活保障标准的测算指标:
国际上把最低生活保障线也称为贫困线,是指为度量贫困而制定的针对最起码的生存条件或者相对社会中等生活水平的差距所作的定量化的界定。
所以,想要测定最低生活保障线就必须对贫困及贫困线有大体的认识。
常用的测定贫困线的方法有:比例法、绝对值法、恩格尔系数法、数学模型法、基本需求法、基期固定法等.
●最低生活保障标准中食品部分消费支出的测定
①建立目标函数
目标函数为每日食品总支出最少MinZ=ΣCiXi
其中,Z表示每人每天食品支出总额.Ci表示第i种食品的市场单价,Xi表示各种食品。
约束条件1:每天的营养一定要达到标准Kj。
即每天各种食品的消耗量Xi*各种食品每公斤某种营养元素含量Aij*各种食品的可食部分百分比fi相累加,累加的总和要大于或等于这种营养每日需要量。
食品的可食部分百分比是指:食品中除去骨头、外壳、内脏等以后剩余的可以食用的重量占食品总重量的比重。
即每天的热能、钙、铁等营养素摄入量必须达到一定的标准。
用公式可以表示为:ΣAijXifi〉=Kj(Aij:第i种食品中第j种营养素的含量,Kj:第i种营养素每日需要量标准,fi:第i种食品可食部分比例)。
约束条件2:蛋白质、脂肪、碳水化合物占总热量的比重要符合一定的比例。
三种营养在体内转化为热能的系数分别为:每克蛋白质4kcal,脂肪9kcal,碳水化合物4kcal。
设每种食品蛋白质含量Dia,每种食品脂肪含量Dib,每种食品碳水化合物含量Dic。
每日蛋白质总摄入量(ΣDiaXifi)*热能转化系数(4kcal/kg)/每日热能总摄入量(ΣAi1Xifi)即为每日摄入的蛋白质占热能中的比例。
脂肪与碳水化合物的计算也与蛋白质一样。
用公式表示为:
10%〈=(4*ΣDiaXifi)/ΣAi1Xifi<=15%
20%<=(9*ΣDibXifi)/ΣAi1Xifi〈=25%
60%〈=(4*ΣDicXifi)/ΣAi1Xifi〈=70%
约束条件3:每日的饮食习惯.ai〈=Xi<=bi(ai,bi:第i种食品每天习惯消费量的上下限)。
②变量X的含义
变量X1 X2 X3 X4 X5 X6 X7 X8
实际含义主食
其他粮
食
油脂类豆制品猪肉鸡肉
其他肉
制品
蛋类
变量X9 X10 X11 X12 X13 X14 X15 X16
实际含义水产品蔬菜类食糖类水果类
坚果及
果仁
糕点类
奶及奶
制品
在外饮
食支出
③营养素达到一定标准的含义
表1-13每100克食物中各个营养素的含量
Xi 可食部Fi 热能Ai1 钙Ai2 铁Ai3 VaAi4 Vb1Ai5 主食100 348 8.5 2.4 0 0.21
其他粮食100 201.86 17.86 1。
66 0 0.15
油脂类100 900 0 0 0。
03 0
豆制品100 121。
33 269.17 3.18 0.07 0.12 猪肉100 580 6 1。
4 0 0。
53 鸡肉56 108.33 22 4。
7 0 0。
02 其他肉制品62 154 10 10 37393 0.07 蛋类85 170 55 2.7 1440 0。
16 水产品45 90。
9 118 0.54 0 0.02
蔬菜类84 19。
35 59。
02 1.29 0。
77 0.03
食糖类100 364 16 0.95 0 0.05
水果类63 35。
76 11。
76 0.24 0.17 0.02
坚果及果仁62 517。
38 77。
88 3。
91 0.09 0.34 糕点100 416 46。
5 2.9 259 0。
25 奶及奶制品100 69 120 0。
2 140 0.04
在外饮食100 179。
96 39。
02 20.13 52.53 0。
1
Xi Vb2Ai
6
烟酸Ai7 VcAi8
蛋白质
Dia
脂肪
Dib
碳水化合物
Dic
主食0。
06 1.6 0 7.3 1。
3 76.7 其他粮食0。
04 1.21 6。
86 5.6 0.67 43。
69 油脂类0。
04 0 0 0 100 0
豆制品0.07 0。
56 0 11。
66 4.59 9。
15 猪肉0.12 4。
2 0 9.5 59.8 0.9 鸡肉0。
12 6。
53 0 22。
47 2.6 0。
47 其他肉制品0.91 5.4 0 18.3 8.85 0.25 蛋类0.31 0。
1 0 14。
7 11。
6 1。
6 水产品0。
08 1.85 0 17.13 2。
54 0.02
蔬菜类0。
06 0。
49 23.42 1.22 0。
23 3.06 食糖类0.08 1。
05 0 0。
25 0。
1 90.5 水果类0.02 0.25 6。
49 0.91 0。
14 7。
66 坚果及果仁0.11 3。
9 4。
5 23.09 40.75 20。
7 糕点0。
09 1.1 0 6。
9 15。
6 64 奶及奶制品0。
13 0。
2 1 3。
3 4 5
在外饮食0.07 1.51 2。
9 6.82 12。
13 11。
14
④变量Ci的含义
食品
X1
主食
X2
其他粮
食
X3
油脂类
X4
豆制品
类
X5
猪肉
X6
鸡肉
X7
其他肉
制品
X8
蛋类
单价 2.22 6.16 6。
55 10.51 12.77 13.45 14.33 4。
57
食品
X9
水产品
X10
蔬菜类
X11
食糖类
X12
水果类
X13
坚果及
果仁
X14
糕点类
X15
奶及奶
制品
X16
在外饮
食支出
单价18.34 3。
01 4.19 2。
98 9.80 14。
39 8。
20 30。
87
⑤结果
在建立了线性规划的模型之后,可以用Matlab软件编写相应程序来求出其最优解单纯形法。
根据计算得到最低生活保障标准中,食品上的消费支出为:253.64元
1.1。
2Matlab求解
自行开发单纯形法的Matlab程序如下:
%m1.m文件:输入并化标准型
m=input('请输入约束条件个数:’);
n=input('请输入变量个数:’);
f=input(’请输入目标函数系数矩阵:');
a=input('请输入约束条件系数矩阵:');
b=input(’请输入约束条件右端常数矩阵:');
%标准化
f1=[f,zeros(1,m)];
a1=[a,eye(m,m)];
cb=a1(:,n+1:n+m);
c=f1(:,n+1:n+m);
mm=zeros(1,m+n);
jie=[zeros(1,n),b];
disp(’初始基可行解为:’)
jie
dd=1:n+m;
ee=dd(:,n+1:n+m);
%m2.m文件:计算检验数
q=zeros(1,n+m);
fori=1:m+n
ff=f1(:,i);
ss=sum(c*a1(:,i))
t=ff—ss;
q(:,i)=t;
end
disp(’各检验数为:’)
disp(q)
m3
%m3.m文件判断函数是否有界fori=1:m+n
ifq(:,i)>0
t=i;
ifmax(a1(:,t))〈=0
disp('此问题无界’);break;else
disp('此问题有界');
end
end
end
m4
%m4。
m判断最优解
g=q(:,1);
fori=1:m+n
qq=q(:,i)
ifg<=qq
g=qq;z=i;
end
end
ifg〈=0
A=’目标函数已得到最优值';disp(A);
mm=mm';
u=sum(f1*mm);
disp(u);
disp(’最优解为:’);
mm=mm’
break;
else
g=g;
end
disp(’检验数最大值为:')disp(g);
disp(’换出变量x为')
disp(z);
m5
%m5.m文件计算θ检验数
rr=a1(:,z);
ct=b'。
/rr;
disp('θ检验数为’);
ct
m6
%m6.m确定换出变量
h=100000;
forj=1:m
ctt=ct(j,:)
ifctt〉0
ifh〉ctt
h=ct(j,:);y=j+n;
end
end
end
disp('换出变量为’);
y
m7
%m7。
m迭代产生新的得到新的单纯形表ify〉n
cb(:,y—n)=a1(:,z);
end
ify<n
cb(:,y)=a1(:,z);
end
b2=cb;
a1=inv(b2)*a1;
ify>n
c(:,y—n)=f1(:,z);
end
ify<n
c(:,y)=f1(:,z);
end
b=inv(b2)*b’;
b=b’;
disp('新的约束矩阵为');
a1
cb=eye(m,m);
m8
%m8.m文件形成新常数矩阵和可行解
ify<n
ee(:,y)=z;
fori=1:m
k=ee(:,i);
mm(:,k)=b(:,i);
end
mm(:,y)=0;
elseify>n
yy=y-n;
ee(:,yy)=z;
fori=1:m
k=ee(:,i);
mm(:,k)=b(:,i);
end
mm(:,y)=0;
end
end
mm
m2
1.2案例分析二与Matlab求解
1。
2.1案例分析
例1.9对于例1。
1,此问题的模型建立如下:
1212
1212max Z 4+36(1.1)28(1.2)..2318(1.3),0
(1.4)
x x x x s t x x x x ≤⎧⎪≤⎪⎨+≤⎪⎪≥⎩
1.2.2Matlab 求解
对于此简单问题,用以上开发出来的程序计算如下: 命令:m1并输入矩阵条件。
〉〉m1
请输入变量个数:2 请输入约束条件个数:3
请输入目标函数系数矩阵:[4,3]
请输入约束条件系数矩阵:[1,0;0,2;2,3] 请输入约束条件右端常数矩阵:[6,8,8] 按回车后计算机自动执行程序,结果如下: 目标函数已得到最优值16 最优解为:mm=40280
1.3案例分析三与Matlab 求解
1。
3.1案例分析
例1。
10飞乐公司经营一个回收中心,专门从事用三种废弃原材料C 、P 、H 混合调出三种不同规格的产品ABD 。
根据混合时候各种材料的比例,可将该产品分为不同的等级(参照表1。
12)。
尽管在混合各种等级产品时允许一定的机动性,但每一等级产品中各种材料的最大值和最小值必须符合下面质量标准的规定(最大值和最小值是根据该材料的重量在该等级产品总重量中的比例来确定的)。
在两种较高等级的产品中,有一种特定材料的比例是固定的。
已知产品的规格要求,产品单价,每天能供应的原材料数量及原材料单价,分别见表1。
12和表1.13,问该厂应如何安排生产,使利润收入为最大? 表1.12
产品名称 规格要求
单价(元/kg )
A
原材料C 不少于50% 原材料P不多于25% 50
B 原材料
C 不少于25% 原材料P 不多于50%
35 D
不限
25
回收中心可以从一些渠道定期收集到所需的固体废弃物,因此,可以获得维持稳定作业的处理量。
表1.13给出了中心每天可以收集到每种材料的数量和原材料单价。
表1。
13
原材料名称
每天最多供应量(kg)
单价(元/kg )
C P
100 100
65 25
H 60 35
飞乐公司是绿地组织的全资公司,绿地组织是一个专门从事与环境有关业务的组织。
管理层决定在表1.12和表1.13所列的约束之内,有效地将各种材料分配到各等级的产品中去,以实现每周的总利润最大。
以线性规划的形式建模
这是一个混合线性规划问题,为了给该问题建模,首先需要明确该问题所涉及的活动(activities)、资源(resources )、收益(benefits )以及确定的需求(fixedrequirements ).这一步的关键在于管理层的目标是将每种材料最优地分配给每一等级的产品。
每一种材料与产品的组合都是一个决策:多少材料用于这一等级的产品?这个数量就是活动的水平(levelofanactivity )。
每一种活动对应的是将一种固体废弃物处理混合入每一个等级的产品中去 活动的水平是混合入每一等级产品中的一种材料的数量
因此,要决策的是每周将多少元的每一种材料加入每一等级的产品中去。
因为资源有限,收益受到限制,以及确定的需求,该问题就有了相当多的约束,归纳如下:
有限的资源:3种固体废弃物所能获得的数量如表1。
13的第二栏所示,此外,表1.12的第二栏还表明材料A 和B 的用量是有限的,这些有限的资源都将形成资源的约束条件。
规定的收益:收益是指所收集和处理的每一种材料。
确定需求的约束:
1. 表1。
12第二栏所示的材料A 的原材料C 不少于50%原材料P不多于25%, 2. 表1.12第二栏所示的材料B 的原材料C 不少于25%原材料P 不多于50%
管理层的目标是使的三种等级的产品所能实现的每天总利润最大,因此,这就是该问题的总绩效测度(overallmeasureofperformance). 1.3.2Matlab 求解
如以Ac ,Ap 分别表示A中C 的成分,A 中P的成分,依次类推。
根据表1。
12有:
A C ≥0。
5A,A P ≤0.25A ,
B
C ≥0.25B ,B P ≤0。
5B (1。
1) 又有:A C +A P +A H =A ,B C +B P +B H =B (4.2) 将(1.1)逐个代入(4.2)中并整理得: -0。
5A C +0.5A P +0。
5A H ≤0 —0.5A C +0。
75A P -0.5A H ≤0 -0.75B C +0.25B P +0。
25B H ≤0 -0.5B C +0。
5B P -0。
5B H ≤0
表1.13表明这些原材料供应量的限额。
加入到产品A 、B 、D 的原材料C 总量每天不超过100kg ,P 的总量不超过100kg ,H 总量不超过60kg ,由此 :
A C +
B
C +
D C ≤100 A P +B P +D P ≤100 A H +B H +D H ≤60
在约束条件中共有9个变量,为计算和叙述的方便,分别用
19,
,x x 表示令:
123456789,,,,,,C P H C P H C P H x A x A x A x B x B x B x D x D x D =========
由此约束条件可表示为:
123123456456147258369190.50.50.500.250.750.250
0.750.250.2500.50.50.5010010060,,0x x x x x x x x x x x x x x x x x x x x x x x -++≤⎧⎪-+-≤⎪
⎪-++≤⎪
-+-≤⎪⎨
++≤⎪⎪++≤⎪
++≤⎪⎪≥⎩我们的目的是使利润最大化,即产品价格减去原材料
的价格为最大。
产品价格为:
12345678950()35()25()x x x A x x x x x x D ++--++--++--产品产品B
产品
原材料价格:14725836965()25()35()x x x C x x x P
x x x ++--++--++--原材料原材料原材料H
123456789147258369max 50()35()25()65()25()35()
z x x x x x x x x x x x x x x x x x x =++++++++-++-++-++整理后目
标函数为:
1234579max z=-15x +25x +15x -30x +10x -40x -10x
面对如此多变量和约束条件的线性规划问题,如果用手算,那是件很麻烦的事,不仅
需要很多时间和耐心,而且容易出错。
现在利用计算机程序来计算显得小菜一碟。
首先需要输入矩阵:m1 请输入约束条件个数:7 请输入变量个数:9
请输入目标函数系数矩阵:[—15,25,15,—30,10,0,-40,0,10] 请输入约束条件系数矩阵:
[—1/2,1/2,1/2,0,0,0,0,0,0;-1/4,3/4,—1/4,0,0,0,0,0,0;0,0,0,—3/4,1/4,1/4,0,0,0;0,0,0,—1/2,1/2,-1/2,0,0,0;1,0,0,0,4,0,0,1,0;0,1,0,0,1,0,0,1,0;0,0,1,0,0,1,0,0,1]
请输入约束条件右端常数矩阵:[0,0,0,0,100,100,60]
按下回车,计算机以迅雷不及掩耳之势就显示了结果。
结果如下: 目标函数已得到最优值 3400 最优解为:
mm=[0-80-600010000] 可以得到,当2x =100,3x =60是,最优解是3400。
1。
4案例分析四与Matlab 求解
1.4.1案例分析
例1.11上海地铁公司正准备增加其人民广场的往来班次,因此需要雇用更多的工作人员,但是不知道到底雇用多少数量的工作人员.管理层意识到中介公司的客户提供令人满意的服务水平的同时必须进行成本控制,因此,必须寻找成本与收益之间合意的平衡。
于是,要求管理团队研究如何规划人员才能以最小的成本提供令人满意的服务。
分析研究新的班次时间表,以确定一天之中不同时段为实现客户满意水平必须工作的工作人员数目.在表1.14的最后一栏显示了这些数目,其中第一列给出对应的时段。
表中的其他数据反应了公司与客户服务代理商协会所定协议上的一些规定,这一规定要求每一工作人员工作8小时为一班,各班的时间安排如下: 轮班1:6:00 AM ~2:00 PM 轮班2:8:00 AM~4:00 PM 轮班3:中午~8:00PM 轮班4:4:00PM~午夜
轮班5:10:00 PM ~6:00 AM
表1.14上海地铁公司人员排程问题的数据
表1.14中标注x ij
的部分表示这段时间是有相应轮班的。
因为轮班之间的重要程度有差异,所以协议中工资也因轮班所处的时间而不同。
每一轮班对代理商的补偿(包括收益)如最底行所示.问题就是,在最底行数据的基础上,确定将多少代理商分派到一天之中的各个轮班中去,以使得人员费用最小,同时必须保证最后一栏中所要求的服务水平的实现。
建模
这个问题实际上是一个纯成本收益平衡问题。
为了建立模型,首先必须明确包含的活动和收益。
活动对应于各轮班
活动的水平就是分派到那一轮班的代理商数目
活动的一个单位是指分派到该轮班的一个代理商
因此,线性规划通常是寻找最优活动水平组合的问题,在这里,就可描述为确定最佳的轮班人数.
收益对应于时段
在每一时段里,活动的收益就是代理商所提供给客户的服务
收益的水平由那段时间在岗位的代理商的数目来衡量的
1。
4。
2Matlab求解
问题的目标是:
最小化成本=所有代理商每日总人力成本
成本=170x1+160x2+175x3+180x4+195x5
约束:6:00AM~8:00AM之间总的代理商数=x1≥48
8:00AM~10:00AM之间总的代理商数=x1+x2≥79
10:00AM~中午之间总的代理商数=x1+x2≥65
中午~8:00AM之间总的代理商数=x1+x2+x3≥87
2:00PM~4:00PM之间总的代理商数=x2+x3≥64
4:00PM~6:00PM之间总的代理商数=x3+x4≥73
6:00PM~8:00PM之间总的代理商数=x3+x4≥82
8:00PM~10:00PM之间总的代理商数=x4≥43
10:00PM~午夜之间总的代理商数=x4+x5≥52
午夜~6:00PM之间总的代理商数=x5≥15
对如此多变量和约束条件的线性规划问题,如果用手算,那是件很麻烦得事,不仅需要很多时间和耐心,而且容易出错。
现在利用计算机程序来计算。
首先需要输入矩阵:m1
请输入约束条件个数:10
请输入变量个数:5
请输入目标函数系数矩阵:[170,160,175,180,195]
请输入约束条件系数矩阵:
[1,0,0,0,0;1,1,0,0,0;1,1,0,0,0;1,1,1,0,0;0,1,1,0,0;0,0,1,1,0;0,0,1,1,0;0,0,0,1,0;0,0,0,1,1;0,0,0,0,1]
请输入约束条件右端常数矩阵:[48,79,65,87,64,73,82,43,52,15]
按下回车,计算机显示了结果。
结果如下:
目标函数已得到最优值
30610
可以得到,当x1=48,x2=31,x3=39,x4=43,x5=15时,最优解是30610。
§2案例分析与Matlab求解
2.1案例分析一与Matlab求解
我们先来看用MATLAB实现对偶单纯形法
[code]clear;
A=[];%A代表的矩阵
B=[];%B代表的矩阵
C=[];%C代表的矩阵
f=y(A,B,C)[/code]
[code]%对偶单纯形法
functionresult=y(A,B,C)
a=-1*A;
[rowline]=size(A);
a=[aeye(row,row)];
b=-1*B;
c=[Czeros(1,row)];
dex=c;%dex为判别数
basic=line+1:1;line+row;%basic为基可行解
X=zeros(1,line);
X1=zeros(1,line+row);
b1=sort(b);
while(b1(1)〈0)
m=0;
fori=1:length(b)
if(b(i)〈m)
m=b(i);j=i;%求出最小的b
end
end;
n=a(j,:);
count=0;
fori=1:length(n)
if(n(i)〉=0)
count=count+1;
end
end;
if(count==length(n))
error('无最优解');
end
seta=dex./n;
seta1=-Inf;
fori=1:length(seta)
if(seta(i)〉=seta1&n(i)<0)%求出最大且为负的seta seta1=seta(i);k=i;
end
end;
basic(j)=k;
b(j)=b(j)/a(j,k);
a (j,:)=a (j,:)/a(j,k ); fori=1:length (b) if(i~=j )
b (i )=b (i)—b (j )*a (i ,k);
a (i,:)=a(i ,:)—a (j,:)*a(i,k); end end;
q=dex(k);
dex=dex —q*a(j ,:); b1=sort(b ); end ;
fori=1:length (basic) temp=basic (i); X1(temp )=b (i); end;
fori=1:length(X) X (i)=X1(i); end; X=X ’ X1=X1';
result=c*X1;[/code ] 但是这样非常麻烦.
为了减少输入带来的误差和较慢的效率,可以考虑使用MATLAB 优化工具箱解来实现对偶单纯形法 1、模型:
b AX ..min ≤=t s CX
z 命令:x=linprog (c ,A,b )
2、模型:
min AX b ..
AeqX beq z CX
s t =≤⎧⎨=⎩命令:x=linprog (c ,A ,b ,Aeq ,beq )
注:若没有不等式:b AX ≤存在,则令A=[],b=[].若没有等式约束,则令Aeq=[],beq=
[]。
3、模型:
min AX b .. AeqX beq
VLB X VUB z CX
s t =≤⎧⎪
=⎨⎪≤≤⎩命令:[1]x=linprog(c,A ,b ,Aeq,beq,VLB ,VUB )
[2]x=linprog (c,A ,b ,Aeq,beq,VLB ,VUB ,X0)
注:[1]若没有等式约束,则令Aeq=[],beq=[]。
[2]其中X0表示初始点 4、命令:[x,fval]=linprog(…)
返回最优解x及x处的目标函数值fval.
2.2案例分析二与Matlab 求解
例2。
16
minf=1x +32x 21x +2x ≥3
s 。
t.31x +22x ≥4 1x +22x ≥1
1x ,2x ≥0
解:matlab 中默认min ,《=格式 A=[2,1;3,2;1,2]; B=[3,4,1]'; C=[1,3]';
x=linprog (C ,—A ,-B ,[],[],zeros (3,1)) 运行结果为
2。
3案例分析三与Matlab 求解
例2.17爱思特公司经营一个营养中心,专门为VIP 客户配置人体所需营养的元素摄入量,并且配置相应的服务套餐.现在公司为了能够进一步的拓展中国市场,公司从海外引入了四种营养品“甲”“乙”“丙”“丁”。
这四种营养品可以提供人体所需要的营养元素。
根据营养品生产厂商的介绍以及权威机构的检测:每一克“甲"含有元素A1个单位,元素B3个单位,元素D1个单位;每一克“乙”含有元素A2个单位,元素B1个单位;每一克“丙”含有元素B1个单位,元素C1个单位,元素D1个单位;每一克“丁”含有元素A1个单位,元素B1个单位,元素C1个单位。
这些含量说明如表2.27中给出 营养品(克) 元素(单位)
甲 乙 丙 丁 A 1 2 0 1 B 3 1 1 1 C
1
1
根据爱思特公司营养中心的研究,人体每天对于元素A,B,C,D的需求量至少需要在一条水平线之上。
有关数据如下表:
此外爱思特公司列出了引入每1克的营养品需要的费用作为分配时的重要参考。
具体数据如下表:
爱思特公司是爱未来组织的全资公司,爱未来组织是一个专门从事与营养有关的业务的组织。
爱思特公司的收益全部用于支持爱未来组织的其他相关活动.本着“以人为本"的宗旨,董事会要求爱思特公司配置出既可以满足顾客每天元素要求,又使花费达到最少的方案。
解:
●建模
●这是一个线性规划问题,为了给该问题建立模型,首先需要明确该问题涉及的活动,资
源,约束.这一步的关键在于管理层的目标是配置出既可以满足顾客每天元素要求,又使花费达到最少的方案.
●决策
本例子要作出的决策为:
x=分配营养方案中“甲"营养品的克数
1
x=分配营养方案中“乙”营养品的克数
2
x=分配营养方案中“丙”营养品的克数
3
●4x=分配营养方案中“丁”营养品的克数
●约束
人体对营养元素的需求都有一个最低的标准.本例子的约束为
1)人体每天对于元素A的需求量≥30(最低可以接受的水平)
2)人体每天对于元素B的需求量≥60(最低可以接受的水平)
3)人体每天对于元素C的需求量≥20(最低可以接受的水平)
●4)人体每天对于元素D的需求量≥20(最低可以接受的水平)
●绩效的测度
问题的目标是:
最小化营养品的成本
● 成本=81x +62x +33x +64x
● 建模的总结
通过上述的步骤,建立了完整的线性规划问题,这一模型的表示如下:
最小化成本=81x +62x +33x +64x 约束条件
1x +22x +4x ≥30
31x +2x +3x +4x ≥60
3x +4x ≥20 1x +3x ≥20
● 且:1x ,2x ,3x ,4x ≥0 ● 求解模型
根据MATLAB 优化工具箱编写:
A=[1,2,0,1;3,1,1,1;0,0,1,1;1,0,1,0]; B=[30,60,20,20]'; C=[8,6,3,6]';
x=linprog (C,—A ,—B,[],[],zeros(4,1)) 运行结果如下:
§3案例分析与Matlab 求解
3。
1案例分析一与Matlab 求解
在建立了运输问题的线性规划的模型之后,我们可以用Matlab 软件编写相应程序来求出其最优解。
用传统线性规划的程序求解方法,如表上作业法、伏格尔法等,步骤繁琐,设计数据量之大给准确求出最优解带来很多不便之处。
尤其当遇到条件复杂,数据庞大时更会使运算者无从着手,麻烦的运算过程也将耗费大量时间和人力。
为了克服这些缺点,我们利用Matlab 数学软件来解决以上困难。
在Matlab 中编写有关程序,利用这些程序我们只要输入销点数、产点数、各销地的销量、各产地的产量以及各产地到各销地的运输单价,立即可得到运输问题的最优解.
3。
1。
1线性规划指令linprog ()介绍
[]),,,,,,(,,,,ub lb beq aeq b a f linprog lambda output exitflag fval x =。
在输入部分,f 是目
标函数,它以列向量形式出现;b a 、分别是线性规划中不等式约束的技术系数矩阵和资源向量;beq aeq 、分别是线性规划中的技术系数矩阵和资源向量;这其中如有缺省,则以[]代替;lb 是决策变量下界,ub 是决策变量上界。
在输出部分,x 是线性规划最优解,fval 是线性规划最优值;exitflag 是输出标记,当1=exitflag 时,表示线性规划有解,当
1-=exitflag 时,表示线性无解;output 是指算法和递代情况;lambda 是指存储情况。
当
程序通过时,屏幕上有一段文字:Optimizationterminatedsuccessfully (最优化成功地结束),当程序中有问题时,屏幕上会用红字告知,在某行某列有什么性质的问题,这些都显示出Matlab 语言的智能化优势.
上述指令()linprog 是对线性规划标准型:
f z =min b x a ≤*(1)
s 。
t.beq x aeq =*(2)
ub x lb ≤≤3)
其中(1)式为不等式约束;(2)式为等式约束;(3)式表示lb 为x 的下界,ub 为x 的上界. 3。
1。
2产销平衡运输问题的Matlab 求解
(1)形成运输问题的约束矩阵的指令),(n m trb 。
[]),(2,1n m trb aeq aeq =在输入部分,m 为销地数,n 为产地数。
调用函数m trb .,产生1aeq 为产量的约束矩阵,2aeq 为销量的约束矩阵. 例如3个产地,4个销地情况,此时4,3==n m 。
调用trb 函数得:
10
01001001000100100100100010010010011=aeq 和
100
0010000100001100001000010000110000100001000012=
aeq
(2)产销平衡运输问题求解指令)2,1,,,(1b b e n m trap 指令[])2,1,,,(1,b b e n m trap fv xx =
在输入部分,m 为产地数,n 为销地数,e 为单位运价表,1b 为产量矩阵,2b 为销量矩阵。
在输出部分,xx 为最优运销矩阵,fv 为总运费.
如在例题 3.1中,它在产销平衡运输问题,4,3==n m ,单位运价矩阵
[]51047;8291;103113=e ,产量矩阵[]'
9471=b 。
销量矩阵[]'
65632=b 。
用指令[])2,1,,4,3(1,b b e trap fv xx =后得85=fval ,及x 1=0.279,x 2=0,x 3=5,x 4=1.771,x 5=2。
721,x 6=0,x 7=0,x 8=1.279,x 9=0,x 10=6,x 11=0,x 12=3。
由此得最优调运方案:A 1调运到B 1为0.279t ,到B 3为5t ,到B 4为1。
771t ;A 2调运到B 1为2.771t,到B 4为1。
279t ;A 3调运到B 2为6t ,到B 4为3t 。
其总运费为85元。
e1程序中对xx 取整后得p,85=fval ,故亦为最优调运方案。
由[]306010032500=p ,故方案:A 1运B 3为5t ,运B 4为2t ;A 2运B 1为3t ,运B 4为1t;A 3运B 2为6t ,运B 4为3t.这个方案的总运费为85元,故亦为最优方案.
程序中构成了一个调运矩阵xx 如表3。
25表示。
从表3。
25,各加工厂运到各销点的数量一目了然. 其中运行指令e.m 程序及trap1。
m ,trb 。
m 如下: e.m
%e 运算主程序段
m=input ('请输入产地数:’); n=input ('请输入销地数:'); e=input(’请输入单位运价表:'); b1=input ('请输入产量矩阵:’); b2=input('请输入销量矩阵:'); num1=sum (b1); num2=sum(b2); ifnum1==num2
[xx ,fva]=trap1(m,n,e,b1,b2); elseifnum1〉num2
[xx ,fva]=trap2(m ,n ,e,b1,b2); else
[xx ,fva]=trap3(m,n ,e,b1,b2); end
p=round(xx );
beq=[b1;b2];
A=’调运运输表’
disp(p);
B=’总运费:'
disp(fva);
trap1.m
%trap1。
产销平衡
function[xx,fv]=trap1(m,n,e,b1,b2)
p=e';f=p(:);
[aeq1,aeq2]=trb(m,n);
aeq=[aeq1;aeq2];
beq=[b1;b2];
lb=zeros(m*n,1);
[x,fval,exitflag,output,lambda]=linprog(f,[],[],aeq,beq,lb);fv=fval;
xx=reshape(x,n,m);
xx=xx’;
trb。
m
%形成运输问题的约束矩阵的指令
function[aq1,aq2]=trb(m,n)
o=ones(1,n);e=eye(n);
z1=zeros(m,m*n);
fori=1:m
z1(i,(i-1)*n+1:i*n)=o;
end
aq1=z1;z2=e;
fori=1:m—1
z2=[z2,e];
end
aq2=z2;
运行结果:(Matlab运行截图如下)
3。
2案例分析二与Matlab 求解
3。
2.1产大于销的运输问题
例3。
3设有A 1、A 2、A 3三个产地生产某种物资,其产量分别为7t 、5t 、7t ,B 1、B 2、B 3、B 4四个销地需要该种物资,销量分别为2t 、3t 、4t 、6t ,又知各产销地之间的单位运价表见表3。
26,试决定总运费最少的调运方案.
销点B 1 单价/元 销点B 2 单价/元 销点B 3 单价/元 销点B 4 单价/元 产量/t 加工厂A 1 X 1 2 X 2 11 X 3 3 X 4 4 7 加工厂A 2 X 5 10 X 6 3 X 7 5 X 8 9 5 加工厂A 3 X 9 7 X 10 8 X 11 1 X 12 2 7 销量/t 2
3
4
6
解:设[]121121,,,,x x x x x =为产地运往销地的数量,并标在表3。
26上,从表3。
26可得下述关系式:
(1)总运费函数
1211109876543212879531043112x x x x x x x x x x x x f +++++++++++=.
(2)x 满足约束条件C :
74321≤+++x x x x ,58765≤+++x x x x ,71211109≤+++x x x x 。
2951=++x x x ,31062=++x x x ,41173=++x x x ,61284=++x x x 。
至此我们可将所述问题归结为下述线性规划(2)求解.
f
z =min
t s ..C (1)
0≥i x ,12,11,,2,1 =i (2) 线性规划(2)的解就是最优调运方案,下面给出(2)的MATLAB 语言程序:(运行e 。
m 程序文件,判断产销关系后自行调用trap2)
trap2.m
%trap2.产大于销
function [xx ,fv]=trap(m ,n,e ,b1,b2) p=e';f=p (:);
[aq1,aq2]=trb(m ,n ); a=aq1;b=b1; aeq=aq2;beq=b2; lb=zeros (m*n,1);
[x ,fval ,exitflag]=linprog (f,a,b ,aeq,beq ,lb); fv=fval ;
xx=reshape (x,n,m); xx=xx'; trb.m
%形成运输问题的约束矩阵的指令 此略,程序同例3.1中一样。
运行计算过程分析:
(1)形成运输问题的约束矩阵的指令),(n m trb 。
[]),(2,1n m trb aeq aeq =,过程同产销平衡求解相同。
(2)产销平衡运输问题求解指令)2,1,,,(2b b e n m trap
指令[])2,1,,,(2,b b e n m trap fv xx =。
2trap 的输入和输出与1trap 完全相同.
如例3。
2是产大于销的运输问题,其中产地3个,销地4个,单位运价矩阵为
]2187;95310;43112[=e ,产量矩阵为[]'
7571=b ,销量矩阵为[]'
64322=b 。
用自编指令[])2,1,,4,3(2,b b e trap fv xx =求得 最优产销矩阵xx 为:
40
23
0103000
2=xx 和最小总运费用fv 为35元。
运行结果:
如例3.3中有条件为无限量的,若要用Matlab来求解,首先将其化解为产销平衡的运输表。
再使用产销平衡的Matlab程序来计算就可以得出最优方案。
具体步骤如下: 写出这个问题的产销平衡表(表3。
27)和单位运价表(表3。
28)。
Ⅰ′Ⅰ′′ⅡⅢⅣ′Ⅳ′′产量
A 50
B 60
C 50
D 50
销量30 20 70 30 10 50
Ⅰ′Ⅰ′′ⅡⅢⅣ′Ⅳ′′
A 16 16 13 22 17 17
B 14 14 13 19 15 15
C 19 19 20 23 M M
D M 0 M 0 M 0
运行e2.m,将以上两表按要求输入MATLAB运算程序,得到最优方案,运行结果如下:(注:表中的M只要输入一个足够大的正数如10000即可)。