clear classes
clear all
close all

clc
 

GeneratoreTraiettoria       %  Alternativamente  GeneratoreTraiettoriaCorridoio    
PiazzaTelecamere                   %  Alternativamente  TelecamereAppoggiate;
 
IN=MatriceVisione(t,A,B);    


CreaCatenaMarkovVisibile
P_PrimaSplit=P; 

dimensionebase=length(P_PrimaSplit);

numoss=length(Stati); % indice che serve per tenere fisse numero colonne di matrice C come numero stati

[P C]=Split_mu_modificato(Stati(1),C); % Genera lo primo Split



epsilon = 1e-6;
P = (P + epsilon*ones(length(P),length(P))) / (1+epsilon*length(P));



%%

baumiterative;
Matrix2Structure(P,P_bar,Stati);

Prestazione(2)=indiceprestazioneNodiag(row,P,C,dimensionebase);
 




%% VERSIONE SPLIT SU TUTTI I NODI CON CICLO INFINITO

var_ciclo=1;
iteratore=3;
while var_ciclo<=length(Stati) 
  
    sps = length(Stati);% sps = stati_prec_splittati
    [P C] = Split_mu_modificato(Stati(var_ciclo),C); 
    P = (P + epsilon*ones(length(P),length(P))) / (1+epsilon*length(P));
    if sps==length(Stati)
       var_ciclo = var_ciclo+1;
    else
       baumiterative;
       Prestazione(iteratore)=indiceprestazioneNodiag(row,P,C,dimensionebase);
       iteratore=iteratore+1;
       Matrix2Structure(P,P_bar,Stati);
       sps = sps+1;
       var_ciclo=1;
    end
    
    avanzamento=var_ciclo-length(Stati)
    
end


%%   Inizializzazione indice prestazione


statesP_PrimaSplit=hmmviterbi(row,P_PrimaSplit,eye(length(P_PrimaSplit)));
T=length(statesP_PrimaSplit);
normaRigheP_PrimaSplit=zeros(length(P_PrimaSplit),1);


P_PrimaSplit2=P_PrimaSplit-diag(diag(P_PrimaSplit));

P_PrimaSplit2=normalizzaCol(P_PrimaSplit2')';
for i=1:length(P_PrimaSplit)
   
    
    normaRigheP_PrimaSplit(i)=norm(P_PrimaSplit2(i,:))^2;
    
end
    
indiceCostoP_PrimaSplit=0;
for i=1:T
    indiceCostoP_PrimaSplit=indiceCostoP_PrimaSplit+normaRigheP_PrimaSplit(statesP_PrimaSplit(i));
end
    
Prestazione(1)=indiceCostoP_PrimaSplit/(T-1);




    