Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. % Poszukiwanie minimum funkcji bledu metoda symulowanego wyzarzania.
  2. % Wybor nowego polozenia z rozkladem rownomiernym, akceptacja nastepuje z
  3. % pewnym rozkladem prawdopodobienstwa zaleznym od wielkosci zmniejszenia
  4. % bledu(dE) i temperatury(T):
  5. % h(dE,T) = 1/(1 + exp(dE/cT))
  6. % oraz pewnej stalej c. Jesli c mala dodatnia to algorytm redukuje sie
  7. % do szukania przypadkowego (akceptacja tylko modyfikacji zmniejszajacych blad),
  8. % jesli c duza to do bladzenia przypadkowego (poprawka nie zalezy od bledu)
  9.  
  10. liczba_param = 2;
  11. N = liczba_param;
  12.  
  13. liczba_cykli = 550000;
  14.  
  15. Rozw = rand(1,N)*20-10; % rozw. poczatkowe
  16.  
  17. T = 500; % pocz. krok iteracji
  18. Tmin = 0.01; % minimalny krok iteracji
  19. wT = 0.99999; % wsp zminy kroku
  20. c = 0.1; % wsp. regulacji wplywu temperatury
  21. e = 0.001;
  22. znak = [-1,1];
  23.  
  24. Emin = 10e40;
  25. Epop = 0;
  26. format long; % 15 miejsc znaczacych
  27. Droga = [Rozw];
  28.  
  29. tabE = zeros(2,liczba_cykli);
  30.  
  31. for cyk=1 : liczba_cykli
  32. %Nowa wartosc x
  33. Rozw2(1) = Rozw(1) + T*(-1+2*rand)*e; % nowe rozwiazanie (powinno byc uzaleznine od temperatury)
  34. %Sprawdzenie czy wychodzi poza zakres
  35. while abs(Rozw2(1)) > 10
  36. if Rozw2(1) > 10
  37. Rozw2(1) = Rozw2(1) + (10 - Rozw2(1));
  38. end
  39. if Rozw2(1) < -10
  40. Rozw2(1) = Rozw2(1) + (-10 - Rozw2(1));
  41. end
  42. end
  43.  
  44. %Nowa wartosc y
  45. Rozw2(2) = Rozw(2) + T*(-1+2*rand)*e;
  46. %Sprawdzenie czy wychodzi poza zakres
  47. while abs(Rozw2(2)) > 10
  48. if Rozw2(2) > 10
  49. Rozw2(2) = Rozw2(2) + (10 - Rozw2(2));
  50. end
  51. if Rozw2(2) < -10
  52. Rozw2(2) = Rozw2(2) + (10 - Rozw2(2));
  53. end
  54. end
  55.  
  56. E = fun3(Rozw2(1),Rozw2(2)); % wartosc funkcji
  57.  
  58. dE = E - Epop; % roznica wartosi funkcji
  59. if rand < 1/(1+exp(dE/(c*T))) % warunek akceptacji
  60. Rozw = Rozw2;
  61. Epop = E;
  62. end
  63.  
  64. if E < Emin % sprawdzenie czy jest rekord
  65. Emin = E;
  66. Rozwmin = Rozw2 ;
  67. Droga = [Droga ; Rozwmin];
  68. end
  69. tabE(1,cyk) = Emin;
  70. tabE(2,cyk) = cyk;
  71.  
  72. T = T*wT; % nowa wartosc temperatury
  73. if T<Tmin
  74. T=Tmin;
  75. end
  76. end
  77.  
  78. wykres_fun
  79. hold on
  80. for cyk = 1 : length(Droga)
  81. plot(Droga(1:cyk,1),Droga(1:cyk,2));
  82. hold on;
  83. plot(Droga(1:cyk,1),Droga(1:cyk,2),'ro');
  84. text(Droga(cyk,1)'+0.01, Droga(cyk,2)'+0.01, int2str(cyk), 'fontsize', 8);
  85. pause(0.1);
  86. drawnow;
  87. end
  88. hold on
  89.  
  90. plot(Droga(end,1)',Droga(end,2)','mo','LineWidth',3);
  91. x = Droga(end,1)
  92. y = Droga(end,2)
  93. f = tabE(1,end)
  94.  
  95. % %plot(tabE(2,:),tabE(1,:),'LineWidth',1.5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement