FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home

Non-linear constraints over real-valued decision variables

Description
Non-linear constraints may be defined over discrete (finite domain) or continuous (floating point interval) variables, or combinations of both.

Further explanation of this example: 'Xpress Kalis Mosel Reference Manual'

Source Files
By clicking on a file name, a preview is opened at the bottom of this page.

nlinctr.mos

(!****************************************************************
CP example problems
===================

file nlinctr.mos

Definition and use of non-linear constraints.

*** This model cannot be run with a Community Licence ***

(c) 2008 Artelys S.A. and Fair Isaac Corporation
Creation: 2005, rev. Mar. 2013
*****************************************************************!)

model "Non-linear constraints"
uses "kalis"

parameters
PREC =  1e-10
end-parameters

! Setting default precision of continuous variables
setparam("KALIS_DEFAULT_PRECISION_VALUE", PREC)

declarations
ISET = 1..8
x: array(ISET) of cpfloatvar
end-declarations

! Setting variable names
forall(i in ISET) x(i).name:= "x"+i

! Setting variable bounds
forall(i in ISET) do
x(i) >= -100; x(i) <= 100
end-do

! Defining and posting non-linear constraints
x(1) + x(2)*(x(1)+x(3)) + x(4)*(x(3)+x(5)) + x(6)*(x(5)+x(7)) -
(x(8)*((1/8)-x(7))) = 0
x(2) + x(3)*(x(1)+x(5)) + x(4)*(x(2)+x(6)) + x(5)*x(7) -
(x(8)*((2/8)-x(6))) = 0
x(3)*(1 + x(6)) + x(4)*(x(1)+x(7)) + x(2)*x(5) -
(x(8)*((3/8)-x(5))) = 0
x(4) + x(1)*x(5) + x(2)*x(6) + x(3)*x(7) - (x(8)*((4/8)-x(4))) = 0
x(5) + x(1)*x(6) + x(2)*x(7) - (x(8)*((5/8)-x(3))) = 0
x(6) + x(1)*x(7) - (x(8)*((6/8)-x(2))) = 0
x(7) - (x(8)*((7/8)-x(1))) = 0
sum(i in ISET) x(i) = -1

! Set the enumeration strategy
cp_set_branching(split_domain(KALIS_WIDEST_DOMAIN, KALIS_MIDDLE_VALUE,
x, true, 0))

! Find one solution
if cp_find_next_sol then
writeln("Solution number 1" )
cp_show_sol
cp_show_stats
end-if

end-model