【线性规划求解系列】MATLAB中使用linprog解决线性规划问题
linprog - 求解线性规划问题 - MATLAB - MathWorks 中国https://ww2.mathworks.cn/help/optim/ug/linprog_zh_CN.html
本文详细介绍了如何在MATLAB中使用
linprog
函数来解决各种类型的线性规划问题。首先概述了linprog
的基本语法,随后通过五个具体实例演示了如何处理仅含有线性不等式约束、同时含有线性等式和不等式约束、以及包含所有类型约束的线性规划问题。此外,还展示了如何获取优化过程中的目标函数值及退出条件,帮助读者更好地理解和应用linprog
函数进行优化计算。无论是初学者还是有一定经验的用户,都能从中受益,掌握使用MATLAB进行线性规划的基础知识和技巧。
目录
一、matlab中linprog的语法
二、说明
例一 只有线性不等式约束的线性规划
例二 具有线性等式和线性不等式约束的线性规划
例三 具有所有类型约束的线性规划
例四 返回目标函数值
例五 返回退出的条件
一、语法
x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,options)
x = linprog(problem)
[x,fval] = linprog(___)
[x,fval,exitflag,output] = linprog(___)
[x,fval,exitflag,output,lambda] = linprog(___)
二、说明
例一 只有线性不等式约束的线性规划
x = linprog(f,A,b)
求解 minf*x
,满足A*x
≤b
。
目标函数是: min −x(1)−x(2)/3。
约束如下:
A = [1 1
1 1/4
1 -1
-1/4 -1
-1 -1
-1 1];
b = [2 1 2 1 -1 2];
f = [-1 -1/3];
x = linprog(f,A,b)
结果如下:
例二 具有线性等式和线性不等式约束的线性规划
x = linprog(f,A,b,Aeq,beq)
包括等式约束Aeq*x = beq
。如果不存在不等式,请设置
A = []
和b = []
。
A = [1 1
1 1/4
1 -1
-1/4 -1
-1 -1
-1 1];
b = [2 1 2 1 -1 2];
Aeq = [1 1/4];
beq = 1/2;
f = [-1 -1/3];
x = linprog(f,A,b,Aeq,beq)
结果如下:
例三 具有所有类型约束的线性规划
x = linprog(f,A,b,Aeq,beq,lb,ub)
定义设计变量x
的一组下界和上界,使解始终在lb ≤ x ≤ ub
范围内。如果不存在等式,请设置
Aeq = []
和beq = []
。
A = [1 1
1 1/4
1 -1
-1/4 -1
-1 -1
-1 1];
b = [2 1 2 1 -1 2];
Aeq = [1 1/4];
beq = 1/2;
f = [-1 -1/3];
lb = [-1,-0.5];
ub = [1.5,1.25];
x = linprog(f,A,b,Aeq,beq,lb,ub)
例四 返回目标函数值
对于任何输入参量,
[x,fval] = linprog(___)
返回目标函数fun
在解x
处的值:fval = f*x
。
如:
[x,fval] = linprog(f,A,b)
[x,fval,exitflag,output] = linprog(___)
还返回说明退出条件的值exitflag
,以及包含优化过程信息的结构体output
。
例五 返回退出的条件
output] = linprog(___)
还返回说明退出条件的值exitflag
,以及包含优化过程信息的结构体output
。
#设置选项以使用 'dual-simplex'算法。
options = optimoptions('linprog','Algorithm','dual-simplex');
#求解线性规划并请求返回函数值、退出标志和输出结构体。
[x,fval,exitflag,output] = linprog(f,A,b,Aeq,beq,lb,ub,options)
结果如下:
-
exitflag
= 1 表示解可靠。 -
output.iterations
= 0 表示linprog
在预求解过程中即找到解,根本不必进行迭代。