function [Solution, Max_Sum] = PSMerge2009() tic fid = fopen('C:\Users\Gennaro Alphonse\Documents\MATLAB\pruebafinal.tim', 'r'); Events = fscanf(fid,'%i', 1); Rooms = fscanf(fid,'%i', 1); Features = fscanf(fid,'%i', 1); Students = fscanf(fid,'%i', 1); RoomCapacity = fscanf(fid,'%i', [1,Rooms]); Event_Student = fscanf(fid,'%i', [Events,Students]); Feature_Room = fscanf(fid,'%i', [Features,Rooms]); Feature_Event = fscanf(fid,'%i', [Features,Events]); fclose(fid); n = sum(Event_Student'); e(Events,1)= 0; for i = 1:Events c=1; for j = 1:Rooms if sum((Feature_Room(1:Features,j)-Feature_Event(1:Features,i))>=0) == Features && RoomCapacity(j)>=n(i) e(i,c)=j; c=c+1; end end end t= 15; N_Bases= Events; N_Variables= sum(sum(e'~=0))*t; N_Disjoints = ones(1,Events); Literal_Matrix = zeros(N_Variables*2, Events); nv=0; for i=1:Events r=1; while r<=size(e,2) && e(i,r)~=0 for j=1:t Literal_Matrix((nv*t+j)*2-1, i) = 1; end nv=nv+1; r=r+1; end end c=1; for i1= 1:(Events-1) for i2= (i1+1):Events r1=1; while r1<=size(e,2) && e(i1,r1)~=0 r2=1; while r2<=size(e,2) && e(i2,r2)~=0 if e(i1,r1)==e(i2,r2) conj(c,:)=[i1 i2 e(i1,r1)]; c=c+1; end r2=r2+1; end r1=r1+1; end end end Solution_Set = [0]; Max_Sum = 0; state = zeros(1,N_Variables); for i = 1:2^N_Variables % Interpretations i_Binary = dec2bin(i-1,N_Variables); for j=1:N_Variables state(j) = str2num(i_Binary(j)); end Sum = 0; for s = 1:N_Bases % number of sources ps_disjoint=zeros(1,N_Disjoints(s)); for d=sum(N_Disjoints(1:s-1))+1:sum(N_Disjoints(1:s)); satisfied=0; conjuncts=0; var_no_appearing=0; for j = 1:N_Variables if state(j)==0 ,satisfied=satisfied + Literal_Matrix(2*j,d); end if state(j)==1, satisfied=satisfied + Literal_Matrix(2*j-1,d); end conjuncts=conjuncts+Literal_Matrix(2*j,d)+Literal_Matrix(2*j-1,d); if (Literal_Matrix(2*j,d)==0 && Literal_Matrix(2*j-1,d)==0),var_no_appearing=var_no_appearing+1;end end ps_disjoint(d-sum(N_Disjoints(1:s-1)))=max([satisfied/conjuncts,(var_no_appearing)/(2*N_Variables)]); end %PS(i,s)= max(ps_disjoint); %Sum(i) = Sum(i) + PS(i,s); Sum = Sum + max(ps_disjoint); end if (strcmp(num2str(Sum), num2str(Max_Sum))) Solution_Set(sum(size(Solution_Set)))=i-1; elseif (Sum > Max_Sum) Solution_Set = [i-1]; Max_Sum=Sum; end end L=length(Solution_Set); for i=1:L Solution(i,:)=dec2bin(Solution_Set(i),N_Variables); end toc return