算法背景,伪代码请参考博客http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html
算法思想,模拟物理的退火过程。区别于爬山算法的关键在于,对于比当前差的解,不是直接舍弃,而是以一定的概率接受。
(主要框架:三个函数+两个准则)
给定初温t=t0,随机产生初始状态s=s0,令k=0;
Repeat
Repeat
产生新状态sj=Genete(s);
if min{1,exp[-(C(sj)-C(s))/tk]}>=randrom[0,1] s=sj;
Until 抽样稳定准则满足;
退温tk+1=update(tk)并令k=k+1;
Until算法终止准则满足;
输出算法搜索结果。
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <fstream>
#define CITYNUM 52
#define MAX 0x7fffffff
using namespace std;
struct Point
{
int x;
int y;
char name;
};
//read the graph & compute the distance dist[i][j]
void InitGraph(double dist[CITYNUM][CITYNUM],Point citys[CITYNUM])
{
fstream fileRead;
fileRead.open("coords.txt",ios::in);
for(int i=0;i<CITYNUM;i++)
{
int temp;
char ch;
fileRead>>temp>>ch>>citys[i].x>>c