规划类模型
文章目录
(1) 线性规划
1. matlab 中线性规划的标准型
目
标
函
数
:
min
f
(
x
)
=
C
T
X
目标函数:\min f(\boldsymbol{x})=C^TX
目标函数:minf(x)=CTX
C
=
[
c
1
c
2
⋮
c
n
]
X
=
[
x
1
x
2
⋮
x
n
]
C=\left[ \begin{matrix} c_1\\ c_2\\ \vdots\\ c_n \end{matrix} \right]~~~ X=\left[ \begin{matrix} x_1\\ x_2\\ \vdots\\ x_n \end{matrix} \right]
C=⎣⎢⎢⎢⎡c1c2⋮cn⎦⎥⎥⎥⎤ X=⎣⎢⎢⎢⎡x1x2⋮xn⎦⎥⎥⎥⎤
约
束
条
件
:
s
.
t
.
{
A
X
≤
b
①
A
e
q
⋅
X
=
b
e
q
②
l
b
≤
X
≤
u
b
③
约束条件:s.t.\left\{ \begin{aligned} &AX\le \boldsymbol{b} ~~①\\ &Aeq\cdot X=beq~~②\\ & \boldsymbol{lb}\le X\le \boldsymbol{ub}~~③ \end{aligned} \right.
约束条件:s.t.⎩⎪⎨⎪⎧AX≤b ①Aeq⋅X=beq ②lb≤X≤ub ③
包含不等式约束
①
①
①,等式约束
②
②
②,上下界约束
③
③
③。
2. matlab求解线性规划的函数
[x,fval]=linprog(C,A,b,Aeq,beq,lb,ub,x0)
- 除
x0
表示初始值一般不用给出,其余均为标准型中的表示。 - 当不存在等式或者不等式约束时可以使用
[]
来代替。 - 当某个变量
xi
没有上下界约束时可以使用-inf
和inf
来表
示。 - 返回的
x
表示在最小值处的x
的取值,fval
表示取得的最小值。 - 与标准形式不同的处理方法:
- 如果需要求最大值,则可以添加负号转为求解最小值,一定注意求解完后要的真实解是
-fval
。 - 如果不等式约束中存在 ≥ \ge ≥ 号则可以通过两边同乘负号转化为 ≤ \le ≤。
- 如果存在的是 < < <,则可以取一个稍微大一点的数字将 < < < 转化成 ≤ \le ≤。
- 如果需要求最大值,则可以添加负号转为求解最小值,一定注意求解完后要的真实解是
3. matlab程序的一个例子
目
标
函
数
:
max
z
=
20
x
1
+
10
x
2
+
5
x
3
目标函数:\max z=20x_1+10x_2+5x_3
目标函数:maxz=20x1+10x2+5x3
约
束
条
件
:
s
.
t
.
{
5
x
1
+
4
x
2
+
2
x
3
≤
24
2
x
1
+
5
x
2
≥
13
3
x
2
+
x
3
=
12
x
1
≥
0
约束条件:s.t.\left\{ \begin{aligned} &5x_1+4x_2+2x_3\le 24\\ &2x_1+5x_2\ge 13\\ &3x_2+x_3=12\\ & x_1 \ge 0\\ \end{aligned} \right.
约束条件:s.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧5x1+4x2+2x3≤242x1+5x2≥133x2+x3=12x1≥0
C=[-20,-10,-5]';
A=[5,4,2;-2,-5,0];
b=[24,-13]';
Aeq=[0,3,1]';
beq=[12];
lb=[0,-inf]';
ub=[+inf,+inf];
[x,fval]=linprog(C,A,b,Aeq,beq,lb,ub,x0);
fval=-fval; %由于是求最大值,因此要求结果的相反数。
(2) 非线性规划
1. matlab 中非线性规划的标准型
目 标 函 数 : min f ( x ) 目标函数:\min f(\boldsymbol{x}) 目标函数:minf(x)
约
束
条
件
:
s
.
t
.
{
A
X
≤
b
①
A
e
q
⋅
X
=
b
e
q
②
l
b
≤
X
≤
u
b
③
c
(
x
)
≤
0
④
c
e
q
(
x
)
=
0
⑤
约束条件:s.t.\left\{ \begin{aligned} &AX\le \boldsymbol{b} ~~①\\ &Aeq\cdot X=beq~~②\\ & \boldsymbol{lb}\le X \le \boldsymbol{ub}~~③\\ & c(\boldsymbol{x})\le 0~~④\\ & ceq(\boldsymbol{x})=0~~⑤\\ \end{aligned} \right.
约束条件:s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧AX≤b ①Aeq⋅X=beq ②lb≤X≤ub ③c(x)≤0 ④ceq(x)=0 ⑤
包含不等式约束
①
①
①,等式约束
②
②
②,上下界约束
③
③
③,非线性约束
④
④
④,非线性等式
⑤
⑤
⑤。
2. matlab求解非线性规划的函数
[x,fval]=fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlfun,option)
x0
表示初始值,由于非线性规划只能求解局部最优,因此x0
的选择十分重要。- 如果要求解全局最优解,可以先使用蒙特卡洛给出一个模拟的最优解的
x0
,之后再将这个x0
当做初始值使用函数求解。 option
提供求解方法的选择: interior-point (内点法,默认)、sqp(序列二次规划法)、active-set(有效集法)、trust-region-reflective(信赖域反射算法)。
3. fun 函数
@fun
中的fun
表示要编写一个独立的 “.m” 文件存储目标函数,x
表示决策变量的向量。
function f=fun(x)
f=...
end
4. nonlfun 函数
@nonlfun
中的nonlfun
表示要编写一个独立的 “.m” 文件存储目非线性约束条件。
function [C,ceq]=nonlfun(x)
c=[非线性不等式约束1;
...
非线性不等式约束k];
ceq=[非线性等式约束1
...
非线性等式约束 s];
end
- 注意要写成 matlab 可以识别的形式,例如
f
(
x
)
=
3
x
1
2
+
4
x
2
+
x
3
3
f(\boldsymbol{x})=3x_1^2+4x_2+x_3^3
f(x)=3x12+4x2+x33 需要写成
f=3*x(1)^2+4*x(2)+x(3)^3
。
5. matlab程序的一个例子
目
标
函
数
:
min
z
=
x
1
2
+
x
2
2
+
x
3
2
+
8
目标函数:\min z=x_1^2+x_2^2+x_3^2+8
目标函数:minz=x12+x22+x32+8
约
束
条
件
:
s
.
t
.
{
x
1
2
+
4
x
2
2
+
x
3
2
≤
24
x
1
2
+
5
x
2
≥
13
−
x
2
2
+
x
3
2
=
12
x
1
,
x
2
,
x
3
≥
0
约束条件:s.t.\left\{ \begin{aligned} &x_1^2+4x_2^2+x_3^2\le 24\\ &x_1^2+5x_2\ge 13\\ &-x_2^2+x_3^2=12\\ & x_1,x_2,x_3 \ge 0\\ \end{aligned} \right.
约束条件:s.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x12+4x22+x32≤24x12+5x2≥13−x22+x32=12x1,x2,x3≥0
main.m
A=[];
b=[];
Aeq=[];
beq=[];
lb=[0,0,0]';
ub=[+inf,+inf];
x0=[0,0,0]';
[x,fval]=fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlfun);
fun.m
function f=fun(x)
f=x(1)^2+x(2)^2+x(3)^2+8
end
nonlfun.m
function [C,ceq]=nonlfun(x)
c=[x(1)^2+4*x(2)^2+x(3)^2-24;-x(1)^2-5*x(2)+13];
ceq=[-x(2)^2+x(3)^2-12];
end
(3) 整数规划
1. matlab求解整数规划的函数
[x,fval]=intlinprog(C,intcon,A,b,Aeq,beq,lb,ub)
- 不需要给出初始值。
intcon
:用来指定哪些变量是整数。- 例如决策变量有
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4 ,若
x
1
,
x
3
x_1,x_3
x1,x3 是整数,则
incton=[1,3]
。
- 例如决策变量有
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4 ,若
x
1
,
x
3
x_1,x_3
x1,x3 是整数,则
2. matlab求解 0-1 规划的函数
- 只需要在
lb,ub
上进行限制即可。- 例如决策变量有
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4 ,若
x
1
,
x
3
x_1,x_3
x1,x3 是
0
−
1
0-1
0−1 变量,则
lb=[0,-inf,0,-inf]'
,ub=[1,+inf,1,+inf]'
。
- 例如决策变量有
x
1
,
x
2
,
x
3
,
x
4
x_1,x_2,x_3,x_4
x1,x2,x3,x4 ,若
x
1
,
x
3
x_1,x_3
x1,x3 是
0
−
1
0-1
0−1 变量,则
(4) 最大最小化模型
- 解决在最不利的条件下寻求最有利的策略,例如选择与医院的距离,要保证离的最远的小区与医院的距离也较小。
1. matlab 中最大最小化模型的标准形式
目 标 函 数 : min x { m a x [ f 1 ( x ) , f 2 ( x ) , … , f m ( x ) ] } 目标函数:\min_\boldsymbol{x} \{max[f_1(\boldsymbol{x}),f_2(\boldsymbol{x}),\dots,f_m(\boldsymbol{x})]\} 目标函数:xmin{max[f1(x),f2(x),…,fm(x)]}
约 束 条 件 : s . t . { A X ≤ b ① A e q ⋅ X = b e q ② l b ≤ X ≤ u b ③ c ( x ) ≤ 0 ④ c e q ( x ) = 0 ⑤ 约束条件:s.t.\left\{ \begin{aligned} &AX\le \boldsymbol{b} ~~①\\ &Aeq\cdot X=beq~~②\\ & \boldsymbol{lb}\le X \le \boldsymbol{ub}~~③\\ & c(\boldsymbol{x})\le 0~~④\\ & ceq(\boldsymbol{x})=0~~⑤\\ \end{aligned} \right. 约束条件:s.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧AX≤b ①Aeq⋅X=beq ②lb≤X≤ub ③c(x)≤0 ④ceq(x)=0 ⑤
2. matlab求解最大最小化模型的函数
[x,fval]=fminimax(@Fun,x0,A,b,Aeq,beq,lb,ub,@nonlfun,option)
- 目标函数
Fun
使用一个函数向量表示。
function f=Fun(x)
f=zeros(m,1);
f(1)=...
...
f(m)=...
end
(5) 多目标规划模型
- 当一个优化问题存在多个优化目标函数时,可以通过加权的方式将这几个优化目标函数组合起来。
⚠️注意
- 加权时要将每个目标函数都统一成最大化或者最小化问题。
- 如果量纲不同,应当先进行标准化处理。