MODEL:
! Linear ordering of objects or products,
   based on pairwise comparisons(LINERORD);
! Keywords: Linear Ordering / Sorting / Matching;
SETS:
 PROD: RANK; ! Each product will get a rank;
 PXP( PROD, PROD): C;
ENDSETS
DATA: PROD = KONIG, FURST, PILSURQ, GUNZB, RIEGELE, PAULA, JEVER, BECKS, WARST, BUD; ! Some data on German beverages; C= ! Times that object I was preferred over J; 0 2 2 3 3 5 5 5 4 4 4 0 3 3 4 3 2 3 2 2 4 3 0 3 5 4 3 2 4 4 3 3 3 0 5 6 3 4 4 3 3 2 1 1 0 1 4 4 5 3 1 3 2 0 5 0 5 4 1 4 1 4 3 3 2 1 0 2 1 3 1 3 4 2 2 2 4 0 4 2 2 4 2 2 1 5 5 2 0 4 2 4 2 3 3 2 3 4 2 0; ENDDATA !---------------------------------------------; SETS: PIP( PROD, PROD)| &1 #LT# &2: X; ! X(I,J) = 1 if I precedes J in our ranking; PIPIP( PROD, PROD, PROD) | &1 #LT# &2 #AND# &2 #LT# &3: S; ENDSETS
! Maximize the number of times our pairwise ordering matches that of our testers; MAX = @SUM( PIP( I, J): C( I, J) * X( I, J) + C( J, I) *(1 - X( I, J))); ! The rankings must be transitive, that is, If I->J and J->K, then I->K; @FOR( PIPIP( I, J, K): ! Note N*(N-1)*(N-2)/6 of theseX( I, J) + X ( J, K) - X( I, K) + S( I, J, K) = 1; @BND( 0, S( I, J, K), 1); ); ! Make X's 0 or 1; @FOR( PIP: @BIN( X);); ! Count number products before product I( + 1); @FOR( PROD( I): RANK( I) = 1 + @SUM( PIP( K, I): X( K, I)) + @SUM( PIP( I, K): 1 - X( I, K)); ); END