LSModel Class

class LSModel

Mathematical optimization model. A model is composed of expressions (some of which are decisions), organized as a tree. Then, some expressions of the model can be constrained or optimized. Once your optimization model is created and closed, the solver can be launched to resolve it. Note that you cannot modify a model which has been closed: you must reopen it (with open()) or instantiate another LocalSolver environment to optimize another model.

See:

LSExpression

See:

LSOperator

Summary

Functions

createConstant

Creates a constant expression representing the given value.

createConstant

Creates a constant expression representing the given value.

createExpression

Creates an expression of the given type, with the given ordered operands.

createExternalFunction

Creates an integer external function.

createExternalFunction

Creates a double external function.

createExternalFunction

Creates an integer array external function.

createExternalFunction

Creates a double array external function.

createExternalFunction

Creates an external function.

createExternalFunction

Creates an external function.

createLambdaFunction

Creates a lambda function.

boolVar

Creates a boolean decision.

floatVar

Creates a float decision.

intVar

Creates an integer decision.

intervalVar

Creates an interval decision included in [minStart, maxEnd).

start

Creates a start expression.

end

Creates an end expression.

length

Creates a length expression.

sum

Creates a sum expression.

sub

Creates a substraction expression.

call

Creates a call expression.

prod

Creates a product expression.

max

Creates a maximum expression.

min

Creates a minimum expression.

or_

Creates a OR expression.

and_

Creates an AND expression.

xor_

Creates a XOR expression.

not_

Creates a NOT expression.

eq

Creates an equality expression.

neq

Creates a disequality expression.

geq

Creates an inequality expression greater than or equal to.

leq

Creates an inequality expression less than or equal to.

gt

Creates an inequality expression greater than.

lt

Creates an inequality expression less than.

iif

Creates a ternary conditional expression.

abs

Creates an absolute value expression.

dist

Creates a distance expression.

div

Creates a division expression.

mod

Creates a modulo expression.

array

Creates an array expression.

at

Creates an AT expression for N-dimensional array.

scalar

Creates an expression for the scalar product between two arrays.

ceil

Creates a ceil expression.

floor

Creates a floor expression.

round

Creates a rounding expression.

sqrt

Creates a square root expression.

log

Creates a log expression.

exp

Creates an exponential expression.

pow

Creates a power expression.

cos

Creates a cosine expression.

sin

Creates a sine expression.

tan

Creates a tangent expression.

piecewise

Creates a piecewise linear expression.

listVar

Creates a list decision with the given length.

setVar

Creates a set decision with the given length.

count

Creates a count expression.

indexOf

Creates an indexOf expression.

distinct

Creates a distinct expression.

distinct

Creates a distinct expression.

intersection

Creates an intersection expression.

contains

Creates a contains expression.

partition

Creates a partition expression.

partition

Creates a partition expression.

disjoint

Creates a disjoint expression.

disjoint

Creates a disjoint expression.

cover

Creates a cover expression.

cover

Creates a cover expression.

find

Creates a find expression.

sort

Creates a sort expression.

sort

Creates a sort expression.

externalFunction

Creates an external function expression.

externalFunction

Creates an external function expression.

externalFunction

Creates an external function expression.

lambdaFunction

Creates a lambda function expression.

range

Creates a range expression, where expr0 is the lower bound (inclusive) and expr1 is the upper bound (exclusive).

getNbExpressions

Gets the number of expressions added to this model.

getExpression

Gets the expression with the given index in this model.

getExpression

Gets the expression with the given name.

getNbDecisions

Gets the number of decisions in the model.

getDecision

Gets the decision with the given index.

addConstraint

Adds the given expression to the list of constraints.

constraint

Shortcut for addConstraint(expr).

removeConstraint

Removes the given expression from the list of constraints.

removeConstraint

Removes the constraint at the given position in the list of constraints.

getNbConstraints

Gets the number of constraints added to this model.

getConstraint

Gets the constraint with the given index.

addObjective

Adds the given expression to the list of objectives to optimize.

minimize

Shortcut for addObjective(expr, OD_Minimize).

maximize

