线性规划的Matlab求解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5 c= 1.5 0 5 15 A= 6 2 , b= 24 , Aeq = , beq = 1 1 5 0 lb , ub 0

» c=[-5; -1.5]; A=[0 5; 6 2; 1 1]; b=[15; 24; 5]; Aeq=[]; beq=[]; lb=[0; 0]; ub=[]; % ub=[inf; inf] x=linprog(c, A, b, Aeq, beq, lb, ub)
lb ub
决策变量的上界和下界
则lb= [ ]; 或 ub=[ ]; 若某个变量i的上界或下界无限制, 则取lb(i) = -inf 或 ub(i) = inf
x0
迭代初始点
只适用于active-set算法,默认时大型算法将忽略初值。
options
用于指定优化的控制参数
options用于指定优化的控制参数
» lambda.ineqlin
max Z 40 x1 30 x2 3 x1 2 x2 54 2 x 2 x 40 2 s.t. 1 x1 2 x2 35 x1 0 x2 0
» 实验将土地资源增加一个单位后的最优值!
工具箱GUI界面

例3
max Z 4 x1 2 x2 x3 2 x1 x2 x3 12 8 x1 2 x 2 x 8 2 3 s.t. 2 x1 x3 3 x1 x2 7 x1 0 x2 0 x3 0
4 c= 2 1 2 A= 8 1 1 12 , b= , 2 2 8 0 1 1 3 , beq = 0 7
aeqh1x1 + aeqh2x2 + …. + aeqhnxn = beqh lx1 x1 ux1, lx2 x2 ux2, …., lxn xn uxn
线性规划的Matlab标准形式的矩阵表示
min Z C T X AX b s.t. Aeq X beq lb X ub
函数计算终止的误差限 大型规模算法:默认1e-8;单纯形算法:默认1e-6;
输出参数说明(1)
x 由优化函数求得的值 若exitflag>0,则x为解; 否则,x只是迭代终止时的值。
fval
解x处的目标函数值 1:目标函数收敛于解x处; 0:已经达到最大的迭代次数限制ptions.MaxIter;
.eqlin:等式约束的拉格朗日乘子; .upper:上界约束的拉格朗日乘子; .lower:下界约束的拉格朗日乘子;
例4:求最优生产计划,使公司获利最大
• 设某公司生产另种产品:食物(x1), 服装(x2)
• 生产单位食品获利40元,单位服装获利30元 • 需要投入三种资源:土地(H)、劳动(L)、资本(K) • 生产一个单位食品投入:3H • 生产一个单位服装投入:2H • 公司拥有:54H 40L 35K 2L 2L 1K 2K
exitflag
描述退出条件
-2:没有找到可行解;
-3:问题无有限最优解;
-4:算法执行过程中遇到NaN值; -5:原问题和对偶问题均不可行;
例2’
» c=[-5; -1.5]; A=[0 5; 6 2; 1 1]; b=[15; 24; 5]; Aeq=[]; beq=[]; lb=[0; 0]; ub=[inf; inf]; x0=[]; options=optimset(‘LargeScale’, ‘off’, ‘Simplex’, ‘on’); [x, fval, exitflag, output] ... =linprog(c, A, b, Aeq, beq, lb, ub, x0, options);
lx1 u x1 lx 2 u lb , ub x 2 lxn u xn
Matlab使用linprog函数求解线性规划

• • • •
>> help linprog
x = linprog(c, A, b)
,
beq =

» c=[-2; -3]; A=[2 2; 1 2; 4 0; 0 4]; b=[12; 8; 16; 12]; x=linprog(c, A, b) » fval=c’*x
,
ub

