FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious example

Linear relaxations

Description
This set of examples requires Xpress Optimizerin addition to Xpress Kalis.
  • knapsackalld.mos: Knapsack problem with 'alldifferent' constraint solved by automatic linear relaxations
  • knapsackalld2.mos: Configuring linear relaxations
  • knapsackalld3a.mos: Selecting constraints for linear relaxations
  • knapsackalld3b.mos: User-defined linear relaxations
Further explanation of this example: 'Xpress Kalis Mosel User Guide', Chapter 6 Hybridization of CP and MP

knapsackalld.zip[download all files]

Source Files
By clicking on a file name, a preview is opened at the bottom of this page.
knapsackalld.mos[download]
knapsackalld2.mos[download]
knapsackalld3a.mos[download]
knapsackalld3b.mos[download]





knapsackalld.mos

(!****************************************************************
   CP example problems
   ===================
   
   file knapsackalld.mos
   `````````````````````
   Knapsack problem with additional alldifferent 
   constraint solved using linear relaxations.
   - Using default settings for relaxation -

   (c) 2009 Artelys S.A. and Fair Isaac Corporation
       Creation: 2009, rev. Mar. 2013, rev. Jun. 2023
*****************************************************************!)
model "Knapsack with side constraints"
 uses "kalis"

 declarations
  VALUES = {1,3,8,9,12}
  R = 1..4
  x: array(R) of cpvar              ! Decision variables
  benefit: cpvar                    ! The objective to minimize
 end-declarations

! Enable output printing
 setparam("kalis_verbose_level", 1)

! Setting name of variables for pretty printing
 forall(i in R) setname(x(i),"x"+i) 
 setname(benefit,"benefit")

! Set initial domains for variables
 forall(i in R) setdomain(x(i), VALUES)

! Knapsack constraints
 3*x(1) + 5*x(2) + 2*x(3) <= 50
 2*x(1) + x(3) + 5*x(4) <= 75

! Additional global constraint
 all_different(union(i in R) {x(i)})

! Objective function
 benefit = 5*x(1) + 8*x(2) + 4*x(3) + x(4)

! Initial propagation
 if not cp_propagate: exit(1)

! Display bounds on objective after constraint propagation
 writeln("Constraint propagation objective ", benefit)


! **** Linear relaxation ****

! Enable automatic linear relaxations
 setparam("kalis_auto_relax", true)
  
! Solve the problem
 if cp_maximize(benefit):  
  cp_show_sol                      ! Output optimal solution to screen

end-model

Back to examples browserPrevious example