Skip to content

This feature is currently in Preview.

relationalai.experimental.solvers.integer()

Signature
integer(arg: dsl.Instance) -> SolverExpression

Returns a solver expression that constrains the solver variables for entities produced by arg to integer values. Equivalent to setting type="integer" in the SolverModel.variable() method. Must be called in a Model.rule() or solvers.operators() context.

NameTypeDescription
argdsl.InstanceAn instance of an entity type corresponding to a solver variable.

A SolverExpression object.

Use integer() with the SolverModel.constraint() method to constrain solver variables to integer values:

import relationalai as rai
from relationalai.experimental import solvers
# Define a RAI model.
model = rai.Model("SupportTicketRouting")
# Declare support pipeline stage type.
Stage = model.Type("Stage")
# Declare route type to connect stages.
Route = model.Type("Route")
Route.source.declare()
Route.destination.declare()
Route.capacity.declare()
32 collapsed lines
# Define sample data for the model.
# Define support teams and endpoints.
for name in [
"Incoming Tickets",
"US Tier 1",
"EU Tier 1",
"US Tier 2",
"EU Tier 2",
"Escalations",
"Resolved Tickets",
]:
with model.rule():
Stage.add(name=name)
# Define routes with capacities.
for src_name, dst_name, cap in [
("Incoming Tickets", "US Tier 1", 50),
("Incoming Tickets", "EU Tier 1", 40),
("US Tier 1", "Resolved Tickets", 20),
("US Tier 1", "US Tier 2", 30),
("EU Tier 1", "Resolved Tickets", 10),
("EU Tier 1", "EU Tier 2", 25),
("US Tier 2", "Resolved Tickets", 15),
("US Tier 2", "Escalations", 20),
("EU Tier 2", "Resolved Tickets", 15),
("EU Tier 2", "Escalations", 20),
("Escalations", "Resolved Tickets", 25),
]:
with model.rule():
src = Stage(name=src_name)
dst = Stage(name=dst_name)
Route.add(source=src, destination=dst).set(capacity=cap)
# Create a SolverModel instance from the model.
solver_model = solvers.SolverModel(model)
# Specify variables, constraints, and the objective.
# Define solver variables for each route.
with model.rule():
route = Route()
solver_model.variable(
route,
name_args=["route", route.source.name, route.destination.name],
)
# Declare route variables to be integers.
with model.rule():
route = Route()
solver_model.constraint(solvers.integer(route))

Alternatively, you may set type="integer" in the SolverModel.variable() method to achieve the same effect:

import relationalai as rai
from relationalai.experimental import solvers
47 collapsed lines
# Define a RAI model.
model = rai.Model("SupportTicketRouting")
# Declare support pipeline stage type.
Stage = model.Type("Stage")
# Declare route type to connect stages.
Route = model.Type("Route")
Route.source.declare()
Route.destination.declare()
Route.capacity.declare()
# Define sample data for the model.
# Define support teams and endpoints.
for name in [
"Incoming Tickets",
"US Tier 1",
"EU Tier 1",
"US Tier 2",
"EU Tier 2",
"Escalations",
"Resolved Tickets",
]:
with model.rule():
Stage.add(name=name)
# Define routes with capacities.
for src_name, dst_name, cap in [
("Incoming Tickets", "US Tier 1", 50),
("Incoming Tickets", "EU Tier 1", 40),
("US Tier 1", "Resolved Tickets", 20),
("US Tier 1", "US Tier 2", 30),
("EU Tier 1", "Resolved Tickets", 10),
("EU Tier 1", "EU Tier 2", 25),
("US Tier 2", "Resolved Tickets", 15),
("US Tier 2", "Escalations", 20),
("EU Tier 2", "Resolved Tickets", 15),
("EU Tier 2", "Escalations", 20),
("Escalations", "Resolved Tickets", 25),
]:
with model.rule():
src = Stage(name=src_name)
dst = Stage(name=dst_name)
Route.add(source=src, destination=dst).set(capacity=cap)
# Create a SolverModel instance from the model.
solver_model = solvers.SolverModel(model)
# Specify variables, constraints, and the objective.
# Define solver variables for each route.
with model.rule():
route = Route()
solver_model.variable(
route,
name_args=["route", route.source.name, route.destination.name],
type="integer",
)