
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}]
讀者回應 ( 0 意見 )
訂閱發佈留言 (Atom)
發佈留言
Please leave your name and tell me what you thought about this site. Comments, suggestions and views are welcomed.
如果這篇文章對你有幫助,那請留個訊息給我~