qaekwy.model.constraint
This package contains the classes for representing constraints in an optimization model.
AbstractConstraint
This is the base class for all constraints.
to_json()
: Serializes the constraint to a JSON-compatible dictionary.
Relational & Logical
RelationalExpression
: Represents a constraint defined by a relational expression (e.g.,x + y > 5
).- Note: Expression must be made of variables of the same type (all integer or all float). You must specify the type by setting the
domain: VariableType = VariableType.INTEGER
ordomain: VariableType = VariableType.FLOAT
parameter.
- Note: Expression must be made of variables of the same type (all integer or all float). You must specify the type by setting the
ConstraintIfThenElse
: Represents a conditional constraint.- Note: Expression must be made of variables of the same type (all integer or all float). You must specify the type by setting the
domain: VariableType = VariableType.INTEGER
ordomain: VariableType = VariableType.FLOAT
parameter.
- Note: Expression must be made of variables of the same type (all integer or all float). You must specify the type by setting the
ConstraintAbs
The ConstraintAbs
class represents an absolute value constraint between two variables.
Class Details
-
ConstraintAbs(var_1: Variable, var_2: Variable, constraint_name=None): Represents an absolute value constraint between two variables.
Parameters:
var_1
(Variable): The first variable in the constraint.var_2
(Variable): The second variable in the constraint.constraint_name
(str, optional): A name for the constraint.
Example:
abs_constraint = ConstraintAbs(var_x, var_y, "abs_constraint")
ConstraintASin
The ConstraintASin
class represents an arcsine constraint between two variables.
Class Details
-
ConstraintASin(var_1: Variable, var_2: Variable, constraint_name=None): Represents an arcsine constraint between two variables.
Parameters:
var_1
(Variable): The first variable in the constraint.var_2
(Variable): The second variable in the constraint.constraint_name
(str, optional): A name for the constraint.
Example:
asin_constraint = ConstraintASin(var_angle, var_value, "asin_constraint")
ConstraintATan
The ConstraintATan
class represents an arctangent constraint between two variables.
Class Details
-
ConstraintATan(var_1: Variable, var_2: Variable, constraint_name=None): Represents an arctangent constraint between two variables.
Parameters:
var_1
(Variable): The first variable in the constraint.var_2
(Variable): The second variable in the constraint.constraint_name
(str, optional): A name for the constraint.
Example:
atan_constraint = ConstraintATan(var_angle, var_value, "atan_constraint")
ConstraintCos
The ConstraintCos
class represents a cosine constraint between two variables.
Class Details
-
ConstraintCos(var_1: Variable, var_2: Variable, constraint_name=None): Represents a cosine constraint between two variables.
Parameters:
var_1
(Variable): The first variable in the constraint.var_2
(Variable): The second variable in the constraint.constraint_name
(str, optional): A name for the constraint.
Example:
cos_constraint = ConstraintCos(var_angle, var_value, "cos_constraint")
ConstraintDistinctArray
The ConstraintDistinctArray
class represents a constraint to ensure distinctness within an array.
Class Details
-
ConstraintDistinctArray(var_1: ArrayVariable, constraint_name=None): Represents a constraint to ensure distinctness within an array.
Parameters:
var_1
(ArrayVariable): The array variable to enforce distinctness for.constraint_name
(str, optional): A name for the constraint.
Example:
distinct_array_constraint = ConstraintDistinctArray(array_var, "distinct_array_constraint")
ConstraintDistinctRow
The ConstraintDistinctRow
class represents a constraint to ensure distinctness within a specific row of an array.
Class Details
-
ConstraintDistinctRow(var_1: ArrayVariable, size: int, idx: int, constraint_name=None): Represents a constraint to ensure distinctness within a specific row of an array.
Parameters:
var_1
(ArrayVariable): The array variable to enforce distinctness within a row.size
(int): The width of the matrice to consider.idx
(int): The index of the row to enforce distinctness for.constraint_name
(str, optional): A name for the constraint.
Example:
distinct_row_constraint = ConstraintDistinctRow(array_var, size=3, idx=1, constraint_name="distinct_row_constraint")
ConstraintDistinctCol
The ConstraintDistinctCol
class represents a constraint to ensure distinctness within a specific column of an array.
Class Details
-
ConstraintDistinctCol(var_1: ArrayVariable, size: int, idx: int, constraint_name=None): Represents a constraint to ensure distinctness within a specific column of an array.
Parameters:
var_1
(ArrayVariable): The array variable to enforce distinctness within a column.size
(int): The width of the matrice to consider.idx
(int): The index of the column to enforce distinctness for.constraint_name
(str, optional): A name for the constraint.
Example:
distinct_col_constraint = ConstraintDistinctCol(array_var, size=3, idx=0, constraint_name="distinct_col_constraint")
ConstraintDistinctSlice
The ConstraintDistinctSlice
class represents a constraint to ensure distinctness within a specific slice of an array.
Class Details
-
ConstraintDistinctSlice(var_1: ArrayVariable, size: int, offset_start_x: int, offset_start_y: int, offset_end_x: int, offset_end_y: int, constraint_name=None): Represents a constraint to ensure distinctness within a specific slice of an array.
Parameters:
var_1
(ArrayVariable): The array variable to enforce distinctness within a slice.size
(int): The width of the matrice to consider.offset_start_x
(int): The starting offset along the x-axis for the slice.offset_start_y
(int): The starting offset along the y-axis for the slice.offset_end_x
(int): The ending offset along the x-axis for the slice.offset_end_y
(int): The ending offset along the y-axis for the slice.constraint_name
(str, optional): A name for the constraint.
Example:
distinct_slice_constraint = ConstraintDistinctSlice(array_var, size=6, offset_start_x=1, offset_start_y=1, offset_end_x=3, offset_end_y=2, constraint_name="distinct_slice_constraint")
ConstraintDivide
The ConstraintDivide
class represents a constraint to enforce a division relationship between three variables.
Class Details
-
ConstraintDivide(var_1: Variable, var_2: Variable, var_3: Variable, constraint_name=None): Represents a constraint to enforce a division relationship between three variables.
Parameters:
var_1
(Variable): The numerator variable in the division.var_2
(Variable): The denominator variable in the division.var_3
(Variable): The result variable of the division.constraint_name
(str, optional): A name for the constraint.
Example:
divide_constraint = ConstraintDivide(numerator, denominator, result, "divide_constraint")
ConstraintElement
The ConstraintElement
class represents a constraint to enforce an element-wise relationship between two variables
based on a mapping array like following:
map_array[var_1] == var_2
Class Details
-
ConstraintElement(map_array: ArrayVariable, var_1: Variable, var_2: Variable, constraint_name=None): Represents a constraint to enforce an element-wise relationship between two variables.
Parameters:
map_array
(ArrayVariable): The mapping array that defines the element-wise relationship.var_1
(Variable): The first variable in the relationship.var_2
(Variable): The second variable in the relationship.constraint_name
(str, optional): A name for the constraint.
Example:
element_constraint = ConstraintElement(mapping_array, variable_1, variable_2, "element_constraint")
ConstraintExponential
The ConstraintExponential
class represents a constraint to enforce an exponential relationship between two variables.
Class Details
-
ConstraintExponential(var_1: Variable, var_2: Variable, constraint_name=None): Represents a constraint to enforce an exponential relationship between two variables.
Parameters:
var_1
(Variable): The base variable in the exponential relationship.var_2
(Variable): The result variable of the exponential relationship.constraint_name
(str, optional): A name for the constraint.
Example:
exponential_constraint = ConstraintExponential(base_variable, result_variable, "exponential_constraint")
ConstraintIfThenElse
The ConstraintIfThenElse
class represents a conditional constraint that enforces an if-then-else relationship between expressions in your model.
Class Details
-
ConstraintIfThenElse(condition: Expression, then_constraint: Expression, else_constraint: Optional[Expression] = None, domain: VariableType = VariableType.INTEGER, constraint_name: Optional[str] = None)
Models a high-level conditional logic:
IFcondition
THENthen_constraint
ELSEelse_constraint
.Parameters:
condition
(Expression
): The condition to evaluate.then_constraint
(Expression
): The constraint enforced if the condition is true.else_constraint
(Expression
, optional): The constraint enforced if the condition is false. Defaults toNone
.domain
(VariableType
, optional): The variable type domain for the constraint. Defaults toVariableType.INTEGER
.constraint_name
(str
, optional): A name for the constraint.
Example:
constraint = ConstraintIfThenElse( condition=(x > y) & (y < 10), then_constraint=(z == x + 1), else_constraint=(z <= x - 1), domain=VariableType.INTEGER, # Because in this case, if x, y and z are integer variables constraint_name="if_then_else_constraint" )
Notes
- Expression must be made of variables of the same type (all integer or all float). You must specify the type by setting the
domain: VariableType = VariableType.INTEGER
ordomain: VariableType = VariableType.FLOAT
parameter. - If
else_constraint
is not provided, the constraint models a simple if-then relationship. - The
domain
parameter determines the type of variables involved (e.g., BOOLEAN, FLOAT, INTEGER).
ConstraintLogarithme
The ConstraintLogarithme
class represents a constraint to enforce a logarithmic relationship between two variables.
Class Details
-
ConstraintLogarithme(var_1: Variable, var_2: Variable, constraint_name=None): Represents a constraint to enforce a logarithmic relationship between two variables.
Parameters:
var_1
(Variable): The variable for which the logarithm is enforced.var_2
(Variable): The result variable of the logarithmic relationship.constraint_name
(str, optional): A name for the constraint.
Example:
logarithmic_constraint = ConstraintLogarithme(variable_to_log, result_variable, "logarithmic_constraint")
ConstraintMaximum
The ConstraintMaximum
class represents a constraint to enforce max{var_1, var_2} == var_3
.
Class Details
-
ConstraintMaximum(var_1: Variable, var_2: Variable, var_3: Variable, constraint_name=None): Represents a constraint to enforce a maximum value relationship between three variables.
Parameters:
var_1
(Variable): The first variable in the maximum value relationship.var_2
(Variable): The second variable in the maximum value relationship.var_3
(Variable): The third variable in the maximum value relationship.constraint_name
(str, optional): A name for the constraint.
Example:
max_constraint = ConstraintMaximum(variable_1, variable_2, variable_3, "max_constraint")
ConstraintMember
The ConstraintMember
class represents a constraint to enforce a membership relationship between an array variable and a variable.
Class Details
-
ConstraintMember(var_1: ArrayVariable, var_2: Variable, constraint_name=None): Represents a constraint to enforce a membership relationship between an array variable and a variable.
Parameters:
var_1
(ArrayVariable): The array variable in the membership relationship.var_2
(Variable): The variable to be checked for membership.constraint_name
(str, optional): A name for the constraint.
Example:
member_constraint = ConstraintMember(array_variable, variable_to_check, "member_constraint")
ConstraintMinimum
The ConstraintMinimum
class represents a constraint to enforce min{var_1, var_2} == var_3
.
Class Details
-
ConstraintMinimum(var_1: Variable, var_2: Variable, var_3: Variable, constraint_name=None): Represents a constraint to enforce a minimum value relationship between three variables.
Parameters:
var_1
(Variable): The first variable in the minimum value relationship.var_2
(Variable): The second variable in the minimum value relationship.var_3
(Variable): The third variable in the minimum value relationship.constraint_name
(str, optional): A name for the constraint.
Example:
min_constraint = ConstraintMinimum(variable_1, variable_2, variable_3, "min_constraint")
ConstraintModulo
The ConstraintModulo
class represents a constraint to enforce a modulo relationship between three variables.
Class Details
-
ConstraintModulo(var_1: Variable, var_2: Variable, var_3: Variable, constraint_name=None): Represents a constraint to enforce a modulo relationship between three variables.
Parameters:
var_1
(Variable): The dividend variable in the modulo relationship.var_2
(Variable): The divisor variable in the modulo relationship.var_3
(Variable): The result variable of the modulo relationship.constraint_name
(str, optional): A name for the constraint.
Example:
modulo_constraint = ConstraintModulo(dividend_variable, divisor_variable, result_variable, "modulo_constraint")
ConstraintMultiply
The ConstraintMultiply
class represents a constraint to enforce a multiplication relationship between three variables.
Class Details
-
ConstraintMultiply(var_1: Variable, var_2: Variable, var_3: Variable, constraint_name=None): Represents a constraint to enforce a multiplication relationship between three variables.
Parameters:
var_1
(Variable): The first variable in the multiplication relationship.var_2
(Variable): The second variable in the multiplication relationship.var_3
(Variable): The result variable of the multiplication relationship.constraint_name
(str, optional): A name for the constraint.
Example:
multiply_constraint = ConstraintMultiply(variable_1, variable_2, result_variable, "multiply_constraint")
ConstraintNRoot
The ConstraintNRoot
class represents a constraint to enforce an n-th root relationship between three variables.
Class Details
-
ConstraintNRoot(var_1: Variable, var_2: int, var_3: Variable, constraint_name=None): Represents a constraint to enforce an n-th root relationship between three variables.
Parameters:
var_1
(Variable): The variable for which the n-th root is enforced.var_2
(int): The value of n for the n-th root.var_3
(Variable): The result variable of the n-th root relationship.constraint_name
(str, optional): A name for the constraint.
Example:
nroot_constraint = ConstraintNRoot(variable_to_root, n_value, result_variable, "nroot_constraint")
ConstraintPower
The ConstraintPower
class represents a constraint to enforce a power relationship between three variables.
Class Details
-
ConstraintPower(var_1: Variable, var_2: int, var_3: Variable, constraint_name=None): Represents a constraint to enforce a power relationship between three variables.
Parameters:
var_1
(Variable): The base variable in the power relationship.var_2
(int): The exponent variable in the power relationship.var_3
(Variable): The result variable of the power relationship.constraint_name
(str, optional): A name for the constraint.
Example:
power_constraint = ConstraintPower(base_variable, exponent_value, result_variable, "power_constraint")
RelationalExpression
The RelationalExpression
class represents a constraint using a relational expression between variables and values.
Class Details
-
RelationalExpression(expr: Expression, constraint_name=None): Represents a constraint using a relational expression between variables or values.
Parameters:
expr
(Expression): The relational expression to be enforced.constraint_name
(str, optional): A name for the constraint.
Example:
expression = Expression(var_1 + var_2 >= var_3 + 1) relational_constraint = RelationalExpression(expression, "relational_constraint")
- Note: Expression must be made of variables of the same type (all integer or all float). You must specify the type by setting the
domain: VariableType = VariableType.INTEGER
ordomain: VariableType = VariableType.FLOAT
parameter.
ConstraintSin
The ConstraintSin
class represents a constraint to enforce a sine relationship between two variables.
Class Details
-
ConstraintSin(var_1: Variable, var_2: Variable, constraint_name=None): Represents a constraint to enforce a sine relationship between two variables.
Parameters:
var_1
(Variable): The variable for which the sine relationship is enforced.var_2
(Variable): The result variable of the sine relationship.constraint_name
(str, optional): A name for the constraint.
Example:
sine_constraint = ConstraintSin(variable_to_sine, result_variable, "sine_constraint")
ConstraintSorted and ConstraintReverseSorted
The ConstraintSorted
and ConstraintReverseSorted
classes represent constraints to enforce sorted and reverse-sorted relationships among elements of an array variable.
Class Details
-
ConstraintSorted(var_1: ArrayVariable, constraint_name=None): Represents a constraint to enforce a sorted relationship among elements of an array variable.
Parameters:
var_1
(ArrayVariable): The array variable for which the sorted relationship is enforced.constraint_name
(str, optional): A name for the constraint.
Example:
array_to_sort = IntegerVariableArray("array_to_sort", length=50, domain_low=0, domain_high=100) sorted_constraint = ConstraintSorted(array_to_sort, "sorted_constraint") constraint_json = sorted_constraint.to_json()
-
ConstraintReverseSorted(var_1: ArrayVariable, constraint_name=None): Represents a constraint to enforce a reverse-sorted relationship among elements of an array variable.
Parameters:
var_1
(ArrayVariable): The array variable for which the reverse-sorted relationship is enforced.constraint_name
(str, optional): A name for the constraint.
Example:
array_to_reverse_sort = IntegerVariableArray("array_to_sort", length=50, domain_low=0, domain_high=100) reverse_sorted_constraint = ConstraintReverseSorted(array_to_reverse_sort, "reverse_sorted_constraint")
ConstraintTan
The ConstraintTan
class represents a constraint to enforce a tangent relationship between two variables.
Class Details
-
ConstraintTan(var_1: Variable, var_2: Variable, constraint_name=None): Represents a constraint to enforce a tangent relationship between two variables.
Parameters:
var_1
(Variable): The variable for which the tangent relationship is enforced.var_2
(Variable): The result variable of the tangent relationship.constraint_name
(str, optional): A name for the constraint.
Example:
tangent_constraint = ConstraintTan(variable_to_tangent, result_variable, "tangent_constraint")