感谢博文https://blog.csdn.net/cokezkx/article/details/97778450
线性规划
在一组线性的约束条件的限制下,求一线性目标函数最大或最小的问题。即在有约束的条件下求一元或多元函数的极值。
手动计算的方法:
假设要优化的函数为
f
(
x
,
y
,
z
)
f(x,y,z)
f(x,y,z),要满足约束条件
G
(
x
,
y
,
z
)
=
H
(
x
,
y
,
z
)
=
0
G(x,y,z)=H(x,y,z)=0
G(x,y,z)=H(x,y,z)=0,
设拉格朗日函数
L
(
x
,
y
,
z
,
λ
,
μ
)
=
f
(
x
,
y
,
z
)
−
λ
G
(
x
,
y
,
z
)
−
μ
H
(
x
,
y
,
z
)
L(x,y,z,\lambda ,\mu)=f(x,y,z)-\lambda G(x,y,z)-\mu H(x,y,z)
L(x,y,z,λ,μ)=f(x,y,z)−λG(x,y,z)−μH(x,y,z)
列方程组
L
x
=
L
y
=
L
z
=
L
λ
=
L
μ
=
0
L_x=L_y=L_z=L_{\lambda}=L_{\mu}=0
Lx=Ly=Lz=Lλ=Lμ=0。(
L
x
L_x
Lx为
L
L
L对
x
x
x的偏导)
利用软件Lingo:
max=2*x1+3*x2-5*x3;
x1+x2+x3=7;
2*x1-5*x2+x3>=10;
x1+3*x2+x3<=12;
x1>=0;
x2>=0;
x3>=0;
Objective value: 14.57143
Variable Value
X1 6.428571
X2 0.5714286
X3 0.000000
整数规划
规划中的变量(部分或全部)限制为整数时。
Lingo例程:(@gin是整数限定)
max=x1^2+x2^2+3*x3^2+4*x4^2+2*x5^2-8*x1-2*x2-3*x3-x4-2*x5;
x1<=99;
x2<=99;
x3<=99;
x4<=99;
x5<=99;
x1>=0;
x2>=0;
x3>=0;
x4>=0;
x5>=0;
x1+x2+x3+x4+x5<=400;
x1+2*x2+2*x3+x4+6*x5<=800;
2*x1+x2+6*x3<=200;
x3+x4+5*x5<=200;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
非线性规划
目标函数或约束条件中包含非线性函数。
Lingo例程:
min=x1^2+x2^2+x3^2+8;
x1^2-x2+x3^2>=0;
x1+x2^2+x3^3<=20;
-x1-x2^2+2=0;
x2+2*x3^2=3;
x1>=0;
x2>=0;
x3>=0;
动态规划
动态规划主要体现在两个方面,一是将多步决策过程转化为一系列单步决策过程,二是存在很多重叠子问题,编程时第一次求出某个节点的值时应该存储起来。
比如在求最短路径中,单步的计算公式:
D
m
i
n
(
x
)
=
m
i
n
{
d
(
x
,
x
i
)
+
D
m
i
n
(
x
i
)
}
D_{min}(x)=min\{d(x,xi)+D_{min}(xi)\}
Dmin(x)=min{d(x,xi)+Dmin(xi)}。
Lingo例程,共1-10十个城市,输出得到每个城市到city10的最短距离。关键地方有注释啦。
sets:
p/1..4/:path;
CITIES/1..10/:F;
! F(i) is the shotest path of city i;
ROADS(CITIES,CITIES)/
1,2 1,3 1,4
2,5 2,6 2,7
3,5 3,6 3,7
4,5 4,6
5,8 5,9
6,8 6,9
7,8 7,9
8,10
9,10/:D;
!D(i,j) is the distance from i to j;
ENDSETS
DATA:
D=
1 5 2
13 12 11
6 10 4
12 14
3 9
6 5
8 10
5
2;
ENDDATA
F(@SIZE(CITIES))=0;
!F(i)=min{D(i,j)+F(j)};
@FOR(CITIES(i)|I #LT# @SIZE(CITIES):F(i)=@MIN(ROADS(i,j):D(i,j)+F(j)));
END