decogo.problem.inner_master_problem

This module implements inner master problem.

Classes

ExtendedInnerMasterProblem(block_model, ...)

This class defines extended inner master problem which is solved over the convex hull of inner points regarding hyper-blocks (overlapping convex hull relaxation).

InnerMasterProblem(block_model, approx_data)

This class defines inner master problem which is solved over the convex hull of inner points.

MiniInnerMasterProblem(block_model, approx_data)

mini inner master problem for fast minlp (hyper-block) sub-problem solving.

class decogo.problem.inner_master_problem.InnerMasterProblem(block_model, approx_data)[source]

This class defines inner master problem which is solved over the convex hull of inner points.

\[\begin{equation} \begin{split} \min \ & c^T x(z) + \sum\limits_{i \in [m]} \gamma_i s_i, \newline &Ax(z) \leq b + s, \newline &\sum_{j \in [S_k]} z_{kj}=1, \newline & x_k(z_k) = \sum_{j \in [S_k]} z_{kj} y_{kj}, \newline &z_{kj} \geq 0, j \in [S_k], k \in K, & s \geq 0, \gamma > 0 \end{split} \end{equation}\]

where \(S_k \subset \mathbb{R}^{n_k}\) is a set of inner points.

The problem is constructed in the transformed space in the following way

\[\begin{equation} \begin{split} \min &\sum\limits_{k \in K} w_{k0}(z_k) + \sum\limits_{i \in [m]} \gamma_i s_i, \newline & \sum\limits_{k \in K} w_{k}(z_k) \leq b + s, \newline &\sum_{j \in [R_k]} z_{kj}=1, z_{kj} \geq 0, \newline &w_k(z_k)=\sum_{j \in [R_k]} z_{kj}r_{kj}, \newline &j \in [R_k], k \in K, s \geq 0,\gamma > 0 \end{split} \end{equation}\]

where \(R_k \subset \mathbb{R}^{m + 1}\) is a set of columns.

Parameters
  • block_model (BlockModel) – Block model

  • approx_data (ApproxData) – Class that stores inner points and columns

__init__(block_model, approx_data)[source]

Constructor method

add_column(block_id)[source]

Adds a new column for block by the following procedure:

  1. Add a new variable \(z\)

  2. Update the objective with a new column (at zero index)

  3. Update the global constraints with the new column

Parameters

block_id (int) – Block identifier

set_slack_weights(slack_weights)[source]

Sets slack weights in the objective function

Parameters

slack_weights (ndarray) – Values for slack weights

compute_and_set_default_slack_weights()[source]

Computes slack weights by defaults method, i.e. it is computed based on the zero resource of all columns in the following way \(\gamma_i = 1.1\max\limits_{w_j \in R_k, k \in K} w_{j0}, i \in [m]\)

solve(solver_name)[source]

Solves the problem by calling an external solver

Parameters

solver_name (str) – External solver name

Returns

Index of active cells blockwise, weights of the columns \(z\), solution in original space, solution in image space, slack values, dual solution and objective value

Return type

tuple

Note

The comments where the dual values are extracted

class decogo.problem.inner_master_problem.MiniInnerMasterProblem(block_model, approx_data)[source]

mini inner master problem for fast minlp (hyper-block) sub-problem solving. Multiple instances can be constructed for parallel computing of sub-problems.

__init__(block_model, approx_data)[source]

Constructor method

set_objective(dir_im_space)[source]
deactivate_global_constraints(indices)[source]
activate_global_constraints(indices)[source]
deactivate_blocks(kt)[source]
activate_blocks(kt)[source]
class decogo.problem.inner_master_problem.ExtendedInnerMasterProblem(block_model, approx_data)[source]

This class defines extended inner master problem which is solved over the convex hull of inner points regarding hyper-blocks (overlapping convex hull relaxation).

\[\begin{equation} \begin{split} \min \ & c^T x(z) + \sum\limits_{i \in [m]} \gamma_i s_i, \newline &Ax(z) \leq b + s, \newline &\sum_{j \in [S_t]} z_{tj}=1, \newline & x_t(z_t) = \sum_{j \in [S_t]} z_{tj} y_{tj}, \newline &z_{tj} \geq 0, j \in [S_t], t \in T, & s \geq 0, \gamma > 0 \end{split} \end{equation}\]

where \(S_t \subset \mathbb{R}^{n_t}\) is a set of inner points; \(T\) is the set of hyper-blocks.

The problem is constructed in the transformed space in the following way

\[\begin{equation} \begin{split} \min &\sum\limits_{k \in K} w_{k0}(z_k) + \sum\limits_{i \in [m]} \gamma_i s_i, \newline & \sum\limits_{t \in T} w_{t}(z_t) \leq b + s, \newline &\sum_{j \in [R_t]} z_{tj}=1, z_{tj} \geq 0, \newline &w_t(t_k)=\sum_{j \in [R_t]} z_{tj}r_{tj}, \newline &j \in [R_t], t \in T, s \geq 0,\gamma > 0 \end{split} \end{equation}\]

where \(R_t \subset \mathbb{R}^{m + 1}\) is a set of columns. \(T\) is the set of hyper-blocks, and \(K\) is a subset of hyper-blocks that is non-overlapping.

Parameters
  • block_model (BlockModel) – Block model

  • approx_data (ApproxData) – Class that stores inner points and columns

__init__(block_model, approx_data)[source]

Constructor method

add_column(block_id)[source]

Adds a new column for block by the following procedure:

  1. Add a new variable \(z\)

  2. Update the objective with a new column (at zero index)

  3. Update the global constraints with the new column

Parameters

block_id (int) – Block identifier

set_slack_weights(slack_weights)[source]

Sets slack weights in the objective function

Parameters

slack_weights (ndarray) – Values for slack weights

compute_and_set_default_slack_weights()[source]

Computes slack weights by defaults method, i.e. it is computed based on the zero resource of all columns in the following way \(\gamma_i = 1.1\max\limits_{w_j \in R_k, k \in K} w_{j0}, i \in [m]\)

solve(solver_name)[source]

Solves the problem by calling an external solver

Parameters

solver_name (str) – External solver name

Returns

Index of active cells blockwise, weights of the columns \(z\), solution in original space, solution in image space, slack values, dual solution and objective value

Return type

tuple

Note

The comments where the dual values are extracted

check_hyper_block(block_id)[source]