Stats

Popular Posts

Followers

Mathematica 教學 有關NMinimize的幾件事

戴忠淵 於 2010年12月4日星期六 下午4:25 發表


發現很多利用Mathematica求解最佳化的新手常常抱怨說NMinimize的求解效能不好。我想有幾點,一來是Wolfram不可能將所有的演算法都納入,二來可能是必須留給Third-Party的廠商有飯吃。不過最重要的還是很多使用者不看手冊,也不去瞭解演算法的計算流程導致求解效能不佳。
Q: M8內置的全局優化函數功能改進似乎不大啊!
Method也換了幾種,最好結果為:{-1.,{x1->3.14159, x2 ->3.14159}}

bala bala ....

樓上應說明一下計算結果到底如何。

到底是1#的結果;


而實際為:
目標函數值(最小): -1.50470335717132
x1: 11.9664071125293
x2: 11.9664071125297

還是4#的結果

目標函數值(最小): -1.53249458886924
x1: 4.30613092434308
x2: 3.11813709378219
或者得出了更好的結果。

(*函數定義*)

obj[x1_,x2_]:=-Cos[x1]*Cos[x2]*Exp[-((x1-Pi)^2+(x2-Pi)^2)]-
1.1*Cos[x1]*Cos[x2]*Exp[-((x1-2*Pi)^4+(x2-2*Pi)^4)]-
1.2*Cos[x1]*Cos[x2]*Exp[-((x1-3*Pi)^6+(x2-3*Pi)^6)]-
1.3*Cos[x1]*Cos[x2]*Exp[-((x1-3.5*Pi)^6+(x2-3.5*Pi)^6)]-
1.4*Cos[x1*Pi]*Cos[x2*Pi]*Exp[-((x1-4*Pi)^8+(x2-4*Pi)^8)];

(*圖形輸出*)

Print@Quiet@Plot3D[Evaluate@obj[x1,x2],
{x1,0.00001,5Pi},{x2,0.000001,5Pi},
PlotRange->{Automatic,Automatic,{-2,2}},
ViewPoint->Right,AxesLabel->Automatic];

(*輸出Ndlder-Mead演算法的計算過程*)

NM=Reap[NMinimize[obj[x1,x2],{x1,x2},
MaxIterations->10^3,StepMonitor:>Sow[Optimization`NMinimizeDump`vecs],
Method->{"NelderMead","InitialPoints"->RandomReal[{10,15},{3,2}],
"PostProcess"->False}]][[2,1]];

(*輸出DifferentialEvolution演算法的計算過程*)

DE=Reap[NMinimize[obj[x1,x2],{x1,x2},
MaxIterations->10^3,StepMonitor:>Sow[Optimization`NMinimizeDump`vecs],
Method->{"DifferentialEvolution","InitialPoints"->RandomReal[{10,15},{100,2}],
"PostProcess"->False}]][[2,1]];

(*輸出結果*)

{Length@NM,NM[[-1]],obj@@@NM[[-1]]}
{Length@DE,DE[[-1]],obj@@@DE[[-1]]}

(*繪製計算過程動畫*)

Manipulate[Show[Quiet@ContourPlot[obj[x1,x2],{x1,0.00001,5Pi},{x2,0.000001,5Pi}],
Graphics[{Red,PointSize[0.025],Point[NM[[i]]]}]],{i,1,Length@NM,1}]

Manipulate[Show[Quiet@ContourPlot[obj[x1,x2],{x1,0.00001,5Pi},{x2,0.000001,5Pi}],
Graphics[{Red,PointSize[0.025],Point[DE[[i]]]}]],{i,1,Length@DE,1}]


Tags: ,

讀者回應 ( 0 意見 )

發佈留言

Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.

如果這篇文章對你有幫助,那請留個訊息給我~