Skip to content

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

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, sum
from 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 MiniZinc
problem.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

Functions exposed by this module.

Classes

Classes exposed by this module.

Modules and Subpackages

Submodules and subpackages available under this namespace.

Referenced By

RelationalAI Documentation
└──  Release Notes
    └──  Python API Release Notes
        └──  What’s New in Version 1.0.3
            └──  New Features and Enhancements