% experiment 3 
% Martin Radvansky 
% Diplomova prace 2022
% Evalueace Cost funkci - Vypocet RMSE
function [vystup] = FitnessFunction(vstup,vahy)
  global data_wheel; %data pro evaluaci
  global data_spline; %data se spline
  global fss; %FIS ktery nastavujeme
  global zakl_hodnoty; %zakladni hodnoty rozdeleni funkci

  if not (vahy==true)
      %optimalizujeme funkce prislusnosti
      nastaveni = vstup(1:15); %Nastaveni pro vypocet polohy 5 funkci prislusnosti trojnuhlenikovych      
      fss = ComputeIntMF(fss,nastaveni, zakl_hodnoty);
  else
    %optimalizace vah vystupnich funkci
    fss.Rules(1, 1).Weight = max(0.00001,vstup(1)); % jedno cislo vaha 0-1 pravidla
    fss.Rules(1, 2).Weight = max(0.00001,vstup(2));
    fss.Rules(1, 3).Weight = max(0.00001,vstup(3));
    fss.Rules(1, 4).Weight = max(0.00001,vstup(4));
    fss.Rules(1, 5).Weight = max(0.00001,vstup(5));
  end
  
  predicted = evalfis(fss,data_spline);
  rmse = sqrt(sum((predicted'-data_wheel).^2));  %pocitame rozdil prevodovych charakteristik
    
  vystup = rmse;
end