Skip to main content

Class: IntVar

Integer decision variable with a domain.

Remarks​

Integer variable represents an unknown (integer) value that solver has to find.

The value of the integer variable can be constrained using mathematical expressions, such as Model.plus, Model.times, Model.le, Model.sum.

OptalCP solver focuses on scheduling problems and concentrates on IntervalVar variables. Therefore, interval variables should be the primary choice for modeling in OptalCP. However, integer variables can be used for other purposes, such as counting or indexing. In particular, integer variables can be helpful for cumulative expressions with variable heights; see Model.pulse, Model.stepAtStart, Model.stepAtEnd, and Model.stepAt.

The integer variable can be optional. In this case, the solver can make the variable absent, which is usually interpreted as the fact that the solver does not use the variable at all. Functions Model.presence and IntExpr.presence can constrain the presence of the variable.

Integer variables can be created using the function Model.intVar.

Example​

In the following example we create three integer variables x, y and z. Variables x and y are present, but variable z is optional. Each variable has a different range of possible values.

let model = new CP.Model();
let x = model.intVar({ name: "x", range: [1, 3] });
let y = model.intVar({ name: "y", range: [0, 100] });
let z = model.intVar({ name: "z", range: [10, 20], optional: true });

Extends​

Accessors​

max​

Get Signature​

get max(): number

The maximum value of the integer variable's domain.

Remarks​

Gets or sets the maximum value of the integer variable's domain.

The initial value is set during construction by Model.intVar.

Note: This property reflects the variable's domain in the model (before the solve), not in the solution.

The value must be in the range IntVarMin to IntVarMax.

See​

IntVar.min, IntVar.optional.

Example​
import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 5, max: 10, name: "x" });

console.log(x.max); // 10

x.max = 8;
console.log(x.max); // 8
Returns​

number

Set Signature​

set max(value: number): void

Parameters​
ParameterType
valuenumber
Returns​

void


min​

Get Signature​

get min(): number

The minimum value of the integer variable's domain.

Remarks​

Gets or sets the minimum value of the integer variable's domain.

The initial value is set during construction by Model.intVar.

Note: This property reflects the variable's domain in the model (before the solve), not in the solution.

The value must be in the range IntVarMin to IntVarMax.

See​

IntVar.max, IntVar.optional.

Example​
import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 5, max: 10, name: "x" });

console.log(x.min); // 5

x.min = 7;
console.log(x.min); // 7
Returns​

number

Set Signature​

set min(value: number): void

Parameters​
ParameterType
valuenumber
Returns​

void


name​

Get Signature​

get name(): string | undefined

The name assigned to this model element.

Remarks​

The name is optional and primarily useful for debugging purposes. When set, it helps identify the element in solver logs, error messages, and when inspecting solutions.

Names can be assigned to any model element including variables, expressions, and constraints.

Example​
import * as CP from "optalcp";

const model = new CP.Model();

// Name a variable at creation
const task = model.intervalVar({ length: 10, name: "assembly" });

// Or set name later
const x = model.intVar({ min: 0, max: 100 });
x.name = "quantity";

console.log(task.name); // "assembly"
console.log(x.name); // "quantity"
Returns​

string | undefined

Set Signature​

set name(value: string): void

Parameters​
ParameterType
valuestring
Returns​

void

Inherited from​

IntExpr.name


optional​

Get Signature​

get optional(): boolean

Whether the integer variable is optional.

Remarks​

Gets or sets whether the integer variable is optional:

  • True / true: The variable is optional - the solver decides whether it is present or absent in the solution.
  • False / false: The variable is present - it must have a value in the solution.

To force a variable to be absent, make it optional and constrain its presence to be false: model.enforce(~model.presence(x)) (Python), model.enforce(model.presence(x).not()) (TypeScript), or model.Enforce(!model.Presence(x)) (C#).

Note: This property reflects the presence status in the model (before the solve), not in the solution.

See​

IntVar.min, IntVar.max.

Example​
import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, optional: true, name: "y" });

console.log(x.optional); // false (present by default)
console.log(y.optional); // true (optional)

// Make x optional
x.optional = true;
console.log(x.optional); // true
Returns​

boolean

Set Signature​

set optional(value: boolean): void

Parameters​
ParameterType
valueboolean
Returns​

void

Constructors​