Shortcut for addObjective(expr, OD_Maximize).

removeObjective

Removes the objective at the given position in the list of objectives.

getNbObjectives

Gets the number of objectives added to this model.

getObjective

Gets the objective with the given index.

getObjectiveDirection

Gets the direction of the objective with the given index.

getNbOperands

Gets the number of operands in the model.

close

Closes the model.

open

Reopens the model.

isClosed

Returns true if the model is closed, false otherwise.

toString

Returns a string representation of this model.

Functions

LSExpression LSModel::createConstant(lsint value)

Creates a constant expression representing the given value. Only allowed in state S_Modeling. Note that if a constant has been already created with the same value, this method can return the same expression, but it is not guaranteed. The exact behavior is implementation defined.

Parameters:

value – Value of the constant.

Returns:

Created constant expression.

LSExpression LSModel::createConstant(lsdouble value)

Creates a constant expression representing the given value. Only allowed in state S_Modeling. Note that if a constant has been already created with the same value, this method can return the same expression, but it is not guaranteed. The exact behavior is implementation defined.

Parameters:

value – Value of the constant

Returns:

Created constant expression.

template<typename ...TN>
LSExpression createExpression(LSOperator op, TN... operands)

Creates an expression of the given type, with the given ordered operands. Only allowed in state S_Modeling. The operands can be doubles, integers or previously declared LSExpressions. It is also possible to use this method with iterators. In that case, you have to call this method with 2 operands exactly that must be iterators of the same type, pointing respectively to the initial and final positions of the operands.

Parameters:
  • TN – types of the operands to add. Types allowed: constant types, LSExpression or iterators.

  • op – Type of expression to create.

  • operands – Operands.

Returns:

Created expression.

LSExpression LSModel::createExternalFunction(LSExternalFunction<lsint> *func)

Creates an integer external function. The argument must be derived from LSExternalFunction. When the external function is called, the argument values will be made accessible to your function through the LSExternalArgumentValues.

Once you have instantiated it, you have to use call() to call it in your model.

Parameters:

func – External function to call.

Returns:

The expression associated to the function.

See:

LSExternalFunction

See:

O_ExternalFunction

Since:

9.5

LSExpression LSModel::createExternalFunction(LSExternalFunction<lsdouble> *func)

Creates a double external function. The argument must be derived from LSExternalFunction. When the external function is called, the argument values will be made accessible to your function through the LSExternalArgumentValues.

Once you have instantiated it, you have to use call() to call it in your model.

Parameters:

func – External function to call.

Returns:

The expression associated to the function.

See:

LSExternalFunction

See:

O_ExternalFunction

Since:

9.5

LSExpression LSModel::createExternalFunction(LSArrayExternalFunction<lsint> *func)

Creates an integer array external function. The argument must be derived from LSArrayExternalFunction. When the external function is called, the argument values will be made accessible to your function through the LSExternalArgumentValues.

Once you have instantiated it, you have to use call() to call it in your model.

Parameters:

func – External function to call.

Returns:

The expression associated to the function.

See:

LSExternalFunction

See:

O_ExternalFunction

Since:

11.0

LSExpression LSModel::createExternalFunction(LSArrayExternalFunction<lsdouble> *func)

Creates a double array external function. The argument must be derived from LSArrayExternalFunction. When the external function is called, the argument values will be made accessible to your function through the LSExternalArgumentValues.

Once you have instantiated it, you have to use call() to call it in your model.

Parameters:

func – External function to call.

Returns:

The expression associated to the function.

See:

LSExternalFunction

See:

O_ExternalFunction

Since:

11.0

template<typename T, typename ...ARGS>
LSExpression LSModel::createExternalFunction(const std::function<T(ARGS...)> &func)

Creates an external function. The argument must be a std::function taking any combination of lsint and lsdouble arguments. When the external function is called, the argument values will be passed to your function as its arguments.

Once you have instantiated it, you have to use call() to call it in your model.

Parameters:

func – std::function to call. It must only accept lsint and lsdouble arguments.

Returns:

The expression associated to the function.

See:

LSExternalFunction

See:

O_ExternalFunction

Since:

9.5

template<typename T>
LSExpression LSModel::createExternalFunction(const std::function<T(const LSExternalArgumentValues&)> &func)

Creates an external function. The argument must be a std::function taking a LSExternalArgumentValues as its argument. When the external function is called, the argument values will be made accessible to your function through this object.

Once you have instantiated it, you have to use call() to call it in your model.

Parameters:

func – External function to call.

Returns:

The expression associated to the function.

See:

LSExternalFunction

See:

O_ExternalFunction

Since:

9.5

template<typename A>
LSExpression LSModel::createLambdaFunction(const A &functor)

Creates a lambda function. A lambda function is a particular expression composed of two parts:

  • The arguments of the function (which are also LSExpressions of type O_Argument)

  • The body of the function. The body is an LSExpression that will be used to evaluate the result of the function. The body can be any LSExpression composed of any operands and operators supported by LocalSolver. Thus, the body expression can use the arguments of the function but can also capture and refer to expressions declared outside of the function.

You have to provide the body of the function as a std::function (C++ function or lambda). Please note that the provided std::function will not be used directly during the solving process, but will be evaluated once by the API with a number of LSExpression of type O_Argument that corresponds to the number of arguments your std::function expects. The returned LSExpression resulting of this evaluation will be used as the body of the LocalSolver function O_LambdaFunction.

Parameters:

functor – Functor called to create the function.

Returns:

The expression associated to the function.

Since:

9.5

LSExpression LSModel::boolVar()

Creates a boolean decision. Binary decision variable with domain { 0, 1 }. This method is a shortcut for createExpression(O_Bool).

See:

O_Bool

See:

LSModel::createExpression()

Since:

5.5

LSExpression LSModel::floatVar(lsdouble lb, lsdouble ub)

Creates a float decision. Decision variable with domain [lb, ub]. This method is a shortcut for createExpression(O_Float, lb, ub).

Parameters:
  • lb – Lower bound of the decision variable.

  • ub – Upper bound of the decision variable.

See:

O_Float

See:

LSModel::createExpression()

Since:

5.5

LSExpression LSModel::intVar(lsint lb, lsint ub)

Creates an integer decision. Decision variable with domain [lb, ub]. This method is a shortcut for createExpression(O_Int, lb, ub).

Parameters:
  • lb – Lower bound of the decision variable.

  • ub – Upper bound of the decision variable.

See:

O_Int

See:

LSModel::createExpression()

Since:

5.5

LSExpression LSModel::intervalVar(lsint minStart, lsint maxEnd)

Creates an interval decision included in [minStart, maxEnd). Start is inclusive and end is exclusive. This method is a shortcut for createExpression(O_Interval, minStart, maxEnd).

Parameters:
  • minStart – Min start of the decision variable.

  • maxEnd – Max end of the decision variable.

See:

O_Interval

See:

LSModel::createExpression()

Since:

12.0

template<typename T0>
LSExpression LSModel::start(T0 expr0)

Creates a start expression. This method is a shortcut for createExpression(O_Start, expr0).

See:

O_Start

See:

LSModel::createExpression()

Since:

12.0

template<typename T0>
LSExpression LSModel::end(T0 expr0)

Creates an end expression. This method is a shortcut for createExpression(O_End, expr0).

See:

O_End

See:

LSModel::createExpression()

Since:

12.0

template<typename T0>
LSExpression LSModel::length(T0 expr0)

Creates a length expression. This method is a shortcut for createExpression(O_Length, expr0).

See:

O_Length

See:

LSModel::createExpression()

Since:

12.0

template<typename ...TN>
LSExpression LSModel::sum(TN... operands)

Creates a sum expression. This method is a shortcut for createExpression(O_Sum, operands).

See:

O_Sum

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::sub(T0 expr0, T1 expr1)

Creates a substraction expression. This method is a shortcut for createExpression(O_Sub, expr0, expr1).

See:

O_Sub

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::call(TN... operands)

Creates a call expression. The first operand must be an LSExpression of type O_LambdaFunction or O_ExternalFunction. The other operands may be LSExpressions, booleans, integers, and doubles. They are passed to the function as arguments.

