qaekwy.model.variable
This package provides the foundation for creating and managing variables within your optimization models. Variables are the core building blocks, representing the unknown values that Qaekwy will solve for.
IntegerVariable Module
This module defines classes related to integer variables.
Classes:
- IntegerVariable: Represents an integer variable.
- IntegerExpressionVariable: Represents an integer variable defined by an expression.
- IntegerVariableArray: Represents an array of integer variables.
Module Structure:
- IntegerVariable
- IntegerExpressionVariable
- IntegerVariableArray
IntegerVariable
Represents a single integer variable.
Args:
var_name
(str): The name of the variable.domain_low
(int, optional): The lower bound of the variable’s domain.domain_high
(int, optional): The upper bound of the variable’s domain.specific_domain
(list, optional): A specific domain for the variable.branch_val
(BranchVal, optional): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
x = IntegerVariable(
var_name="x",
domain_low=1,
domain_high=10,
branch_val=BranchIntegerVal.VAL_RND,
branch_order=1
)
IntegerExpressionVariable
Represents an integer variable defined by an expression.
Args:
var_name
(str): The name of the variable.expression
: The expression defining the variable.branch_val
(BranchVal, optional): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
x = IntegerVariable(
var_name="x",
domain_low=1,
domain_high=10,
branch_val=BranchIntegerVal.VAL_RND,
branch_order=1
)
y = IntegerExpressionVariable(
var_name="y",
expression=Expression(3 * x + 2),
branch_val=BranchIntegerVal.VAL_MIN,
branch_order=2
)
IntegerVariableArray
Represents an array of integer variables.
Args:
var_name
(str): The name of the variable.length
(int): The length of the array.domain_low
(int, optional): The lower bound of the variables’ domain.domain_high
(int, optional): The upper bound of the variables’ domain.specific_domain
(list, optional): A specific domain for the variables.branch_var
(BranchVar, optional): The brancher variable strategy.branch_val
(BranchVal, optional): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
arr = IntegerVariableArray(
var_name="arr",
length=5,
domain_low=0,
domain_high=100,
branch_var=BranchIntegerVar.VAR_MAX,
branch_val=BranchIntegerVal.VAL_MAX,
branch_order=1
)
FloatVariable Module
This module defines classes related to float variables.
Classes:
- FloatVariable: Represents a float variable.
- FloatExpressionVariable: Represents a float variable defined by an expression.
- FloatVariableArray: Represents an array of float variables.
Module Structure:
- FloatVariable
- FloatExpressionVariable
- FloatVariableArray
FloatVariable
Represents a single float variable.
Args:
var_name
(str): The name of the variable.domain_low
(float, optional): The lower bound of the variable’s domain.domain_high
(float, optional): The upper bound of the variable’s domain.specific_domain
(list, optional): A specific domain for the variable.branch_val
(BranchVal, optional): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
x = FloatVariable(
var_name="x",
domain_low=0.0,
domain_high=1.0,
branch_val=BranchFloatVal.VAL_RND,
branch_order=1
)
FloatExpressionVariable
Represents a float variable defined by an expression.
Args:
var_name
(str): The name of the variable.expression
: The expression defining the variable.branch_val
(BranchVal, optional): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
x = FloatVariable(
var_name="x",
domain_low=0.0,
domain_high=1.0,
branch_val=BranchFloatVal.VAL_RND,
branch_order=1
)
y = FloatExpressionVariable(
var_name="y",
expression=Expression(0.5 * x + 0.2),
branch_val=BranchFloatVal.VAL_MAX,
branch_order=2
)
FloatVariableArray
Represents an array of float variables.
Args:
var_name
(str): The name of the variable.length
(int): The length of the array.domain_low
(float, optional): The lower bound of the variables’ domain.domain_high
(float, optional): The upper bound of the variables’ domain.branch_var
(BranchFloatVar, optional): The brancher variable strategy.branch_val
(BranchVal, optional): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
arr = FloatVariableArray(
var_name="arr",
length=5,
domain_low=0.0,
domain_high=10.0,
branch_var=BranchFloatVar.VAR_RND,
branch_val=BranchFloatVar.VAR_MIN,
branch_order=1
)
BooleanVariable Module
This module defines classes related to boolean variables.
Classes:
- BooleanVariable: Represents a boolean variable.
- BooleanExpressionVariable: Represents a boolean variable defined by an expression.
- BooleanVariableArray: Represents an array of boolean variables.
Module Structure:
- BooleanVariable
- BooleanExpressionVariable
- BooleanVariableArray
BooleanVariable
Represents a single boolean variable.
Args:
var_name
(str): The name of the variable.branch_val
(BranchVal): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
my_bool_var = BooleanVariable(var_name="b1", branch_val=BranchVal.VAL_MIN, branch_order=1)
BooleanExpressionVariable
Represents a boolean variable defined by an expression.
Args:
var_name
(str): The name of the variable.expression
: The expression defining the variable.branch_val
(BranchVal): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
b2 = BooleanExpressionVariable(
var_name="b2",
expression=Expression(x[3] > 5),
branch_val=BranchVal.VAL_MAX,
branch_order=2
)
BooleanVariableArray
Represents an array of boolean variables.
Args:
var_name
(str): The name of the variable.length
(int): The length of the array.branch_var
(BranchVar): The brancher variable strategy.branch_val
(BranchVal): The brancher value strategy.branch_order
(int, optional): The brancher order strategy.
Example:
bool_arr = BooleanVariableArray(
var_name"bool_arr",
length=3,
branch_var=BranchVar.VAR_MIN,
branch_val=BranchVal.VAL_RND,
branch_order=1
)
Branch Module: Branching Strategies
The “Branch” module in Qaekwy defines a variety of branching strategies that guide the branching decisions made during the search process of an optimization or constraint problem. These strategies play a crucial role in efficiently exploring the solution space and improving convergence to an optimal solution. Let’s delve into the different branching strategies available:
Branching order
The branching order determines the sequence in which branchers are applied during the search process. Branchers
are applied in ascending order based on their branch_order
value. A lower branch_order
value indicates a higher
priority, meaning that branchers with lower values are applied before those with higher values. If multiple branchers share the same
branch_order
value, they are applied in the order they were added to the model.
BranchVal: Brancher Value Strategies
The BranchVal class represents strategies for selecting brancher values during the search process. These strategies determine how values for variables are chosen when branching decisions are made.
The following strategies are available:
VAL_RND
: Select a value randomly.VAL_MIN
: Select the minimum value.VAL_MED
: Select the median value.VAL_MAX
: Select the maximum value.VALUES_MIN
: Select the value with the smallest domain.VALUES_MAX
: Select the value with the largest domain.VAL_RANGE_MIN
: Select the value with the smallest range.VAL_RANGE_MAX
: Select the value with the largest range.VAL_SPLIT_MIN
: Select a value by splitting the domain into two halves and choosing from the smaller half.VAL_SPLIT_MAX
: Select a value by splitting the domain into two halves and choosing from the larger half.
BranchVar: Brancher Variable Strategies
The BranchVar class represents strategies for selecting brancher variables during the search process. These strategies determine which variables are chosen for branching decisions.
The available strategies are as follows:
VAR_NONE
: No variable is selected (termination strategy).VAR_RND
: Select a variable randomly.VAR_SIZE_MIN
: Select the variable with the smallest domain.VAR_SIZE_MAX
: Select the variable with the largest domain.VAR_REGRET_MIN_MIN
: Select the variable with the smallest minimum regret.VAR_REGRET_MIN_MAX
: Select the variable with the largest minimum regret.VAR_DEGREE_MIN
: Select the variable with the minimum degree.VAR_DEGREE_MAX
: Select the variable with the maximum degree.VAR_MIN_MIN
: Select the variable with the smallest minimum value.VAR_MIN_MAX
: Select the variable with the largest minimum value.VAR_MAX_MIN
: Select the variable with the smallest maximum value.VAR_MAX_MAX
: Select the variable with the largest maximum value.VAR_DEGREE_SIZE_MIN
: Select the variable with the smallest degree and smallest domain.VAR_DEGREE_SIZE_MAX
: Select the variable with the largest degree and largest domain.
BranchIntegerVal: Integer Value Strategies
The BranchIntegerVal
class extends the BranchVal
class and is specifically tailored to integer variables.
It provides strategies for selecting values for integer variables during the branching process.
BranchFloatVal: Float Value Strategies
The BranchFloatVal
class extends the BranchVal
class and is designed for float variables. It offers
strategies for selecting values for float variables during branching.
BranchBooleanVal: Boolean Value Strategies
The BranchBooleanVal
class extends the BranchVal
class and caters to boolean variables. It offers
strategies for selecting values for boolean variables during branching.
BranchIntegerVar: Integer Variable Strategies
The BranchIntegerVar
class extends the BranchVar
class and is specific to integer variables. It provides
strategies for selecting integer variables for branching decisions.
BranchFloatVar: Float Variable Strategies
The BranchFloatVar
class extends the BranchVar
class and is tailored for float variables. It offers
strategies for selecting float variables for branching decisions.
BranchBooleanVar: Boolean Variable Strategies
The BranchBooleanVar
class extends the BranchVar
class and is designed for boolean variables. It
provides strategies for selecting boolean variables for branching decisions.