线性规划数学建模与数学实验实验目的实验内容
2,掌握用数学软件包求解线性规划问题,
1,了解线性规划的基本内容,
2,用数学软件包 MATLAB求解线性规划问题,
5,实验作业,
3,用数学软件包 LINDO,LINGO求解线性规划问题,
1,两个引例,
4,建模案例:投资的收益与风险,
问题一,任务分配问题:某车间有甲、乙两台机床,可用于加工三种工件,假定这两台车床的可用台时数分别为 800和
900,三种工件的数量分别为 400,600和 500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表,问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?
单位工件所需加工台时数 单位工件的加工费用 车床类 型 工件 1 工件 2 工件 3 工件 1 工件 2 工件 3
可用台时数甲 0,4 1,1 1,0 13 9 10 800
乙 0,5 1,2 1,3 11 12 8 900
两个引例解 设在甲车床上加工工件 1,2,3的数量分别为 x1,x2,x3,
在乙车床上加工工件 1,2,3的数量分别为 x4,x5,x6,可建立以下线性规划模型:
654321 8121110913m i n xxxxxxz
14
25
36
1 2 3
4 5 6
x 40 0
600
500
s,t,
0.4 1.1 80 0
0.5 1.2 1.3 90 0
0,1,2,,6
i
x
xx
xx
x x x
x x x
xi
解答问题二,某厂每日 8小时的产量不低于 1800件,为了进行质量控制,计划聘请两种不同水平的检验员,一级检验员的标准为:
速度 25件 /小时,正确率 98%,计时工资 4元 /小时;二级检验员的标准为:速度 15件 /小时,正确率 95%,计时工资 3元 /小时,检验员每错检一次,工厂要损失 2元,为使总检验费用最省,该工厂应聘一级、二级检验员各几名?
解 设需要一级和二级检验员的人数分别为 x1,x2人,
则应付检验员的工资为:
2121 24323848 xxxx因检验员错检而造成的损失为:
2121 1282)%5158%2258( xxxx
故目标函数为:
212121 3640)128()2432(m i n xxxxxxz
约束条件为:
0,0
1 8 0 0158
1 8 0 0258
1 8 0 0158258
21
2
1
21
xx
x
x
xx
线性规划模型:
21 3640m i n xxz
12
1
2
12
5 3 45
9
s.t,
15
0,0
xx
x
x
xx
解答返 回线性规划模型的一般形式
1
1
m in
,1,2,...,.
s.t,
0,1,2,...,.
n
ii
i
n
ik k i
k
i
u c x
a x b i n
x i n
目标函数和所有的约束条件都是设计变量的线性函数,
m i n
.
s,t
u c x
A x b
v l b x v u b
矩 阵 形 式,
实际问题中的优化模型 T1m i n ( m a x ) ( ),(,,)
s,t,( ) 0,1,2,,
n
i
z f x x x x
g x i m
或
x是决策变量 f(x)是目标函数 gi(x)?0是约束条件数学规划线性规划 (LP)
二次规划 (QP)
非线性规划 (NLP)
纯整数规划 (PIP)
混合整数规划 (MIP)
整数规划 (IP)
0-1整数规划一般整数规划连续规划优化模型的分类用 MATLAB优化工具箱解线性规划
min z=cX
s,t,A X b?
1,模型:
命令,x=linprog( c,A,b)
2,模型,min z=cX
s,t,A X b?
b e qXA e q
命令,x=linprog( c,A,b,Aeq,beq)
注意:若没有不等式,存在,则令 A=[ ],b=[ ].bAX?
3,模型,min z=cX
s,t,A X b?
b e qXA e q
VLB≤X≤VUB
命令,[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表示初始点
b e qXA e q
4,命令,[x,fval]=linprog(…)
返回最优解 x 及 x 处的目标函数值 fval.
解 编写 M文件 xxgh1.m如下:
c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6];
A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0
0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08];
b=[850;700;100;900];
Aeq=[]; beq=[];
vlb=[0;0;0;0;0;0]; vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
例 1 m ax
654321 6.064.072.032.028.04.0 xxxxxxz
1 2 3 4 5 6s,t,0,0 1 0,0 1 0,0 1 0,0 3 0,0 3 0,0 3 8 5 0x x x x x x
70005.002.0
41 xx
10005.002.0
52 xx
90008.003.0
63 xx
0 1,2,,6
jxj
To MATLAB (xxgh1)
例 2
321 436m i n xxxz
1 2 3s,t,1 2 0x x x
30
1?x
500
2 x
20
3?x
解,编写 M文件 xxgh2.m如下:
c=[6 3 4];
A=[0 1 0];
b=[50];
Aeq=[1 1 1];
beq=[120];
vlb=[30,0,20];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
To MATLAB (xxgh2)
1
2
3
m in ( 6 3 4)
x
zx
x
3
2
1
200
30
x
x
x
1
2
3
1 1 1 120s.t,
0 1 0 50
x
x
x
s.t.
Xz 8121110913m i n?
9 0 0
8 0 0
3.12.15.0000
00011.14.0 X
500
600
400
100100
010010
001001
X,
0
6
5
4
3
2
1
x
x
x
x
x
x
X
改写为:
例 3 问题一的解答 问题编写 M文件 xxgh3.m如下,
f = [13 9 10 11 12 8];
A = [0.4 1.1 1 0 0 0
0 0 0 0.5 1.2 1.3];
b = [800; 900];
Aeq=[1 0 0 1 0 0
0 1 0 0 1 0
0 0 1 0 0 1];
beq=[400 600 500];
vlb = zeros(6,1);
vub=[];
[x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub)
To MATLAB (xxgh3)
结果,
x =
0.0000
600.0000
0.0000
400.0000
0.0000
500.0000
fval =1.3800e+004
即在甲机床上加工 600个工件 2,在乙机床上加工 400个工件 1、
500个工件 3,可在满足条件的情况下使总加工费最小为 13800.
例 2 问题二的解答 问题
2
1
3640m i n
x
x
z
s,t, )45(35
2
1
x
x
改写为:
编写 M文件 xxgh4.m如下:
c = [40;36];
A=[-5 -3];
b=[-45];
Aeq=[];
beq=[];
vlb = zeros(2,1);
vub=[9;15];
%调用 linprog函数:
[x,fval] =
linprog(c,A,b,Aeq,beq,vlb,vub)
To MATLAB (xxgh4)
结果为:
x =
9.0000
0.0000
fval =360
即只需聘用 9个一级检验员,
注,本问题应还有一个约束条件,x1,x2取整数,故它是一个 整数线性规划 问题,这里把它当成一个线性规划来解,
求得其最优解刚好是整数,x1=9,x2=0,故它就是该整数规划的最优解,若用线性规划解法求得的最优解不是整数,
将其取整后不一定是相应整数规划的最优解,这样的整数规划应用专门的方法求解,
返 回用 LINDO,LINGO优化工具箱解线性规划一,LINDO软件包下面我们通过一个例题来说明 LINDO
软件包的使用方法,
LINDO和 LINGO软件能求解的优化模型
LINGOLINDO
优化模型线性规划
(LP)
非线性规划
(NLP)
二次规划
(QP)
连续优化 整数规划 (IP)
1桶牛奶
3千克 A112小时
8小时 4千克 A2
或获利 24元 /千克获利 16元 /千克
50桶牛奶 时间,480小时 至多加工 100千克 A1
制订生产计划,使每天获利最大
35元可买到 1桶牛奶,买吗?若买,每天最多买多少?
可聘用临时工人,付出的工资最多是每小时几元?
A1的获利增加到 30元 /千克,是否应改变生产计划?
每天:
例 1 加工奶制品的生产计划
x1桶牛奶生产 A1 x2桶牛奶生产 A2
获利 24× 3x1 获利 16× 4 x2
原料供应 50
21 xx
劳动时间 480812 21 xx
加工能力 1003 1?x
决策变量目标函数
12m a x 7 2 6 4z x x
每天获利约束条件非负约束 0,21?xx
线性规划模型
(LP)
建立模型
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
DO RANGE
(SENSITIVITY)
ANALYSIS? No
20桶牛奶生产 A1,30桶生产 A2,利润 3360元,
模型求解
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
原料无剩余时间无剩余加工能力剩余 40
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
三种资源
“资源” 剩余为零的约束为紧约束(有效约束)
结果解释模型求解 reduced cost值表示当该非基变量增加一个单位时
( 其他非基变量保持不变 ),目标函数减少的量 (对
max型问题 ),
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
也可理解为:
为了使该非基变量变成基变量,
目标函数中对应系数应增加的量
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
结果解释最优解下“资源”增加 1
单位时“效益”的增量原料增 1单位,利润增 48
时间增 1单位,利润增 2
能力增减不影响利润影子价格
35元可买到 1桶牛奶,要买吗? 35 <48,应该买!
聘用临时工人付出的工资最多每小时几元? 2元!
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
最优解不变时目标系数允许变化范围DO RANGE(SENSITIVITY) ANALYSIS? Yes
x1系数范围 (64,96)
x2系数范围 (48,72)
A1获利增加到 30元 /千克,应否改变生产计划
x1系数由 24?3=
72 增加 为 30?3=
90,在 允许范围内 不变!
(约束条件不变 )
结果解释结果解释
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
影子价格有意义时约束右端的允许变化范围原料最多增加 10
时间最多增加 53
35元可买到 1桶牛奶,每天最多买多少? 最多买 10桶
(目标函数不变 )
注意,充分但可能不必要
1.使用 LINDO的一些注意事项?
1.,>”(或,<”)号与,>=”(或,<=”)功能相同
2,变量与系数间可有空格 (甚至回车 ),但无运算符
3,变量名以字母开头,不能超过 8个字符
4,变量名不区分大小写(包括 LINDO中的关键字)
5,目标函数所在行是第一行,第二行起为约束条件
6,行号 (行名 )自动产生或人为定义,行名以“)”结束
7,行中注有,!”符号的后面部分为注释,如,
! It’s Comment.
8,在模型的任何地方都可以用,TITLE” 对模型命名
(最多 72个字符),如:
TITLE This Model is only an Example
9,变量不能出现在一个约束条件的右端
10.表达式中不接受括号,( )”和逗号“,”等任何符号,
例,400(X1+X2)需写为 400X1+400X2
11.表达式应化简,如 2X1+3X2- 4X1应写成 -2X1+3X2
12.缺省假定所有变量非负;可在模型的,END”语句后用,FREE name”将变量 name的非负假定取消
13.可在,END”后用,SUB” 或,SLB” 设定变量上下界例如:,sub x1 10”的作用等价于,x1<=10”
但用,SUB”和,SLB”表示的上下界约束不计入模型的约束,也不能给出其松紧判断和敏感性分析,
14.“END”后对 0-1变量说明,INT n 或 INT name
15.“END”后对整数变量说明,GIN n 或 GIN name
使用 LINDO的一些注意事项
2.状态窗口( LINDO Solver Status)
当前状态:已达最优解
迭代次数,18次
约束不满足的“量” (不是“约束个数” ),0
当前的目标值,94
最好的整数解,94
整数规划的界,93.5
分枝数,1
所用时间,0.00秒(太快了,还不到 0.005秒)
刷新本界面的间隔,1(秒 )
二,LINGO软件包
(1) LINGO模型的优点
1,LINGO软件简介
(2) 对简单的 LINGO程序
LINGO也可以和 LINDO一样编程
但 LINGO与 LINDO语法有差异
提供了灵活的编程语言(矩阵生成器)
包含了 LINDO的全部功能
Lindo与简单 Lingo程序的比较
Model:
min=7*x1+3*x2;
x1+x2>=345.5;
x1>=98;
2*x1+x2<=600;
@gin(x1);
@gin(x2);
end
min 7x1+3x2
st
x1+x2>=345.5
x1>=98
2*x1+x2<=600
end
gin 2
lindo程序,?lingo程序,
投资的收益和风险一、问题提出市场上有 n 种资产
is
( i =1,2,?,n )可以选择,现用数额为 M 的相当大的资金作一个时期的投资,这 n 种资产在这一时期内购买
is
的平均收益率为
ir
,风险损失率为
iq
,投资越分散,
总的风险越小,总体风险可用投资的
is
中最大的一个风险来度量,
购买
is
时要付交易费,( 费率
ip
),当购买额不超过给定值
iu
时,交易费按购买
iu
计算,
另外,假定同期银行存款利率是
0r
,既无交易费又无风险,(
0r
=5% )
已知 n =4 时相关数据如下,
is
ir
( % )
iq
( % )
ip
( % )
iu
(元)
S 1 28 2.5 1 103
S 2 21 1.5 2 198
S 3 23 5.5 4.5 52
S 4 25 2.6 6.5 40
试给该公司设计一种投资组合方案,即用给定 的 资金 M,有选择地购买若干种资产或存银行生息,使净收益尽可能大,使总体风险尽可能小,
基本假设,
1,投资数额 M 相当大,为了便于计算,假设 M =1 ;
2,投资越分散,总的风险越小;
3,总体风险用投资项目
is
中最大的一个风险来度量;
4,n 种资产
is
之间是相互独立的;
5,在投资的这一时期内,r i,p i,q i,r 0 为定值,不受意外因素影响;
6,净收益和总体风险只受 r i,p i,q i 影响,不受其他因素干扰,
二、基本假设和符号规定符号规定,
S i —— 第 i 种投资项目,如股票,债券
r i,p i,q i --- - 分别为 S i 的平均收益率,交易费率,风险损失率
u i -- -- S i 的交易定额
0r
------- 同期银行利率
x i ------- 投资项目 S i 的资金 a ---- - 投资风险度
Q --- - 总体收益 Δ Q -- -- 总体收益的增量三、模型的建立与分析
1.总体风险用所投资的 Si中最大的一个风险来衡量,即 max{ qixi|i=1,2,…,n}
2,购买 S i 所付交易费是一个分段函数,即
p i x i x i > u i
交易费 =
p i u i x i ≤ u i
而题目所给定的定值 u i ( 单位,元 ) 相对总投资 M 很小,p i u i 更小,
可以忽略不计,这样购买 S i 的净收益为 ( r i - p i ) x i
3,要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型,
目标函数 m ax
n
i
iii xpr
0
)(
m i n m ax{ q i x i }
约束条件
0
( 1 )
n
ii
i
px
= M
x i ≥ 0 i = 0,1,…,n
4,模型简化:
c,投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合,
因此对风险、收益赋予权重 s ( 0 < s ≤ 1),s 称为投资偏好系数,
模型 3 目标函数,m i n s { m ax{ q i x i }} - ( 1 - s )
n
i
iii xpr
0
)(
约束条件
0
( 1 )
n
ii
i
px
= M,x i ≥ 0 i = 0,1,2,?,n
b,若投资者希望总盈利至少达到水平 k 以上,在风险最小的情况下寻找相应的投资组合,
模型 2 固定盈利水平,极小化风险目标函数,R = m i n{ m ax{ q i x i }}
约束条件:
n
i
iii xpr
0
)(
≥ k,
Mxp ii )1(
,x i ≥ 0 i =0,1,?,n
a,在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限 a,使最大的一个风险 q i x i / M ≤ a,可找到相应的投资方案,这样把多目标规划变成一个目标的线性规划,
模型 1 固定风险水平,优化收益目标函数,Q =max
1
1
)(
n
i
iii xpr
约束条件,
M
xq ii ≤ a
Mxp ii )1(
,x i ≥ 0 i = 0,1,?,n
四、模型 1的求解模型 1 为,
m i nf = ( - 0.05,- 0.27,- 0.19,- 0.185,- 0.185) ( x 0 x 1 x 2 x 3 x 4 )
T
x 0 + 1.0 1 x 1 + 1.02 x 2 + 1.04 5 x 3 + 1.06 5 x 4 = 1
0,025 x 1 ≤ a
0.01 5 x 2 ≤ a
s.t,0.055 x 3 ≤ a
0.02 6 x 4 ≤ a
x i ≥ 0 ( i = 0,1,?,4)
由于 a是任意给定的风险度,到底怎样给定没有一个准则,不同的投资者有不同的风险度,我们从 a=0开始,以步长 △ a=0.001进行循环搜索,编制程序如下:
a=0;
while(1.1-a)>1
c=[-0.05 -0.27 -0.19 -0.185 -0.185];
Aeq=[1 1.01 1.02 1.045 1.065]; beq=[1];
A=[0 0.025 0 0 0;0 0 0.015 0 0;0 0 0 0.055 0;0 0 0 0 0.026];
b=[a;a;a;a];
vlb=[0,0,0,0,0];vub=[];
[x,val]=linprog(c,A,b,Aeq,beq,vlb,vub);
a
x=x'
Q=-val
plot(a,Q,'.'),axis([0 0.1 0 0.5]),hold on
a=a+0.001;
end
xlabel('a'),ylabel('Q')
To MATLAB( xxgh5)
a = 0.0030 x = 0.4949 0,12 00 0,20 00 0,05 45 0,11 54 Q = 0.1266
a = 0.0060 x = 0 0,2 40 0 0,40 00 0,10 91 0,22 12 Q = 0.2019
a = 0.0080 x = 0.0000 0,32 00 0,53 33 0,12 71 0,00 00 Q = 0.2112
a = 0.0100 x = 0 0,4 00 0 0,58 43 0 0 Q =0.2190
a = 0.0200 x = 0 0,8 00 0 0,18 82 0 0 Q =0.2518
a = 0.0400 x = 0.0000 0,99 01 0,00 00 0 0 Q =0.2673
计算结果:
五,结果分析返 回
4.在 a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长很快,在这一点右边,风险增加很大时,利润增长很缓慢,所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的拐点作为最优投资组合,
大约是 a*=0.6%,Q*=20%,所对应投资方案为,
风险度 收益 x0 x1 x2 x3 x4
0.0060 0.2019 0 0.2400 0.4000 0.1091 0.2212
3.曲线上的任一点都表示该风险水平的最大可能收益和该收益要求的最小风险,对于不同风险的承受能力,选择该风险水平下的最优投资组合,
2.当投资越分散时,投资者承担的风险越小,这与题意一致,即,
冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资,
1.风险大,收益也大,
实验作业某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料 6千克,
工人 10名,可获利 10万元 ;每百箱乙饮料需用原料 5千克,工人 20
名,可获利 9万元,今工厂共有原料 60千克,工人 150名,又由于其他条件所限甲饮料产量不超过 800箱,问如何安排生产计划,即两种饮料各生产多少使获利最大,进一步讨论,
1)若投资 0.8万元可增加原料 1千克,问应否作这项投资,
2)若每 100箱甲饮料获利可增加 1万元,问应否改变生产计划,
返 回
2,掌握用数学软件包求解线性规划问题,
1,了解线性规划的基本内容,
2,用数学软件包 MATLAB求解线性规划问题,
5,实验作业,
3,用数学软件包 LINDO,LINGO求解线性规划问题,
1,两个引例,
4,建模案例:投资的收益与风险,
问题一,任务分配问题:某车间有甲、乙两台机床,可用于加工三种工件,假定这两台车床的可用台时数分别为 800和
900,三种工件的数量分别为 400,600和 500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表,问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?
单位工件所需加工台时数 单位工件的加工费用 车床类 型 工件 1 工件 2 工件 3 工件 1 工件 2 工件 3
可用台时数甲 0,4 1,1 1,0 13 9 10 800
乙 0,5 1,2 1,3 11 12 8 900
两个引例解 设在甲车床上加工工件 1,2,3的数量分别为 x1,x2,x3,
在乙车床上加工工件 1,2,3的数量分别为 x4,x5,x6,可建立以下线性规划模型:
654321 8121110913m i n xxxxxxz
14
25
36
1 2 3
4 5 6
x 40 0
600
500
s,t,
0.4 1.1 80 0
0.5 1.2 1.3 90 0
0,1,2,,6
i
x
xx
xx
x x x
x x x
xi
解答问题二,某厂每日 8小时的产量不低于 1800件,为了进行质量控制,计划聘请两种不同水平的检验员,一级检验员的标准为:
速度 25件 /小时,正确率 98%,计时工资 4元 /小时;二级检验员的标准为:速度 15件 /小时,正确率 95%,计时工资 3元 /小时,检验员每错检一次,工厂要损失 2元,为使总检验费用最省,该工厂应聘一级、二级检验员各几名?
解 设需要一级和二级检验员的人数分别为 x1,x2人,
则应付检验员的工资为:
2121 24323848 xxxx因检验员错检而造成的损失为:
2121 1282)%5158%2258( xxxx
故目标函数为:
212121 3640)128()2432(m i n xxxxxxz
约束条件为:
0,0
1 8 0 0158
1 8 0 0258
1 8 0 0158258
21
2
1
21
xx
x
x
xx
线性规划模型:
21 3640m i n xxz
12
1
2
12
5 3 45
9
s.t,
15
0,0
xx
x
x
xx
解答返 回线性规划模型的一般形式
1
1
m in
,1,2,...,.
s.t,
0,1,2,...,.
n
ii
i
n
ik k i
k
i
u c x
a x b i n
x i n
目标函数和所有的约束条件都是设计变量的线性函数,
m i n
.
s,t
u c x
A x b
v l b x v u b
矩 阵 形 式,
实际问题中的优化模型 T1m i n ( m a x ) ( ),(,,)
s,t,( ) 0,1,2,,
n
i
z f x x x x
g x i m
或
x是决策变量 f(x)是目标函数 gi(x)?0是约束条件数学规划线性规划 (LP)
二次规划 (QP)
非线性规划 (NLP)
纯整数规划 (PIP)
混合整数规划 (MIP)
整数规划 (IP)
0-1整数规划一般整数规划连续规划优化模型的分类用 MATLAB优化工具箱解线性规划
min z=cX
s,t,A X b?
1,模型:
命令,x=linprog( c,A,b)
2,模型,min z=cX
s,t,A X b?
b e qXA e q
命令,x=linprog( c,A,b,Aeq,beq)
注意:若没有不等式,存在,则令 A=[ ],b=[ ].bAX?
3,模型,min z=cX
s,t,A X b?
b e qXA e q
VLB≤X≤VUB
命令,[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表示初始点
b e qXA e q
4,命令,[x,fval]=linprog(…)
返回最优解 x 及 x 处的目标函数值 fval.
解 编写 M文件 xxgh1.m如下:
c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6];
A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0
0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08];
b=[850;700;100;900];
Aeq=[]; beq=[];
vlb=[0;0;0;0;0;0]; vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
例 1 m ax
654321 6.064.072.032.028.04.0 xxxxxxz
1 2 3 4 5 6s,t,0,0 1 0,0 1 0,0 1 0,0 3 0,0 3 0,0 3 8 5 0x x x x x x
70005.002.0
41 xx
10005.002.0
52 xx
90008.003.0
63 xx
0 1,2,,6
jxj
To MATLAB (xxgh1)
例 2
321 436m i n xxxz
1 2 3s,t,1 2 0x x x
30
1?x
500
2 x
20
3?x
解,编写 M文件 xxgh2.m如下:
c=[6 3 4];
A=[0 1 0];
b=[50];
Aeq=[1 1 1];
beq=[120];
vlb=[30,0,20];
vub=[];
[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)
To MATLAB (xxgh2)
1
2
3
m in ( 6 3 4)
x
zx
x
3
2
1
200
30
x
x
x
1
2
3
1 1 1 120s.t,
0 1 0 50
x
x
x
s.t.
Xz 8121110913m i n?
9 0 0
8 0 0
3.12.15.0000
00011.14.0 X
500
600
400
100100
010010
001001
X,
0
6
5
4
3
2
1
x
x
x
x
x
x
X
改写为:
例 3 问题一的解答 问题编写 M文件 xxgh3.m如下,
f = [13 9 10 11 12 8];
A = [0.4 1.1 1 0 0 0
0 0 0 0.5 1.2 1.3];
b = [800; 900];
Aeq=[1 0 0 1 0 0
0 1 0 0 1 0
0 0 1 0 0 1];
beq=[400 600 500];
vlb = zeros(6,1);
vub=[];
[x,fval] = linprog(f,A,b,Aeq,beq,vlb,vub)
To MATLAB (xxgh3)
结果,
x =
0.0000
600.0000
0.0000
400.0000
0.0000
500.0000
fval =1.3800e+004
即在甲机床上加工 600个工件 2,在乙机床上加工 400个工件 1、
500个工件 3,可在满足条件的情况下使总加工费最小为 13800.
例 2 问题二的解答 问题
2
1
3640m i n
x
x
z
s,t, )45(35
2
1
x
x
改写为:
编写 M文件 xxgh4.m如下:
c = [40;36];
A=[-5 -3];
b=[-45];
Aeq=[];
beq=[];
vlb = zeros(2,1);
vub=[9;15];
%调用 linprog函数:
[x,fval] =
linprog(c,A,b,Aeq,beq,vlb,vub)
To MATLAB (xxgh4)
结果为:
x =
9.0000
0.0000
fval =360
即只需聘用 9个一级检验员,
注,本问题应还有一个约束条件,x1,x2取整数,故它是一个 整数线性规划 问题,这里把它当成一个线性规划来解,
求得其最优解刚好是整数,x1=9,x2=0,故它就是该整数规划的最优解,若用线性规划解法求得的最优解不是整数,
将其取整后不一定是相应整数规划的最优解,这样的整数规划应用专门的方法求解,
返 回用 LINDO,LINGO优化工具箱解线性规划一,LINDO软件包下面我们通过一个例题来说明 LINDO
软件包的使用方法,
LINDO和 LINGO软件能求解的优化模型
LINGOLINDO
优化模型线性规划
(LP)
非线性规划
(NLP)
二次规划
(QP)
连续优化 整数规划 (IP)
1桶牛奶
3千克 A112小时
8小时 4千克 A2
或获利 24元 /千克获利 16元 /千克
50桶牛奶 时间,480小时 至多加工 100千克 A1
制订生产计划,使每天获利最大
35元可买到 1桶牛奶,买吗?若买,每天最多买多少?
可聘用临时工人,付出的工资最多是每小时几元?
A1的获利增加到 30元 /千克,是否应改变生产计划?
每天:
例 1 加工奶制品的生产计划
x1桶牛奶生产 A1 x2桶牛奶生产 A2
获利 24× 3x1 获利 16× 4 x2
原料供应 50
21 xx
劳动时间 480812 21 xx
加工能力 1003 1?x
决策变量目标函数
12m a x 7 2 6 4z x x
每天获利约束条件非负约束 0,21?xx
线性规划模型
(LP)
建立模型
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
DO RANGE
(SENSITIVITY)
ANALYSIS? No
20桶牛奶生产 A1,30桶生产 A2,利润 3360元,
模型求解
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
原料无剩余时间无剩余加工能力剩余 40
max 72x1+64x2
st
2) x1+x2<50
3) 12x1+8x2<480
4) 3x1<100
end
三种资源
“资源” 剩余为零的约束为紧约束(有效约束)
结果解释模型求解 reduced cost值表示当该非基变量增加一个单位时
( 其他非基变量保持不变 ),目标函数减少的量 (对
max型问题 ),
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
NO,ITERATIONS= 2
也可理解为:
为了使该非基变量变成基变量,
目标函数中对应系数应增加的量
OBJECTIVE FUNCTION VALUE
1) 3360.000
VARIABLE VALUE REDUCED COST
X1 20.000000 0.000000
X2 30.000000 0.000000
ROW SLACK OR SURPLUS DUALPRICES
2) 0.000000 48.000000
3) 0.000000 2.000000
4) 40.000000 0.000000
结果解释最优解下“资源”增加 1
单位时“效益”的增量原料增 1单位,利润增 48
时间增 1单位,利润增 2
能力增减不影响利润影子价格
35元可买到 1桶牛奶,要买吗? 35 <48,应该买!
聘用临时工人付出的工资最多每小时几元? 2元!
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
最优解不变时目标系数允许变化范围DO RANGE(SENSITIVITY) ANALYSIS? Yes
x1系数范围 (64,96)
x2系数范围 (48,72)
A1获利增加到 30元 /千克,应否改变生产计划
x1系数由 24?3=
72 增加 为 30?3=
90,在 允许范围内 不变!
(约束条件不变 )
结果解释结果解释
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 72.000000 24.000000 8.000000
X2 64.000000 8.000000 16.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 50.000000 10.000000 6.666667
3 480.000000 53.333332 80.000000
4 100.000000 INFINITY 40.000000
影子价格有意义时约束右端的允许变化范围原料最多增加 10
时间最多增加 53
35元可买到 1桶牛奶,每天最多买多少? 最多买 10桶
(目标函数不变 )
注意,充分但可能不必要
1.使用 LINDO的一些注意事项?
1.,>”(或,<”)号与,>=”(或,<=”)功能相同
2,变量与系数间可有空格 (甚至回车 ),但无运算符
3,变量名以字母开头,不能超过 8个字符
4,变量名不区分大小写(包括 LINDO中的关键字)
5,目标函数所在行是第一行,第二行起为约束条件
6,行号 (行名 )自动产生或人为定义,行名以“)”结束
7,行中注有,!”符号的后面部分为注释,如,
! It’s Comment.
8,在模型的任何地方都可以用,TITLE” 对模型命名
(最多 72个字符),如:
TITLE This Model is only an Example
9,变量不能出现在一个约束条件的右端
10.表达式中不接受括号,( )”和逗号“,”等任何符号,
例,400(X1+X2)需写为 400X1+400X2
11.表达式应化简,如 2X1+3X2- 4X1应写成 -2X1+3X2
12.缺省假定所有变量非负;可在模型的,END”语句后用,FREE name”将变量 name的非负假定取消
13.可在,END”后用,SUB” 或,SLB” 设定变量上下界例如:,sub x1 10”的作用等价于,x1<=10”
但用,SUB”和,SLB”表示的上下界约束不计入模型的约束,也不能给出其松紧判断和敏感性分析,
14.“END”后对 0-1变量说明,INT n 或 INT name
15.“END”后对整数变量说明,GIN n 或 GIN name
使用 LINDO的一些注意事项
2.状态窗口( LINDO Solver Status)
当前状态:已达最优解
迭代次数,18次
约束不满足的“量” (不是“约束个数” ),0
当前的目标值,94
最好的整数解,94
整数规划的界,93.5
分枝数,1
所用时间,0.00秒(太快了,还不到 0.005秒)
刷新本界面的间隔,1(秒 )
二,LINGO软件包
(1) LINGO模型的优点
1,LINGO软件简介
(2) 对简单的 LINGO程序
LINGO也可以和 LINDO一样编程
但 LINGO与 LINDO语法有差异
提供了灵活的编程语言(矩阵生成器)
包含了 LINDO的全部功能
Lindo与简单 Lingo程序的比较
Model:
min=7*x1+3*x2;
x1+x2>=345.5;
x1>=98;
2*x1+x2<=600;
@gin(x1);
@gin(x2);
end
min 7x1+3x2
st
x1+x2>=345.5
x1>=98
2*x1+x2<=600
end
gin 2
lindo程序,?lingo程序,
投资的收益和风险一、问题提出市场上有 n 种资产
is
( i =1,2,?,n )可以选择,现用数额为 M 的相当大的资金作一个时期的投资,这 n 种资产在这一时期内购买
is
的平均收益率为
ir
,风险损失率为
iq
,投资越分散,
总的风险越小,总体风险可用投资的
is
中最大的一个风险来度量,
购买
is
时要付交易费,( 费率
ip
),当购买额不超过给定值
iu
时,交易费按购买
iu
计算,
另外,假定同期银行存款利率是
0r
,既无交易费又无风险,(
0r
=5% )
已知 n =4 时相关数据如下,
is
ir
( % )
iq
( % )
ip
( % )
iu
(元)
S 1 28 2.5 1 103
S 2 21 1.5 2 198
S 3 23 5.5 4.5 52
S 4 25 2.6 6.5 40
试给该公司设计一种投资组合方案,即用给定 的 资金 M,有选择地购买若干种资产或存银行生息,使净收益尽可能大,使总体风险尽可能小,
基本假设,
1,投资数额 M 相当大,为了便于计算,假设 M =1 ;
2,投资越分散,总的风险越小;
3,总体风险用投资项目
is
中最大的一个风险来度量;
4,n 种资产
is
之间是相互独立的;
5,在投资的这一时期内,r i,p i,q i,r 0 为定值,不受意外因素影响;
6,净收益和总体风险只受 r i,p i,q i 影响,不受其他因素干扰,
二、基本假设和符号规定符号规定,
S i —— 第 i 种投资项目,如股票,债券
r i,p i,q i --- - 分别为 S i 的平均收益率,交易费率,风险损失率
u i -- -- S i 的交易定额
0r
------- 同期银行利率
x i ------- 投资项目 S i 的资金 a ---- - 投资风险度
Q --- - 总体收益 Δ Q -- -- 总体收益的增量三、模型的建立与分析
1.总体风险用所投资的 Si中最大的一个风险来衡量,即 max{ qixi|i=1,2,…,n}
2,购买 S i 所付交易费是一个分段函数,即
p i x i x i > u i
交易费 =
p i u i x i ≤ u i
而题目所给定的定值 u i ( 单位,元 ) 相对总投资 M 很小,p i u i 更小,
可以忽略不计,这样购买 S i 的净收益为 ( r i - p i ) x i
3,要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型,
目标函数 m ax
n
i
iii xpr
0
)(
m i n m ax{ q i x i }
约束条件
0
( 1 )
n
ii
i
px
= M
x i ≥ 0 i = 0,1,…,n
4,模型简化:
c,投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合,
因此对风险、收益赋予权重 s ( 0 < s ≤ 1),s 称为投资偏好系数,
模型 3 目标函数,m i n s { m ax{ q i x i }} - ( 1 - s )
n
i
iii xpr
0
)(
约束条件
0
( 1 )
n
ii
i
px
= M,x i ≥ 0 i = 0,1,2,?,n
b,若投资者希望总盈利至少达到水平 k 以上,在风险最小的情况下寻找相应的投资组合,
模型 2 固定盈利水平,极小化风险目标函数,R = m i n{ m ax{ q i x i }}
约束条件:
n
i
iii xpr
0
)(
≥ k,
Mxp ii )1(
,x i ≥ 0 i =0,1,?,n
a,在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限 a,使最大的一个风险 q i x i / M ≤ a,可找到相应的投资方案,这样把多目标规划变成一个目标的线性规划,
模型 1 固定风险水平,优化收益目标函数,Q =max
1
1
)(
n
i
iii xpr
约束条件,
M
xq ii ≤ a
Mxp ii )1(
,x i ≥ 0 i = 0,1,?,n
四、模型 1的求解模型 1 为,
m i nf = ( - 0.05,- 0.27,- 0.19,- 0.185,- 0.185) ( x 0 x 1 x 2 x 3 x 4 )
T
x 0 + 1.0 1 x 1 + 1.02 x 2 + 1.04 5 x 3 + 1.06 5 x 4 = 1
0,025 x 1 ≤ a
0.01 5 x 2 ≤ a
s.t,0.055 x 3 ≤ a
0.02 6 x 4 ≤ a
x i ≥ 0 ( i = 0,1,?,4)
由于 a是任意给定的风险度,到底怎样给定没有一个准则,不同的投资者有不同的风险度,我们从 a=0开始,以步长 △ a=0.001进行循环搜索,编制程序如下:
a=0;
while(1.1-a)>1
c=[-0.05 -0.27 -0.19 -0.185 -0.185];
Aeq=[1 1.01 1.02 1.045 1.065]; beq=[1];
A=[0 0.025 0 0 0;0 0 0.015 0 0;0 0 0 0.055 0;0 0 0 0 0.026];
b=[a;a;a;a];
vlb=[0,0,0,0,0];vub=[];
[x,val]=linprog(c,A,b,Aeq,beq,vlb,vub);
a
x=x'
Q=-val
plot(a,Q,'.'),axis([0 0.1 0 0.5]),hold on
a=a+0.001;
end
xlabel('a'),ylabel('Q')
To MATLAB( xxgh5)
a = 0.0030 x = 0.4949 0,12 00 0,20 00 0,05 45 0,11 54 Q = 0.1266
a = 0.0060 x = 0 0,2 40 0 0,40 00 0,10 91 0,22 12 Q = 0.2019
a = 0.0080 x = 0.0000 0,32 00 0,53 33 0,12 71 0,00 00 Q = 0.2112
a = 0.0100 x = 0 0,4 00 0 0,58 43 0 0 Q =0.2190
a = 0.0200 x = 0 0,8 00 0 0,18 82 0 0 Q =0.2518
a = 0.0400 x = 0.0000 0,99 01 0,00 00 0 0 Q =0.2673
计算结果:
五,结果分析返 回
4.在 a=0.006附近有一个转折点,在这一点左边,风险增加很少时,利润增长很快,在这一点右边,风险增加很大时,利润增长很缓慢,所以对于风险和收益没有特殊偏好的投资者来说,应该选择曲线的拐点作为最优投资组合,
大约是 a*=0.6%,Q*=20%,所对应投资方案为,
风险度 收益 x0 x1 x2 x3 x4
0.0060 0.2019 0 0.2400 0.4000 0.1091 0.2212
3.曲线上的任一点都表示该风险水平的最大可能收益和该收益要求的最小风险,对于不同风险的承受能力,选择该风险水平下的最优投资组合,
2.当投资越分散时,投资者承担的风险越小,这与题意一致,即,
冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资,
1.风险大,收益也大,
实验作业某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料 6千克,
工人 10名,可获利 10万元 ;每百箱乙饮料需用原料 5千克,工人 20
名,可获利 9万元,今工厂共有原料 60千克,工人 150名,又由于其他条件所限甲饮料产量不超过 800箱,问如何安排生产计划,即两种饮料各生产多少使获利最大,进一步讨论,
1)若投资 0.8万元可增加原料 1千克,问应否作这项投资,
2)若每 100箱甲饮料获利可增加 1万元,问应否改变生产计划,
返 回