Advertisement
Guest User

hookjeeves

a guest
Nov 26th, 2015
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 3.29 KB | None | 0 0
  1. %HookJeves
  2.  
  3. function [x,f]=HookJeevja(fun,x0,d,dmin)
  4. %
  5. % Metoda HOOK-JEEVES za minimizaciju f-je vise promenljivih bez ogranicenja
  6. %  fun - funkcija cilja
  7. %  x0 - pocetno pogadjanje
  8. %  d - pocetni korak
  9. %  dmin - krajnja duzina koraka (uslov zaustavljanja)
  10.  
  11. n = length(x0);  % duzinu vektora x0 - dimenzija
  12. e = eye(n) * d;   % e matrica sa vrednostima d na glavnoj dijag.
  13. x = x0;                
  14. f = feval(fun,x);       %f resenja funkcije
  15. it = 0;                 % it broj iteracije
  16.                                        
  17. while e(1,1) > dmin             %dok je korak veci od dmin
  18.   it = it + 1;                  % povecava se broj iteracija  
  19.   t = x;                              
  20.   for i=1:n                     %pretrazivanje u svim dimenzijama
  21.     z = t + e(:,i);             %z je x pomereno za e(:,i)
  22.     y = feval(fun,z);           % vrednost funkcije za pomerenu tacku z
  23.     if y < f                    %ako vrednost posle skoka manja od vredosti pre
  24.       t = z;                    % t postaje z jer je bolja od prethodnof t
  25.       f = y;                    % vrednot funkc je vrednost u tacki y
  26.     else                                %ako vrednost y !< f
  27.       disp('Odbacuje se')       % odbacuje se
  28.       z = t - e(:,i);   %pokusava se skok na drugu stranu
  29.       y = feval(fun,z);         %
  30.       if y < f                          %
  31.         t = z;                          %
  32.         f = y;                          %Sve isto kao u proslom ifu
  33.       else                                      %
  34.           disp('Odbacuje se')   %
  35.       end
  36.     end
  37.   end
  38.  
  39.   if all(t==x)                          % ako se nismo nigde pomerili
  40.     e = e * 0.5;                                % smanjuje se korak
  41.   else                                  % ako smo se pomerili
  42.     x1 = t + (t-x);                     % provera okoline posle skoka
  43.     y1 = feval(fun,x1);                 % x1 novo pomeranje od nove tacke
  44.     x = t;                                      % y1 je vrednost u novoj tacki
  45.     if y1 < f                           % ako je fun u novoj tacki bolja od stare
  46.       for i=1:n                         %pretrazivanje po svim pravcima
  47.         z = x1 + e(:,i);                %pretrazivanje za i-ti pravac
  48.         y = feval(fun,z);               % izracunavanje funkc za pomeraj
  49.         if y < y1                       % nova vrednost bolja od stare
  50.           x = z;                        % x se pomera u tu tacku
  51.           f = y;                                % uzima se vrednost funkc za tu tacku
  52.           break;
  53.         else
  54.           disp('odbacuje se')   % ako nije odbacuje se skok
  55.         end
  56.  
  57.         z = x1 - e(:,i);                % sve isto samo za suprotan pravac
  58.         y = feval(fun,z);               %
  59.         if y < y1                       %
  60.           x = z;                        %
  61.           f = y;                                %
  62.           break;                                %
  63.         else                            %
  64.           disp('odbacuje se')   %
  65.         end                            
  66.       end
  67.       disp('Los skok - nema tacke u oklini')
  68.     else
  69.       disp('Los skok')
  70.     end
  71.   end
  72.  
  73. end
  74.  
  75.  
  76. %f
  77. function y = f(x)
  78.  y = 2*x(1).^2 + x(2).^2 - 3;
  79. end
  80.  
  81. %Termin4
  82. x0 = [-2;-2];
  83. d = 0.5;
  84. dmin = 10^(-2);
  85. [x,f] = HookJeevja('f',x0,d,dmin)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement