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
presupuesto

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

----------------------------------