% vygeneruji trénovací data
x = randv2D([100,7,1,6,3;100,2,1,5,2]);
%x = randv2D([100,7,3,6,3;100,2,1,5,2]);
t = [zeros(1,100) ones(1,100)];
% normalizuji do intervalu <0,1>
x = (mapminmax(x)+1)/2;
zobraz = 0;
if zobraz
    figure(); hold on;
    plot(x(1,101:200),x(2,101:200),'xb')
    plot(x(1,1:100),x(2,1:100),'xr')
    hold off;
end

% náhodnì uspoøádám vzory
P=randperm(size(x,2));
p = x(:,P); 
t = t(:,P);

% perceptron
net = newp(p,t);
% vahy a prah jsou defaultnì nulové

% mohu nastavit váhy a práh na poèáteèní hodnotu:
% net.IW{1,1}= mean(x(:,101:200)')-mean(x(:,1:100)');
% net.b
% net = init(net); % reset nastavení vah a prahu

% parametry uèící funkce
net.trainParam

net.trainParam.epochs = 5;
net.trainParam.showWindow = 0;

% naucim sit
net1 = train(net,p,t);

% alternativne:
net.adaptParam.passes = 10;
net3 = adapt(net,p,t);

net.trainParam.epochs = 10;
[net2,par] = train(net,p,t);

% výstup (odezva) sítì
y = sim(net,p);
y1 = sim(net1,p);
y2 = sim(net2,p);
y3 = sim(net3,p);

e = [sum(abs(y-t)) sum(abs(y1-t)) sum(abs(y2-t))  sum(abs(y3-t))];

zobraz = 1;
if zobraz
    figure(); 
    hold on;
    plot(x(1,101:200),x(2,101:200),'xb')
    plot(x(1,1:100),x(2,1:100),'xr');
    i = 0:0.1:1;
    iw = net.IW{1,1}; b = net.b{1,1};
    j = -(iw(1,1)*i+b)/iw(1,2);
    plot(i,j,'k');

    iw = net1.IW{1,1}; b = net1.b{1,1};
    j = -(iw(1,1)*i+b)/iw(1,2);
    plot(i,j,'g');

    iw = net2.IW{1,1}; b = net2.b{1,1};
    j = -(iw(1,1)*i+b)/iw(1,2);
    plot(i,j,'b');

    iw = net3.IW{1,1}; b = net3.b{1,1};
    j = -(iw(1,1)*i+b)/iw(1,2);
    plot(i,j,'r');
    
    hold off;
end



