在上一篇文章中讲述了模拟退火的基本原理,以下以一个实际的例子来说明,其中所有的源码已贴出,可以从中了解到很多细节。
使用模拟退火法求函数f(x,y) = 5sin(xy) + x2 + y2的最小值
解:根据题意,我们设计冷却表进度表为:
即初始温度为100
衰减参数为0.95
马可夫链长度为10000
Metropolis的步长为0.02
结束条件为根据上一个最优解与最新的一个最优解的之差小于某个容差。
使用METROPOLIS接受准则进行模拟, 程序如下
/*
* 模拟退火法求函数f(x,y) = 5sin(xy) + x^2 + y^2的最小值
* 日期:2004-4-16
* 作者:ARMYLAU
* EMAIL:armylau2@163.com
* 结束条件为两次最优解之差小于某小量
*/
using System;
namespace SimulateAnnealing
{
class Class1
{
// 要求最优值的目标函数
static double ObjectFunction( double x, double y )
{
double z = 0.0;
z = 5.0 *