Kotiin

1-ulotteinen optimointi

Sisällys

  1. Funktion arvojen vertailuun perustuvia menetelmiä
    1. Fibonacci-haku
  2. Interpolaatioon perustuvia menetelmiä
  3. Hybridimenetelmät

Kirjallisuutta

Materiaalia


Funktion arvojen vertailuun perustuvia menetelmiä

Harjoitellaan samalla Matlab-kuvaa. Huomaa, että uudessa Matlabin versiossa 5.3 voidaan funktio määritellä myös suoraan istunnossa {\tt inline}-komennon avulla. Kuvassa olevat pystyviivat ja tekstit on tehty Matlabin kuvaeditorilla.

Harjoitellaan samalla Matlab-kuvaa. Huomaa, että uudessa Matlabin versiossa 5.3 voidaan funktio määritellä myös suoraan istunnossa inline -komennon avulla. Kuvassa olevat pystyviivat ja tekstit on tehty Matlabin kuvaeditorilla.

>> f=inline('.3+(x-3/4).^2','x'); 
>> fplot(f,[0 1])  
>> %ylim([0 1.6])
>> grid
optim1fig1.gif

Maar. f:[a,b] -> R on unimodaalinen (yksihuippuinen), jos on olemassa yksikäs x* välillä [a,b] siten, että vasemmalla puolella pienenee ja oikealla kasvaa.

Periaate

Hakualgoritmit perustuvat seuraavalle:

x1 < x2 ja f(x1) > f(x2) ==> x1 <= x*

x1 < x2 ja f(x1) < f(x2) ==> x2 >=x*

Fibonacci-haku

Matlab-toteutus
Esim. Etsittävä funktion f(x)=x2+2x minimi välillä [-3,5]
%%%%%%%% Tiedosto fib.m %%%%%%%%%%%%%%
function F=fib(n)
F(1)=1;F(2)=1;
for i=2:n-1 F(i+1)=F(i-1)+F(i);end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% Skripti fibhaku.m %%%%%%%%%%%
clf
a(1)=-3;b(1)=5;
n=10;
F=fib(n);

for i=1:n-2

  L(i)=b(i)-a(i);patka=(F(n-(i+1))/F(n))*L(1);
  x0(i)=a(i)+patka;x1(i)=b(i)-patka;
  f0=f(x0(i));f1=f(x1(i));
   if (f0 < f1)
     b(i+1)=x1(i); a(i+1)=a(i);
   elseif (f0 > f1)
     a(i+1)=x0(i); b(i+1)=b(i);
   else
     a(i+1)=x0(i); b(i+1)=x1(i); 

   end;

  plot([a(i)  b(i)],0.2*[1-i 1-i ],'or')
  axis([a(1)-.2 b(1)+.2 -2 1])
  hold on
  plot([a(i)  b(i)],0.2*[1-i 1-i ],'k')
  plot([x0(i)  x1(i)],0.2*[1-i 1-i ],'*b')

  if i<6
     text(a(i)+0.05,0.2*(1-i+0.1),['a(',num2str(i),')'])
     text(b(i)+0.05,0.2*(1-i+0.1),['b(',num2str(i),')'])
  end;

end;

taulukko=[a(1:n-2)' b(1:n-2)' x0' x1' f(x0)' f(x1)']
fplot(f,[a(1) b(1)])
grid
title('Fibonacci-haku')
%%%%%%%%%%%%%%% fibhaku.m loppui %%%%%%%%%%%%%%%%%%%

Ajon tulos:

      a         b          x0        x1       f(x0)    f(x1)

   -3.0000    5.0000    0.0545    1.9455    0.1121    7.6757
   -3.0000    1.9455   -1.1091    0.0545   -0.9881    0.1121
   -3.0000    0.0545   -1.8364   -1.1091   -0.3005   -0.9881
   -1.8364    0.0545   -1.1091   -0.6727   -0.9881   -0.8929
   -1.8364   -0.6727   -1.4000   -1.1091   -0.8400   -0.9881
   -1.4000   -0.6727   -1.1091   -0.9636   -0.9881   -0.9987
   -1.1091   -0.6727   -0.9636   -0.8182   -0.9987   -0.9669
   -1.1091   -0.8182   -0.9636   -0.9636   -0.9987   -0.9987
fibfig2.jpg

Kuvan pystyviivat editoitiin Matlabin kuvaeditorilla.

Alkuun


Interpolaatioon perustuvia menetelmiä

Alkuun


Hybridimenetelmät

Alkuun


Luku4

Alkuun


KotiinKotiin


sivuja ylläpitää Heikki Apiola -- etusivu http://www.math.hut.fi/v2/ -- uutisryhmä opinnot.mat.v2