// Ulazne velicine: X0 (pocetna tocka)
provjeri da li za X0 vrijedi (Xd <= X0 <= Xg) te (g(X0) >= 0)
Xc = X0;
za t = 1 do 2*n // generiranje skupa 2n tocaka
{ za i = 1 do n
R = random[0,1];
Xi[t] = Xdi + R*(Xgi - Xdi); // nova tocka je unutar eksplicitnih ogr.
dok postoji gi(X) za koji gi(X[t])<0 // nisu zadovoljena implicitna ogr.
X[t] = ½ * (X[t] + Xc); // pomakni prema centroidu prihvacenih tocaka
izracunaj novi Xc (sa novom prihvacenom tockom);
}
ponavljaj
{ odredi indekse h, h2 : F(X[h]) = max, F(X[h2]) = drugi najlosiji;
izracunaj Xc (bez X[h]);
Xr = (1+a)*Xc - a*X[h]; // refleksija
za i = 1 do n
{ ako Xri < Xdi // pomicemo na granicu ekspl. ogranicenja
Xri = Xdi;
inace ako Xri > Xgi
Xri = Xgi;
}
dok postoji gi(X) za koji gi(Xr)<0 // provjeravamo implicitna ogr.
Xr = ½ * (Xr + Xc);
ako F(Xr) > F(X[h2]) // ako je to i dalje najlosija tocka
Xr = ½ * (Xr + Xc); // jos jednom pomakni prema Xc
X[h] = Xr;
} dok nije zadovoljen uvjet zaustavljanja;