非线性规划
下面只针对MATLAB解法做出介绍。在MATLAB中非线性规划的标准型为
m
i
n
f
(
x
)
min \quad f(x)
minf(x)
s
.
t
A
x
≤
B
s.t\quad Ax\leq B
s.tAx≤B
A
e
q
x
≤
B
e
q
A_{eq}x \leq B_{eq}
Aeqx≤Beq
C
⋅
x
≤
0
C \cdot x \leq0
C⋅x≤0
C
e
q
⋅
x
≤
0
C_{eq}\cdot x\leq 0
Ceq⋅x≤0非线性约束要单独成立一个函数文件。例如:
function [c ceq]=nonlcon(x)
%body
end
*fmincon( )函数所求最小值均为参数 x 0 x_0 x0附近的局部最小值。对于无约束优化可使用fminunc( )可求得 x 0 x_0 x0附近的局部无约束最小值。对于带约束的优化过程中可返回函数的梯度来提高准确的程度。对于目标函数为二次型的规划,可以使用quadprog( )*进行二次规划。
图形化界面解法
直接调用优化工具箱中的optimtool命令进行图形化操作,但是在未来的版本中优化工具箱可能被移除。
图与网络流
- 最短路径算法:
参考dijkstra.m 、Floyd.m文件。 - 最小生成树算法:
参考prime.m、kruskal.m文件。 - TSP问题-改良圈算法:
该算法效果一般也只能求得近似解,可参考网上其他优秀算法。main_TSP.m - 最大流问题;
有两种选择:
第一种:直接利用线性规划将所有边标号,对每一个非源 且非 汇点加入约束,在此之前图必须为单源 单 汇,若非如此,可增加一个虚拟 源 v s v_s vs并增加流 v s − s 1 , v s − s 2 , v s − s 3 , v s − s . . . v_s-s_1,v_s-s_2,v_s-s_3,v_s-s_{...} vs−s1,vs−s2,vs−s3,vs−s...同理增加一个虚拟汇 v t v_t vt。最大流线性规划模型为: m a x ∑ i v s − i max \quad \sum_iv_{s-i} maxi∑vs−i s . t ∑ j : ( i , j ) ∈ A f i j − ∑ j : ( i , j ) ∈ A f j i = 0 s.t\sum_{j:(i,j)\in A}f_{ij}-\sum_{j:(i,j)\in A}f_{ji}=0 s.tj:(i,j)∈A∑fij−j:(i,j)∈A∑fji=0 0 ≤ f i j ≤ u i j ∀ ( i , j ) ∈ A 0\leq f_{ij}\leq u_{ij}\quad \forall (i,j)\in A 0≤fij≤uij∀(i,j)∈A已证明最大流问题的系数矩阵为完全幺模矩阵,其最优解为整数解。
第二种:直接调用MATLAB函数graphmaxflow( ) 注意输入的图需要用函数 sparse()转化为稀疏矩阵。 - 最小费用流:
在求得的最大流的前提下,再次进行线性规划,其数学形式为: m i n ∑ c i j f i j min\quad \sum c_{ij}f_{ij} min∑cijfij s . t ∑ j : ( i , j ) ∈ A f i j − ∑ j : ( i , j ) ∈ A f j i = 0 s.t \sum_{j:(i,j)\in A}f_{ij}-\sum_{j:(i,j)\in A}f_{ji}=0 s.tj:(i,j)∈A∑fij−j:(i,j)∈A∑fji=0 ∑ i f s − i = M a x f l o w \sum_i f_{s-i}=Maxflow i∑fs−i=Maxflow 0 ≤ f i j ≤ u i j ∀ ( i , j ) ∈ A 0\leq f_{ij}\leq u_{ij}\quad \forall (i,j)\in A 0≤fij≤uij∀(i,j)∈A - 关键路径算法:
可采用线性规划求解,设 x i x_i xi表示时间i发生的时间其数学形式为: m i n x n − x 1 min \quad x_n-x_1 minxn−x1 s . t x j ≥ x i + t i j , ( i , j ) ∈ A , ( i , j ) ∈ V s.t\quad x_j\geq x_i+t_{ij} ,(i,j)\in A,(i,j)\in V s.txj≥xi+tij,(i,j)∈A,(i,j)∈V x i ≥ 0 x_i\geq0 xi≥0可加入松弛因子 s i j = x j − x i + t i j s_{ij}=x_j-x_i+t_{ij} sij=xj−xi+tij把不等式全部转化为等式也计算了每个活动的时间余量。注意:需要加入0虚构工作来表示事件的先后顺序。
最长路径的数学模型为: m a x ∑ t i j x i j , x i j 为 二 进 制 变 量 max\quad \sum t_{ij}x_{ij},x_{ij}为二进制变量 max∑tijxij,xij为二进制变量 s . t ∑ j : ( i , j ) ∈ A x i j − ∑ j : ( i , j ) ∈ A x j i = { 1 v i 为 源 − 1 v i 为 汇 0 o t h e r s s.t\quad \sum_{j:(i,j)\in A}x_{ij}-\sum_{j:(i,j)\in A}x_{ji}= \begin{cases} 1 & v_i为源\\ -1 & v_i为汇\\ 0 & others \end{cases} s.tj:(i,j)∈A∑xij−j:(i,j)∈A∑xji=⎩⎪⎨⎪⎧1−10vi为源vi为汇others - 计划网络优化:
设 x i x_i xi为事件的开始事件 y i j y_{ij} yij是活动的可能减少时间, t i j t_{ij} tij是活动的计划时间, m i j m_{ij} mij是活动的最短完成时间, d d d为要求完成天数 c i j c_{ij} cij为减少 ( i , j ) (i,j) (i,j)活动单位时间所付出的代价,规划模型为: m i n ∑ c i j y i j min \quad \sum c_{ij}y_{ij} min∑cijyij s . t x j − x i ≥ t i j − y i j , ( i , j ) ∈ V , ( i , j ) ∈ A s.t \quad x_j-x_i\geq t_{ij}-y_{ij}, (i,j)\in V,(i,j)\in A s.txj−xi≥tij−yij,(i,j)∈V,(i,j)∈A x n − x 1 ≤ d x_n-x_1\leq d xn−x1≤d x i ≥ 0 , 0 ≤ y i j ≤ t i j − m i j x_i\geq 0, \quad 0\leq y_{ij}\leq t_{ij}-m_{ij} xi≥0,0≤yij≤tij−mij