例2
max Z 5 x1 1.5 x2 5 x2 15 6 x 2 x 24 2 s.t. 1 x1 x2 5 x1 0 x2 0
– 表示给出每一步迭代结果,计算误差限位1e-8;
>> help linprog
options用于指定优化的控制参数
参数名称 参数设置 on 或off(默认值) 设置是否显示优化中的诊断信息,特别是计算终止的原因;
>> help optimset
Diagnostics
off(默认值):不显示任何输出信息;
a21x1 + a22x2 + …. + a2nxn b2 (=或 )
......
am1x1 +am2x2 + ….+ amnxn bm (=或 ) x1, x2, …., xn 0
线性规划的Matlab标准形式
min Z = c1x1 + c2x2 + …. + cnxn s.t. a11x1 + a12x2 + …. + a1nxn b1 注意!!! (1)最小化问题; (2)约束分成两组; (3)决策变量给出下界和上界;
线性规划求解
Matlab的优化工具箱:Optimization Toolbox
线性规划的一般形式
max Z = c1x1 + c2x2 + …. + cnxn (或min) s.t. a11x1 + a12x2 + …. + a1nxn b1 (=或 )
max Z cT X AX b s.t. X 0
Display iter:显示每一步的迭代信息; final:仅显示最终的输出信息;
Simplex
该参数值为on时,采用单纯形算法;
on(默认值):采用大型规模算法;
LargeScale
off:采用中性规模算法;
MaxIter TolFun 设置算法的最大迭代次数 大型规模算法:默认85;单纯形算法:默认10*决策变量数;
x = linprog(c, A, b, Aeq, beq) x = linprog(c, A, b, Aeq, beq, lb, ub) x = linprog(c, A, b, Aeq, beq, lb, ub, x0) x = linprog(c, A, b, Aeq, beq, lb, ub, x0, options)
输出参数说明(2)
.iterations:实际的迭代次数; .algorithm:所采用的算法; output 包含优化结果信息的结构 .cgiterations:0; (仅用于大型算法,为向后兼容而 设置的参数) .message:退出信息;
包含解x处的拉格朗日乘
子的结构 lambda
.ineqlin:线性不等式约束的拉格朗日乘子;
2 Aeq = 1
输入参数说明
c A b Aeq beq 目标函数中的系数向量 不等式约束 对应的矩阵和常数列 等式约束 对应的矩阵和常数列 行、列形式均可
若没有不等式约束,则 A = [ ]; b = [ ]
若没有等式约束,则 Aeq = [ ]; beq = [ ] 若所有变量上界或下界无限制,
a21x1 + a22x2 + …. + a2nxn b2
......Biblioteka Baidu
am1x1 + am2x2 + …. + amnxn bm aeq11x1 + aeq12x2 + …. + aeq1nxn = beq1 aeq21x1 + aeq22x2 + …. + aeq2nxn = beq2
......
• Start按钮 toolboxesoptimization optimization tool
max Z 40 x1 30 x2 3 x1 2 x2 54 2 x 2 x 40 2 s.t. 1 x1 2 x2 35 x1 0 x2 0
lambda给出影子价格
» f=[-40; -30]; A=[3 2; 2 2; 1 2]; b=[54; 40; 35]; lb=[0; 0]; [x, fval, exitflag, output, lambda] =linprog(f, A, b, [], [], lb, [])
• options = optimset(‘param1’, value1, ‘param2’, value2, …);
• 示例: • options = optimset(‘LargeScale’, ‘off’, ‘Simplex’, ‘on’);
– 表示不采用大规模算法,采用单纯形发求解;
• options = optimset(‘Display’,‘iter’,‘TolFun’,1e-8);
其中: c1 x1 c2 x2 , c= , X= cn xn a11 a A= 21 am1 a12 a22 am 2
eq a11 a1n b1 eq a2 n b2 a , b= , Aeq = 21 a eq amn bm h1 eq b1eq a12 a1eq n eq a eq a eq b 22 2n , beq = 2 eq eq b eq ah 2 ahn h
例1
max Z 2 x1 3 x2 2 x1 2 x2 12 x 2x 8 2 s.t. 1 4 x1 16 4 x2 12
2 c= 3 2 1 A= 4 0 lb 2 12 2 8 , b= , Aeq = 16 0 4 12
» c=[-4; 2; -1]; A=[2 -1 1; 8 -2 2]; b=[12; -8]; 0 Aeq=[-2 0 1; 1 1 0]; lb 0 , ub 0 beq=[3; 7]; lb=[0; 0; 0]; ub=[]; x=linprog(c, A, b, Aeq, beq, lb, ub)
• •
[x, fval] = linprog(。。。) [x, fval, exitflag] = linprog(。。。)


[x, fval, exitflag, output] = linprog(。。。)
[x, fval, exitflag, output, lambda] = linprog(。。。)
其中: c1 x1 c2 , X = x2 , c= cn xn a11 a A= 21 am1 a12 a22 am 2 a1n b1 a2 n b , b= 2 amn bm
相关文档
最新文档