relationalai.experimental.solvers.exp()
exp(arg: dsl.Instance|SolverExpression) -> SolverExpression
Returns a solver expression that represents arg
, where Model.rule()
or solvers.operators()
context.
Parameters
Section titled “Parameters”Name | Type | Description |
---|---|---|
arg | dsl.Instance , SolverExpression | A numeric solver variable or expression to exponentiate. |
Returns
Section titled “Returns”A SolverExpression
object.
Example
Section titled “Example”Use exp()
with the SolverModel.constraint()
method to model non-linear growth or penalty effects:
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 exponential fat total to discourage high-fat meals.with solvers.operators(): portion = Portion() total_fat = solvers.sum(portion.food.fat * portion, per=[portion.day]) solver_model.constraint(solvers.exp(total_fat) <= 500)