This method is a shortcut for createExpression(O_Call, operands).

See:

O_Call

See:

LSModel::createExpression()

Since:

6.0

template<typename ...TN>
LSExpression LSModel::prod(TN... operands)

Creates a product expression. This method is a shortcut for createExpression(O_Prod, operands).

See:

O_Prod

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::max(TN... operands)

Creates a maximum expression. This method is a shortcut for createExpression(O_Max, operands).

See:

O_Max

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::min(TN... operands)

Creates a minimum expression. This method is a shortcut for createExpression(O_Min, operands).

See:

O_Min

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::or_(TN... operands)

Creates a OR expression. This method is a shortcut for createExpression(O_Or, operands).

See:

O_Or

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::and_(TN... operands)

Creates an AND expression. This method is a shortcut for createExpression(O_And, operands).

See:

O_And

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::xor_(TN... operands)

Creates a XOR expression. This method is a shortcut for createExpression(O_Xor, operands).

See:

O_Xor

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSModel::LSExpression not_(T0 expr0)

Creates a NOT expression. This method is a shortcut for createExpression(O_Not, expr0).

See:

O_Not

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::eq(T0 expr0, T1 expr1)

Creates an equality expression. This method is a shortcut for createExpression(O_Eq, expr0, expr1).

See:

O_Eq

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::neq(T0 expr0, T1 expr1)

Creates a disequality expression. This method is a shortcut for createExpression(O_Neq, expr0, expr1).

See:

O_Neq

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::geq(T0 expr0, T1 expr1)

Creates an inequality expression greater than or equal to. This method is a shortcut for createExpression(O_Geq, expr0, expr1).

See:

O_Geq

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::leq(T0 expr0, T1 expr1)

Creates an inequality expression less than or equal to. This method is a shortcut for createExpression(O_Leq, expr0, expr1).

See:

O_Leq

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::gt(T0 expr0, T1 expr1)

Creates an inequality expression greater than. This method is a shortcut for createExpression(O_Gt, expr0, expr1).

See:

O_Gt

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::lt(T0 expr0, T1 expr1)

Creates an inequality expression less than. This method is a shortcut for createExpression(O_Lt, expr0, expr1).

See:

O_Lt

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1, typename T2>
LSExpression LSModel::iif(T0 condExpr, T1 trueExpr, T2 falseExpr)

Creates a ternary conditional expression. This method is a shortcut for createExpression(O_If, condExpr, trueExpr, falseExpr).

See:

O_If

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::abs(T0 expr0)

Creates an absolute value expression. This method is a shortcut for createExpression(O_Abs, expr0).

See:

O_Abs

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::dist(T0 expr0, T1 expr1)

Creates a distance expression. This method is a shortcut for createExpression(O_Dist, expr0, expr1).

See:

O_Dist

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::div(T0 expr0, T1 expr1)

Creates a division expression. This method is a shortcut for createExpression(O_Div, expr0, expr1).

See:

O_Div

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::mod(T0 expr0, T1 expr1)

Creates a modulo expression. This method is a shortcut for createExpression(O_Mod, expr0, expr1).

See:

O_Mod

See:

LSModel::createExpression()

Since:

5.5

template<typename ...TN>
LSExpression LSModel::array(TN... operands)

Creates an array expression. This method is a shortcut for createExpression(O_Array, operands).

See:

O_Array

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename ...TN>
LSExpression LSModel::at(T0 arrayExpr, TN... operands)

Creates an AT expression for N-dimensional array. This method is a shortcut for createExpression(O_At, arrayExpr, operands).

See:

O_At

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::scalar(T0 expr0, T1 expr1)

Creates an expression for the scalar product between two arrays. This method is a shortcut for createExpression(O_Scalar, expr0, expr1).

See:

O_Scalar

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::ceil(T0 expr0)

Creates a ceil expression. This method is a shortcut for createExpression(O_Ceil, expr0).

See:

O_Ceil

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::floor(T0 expr0)

Creates a floor expression. This method is a shortcut for createExpression(O_Floor, expr0).

