Console.WriteLine("{0},{1},{2},{3}",PreX,PreY,ObjectFunction(PreX,PreY),Temperature);
} while(Math.Abs(ObjectFunction(BestX,BestY)–ObjectFunction(PreBestX,PreBestY))>Tolerance);
Console.WriteLine("最小值在點:{0},{1}",BestX,BestY);
Console.WriteLine("最小值為:{0}",ObjectFunction(BestX,BestY));
}
}
}
l結果:
最小值在點:-1.07678129318956,1.07669421564618
最小值為:-2.26401670947686
l后記:
原來想寫一系列的文章,介紹如何用C#解數(shù)值問題,這是因為在CSDN上很少有數(shù)值計算方面的文章,所以希望能有所補充。
一開始在網(wǎng)上搜索模擬退火的資料并想作為C#數(shù)值計算的一個例子,找不到現(xiàn)成的源碼。后來自己實驗了很久,終于將此程序寫出,不敢私藏,拿出來作用模擬退火或者用C#解數(shù)值算法問題的一個入門例子。
本文盡量避免太過學術化,如數(shù)學和物理名稱和公式,倉促下筆,有很多地方可能講得不是很清楚,希望各位體諒。任何問題或批評,可EMAIL與我:armylau2@163.com
另,模擬退火還可以應用到其它更多更復雜的問題,如“推銷員問題”等組合優(yōu)化問題。本例只是求一個二維函數(shù)的最小值問題,而且其冷卻表參數(shù)的選擇也過于簡單,只能作用一個初步的入門簡介,請讀者注意。
l參考文獻:
1.http://www.computer-dictionary-online.org/index.ASP?q=simulated annealing 計算機詞典
2.NumericRecipesinC
3.計算方法叢書非數(shù)值并行算法(第一冊)模擬退火算法