[확률 적 알고리즘] 운명? 시뮬레이트 어닐링 시뮬레이트 어닐링 알고리즘

시뮬레이트 어닐링 시뮬레이트 어닐링 알고리즘은 최적해를 얻는 확률 적 알고리즘이다.

당신이 한 손으로 꽤 무작위 검색에서 게임을 할 수 있으면 편리 무기에 문제가있는 신들에 직면 할 때, 아마도 수없는 아무것도 할 수 있습니다.

이 문제의 해결은 무엇을 가르 칠 것인가? 때 SA 사용할 수 있습니다 무엇 SA의 기본 개념.

제목에 대해 이야기하는 것은, 그래서이 블로그는 의심이나 의견, 환영 보정의 경우, 자신의 개인 프로필의 일부를 섞은.

나는 또한 당신이 주어진 제안에 매우 감사하고, 그들은 정말 나를 더 강하게 되십시오.

그런 다음 우리는 Benpian 항목을 입력합니다.

 

1. 담금질 기법은 무엇인가

담금질 기법은 최적의 솔루션을 찾을 확률 적 알고리즘의 넓은 공간에 검색된다. 우리는이 알고리즘은 정말 물리적 시뮬레이션 어닐링 과정, 이해할 수있는 이름을 확인합니다. 지식은 종종 우리가 배운 것을 대부분의 유용, 상호있다.

이유는 최적의 솔루션의 시뮬레이트 어닐링 프로세스를 통해 얻어 질 수 있는가? 물리학에서, 고체 물질 및 일반 조합 최적화 문제의 어닐링 처리는 높은 유사성을 가지고있다.

 

2. 기본 요소 시뮬레이션 된 어닐링 :

이러한 알고리즘은 행복하게 SA하여 프로그램까지를 포함합니다 만날 수 있습니다.

첫 번째 요소는 상태 공간 생성 상태의 함수 인, 우리는 탐색 공간과 큰 범위를 가질 필요가있다.

검색 공간은 무엇인가? 우리가 문의해야 검색을 학습, 우리의 검색 알고리즘의 특성은, 공간 문제 해결을 통과 최적의 솔루션을 찾는 것입니다. 모의 어닐링 상태 공간은 우리의 정의 중 최적의 솔루션을 제공하는 유한 집합이다, 유사합니다.

우리는 상태 공간이 충분한 빛, 아, 우리가 정말 필요로하는 상태이다 아니다 있습니다. 그는 기능을 연구, 교사는 "도메인"기능이 있어야했다. 우리의 상태는 상태 공간은 "도메인"기능을 가지고있다. 우리가 좋은 어닐링을 쓰고 싶은 경우에, 우리의 검색 공간은 기능을 충분히 새롭고 다양한 솔루션을 생성하고, 충분히 크다.

제 2 용액은 우리가 난수를 생성하여 공간 상태 후보 인 특정 밀도 임의로 우리 후보 용액 내에서 선택.

사실, 우리는 지수 분포를 사용하는 몇 가지 경우, 확률 분포는 대부분 균일있다.

상태 전이 확률에 관해서는, 나는 모든 SA 알고리즘을 사용하여 현재 액세스입니다 대도시 기준을 , 나는 옆을 소개합니다.

 

3. 시뮬레이션 어닐링 기본 과정 :

A. 현재 용액의 상태에서 새로운 솔루션을 생성하는 생성 기능은, 일반적으로 증분 구성이 얻어진다 (즉, 생성 함수 원액의 값을 플러스 / 마이너스를 생성).

II. 솔루션 새로운 목적 함수의 차이 ΔT '를 계산합니다.

III는. 새로운 솔루션이 수락 여부를 확인하려면,

여기서 기준 메트로폴리스있다 : ΔT '<0, 우리는 그것을 받아, 그렇지 않은 경우 EXP (-Δt "다항식 확률 / T)가 그것을 받아들이.

** ** T 우리 시뮬레이트 어닐링 처리의 온도

IV. 새로운 솔루션은 새로운 솔루션으로 받아 들여 현재의 솔루션을 교체하거나 다음 검사를 계속합니다.

 

4. 시뮬레이션 어닐링 파라미터 제어 :

