Nota del autor del texto, M. Coll.
Propuse el ejercicio del juego 4 solo como un ejemplo. En mi ignorancia consideré que su resolución era tan compleja matemáticamente que nadie intentaría abordarla. Sin embargo parece que hay personas que se sienten estimuladas por los desafíos y que cuentan con la poderosa ayuda de la informática.
E.A.O. de México, con la ayuda del programa MatLab, ha encontrado la siguiente solución:
Para el país |
Combinaciones
vencedoras |
Combinaciones
vencedoras de Shapley |
Austria | 8767 | 1150 |
Alemania | 12133 | 7882 |
Bélgica | 8953 | 1522 |
Dinamarca | 8639 | 894 |
España | 10103 | 3822 |
Finlandia | 8639 | 894 |
Francia | 10863 | 5342 |
Grecia | 8953 | 1522 |
Holanda | 9031 | 1678 |
Irlanda | 8609 | 834 |
Italia | 10863 | 5342 |
Luxemburgo | 8379 | 374 |
Portugal | 8953 | 1522 |
Reino Unido | 10863 | 5342 |
Suecia | 8803 | 1222 |
Parte
del |
que corresponde al país |
29.231 | Austria |
200.346 | Alemania |
38.686 | Bélgica |
22.724 | Dinamarca |
97.148 | España |
22.724 | Finlandia |
135.784 | Francia |
38.686 | Grecia |
42.652 | Holanda |
21.199 | Irlanda |
135.784 | Italia |
9.506 | Luxemburgo |
38.686 | Portugal |
135.784 | Reino Unido |
31.061 | Suecia |
Volver a la página
Juegos con transferencia de utilidad (Juegos
cooperativos)
Código del programa en MatLab para la solución del juego 4.
--------------------------------------------------------
% Juegos Cooperativos
% Valor de Shapley
% Enrique Aguilar Olivares
% Una solucion de amateur al usar el criterio de Shapley
% Mexico D.F. 11 de enero de 2005
% valor de Shapley para distribuirse en 15 paises
npartidos = 15;
ncombinaciones = 0;
presupuesto = 1000; % Millones de Euros
par(1) = 17;par(2)=99;par(3)=22;par(4)=13;par(5)=50;
par(6) = 13;par(7) = 72;par(8) = 22;par(9) = 25;par(10) = 12;par(11) = 72;
par(12) = 6;par(13) = 22;par(14) = 72;par(15) = 18;
disp('Comienzo');
pais =strvcat('Austria' ,'Alemania', 'Belgica', 'Dinamarca', 'España', ...
'Finlandia','Francia','Grecia','Holanda','Irlanda','Italia','Luxemburgo','Portugal', ...
'Reino Unido','Suecia');
pais1 = cellstr(pais);
total = ceil(sum(par)/2) ;
renglonesconexito = 1;
disp('------------------------------------------------------------------------------');
for i=1:npartidos
combi = combntns(1:npartidos,i);
nreg = size(combi,1);
ncol = size(combi,2);
for j=1:nreg
suma = 0;
for k=1:ncol
k1 = k;
m = combi(j,k);
suma = suma + par(m);
end
if suma >= total
L(renglonesconexito) = k1;
V = combi(j,1:k1);
M(renglonesconexito,1:k1) = V(1:k1);
renglonesconexito = renglonesconexito + 1;
end
end
ncombinaciones = ncombinaciones + nreg;
end;
renglonesconexito = renglonesconexito - 1;
%disp(sprintf('total de combinaciones posible = %d',ncombinaciones));
%disp(sprintf('combinaciones posibles ganadoras = %d',renglonesconexito));
for i=1:renglonesconexito
k = L(i);
Valor = sum(par(M(i,1:k)));
%disp(sprintf('combinacion No. = %d ->combinacion posible ganadora (%d, %d, %d, %d, %d)',i, M(i,1:k)));
%disp(sprintf(' suma = %d <- %d %d %d %d %d',Valor,par(M(i,1:k))));
end
% Calculo de las coaliciones de Shapley
for i=1:npartidos
cuenta(i)=0;
valor1 = 0;
cuentaF(i) = 0;
for j=1:renglonesconexito
k=L(j);
for m=1:k
if i == M(j,m)
cuenta(i) = cuenta(i) +1;
valor1 = sum(par(M(j,1:k))) - par(i);
if valor1 < total
% es indispensable la aportacion del partido i-esimo
cuentaF(i) = cuentaF(i) + 1;
end
break;
end
end
end
sp = char(pais1(i));
disp(sprintf('Para el pais %s hay %d Combinaciones vencedoras ',sp,cuenta(i)));
disp(sprintf('Para el pais %s hay %d Combinaciones vencedoras de Shapley ',sp,cuentaF(i)'));
end
% Calculo de la proporcion que le corresponde a cada partido
s = sum(cuentaF(1:npartidos));
disp(sprintf('Presupuesto a distribuir %d',presupuesto));
for i=1:npartidos
sp = char(pais1(i));
propor(i) = (cuentaF(i) / s) * presupuesto;
disp(sprintf('proporcion del presupuesto %9.3f que le corresponde al pais %s',propor(i),sp));
end
----------------------------------