%Prueba CMSA-CD
%Limpiar figuras
clf;clc;clear all
%Cantidad de experimentos en total
cantexperimentos=500;
%Distancia entre nodos
dist=1;
%Tiempo total de prueba
tiempototal=1000;
%Tiempo aleatorio esperado para transmitir
tiempomaxespera=20;
%Tiempo de transmisión para cada nodo
tiempotransmisione1=10;
tiempotransmisione2=10;
tiempotransmisione3=10;
%Vectores de uso del canal
uso1=zeros(cantexperimentos,1);
uso2=zeros(cantexperimentos,1);
uso3=zeros(cantexperimentos,1);
eficienciapromedioe1=zeros(cantexperimentos,1);
eficienciapromedioe2=zeros(cantexperimentos,1);
eficienciapromedioe3=zeros(cantexperimentos,1);
eficienciatotal=zeros(cantexperimentos,1);


for j=1:cantexperimentos
    
    %Básicamente, lo mismo de antes
%Condición inicial
e=[1 0 0; 0 0 0; 0 0 0]; %estado visto por nodo 1 (fila 1), nodo 2 (fila 2) y nodo 3 (fila 3)
e11ant=0;
e22ant=0;
e33ant=0;

cambioe1=0;
cambioe2=0;
cambioe3=0;

utilizacione1=0;
utilizacione2=0;
utilizacione3=0;

itransmision=1;

prob1=ceil(tiempomaxespera*rand(1,tiempototal)); %vector de probabilidades de espera
prob2=ceil(tiempomaxespera*rand(1,tiempototal));
prob3=ceil(tiempomaxespera*rand(1,tiempototal));

%Iteraciones de un experimento j
    for i=1:tiempototal
    
        if(e11ant~=e(1,1)||e22ant~=e(2,2)||e33ant~=e(3,3))
            itransmision=i;
        end
    
        if (e11ant~=e(1,1))
            cambioe1=1;
        end
        if (e22ant~=e(2,2))
            cambioe2=1;
        end
        if (e33ant~=e(3,3))
            cambioe3=1;
        end
    
        if (cambioe1==1)
            if (i==itransmision+dist)
                e(2,1)=~(e(2,1));
                e(3,1)=~(e(3,1));
                cambioe1=0;
            end
        end
        if (cambioe2== 1)
            if (i==itransmision+dist)
                e(1,2)=~(e(1,2));
                e(3,2)=~(e(3,2));
                cambioe2=0;
            end
        end
        if (cambioe3==1)
            if (i==itransmision+dist)
                e(1,3)=~(e(1,3));
                e(2,3)=~(e(2,3));
                cambioe3=0;
            end
        end
   
        e11ant=e(1,1);
        e22ant=e(2,2);
        e33ant=e(3,3);
    
       %condicion de colision
        if((e(1,1)+e(2,2)+e(3,3)) > 1)
            e=[0 0 0; 0 0 0; 0 0 0];
            cambioe1=0;
            cambioe2=0;
            cambioe3=0;
            e11ant=0;
            e22ant=0;
            e33ant=0;
        end
        %parar la transmision
        if(e(1,1)==1&&i==itransmision+tiempotransmisione1)
            e(1,1)=0;
            utilizacione1=utilizacione1+1;
            itransmision=i;
        end
        if(e(2,2)==1&&i==itransmision+tiempotransmisione2)
            e(2,2)=0;
            utilizacione2=utilizacione2+1;
            itransmision=i;
        end
        if(e(3,3)==1&&i==itransmision+tiempotransmisione3)
            e(3,3)=0;    
            utilizacione3=utilizacione3+1;
            itransmision=i;
        end
        %analisis prob nodo 
        if((e(1,1)+e(1,2)+e(1,3))==0 && i==prob1(itransmision)+itransmision)
            e(1,1) = 1;
        end
        if((e(2,1)+e(2,2)+e(2,3))==0 && i==prob2(itransmision)+itransmision)
            e(2,2) = 1;
        end
        if((e(3,1)+e(3,2)+e(3,3))==0 && i==prob3(itransmision)+itransmision)
            e(3,3) = 1;
        end
        
    end
    
    %Termina el experimento j, medición de eficiencia
    uso1(j)=utilizacione1*tiempotransmisione1;
    uso2(j)=utilizacione2*tiempotransmisione2;
    uso3(j)=utilizacione3*tiempotransmisione3;
    
    eficienciapromedioe1(j)=sum(uso1)/(tiempototal*j);
    eficienciapromedioe2(j)=sum(uso2)/(tiempototal*j);
    eficienciapromedioe3(j)=sum(uso3)/(tiempototal*j);
    
    eficienciatotal(j)=(uso1(j)+uso2(j)+uso3(j))/tiempototal*100;
    
end

% figure(1)
% plot(uso1)
% hold on
% plot(uso2,'r')
% plot(uso3,'g')
% hold off
% 
% figure(2)
% plot(eficienciapromedioe1)
% hold on
% plot(eficienciapromedioe2,'r')
% plot(eficienciapromedioe3,'g')
% hold off
% 
% figure(3)
% plot(eficienciatotal)

dfittool(eficienciatotal)