[알고리즘] MATLAB 시뮬레이트 어닐링 알고리즘 실현 TSP 문제를 해결

머리말

       시뮬레이션 어닐링 알고리즘 (SA)는 일반적으로 세일즈맨 (TSP) 문제를 여행에 사용되는 일반적인 현대 최적화 알고리즘 중 하나입니다. 학생들이 자주도이 알고리즘을 사용하여이 알고리즘을 사용하기 위해 알고리즘을 사용하는 수학적 모델링, 심사 위원 교사들은 피로. 심사 위원 분명 높은 점수를 얻을 수없는 사람들에게 소위 "심령 법률"(신경망, 담금질 기법, 유전자 알고리즘 등) 너무 억지의 사용 (참조 있음 : http://special.univs.cn/service/jianmo/sxjmyw/2018 /1128/1187951_15.shtml ). 나는 당신이 수석 판사는 눈을 끌 수 있다고 생각 명사 것이라고 생각하지 않았 으면, 결국, 심사 위원 교수, 그것은 몇 가지 용어를 위협 할 수 없습니다.

       그러나, 우리는 단지 그것을 배우고, 프로그래밍 세션에서, 우리는 또한 또한 얻을하지 않습니다 사용할 수 없기 때문에하지, 아인슈타인은 여전히, 또한 시뮬레이션 어닐링 알고리즘을 배울 수있는 처음부터 플러스입니다 학생입니다 필요한 학습. 좀 더 말하고, 다음 항목을 입력합니다.

 

알고리즘 프레임 워크

       시뮬레이트 어닐링 알고리즘은 대략 다음과 같이 나눌 수있다 :

  도 1은, 초기 온도, 초기 생성 된 용액은 용액의 번호는 각 온도에서 생성 제공된다.

  이 새로운 솔루션입니다.

  (3) 상기 비용 함수의 차이를 계산한다.

  4, 차별을 대도시. (수행 겁없는 명사 형태는 매우 간단한 원리이다)

  (5) 냉각.

  (6)가 판정 온도가 소정의 양보다 적다. 예, 종료, 그렇지 않으면 2 단계로 건너 뜁니다.

       각 단계의 상세한 설명.

 

 각각의 온도에서 생성 된 솔루션의 개수가 초기 온도, 초기 생성 된 용액을 제공 설정 :

  냉각 종료 온도의 초기 온도 계수 밀접는 SA가 반복 횟수를 결정하고, 관련되는 특정 화학식이다 : * 초기 온도 ≈ 종료 온도 (냉각 계수) ^ 냉각 계수 (0,1)는 일정한 것을 특징으로 반복의 횟수. 소규모 문제, 초기 온도는 통상적으로 1,000을, 종료 온도, 0.9의 냉각 비율을 1E-4로 하였다. 이러한 매개 변수는 직접 메트로폴리스 차별에 영향을 미칩니다.

       임의의 초기 솔루션을 생성하는 것은 일반적으로 인해 SA 의존성의 생성, 초기 솔루션은 중요하지 않습니다.

    생성 된 각 객체의 솔루션 수가 샘플 크기의 온도를 증가 알고리즘의 강인성을 강화하기 위해 제공된다. 체인 길이 불리는 솔루션 메트로폴리스 복수.

 새로운 솔루션

  솔루션의 새로운 방법은 간단한 해결책은 무작위로, 새로운 생성 물론, 특정 알고리즘에 따라 새로운 솔루션을 생성 할 수있다, 많은있다. 장점은 무작위로 생성 된 새로운 솔루션은 글로벌 최적를 쉽게 찾을 수 있습니다, 특정 알고리즘에 의해 생성 된 새로운 솔루션의 이점은 전제는 솔루션의 대략적인 위치가 잘 융합 될 수있다 알고있다.

비용 함수 간의 차이를 계산

  비용 함수의 계산은, 곧 최신 솔루션, 차이를 만들 증가 안양를 얻을 수있는 최적의 솔루션이 좋지 않습니다.

메트로폴리스 차별

  다음과 같이 판정 화학식이다 :

                                                

  비용 함수 인 경우, 의미 0 미만 (즉, 새로운 솔루션은 최적의 솔루션의 값보다 작은 경우), 새로운 솔루션을 적용하여 최적의 솔루션이된다; 비용 함수가 0 이상인 경우, 소정의 확률 P와 거의 같은 솔루션을 적용 최적의 솔루션을 제공한다. 온도가 높을수록 더 많은 열등한 솔루션의 수용 속도 즉, 글로벌 검색 능력, 낮은, 볼 수 있습니다. 따라서 온도를 설정하는 초기 온도를 설정하는 경우에 최적의 로컬 빠지지 않도록하기 위해 비교적 높다.

온도를 내리고

  단순 냉각법, 즉 새로운 온도 = 전류 * 냉각 온도 계수. 당신이 반복의 수와 초기 온도를 볼 수있는, 냉각 계수의 관계를 가지고 있지만, 주목 그 메트로폴리스 차별 초기 온도 때문에 냉각 요인을 증가시키고 향상시키기 위하여 반복 횟수가 더 적절합니다. 마지막으로, 현재의 온도가 정지 온도 미만인지 여부를 판정한다. 이러한 이해의 시뮬레이션 어닐링 알고리즘의 흐름에 개인이, 다음 프로그램은 TSP 문제를 해결하기위한 것입니다.

 

프로그래밍

% 담금질 기법 알고리즘 
%가 TSP 문제 
CLC 지우기 

T0 = 500; % 초기 온도 
% 단부 온도 = 1E-4 경향 
L = 200; %의 각 온도의 사슬 길이 
% 냉각 속도, Q = 0.98 
cityNum = 30, % 도시 숫자 
도시 = 랜드 (cityNum 2) , %는 임의로 생성 된 좌표 도시 

%%%%%%%%%%%%%% 메인 %%%%%%%%%%%%%%%%%을 %%% 
D = 거리 (도시), 
N = cityNum; 
SL = randperm (N) 임의 % 용액을 생성 
, 방정식 % 용액을 반복의 횟수를 계산하는 
시간 = CEIL (더블 (해결 ( [ "1000 * (0.9) ^ X 'num2str가))) (경향이다); 
COUNT = 0; % 반복 카운터 
를 Obj = 제로 (시간 1) ; % 생성 경로 당 
트랙 = 제로 (시간, N) ; % 생성 최적해 당 
% 반복 
하면서 T0는> 경향이다 
    . COUNT = COUNT의 + 1; 
    TEMP = 제로 (L, N + 1이다.), 
    K 용 = 1 L의. 
        %의 L 그룹은 새로운 솔루션 생성 
        S2 = newSolution (S1)를;
        [SL, R & LT]는 대도시 (SL, S2, D, T0) = 
% 함수 : 거리 매트릭스 솔루션
        TEMP (K :) = R & LT SL] 
    최종 
    %의 각 반복 기록 최적 경로 
    [D0, 인덱스 = 분 (TEMP (: 끝)); 
    IF COUNT == D0 1 || <하여 obj (. . COUNT- 1) 
        상기의 Obj (COUNT) = D0 
    다른 
        -]. 1)의 Obj (COUNT)는 확대 개체 (COUNT = 
    최종 
    
    ; 장래가 1. (COUNT :) = TEMP (인덱스 ,. 1 트랙) 
    T0 = Q * T0을, 
fprintf와 ( '반복 % D \ N-'COUNT) 
는 fprintf ( '최단 % F \ N-'하여 obj (단말)) 
%의 반복도를 
플롯 (1 :. 카운트하여 obj) 
xlabel ( '반복적 수 '); 
ylabel ('거리 '); 
제목 ('최적화 '); 
DrawPath (트랙 (끝 :) 시티) 


%%%%%%%%%%%%%%%%% 기능 다섯 %%%%%%%%%%%%%%%%%%%%% 총 

% 입력 : 출력 도시 좌표 거리 행렬 
함수 거리 D = (A) 
    R & LT 크기 = (A,1);
    제로가 = D (R & LT, R & LT) 
    I 대 = 1. R & LT 
        . J 대한이 = I + 1 : R & 중위 
            D (I, J) = SQRT ((A (I ,. 1) -a (J ,. 1)) ^ 2 + (A (I 2) -a (J, 2)) ^ 2), 
            D (J, I) = D (I, J), 
        엔드 
    엔드 
엔드 

% 기능 : 새로운 솔루션 발생 
% 입력 : 용액 오래 출력 : 새로운 솔루션 
% 무작위 개의 스위칭 위치에서 선택. 
S2 = newSolution 함수 (SL) 
    N = 길이 (SL), 
    S2 = SL; 
    A = 라운드 (RAND (1,2) * (1-N) +1.) % 교환을위한 두 개의 임의의 위치의 생성 
    온도를 = S2 (A (1).), 
    S2 (A (1).) = S2 (A (2)) 
    S2 (A (2)) = TEMP, 
최종 

% 대도시 기준 함수 
% 입력 : 새로운 오래 용액 거리 행렬 현재 온도  
% 출력 : 판정 용액, 용액 경로 
함수 [S, R & LT]는 대도시 (SL, S2, D, T) = 
    RL = 경로 길이 (D, SL)를;
    R2 = 경로 길이 (D, S2), 
    DT = R2 - RL; 
    IF DT <0 
       S = S2; 
       R & LT = R2;
    EXP ELSEIF (-DT / T)> = RAND 
       S = S2; 
       R & LT = R2; 
    다른 
       S = SL; 
       R & LT RL =; 
    최종 
최종 

도 % 트레이스 라우트. 
% 입력 : 최적 경로 출력 좌표 도시 :도 경로 
기능 DrawPath (BestTrack 시티) 
    N = 사이즈 (BestTrack 2) 
    cityArray = 제로 (N, 2) 
    = I 1 :. N 
        cityArray (I 1 ,.) = 시티 (BestTrack (I) ,. 1) 
        cityArray (I 2) = 시티 (BestTrack (I)는, 2) 
    엔드 
    그림; 
    길게  
    플롯 (cityArray ( : 1) cityArray (: , 2) '- O', '색상'[0.5, 0.5, 0.5]);
    플롯 ([cityArray (1,1), cityArray (최종 ,. 1)], [cityArray (1,2), cityArray (최종 2 )], ... 
        '-', '색상'[0.5, 0.5, 0.5]); 
    OFF HOLD 
    상기 xlabel ( '가로축') 
    ylabel ( '세로축을');
    제목 ( 'TSP도'); 
    상자 
엔드 

기능 % 계산 된 경로 길이 
% 입력 : 거리 행렬을 순차적으로 출력 산책 : 경로 및 
작동 LEN = 경로 길이 (D, S) 
    [R & LT, C = 사이즈 (D); 
    크기 = NIND (S ,. 1), 
    I = 1 :. NIND 
        P = S (I, : S (나는 ,. 1)] 
        I1 = P (1.. 장래가 1) 
        I2 = P (2 : 최종 ) 
        LEN (I 1 ,.) = SUM (D ((I1-1) * C + I2)), 
    엔드 
엔드

  주 기능 newSolution 내 전략은 무작위로 교환하는 두 개의 위치를 ​​선택하는 것입니다. 사실 당신은 또한 새로운 솔루션을 생성하기 위해 다른 전략을 사용할 수 있습니다,하지만 난 너무 게으른, 그래서 새로운 솔루션을 생성하기위한 더 나은 방법의 생각.

 

프로그램 결과

                                

 

 

                                  

 

 

 

   마지막으로, 나는 50에 도시의 수, 반복 횟수, 더 나은 솔루션을 얻기 위해 온도의 초기 증가를 늘려야 할 때 테스트. 물론,이 새로운 솔루션을 만드는 방법은 비교적 간단합니다, 당신은 또한 새로운 솔루션을 생성하기 위해 더 나은 아이디어 이러한 측면을 고려할 수 있습니다.

 

 

참조

[1] 등의 유 레이, 펭시, 왕 후이, 2015.8 "지능 알고리즘 30 개 사례 (2 판)를 MATLAB에".

 

 

 

 

 

 

 

      

추천

출처www.cnblogs.com/wenyehousheng/p/11486598.html