See:

O_Floor

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::round(T0 expr0)

Creates a rounding expression. This method is a shortcut for createExpression(O_Round, expr0).

See:

O_Round

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::sqrt(T0 expr0)

Creates a square root expression. This method is a shortcut for createExpression(O_Sqrt, expr0).

See:

O_Sqrt

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::log(T0 expr0)

Creates a log expression. This method is a shortcut for createExpression(O_Log, expr0).

See:

O_Log

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::exp(T0 expr0)

Creates an exponential expression. This method is a shortcut for createExpression(O_Exp, expr0).

See:

O_Exp

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::pow(T0 expr0, T1 expr1)

Creates a power expression. This method is a shortcut for createExpression(O_Pow, expr0, expr1).

See:

O_Pow

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::cos(T0 expr0)

Creates a cosine expression. This method is a shortcut for createExpression(O_Cos, expr0).

See:

O_Cos

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::sin(T0 expr0)

Creates a sine expression. This method is a shortcut for createExpression(O_Sin, expr0).

See:

O_Sin

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::tan(T0 expr0)

Creates a tangent expression. This method is a shortcut for createExpression(O_Tan, expr0).

See:

O_Tan

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1, typename T2>
LSExpression LSModel::piecewise(T0 expr0, T1 expr1, T2 expr2)

Creates a piecewise linear expression. This method is a shortcut for createExpression(O_Piecewise, expr, expr1, expr2).

See:

O_Piecewise

See:

LSModel::createExpression()

Since:

5.5

LSExpression LSModel::listVar(lsint n)

Creates a list decision with the given length. A list is a ordered collection of integers within a domain [0, n-1]. This method is a shortcut for createExpression(O_List, n).

Parameters:

n – Collection size.

See:

O_List

See:

LSModel::createExpression()

Since:

5.5

LSExpression LSModel::setVar(lsint n)

Creates a set decision with the given length. A set is a unordered collection of integers within a domain [0, n-1]. This method is a shortcut for createExpression(O_Set, n).

Parameters:

n – Collection size.

See:

O_Set

See:

LSModel::createExpression()

Since:

8.0

template<typename T0>
LSExpression LSModel::count(T0 expr0)

Creates a count expression. This method is a shortcut for createExpression(O_Count, expr0).

See:

O_Count

See:

LSModel::createExpression()

Since:

5.5

template<typename T0, typename T1>
LSExpression LSModel::indexOf(T0 expr0, T1 expr1)

Creates an indexOf expression. This method is a shortcut for createExpression(O_IndexOf, expr0, expr1).

See:

O_IndexOf

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::distinct(T0 array)

Creates a distinct expression. This method is a shortcut for createExpression(O_Distinct, array).

See:

O_Distinct

See:

LSModel::createExpression()

Since:

12.5

template<typename T0, typename T1>
LSExpression LSModel::distinct(T0 it, T1 func)

Creates a distinct expression. This method is a shortcut for createExpression(O_Distinct, it, func).

See:

O_Distinct

See:

LSModel::createExpression()

Since:

12.5

template<typename T0, typename T1>
LSExpression LSModel::intersection(T0 expr0, T1 expr1)

Creates an intersection expression. This method is a shortcut for createExpression(O_Intersection, expr0, expr1).

See:

O_Intersection

See:

LSModel::createExpression()

Since:

12.5

template<typename T0, typename T1>
LSExpression LSModel::contains(T0 e1, T1 e2)

Creates a contains expression. This method is a shortcut for createExpression(O_Contains, e1, e2).

See:

O_Contains

See:

LSModel::createExpression()

Since:

7.5

template<typename ...TN>
LSExpression LSModel::partition(TN... operands)

Creates a partition expression. This method is a shortcut for createExpression(O_Partition, operands).

See:

O_Partition

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::partition(T0 array)

Creates a partition expression. This method is a shortcut for createExpression(O_Partition, array).

See:

O_Partition

See:

LSModel::createExpression()

Since:

10.5

template<typename ...TN>
LSExpression LSModel::disjoint(TN... operands)

