param n; # Numero oggetti param m; # Numero oggetti scelti set Oggetti := 1..n; # Insieme degli oggetti param D {Oggetti,Oggetti}; # Matrice delle distanze fra oggetti #check {i in Oggetti, j in Oggetti} D[i,j] = D[j,i]; #check {i in Oggetti} D[i,i] = 0; #var x {Oggetti} >= 0, <=1; #var y {Oggetti,Oggetti} >= 0, <=1; var x {Oggetti} binary; var y {Oggetti,Oggetti} binary; maximize z : sum{i in Oggetti, j in Oggetti} D[i,j] * y[i,j]/2; subject to Cardinalita : sum{i in Oggetti} x[i] = m; subject to Simmetria {i in Oggetti, j in Oggetti} : y[i,j] = y[j,i]; subject to AttivazioneI {i in Oggetti, j in Oggetti} : y[i,j] <= x[i]; subject to AttivazioneJ {i in Oggetti, j in Oggetti} : y[i,j] <= x[j]; subject to Taglio {i in Oggetti} : sum{j in Oggetti} y [i,j] <= (m-1) * x[i]; end;