relationalai.experimental.solvers.product()
product(*args: dsl.Instance|SolverExpression, per: list = []) -> SolverExpression
Returns a solver expression that computes the product of the input arguments.
If one or more per
keys are provided, aggregation is performed per group.
Must be called in a Model.rule()
or solvers.operators()
context.
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
*args | dsl.Instance , SolverExpression | One or more numeric solver variables or expressions to multiply. |
per | list | Optional grouping key(s) to perform aggregation per value of one or more variables. Defaults to [] . |
Returns
Section titled “Returns”A SolverExpression
object representing the product.
Example
Section titled “Example”Use product()
with the SolverModel.constraint()
method to limit or enforce relationships between solver values:
import relationalai as raifrom relationalai.experimental import solvers
# Create a model.model = rai.Model("DietaryConstraints")
# Declare entity types.Food = model.Type("Food")Day = model.Type("Day")Portion = model.Type("Portion")
23 collapsed lines
# Declare properties.Food.calories.declare()Food.fat.declare()Food.salt.declare()Food.carbs.declare()Portion.food.declare()Portion.day.declare()
# Define foods.with model.rule(): Food.add(name="Oatmeal").set(calories=150, fat=3, salt=0.1, carbs=27) Food.add(name="Egg").set(calories=70, fat=5, salt=0.2, carbs=1) Food.add(name="Banana").set(calories=100, fat=0.5, salt=0.0, carbs=26) Food.add(name="Toast").set(calories=80, fat=1, salt=0.3, carbs=15)
# Define days.with model.rule(): for name in ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]: Day.add(name=name)
# Define all possible food portions for each day.with model.rule(): Portion.add(food=Food(), day=Day())
# Create a solver model.solver_model = solvers.SolverModel(model)
# Define solver variables for portions.with model.rule(): portion = Portion() solver_model.variable( portion, name_args=["portion", portion.food.name, portion.day.name], lower=0, upper=5, )
# Constrain oatmeal-toast product to cap combinations of high-carb foods.with model.rule(): oatmeal = Portion(food=Food(name="Oatmeal")) toast = Portion(food=Food(name="Toast")) oatmeal.day == toast.day with solvers.operators(): solver_model.constraint(solvers.product(oatmeal, toast) <= 3)