Constructor​

new IntVar(): IntVar

Returns​

IntVar

Inherited from​

IntExpr.constructor

Methods​

abs()​

abs(): IntExpr

Creates an integer expression which is absolute value of the expression.

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression has value absent, the resulting expression also has value absent.

Same as Model.abs.

Inherited from​

IntExpr.abs


div()​

div(rhs: number | IntExpr): IntExpr

Returns integer division of the expression arg. The division rounds towards zero.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe second integer expression.

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression or arg has value absent, then the resulting expression has also value absent.

Same as Model.div.

Inherited from​

IntExpr.div


eq()​

eq(rhs: number | IntExpr): BoolExpr

Create an equality constraint.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe expression or constant to compare against.

Returns​

BoolExpr

A boolean expression that is true when self equals rhs.

Remarks​

Returns a BoolExpr representing self == other.

If either operand has value absent, the result is also absent.

See​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, name: "y" });

// IntExpr.eq(IntExpr)
model.enforce(x.eq(y));

// IntExpr.eq(constant)
model.enforce(x.eq(5));

Inherited from​

IntExpr.eq


ge()​

ge(rhs: number | IntExpr): BoolExpr

Create a greater-than-or-equal constraint.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe expression or constant to compare against.

Returns​

BoolExpr

A boolean expression that is true when self is greater than or equal to rhs.

Remarks​

Returns a BoolExpr representing self >= other.

If either operand has value absent, the result is also absent.

See​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, name: "y" });

// IntExpr.ge(IntExpr)
model.enforce(x.ge(y));

// IntExpr.ge(constant)
model.enforce(x.ge(5));

Inherited from​

IntExpr.ge


gt()​

gt(rhs: number | IntExpr): BoolExpr

Create a greater-than constraint.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe expression or constant to compare against.

Returns​

BoolExpr

A boolean expression that is true when self is greater than rhs.

Remarks​

Returns a BoolExpr representing self > other.

If either operand has value absent, the result is also absent.

See​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, name: "y" });

// IntExpr.gt(IntExpr)
model.enforce(x.gt(y));

// IntExpr.gt(constant)
model.enforce(x.gt(5));

Inherited from​

IntExpr.gt


guard()​

guard(absentValue?: number): IntExpr

Creates an expression that replaces value absent by a constant.

Parameters​

ParameterTypeDefault valueDescription
absentValuenumber0The value to use when the expression is absent.

Returns​

IntExpr

The resulting integer expression

Remarks​

The resulting expression is:

  • equal to the expression if the expression is present
  • and equal to absentValue otherwise (i.e. when the expression is absent).

The default value of absentValue is 0.

The resulting expression is never absent.

Same as Model.guard.

Inherited from​

IntExpr.guard


identity()​

identity(rhs: number | IntExpr): Constraint

Constrains two expressions to be identical, including their presence status.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe right-hand side operand (IntExpr or int).

Returns​

Constraint

The constraint object

Remarks​

Identity is different than equality. For example, if x is absent, then x == 0 is absent, but x.identity(0) is false.

Same as Model.identity.

Inherited from​

IntExpr.identity


inRange()​

inRange(lb: number, ub: number): BoolExpr

Creates Boolean expression lb ≤ this ≤ ub.

Parameters​

ParameterTypeDescription
lbnumberThe lower bound of the range.
ubnumberThe upper bound of the range.

Returns​

BoolExpr

The resulting Boolean expression

Remarks​

If the expression has value absent, then the resulting expression has also value absent.

Use Model.enforce to add this expression as a constraint to the model.

Same as Model.inRange.

Inherited from​

IntExpr.inRange


le()​

le(rhs: number | IntExpr): BoolExpr

Create a less-than-or-equal constraint.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe expression or constant to compare against.

Returns​

BoolExpr

A boolean expression that is true when self is less than or equal to rhs.

Remarks​

Returns a BoolExpr representing self <= other.

If either operand has value absent, the result is also absent.

See​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, name: "y" });

// IntExpr.le(IntExpr)
model.enforce(x.le(y));

// IntExpr.le(constant)
model.enforce(x.le(5));

Inherited from​

IntExpr.le


lt()​

lt(rhs: number | IntExpr): BoolExpr

Create a less-than constraint.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe expression or constant to compare against.

Returns​

BoolExpr

