(完整版)第三讲Matlab优化工具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三讲Matlab优化工具
一、简介
在建模过程中,许多问题都可归结为“最优化(optimization)”问题,如最大利润、最小成本、最短路径等,最优化问题也称数学规划。要描述一个最优化问题,应明确三个基本要素:
决策变量(decision variables):它们是决策者所控制的变量,它们取什么值需要决策者来决策,最优化问题的求解就是找出决策变量的最优取值。
约束条件(constraints):它们是决策变量在现实世界中所受到的限制,或者说决策变量在这些限制范围之内取值才有实际意义。
目标函数(objective function):它代表决策者希望对其进行优化的那个指标,目标函数是决策变量的函数。
最优化问题的分类,按决策变量是否是时间的函数分为动态优化和静态优化。按目标函数与约束条件是否是决策变量的线性函数分为线性规划和非线性规划,按决策变量是否为整数分为整数规划和非整数规划,此外还有0-1规划、二次规划、多目标优化、最小最大优化问题等。
可行解(feasible solution):满足全部约束条件的决策向量。
可行域:全部可行解构成的集合。
最优解:使目标函数达到最优值(最大或最小值,并且有界)的可行解。
无界解:若求极大化则目标函数在可行域中无上界,若求极小化
则目标函数在可行域中无下界。
二、线性规划(Linear programming )
Matlab 中,线性规划问题的标准形式为
min .. T eq eq c x
Ax b s t A x b lb x ub
⎧≤⎪=⎨⎪≤≤⎩ 其中1212(,,),(,,)T T n n c c c c x x x x ==L L
思考:最大值问题 max T c x 和不等式约束Ax b ≥怎样转化为上述标准形式?(加负号;两边同乘-1)
Matlab 中解上述线性规划问题的指令:
x=linprog(c,A,b,Aeq,beq,lb,ub)
或[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
说明:当上述指令中某个输入参数缺省时应在相应位置填上空矩阵[],若从某项输入参数开始往后各项参数都缺省,则可以将其全部
省略而不用补上[]。例如线性规划问题 min , .. T c x s t Ax b ≤,可以表示
为 x=linprog(c,A,b);而问题min , .. T Ax b c x s t lb x ub ≤⎧⎨
≤≤⎩则必须表示为x=linprog(c,A,b,[],[],lb,ub)
例:解下列线性规划问题
1、1231231231
2min 5462032442..32300,1,2,3i z x x x x x x x x x s t x x x i =----+≤⎧⎪++≤⎪⎨+≤⎪⎪≥=⎩ 2、123423412123124max 4001000300200202316..3424050,0,0z x x x x x x x x x s t x x x x x x =++--++=⎧⎪+≤⎪⎪+≤⎨⎪≤≤⎪⎪≥≥≥⎩
解:1、>> c=[-5 -4 -6];A=[1 -1 1;3 2 4;3 2 0];
>> b=[20 42 30];lb=zeros(3,1);
>> [x,fval]=linprog(c,A,b,[],[],lb)
2、>> c=[400 1000 300 -200];c=-c;
>> A=[2 3 0 0;3 4 0 0];b=[16 24];
>> Aeq=[0 -2 1 1];beq=[0];
>> lb=zeros(4,1);ub=[inf inf 5 inf]';
>> [x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
三、非线性规划(Nonlinear programming )
当目标函数、约束条件中至少有一个表达式是非线性函数时称为非线性规划,一般形式:
min ()
, .. ()0,()0 eq eq f x Ax b A x b s t c x ceq x lb x ub ≤=⎧⎪≤=⎨⎪≤≤⎩
线性约束非线性约束
其中(),()c x ceq x 都是函数向量。
Matlab 中求解非线性规划的指令:
x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub ,nonlcon)
调用格式与linprog 函数的调用格式相同。其中x0是最优值x 的初始值(估计值),fun 和nonlcon 是目标函数和非线性约束函数文件的函数句柄。
例:求解非线性规划问题
1、123
123min ().. 02272f x x x x s t x x x =-≤++≤ 取初值0[10,10,10]x =
>>obj=inline('-x(1)*x(2)*x(3)','x')
>> x0=[10 10 10];A=[-1 -2 -2;1 2 2];b=[0 72]; >> [x,fval]=fmincon(obj,x0,A,b)
2、
22
12
12
22
12 min
4
..
(4)2
z x x
x x
s t
x x
=+
+=
⎧
⎨
-+≤
⎩
先建立目标函数文件[obj1.m]和非线性约束条件函数文件[nonlcon1.m]
然后在命令窗口输入:
>> Aeq=[1 1];beq=4;x0=[1 1];
>> [x fval]=fmincon(@obj1,x0,[],[],Aeq,beq,[],[],@nonlcon1);
四、整数线性规划(Integer Linear programming)
目标函数和约束条件都是线性函数,且决策变量都取整数值的数学规划,称为整数线性规划,简记为ILP,解整数线性规划问题的主要方法是分支定界法。Matlab中没有现成的解整数规划的库函数,可以参考外编程序[intprog.m]。基本语法为
x=intprog(c,A,b,Aeq,beq,lb,ub,x0,id,options)
其用法与相关参数说明同linprog.m,该程序不仅可以解纯整数规划,还可以解混合规划问题(即只有部分变量取整数的情况),输入参数id是标记整数变量索引号的列向量,1表示整数,0表示实数,默认情况是全1向量即纯整数规划。
例:求解下列整数规划问题