Advertisement
SonicDesu

Metoda Hooka-Jeevesa

Jan 3rd, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.56 KB | None | 0 0
  1. clear;clc;close all;
  2.  
  3. y = @(X) abs(X(1)-1.1) + abs(X(2)+2.2) + abs(X(3)+3.3) + abs(X(4)-4.4);
  4. %@up Funkcja dana w zadaniu wyciągająca zmienne p,q,r,s z wektora X
  5. N = 4; %Ilość zmiennych danej funkcji
  6. x0 = [ 7 -9 -1 10 ]; %Punkt startowy
  7. t = 1; %krok początkowy (tał)
  8. e = 0.01; %dokładność (epsilon)
  9. B = 0.5; %współczynnik korekcyjny (beta)
  10. counter = 0; %Liczy ilość iteracji
  11.  
  12.  
  13. x1 = zeros(1,N);
  14. x2 = zeros(1,N);
  15. xb0 = x0;
  16. xb = zeros(1,N);
  17.  
  18.  
  19. %Tutaj troszkę poczarujemy, Matlab nie posiada pętli do while jak C++
  20. %Więc zamiast tego podziałamy na nieskończonej pętli while sprawdzającej
  21. %warunek pod koniec jej działania
  22.  
  23. while 1
  24.     q0=y(x0);
  25.     x1=x0;
  26.    
  27.     for k=1:N
  28.         x2 = x1;
  29.         x1(k) = x1(k) + t;
  30.         q = y(x1);
  31.        
  32.         if(q<q0)
  33.             q0=q;
  34.         else
  35.            x1=x2;
  36.            x1(k)=x1(k)-t;
  37.            q=y(x1);
  38.            
  39.            if(q<q0)
  40.            q0=q;
  41.            else
  42.                x1=x2;
  43.            end
  44.            
  45.         end
  46.        
  47.     end
  48.    
  49.     if(y(xb0)>y(x1))
  50.         xb=x1;
  51.         counter=counter+1;
  52.         disp(['Wektor bazowy dla iteracji: ' num2str(counter)]);
  53.         xb %Wyświetlam wektor bazowy dla danej iteracji
  54.         for j=1:N
  55.            x0(j)=2*xb(j)-xb0(j); %Etap roboczy
  56.            xb0=xb; %Etap roboczy
  57.         end
  58.        
  59.     else
  60.         x0=xb0;
  61.         t=t*B;
  62.     end
  63.     if (t<e) %Warunek końca pętli
  64.         break;
  65.     end
  66. end
  67.  
  68. disp(['Wartosc minimum po ' num2str(counter) ' iteracjach to: ' num2str(y(x1))]);
  69.  
  70. %by M.J.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement