DecisionVariable#
- class DecisionVariable#
Decision variable in an optimization problem.
This class represents a variable that will be optimized in a mathematical programming problem. It supports binary, integer, continuous, semi-integer, semi-continuous, and finite-domain variables, and can be used in arithmetic expressions to build objective functions and constraints. Construction requires a
Kindand raises ValueError when the requested bound cannot be normalized for the selected variable kind. Usefinite_domain()for an explicitly enumerated domain instead of an interval bound.Note that this object overloads
==for creating a constraint, not for equality comparison.Examples#
>>> x = DecisionVariable.integer(1) >>> x == 1 # Returns Constraint, not bool Constraint(...)
For object equality comparison, use the
equals_to()method or compare IDs:>>> y = DecisionVariable.integer(2) >>> x.id == y.id False
- __add__(rhs: ScalarLike | LinearLike | Parameter) Linear#
- __add__(rhs: Quadratic) Quadratic
- __add__(rhs: Polynomial) Polynomial
- __add__(rhs: Function) Function
- __copy__() DecisionVariable#
-
__eq__(other: builtins.int | builtins.float |
numpy.integer|numpy.floating| DecisionVariable | AttachedDecisionVariable | Parameter | Linear | Quadratic | Polynomial | Function) Constraint# Create an equality constraint: self == other → Constraint with EqualToZero
-
__ge__(other: builtins.int | builtins.float |
numpy.integer|numpy.floating| DecisionVariable | AttachedDecisionVariable | Parameter | Linear | Quadratic | Polynomial | Function) Constraint# Create a greater-than-or-equal constraint: self >= other → Constraint
-
__le__(other: builtins.int | builtins.float |
numpy.integer|numpy.floating| DecisionVariable | AttachedDecisionVariable | Parameter | Linear | Quadratic | Polynomial | Function) Constraint# Create a less-than-or-equal constraint: self <= other → Constraint
- __mul__(rhs: ScalarLike) Linear#
- __mul__(rhs: LinearLike | Parameter) Quadratic
- __mul__(rhs: Quadratic | Polynomial) Polynomial
- __mul__(rhs: Function) Function
- __neg__() Linear#
Negation operator: -x → Linear(-1 * x)
- __new__(id: int, kind: Kind, bound: Bound, name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
- __radd__(lhs: ScalarLike | LinearLike | Parameter) Linear#
- __radd__(lhs: Quadratic) Quadratic
- __radd__(lhs: Polynomial) Polynomial
- __radd__(lhs: Function) Function
- __repr__() str#
- __rmul__(lhs: ScalarLike) Linear#
- __rmul__(lhs: LinearLike | Parameter) Quadratic
- __rmul__(lhs: Quadratic | Polynomial) Polynomial
- __rmul__(lhs: Function) Function
- __rsub__(lhs: ScalarLike | LinearLike | Parameter) Linear#
- __rsub__(lhs: Quadratic) Quadratic
- __rsub__(lhs: Polynomial) Polynomial
- __rsub__(lhs: Function) Function
- __sub__(rhs: ScalarLike | LinearLike | Parameter) Linear#
- __sub__(rhs: Quadratic) Quadratic
- __sub__(rhs: Polynomial) Polynomial
- __sub__(rhs: Function) Function
- binary(id: int, name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
- continuous(id: int, lower: float = float('-inf'), upper: float = float('inf'), name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
- equals_to(other: DecisionVariable) bool#
Compare two DecisionVariable objects for equality.
This is different from
__eq__which creates a Constraint. Use this method when you want to check if two variables represent the same variable.
- finite_domain(id: int, values: Sequence[float], name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
Create a decision variable whose feasible values are explicitly enumerated.
>>> from ommx import DecisionVariable, Instance, Kind >>> dose = DecisionVariable.finite_domain(0, [1.0, 0.1, 0.5, 0.3], name="dose") >>> assert dose.kind == Kind.FiniteDomain >>> dose.values [0.1, 0.3, 0.5, 1.0] >>> assert (dose.bound.lower, dose.bound.upper) == (0.1, 1.0)
valuesis the exact feasible set. It must be non-empty and contain unique, finite numbers; OMMX stores the values in ascending order. Values between the minimum and maximum that are not listed remain infeasible. This domain does not approximate a continuous interval.The
boundproperty and theloweranduppercolumns indecision_variables_df()are derived from the minimum and maximum ofvalues. They do not independently define the domain. The DataFrame’svaluescolumn contains the exact set for finite-domain variables and a missing value for interval-domain kinds.For incremental construction with automatically assigned IDs, use
new_finite_domain():>>> instance = Instance.minimize() >>> dose = instance.new_finite_domain([0.1, 0.3, 0.5, 1.0], "dose") >>> instance.objective = dose >>> assert instance.evaluate({dose.id: 0.3}).feasible >>> assert not instance.evaluate({dose.id: 0.4}).feasible
- integer(id: int, lower: float = float('-inf'), upper: float = float('inf'), name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
- semi_continuous(id: int, lower: float = float('-inf'), upper: float = float('inf'), name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
- semi_integer(id: int, lower: float = float('-inf'), upper: float = float('inf'), name: Optional[str] = None, subscripts: Sequence[int] = [], parameters: Mapping[str, str] = {}, description: Optional[str] = None) DecisionVariable#
- BINARY: Kind#
Compatibility alias for
Kind.Binary.
- CONTINUOUS: Kind#
Compatibility alias for
Kind.Continuous.
- FINITE_DOMAIN: Kind#
Compatibility alias for
Kind.FiniteDomain.
- INTEGER: Kind#
Compatibility alias for
Kind.Integer.
- SEMI_CONTINUOUS: Kind#
Compatibility alias for
Kind.SemiContinuous.
- SEMI_INTEGER: Kind#
Compatibility alias for
Kind.SemiInteger.
- property bound: Bound#
Read-only property.
- property description: str#
Read-only property.
- property id: int#
Read-only property.
- property kind: Kind#
Read-only property.
- property name: str#
Read-only property.
- property parameters: dict[str, str]#
Read-only property.
- property subscripts: list[int]#
Read-only property.