| knapsack_basic.mos | 
| (!******************************************************
   Mosel Example Problems
   ======================   
   Example model for the 
   Robust Optimization with Xpress white paper
   (c) 2014 Fair Isaac Corporation
       
*******************************************************!)
model Knapsack
 uses "mmrobust"                                 ! Load the robust library
 parameters
  NUM=5                                          ! Number of items
  MAXVAL=100                                     ! Maximum value
  MAXWEIGHT=80                                   ! Maximum weight
  WTMAX=102                                      ! Max weight allowed for haul
 end-parameters
 declarations
  Items=1..NUM                                   ! Index range for items
  VALUE: array(Items) of real                    ! Value of items
  WEIGHT: array(Items) of real                   ! Weight of items
  x: array(Items) of mpvar                       ! Decision variables
 end-declarations
 
 setrandseed(5);
 forall(i in Items) do
  VALUE(i):=50+random*MAXVAL
  WEIGHT(i):=1+random*MAXWEIGHT
 end-do
 forall(i in Items) x(i) is_binary               ! All x are 0/1
 MaxVal:= sum(i in Items) VALUE(i)*x(i)          ! Objective: maximize total value
 WtMax:= sum(i in Items) WEIGHT(i)*x(i) <= WTMAX ! Weight restriction
 maximize(MaxVal)
 writeln("Solution:\n Objective: ", getobjval)
 writeln("Item  Weight  Value")
 forall(i in Items)
   writeln(i, ": ", getsol(x(i)), strfmt(WEIGHT(i),8,2), strfmt(VALUE(i),8,2))
end-model
 | 
| 
 | 
| knapsack_ellipsoid.mos | 
| (!******************************************************
   Mosel Example Problems
   ======================   
   Example model for the 
   Robust Optimization with Xpress white paper
   (c) 2014 Fair Isaac Corporation
       rev. May 2017       
*******************************************************!)
model Knapsack
 uses "mmrobust"                               ! Load the robust library
 parameters
  NUM=5                                        ! Number of items
  MAXVAL=100                                   ! Maximum value
  MAXWEIGHT=80                                 ! Maximum weight
  WTMAX=102                                    ! Max weight allowed for haul
  WTPERCENT=0.3                                ! Uncertainty as a percentage 
 end-parameters
 declarations
  Items=1..NUM                                 ! Index range for items
  VALUE: array(Items) of real                  ! Value of items
  WEIGHT: array(Items) of real                 ! Weight of items
  x: array(Items) of mpvar                     ! Decision variables
  WeightUncertainty: array(Items) of uncertain ! Uncertains representing
                                               ! deviation from weight
 end-declarations
 forall(i in Items) x(i) is_binary             ! All x are 0/1
 setrandseed(5);
 forall(i in Items) do
  VALUE(i):=50+random*MAXVAL
  WEIGHT(i):=1+random*MAXWEIGHT
 end-do
 MaxVal:= sum(i in Items) VALUE(i)*x(i)        ! Objective: maximize total value
 sum(i in Items) WeightUncertainty(i)^2 <= WTPERCENT * sum(i in Items) WEIGHT(i)
 WtMax:= sum(i in Items) (WEIGHT(i) + WeightUncertainty(i))*x(i) <= WTMAX
                                               ! Weight restriction
 maximize(MaxVal) 
 writeln("Solution:\n Objective: ", getobjval)
 writeln("Item  Weight  Value  Uncertain")
 forall(i in Items)
   writeln(i, ": ", getsol(x(i)), strfmt(WEIGHT(i),8,2), strfmt(VALUE(i),8,2), strfmt(getsol(WeightUncertainty(i)),8,2))
 writeln("Total weight: ", getact(WtMax))
end-model
 | 
| 
 | 
