线性规划求最大值或最小值linprog
2011-09-03 18:43:17| 分类:Matlab| 标签:最优值最优解最大值最小值 linprog |字号大中小订阅
函数格式:linprog(f,a,b,a1,b1,xstart,xend)
f:求解最小函数的表达式系数矩阵是m*1的矩阵
a:≤不等式条件约束矩阵其均为形式
b:a对应不等式右边的常数项
a1:=等式条件约束矩阵
b1:a1对应不等式右边的常数项
xstart:x的取值范围的最小值的系数矩阵为n*1的矩阵
xend:x的取值范围的最大值的系数矩阵为n*1的矩阵
函数说明:不存在的项填写[]即可
函数功能:线性规划求最优值.
例子1:
求f=3*x1+6*x2+2*x3的最大值
满足的条件是
3*x1+4*x2+x3≤2
x1+3*x2+2*x3≤1
且x1、x2、x3均大于等于0
Matlab求解如下
a =[ 3 4 1
1 3
2 ]
b =[ 2
1 ]
f=[ -3
-6
-2 ]%这里为什么会是负数,因为Matlab求的是f的最小值,要求最大值则取要求系数的相反数即可. x=[ 0
0 ]
linprog(f,a,b,[],[],x,[])%执行的matlab命令后输出的如下内容.注意这里的[]表示那一项不存在.当然最后那一个[]也可以不要即linprog(f,a,b,[],[],x)
Optimization terminated.
ans =
%即x1=,x2=,x3=0为最优解.带回原式我可以知道f的最大值=3*+6*=
例子2:
求f=-2*x1-3*x2-x3的最小值
满足的条件是
x1+x2+x3≤3
x1+4*x2+7*x3+x4=9
且x1、x2、x3、x4均大于等于0
Matlab求解如下
原题等价于求f=-2*x1-3*x2-x3+0*x4的最小值
其条件等价于
x1+x2+x3+0*x4≤3
x1+4*x2+7*x3+x4=9
则在Matlab输入如下内容
a=[1 1 1 0]
b=[3]
a1=[1 4 7 1]
b1=[9]
x=[ 0
0]
f=[ -2
-3
-1
0]
linprog(f,a,b,a1,b1,x)%执行命令或者输入linprog(f,a,b,a1,b1,x,[])
Optimization terminated.
ans =
%说明x1=1,x2=2,x3=0,x4=0取得最小值
说明:任何线性规划问题都可以转化为上面的问题求解.细节问题请Google线性规划标准形式
1、当目标函数求最大值时,例如求f=a1*x1+a2*x2+……+an*xn的最大值时这个时候等价于求
f=-a1*x1-a2*x2-……-an*xn的最小值
2、当约束条件为a1*x1+a2*x2+……+an*xn≥b这种形式的时候其约束等价于
a1*x1+a2*x2+……+an*xn-xnn=b即多了一个xnn(xnn≥0)变量
3、当一个变量比如x1是无约束的变量时,其实等价于x1=x2-x3即把一个变量x1分解成2个变量x2与
x3之差(x2、x3≥0)把是x1的地方替换为(x2-x3)即可
求解线性规划问题:
线性规划问题
其中,f, x, b, beq, lb, ub为向量, A, Aeq为矩阵。x = linprog(f,A,b) 功能:求解最小化问题 min f*x 条件A*x ≤ b。x = linprog(f,A,b,Aeq,beq) 功能:求解最小化问题 min f*x 条件A*x ≤ b Aeq*x = beq,如果没有不等式就设置A = []和 b = [];没有等式就设置 Aeq=[],beq=[] x = linprog(f,A,b,Aeq,beq,lb,ub) 功能:求解最小化问题 min f*x 条件A*x ≤ b Aeq*x = beq lb ≤ x ≤ ub,决策变量有上下限时,如果没有不等式就设置 A = []和 b = [] ;没有等式就设置 Aeq=[],beq=[] x = linprog(f,A,b,Aeq,beq,lb,ub,x0) 功能:求解最小化问题 min f*x 条件 A*x ≤ b Aeq*x = beq lb ≤ x ≤ ub,如果没有不等式就设置A = []和b = []。设置初始点x0,这个选择项只是对medium-scale算法有效。默认的large-scale算法和简单的算法忽略任何初始点。x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 功能:最小化带有参数项的线性规划问题。其中options可以使用optimset来设置。x = linprog(problem) 功能:对problem求最小值,其中problem是一个结构体。通过优化工具箱来创建,导入到MATLAB工作空间。[x,fval] = linprog(...) 功能:返回目标函数最优解x,和在x处的值:fval = f'*x. [x,fval,exitflag] = linprog(...) 功能:返回目标函数最优解x,和在x处的值:fval = f'*x,是否存在exitflag标志[x,fval,exitflag,output] = linprog(...) Matlab中文论坛功能:返回目标函数最优解x,和在x处的值:fval = f'*x,是否存在exitflag标志,优化解结构体output [x,fval,exitflag,output,lambda] = linprog(...) 功能:返回目标函数最优解x,和在x处的值:fval = f'*x,是否存在exitflag标志,优化解结构体output,拉格朗日乘子结构体lambda
应用举例
最小解: f(x) = –5x1 – 4x2 –6x3, 满足: x1 –x2 + x3 ≤ 20 3x1 + 2x2 + 4x3 ≤ 42 3x1 + 2x2 ≤ 30 0 ≤ x1, 0 ≤ x2, 0 ≤ x3. 首先,输入系数、条件; f = [-5; -4; -6] ;A = [1 -1 1; 3 2 4 ;3 2 0]; b = [20; 42; 30]; lb = zeros(3,1); 然后,调用线性规划函数; [x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb); 最后,得到: x = = 0 = 0 0
相关函数
quadprog, optimtool book.