function [shapley]=shapley(l, limit) n = length(l); C = generate_all_coalitions(n); s = C*l'; shapley = zeros(n,1); for party = 1:n sizeT = 0; for k = 1:length(s) row = C(k,:); modrow = row; modrow(party) = 0; if row(party) if (row*l' > limit && modrow*l' <= limit) sizeT = sum(row); shapley(party) = shapley(party) + factorial(sizeT - 1)*factorial(n-sizeT)/factorial(n); end end end end end function [c] = generate_all_coalitions(n) c = zeros(1,n); for k = 1:(2^n-1) c(k+1,:) = convert_to_binary(k,n); end end function [x] = convert_to_binary(n,max) x = zeros(1,max); for k = max-1:-1:0 if n - 2^k >= 0 n = n - 2^k; x(k+1) = 1; else x(k+1) = 0; end end end