| knapsack_polyhedron.mos | 
| (!******************************************************
   Mosel Example Problems
   ======================   
   Example model for the 
   Robust Optimization with Xpress white paper
   (c) 2014 Fair Isaac Corporation
       rev. May 2017
*******************************************************!)
model Knapsack
 uses "mmrobust"                               ! Load the robust library
 parameters
  NUM=5                                        ! Number of items
  MAXVAL=100                                   ! Maximum value
  MAXWEIGHT=80                                 ! Maximum weight
  WTMAX=102                                    ! Max weight allowed for haul
  WTPERCENT=0.3                                ! Uncertainty as a percentage 
 end-parameters
 declarations
  Items=1..NUM                                 ! Index range for items
  VALUE: array(Items) of real                  ! Value of items
  WEIGHT: array(Items) of real                 ! Weight of items
  x: array(Items) of mpvar                     ! Decision variables
  WeightUncertainty: array(Items) of uncertain ! Uncertains representing 
                                               ! deviation from weight
 end-declarations
 forall(i in Items) x(i) is_binary             ! All x are 0/1
 
 setrandseed(5);
 forall(i in Items) do
  VALUE(i):=50+random*MAXVAL
  WEIGHT(i):=1+random*MAXWEIGHT
 end-do
 MaxVal:= sum(i in Items) VALUE(i)*x(i)        ! Objective: maximize total value
 forall(i in Items) do  
  WeightUncertainty(i) >=  0
 end-do
 sum(i in Items) WeightUncertainty(i) <= WTPERCENT * sum(i in Items) WEIGHT(i)
 WtMax:= sum(i in Items) (WEIGHT(i) + WeightUncertainty(i))*x(i) <= WTMAX
                                               ! Weight restriction
 maximize(MaxVal)
 writeln("Solution:\n Objective: ", getobjval)
 writeln("Item  Weight  Value")
 forall(i in Items)
   writeln(i, ": ", getsol(x(i)), strfmt(WEIGHT(i),8,2), strfmt(VALUE(i),8,2))
 writeln("Total weight: ", getact(WtMax)) 
end-model
 | 
| 
 | 
| knapsack_scenario.mos | 
| (!******************************************************
   Mosel Example Problems
   ======================   
   Example model for the 
   Robust Optimization with Xpress white paper
   (c) 2014 Fair Isaac Corporation
       rev. May 2017 
*******************************************************!)
model Knapsack
 uses "mmrobust"                         ! Load the robust library
 parameters
  NUM=5                                  ! Number of items
  MAXVAL=100                             ! Maximum value
  MAXWEIGHT=80                           ! Maximum weight
  WTMAX=102                              ! Max weight allowed for haul
  UNCERTAINTY_LEVEL=0.3                  ! How much we are uncertain about the weight
  HISTORIC_PERIODS=100                   ! Number of scenarios
 end-parameters
 declarations
  Items=1..NUM                           ! Index range for items
  VALUE: array(Items) of real            ! Value of items
  WEIGHT: array(Items) of real           ! Weight of items
  UncertainWeight:array(Items) of uncertain 
  x: array(Items) of mpvar               ! 1 if we take item i; 0 otherwise
  historical_weights: array(range, set of uncertain) of real
 end-declarations 
 
 forall(i in Items) x(i) is_binary       ! All x are 0/1
 setrandseed(5);
 forall(i in Items) do
  VALUE(i):=50+random*MAXVAL
  WEIGHT(i):=1+random*MAXWEIGHT
 end-do
 MaxVal:= sum(i in Items) VALUE(i)*x(i)  ! Objective: maximize total value
 WtMax:= sum(i in Items) (WEIGHT(i)+UncertainWeight(i))*x(i) <= WTMAX 
 ! Generate historical data, this would be data collected from actual realizations
 forall(period in 1..HISTORIC_PERIODS, i in Items)
   historical_weights(period, UncertainWeight(i)) :=
     WEIGHT(i)*UNCERTAINTY_LEVEL*random
 ! Generate a solution that would be feasible for ALL historic realizations
 scenario(historical_weights)
 maximize(MaxVal)   
 writeln("Solution:\n Objective: ", getobjval)
 writeln("Item  Weight  Value")
 forall(i in Items)
   writeln(i, ": ", getsol(x(i)), strfmt(WEIGHT(i),8,2), strfmt(VALUE(i),8,2))
 writeln("Total weight: ", getact(WtMax)) 