매개 변수 조정은 SA 알고리즘의 가장 어려운 부분은, 당신의 결정 알고리즘 득점 률의 한 부분이라고 할 수 있습니다.

파라미터 조정 SA를 작성할 때 다음 요정 FlashHu (LCT 멘토 Orz) 경험을 공유하고,이 무엇인지 요약 :

EPS를 들어, 대략 EPS의 대략적인 크기의 데이터 범위 및 정밀도에 기초하여 획득 될 수 있고, 수동 미세 최종 EPS를 준다.

현재 T, ANS 및 기타 정보의 출력측이, 환경이 실질적으로 용액의 속도를 감소하는 동안 T 및 [델타] T (통상적 0.95-0.99 사이의 온도 변화율)의 경우, 제 큰 개구 최적해 후 어닐링을 실행 더 균일 더 (영구 관찰 함)를 나타내는 파라미터

 

5. 참고 :

SA는 케이스의 극소 붙어 현재 용액에 빠질 수 있고, 그 때문이다 :

그림은 빨강, 우리의 현재 솔루션이며, 파란색은 우리의 최적의 솔루션, 새로운 솔루션 빨간색 선은 SA 알고리즘을 나타냅니다, 우리는 가난한 인수는, 우리가 할 수있는 경우 최적의 솔루션은 로컬 카드에 나타난 것을 발견 할 것이다 상황. 알고리즘 자체가 이런 상황을 방지하기 위해이 설계, 기억 나? 이 최적의 솔루션이 아닌 경우에도, 기준을 대도시, 우리는 (대답이 업데이트되지 않습니다) 그것을 받아 들일 수있는 어떤 가능성을 가지고이 문제를 방지하는 것이지만, 가난한 매개 변수의 경우, 여전히 발생할 수 있습니다. 그래서 우리는 온도 제어를 개선해야합니다.

: 여기에 더 이상은 고전적인 시뮬레이션 어닐링 템플릿 예 작업을 수행하는 도로 고전 균형 / 구타 및 매달려 XXX는

알고리즘이 내가 의견으로 표시됩니다주의가 필요한 여기에 대해 직접 코드를 붙여 넣습니다.

#include<bits/stdc++.h>
#define down 0.997//ΔT,模拟徐徐降温 
using namespace std;
inline int read(){
    int data=0,w=1;char ch=0;
    while(ch!='-' && (ch<'0'||ch>'9'))ch=getchar();
    if(ch=='-')w=-1,ch=getchar();
    while(ch>='0' && ch<='9')data=data*10+ch-'0',ch=getchar();
    return data*w;
}
int n;
struct point{
    int x,y,w;
}object[2019];//物体信息 
double ansx,ansy,answ;//答案 
double energy(double x,double y){//物理学知识:能量总和越小越稳定 
    double r=0,dx,dy;
    for(int i=1;i<=n;i++){
        dx=x-object[i].x;dy=y-object[i].y;
        r+=sqrt(dx*dx+dy*dy)*object[i].w;//力臂乘重力 
    }
    return r;
}
void SA(){
    double t=3e3+10;//初始温度要高 
    while(t>1e-15){//exp略大于0 
        double ex=ansx+(rand()*2-RAND_MAX)*t;
        double ey=ansy+(rand()*2-RAND_MAX)*t;
        double ew=energy(ex,ey);
        double de=ew-answ;
        if(de<0){//此答案更优 
            ansx=ex;ansy=ey;answ=ew;
        }else if(exp(-de/t)*RAND_MAX>rand()){//Metropolis准则,以多项式概率接受 
            ansx=ex;ansy=ey;
        }t*=down;//逐步降温 
    }
}
void solve(){
    SA();SA();SA();SA();SA();
}
int main(){
    n=read();
    for(int i=1;i<=n;i++){
        object[i].x=read();object[i].y=read();object[i].w=read();
        ansx+=object[i].x;ansy+=object[i].y;
    }
    ansx/=n;ansy/=n;//设平均值为初值 
    answ=energy(ansx,ansy);
    solve();
    printf("%.3lf %.3lf\n",ansx,ansy);
    return 0;
}

游戏结束。

추천

출처www.cnblogs.com/light-house/p/11779896.html