clear all
close all
clc
global TABELA

%METODOS:                      FUNCOES:                     GRADIENTES:
Metodos=cell(18,1);            Funcoes=cell(13,1);          Gradientes=cell(13,1);
Metodos{2}='coggins';          Funcoes{1}='test1';          Gradientes{1}='gtest1';
Metodos{3}='univar';           Funcoes{2}='test2';          Gradientes{2}='gtest2';
Metodos{4}='hkjeeves';         Funcoes{3}='test3';          Gradientes{3}='gtest3';
Metodos{5}='rosembr';          Funcoes{4}='test4';          Gradientes{4}='gtest4';
Metodos{6}='powell';           Funcoes{5}='test5';          Gradientes{5}='gtest5';
Metodos{7}='search';           Funcoes{6}='test6';          Gradientes{6}='gtest6';
Metodos{8}='complex';          Funcoes{7}='test7';          Gradientes{7}='gtest7';
Metodos{9}='buscarnd';         Funcoes{8}='test8';          Gradientes{8}='gtest8';
Metodos{10}='swarm';            Funcoes{9}='test9';          Gradientes{9}='gtest9';
Metodos{11}='steepdes';        Funcoes{10}='test10';        Gradientes{10}='gtest10';
Metodos{12}='cgrad';           Funcoes{11}='test11';        Gradientes{11}='gtest11';
Metodos{13}='lmarqua';         Funcoes{12}='test12';        Gradientes{12}='gtest12';
Metodos{14}='newton';          Funcoes{13}='test13';        Gradientes{13}='gtest13';
Metodos{15}='newtont';
Metodos{16}='bfgs';
Metodos{17}='dfp';
Metodos{18}='gmurray';
Metodos{1}='aurea';

N=length(Funcoes);
mxit=250;
tolx=1e-4 ;
tolf=1e-4; 
nvar=2*ones(length(Funcoes),1);nvar(6:8)=4;

%DIRECOES PARA COGGINS:
direc=cell(length(Funcoes),1);
direc(1:5,1)={[ 1 1]};
direc(6:8,1)={[ 1 1 1 1]};
direc(9:13,1)={[ 1 1]};

%VARIVEIS NO OTIMO:
Vxo=cell(length(Funcoes),1);
Vxo{1}=[1 1];      Vxo{7}=[0 0 0 0];    Vxo{13}=[2.5 0];
Vxo{2}=[1 1];      Vxo{8}=[0 1 1 1/pi];
Vxo{3}=[1 1];      Vxo{9}=[3 2];
Vxo{4}=[1 1];      Vxo{10}=[0 0];
Vxo{5}=[3 0.5];    Vxo{11}=[0.5 -1];
Vxo{6}=[1 1 1 1];  Vxo{12}=[5 6];


%CHUTES INICIAIS:
Vxi=cell(length(Funcoes),1);
Vxi{1}=[-1.2 1];       Vxi{7}=[-3 -1 0 1];    Vxi{13}=[3 1];
Vxi{2}=[-1.2 1];       Vxi{8}=[1 2 2 2];
Vxi{3}=[-1.2 1];       Vxi{9}=[1 1];
Vxi{4}=[-1.2 1];       Vxi{10}=[1 1];
Vxi{5}=[1 1];          Vxi{11}=[1 0];
Vxi{6}=[-3 -1 -3 -1];  Vxi{12}=[8 9];


%VALORES OTIMOS:
VOt=zeros(length(Funcoes),1);
VOt(end)=-3.25;

%INICILIAZANDO MATRIZES:

temp=zeros(length(Metodos),length(Funcoes));
VOtc=zeros(length(Metodos),length(Funcoes));
Vxoc=cell(length(Metodos),length(Funcoes));
VnS=zeros(length(Metodos),length(Funcoes));
Viter=zeros(length(Metodos),length(Funcoes));

%=========================================================================%
%INICIO DO LOOP:
for i=1:length(Metodos)
    for j=1:length(Funcoes)
        
        xi=Vxi{j};
        d=direc{j};
    
     if i>=11
      %Avaliacao da funcao j pelo metodo i:
       STR=[ 'tic;[xo,Ot,nS,niter]='Metodos{i} '(''' Funcoes{j} ''',xi,[],'  ''''Gradientes{j} ''');temp(i,j)=toc;'];
       eval(STR);
         
      else
          if i>2
          %Avaliacao da funcao j pelo metodo i:
           STR=[ 'tic;[xo,Ot,nS,niter]='Metodos{i} '('''Funcoes{j} ''',xi);temp(i,j)=toc;'];
           eval(STR);
           else
           STR=[ 'tic;[xo,Ot,nS,niter]='Metodos{i} '('''Funcoes{j} ''',xi,d);temp(i,j)=toc;'];
           eval(STR);
               
           end
     end
     clc
%ARMAZENAMENTO:

%VARIVEIS x:
Vxoc{i,j}=xo;

%F.OBJTIVO:
VOtc(i,j)=Ot;

%AVAL. FOBJ:
VnS(i,j)=nS;

%NUMERO DE ITERCOES:
if niter==0
    niter=1;
else
    if niter==mxit
        temp(i,j)=Inf;
        Vns(i,j)=Inf;
    end
end
Viter(i,j)=niter;

clc
end
end
%FIM DO LOOP: 
clc
%=========================================================================%
%CALCULO DOS PARAMETROS:

% 1- EFICACIA:[TETA]

TETA=zeros(length(Metodos),1);
temp_est=min(temp);% Tempo minimo para resolver o problema j
temp_est(find(temp_est==0))=eps;
for i=1:length(Metodos)
    TETA(i)=(100/N)* sum ( temp_est./(temp(i, :)+eps));
end

% 2- EFICIENCIA:[E]
E=zeros(length(Metodos),1);
VnS_est=min(VnS);% Avaliacoes minimas da fobj para resolver o problema j
for i=1:length(Metodos)
    E(i)=(100/N)* sum ( VnS_est./(VnS(i, :)+eps));
end

% % 3- ROBUSTEZ:[ETA]
 
MNi=Viter>mxit;
MNi=MNi==0;
ETA=zeros(length(Metodos),1);
for i=1:length(Metodos)
    ETA(i)=(100/N)*sum((MNi(i,:)));
end
 
 % 4- QUALIDADE:[Q]
d=zeros(length(Metodos),length(Funcoes));
for i=1:length(Metodos)
    for j=1:length(Funcoes)
        aux=size(Vxoc{i,j});
        if aux(1)>aux(2)
            Vxoc{i,j}=Vxoc{i,j}';
         end
        
        d(i,j)=  (norm(Vxoc{i,j}-Vxo{j,1} ) )/tolx  + abs( VOtc(i,j)-VOt(j))/tolf;
    end
end
d_est=min(d);
d_est(find(d_est==0))=eps;
 
Q=zeros(length(Metodos),1); 
for i=1:length(Metodos)
    Q(i)=(100/N)* sum ((d_est +eps)./( d(i, :)+eps));
end
    
%FIM

indice=1:length(Metodos);
indice=indice';
TABELA=[indice,TETA,E,ETA,Q];


pesos=[ 0.25 ,0.23 ,0.24 ,0.28];
Nota=zeros(length(Metodos),1);
for i=1:length(Metodos)
Nota(i)=sum(TABELA(i,2:end).*pesos);
end

TABELA=[TABELA,Nota];

disp(' METODO     EFICACIA    EFICIENCIA    ROBUSTEZ      QUALIDADE    MEDIA');
disp(TABELA)

k=menu('Enviar TABELA para o EXCEL?','Sim','Nao');
if k==1
    active
end
    







