! 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
|