POJ2420 HDU1109 模擬退火

2021-07-11 13:00:13 字數 2583 閱讀 3730

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 確定最高...