end-model
 | 
| 
 | 
| knapsack_simplebounds.mos | 
| (!******************************************************
   Mosel Example Problems
   ======================   
   Example model for the 
   Robust Optimization with Xpress white paper
   (c) 2014 Fair Isaac Corporation
       rev. May 2017 
*******************************************************!)
model Knapsack
 uses "mmrobust"                               ! Load the robust library
 parameters
  NUM=5                                        ! Number of items
  MAXVAL=100                                   ! Maximum value
  MAXWEIGHT=80                                 ! Maximum weight
  WTMAX=102                                    ! Max weight allowed for haul
  WTPERCENT=0.3                                ! Uncertainty as a percentage 
 end-parameters
 declarations
  Items=1..NUM                                 ! Index range for items
  VALUE: array(Items) of real                  ! Value of items
  WEIGHT: array(Items) of real                 ! Weight of items
  x: array(Items) of mpvar  
  WeightUncertainty: array(Items) of uncertain ! Uncertains representing 
                                               ! deviation from weight
 end-declarations
 forall(i in Items) x(i) is_binary             ! All x are 0/1
 setrandseed(5);
 forall(i in Items) do
  VALUE(i):=50+random*MAXVAL
  WEIGHT(i):=1+random*MAXWEIGHT
 end-do
 MaxVal:= sum(i in Items) VALUE(i)*x(i)        ! Objective: maximize total value
 forall(i in Items) do
  WeightUncertainty(i) <=  WTPERCENT*WEIGHT(i) ! Uncertainty is a percentage of
                                               ! the expected weight
  WeightUncertainty(i) >=  0                   ! and only expected to go up this time
 end-do
 WtMax:= sum(i in Items) (WEIGHT(i) + WeightUncertainty(i))*x(i) <= WTMAX 
                                               ! Weight restriction
 maximize(MaxVal) 
 writeln("Solution:\n Objective: ", getobjval)
 writeln("Item  Weight  Value")
 forall(i in Items)
   writeln(i, ": ", getsol(x(i)), strfmt(WEIGHT(i),8,2), strfmt(VALUE(i),8,2))
 writeln("Total weight: ", getact(WtMax)) 
end-model
 | 
| 
 | 
| knapsack_simplebounds_direct.mos | 
| (!******************************************************
   Mosel Example Problems
   ======================   
   Example model for the 
   Robust Optimization with Xpress white paper
   (c) 2014 Fair Isaac Corporation
       rev. May 2017
*******************************************************!)
model Knapsack
 uses "mmrobust"                               ! Load the robust library
parameters
  NUM=5                                        ! Number of items
  MAXVAL=100                                   ! Maximum value
  MAXWEIGHT=80                                 ! Maximum weight
  WTMAX=102                                    ! Max weight allowed for haul
  WTPERCENT=0.3                                ! Uncertainty as a percentage 
 end-parameters
 declarations
  Items=1..NUM                                 ! Index range for items
  VALUE: array(Items) of real                  ! Value of items
  WEIGHT: array(Items) of real                 ! Weight of items
  x: array(Items) of mpvar                     ! Decision variables
 end-declarations
 forall(i in Items) x(i) is_binary             ! All x are 0/1
 setrandseed(5);
 forall(i in Items) do
  VALUE(i):=50+random*MAXVAL
  WEIGHT(i):=1+random*MAXWEIGHT
 end-do
 MaxVal:= sum(i in Items) VALUE(i)*x(i)        ! Objective: maximize total value
 WtMax:= sum(i in Items) WEIGHT(i)*(1+WTPERCENT)*x(i) <= WTMAX
                                               ! Weight restriction
 maximize(MaxVal)
 writeln("Solution:\n Objective: ", getobjval)
 writeln("Item  Weight  Value")
 forall(i in Items)
   writeln(i, ": ", getsol(x(i)), strfmt(WEIGHT(i),8,2), strfmt(VALUE(i),8,2))
 writeln("Total weight: ", getact(WtMax)) 
end-model
 | 
| 
 |