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