Models

Multi objective diet model

Model (download here).

set MINREQ;   # nutrients with minimum requirements
set MAXREQ;   # nutrients with maximum requirements

set NUTR := MINREQ union MAXREQ;   # nutrients
set FOOD;                          # foods
set STORE;                         # stores

param cost {STORE,FOOD} > 0;
param f_min {FOOD} >= 0;
param f_max {j in FOOD} >= f_min[j];

param n_min {MINREQ} >= 0;
param n_max {MAXREQ} >= 0;

param amt {NUTR,FOOD} >= 0;

var Buy {j in FOOD} >= f_min[j], <= f_max[j];

minimize total_cost {s in STORE}:
   sum {j in FOOD} cost[s,j] * Buy[j];

minimize total_number:  sum {j in FOOD} Buy[j];

subject to diet_min {i in MINREQ}:
   sum {j in FOOD} amt[i,j] * Buy[j] >= n_min[i];

subject to diet_max {i in MAXREQ}:
   sum {j in FOOD} amt[i,j] * Buy[j] <= n_max[i];

Data (download here).

data;

set MINREQ := A B1 B2 C CAL ;
set MAXREQ := A NA CAL ;
set FOOD := BEEF CHK FISH HAM MCH MTL SPG TUR ;

param:   f_min  f_max :=
  BEEF     2     10 
  CHK      2     10 
  FISH     2     10 
  HAM      2     10 
  MCH      2     10 
  MTL      2     10 
  SPG      2     10 
  TUR      2     10 ;

set STORE := "A&P" JEWEL VONS ;

param cost: BEEF  CHK FISH  HAM  MCH  MTL  SPG  TUR :=
     "A&P"  3.19 2.59 2.29 2.89 1.89 1.99 1.99 2.49
     JEWEL  3.09 2.79 2.29 2.59 1.59 1.99 2.09 2.30
      VONS  2.59 2.99 2.49 2.69 1.99 2.29 2.00 2.69 ;

param:   n_min  n_max :=
   A      700   20000
   C      700       .
   B1       0       .
   B2       0       .
   NA       .   50000
   CAL  16000   24000 ;

param amt (tr):   A    C   B1   B2    NA   CAL :=
          BEEF   60   20   10   15   938   295
          CHK     8    0   20   20  2180   770
          FISH    8   10   15   10   945   440
          HAM    40   40   35   10   278   430
          MCH    15   35   15   15  1182   315
          MTL    70   30   15   15   896   400
          SPG    25   50   25   15  1329   370
          TUR    60   20   15   10  1397   450 ;

Infeasible model

Model (download here).

var x;
var y;
var z;

subj to c1:
   x+y >= 1;

subj to c2:
   y + log(z + exp(x+3)) <= 1.83;

subj to c3:
   z + log(y + 3.8*exp(x+3)) >= -14.265;

Another infeasible model

Model (download here).

var x integer >= 5;
var y integer;

minimize TotalSum:
    x - 2*y;

subj to C1:
       -x + 21*y >=  2;

subj to C2:
     -3*x +  2*y <=  1;

subj to C3:
     20*x +    y <= 20;

nQueens model

Model : (download here).

# nQueens problem, binary formulation
param n default 10;

set ROWS := {1..n};
set COLUMNS := {1..n};

# X[i,j] is one if there is a queen at (i,j); else zero
var X{ROWS, COLUMNS} binary; 
   
maximize max_queens: sum {i in ROWS, j in COLUMNS} X[i,j];

subject to column_attacks {j in COLUMNS}:
	sum {i in ROWS} X[i,j] = 1;

subject to row_attacks {i in ROWS}:
	sum {j in COLUMNS} X[i,j] = 1;

subject to diagonal1_attacks {k in 2..2*n}:
	sum {i in ROWS, j in COLUMNS: i+j=k} X[i,j] <= 1;

subject to diagonal2_attacks {k in -(n-1)..(n-1)}:
	sum {i in ROWS, j in COLUMNS: i-j=k} X[i,j] <= 1;