Creates a disjoint expression. This method is a shortcut for createExpression(O_Disjoint, operands).

See:

O_Disjoint

See:

LSModel::createExpression()

Since:

5.5

template<typename T0>
LSExpression LSModel::disjoint(T0 array)

Creates a disjoint expression. This method is a shortcut for createExpression(O_Disjoint, array).

See:

O_Disjoint

See:

LSModel::createExpression()

Since:

10.5

template<typename ...TN>
LSExpression LSModel::cover(TN... operands)

Creates a cover expression. This method is a shortcut for createExpression(O_Cover, operands).

See:

O_Cover

See:

LSModel::createExpression()

Since:

10.5

template<typename T0>
LSExpression LSModel::cover(T0 array)

Creates a cover expression. This method is a shortcut for createExpression(O_Cover, array).

See:

O_Cover

See:

LSModel::createExpression()

Since:

10.5

template<typename T0, typename T1>
LSExpression LSModel::find(T0 expr0, T1 expr1)

Creates a find expression. This method is a shortcut for createExpression(O_Find, expr0, expr1).

See:

O_Find

See:

LSModel::createExpression()

Since:

10.5

template<typename T0>
LSExpression LSModel::sort(T0 expr0)

Creates a sort expression. This method is a shortcut for createExpression(O_Sort, expr0).

See:

O_Sort

See:

LSModel::createExpression()

Since:

11.0

template<typename T0>
LSExpression LSModel::sort(T0 expr0, expr1)

Creates a sort expression. This method is a shortcut for createExpression(O_Sort, expr0, expr1).

See:

O_Sort

See:

LSModel::createExpression()

Since:

12.5

template<typename T>
LSExpression LSModel::externalFunction(LSExternalFunction<T> *func)

Creates an external function expression. This method is a shortcut for createExternalFunction(func).

See:

O_ExternalFunction

See:

LSModel::createExternalFunction()

Since:

9.5

template<typename T, typename ...ARGS>
LSExpression LSModel::externalFunction(const std::function<T(ARGS...)> &func)

Creates an external function expression. This method is a shortcut for createExternalFunction(func).

See:

O_ExternalFunction

See:

LSModel::createExternalFunction()

Since:

9.5

template<typename T>
LSExpression LSModel::externalFunction(const std::function<T(const LSExternalArgumentValues&)> &func)

Creates an external function expression. This method is a shortcut for createExternalFunction(func).

See:

O_ExternalFunction

See:

LSModel::createExternalFunction()

Since:

9.5

template<typename T>
LSExpression LSModel::lambdaFunction(T functor)

Creates a lambda function expression. This method is a shortcut for createLambdaFunction(functor).

See:

O_LambdaFunction

See:

LSModel::createLambdaFunction()

Since:

9.5

template<typename T0, typename T1>
LSExpression LSModel::range(T0 expr0, T1 expr1)

Creates a range expression, where expr0 is the lower bound (inclusive) and expr1 is the upper bound (exclusive). This method is a shortcut for createExpression(O_Range, expr0, expr1).

See:

O_Range

See:

LSModel::createExpression()

Since:

7.0

int LSModel::getNbExpressions() const

Gets the number of expressions added to this model.

Returns:

Number of expressions.

LSExpression LSModel::getExpression(int exprIndex) const

Gets the expression with the given index in this model.

Parameters:

exprIndex – Index of the expression.

Returns:

Expression with the given index.

LSExpression LSModel::getExpression(const std::string &name) const

Gets the expression with the given name. Throws an exception if no expression with the given name exists.

Parameters:

name – Name.

Returns:

Expression with the given name.

int LSModel::getNbDecisions() const

Gets the number of decisions in the model. This corresponds to the number of decision variables declared in the model.

Returns:

Number of decisions.

LSExpression LSModel::getDecision(int decisionIndex) const

Gets the decision with the given index.

Parameters:

decisionIndex – Index of the decision.

Returns:

Decision with the given index.

void LSModel::addConstraint(const LSExpression &expr)

