n區域性搜尋,模擬退火,遺傳演算法,禁忌搜尋的形象比喻:為了找出地球上最高的山,一群有志氣的兔子們開始想辦法。
1.兔子朝著比現在高的地方跳去。他們找到了不遠處的最高山峰。但是這座山不一定是珠穆朗瑪峰。這就是區域性搜尋,它不能保證區域性最優值就是全域性最優值。
2.兔子喝醉了。他隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,他漸漸清醒了並朝最高方向跳去。這就是模擬退火。
3.兔子們吃了失憶藥片,並被發射到太空,然後隨機落到了地球上的某些地方。他們不知道自己的使命是什麼。但是,如果你過幾年就殺死一部分海拔低的兔子,多產的兔子們自己就會找到珠穆朗瑪峰。這就是遺傳演算法。
4.兔子們知道乙個兔的力量是渺小的。他們互相轉告著,**的山已經找過,並且找過的每一座山他們都留下乙隻兔子做記號。他們制定了下一步去**尋找的策略。這就是禁忌搜尋。
上面是網上關於模擬退火的一些很形象的描述~~
題意:給n個點,在平面內選乙個點,使得到所有點的距離和最小,求最小距離。
選定點肯定在各個相鄰點相連的多邊形的內部,在區域內退火就好了
注意poj 上呼叫時間函式在g++上會re。
#include#include#include#include#includeconst int n = 30;
const double t_min = 1e-2;
const double inf = 1e9;
const double k = 0.25 ;
const double pi = acos(-1.0);
using namespace std;
int n;
double x1 , y1 , x2 , y2;
double dis[35];
inline double rand(double r,double l)
struct point
; point(double _x,double _y):x(_x),y(_y){}
}p[100],people[35];
inline double d (point a, point b)
inline double oper (point a )
inline void init()
}inline bool judge (point a)
int main()
init();
double t_now = max(x2-x1 , y2-y1);
while(t_now > t_min)}}
t_now *= k ;
}double ans = inf;
for(int i=1;i<=n;i++)
ans = min(ans,dis[i]);
printf("%.0f\n",ans+0.5);
}}
題意:給乙個矩陣的長寬,再給n個點,求矩陣區域內某個點到各個點的最小距離的最大值,輸出所求點的座標
poj上好像有一道一樣的題但是好像資料會強一點。在區域內模擬退火就好了
#include#include#include#include#includeusing namespace std;
const double k = 0.55; // 退火常係數
const double t_min = 1e-3; // 退火下界
const double inf = 999999999;
const double pi = acos(-1.0);
const int n = 30 ; // 退火數
int x,y,n;
double dis[1005]; //評估函式
struct point
p[1005],people[35];
inline double rand(double r,double l)
inline double d( point a,point b)
inline bool judge(point a)
inline double oper ( point a)
int main()
double t_now = max(x,y);
while( t_now > t_min )}}
t_now *= k ;
}int ans = 1;
for(int i=2;i<=n;i++)
if(dis[i]>dis[ans])
ans = i;
printf("the safest point is (%.1f, %.1f).\n",people[ans].x,people[ans].y);
}return 0;
}/**
31000 50 1
10 10
100 100 4
10 10
10 90
90 10
90 90
3000 3000 4
1200 85
63 2500
2700 2650
2990 100
*/
poj 2420 模擬退火
題意 給n個點,求與這n個點,距離和最接近的那個點是什麼,輸出這個最短距離。解析 模擬退火。在acdream那裡學模擬退火,準備做去年西安網賽的題目。來自 pragma comment linker,stack 1677721600 include include include include i...
POJ 2420(模擬退火)
2015 04 17 23 53 52 思路 模擬退火啟蒙題.縮小係數定為了 0.7。由於這題具有單調性,所以其實不用模擬退火去隨機化多個起點,用 爬山演算法 即可,只用乙個起點,讓它 爬 到最優解。1 include 2 include 3 include 4 include 5 include ...
poj 2420 poj1379 模擬退火
具體模擬退火的原理可參考 模擬退火可用於一些 精度 要求不是很高的題目。比如取答案的0.1,或者沒有小數點 poj2420 題意 給定n個點,找到乙個點,使得n個點到這個點的距離和最小 模擬退火法 模擬退火的過程 1 確定生成點的範圍,初設為矩形,在這個範圍內生成num個點 num自定 2 確定最高...