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.