Adds the given expression to the list of constraints. It means that the value of this expression must be constrained to be equal to 1 in any solution found by the solver. Hence, only boolean expressions (that is, expressions whose value is boolean) can be constrained. Only allowed in state S_Modeling. If the expression is already a constraint, this method does nothing and returns immediately.

param expr:

Expression.

void LSModel::constraint(const LSExpression &expr)

Shortcut for addConstraint(expr).

See:

LSModel::addConstraint()

Parameters:

expr – Expression.

Since:

5.5

void LSModel::removeConstraint(const LSExpression &expr)

Removes the given expression from the list of constraints. If the expression was not constrained, this method does nothing and returns immediately. Only allowed in state S_Modeling.

Since:

5.0

Parameters:

expr – Expression.

void LSModel::removeConstraint(int constraintIndex)

Removes the constraint at the given position in the list of constraints. Only allowed in state S_Modeling.

Since:

5.0

Parameters:

constraintIndex – position of the constraint to remove.

int LSModel::getNbConstraints() const

Gets the number of constraints added to this model.

Returns:

Number of constraints.

LSExpression LSModel::getConstraint(int constraintIndex) const

Gets the constraint with the given index.

Parameters:

constraintIndex – Index of the constraint.

Returns:

Constraint with the given index.

void LSModel::addObjective(const LSExpression &expr, LSObjectiveDirection direction)

Adds the given expression to the list of objectives to optimize. The same expression can be added more than once. Only allowed in state S_Modeling. Note that the objectives will be optimized in the order in which they have been added to the model. It is useful for lexicographic multiobjective optimization, and more particularly for goal programming.

Parameters:
  • expr – Expression.

  • direction – Optimization direction of this objective.

void LSModel::minimize(const LSExpression &expr)

Shortcut for addObjective(expr, OD_Minimize).

See:

LSModel::addObjective()

Parameters:

expr – Expression.

Since:

5.5

void LSModel::maximize(const LSExpression &expr)

Shortcut for addObjective(expr, OD_Maximize).

See:

LSModel::addObjective()

Parameters:

expr – Expression.

Since:

5.5

void LSModel::removeObjective(int objectiveIndex) const

Removes the objective at the given position in the list of objectives. Note that the objectives created after the removed one have their index decreased by 1. Phases are not modified when an objective is removed. It is the user’s responsibility to change the objective index of each phase to keep it coherent (with LSPhase::setOptimizedObjective()), or to disable it (with LSPhase::setEnabled()). Only allowed in state S_Modeling.

Since:

5.0

Parameters:

objectiveIndex – position of the objective to remove.

int LSModel::getNbObjectives() const

Gets the number of objectives added to this model.

LSExpression LSModel::getObjective(int objectiveIndex) const

Gets the objective with the given index.

Parameters:

objectiveIndex – Index of the objective.

Returns:

Objective with the given index.

LSObjectiveDirection LSModel::getObjectiveDirection(int objectiveIndex) const

Gets the direction of the objective with the given index.

Parameters:

objectiveIndex – Index of the objective.

Returns:

Objective direction.

int LSModel::getNbOperands() const

Gets the number of operands in the model. This corresponds to the number of operands for all expressions declared in the model. It is an analog of the number of non zeros in matrix model encountered in mathematical programming: it gives an hint about the size and the density of your model.

Returns:

Number of operands.

void LSModel::close()

Closes the model. Only allowed in state S_Modeling. When this method is called, the solver is placed in state S_Stopped.

Once the model is closed, no expressions, constraints or objectives can be added or removed unless the model is reopened. The model must be closed before starting its resolution.

void LSModel::open()

Reopens the model. Only allowed in state S_Stopped. When this method is called, the solver is placed in state S_Modeling.

In this state, the model can be modified: it is possible to add new expressions, constraints or objectives, modify expression operands, and remove existing constraints and objectives. However, existing expressions cannot be deleted.

bool LSModel::isClosed() const

Returns true if the model is closed, false otherwise.

Returns:

True if the model is closed.

std::string LSModel::toString() const

Returns a string representation of this model. This representation provides:

  • The number of expressions, decisions, constraints, and objectives.

  • The density of the model.

Useful for debugging or logging purposes.

Returns:

String representation.