! For Multi-Criteria problem,                          (MCknapScen.lng)
 Generate a set of undominated solutions for various
   scenarios of weight to be applied to each criterion.
There are a number of participants(parties/criteria), each with their
own objective or utility function, we want to
find a solution to a shared problem so that a 
weighted ( by ALPHA( c)) sum of the criteria is maximized;
!  If all the ALPHA weights are > 0, then
   only undominated solutions will be generated, however,
  WARNING:  for a problem with integer variables, this weighted
   objective approach may not generate all undominated solutions,
   even if all possible weightings are tried.
!Keywords: Allocation, Assignment problem, Fair allocation, Goal programming,
     Knapsack, Multi-criteria, Pareto optimal;

SETS:
 CRITERIA: VAL_REC;

 ITEM: WGT, Z; !Each item has a wgt, value, yes/no var;
 CXI( ITEM, CRITERIA) : VALUE;
 SCENE;
 SxC( SCENE, CRITERIA): ALPHA;
ENDSETS
DATA: ! Case 1; !Case01 ITEM WGT = ANT_REPEL 1 SIX_PACK 3 BLANKET 4 BRATWURST 3 BROWNIE 3 FRISBEE 1 SALAD 5 WATMELON 10 ; ! The value of the items to the various 'players', based on allocating 100 points to the items; !Case01 CRITERIA = TOM DICK JANE; !Case01 VALUE = 3 9 12 !Case01 14 20 2 ! SIX_PACK; !Case01 5 11 14 !Case01 13 21 11 ! BRATWURST; !Case01 6 12 11 !Case01 10 19 13 ! FRISBEE; !Case01 8 2 28 !Case01 41 6 9; ! WATMELON!Case01 CAP = 15; ! The weights to try on the various criteria; !Case01 ALPHA = 0.98 0.01 0.01 0.01 0.98 0.01 0.01 0.01 0.98 0.34 0.33 0.33 0.33 0.34 0.33 0.33 0.33 0.34; ! Case 2; !Case02; ITEM WGT = ITEM1 15 ITEM2 14 ITEM3 7 ITEM4 8 ; !Case02; CAP = 15; !Case02; CRITERIA = DICK JANE!Case02; VALUE = 70 0 !Case02; 0 70 !Case02; 14 16 !Case02; 16 14 ! The weights to try on the various criteria. Notice that for this case there is an undominated, very attractive solution, for which no set of weights will generate it; !Case02; ALPHA = 0.98 0.01 0.01 0.98 0.51 0.49 0.49 0.51 0.50 0.50; ENDDATA SUBMODEL KnapMod: MAX = @SUM( CRITERIA( k): ALPHA( ss, k) * VAL_REC( k)); ! Here insert the regular constraints; @FOR( CRITERIA( k): ! Value of soln for criterion k; VAL_REC( k) = @SUM( ITEM( j): VALUE( j, k)* Z( j)); ); @SUM( ITEM(j): WGT(j)*Z(j)) <= CAP;! Wgt constraint; @FOR( ITEM(j): @BIN( Z(j))); ! All vars 0/1; ENDSUBMODEL
CALC: @SET( "TERSEO", 2);! Turn off default messages; @WRITE(' Soln'); @FOR( CRITERIA(c): @WRITE( @FORMAT( CRITERIA(c),'5s')); ); @FOR( ITEM(j): @WRITE( @FORMAT( ITEM( j),'10s'))); @WRITE( @NEWLINE(1)); ! Loop over given scenario weights; @FOR( SCENE( s): ss = s; @SOLVE( KnapMod); @WRITE( @FORMAT( ss,'4.0f'),' '); @FOR( CRITERIA( c): @WRITE( @FORMAT( VAL_REC( c),'5.0f')); ); @FOR( ITEM(j): @IFC( Z( j) #GT# .5: !Either; @WRITE(' 1'); @ELSE @WRITE(' '); ); ); ! End FOR; @WRITE( @NEWLINE( 1)); ); ENDCALC