prescriptive
relationalai.semantics.reasoners
Prescriptive reasoning: define and solve decision problems.
Provides a declarative Python API for formulating decision problems — optimization, constraint satisfaction, or feasibility — and solving them with external solvers (HiGHS, Gurobi, Ipopt, MiniZinc, etc.).
Quick Start
Section titled “Quick Start”A small knapsack: pick how many of each item to take to maximize value without exceeding the weight budget.
from relationalai.semantics import Model, Float, Integer, sumfrom relationalai.semantics.reasoners.prescriptive import Problem
model = Model("knapsack")
# Data: items with weight and value.Item = model.Concept("Item", identify_by={"i": Integer})Item.weight = model.Property(f"{Item} has {Float:weight}")Item.value = model.Property(f"{Item} has {Float:value}")model.define(Item.new(i=0, weight=3.0, value=4.0))model.define(Item.new(i=1, weight=4.0, value=5.0))model.define(Item.new(i=2, weight=2.0, value=3.0))
# Decision variable: quantity of each item to take.Item.qty = model.Property(f"{Item} has {Float:qty}")
problem = Problem(model, Float) # Float for HiGHS/Gurobi/Ipopt, Integer for MiniZincproblem.solve_for(Item.qty, name=["qty", Item.i], lower=0, upper=10)problem.maximize(sum(Item.value * Item.qty))problem.satisfy(model.require(sum(Item.weight * Item.qty) <= 10))problem.solve("highs")
# Read solved values from the populated property.model.select(Item.i, Item.qty).inspect()Functions
Section titled “Functions”Functions exposed by this module.
Modules and Subpackages
Section titled “Modules and Subpackages”Submodules and subpackages available under this namespace.
problem Prescriptive reasoning: define and solve decision problems.