1 线性规划
1.1 线性规划的标准形式
MATLAB中规定线性规划的标准形式
:
min
x
f
T
x
s
.
t
.
{
A
⋅
x
≤
b
A
e
q
⋅
x
=
b
e
q
l
b
≤
x
≤
u
b
\min\limits_{x}\ \boldsymbol{f}^{T}\boldsymbol{x}\quad s.t. \left\{\begin{aligned} &\boldsymbol{A}\cdot\boldsymbol{x}\leq\boldsymbol{b}\\ &\boldsymbol{Aeq}\cdot\boldsymbol{x}=\boldsymbol{beq}\\ &\boldsymbol{lb}\leq\boldsymbol{x}\leq\boldsymbol{ub}\\ \end{aligned}\right.
xmin fTxs.t.⎩⎪⎨⎪⎧A⋅x≤bAeq⋅x=beqlb≤x≤ub
f
\boldsymbol{f}
f、
x
\boldsymbol{x}
x、
b
\boldsymbol{b}
b、
b
e
q
\boldsymbol{beq}
beq、
u
b
\boldsymbol{ub}
ub是向量,
A
\boldsymbol{A}
A和
A
e
q
\boldsymbol{Aeq}
Aeq是矩阵。
所以如果是要求最大值,例如 max x f T x s . t . A x ≥ b \max\limits_{x}\ \boldsymbol{f}^{T}\boldsymbol{x}\quad s.t. \quad \boldsymbol{A}\boldsymbol{x}\geq\boldsymbol{b} xmax fTxs.t.Ax≥b,则应该化为 min x − f T x s . t . − A x ≤ − b \min\limits_{x}\ \boldsymbol{-f}^{T}\boldsymbol{x}\quad s.t. \quad \boldsymbol{-A}\boldsymbol{x}\leq\boldsymbol{-b} xmin −fTxs.t.−Ax≤−b。
1.2 函数linprog
MATLAB中求解线性规划问题的基本函数是linprog。
调用形式
:
[x, fval, exitflag, output, lambda] = linprog(f, A, b, Aeq, beq, lb, ub, x0, options)
参数说明
:
x返回最优解
favl返回目标函数的值
exitflag返回是否收敛
output返回迭代次数
lambda
f对应目标函数
f
(
x
)
=
f
T
⋅
x
f(x) = \boldsymbol{f^T}\cdot\boldsymbol{x}
f(x)=fT⋅x
A和b对应不等式约束
A
⋅
x
≤
b
\boldsymbol{A}\cdot\boldsymbol{x}\leq\boldsymbol{b}
A⋅x≤b
Aeq和beq对应等式约束
A
e
q
⋅
x
=
b
e
q
\boldsymbol{Aeq}\cdot\boldsymbol{x}=\boldsymbol{beq}
Aeq⋅x=beq
lb和ub分别是变量
x
x
x 的上下界
x0是
x
x
x 的初始值
options是控制参数
1.3 例子
一个例子
:
求解线性规划问题:
min
f
(
x
)
=
2
x
1
+
3
x
2
+
x
3
s
.
t
.
{
x
1
+
4
x
2
+
2
x
3
≥
8
3
x
1
+
2
x
2
≥
6
x
1
,
x
2
,
x
3
≥
0
\min f(x) = 2x_1+3x_2+x_3\\s.t.\left\{ \begin{aligned} &x_1+4x_2+2x_3\geq 8\\ &3x_1+2x_2\geq 6\\ &x_1,x_2,x_3 \geq 0\\ \end{aligned} \right.
minf(x)=2x1+3x2+x3s.t.⎩⎪⎨⎪⎧x1+4x2+2x3≥83x1+2x2≥6x1,x2,x3≥0
代码如下:
f = [2; 3; 1];
A = -[1, 4, 2; 3, 2, 0];
b = -[8; 6];
lb = [0; 0; 0];
[x, fval] = linprog(f, A, b, [], [], lb)
运行结果:
Optimization terminated.
x =
0.8066
1.7900
0.0166
fval =
7.0000
2 非线性规划
2.1 非线性规划的标准形式
min f ( x ) s . t . { A x ≤ B A e q ⋅ x = B e q C ( x ) ≤ 0 C e q ( x ) = 0 l b ≤ x ≤ u b \min f(\boldsymbol x)\quad\quad s.t. \left\{\begin{aligned} &\boldsymbol{Ax} \leq \boldsymbol {B}\\ &Aeq\cdot\boldsymbol{x} = Beq\\ &\boldsymbol{C}(x) \leq 0\\ &Ceq(x) = 0\\ &\boldsymbol{lb} \leq \boldsymbol{x} \leq \boldsymbol{ub} \end{aligned}\right. minf(x)s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧Ax≤BAeq⋅x=BeqC(x)≤0Ceq(x)=0lb≤x≤ub
2.2 函数fmincon
调用形式
:
[x, fval, exitflag] = fmincon(fun, x0, A, B, Aeq, Beq, lb, ub, nonlcon, options)
参数说明
:
x返回最优解
favl返回目标函数的值
exitflag返回描述退出条件的exitflag。
3 整数规划
3.1 整数规划的定义
规划中的部分或全部变量限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。
3.2 求解整数规划的方法
目前所流行的求解整数规划的方法,往往只适用于整数线性规划。
常见的整数规划问题的求解算法有:
1)分枝定界法:可求纯或混合整数线性规划。
2)割平面法:可求纯或混合整数线性规划。
3)隐枚举法:用于求解0-1整数规划,有过滤隐枚举法和分枝隐枚举法。
4)匈牙利法:解决指派问题(0-1规划特殊情形)。
5)蒙特卡罗法:求解各种类型规划。