% TMMC 2021 - Hawk-Dove Game % 0 -> Hawk % 1 -> Dove clear all close all clc % n = 100 % Tamaño de la población p = 0.5 % Porcentaje de Palomas en la población inicial V = 2 % Valor del recurso en disputa C = 4 % Costo de ser herido W0 = 2 % Fintness basal t = 100 % Generaciones P = double(rand(n,1) < p) % Vector población Pob = zeros(n,t) Pob(:,1) = P cantD = sum(P) % Cantidad de Palomas en la población cantH = n-cantD % Cantidad de Halcones en la población NH = zeros(1,t+1) % Vector para guardar la cantidad de Halcones en cada generación ND = zeros(1,t+1) % Vector para guardar la cantidad de Palomas en cada generación NH(1,1) = cantH ND(1,1) = cantD for j = 1:t % Bucle de generaciones % Establecimiento de las parejas (un encuentro por generación) F = zeros(n,1) + W0 % Vector con puntajes inx1 = randperm(n,n/2) % Índice 1, vector con números de 1 a n/2 ordenados al azar. inxa = 1:100 % Índice auxiliar inxa(sort(inx1)) = [] % Sacamos del índice auxiliar los números que están en el índice 1. inx2 = inxa(randperm(n/2,n/2)) %Creamos el índice 2 ordenando aleatoriamente al índice auxiliar. % Efrentamientos for i = 1:n/2 if P(inx1(i)) == 0 & P(inx2(i)) == 0 if rand() < 0.5 F(inx1(i)) = F(inx1(i)) + V F(inx2(i)) = F(inx2(i)) - C elseif F(inx1(i)) = F(inx1(i)) - C F(inx2(i)) = F(inx2(i)) + V endif elseif P(inx1(i)) == 1 & P(inx2(i)) == 0 F(inx1(i)) = F(inx1(i)) + 0 F(inx2(i)) = F(inx2(i)) + V elseif P(inx1(i)) == 0 & P(inx2(i)) == 1 F(inx1(i)) = F(inx1(i)) + V F(inx2(i)) = F(inx2(i)) + 0 elseif P(inx1(i)) == 1 & P(inx2(i)) == 1 F(inx1(i)) = F(inx1(i)) + V/2 F(inx2(i)) = F(inx2(i)) + V/2 endif endfor % Cálculo de la cantidad de halcones y palomas para la próxima generación cantH = 0 cantD = 0 for i = 1:n if P(i) == 0 cantH = cantH + (F(i)*n)/sum(F) elseif P(i) == 1 cantD = cantD + (F(i)*n)/sum(F) endif endfor cantH = round(cantH) % Se redondean las cantidades cantD = round(cantD) % Cálculo del núevo vector de población P = zeros(n,1) inxD = randperm(n,cantD) P(inxD) = 1 % Se completan los vectores de las cantidades a través del tiempo NH(1,j+1) = cantH ND(1,j+1) = cantD Pob(:,j+1) = P endfor % Se pide el gráfico de la cantidad de halcones a lo largo de las generaciones y el promedio. plot(0:t, NH) title('Cantidad de halcones por generación') xlabel('Generaciones') ylabel('Cantidad de halcones') text((n/2)-10,n/2, 'Media = ') text(n/2,n/2,num2str(mean(NH))) mean(NH) figure imagesc(Pob) colorbar