% clear all;
clc;

n = 3;
alfa = 1;
beta = 0.5;
simplex = [1 1; 4 2; 2 5];

x = mean(simplex)
% plotobjective(@dejong1fcn,[-5 5;-5 5]);hold on

vzdalenost = 10;
plotobjective(@dejong2fcn,[-5 5;-5 5]);hold on

while vzdalenost > 0.1;
    scatter(simplex(:,1),simplex(:,2));
    pause();
        
    for i = 1:3
        hodnota(i) = dejong5fcn(simplex(i,:));
    end

    [maxhod nejhorsi] = max(hodnota);   % najdi nejhorsi bod
    [minhod nejlepsi] = min(hodnota);   % najdi nejlepsi bod

    simplexz = simplex;
    simplexz(nejhorsi, :) = []; % omaz prislusny radek s nejhorsi bodem

    c = (simplexz(1,:)+simplexz(2,:))./2; % poloha teziste

    xt = c + (alfa.*(c-simplex(nejhorsi,:))); % transformuj nejhorsi bod

    hodnotaxt = dejong5fcn(xt); % zjisti hodnotu v trasnformovanem bodu

    porovnani =  hodnotaxt < hodnota; % hodnoty porovnej

    kontrakce = 0;

    if porovnani(nejhorsi) == 0; % jestli novy bod nema mensi hodnotu nez puvodne
        xt = c + (beta.*(simplex(nejhorsi,:) - c));  % tak bod kontrahuj
        hodnotaxt = dejong5fcn(xt);
        if xt > hodnotaxt       % pokud je kontrahovany bod stale vetsi nez puvodni
            nejbod = simplex(nejlepsi, :);  % najdi nejlepsi bod
            simplexy = simplex;
            simplexy(nejlepsi,:) = [];
            
            for i = 1:2; % a k nemu kontrahuj zbyvajici body
                xt(i,:) = nejbod + beta.*(simplexy(i,:)-nejbod);
            end
        
            simplex = [nejbod; xt]; % sloz novy simplex
            kontrakce = 1;
        end
    end

    if kontrakce == 0; % pokud v kontrakci nebyl setaveny novy simplex
        simplex(nejhorsi,:) = xt;   % tak ho sestav
    end
    
    vzdalenost = sqrt(((simplex(1,1))-(simplex(2,1)))^2+((simplex(1,2)-(simplex(2,2))))^2);
    vzdalenost = vzdalenost + sqrt(((simplex(1,1))-(simplex(3,1)))^2+((simplex(1,2)-(simplex(3,2))))^2);
    disp('.')
end

 lok_min = mean(simplex)
 

% [lok_min] = [min(simplex(:,1)) min(simplex(:,2))]


    