A boolean expression that is true when self is less than rhs.

Remarks​

Returns a BoolExpr representing self < other.

If either operand has value absent, the result is also absent.

See​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, name: "y" });

// IntExpr.lt(IntExpr)
model.enforce(x.lt(y));

// IntExpr.lt(constant)
model.enforce(x.lt(5));

Inherited from​

IntExpr.lt


max2()​

max2(rhs: number | IntExpr): IntExpr

Creates an integer expression which is the maximum of the expression and arg.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe right-hand side operand (IntExpr or int).

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression or arg has value absent, then the resulting expression has also value absent.

Same as Model.max2. See Model.max for n-ary maximum.

Inherited from​

IntExpr.max2


maximize()​

maximize(): Objective

Creates a maximization objective for this expression.

Returns​

Objective

An Objective that maximizes this expression.

Remarks​

Creates an objective to maximize the value of this integer expression. A model can have at most one objective. New objective replaces the old one.

This is a fluent-style alternative to Model.maximize that allows creating objectives directly from expressions.

Example​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intervalVar({start: [0, 100], length: 10, name: "x"});

// Fluent style - maximize the start of x
x.start().maximize();

// Equivalent Model.maximize() style:
model.maximize(x.start());

See​

Inherited from​

IntExpr.maximize


min2()​

min2(rhs: number | IntExpr): IntExpr

Creates an integer expression which is the minimum of the expression and arg.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe right-hand side operand (IntExpr or int).

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression or arg has value absent, then the resulting expression has also value absent.

Same as Model.min2. See Model.min for the n-ary minimum.

Inherited from​

IntExpr.min2


minimize()​

minimize(): Objective

Creates a minimization objective for this expression.

Returns​

Objective

An Objective that minimizes this expression.

Remarks​

Creates an objective to minimize the value of this integer expression. A model can have at most one objective. New objective replaces the old one.

This is a fluent-style alternative to Model.minimize that allows creating objectives directly from expressions.

Example​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intervalVar({length: 10, name: "x"});
const y = model.intervalVar({length: 20, name: "y"});

// Fluent style - minimize the end of y
y.end().minimize();

// Equivalent Model.minimize() style:
model.minimize(y.end());

See​

Inherited from​

IntExpr.minimize


minus()​

minus(rhs: number | IntExpr): IntExpr

Returns subtraction of the expression and arg.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe second integer expression.

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression or arg has value absent, then the resulting expression has also value absent.

Same as Model.minus.

Inherited from​

IntExpr.minus


ne()​

ne(rhs: number | IntExpr): BoolExpr

Create an inequality constraint.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe expression or constant to compare against.

Returns​

BoolExpr

A boolean expression that is true when self does not equal rhs.

Remarks​

Returns a BoolExpr representing self != other.

If either operand has value absent, the result is also absent.

See​

import * as CP from "optalcp";

const model = new CP.Model();
const x = model.intVar({ min: 0, max: 10, name: "x" });
const y = model.intVar({ min: 0, max: 10, name: "y" });

// IntExpr.ne(IntExpr)
model.enforce(x.ne(y));

// IntExpr.ne(constant)
model.enforce(x.ne(5));

Inherited from​

IntExpr.ne


neg()​

neg(): IntExpr

Returns negation of the expression.

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression has value absent then the resulting expression has also value absent.

Same as Model.neg.

Inherited from​

IntExpr.neg


plus()​

plus(rhs: number | IntExpr): IntExpr

Returns addition of the expression and the argument.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe second integer expression.

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression or arg has value absent, then the resulting expression has also value absent.

Same as Model.plus.

Inherited from​

IntExpr.plus


presence()​

presence(): BoolExpr

Returns an expression which is true if the expression is present and false when it is absent.

Returns​

BoolExpr

The resulting Boolean expression

Remarks​

The resulting expression is never absent.

Same as Model.presence.

Inherited from​

IntExpr.presence


times()​

times(rhs: number | IntExpr): IntExpr

Returns multiplication of the expression and arg.

Parameters​

ParameterTypeDescription
rhsnumber | IntExprThe second integer expression.

Returns​

IntExpr

The resulting integer expression

Remarks​

If the expression or arg has value absent, then the resulting expression has also value absent.

Same as Model.times.

Inherited from​

IntExpr.times