diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..0c06ea43 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 00175fd461837906de159d1c3246eecc +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/classes/branch-and-bound/BranchAndBound.doctree b/.doctrees/api/classes/branch-and-bound/BranchAndBound.doctree new file mode 100644 index 00000000..2e0ccdf5 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/BranchAndBound.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/BranchAndBoundCallback.doctree b/.doctrees/api/classes/branch-and-bound/BranchAndBoundCallback.doctree new file mode 100644 index 00000000..40ea3157 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/BranchAndBoundCallback.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.doctree b/.doctrees/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.doctree new file mode 100644 index 00000000..9af12f4b Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/cuts/KnapsackCover.doctree b/.doctrees/api/classes/branch-and-bound/cuts/KnapsackCover.doctree new file mode 100644 index 00000000..79a5b74a Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/cuts/KnapsackCover.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/cuts/index.doctree b/.doctrees/api/classes/branch-and-bound/cuts/index.doctree new file mode 100644 index 00000000..fceb7304 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/cuts/index.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/heuristics/LocalBranching.doctree b/.doctrees/api/classes/branch-and-bound/heuristics/LocalBranching.doctree new file mode 100644 index 00000000..d6fb8bd5 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/heuristics/LocalBranching.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/heuristics/RENS.doctree b/.doctrees/api/classes/branch-and-bound/heuristics/RENS.doctree new file mode 100644 index 00000000..389e7e80 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/heuristics/RENS.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/heuristics/SimpleRounding.doctree b/.doctrees/api/classes/branch-and-bound/heuristics/SimpleRounding.doctree new file mode 100644 index 00000000..148cc269 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/heuristics/SimpleRounding.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/heuristics/index.doctree b/.doctrees/api/classes/branch-and-bound/heuristics/index.doctree new file mode 100644 index 00000000..22cbf878 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/heuristics/index.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/index.doctree b/.doctrees/api/classes/branch-and-bound/index.doctree new file mode 100644 index 00000000..773af2cd Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/index.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/node-selection/BestBound.doctree b/.doctrees/api/classes/branch-and-bound/node-selection/BestBound.doctree new file mode 100644 index 00000000..f6086d10 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/node-selection/BestBound.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/node-selection/BestEstimate.doctree b/.doctrees/api/classes/branch-and-bound/node-selection/BestEstimate.doctree new file mode 100644 index 00000000..9c292a1a Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/node-selection/BestEstimate.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/node-selection/BreadthFirst.doctree b/.doctrees/api/classes/branch-and-bound/node-selection/BreadthFirst.doctree new file mode 100644 index 00000000..61a1126f Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/node-selection/BreadthFirst.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/node-selection/DepthFirst.doctree b/.doctrees/api/classes/branch-and-bound/node-selection/DepthFirst.doctree new file mode 100644 index 00000000..28496f2c Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/node-selection/DepthFirst.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/node-selection/WorstBound.doctree b/.doctrees/api/classes/branch-and-bound/node-selection/WorstBound.doctree new file mode 100644 index 00000000..096a7c61 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/node-selection/WorstBound.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/node-selection/index.doctree b/.doctrees/api/classes/branch-and-bound/node-selection/index.doctree new file mode 100644 index 00000000..947ec856 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/node-selection/index.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.doctree new file mode 100644 index 00000000..d7ebc158 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/LeastInfeasible.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/LeastInfeasible.doctree new file mode 100644 index 00000000..e4bb8b45 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/LeastInfeasible.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/MostInfeasible.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/MostInfeasible.doctree new file mode 100644 index 00000000..3242430b Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/MostInfeasible.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/PseudoCost.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/PseudoCost.doctree new file mode 100644 index 00000000..04fd26b2 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/PseudoCost.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/StrongBranching.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/StrongBranching.doctree new file mode 100644 index 00000000..8ff1f1d7 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/StrongBranching.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/UniformlyRandom.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/UniformlyRandom.doctree new file mode 100644 index 00000000..b40d5dce Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/UniformlyRandom.doctree differ diff --git a/.doctrees/api/classes/branch-and-bound/variable-selection/index.doctree b/.doctrees/api/classes/branch-and-bound/variable-selection/index.doctree new file mode 100644 index 00000000..7e48eab5 Binary files /dev/null and b/.doctrees/api/classes/branch-and-bound/variable-selection/index.doctree differ diff --git a/.doctrees/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.doctree b/.doctrees/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.doctree new file mode 100644 index 00000000..6433df00 Binary files /dev/null and b/.doctrees/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.doctree differ diff --git a/.doctrees/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.doctree b/.doctrees/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.doctree new file mode 100644 index 00000000..1fa67514 Binary files /dev/null and b/.doctrees/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.doctree differ diff --git a/.doctrees/api/classes/column-and-constraint-generation/index.doctree b/.doctrees/api/classes/column-and-constraint-generation/index.doctree new file mode 100644 index 00000000..4d80fa90 Binary files /dev/null and b/.doctrees/api/classes/column-and-constraint-generation/index.doctree differ diff --git a/.doctrees/api/classes/column-generation/ArtificialCosts.doctree b/.doctrees/api/classes/column-generation/ArtificialCosts.doctree new file mode 100644 index 00000000..e0c22b7a Binary files /dev/null and b/.doctrees/api/classes/column-generation/ArtificialCosts.doctree differ diff --git a/.doctrees/api/classes/column-generation/DantzigWolfeDecomposition.doctree b/.doctrees/api/classes/column-generation/DantzigWolfeDecomposition.doctree new file mode 100644 index 00000000..8395c5c2 Binary files /dev/null and b/.doctrees/api/classes/column-generation/DantzigWolfeDecomposition.doctree differ diff --git a/.doctrees/api/classes/column-generation/FarkasPricing.doctree b/.doctrees/api/classes/column-generation/FarkasPricing.doctree new file mode 100644 index 00000000..49b94406 Binary files /dev/null and b/.doctrees/api/classes/column-generation/FarkasPricing.doctree differ diff --git a/.doctrees/api/classes/column-generation/IntegerMaster.doctree b/.doctrees/api/classes/column-generation/IntegerMaster.doctree new file mode 100644 index 00000000..0ec3be1a Binary files /dev/null and b/.doctrees/api/classes/column-generation/IntegerMaster.doctree differ diff --git a/.doctrees/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.doctree b/.doctrees/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.doctree new file mode 100644 index 00000000..7597f28c Binary files /dev/null and b/.doctrees/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.doctree differ diff --git a/.doctrees/api/classes/column-generation/index.doctree b/.doctrees/api/classes/column-generation/index.doctree new file mode 100644 index 00000000..617390fe Binary files /dev/null and b/.doctrees/api/classes/column-generation/index.doctree differ diff --git a/.doctrees/api/classes/column-generation/stabilization/Neame.doctree b/.doctrees/api/classes/column-generation/stabilization/Neame.doctree new file mode 100644 index 00000000..5e517c08 Binary files /dev/null and b/.doctrees/api/classes/column-generation/stabilization/Neame.doctree differ diff --git a/.doctrees/api/classes/column-generation/stabilization/Wentges.doctree b/.doctrees/api/classes/column-generation/stabilization/Wentges.doctree new file mode 100644 index 00000000..e5a22a8b Binary files /dev/null and b/.doctrees/api/classes/column-generation/stabilization/Wentges.doctree differ diff --git a/.doctrees/api/classes/column-generation/stabilization/index.doctree b/.doctrees/api/classes/column-generation/stabilization/index.doctree new file mode 100644 index 00000000..8f50c509 Binary files /dev/null and b/.doctrees/api/classes/column-generation/stabilization/index.doctree differ diff --git a/.doctrees/api/classes/common/Annotation.doctree b/.doctrees/api/classes/common/Annotation.doctree new file mode 100644 index 00000000..3703e37b Binary files /dev/null and b/.doctrees/api/classes/common/Annotation.doctree differ diff --git a/.doctrees/api/classes/common/Column.doctree b/.doctrees/api/classes/common/Column.doctree new file mode 100644 index 00000000..a05e7edc Binary files /dev/null and b/.doctrees/api/classes/common/Column.doctree differ diff --git a/.doctrees/api/classes/common/Constant.doctree b/.doctrees/api/classes/common/Constant.doctree new file mode 100644 index 00000000..776e79a6 Binary files /dev/null and b/.doctrees/api/classes/common/Constant.doctree differ diff --git a/.doctrees/api/classes/common/Ctr.doctree b/.doctrees/api/classes/common/Ctr.doctree new file mode 100644 index 00000000..1355e969 Binary files /dev/null and b/.doctrees/api/classes/common/Ctr.doctree differ diff --git a/.doctrees/api/classes/common/Env.doctree b/.doctrees/api/classes/common/Env.doctree new file mode 100644 index 00000000..1ba7a7c6 Binary files /dev/null and b/.doctrees/api/classes/common/Env.doctree differ diff --git a/.doctrees/api/classes/common/Expr.doctree b/.doctrees/api/classes/common/Expr.doctree new file mode 100644 index 00000000..518fada2 Binary files /dev/null and b/.doctrees/api/classes/common/Expr.doctree differ diff --git a/.doctrees/api/classes/common/LinExpr.doctree b/.doctrees/api/classes/common/LinExpr.doctree new file mode 100644 index 00000000..62cd1e6e Binary files /dev/null and b/.doctrees/api/classes/common/LinExpr.doctree differ diff --git a/.doctrees/api/classes/common/Model.doctree b/.doctrees/api/classes/common/Model.doctree new file mode 100644 index 00000000..4b9453db Binary files /dev/null and b/.doctrees/api/classes/common/Model.doctree differ diff --git a/.doctrees/api/classes/common/Param.doctree b/.doctrees/api/classes/common/Param.doctree new file mode 100644 index 00000000..f3c3c193 Binary files /dev/null and b/.doctrees/api/classes/common/Param.doctree differ diff --git a/.doctrees/api/classes/common/QuadExpr.doctree b/.doctrees/api/classes/common/QuadExpr.doctree new file mode 100644 index 00000000..446ff0cf Binary files /dev/null and b/.doctrees/api/classes/common/QuadExpr.doctree differ diff --git a/.doctrees/api/classes/common/Row.doctree b/.doctrees/api/classes/common/Row.doctree new file mode 100644 index 00000000..5b45506d Binary files /dev/null and b/.doctrees/api/classes/common/Row.doctree differ diff --git a/.doctrees/api/classes/common/SolutionDual.doctree b/.doctrees/api/classes/common/SolutionDual.doctree new file mode 100644 index 00000000..cb8e3ab5 Binary files /dev/null and b/.doctrees/api/classes/common/SolutionDual.doctree differ diff --git a/.doctrees/api/classes/common/SolutionPrimal.doctree b/.doctrees/api/classes/common/SolutionPrimal.doctree new file mode 100644 index 00000000..4de8674f Binary files /dev/null and b/.doctrees/api/classes/common/SolutionPrimal.doctree differ diff --git a/.doctrees/api/classes/common/TempCtr.doctree b/.doctrees/api/classes/common/TempCtr.doctree new file mode 100644 index 00000000..f87503f0 Binary files /dev/null and b/.doctrees/api/classes/common/TempCtr.doctree differ diff --git a/.doctrees/api/classes/common/TempVar.doctree b/.doctrees/api/classes/common/TempVar.doctree new file mode 100644 index 00000000..39ba37d4 Binary files /dev/null and b/.doctrees/api/classes/common/TempVar.doctree differ diff --git a/.doctrees/api/classes/common/Var.doctree b/.doctrees/api/classes/common/Var.doctree new file mode 100644 index 00000000..4ef23cc8 Binary files /dev/null and b/.doctrees/api/classes/common/Var.doctree differ diff --git a/.doctrees/api/classes/common/index.doctree b/.doctrees/api/classes/common/index.doctree new file mode 100644 index 00000000..d3ea5874 Binary files /dev/null and b/.doctrees/api/classes/common/index.doctree differ diff --git a/.doctrees/api/classes/external-bilevel/MibS.doctree b/.doctrees/api/classes/external-bilevel/MibS.doctree new file mode 100644 index 00000000..73da7aed Binary files /dev/null and b/.doctrees/api/classes/external-bilevel/MibS.doctree differ diff --git a/.doctrees/api/classes/external-bilevel/Optimizers_MibS.doctree b/.doctrees/api/classes/external-bilevel/Optimizers_MibS.doctree new file mode 100644 index 00000000..5718a963 Binary files /dev/null and b/.doctrees/api/classes/external-bilevel/Optimizers_MibS.doctree differ diff --git a/.doctrees/api/classes/external-bilevel/index.doctree b/.doctrees/api/classes/external-bilevel/index.doctree new file mode 100644 index 00000000..6e2c7b7f Binary files /dev/null and b/.doctrees/api/classes/external-bilevel/index.doctree differ diff --git a/.doctrees/api/classes/external-mip/GLPK.doctree b/.doctrees/api/classes/external-mip/GLPK.doctree new file mode 100644 index 00000000..58a21699 Binary files /dev/null and b/.doctrees/api/classes/external-mip/GLPK.doctree differ diff --git a/.doctrees/api/classes/external-mip/Gurobi.doctree b/.doctrees/api/classes/external-mip/Gurobi.doctree new file mode 100644 index 00000000..6ed723c5 Binary files /dev/null and b/.doctrees/api/classes/external-mip/Gurobi.doctree differ diff --git a/.doctrees/api/classes/external-mip/HiGHS.doctree b/.doctrees/api/classes/external-mip/HiGHS.doctree new file mode 100644 index 00000000..ca5b806b Binary files /dev/null and b/.doctrees/api/classes/external-mip/HiGHS.doctree differ diff --git a/.doctrees/api/classes/external-mip/Mosek.doctree b/.doctrees/api/classes/external-mip/Mosek.doctree new file mode 100644 index 00000000..453bd90b Binary files /dev/null and b/.doctrees/api/classes/external-mip/Mosek.doctree differ diff --git a/.doctrees/api/classes/external-mip/Optimizers_GLPK.doctree b/.doctrees/api/classes/external-mip/Optimizers_GLPK.doctree new file mode 100644 index 00000000..695aaaab Binary files /dev/null and b/.doctrees/api/classes/external-mip/Optimizers_GLPK.doctree differ diff --git a/.doctrees/api/classes/external-mip/Optimizers_Gurobi.doctree b/.doctrees/api/classes/external-mip/Optimizers_Gurobi.doctree new file mode 100644 index 00000000..f0b57bdc Binary files /dev/null and b/.doctrees/api/classes/external-mip/Optimizers_Gurobi.doctree differ diff --git a/.doctrees/api/classes/external-mip/Optimizers_HiGHS.doctree b/.doctrees/api/classes/external-mip/Optimizers_HiGHS.doctree new file mode 100644 index 00000000..ffbe079f Binary files /dev/null and b/.doctrees/api/classes/external-mip/Optimizers_HiGHS.doctree differ diff --git a/.doctrees/api/classes/external-mip/Optimizers_Mosek.doctree b/.doctrees/api/classes/external-mip/Optimizers_Mosek.doctree new file mode 100644 index 00000000..9a94a124 Binary files /dev/null and b/.doctrees/api/classes/external-mip/Optimizers_Mosek.doctree differ diff --git a/.doctrees/api/classes/external-mip/Osi/OsiCbc.doctree b/.doctrees/api/classes/external-mip/Osi/OsiCbc.doctree new file mode 100644 index 00000000..327c9b39 Binary files /dev/null and b/.doctrees/api/classes/external-mip/Osi/OsiCbc.doctree differ diff --git a/.doctrees/api/classes/external-mip/Osi/OsiClp.doctree b/.doctrees/api/classes/external-mip/Osi/OsiClp.doctree new file mode 100644 index 00000000..af5e2082 Binary files /dev/null and b/.doctrees/api/classes/external-mip/Osi/OsiClp.doctree differ diff --git a/.doctrees/api/classes/external-mip/Osi/OsiCplex.doctree b/.doctrees/api/classes/external-mip/Osi/OsiCplex.doctree new file mode 100644 index 00000000..2d0a38a9 Binary files /dev/null and b/.doctrees/api/classes/external-mip/Osi/OsiCplex.doctree differ diff --git a/.doctrees/api/classes/external-mip/Osi/OsiSymphony.doctree b/.doctrees/api/classes/external-mip/Osi/OsiSymphony.doctree new file mode 100644 index 00000000..2d4ba201 Binary files /dev/null and b/.doctrees/api/classes/external-mip/Osi/OsiSymphony.doctree differ diff --git a/.doctrees/api/classes/external-mip/Osi/index.doctree b/.doctrees/api/classes/external-mip/Osi/index.doctree new file mode 100644 index 00000000..5a89890a Binary files /dev/null and b/.doctrees/api/classes/external-mip/Osi/index.doctree differ diff --git a/.doctrees/api/classes/external-mip/index.doctree b/.doctrees/api/classes/external-mip/index.doctree new file mode 100644 index 00000000..50355e3c Binary files /dev/null and b/.doctrees/api/classes/external-mip/index.doctree differ diff --git a/.doctrees/api/classes/index.doctree b/.doctrees/api/classes/index.doctree new file mode 100644 index 00000000..e769b815 Binary files /dev/null and b/.doctrees/api/classes/index.doctree differ diff --git a/.doctrees/api/classes/universal-callbacks/Callback.doctree b/.doctrees/api/classes/universal-callbacks/Callback.doctree new file mode 100644 index 00000000..17991268 Binary files /dev/null and b/.doctrees/api/classes/universal-callbacks/Callback.doctree differ diff --git a/.doctrees/api/classes/universal-callbacks/CallbackFactory.doctree b/.doctrees/api/classes/universal-callbacks/CallbackFactory.doctree new file mode 100644 index 00000000..4db1de13 Binary files /dev/null and b/.doctrees/api/classes/universal-callbacks/CallbackFactory.doctree differ diff --git a/.doctrees/api/classes/universal-callbacks/LazyCutCallback.doctree b/.doctrees/api/classes/universal-callbacks/LazyCutCallback.doctree new file mode 100644 index 00000000..866c70ec Binary files /dev/null and b/.doctrees/api/classes/universal-callbacks/LazyCutCallback.doctree differ diff --git a/.doctrees/api/classes/universal-callbacks/UserCutCallback.doctree b/.doctrees/api/classes/universal-callbacks/UserCutCallback.doctree new file mode 100644 index 00000000..a3fa7a53 Binary files /dev/null and b/.doctrees/api/classes/universal-callbacks/UserCutCallback.doctree differ diff --git a/.doctrees/api/classes/universal-callbacks/index.doctree b/.doctrees/api/classes/universal-callbacks/index.doctree new file mode 100644 index 00000000..c2574cb1 Binary files /dev/null and b/.doctrees/api/classes/universal-callbacks/index.doctree differ diff --git a/.doctrees/api/constants/index.doctree b/.doctrees/api/constants/index.doctree new file mode 100644 index 00000000..0f6ffecb Binary files /dev/null and b/.doctrees/api/constants/index.doctree differ diff --git a/.doctrees/api/constants/tolerances.doctree b/.doctrees/api/constants/tolerances.doctree new file mode 100644 index 00000000..de8d809e Binary files /dev/null and b/.doctrees/api/constants/tolerances.doctree differ diff --git a/.doctrees/api/index.doctree b/.doctrees/api/index.doctree new file mode 100644 index 00000000..42bf6f0f Binary files /dev/null and b/.doctrees/api/index.doctree differ diff --git a/.doctrees/api/types/common/CtrType.doctree b/.doctrees/api/types/common/CtrType.doctree new file mode 100644 index 00000000..f51156ac Binary files /dev/null and b/.doctrees/api/types/common/CtrType.doctree differ diff --git a/.doctrees/api/types/common/VarType.doctree b/.doctrees/api/types/common/VarType.doctree new file mode 100644 index 00000000..c89459dc Binary files /dev/null and b/.doctrees/api/types/common/VarType.doctree differ diff --git a/.doctrees/api/types/common/index.doctree b/.doctrees/api/types/common/index.doctree new file mode 100644 index 00000000..b47b8484 Binary files /dev/null and b/.doctrees/api/types/common/index.doctree differ diff --git a/.doctrees/api/types/index.doctree b/.doctrees/api/types/index.doctree new file mode 100644 index 00000000..f4375486 Binary files /dev/null and b/.doctrees/api/types/index.doctree differ diff --git a/.doctrees/api/types/universal-callbacks/CallbackEvent.doctree b/.doctrees/api/types/universal-callbacks/CallbackEvent.doctree new file mode 100644 index 00000000..abfc69b7 Binary files /dev/null and b/.doctrees/api/types/universal-callbacks/CallbackEvent.doctree differ diff --git a/.doctrees/api/types/universal-callbacks/index.doctree b/.doctrees/api/types/universal-callbacks/index.doctree new file mode 100644 index 00000000..678a1e0f Binary files /dev/null and b/.doctrees/api/types/universal-callbacks/index.doctree differ diff --git a/.doctrees/benchmark/index.doctree b/.doctrees/benchmark/index.doctree new file mode 100644 index 00000000..c9f11496 Binary files /dev/null and b/.doctrees/benchmark/index.doctree differ diff --git a/.doctrees/developer_guide/build-the-doc.doctree b/.doctrees/developer_guide/build-the-doc.doctree new file mode 100644 index 00000000..9d00bf73 Binary files /dev/null and b/.doctrees/developer_guide/build-the-doc.doctree differ diff --git a/.doctrees/developer_guide/index.doctree b/.doctrees/developer_guide/index.doctree new file mode 100644 index 00000000..924f4609 Binary files /dev/null and b/.doctrees/developer_guide/index.doctree differ diff --git a/.doctrees/developer_guide/tests.doctree b/.doctrees/developer_guide/tests.doctree new file mode 100644 index 00000000..1e4770aa Binary files /dev/null and b/.doctrees/developer_guide/tests.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 00000000..3757a992 Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/examples/bilevel-kkt.doctree b/.doctrees/examples/bilevel-kkt.doctree new file mode 100644 index 00000000..5abfbfcc Binary files /dev/null and b/.doctrees/examples/bilevel-kkt.doctree differ diff --git a/.doctrees/examples/bilevel-mibs.doctree b/.doctrees/examples/bilevel-mibs.doctree new file mode 100644 index 00000000..b716b823 Binary files /dev/null and b/.doctrees/examples/bilevel-mibs.doctree differ diff --git a/.doctrees/examples/facility-location-problem.doctree b/.doctrees/examples/facility-location-problem.doctree new file mode 100644 index 00000000..51b2ebdb Binary files /dev/null and b/.doctrees/examples/facility-location-problem.doctree differ diff --git a/.doctrees/examples/generalized-assignment-problem-bap.doctree b/.doctrees/examples/generalized-assignment-problem-bap.doctree new file mode 100644 index 00000000..2b1f6bf9 Binary files /dev/null and b/.doctrees/examples/generalized-assignment-problem-bap.doctree differ diff --git a/.doctrees/examples/generalized-assignment-problem-penalty-bap.doctree b/.doctrees/examples/generalized-assignment-problem-penalty-bap.doctree new file mode 100644 index 00000000..9a489fff Binary files /dev/null and b/.doctrees/examples/generalized-assignment-problem-penalty-bap.doctree differ diff --git a/.doctrees/examples/index.doctree b/.doctrees/examples/index.doctree new file mode 100644 index 00000000..fd968616 Binary files /dev/null and b/.doctrees/examples/index.doctree differ diff --git a/.doctrees/examples/knapsack-problem.doctree b/.doctrees/examples/knapsack-problem.doctree new file mode 100644 index 00000000..c8933518 Binary files /dev/null and b/.doctrees/examples/knapsack-problem.doctree differ diff --git a/.doctrees/examples/two-stage-robust-facility-location-problem.doctree b/.doctrees/examples/two-stage-robust-facility-location-problem.doctree new file mode 100644 index 00000000..4c721a26 Binary files /dev/null and b/.doctrees/examples/two-stage-robust-facility-location-problem.doctree differ diff --git a/.doctrees/faq/index.doctree b/.doctrees/faq/index.doctree new file mode 100644 index 00000000..8f2d25af Binary files /dev/null and b/.doctrees/faq/index.doctree differ diff --git a/.doctrees/faq/mosek-and-eigen.doctree b/.doctrees/faq/mosek-and-eigen.doctree new file mode 100644 index 00000000..776b8c64 Binary files /dev/null and b/.doctrees/faq/mosek-and-eigen.doctree differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 00000000..79f4b9d2 Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/installation/global-installation/index.doctree b/.doctrees/installation/global-installation/index.doctree new file mode 100644 index 00000000..9d3e5186 Binary files /dev/null and b/.doctrees/installation/global-installation/index.doctree differ diff --git a/.doctrees/installation/global-installation/linking.doctree b/.doctrees/installation/global-installation/linking.doctree new file mode 100644 index 00000000..f98c837c Binary files /dev/null and b/.doctrees/installation/global-installation/linking.doctree differ diff --git a/.doctrees/installation/index.doctree b/.doctrees/installation/index.doctree new file mode 100644 index 00000000..d54e64d6 Binary files /dev/null and b/.doctrees/installation/index.doctree differ diff --git a/.doctrees/installation/local_installation.doctree b/.doctrees/installation/local_installation.doctree new file mode 100644 index 00000000..0e9ffa73 Binary files /dev/null and b/.doctrees/installation/local_installation.doctree differ diff --git a/.doctrees/installation/options.doctree b/.doctrees/installation/options.doctree new file mode 100644 index 00000000..27c28870 Binary files /dev/null and b/.doctrees/installation/options.doctree differ diff --git a/.doctrees/references.doctree b/.doctrees/references.doctree new file mode 100644 index 00000000..503a294c Binary files /dev/null and b/.doctrees/references.doctree differ diff --git a/.doctrees/tutorials/bilevel-optimization/index.doctree b/.doctrees/tutorials/bilevel-optimization/index.doctree new file mode 100644 index 00000000..10ba477f Binary files /dev/null and b/.doctrees/tutorials/bilevel-optimization/index.doctree differ diff --git a/.doctrees/tutorials/bilevel-optimization/modeling/index.doctree b/.doctrees/tutorials/bilevel-optimization/modeling/index.doctree new file mode 100644 index 00000000..5e55a1cd Binary files /dev/null and b/.doctrees/tutorials/bilevel-optimization/modeling/index.doctree differ diff --git a/.doctrees/tutorials/bilevel-optimization/modeling/optimistic.doctree b/.doctrees/tutorials/bilevel-optimization/modeling/optimistic.doctree new file mode 100644 index 00000000..3f4f8c26 Binary files /dev/null and b/.doctrees/tutorials/bilevel-optimization/modeling/optimistic.doctree differ diff --git a/.doctrees/tutorials/bilevel-optimization/wrappers/index.doctree b/.doctrees/tutorials/bilevel-optimization/wrappers/index.doctree new file mode 100644 index 00000000..a187ec5b Binary files /dev/null and b/.doctrees/tutorials/bilevel-optimization/wrappers/index.doctree differ diff --git a/.doctrees/tutorials/bilevel-optimization/wrappers/mibs.doctree b/.doctrees/tutorials/bilevel-optimization/wrappers/mibs.doctree new file mode 100644 index 00000000..6f3c7574 Binary files /dev/null and b/.doctrees/tutorials/bilevel-optimization/wrappers/mibs.doctree differ diff --git a/.doctrees/tutorials/index.doctree b/.doctrees/tutorials/index.doctree new file mode 100644 index 00000000..e245007d Binary files /dev/null and b/.doctrees/tutorials/index.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.doctree new file mode 100644 index 00000000..c723a781 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-callback.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-callback.doctree new file mode 100644 index 00000000..e5350ac9 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-callback.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.doctree new file mode 100644 index 00000000..91718540 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node.doctree new file mode 100644 index 00000000..871b3d51 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/index.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/index.doctree new file mode 100644 index 00000000..22002f35 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/index.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.doctree new file mode 100644 index 00000000..ed0e6f7f Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.doctree b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.doctree new file mode 100644 index 00000000..8a7e796a Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.doctree new file mode 100644 index 00000000..4266607e Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.doctree new file mode 100644 index 00000000..8066e146 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/index.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/index.doctree new file mode 100644 index 00000000..37397281 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/index.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.doctree new file mode 100644 index 00000000..5dbd6544 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.doctree new file mode 100644 index 00000000..2989bbb3 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.doctree new file mode 100644 index 00000000..0287bafd Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.doctree new file mode 100644 index 00000000..7ccf9f7d Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.doctree new file mode 100644 index 00000000..fa40a82f Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.doctree new file mode 100644 index 00000000..35e2aa58 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.doctree b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.doctree new file mode 100644 index 00000000..63c7d258 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/index.doctree b/.doctrees/tutorials/mixed-integer-programming/index.doctree new file mode 100644 index 00000000..2ca2bb97 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/index.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/constraints.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/constraints.doctree new file mode 100644 index 00000000..522fadd9 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/constraints.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/environment.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/environment.doctree new file mode 100644 index 00000000..a624d71b Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/environment.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/expressions.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/expressions.doctree new file mode 100644 index 00000000..f5bd6685 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/expressions.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/index.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/index.doctree new file mode 100644 index 00000000..9f489be0 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/index.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/models.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/models.doctree new file mode 100644 index 00000000..1ccc7b54 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/models.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/objective-function.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/objective-function.doctree new file mode 100644 index 00000000..0bdd7e8e Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/objective-function.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/modeling/variables.doctree b/.doctrees/tutorials/mixed-integer-programming/modeling/variables.doctree new file mode 100644 index 00000000..8010c491 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/modeling/variables.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/access-optimizer.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/access-optimizer.doctree new file mode 100644 index 00000000..ea7d590a Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/optimizers/access-optimizer.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/create-optimizer.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/create-optimizer.doctree new file mode 100644 index 00000000..2deebd2e Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/optimizers/create-optimizer.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/create-universal-callback.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/create-universal-callback.doctree new file mode 100644 index 00000000..5cb21a1b Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/optimizers/create-universal-callback.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/index.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/index.doctree new file mode 100644 index 00000000..7bff253c Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/optimizers/index.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/solving.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/solving.doctree new file mode 100644 index 00000000..7c769a9d Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/optimizers/solving.doctree differ diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/universal-callbacks.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/universal-callbacks.doctree new file mode 100644 index 00000000..43d9fa50 Binary files /dev/null and b/.doctrees/tutorials/mixed-integer-programming/optimizers/universal-callbacks.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/index.doctree b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/index.doctree new file mode 100644 index 00000000..b6bf5856 Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/index.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/introduction.doctree b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/introduction.doctree new file mode 100644 index 00000000..24280fa9 Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/introduction.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.doctree b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.doctree new file mode 100644 index 00000000..daa35eed Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.doctree b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.doctree new file mode 100644 index 00000000..4a4806f8 Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.doctree b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.doctree new file mode 100644 index 00000000..058c5043 Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/index.doctree b/.doctrees/tutorials/robust-optimization/index.doctree new file mode 100644 index 00000000..91530916 Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/index.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/modeling/index.doctree b/.doctrees/tutorials/robust-optimization/modeling/index.doctree new file mode 100644 index 00000000..c9e3086f Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/modeling/index.doctree differ diff --git a/.doctrees/tutorials/robust-optimization/modeling/two-stage-robust.doctree b/.doctrees/tutorials/robust-optimization/modeling/two-stage-robust.doctree new file mode 100644 index 00000000..5ce19d78 Binary files /dev/null and b/.doctrees/tutorials/robust-optimization/modeling/two-stage-robust.doctree differ diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/_sources/api/classes/branch-and-bound/BranchAndBound.rst.txt b/_sources/api/classes/branch-and-bound/BranchAndBound.rst.txt new file mode 100644 index 00000000..1b7b3d75 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/BranchAndBound.rst.txt @@ -0,0 +1,31 @@ +.. _api_BranchAndBound: + +BranchAndBound +============== + +This class is an optimizer factory which creates a new branch-and-bound algorithm. +It can be used to create customized branch-and-bound algorithms with a large degree of freedom. + +.. seealso:: + + If you are not familiar with optimizers and optimizer factories, please refer to :ref:`this page `. + +.. admonition:: Example + + Here, we create a simple branch-and-bound algorithm where branching is done on integer variables which are being + relaxed. Each node is solved by the external solver GLPK. Nodes are selected according to the "best-bound" + rule while variables are selected according to the "most-infeasible" branching rule. + + The created algorithm also incorporates sub-tree exploration of maximum depth 2. + + .. code-block:: + + model.use( + BranchAndBound() + .with_node_optimizer( GLPK::ContinuousRelaxation() ) + .with_branching_rule( MostInfeasible() ) + .with_node_selection_rule( BestBound() ) + .with_subtree_depth(2) + ); + +.. doxygenclass:: idol::BranchAndBound diff --git a/_sources/api/classes/branch-and-bound/BranchAndBoundCallback.rst.txt b/_sources/api/classes/branch-and-bound/BranchAndBoundCallback.rst.txt new file mode 100644 index 00000000..5432eb88 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/BranchAndBoundCallback.rst.txt @@ -0,0 +1,74 @@ +.. _api_BranchAndBoundCallback: + +BranchAndBoundCallback +====================== + +This class can be used to create callbacks to run on idol's :ref:`branch-and-bound implementation `. + +.. warning:: + + BranchAndBoundCallback-s is an *advanced* feature. + + Please, make sure that what you are trying do cannot be done with + a :ref:`solver-independent callback ` first, or with pre-existing callbacks, e.g., + :ref:`UserCutCallback ` or :ref:`LazyCutCallback `. + + The advantage of using a :ref:`BranchAndBoundCallback ` instead of a standard + solver-independent :ref:`Callback ` lies in the possibility to access specific information regarding + the execution of the branch-and-bound algorithm. For instance, accessing a node's information, or the current + relaxation model being solved. + +.. admonition:: Example + + Here is an example of callback which prints out the event triggering it and, when the event corresponds to `NodeLoaded`, + prints the node's model to be solved. + + .. code-block:: + + class MyCallback : public BranchAndBoundCallbackFactory { + public: + class Strategy : public BranchAndBoundCallback { + protected: + void operator()(CallbackEvent t_event) override { + + std::cout << "MyCallback is called for " << t_event << std::endl; + + if (t_event != NodeLoaded) { + return; + } + + std::cout << "The problem being solve at node " << node().id() << std::endl; + std::cout << relaxation() << std::endl; + + } + }; + + BranchAndBoundCallback *operator()() override { + return new Strategy(); + } + + [[nodiscard]] BranchAndBoundCallbackFactory *clone() const override { + return new MyCallback(*this); + } + }; + + Then, this callback can be used as follows. + + .. code-block:: + + model.use( + BranchAndBound() + .with_node_optimizer(GLPK::ContinuousRelaxation()) + .with_branching_rule(MostInfeasible()) + .with_node_selection_rule(DepthFirst()) + .with_callback(MyCallback()); + ); + +.. hint:: + + By default, most of the objects returned by BranchAndBoundCallback methods are const. If you wish to access non-const + versions (e.g., if you want to perform non-standard updates to the relaxed model or want to change the node's current + information manually), you should use the advanced interface obtained by calling ``BranchAndBoundCallback::advanced_interface``. + +.. doxygenclass:: idol::BranchAndBoundCallback + :protected-members: diff --git a/_sources/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt b/_sources/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt new file mode 100644 index 00000000..a94a06f9 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt @@ -0,0 +1,5 @@ +BranchAndBoundCallbackFactory +============================= + +.. doxygenclass:: idol::BranchAndBoundCallbackFactory + :protected-members: diff --git a/_sources/api/classes/branch-and-bound/cuts/KnapsackCover.rst.txt b/_sources/api/classes/branch-and-bound/cuts/KnapsackCover.rst.txt new file mode 100644 index 00000000..44d2fb60 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/cuts/KnapsackCover.rst.txt @@ -0,0 +1,4 @@ +Cuts::KnapsackCover +=================== + +.. doxygenclass:: idol::Cuts::KnapsackCover diff --git a/_sources/api/classes/branch-and-bound/cuts/index.rst.txt b/_sources/api/classes/branch-and-bound/cuts/index.rst.txt new file mode 100644 index 00000000..4ff9d8fa --- /dev/null +++ b/_sources/api/classes/branch-and-bound/cuts/index.rst.txt @@ -0,0 +1,10 @@ +Cutting Planes +============== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/classes/branch-and-bound/heuristics/LocalBranching.rst.txt b/_sources/api/classes/branch-and-bound/heuristics/LocalBranching.rst.txt new file mode 100644 index 00000000..37c62452 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/heuristics/LocalBranching.rst.txt @@ -0,0 +1,4 @@ +Heuristics::LocalBranching +========================== + +.. doxygenclass:: idol::Heuristics::LocalBranching diff --git a/_sources/api/classes/branch-and-bound/heuristics/RENS.rst.txt b/_sources/api/classes/branch-and-bound/heuristics/RENS.rst.txt new file mode 100644 index 00000000..3b951da0 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/heuristics/RENS.rst.txt @@ -0,0 +1,4 @@ +Heuristics::RENS +================ + +.. doxygenclass:: idol::Heuristics::RENS diff --git a/_sources/api/classes/branch-and-bound/heuristics/SimpleRounding.rst.txt b/_sources/api/classes/branch-and-bound/heuristics/SimpleRounding.rst.txt new file mode 100644 index 00000000..0a0e0e74 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/heuristics/SimpleRounding.rst.txt @@ -0,0 +1,4 @@ +Heuristics::SimpleRounding +========================== + +.. doxygenclass:: idol::Heuristics::SimpleRounding diff --git a/_sources/api/classes/branch-and-bound/heuristics/index.rst.txt b/_sources/api/classes/branch-and-bound/heuristics/index.rst.txt new file mode 100644 index 00000000..d59a952f --- /dev/null +++ b/_sources/api/classes/branch-and-bound/heuristics/index.rst.txt @@ -0,0 +1,10 @@ +Heuristics +========== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/classes/branch-and-bound/index.rst.txt b/_sources/api/classes/branch-and-bound/index.rst.txt new file mode 100644 index 00000000..63035c91 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/index.rst.txt @@ -0,0 +1,12 @@ +Branch-and-Bound Algorithm +========================== + +.. toctree:: + :maxdepth: 2 + :glob: + + * + variable-selection/index + node-selection/index + heuristics/index + cuts/index diff --git a/_sources/api/classes/branch-and-bound/node-selection/BestBound.rst.txt b/_sources/api/classes/branch-and-bound/node-selection/BestBound.rst.txt new file mode 100644 index 00000000..466ba897 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/node-selection/BestBound.rst.txt @@ -0,0 +1,4 @@ +BestBound +========= + +.. doxygenclass:: idol::BestBound diff --git a/_sources/api/classes/branch-and-bound/node-selection/BestEstimate.rst.txt b/_sources/api/classes/branch-and-bound/node-selection/BestEstimate.rst.txt new file mode 100644 index 00000000..7242d970 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/node-selection/BestEstimate.rst.txt @@ -0,0 +1,6 @@ +BestEstimate +============ + +The "best estimate" node selection rule was introduced in *J. J. H. Forrest, J. P. H. Hirst, J. A. Tomlin, (1974) Practical Solution of Large Mixed Integer Programming Problems with Umpire. Management Science 20(5):736-773*. + +.. doxygenclass:: idol::BestEstimate diff --git a/_sources/api/classes/branch-and-bound/node-selection/BreadthFirst.rst.txt b/_sources/api/classes/branch-and-bound/node-selection/BreadthFirst.rst.txt new file mode 100644 index 00000000..f579e0ba --- /dev/null +++ b/_sources/api/classes/branch-and-bound/node-selection/BreadthFirst.rst.txt @@ -0,0 +1,4 @@ +BreadthFirst +============ + +.. doxygenclass:: idol::BreadthFirst diff --git a/_sources/api/classes/branch-and-bound/node-selection/DepthFirst.rst.txt b/_sources/api/classes/branch-and-bound/node-selection/DepthFirst.rst.txt new file mode 100644 index 00000000..31c0f920 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/node-selection/DepthFirst.rst.txt @@ -0,0 +1,4 @@ +DepthFirst +========== + +.. doxygenclass:: idol::DepthFirst diff --git a/_sources/api/classes/branch-and-bound/node-selection/WorstBound.rst.txt b/_sources/api/classes/branch-and-bound/node-selection/WorstBound.rst.txt new file mode 100644 index 00000000..3e009532 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/node-selection/WorstBound.rst.txt @@ -0,0 +1,4 @@ +WorstBound +========== + +.. doxygenclass:: idol::WorstBound diff --git a/_sources/api/classes/branch-and-bound/node-selection/index.rst.txt b/_sources/api/classes/branch-and-bound/node-selection/index.rst.txt new file mode 100644 index 00000000..09ffa958 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/node-selection/index.rst.txt @@ -0,0 +1,10 @@ +Node Selection Rules +==================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt new file mode 100644 index 00000000..1723395c --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt @@ -0,0 +1,4 @@ +FirstInfeasibleFound +==================== + +.. doxygenclass:: idol::FirstInfeasibleFound diff --git a/_sources/api/classes/branch-and-bound/variable-selection/LeastInfeasible.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/LeastInfeasible.rst.txt new file mode 100644 index 00000000..84dc1d37 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/LeastInfeasible.rst.txt @@ -0,0 +1,4 @@ +LeastInfeasible +=============== + +.. doxygenclass:: idol::LeastInfeasible diff --git a/_sources/api/classes/branch-and-bound/variable-selection/MostInfeasible.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/MostInfeasible.rst.txt new file mode 100644 index 00000000..e47c57c9 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/MostInfeasible.rst.txt @@ -0,0 +1,4 @@ +MostInfeasible +============== + +.. doxygenclass:: idol::MostInfeasible diff --git a/_sources/api/classes/branch-and-bound/variable-selection/PseudoCost.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/PseudoCost.rst.txt new file mode 100644 index 00000000..2ccb7772 --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/PseudoCost.rst.txt @@ -0,0 +1,4 @@ +PseudoCost +========== + +.. doxygenclass:: idol::PseudoCost diff --git a/_sources/api/classes/branch-and-bound/variable-selection/StrongBranching.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/StrongBranching.rst.txt new file mode 100644 index 00000000..8c96f18c --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/StrongBranching.rst.txt @@ -0,0 +1,4 @@ +StrongBranching +=============== + +.. doxygenclass:: idol::StrongBranching diff --git a/_sources/api/classes/branch-and-bound/variable-selection/UniformlyRandom.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/UniformlyRandom.rst.txt new file mode 100644 index 00000000..a34f4a6c --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/UniformlyRandom.rst.txt @@ -0,0 +1,4 @@ +UniformlyRandom +=============== + +.. doxygenclass:: idol::UniformlyRandom diff --git a/_sources/api/classes/branch-and-bound/variable-selection/index.rst.txt b/_sources/api/classes/branch-and-bound/variable-selection/index.rst.txt new file mode 100644 index 00000000..3d0a084c --- /dev/null +++ b/_sources/api/classes/branch-and-bound/variable-selection/index.rst.txt @@ -0,0 +1,10 @@ +Branching Rules +=============== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.rst.txt b/_sources/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.rst.txt new file mode 100644 index 00000000..afe09bfa --- /dev/null +++ b/_sources/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.rst.txt @@ -0,0 +1,6 @@ +.. _api_Robust_ColumnAndConstraintGeneration_doxygen: + +Robust::ColumnAndConstraintGeneration +===================================== + +.. doxygenclass:: idol::Robust::ColumnAndConstraintGeneration diff --git a/_sources/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.rst.txt b/_sources/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.rst.txt new file mode 100644 index 00000000..b0b7d157 --- /dev/null +++ b/_sources/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.rst.txt @@ -0,0 +1,4 @@ +Optimizers::Robust::ColumnAndConstraintGeneration +================================================= + +.. doxygenclass:: idol::Optimizers::Robust::ColumnAndConstraintGeneration diff --git a/_sources/api/classes/column-and-constraint-generation/index.rst.txt b/_sources/api/classes/column-and-constraint-generation/index.rst.txt new file mode 100644 index 00000000..3808c7a1 --- /dev/null +++ b/_sources/api/classes/column-and-constraint-generation/index.rst.txt @@ -0,0 +1,8 @@ +Column-and-Constraint Generation Algorithm +========================================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/classes/column-generation/ArtificialCosts.rst.txt b/_sources/api/classes/column-generation/ArtificialCosts.rst.txt new file mode 100644 index 00000000..6fbeae5c --- /dev/null +++ b/_sources/api/classes/column-generation/ArtificialCosts.rst.txt @@ -0,0 +1,4 @@ +DantzigWolfe::ArtificialCosts +============================= + +.. doxygenclass:: idol::DantzigWolfe::ArtificialCosts diff --git a/_sources/api/classes/column-generation/DantzigWolfeDecomposition.rst.txt b/_sources/api/classes/column-generation/DantzigWolfeDecomposition.rst.txt new file mode 100644 index 00000000..16710386 --- /dev/null +++ b/_sources/api/classes/column-generation/DantzigWolfeDecomposition.rst.txt @@ -0,0 +1,9 @@ +DantzigWolfeDecomposition +========================= + +.. hint:: + + This page documents on the `DantzigWolfeDecomposition` optimizer factory. Note that there are also + :ref:`Dantzig-Wolfe Decomposition tutorials `. + +.. doxygenclass:: idol::DantzigWolfeDecomposition diff --git a/_sources/api/classes/column-generation/FarkasPricing.rst.txt b/_sources/api/classes/column-generation/FarkasPricing.rst.txt new file mode 100644 index 00000000..1de6106c --- /dev/null +++ b/_sources/api/classes/column-generation/FarkasPricing.rst.txt @@ -0,0 +1,4 @@ +DantzigWolfe::FarkasPricing +=========================== + +.. doxygenclass:: idol::DantzigWolfe::FarkasPricing diff --git a/_sources/api/classes/column-generation/IntegerMaster.rst.txt b/_sources/api/classes/column-generation/IntegerMaster.rst.txt new file mode 100644 index 00000000..caa0f997 --- /dev/null +++ b/_sources/api/classes/column-generation/IntegerMaster.rst.txt @@ -0,0 +1,9 @@ +Heuristics::IntegerMaster +========================= + +.. warning:: + + This heuristic can only be used with a :code:`BranchAndBound` optimizer in which nodes are solved by + :code:`DantzigWolfeDecomposition`. + +.. doxygenclass:: idol::Heuristics::IntegerMaster diff --git a/_sources/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt b/_sources/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt new file mode 100644 index 00000000..5fb77aee --- /dev/null +++ b/_sources/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt @@ -0,0 +1,4 @@ +Optimizers::DantzigWolfeDecomposition +===================================== + +.. doxygenclass:: idol::Optimizers::DantzigWolfeDecomposition diff --git a/_sources/api/classes/column-generation/index.rst.txt b/_sources/api/classes/column-generation/index.rst.txt new file mode 100644 index 00000000..dca08d98 --- /dev/null +++ b/_sources/api/classes/column-generation/index.rst.txt @@ -0,0 +1,10 @@ +Column Generation Algorithm +=========================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + stabilization/index + diff --git a/_sources/api/classes/column-generation/stabilization/Neame.rst.txt b/_sources/api/classes/column-generation/stabilization/Neame.rst.txt new file mode 100644 index 00000000..ed2377a2 --- /dev/null +++ b/_sources/api/classes/column-generation/stabilization/Neame.rst.txt @@ -0,0 +1,4 @@ +DantzigWolfe::Neame +=================== + +.. doxygenclass:: idol::DantzigWolfe::Neame diff --git a/_sources/api/classes/column-generation/stabilization/Wentges.rst.txt b/_sources/api/classes/column-generation/stabilization/Wentges.rst.txt new file mode 100644 index 00000000..1303efa0 --- /dev/null +++ b/_sources/api/classes/column-generation/stabilization/Wentges.rst.txt @@ -0,0 +1,4 @@ +DantzigWolfe::Wentges +===================== + +.. doxygenclass:: idol::DantzigWolfe::Wentges diff --git a/_sources/api/classes/column-generation/stabilization/index.rst.txt b/_sources/api/classes/column-generation/stabilization/index.rst.txt new file mode 100644 index 00000000..25288e1e --- /dev/null +++ b/_sources/api/classes/column-generation/stabilization/index.rst.txt @@ -0,0 +1,8 @@ +Stabilization +============= + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/classes/common/Annotation.rst.txt b/_sources/api/classes/common/Annotation.rst.txt new file mode 100644 index 00000000..a81f38fd --- /dev/null +++ b/_sources/api/classes/common/Annotation.rst.txt @@ -0,0 +1,27 @@ +Annotation +========== + +Annotations are additional information associated to an optimization object (e.g., a constraint or a variable). +The Annotation class takes two template arguments: an optimization object type and a value type. For instance, we +can create an annotation for constraints of type :code:`unsigned int` as follows. + +.. code:: cpp + + Env env; + + const unsigned int default_value = 0; + + Annotation annotation(env, "my_annotation", default_value); + +Note that annotations are global, i.e., they do not relate to a given optimization model and can, therefore, be accessed +anywhere in the code. Thus, given a constraint called :code:`constraint`, the value of the annotation can be accessed +by calling the :code:`Ctr::get` method. + +.. code:: cpp + + std::cout << "My annotation is " << constraint.get(annotation) << std::endl; // "0", i.e., the default_value value + +Annotations are, in particular, used to give decomposition instructions to idol when designing a Branch-and-Price algorithm. +To learn more, check our `Branch-and-Price tutorials `_. + +.. doxygenclass:: idol::Annotation diff --git a/_sources/api/classes/common/Column.rst.txt b/_sources/api/classes/common/Column.rst.txt new file mode 100644 index 00000000..4f16f907 --- /dev/null +++ b/_sources/api/classes/common/Column.rst.txt @@ -0,0 +1,6 @@ +.. _api_Column: + +Column +====== + +.. doxygenclass:: idol::Column diff --git a/_sources/api/classes/common/Constant.rst.txt b/_sources/api/classes/common/Constant.rst.txt new file mode 100644 index 00000000..910e997b --- /dev/null +++ b/_sources/api/classes/common/Constant.rst.txt @@ -0,0 +1,6 @@ +.. _api_Constant: + +Constant +======== + +.. doxygenclass:: idol::Constant diff --git a/_sources/api/classes/common/Ctr.rst.txt b/_sources/api/classes/common/Ctr.rst.txt new file mode 100644 index 00000000..483b7feb --- /dev/null +++ b/_sources/api/classes/common/Ctr.rst.txt @@ -0,0 +1,6 @@ +.. _api_Ctr: + +Ctr +=== + +.. doxygenclass:: idol::Ctr diff --git a/_sources/api/classes/common/Env.rst.txt b/_sources/api/classes/common/Env.rst.txt new file mode 100644 index 00000000..42199481 --- /dev/null +++ b/_sources/api/classes/common/Env.rst.txt @@ -0,0 +1,6 @@ +.. _api_Env: + +Env +=== + +.. doxygenclass:: idol::Env diff --git a/_sources/api/classes/common/Expr.rst.txt b/_sources/api/classes/common/Expr.rst.txt new file mode 100644 index 00000000..89fb9869 --- /dev/null +++ b/_sources/api/classes/common/Expr.rst.txt @@ -0,0 +1,6 @@ +.. _api_Expr: + +Expr +==== + +.. doxygenclass:: idol::Expr diff --git a/_sources/api/classes/common/LinExpr.rst.txt b/_sources/api/classes/common/LinExpr.rst.txt new file mode 100644 index 00000000..1b8d6163 --- /dev/null +++ b/_sources/api/classes/common/LinExpr.rst.txt @@ -0,0 +1,24 @@ +.. _api_LinExpr: + +LinExpr +======= + +This class is used to represent linear expressions in the modeling interface of idol. + +It consists in a set of linear terms which represent products of keys (typically, variables) and scalars. + +.. admonition:: Example + + In this example, we create a linear expression representing the following linear expression. + + .. math:: + + 3 x_0 + 2 x_1 + + .. code-block:: cpp + + auto x = model.add_vars(Dim<1>(2), 0, Inf, Continuous, "x"); + + LinExpr lin_expr = 3 * x[0] + 2 * x[1]; + +.. doxygenclass:: idol::LinExpr diff --git a/_sources/api/classes/common/Model.rst.txt b/_sources/api/classes/common/Model.rst.txt new file mode 100644 index 00000000..30d36814 --- /dev/null +++ b/_sources/api/classes/common/Model.rst.txt @@ -0,0 +1,37 @@ +.. _api_Model: + +Model +===== + +.. admonition:: Example: + + Here is a short example which builds and solves the following optimization problem. + + .. math:: + + \begin{array}{ll} + \textrm{minimize } & -x_0 - 1.5 x_1 + 3 \\ + \textrm{subject to } & x_0 + 2 x_1 \le 1.5 \\ + & 0 \le x_0 \le 1 \\ + & 0 \le x_1 \le 1 + \end{array} + + .. code-block:: cpp + + Env env; + + Model model(env); + + auto x = model.add_vars(Dim<1>(2), 0, 1, Continuous, "x"); + + auto c = model.add_ctr(x[0] + 2 * x[1] <= 1.5); + + model.set_obj_expr(-x[0] - 1.5 * x[1] + 3); + + model.use(Gurobi()); + + model.optimize(); + + std::cout << "Best obj = " << model.get_best_obj() << std::endl; + +.. doxygenclass:: idol::Model diff --git a/_sources/api/classes/common/Param.rst.txt b/_sources/api/classes/common/Param.rst.txt new file mode 100644 index 00000000..1684f2f3 --- /dev/null +++ b/_sources/api/classes/common/Param.rst.txt @@ -0,0 +1,6 @@ +.. _api_Param: + +Param +===== + +.. doxygenclass:: idol::Param diff --git a/_sources/api/classes/common/QuadExpr.rst.txt b/_sources/api/classes/common/QuadExpr.rst.txt new file mode 100644 index 00000000..0071954b --- /dev/null +++ b/_sources/api/classes/common/QuadExpr.rst.txt @@ -0,0 +1,6 @@ +.. _api_QuadExpr: + +QuadExpr +======== + +.. doxygenclass:: idol::QuadExpr diff --git a/_sources/api/classes/common/Row.rst.txt b/_sources/api/classes/common/Row.rst.txt new file mode 100644 index 00000000..c3f40773 --- /dev/null +++ b/_sources/api/classes/common/Row.rst.txt @@ -0,0 +1,6 @@ +.. _api_Row: + +Row +=== + +.. doxygenclass:: idol::Row diff --git a/_sources/api/classes/common/SolutionDual.rst.txt b/_sources/api/classes/common/SolutionDual.rst.txt new file mode 100644 index 00000000..b9b94f30 --- /dev/null +++ b/_sources/api/classes/common/SolutionDual.rst.txt @@ -0,0 +1,6 @@ +.. _api_Solution_Dual: + +Solution::Dual +============== + +.. doxygenclass:: idol::Solution::Dual diff --git a/_sources/api/classes/common/SolutionPrimal.rst.txt b/_sources/api/classes/common/SolutionPrimal.rst.txt new file mode 100644 index 00000000..76334ab7 --- /dev/null +++ b/_sources/api/classes/common/SolutionPrimal.rst.txt @@ -0,0 +1,6 @@ +.. _api_Solution_Primal: + +Solution::Primal +================ + +.. doxygenclass:: idol::Solution::Primal diff --git a/_sources/api/classes/common/TempCtr.rst.txt b/_sources/api/classes/common/TempCtr.rst.txt new file mode 100644 index 00000000..ee27bcce --- /dev/null +++ b/_sources/api/classes/common/TempCtr.rst.txt @@ -0,0 +1,6 @@ +.. _api_TempCtr: + +TempCtr +======= + +.. doxygenclass:: idol::TempCtr diff --git a/_sources/api/classes/common/TempVar.rst.txt b/_sources/api/classes/common/TempVar.rst.txt new file mode 100644 index 00000000..a7ed4792 --- /dev/null +++ b/_sources/api/classes/common/TempVar.rst.txt @@ -0,0 +1,6 @@ +.. _api_mip_variables_TempVar: + +TempVar +======= + +.. doxygenclass:: idol::TempVar diff --git a/_sources/api/classes/common/Var.rst.txt b/_sources/api/classes/common/Var.rst.txt new file mode 100644 index 00000000..fbc83472 --- /dev/null +++ b/_sources/api/classes/common/Var.rst.txt @@ -0,0 +1,6 @@ +.. _api_Var: + +Var +=== + +.. doxygenclass:: idol::Var diff --git a/_sources/api/classes/common/index.rst.txt b/_sources/api/classes/common/index.rst.txt new file mode 100644 index 00000000..2940c6bf --- /dev/null +++ b/_sources/api/classes/common/index.rst.txt @@ -0,0 +1,12 @@ +.. _classes_common: + +Common +====== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/classes/external-bilevel/MibS.rst.txt b/_sources/api/classes/external-bilevel/MibS.rst.txt new file mode 100644 index 00000000..8e17661d --- /dev/null +++ b/_sources/api/classes/external-bilevel/MibS.rst.txt @@ -0,0 +1,4 @@ +Bilevel::Mibs +============= + +.. doxygenclass:: idol::Bilevel::MibS diff --git a/_sources/api/classes/external-bilevel/Optimizers_MibS.rst.txt b/_sources/api/classes/external-bilevel/Optimizers_MibS.rst.txt new file mode 100644 index 00000000..286a87fe --- /dev/null +++ b/_sources/api/classes/external-bilevel/Optimizers_MibS.rst.txt @@ -0,0 +1,4 @@ +Optimizers::Bilevel::Mibs +========================= + +.. doxygenclass:: idol::Optimizers::Bilevel::MibS diff --git a/_sources/api/classes/external-bilevel/index.rst.txt b/_sources/api/classes/external-bilevel/index.rst.txt new file mode 100644 index 00000000..b2e2114f --- /dev/null +++ b/_sources/api/classes/external-bilevel/index.rst.txt @@ -0,0 +1,8 @@ +External Bilevel Solvers +======================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/classes/external-mip/GLPK.rst.txt b/_sources/api/classes/external-mip/GLPK.rst.txt new file mode 100644 index 00000000..393b1340 --- /dev/null +++ b/_sources/api/classes/external-mip/GLPK.rst.txt @@ -0,0 +1,6 @@ +.. _api_GLPK: + +GLPK +==== + +.. doxygenclass:: idol::GLPK diff --git a/_sources/api/classes/external-mip/Gurobi.rst.txt b/_sources/api/classes/external-mip/Gurobi.rst.txt new file mode 100644 index 00000000..e6db74d7 --- /dev/null +++ b/_sources/api/classes/external-mip/Gurobi.rst.txt @@ -0,0 +1,6 @@ +.. _api_Gurobi: + +Gurobi +====== + +.. doxygenclass:: idol::Gurobi diff --git a/_sources/api/classes/external-mip/HiGHS.rst.txt b/_sources/api/classes/external-mip/HiGHS.rst.txt new file mode 100644 index 00000000..630ba8b7 --- /dev/null +++ b/_sources/api/classes/external-mip/HiGHS.rst.txt @@ -0,0 +1,4 @@ +HiGHS +===== + +.. doxygenclass:: idol::HiGHS diff --git a/_sources/api/classes/external-mip/Mosek.rst.txt b/_sources/api/classes/external-mip/Mosek.rst.txt new file mode 100644 index 00000000..ce11678d --- /dev/null +++ b/_sources/api/classes/external-mip/Mosek.rst.txt @@ -0,0 +1,4 @@ +Mosek +===== + +.. doxygenclass:: idol::Mosek diff --git a/_sources/api/classes/external-mip/Optimizers_GLPK.rst.txt b/_sources/api/classes/external-mip/Optimizers_GLPK.rst.txt new file mode 100644 index 00000000..9f29e263 --- /dev/null +++ b/_sources/api/classes/external-mip/Optimizers_GLPK.rst.txt @@ -0,0 +1,6 @@ +.. _api_Optimizers_GLPK: + +Optimizers::GLPK +================ + +.. doxygenclass:: idol::Optimizers::GLPK diff --git a/_sources/api/classes/external-mip/Optimizers_Gurobi.rst.txt b/_sources/api/classes/external-mip/Optimizers_Gurobi.rst.txt new file mode 100644 index 00000000..85ba65fa --- /dev/null +++ b/_sources/api/classes/external-mip/Optimizers_Gurobi.rst.txt @@ -0,0 +1,4 @@ +Optimizers::Gurobi +================== + +.. doxygenclass:: idol::Optimizers::Gurobi diff --git a/_sources/api/classes/external-mip/Optimizers_HiGHS.rst.txt b/_sources/api/classes/external-mip/Optimizers_HiGHS.rst.txt new file mode 100644 index 00000000..155705fa --- /dev/null +++ b/_sources/api/classes/external-mip/Optimizers_HiGHS.rst.txt @@ -0,0 +1,4 @@ +Optimizers::HiGHS +================= + +.. doxygenclass:: idol::Optimizers::HiGHS diff --git a/_sources/api/classes/external-mip/Optimizers_Mosek.rst.txt b/_sources/api/classes/external-mip/Optimizers_Mosek.rst.txt new file mode 100644 index 00000000..3dc87036 --- /dev/null +++ b/_sources/api/classes/external-mip/Optimizers_Mosek.rst.txt @@ -0,0 +1,4 @@ +Optimizers::Mosek +================= + +.. doxygenclass:: idol::Optimizers::Mosek diff --git a/_sources/api/classes/external-mip/Osi/OsiCbc.rst.txt b/_sources/api/classes/external-mip/Osi/OsiCbc.rst.txt new file mode 100644 index 00000000..8a98a4c5 --- /dev/null +++ b/_sources/api/classes/external-mip/Osi/OsiCbc.rst.txt @@ -0,0 +1,4 @@ +OsiCbc +====== + +.. doxygenclass:: idol::OsiCbc diff --git a/_sources/api/classes/external-mip/Osi/OsiClp.rst.txt b/_sources/api/classes/external-mip/Osi/OsiClp.rst.txt new file mode 100644 index 00000000..8b924606 --- /dev/null +++ b/_sources/api/classes/external-mip/Osi/OsiClp.rst.txt @@ -0,0 +1,4 @@ +OsiClp +====== + +.. doxygenclass:: idol::OsiClp diff --git a/_sources/api/classes/external-mip/Osi/OsiCplex.rst.txt b/_sources/api/classes/external-mip/Osi/OsiCplex.rst.txt new file mode 100644 index 00000000..927ddf8e --- /dev/null +++ b/_sources/api/classes/external-mip/Osi/OsiCplex.rst.txt @@ -0,0 +1,4 @@ +OsiCplex +======== + +.. doxygenclass:: idol::OsiCplex diff --git a/_sources/api/classes/external-mip/Osi/OsiSymphony.rst.txt b/_sources/api/classes/external-mip/Osi/OsiSymphony.rst.txt new file mode 100644 index 00000000..928f06a5 --- /dev/null +++ b/_sources/api/classes/external-mip/Osi/OsiSymphony.rst.txt @@ -0,0 +1,4 @@ +OsiSymphony +=========== + +.. doxygenclass:: idol::OsiSymphony diff --git a/_sources/api/classes/external-mip/Osi/index.rst.txt b/_sources/api/classes/external-mip/Osi/index.rst.txt new file mode 100644 index 00000000..a4bb869a --- /dev/null +++ b/_sources/api/classes/external-mip/Osi/index.rst.txt @@ -0,0 +1,34 @@ +COIN-OR/Osi (Cplex, Xpress, Cbc, ...) +===================================== + +Idol can be linked with the `coin-or/Osi `_ library (*Open Solver Interface*) to use any solver having an osi interface. + +.. hint:: + + At the moment, only Cplex has been properly tested and can be used as follows. + + .. code-block:: + + model.use(OsiCplex()); + +.. hint:: + + Note that Osi can also be used with *any* Osi object by directly passing the interface as an argument. + + .. code-block:: + + model.use(Osi(OsiCpxSolverInterface())); // same as: model.use(OsiCplex()); + +.. warning:: + + Though idol has dedicated optimizers for Symphony, Cbc and Clp, it seems that the osi interface for these solvers do not + fully fulfill the interface requirement to have a stable usage. + +.. toctree:: + :maxdepth: 1 + :glob: + + * + +.. doxygenclass:: idol::Osi + diff --git a/_sources/api/classes/external-mip/index.rst.txt b/_sources/api/classes/external-mip/index.rst.txt new file mode 100644 index 00000000..6fb86245 --- /dev/null +++ b/_sources/api/classes/external-mip/index.rst.txt @@ -0,0 +1,9 @@ +External MIP solvers +==================== + +.. toctree:: + :maxdepth: 2 + :glob: + + * + Osi/index diff --git a/_sources/api/classes/index.rst.txt b/_sources/api/classes/index.rst.txt new file mode 100644 index 00000000..45ca55f1 --- /dev/null +++ b/_sources/api/classes/index.rst.txt @@ -0,0 +1,36 @@ +.. _classes: + +Class List +========== + +Mixed-Integer Programming +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 2 + :glob: + + common/index + external-mip/index + universal-callbacks/index + branch-and-bound/index + column-generation/index + +Bilevel Optimization +^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 2 + :glob: + + external-bilevel/index + +Robust Optimization +^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 2 + :glob: + + column-and-constraint-generation/index + diff --git a/_sources/api/classes/universal-callbacks/Callback.rst.txt b/_sources/api/classes/universal-callbacks/Callback.rst.txt new file mode 100644 index 00000000..63c00d3a --- /dev/null +++ b/_sources/api/classes/universal-callbacks/Callback.rst.txt @@ -0,0 +1,85 @@ +.. _api_Callback: + +Callback +======== + +Callbacks are user-defined functions which are invoked during the execution of branch-and-bound algorithms at certain +key steps of the procedure. These key points are called :ref:`events ` in idol. +Callback functions can be used to monitor the algorithm's progress, control its behavior, or perform additional processing. + +UserCutCallback and LazyCutCallback +----------------------------------- + +A common use of callbacks is to implement custom cut generation procedures at each node of the branch-and-bound tree. Note that +idol offers out-of-the-box callback routines for cut separation. Namely, :ref:`UserCutCallback ` +and :ref:`LazyCutCallback `. Yet, it is totally possible to define your own cut generation procedure +by using the ``Callback::add_user_cut`` and ``Callback::add_lazy_cut`` methods inside your callback. + +In a nutshell, :ref:`UserCutCallback ` (or, similarly, ``Callback::add_user_cut``) are intended for +cuts which have a potential to improve the quality of the relaxation but whose presence in the model is not necessary for the +branch-and-bound to converge to an optimal solution. :ref:`UserCutCallback ` callbacks are called when +a non-valid solution has been found. + +:ref:`LazyCutCallback ` (or, similarly, ``Callback::add_lazy_cut``), +instead, are intended to generate constraints which should be part of the model but which were omitted in the model for some reason. +A typical reason for omitting constraints in a model's definition is the large number of such constraints. +:ref:`LazyCutCallback ` callbacks are called when a valid solution has been found. + +Creating your own callback +-------------------------- + +If you want to create your own callback, you should first create a new class which inherits the ``Callback`` class and +overrides the ``operator()(CallbackEvent)`` method. + +Note that callbacks cannot be given "as-is" to an optimizer but must be passed through a ``CallbackFactory``. A callback +factory is a class whose role is to create a new callback object whenever it is needed. Every callback factories must be +a child (or little child) of the ``CallbackFactory`` class. + +.. admonition:: Example + + We now give an example of callback which prints out every valid solution found. + + .. code-block:: + + class MyCallback : public CallbackFactory { + public: + + class Strategy { // Real callback implementation + protected: + void operator()(CallbackEvent t_event) { + + if (t_event != IncumbentSolution) { + return; + } + + std::cout << primal_solution() << std::endl; + } + } + + Callback* operator()() { // Creates a new callback object + return new Strategy(); + } + + CallbackFactory* clone() const { // Creates a copy of the callback factory + return new MyCallback(*this); + } + + } + + Later, it is then possible to use this callback in compliant optimizers like :ref:`Gurobi ` or :ref:`BranchAndBound `. + + .. code-block:: + + model.use( + Gurobi().with_callback(MyCallback(); + ); + + model.optimize(); + +.. hint:: + + Note that there also exists more advanced callbacks which are specific to idol's branch-and-bound implementation. + For these advanced feature, see :ref:`BranchAndBoundCallback `. + +.. doxygenclass:: idol::Callback + :protected-members: diff --git a/_sources/api/classes/universal-callbacks/CallbackFactory.rst.txt b/_sources/api/classes/universal-callbacks/CallbackFactory.rst.txt new file mode 100644 index 00000000..e795fb1d --- /dev/null +++ b/_sources/api/classes/universal-callbacks/CallbackFactory.rst.txt @@ -0,0 +1,7 @@ +.. _api_CallbackFactory: + +CallbackFactory +=============== + +.. doxygenclass:: idol::CallbackFactory + :protected-members: diff --git a/_sources/api/classes/universal-callbacks/LazyCutCallback.rst.txt b/_sources/api/classes/universal-callbacks/LazyCutCallback.rst.txt new file mode 100644 index 00000000..ab484275 --- /dev/null +++ b/_sources/api/classes/universal-callbacks/LazyCutCallback.rst.txt @@ -0,0 +1,60 @@ +.. _api_LazyCutCallback: + +LazyCutCallback +=============== + +Lazy cuts are essentially constraints which are part of an optimization model but which have been omitted in the current +definition of the model. Lazy cuts typically arise in models with a large number of constraints. Instead of enumerating +then all, it may be judicious to omit some of them to get a smaller optimization model. Then, the returned solution is +checked for feasibility against the whole set of constraints. If a violated constraint is identified, we add the +constraint to the model and resolve. If not, then all the constraints are satisfied and the solution is optimal for the +original model in which all constraints materializes. + +The LazyCutCallback can be used to implement lazy cut constraint generation on the fly, during the optimization process. + +Consider the following optimization problem: + +.. math:: + + \begin{align} + \min_x \ & c^\top x \\ + \text{s.t.} \ & x\in X, \\ + & \xi^\top x \le \xi_0 \quad (\xi_0,\xi) \in \Xi, + \end{align} + +in which assume that :math:`|\Xi|` is large (potentially infinite). The idea is to start by solving the following +relaxed master problem in which constraints associated to :math:`(\xi_0,\xi)` have been omitted. + +.. math:: + + \begin{align} + \min_x \ & c^\top x \\ + \text{s.t.} \ & x\in X. + \end{align} + +If we assume that this problem is feasible and bounded, we can denote by :math:`x^*` a solution of this problem. Then, +we search for a violated constraint ":math:`\xi^\top x \le \xi_0`" for some :math:`(\xi_0,\xi)\in\Xi`. Observe that +a constraint is violated if, and only if, the following holds: + +.. math:: + + \left(\exists(\xi_0,\xi)\in\Xi, \ \xi^\top x^* > \xi_0\right) + \Leftrightarrow + \left(\max_{(\xi_0,\xi)\in\Xi} \xi_0 - \xi^\top x^* < 0\right). + +Thus, the LazyCutCallback automatically solve the optimization problem on the right handside and checks for its value. +A new constraint is added if, and only if, + +.. math:: + \max_{\xi\in\Xi} \xi_0 - \xi^\top x^* < -\varepsilon, + +with :math:`\varepsilon` a given tolerance (by default, :code:`Tolerance::Feasibility`). + + +.. hint:: + + You may also be interested by a tutorial showing how you can implement a simple Benders Decomposition using lazy + cuts. :ref:`See Benders Decomposition tutorial `. + + +.. doxygenclass:: idol::LazyCutCallback \ No newline at end of file diff --git a/_sources/api/classes/universal-callbacks/UserCutCallback.rst.txt b/_sources/api/classes/universal-callbacks/UserCutCallback.rst.txt new file mode 100644 index 00000000..cf10e6e1 --- /dev/null +++ b/_sources/api/classes/universal-callbacks/UserCutCallback.rst.txt @@ -0,0 +1,6 @@ +.. _api_UserCutCallback: + +UserCutCallback +=============== + +.. doxygenclass:: idol::UserCutCallback \ No newline at end of file diff --git a/_sources/api/classes/universal-callbacks/index.rst.txt b/_sources/api/classes/universal-callbacks/index.rst.txt new file mode 100644 index 00000000..e97ddd7e --- /dev/null +++ b/_sources/api/classes/universal-callbacks/index.rst.txt @@ -0,0 +1,8 @@ +Universal Callbacks +=================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/constants/index.rst.txt b/_sources/api/constants/index.rst.txt new file mode 100644 index 00000000..b949e0b4 --- /dev/null +++ b/_sources/api/constants/index.rst.txt @@ -0,0 +1,15 @@ +.. _constants: + +Constants +========= + +Common +^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + tolerances + + diff --git a/_sources/api/constants/tolerances.rst.txt b/_sources/api/constants/tolerances.rst.txt new file mode 100644 index 00000000..d25b2cef --- /dev/null +++ b/_sources/api/constants/tolerances.rst.txt @@ -0,0 +1,6 @@ +.. _api_tolerances: + +Tolerances and Numerics +======================= + +.. doxygenfile:: numericals.h \ No newline at end of file diff --git a/_sources/api/index.rst.txt b/_sources/api/index.rst.txt new file mode 100644 index 00000000..8676a6db --- /dev/null +++ b/_sources/api/index.rst.txt @@ -0,0 +1,12 @@ +.. _api: + +API +=== + +.. toctree:: + :maxdepth: 1 + :glob: + + classes/index + types/index + constants/index diff --git a/_sources/api/types/common/CtrType.rst.txt b/_sources/api/types/common/CtrType.rst.txt new file mode 100644 index 00000000..ab331e89 --- /dev/null +++ b/_sources/api/types/common/CtrType.rst.txt @@ -0,0 +1,6 @@ +.. _api_CtrType: + +CtrType +======= + +.. doxygenenum:: idol::CtrType diff --git a/_sources/api/types/common/VarType.rst.txt b/_sources/api/types/common/VarType.rst.txt new file mode 100644 index 00000000..75c7d75e --- /dev/null +++ b/_sources/api/types/common/VarType.rst.txt @@ -0,0 +1,6 @@ +.. _api_variables_VarType: + +VarType +======= + +.. doxygenenum:: idol::VarType diff --git a/_sources/api/types/common/index.rst.txt b/_sources/api/types/common/index.rst.txt new file mode 100644 index 00000000..8e7da97b --- /dev/null +++ b/_sources/api/types/common/index.rst.txt @@ -0,0 +1,9 @@ +Common +====== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + diff --git a/_sources/api/types/index.rst.txt b/_sources/api/types/index.rst.txt new file mode 100644 index 00000000..64cc0da1 --- /dev/null +++ b/_sources/api/types/index.rst.txt @@ -0,0 +1,16 @@ +.. _types: + +Type List +========= + +Mixed-Integer Programming +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 2 + :glob: + + common/index + universal-callbacks/index + + diff --git a/_sources/api/types/universal-callbacks/CallbackEvent.rst.txt b/_sources/api/types/universal-callbacks/CallbackEvent.rst.txt new file mode 100644 index 00000000..823233be --- /dev/null +++ b/_sources/api/types/universal-callbacks/CallbackEvent.rst.txt @@ -0,0 +1,6 @@ +.. _api_CallbackEvent: + +Events +====== + +.. doxygenenum:: idol::CallbackEvent \ No newline at end of file diff --git a/_sources/api/types/universal-callbacks/index.rst.txt b/_sources/api/types/universal-callbacks/index.rst.txt new file mode 100644 index 00000000..f04d73b4 --- /dev/null +++ b/_sources/api/types/universal-callbacks/index.rst.txt @@ -0,0 +1,9 @@ +Universal Callbacks +=================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + diff --git a/_sources/benchmark/index.rst.txt b/_sources/benchmark/index.rst.txt new file mode 100644 index 00000000..827cf506 --- /dev/null +++ b/_sources/benchmark/index.rst.txt @@ -0,0 +1,13 @@ +.. _benchmark: + +Benchmark +========= + + +* A benchmark for the **Branch-and-Price** implementation is available for the `Generalized Assignment Problem `_. +* A benchmark for the **Branch-and-Bound** implementation is available for the `Knapsack Problem `_ + +.. image:: https://raw.githubusercontent.com/hlefebvr/idol-benchmark-gap/gh-pages/profile.png + +This is a performance profile computed according to :cite:`Dolan2002`. + diff --git a/_sources/developer_guide/build-the-doc.rst.txt b/_sources/developer_guide/build-the-doc.rst.txt new file mode 100644 index 00000000..4d331aef --- /dev/null +++ b/_sources/developer_guide/build-the-doc.rst.txt @@ -0,0 +1,61 @@ +.. highlight:: sh +.. _dev_build_the_doc: + +Build the doc! +============== + +This page explains how to build the documentation on a local machine. + +Dependencies +------------ + +Description +^^^^^^^^^^^ + +The documentation is built using `doxygen`_ and a bunch of other tools, in particular: + +* `doxygen`_ the C++ documentation generator; +* `Sphinx`_ the python documentation generator; +* `sphinx-rtd-theme `_ a Sphinx theme used to render the + HTML version of the documentation; +* `sphinx-sitemap `_ a Sphinx extension + to generate multi-version and multi-language sitemaps.org compliant sitemaps for the HTML version + of a Sphinx documentation; +* `sphinx-copybutton `_ a Sphinx extension which + automatically adds buttons on code-blocks environments to copy its content; +* `Breathe`_ the Sphinx plugin for integrating doxygen outputs into Sphinx. + +For a detailed description on how these tools interact, please refer to `this article `_. + +Installation guide (Ubuntu) +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + sudo apt-get install doxygen # installs the last version of doxygen + + sudo apt-get install python3-sphinx # installs the last version of Sphinx + + sudo apt-get install python3-breathe # installs the last version of Breathe + + pip3 install sphinx-sitemap sphinx-rtd-theme sphinx-copybutton # installs theme and extensions + +Build instructions +------------------ + +By default, CMake automatically creates a ``doc`` target. All you have to do to build the documentation website +is to build this target. For instance, inside a ``build`` directory, the following command can be used. + +:: + + cmake .. && make doc + +Note that you do not need to use ``make`` and use the following generic command. + +:: + + cmake --build . --target doc + +.. _doxygen: https://doxygen.nl/ +.. _Sphinx: https://www.sphinx-doc.org/en/master/ +.. _Breathe: https://github.com/breathe-doc/breathe \ No newline at end of file diff --git a/_sources/developer_guide/index.rst.txt b/_sources/developer_guide/index.rst.txt new file mode 100644 index 00000000..e222b3ee --- /dev/null +++ b/_sources/developer_guide/index.rst.txt @@ -0,0 +1,11 @@ +.. _dev: + +Developer guide +=============== + +.. toctree:: + :maxdepth: 2 + :glob: + + build-the-doc + tests \ No newline at end of file diff --git a/_sources/developer_guide/tests.rst.txt b/_sources/developer_guide/tests.rst.txt new file mode 100644 index 00000000..bd9cfb10 --- /dev/null +++ b/_sources/developer_guide/tests.rst.txt @@ -0,0 +1,91 @@ +.. _tests: + +Unit and integration tests +========================== + +This page explains how to build the unit and integration tests on a local machine. + +Dependencies +------------ + +Tests are managed by the C++ unit testing framework `Catch2 `_. + +When CMake is told to create test targets, it will automatically look for an installation of Catch2 on your +machine. If it cannot be found, CMake will attempt to download Catch2 from its GitHub repository. + + +Installation guide (Ubuntu) +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: shell + + git clone https://github.com/catchorg/Catch2.git # Clone Catch2 repository + + cd Catch2 # go inside the new directory + + cmake -Bbuild -H. -DBUILD_TESTING=OFF # Create install target + + sudo cmake --build build/ --target install # Build and install + + +Build instructions +------------------ + +By default, CMake will not create test targets nor look for Catch2. To tell CMake to generate them, you +need to set the CMake option ``BUILD_TESTS`` to ``YES``. + + +.. admonition:: Example + + The following will tell CMake to create targets for tests. + + .. code-block:: + + cmake -DBUILD_TESTS=YES .. + + For instance, we can now build all the existing tests + + .. code-block:: + + make tests + + and run them. + + .. code-block:: + + ./tests/tests + +Code coverage options +--------------------- + +Code coverage is done via ``gcov``. + +If you want to active code coverage options, you shall set the CMake option ``WITH_TEST_COVERAGE`` to ``YES``. +Note that this only has an effect when ``BUILD_TESTS`` is also set to ``YES``. + +.. admonition:: Example + + The following command will tell CMake to generate targets for tests with code coverage options. + + .. code-block:: + + cmake -DBUILD_TESTS=YES -DWITH_CODE_COVERAGE=YES .. + + Then, you should build and run the tests. + + .. code-block:: + + make tests && ./tests/tests + + Once you are there, you may generate a report to a file called ``coverage.info`` by using ``gcov``. + + .. code-block:: + + lcov --directory . --capture --output-file coverage.info + +Also note that this forces ``g++`` to be used for compiling. + +.. tip:: + + Code coverage reports are also automatically generated at every push action on idol's GitHub repository and + are available on `codecov `_. diff --git a/_sources/examples/bilevel-kkt.rst.txt b/_sources/examples/bilevel-kkt.rst.txt new file mode 100644 index 00000000..81e9426b --- /dev/null +++ b/_sources/examples/bilevel-kkt.rst.txt @@ -0,0 +1,35 @@ +.. _example_bilevel_kkt: + +Bilevel LP-LP (KKT Reformulation) +================================= + +Problem Definition +------------------ + +This example is taken from :cite:`Kleinert2021` and is an LP-LP bilevel problem. + +The problem is formulated as follows: + +.. math:: + + \begin{align} + \min_{x, y} \ & x + 6 y \\ + \text{s.t.} \ & -x + 5y \le 12.5 \\ + & x \ge 0 \\ + & y\in + \begin{array}[t]{l} + \displaystyle \underset{y}{\text{arg min}} \ & -y \\ + \text{s.t.} \ & 2 x - y \ge 0, \\ + & -x - y \ge -6, \\ + & -x + 6 y \ge -3, \\ + & x + 3 y \ge 3. + \end{array} + \end{align} + +KKT Reformulation with idol +--------------------------- + +In this example, we show how to model this LP-LP bilevel problem and how to derive its KKT reformulation. + +.. literalinclude:: ../../examples/bilevel-optimization/kkt.example.cpp + :language: cpp diff --git a/_sources/examples/bilevel-mibs.rst.txt b/_sources/examples/bilevel-mibs.rst.txt new file mode 100644 index 00000000..231c796a --- /dev/null +++ b/_sources/examples/bilevel-mibs.rst.txt @@ -0,0 +1,36 @@ +.. _example_mibs: + +Bilevel MILP-MILP (MibS) +======================== + +Problem Definition +------------------ + +This example is taken from :cite:`Moore1990` and is a bilevel problem where the upper level is a mixed-integer linear program (MILP) and the lower level is a mixed-integer linear program (MILP). + +The problem is formulated as follows: + +.. math:: + + \begin{align} + \min_{x, y} \ & -x + -10 y \\ + \text{s.t.} \ & x \in \mathbb Z_+ \\ + & y\in + \begin{array}[t]{l} + \displaystyle \underset{y}{\text{arg min}} \ & y \\ + \text{s.t.} \ & -25 x + 20 y \leq 30, \\ + & x + 2 y \leq 10, \\ + & 2 x - y \leq 15, \\ + & 2 x + 10 y \geq 15, \\ + & y \geq 0, \\ + & y \in \mathbb Z_+. + \end{array} + \end{align} + +Implementation with idol +------------------------ + +In this example, we show how to model this MILP-MILP bilevel problem and how to solve it using the MibS solver. + +.. literalinclude:: ../../examples/bilevel-optimization/mibs.example.cpp + :language: cpp diff --git a/_sources/examples/facility-location-problem.rst.txt b/_sources/examples/facility-location-problem.rst.txt new file mode 100644 index 00000000..c81328bc --- /dev/null +++ b/_sources/examples/facility-location-problem.rst.txt @@ -0,0 +1,37 @@ +.. _example_flp: + +Facility Location Problem (Branch-and-Bound) +============================================ + +Problem Definition +------------------ + +We consider the capacitated Facility Location Problem (FLP). +Given a set of potential facility locations :math:`V_1` and a set of customers :math:`V_2`, the goal is to select +a subset of facility location to activate in order to serve all customers' demand, while minimizing the total cost. + +Each facility :math:`i\in V_1` has an opening cost :math:`f_i` and a maximum capacity :math:`q_i`. +Each customer :math:`j\in V_2` has a demand :math:`d_j`. +The unitary cost for serving customer :math:`j\in V_2` from facility :math:`i\in V_1` is :math:`t_{ij}`. + +We model the capacitated FLP with the MILP + +.. math:: + + \begin{align*} + \min_{x,y} \ & \sum_{i\in V_1} f_i x_i + \sum_{i\in V_1} \sum_{j\in V_2} t_{ij} y_{ij} \\ + \text{s.t.} & \sum_{j\in V_2} d_j y_{ij} \le q_i && i\in V_1 \\ + & \sum_{i\in V_1} y_{ij} = 1 && j\in V_2 \\ + & y_{ij} \le x_i && i\in V_1, j\in V_2 \\ + & x_i \in \{0,1\} && i\in V_1 \\ + & y_{ij} \in \{0,1\} && i\in V_1, j\in V_2. + \end{align*} + +Implementation with idol +------------------------ + +In this example, we show how to model the capacitated FLP with idol and how to solve it using a "hand-crafted" +branch-and-bound algorithm. + +.. literalinclude:: ../../examples/mixed-integer-optimization/facility.example.cpp + :language: cpp diff --git a/_sources/examples/generalized-assignment-problem-bap.rst.txt b/_sources/examples/generalized-assignment-problem-bap.rst.txt new file mode 100644 index 00000000..ab30e54e --- /dev/null +++ b/_sources/examples/generalized-assignment-problem-bap.rst.txt @@ -0,0 +1,43 @@ +.. _example_gap_bap: + +Generalized Assignment Problem (Branch-and-Price) +================================================= + +Problem Definition +------------------ + +We consider the Generalized Assignment Problem (GAP). +Given a set of :math:`m` agents and :math:`n` jobs, the goal is to assign each job to exactly one agent in such a +way that the total cost is minimized, while respecting the capacity constraints of each agent. + +Each agent :math:`i\in\{1,\dotsc,m\}` has a capacity :math:`C_i`. +Each job :math:`j\in\{1,\dotsc,n\}` has a resource consumption :math:`r_{ij}` and a cost :math:`c_{ij}` when assigned to agent :math:`i`. + +We model the GAP with the following binary linear program: + +.. math:: + + \begin{align*} + \min_{x} \ & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} & \sum_{j=1}^n r_{ij} x_{ij} \le C_i && i=1,\dotsc,m \\ + & \sum_{i=1}^m x_{ij} = 1 && j=1,\dotsc,n \\ + & x_{ij} \in \{0,1\} && i=1,\dotsc,m, j=1,\dotsc,n. + \end{align*} + +Decomposition +------------- + +In this example, we use Dantzig-Wolfe decomposition to break down the problem into a master problem and subproblems. The master problem coordinates the assignment of jobs to agents, while the subproblems handle the capacity constraints for each agent individually. + +1. **Master Problem:** The master problem is responsible for ensuring that each job is assigned to exactly one agent. It maintains the overall objective of minimizing the total cost. + +2. **Subproblems:** Each subproblem corresponds to an agent and ensures that the agent's capacity constraints are respected. The subproblems are solved independently and their solutions are used to update the master problem. + +Implementation with idol +------------------------ + +In this example, we show how to model the Generalized Assignment Problem with idol and how to solve it using a +Dantzig-Wolfe decomposition within a branch-and-bound framework, i.e., a branch-and-price algorithm. + +.. literalinclude:: ../../examples/mixed-integer-optimization/assignment-bap.example.cpp + :language: cpp diff --git a/_sources/examples/generalized-assignment-problem-penalty-bap.rst.txt b/_sources/examples/generalized-assignment-problem-penalty-bap.rst.txt new file mode 100644 index 00000000..7f48201a --- /dev/null +++ b/_sources/examples/generalized-assignment-problem-penalty-bap.rst.txt @@ -0,0 +1,45 @@ +Generalized Assignment Problem (Column Generation + Penalty Method) +=================================================================== + +Problem Definition +------------------ + +We consider the Generalized Assignment Problem (GAP) already studied in the :ref:`Branch-and-Price example `. + +In this example, we solve the continuous relaxation of the GAP using a penalty method and column generation. + +First, we consider the continuous relaxation of the GAP: + +.. math:: + + \begin{align*} + \min_{x} \ & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} & \sum_{j=1}^n r_{ij} x_{ij} \le C_i && i=1,\dotsc,m \\ + & \sum_{i=1}^m x_{ij} = 1 && j=1,\dotsc,n \\ + & x_{ij} \in [0,1] && i=1,\dotsc,m, j=1,\dotsc,n. + \end{align*} + +Then, we introduce penalty parameters :math:`\rho_j` to penalize the constraints :math:`\sum_{i=1}^m x_{ij} = 1` in the objective function. + +.. math:: + + \begin{align*} + \min_{x} \ & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} + \sum_{j=1}^n \rho_j \left| \sum_{i=1}^m x_{ij} - 1 \right| \\ + \text{s.t.} & \sum_{j=1}^n r_{ij} x_{ij} \le C_i && i=1,\dotsc,m \\ + & x_{ij} \in [0,1] && i=1,\dotsc,m, j=1,\dotsc,n. + \end{align*} + +Throughout the optimization process, we update the penalty parameters :math:`\rho_j` iteratively to enforce the feasibility of the solution. + +Finally, we solve the continuous relaxation of the GAP using column generation to generate new columns (variables) and improve the objective function. +That is, we iteratively solve the master problem and the subproblems to generate new columns and update the master problem. + + +Implementation with idol +------------------------ + +In this example, we show how to model the Generalized Assignment Problem with idol and how to solve it using a +Dantzig-Wolfe decomposition within a branch-and-bound framework, i.e., a branch-and-price algorithm. + +.. literalinclude:: ../../examples/mixed-integer-optimization/assignment-penalty-bap.example.cpp + :language: cpp diff --git a/_sources/examples/index.rst.txt b/_sources/examples/index.rst.txt new file mode 100644 index 00000000..edc1c345 --- /dev/null +++ b/_sources/examples/index.rst.txt @@ -0,0 +1,50 @@ +.. _examples: + +Examples +======== + +Mixed-Integer Programming +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + + knapsack-problem + +Branch-and-Bound +^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + + facility-location-problem + +Column Generation and Branch-and-Price +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + + generalized-assignment-problem-bap + generalized-assignment-problem-penalty-bap + +Bilevel Optimization +^^^^^^^^^^^^^^^^^^^^ + + +.. toctree:: + :maxdepth: 1 + + bilevel-kkt + bilevel-mibs + + +Robust Optimization +^^^^^^^^^^^^^^^^^^^ + + +.. toctree:: + :maxdepth: 1 + + two-stage-robust-facility-location-problem + diff --git a/_sources/examples/knapsack-problem.rst.txt b/_sources/examples/knapsack-problem.rst.txt new file mode 100644 index 00000000..bc54d339 --- /dev/null +++ b/_sources/examples/knapsack-problem.rst.txt @@ -0,0 +1,30 @@ +Knapsack Problem (HiGHS) +========================= + +Problem Definition +------------------ + +We consider the Knapsack Problem (KP). +Given a set of :math:`n` items, each of which having a weight and a profit, the goal is to +select of subset of items such that the total weight does not exceed a given capacity and the total profit is maximized. + +For each item :math:`j\in\{1,\dotsc,n\}`, we denote its weight by :math:`w_j` and its profit by :math:`p_j`. +The maximum capacity of the knapsack is :math:`C`. + +We model the KP with the following binary linear program: + +.. math:: + + \begin{align*} + \max_{x} \ & \sum_{j=1}^n p_j x_j \\ + \text{s.t.} & \sum_{j=1}^n w_j x_j \le C \\ + & x_j \in \{0,1\} && j=1,\dotsc,n. + \end{align*} + +Implementation with idol +------------------------ + +In this example, we show how to model the Knapsack Problem with idol and how to solve it using the HiGHS solver. + +.. literalinclude:: ../../examples/mixed-integer-optimization/knapsack.example.cpp + :language: cpp diff --git a/_sources/examples/two-stage-robust-facility-location-problem.rst.txt b/_sources/examples/two-stage-robust-facility-location-problem.rst.txt new file mode 100644 index 00000000..508ee29d --- /dev/null +++ b/_sources/examples/two-stage-robust-facility-location-problem.rst.txt @@ -0,0 +1,52 @@ +.. _example_robust_flp_ccg: + +Two-Stage Robust Facility Location Problem (CCG) +================================================ + +Problem Description +------------------- + +We consider a robust version of the capacitated Facility Location Problem (FLP). +Given a set of potential facility locations :math:`V_1` and a set of customers :math:`V_2`, the goal is to select a subset of facility locations +to activate in order to serve all customers' demand, while minimizing the total cost. +This version introduces uncertainty in the customers' demands. + +Note that there is also an example for the :ref:`deterministic version of the FLP using Column Generation `. + +Each facility :math:`i\in V_1` has an opening cost :math:`f_i` and a maximum capacity :math:`q_i`. +Each customer :math:`j\in V_2` has a demand :math:`d_j`. +The unitary cost for serving customer :math:`j\in V_2` from facility :math:`i\in V_1` is :math:`t_{ij}`. +The uncertainty in customer demands is controlled by a parameter :math:`\Gamma`. + +In this robust variant, we consider that the demands are uncertain and can be expressed as :math:`d_j(\xi) = d_j(1 + p\xi_j)` +with :math:`p` being the maximum increase in demand and :math:`\xi` being an unknown vector taken in the uncertainty set + +.. math:: + + \Xi := \left\{ \xi\in[ 0, 1 ]^{|V_2|} : \sum_{j\in V_2} \xi_j \le \Gamma \right\}. + +We model the two-stage robust FLP as + +.. math:: + + \min_{x\in \{0,1\}^{|V_1|}} \ \left\{ \sum_{i\in V_1} f_i x_i + \max_{\xi\in \Xi} \ \min_{y\in Y(x,\xi)} \ \sum_{i\in V_1} \sum_{j\in V_2} t_{ij} y_{ij} \right\} + +where :math:`Y(x,\xi)` is the set of feasible solutions for the second stage problem, given the first stage solution :math:`x` and the realization :math:`\xi` of the uncertain demand vector. +It is defined as the set of vectors :math:`y\in \mathbb{R}^{|V_1|\times|V_2|}` that satisfy the following constraints + +.. math:: + + \begin{align*} + & \sum_{i\in V_1} y_{ij} = d_j(\xi) && j\in V_2, \\ + & \sum_{j\in V_2} y_{ij} \le q_i x_i && i\in V_1, \\ + & y_{ij} \ge 0 && i\in V_1, j\in V_2. + \end{align*} + +Implementation with idol +------------------------ + +We now show how to implement the two-stage robust FLP with idol and how to solve it using a CCG algorithm. +Here, the "adversarial problem" is solved by calling the bilevel solver MibS. + +.. literalinclude:: ../../examples/robust-optimization/robust_ccg.example.cpp + :language: cpp diff --git a/_sources/faq/index.rst.txt b/_sources/faq/index.rst.txt new file mode 100644 index 00000000..2c92ff37 --- /dev/null +++ b/_sources/faq/index.rst.txt @@ -0,0 +1,10 @@ +.. _faq: + +FAQ +--- + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/faq/mosek-and-eigen.rst.txt b/_sources/faq/mosek-and-eigen.rst.txt new file mode 100644 index 00000000..f54b1354 --- /dev/null +++ b/_sources/faq/mosek-and-eigen.rst.txt @@ -0,0 +1,83 @@ +.. _mosek_and_socp: + +Why is Eigen necessary to solve QPs and QCQPs with Mosek? +========================================================= + +In Short +-------- + +The interface of idol is based on quadratic expressions like + +.. math:: + + \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q_{jk}^ix_jx_k \le b_i. + +The C++ interface of Mosek, instead, is based on "conic expressions" like + +.. math:: + + (x_0, \textbf{Fx}) \in \mathcal Q^n, + +where :math:`\mathcal Q^n` denotes the second-order cone and :math:`F` is some matrix related to :math:`Q^i`. + +In order to make the conversion between the Mosek interface and +the idol interface (for instance, computing the matrix :math:`F`), +one needs to compute an eigen value decomposition. +This is automatically done by idol using `Eigen `_. +This is why Eigen is necessary if one wants to use Mosek with idol to solve QPs or QCQPs. + +Detailed Answer +--------------- + +Consider the quadratic expression + +.. math:: + + \sum_{j=1}^n a_{ij}x_j + \sum_{j=1}^n\sum_{k=1}^n q_{jk}^ix_jx_k \le b_i. + +It can be written as + +.. math:: + + a_{(i)}^\top x + x^\top Q^i x \le b_i. + +The first task is to compute an eigen value decomposition of :math:`Q^i`, i.e., +to find matrices :math:`L` and :math:`D` such that :math:`Q^i = L D L^\top` +and :math:`D` is a diagonal matrix containing the eigen values of :math:`Q^i`. + +If there are more than two negative eigen values, the constraint is not convex and an exeception is thrown. + +Otherwise, we compute :math:`F` and :math:`N` so that :math:`x^\top Q^i x = \lVert Fx \rVert_2^2 + x^\top N x`. +This is done by setting :math:`F = \sqrt{D^+} L^\top` where :math:`D^+` is :math:`D` with the negative eigen values replaced by zero, +and :math:`N = L D^- L^\top`. + +Hence, we have that the constraint is expressed as + +.. math:: + + \lVert Fx \rVert_2^2 + x^\top N x \le b_i - a_{(i)}^\top x. + +If :math:`N = 0`, it can be written as + +.. math:: + + \begin{align} + & \lVert Fx \rVert_2^2 \le b_i - a_{(i)}^\top x \\ + \iff & (.5, b_i - a_{(i)}^\top x, Fx) \in\mathcal Q^{n+2}_r, + \end{align} + +where :math:`\mathcal Q^{n+2}_r` denotes the rotated second-order cone. + +Otherwise, if :math:`N` has one non-zero entry, say :math:`n_{ij}`. +Then, it must be that :math:`a_{(i)} = 0` and :math:`b_i \le 0` for the constraint to be +converted by idol. Under this assumption, the constraint can be written as + +.. math:: + + \begin{align} + & \lVert Fx \rVert_2^2 + \sqrt{-b_i}^2 \le n_{ij} x_i x_j \\ + \iff & (.5 n_{i,j} x_i, x_j, Fx, \sqrt{-b_i}) \in\mathcal Q^{n+1}_r, + \end{align} + +where it is assumed that :math:`n_{i,j} x_{i}x_{j} \ge 0` holds +(for now, a warning is printed to enlight this expectation). \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..4e34fbb0 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,181 @@ +.. raw:: html + +
+ +

A C++ framework for optimization

+ +

+ Idol is a powerful and flexible library designed to help you build new mathematical optimization algorithms and solve more and more challenging problems efficiently. +

+ + + Get started now +   + To installation guidelines + + +
+ +What Is Idol? +------------- + +Idol is a C++ library for **mathematical optimization** and complex decision making. It is designed to help you build new +algorithms easily for solving more and more challenging problems. It is a versatile and powerful tool that can be +used to solve a wide range of optimization problems, including mixed-integer linear programming (MILP), quadratically constrained +problems (MIQCQP and MIQP), bilevel problems (BO), robust optimization problems (RO and ARO) and many more. + +It is designed to be easy to use and to integrate with other software, so that you can use it +to build new algorithms and solve new problems without having to start from scratch. For instance, here is a piece of +code which create a Branch-and-Price algorithm. + +.. code:: + + const auto branch_and_price = branch_and_bound + column_generation; + +Here, `branch_and_bound` and `column_generation` are two objects which are +combined to create a new algorithm, `branch_and_price`, which can be instantiated and executed. + +Getting Started With Idol +------------------------- + +If you are new to idol, be sure to have a look at our :ref:`tutorials `. If you want to get a fast hands-on +start, have a look at our :ref:`local installation guideline `. It is the easiest installation process +one could think of since it automatically downloads the latest version of idol, and installs it locally in a sub-folder. +It's really a mater of seconds before you can start using idol. + +.. admonition:: Example + + Idol has a user-friendly interface which should look natural to people working in optimization. For instance, + here is how one solves a Knapsack Problem using the `Gurobi `_ solver. + + .. code:: cpp + + using namespace idol; + + const unsigned int n_items = 5; + const double[] profit = { 40., 50., 100., 95., 30., }; + const double[] weight = { 2., 3.14, 1.98, 5., 3., }; + const double capacity = 10.; + + Env env; + + Model model(env); + + const auto x = model.add_vars(Dim<1>(n_items), 0., 1., Binary, "x"); + + model.add_ctr(idol_Sum(j, Range(n_items), weight[j] * x[j]) <= capacity); + + model.set_obj_expr(idol_Sum(j, Range(n_items), -profit[j] * x[j]); + + model.use(Gurobi()); + + model.optimize(); + +Is This a MIP Solver? +--------------------- + +The idol library is not a MIP solver in itself. Indeed, it typically needs to call external +solvers (e.g., `GLPK `_, `Gurobi `_ or many others) +as a sub-routine of more complex algorithmic schemes (e.g., within a Branch-and-Price scheme). + +The idea is to work hand in hand with existing fine-tuned and well-engineered optimization +software to enhance their possibilities. By doing so, we aim at solving larger and more complex problems than what is currently possible, +or even problems for which theoretical evidence indicate that no MIP of reasonable size can model them completely (e.g., :math:`\Sigma_i^P`-hard problems). + +Even though idol is not a MIP solver, it can be used to solve standalone LPs, QPs, MILPs, MIQPs, and MIQCQPs through the +many external solvers it interfaces with. +A clear advantage of using idol to solve these problems is that it offers a unified and common interface to every solver. +Thus, you can write your code once and test it with different solvers! +The following solvers are currently supported by idol + +* `Gurobi `_ +* `Mosek `_ +* `GLPK `_ +* `HiGHS `_ +* `COIN-OR/Osi `_ which then gives you access to CPLEX, Symphony or any Osi compatible solver. + +Current Features +---------------- + +Mixed-Integer Optimization +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Interfacing External Optimization Solvers +""""""""""""""""""""""""""""""""""""""""" + +The idol library can be used to interface external solvers like `GLPK `_ +or `Gurobi `_ to solve standalone LPs, QPs, MILPs, MIQPs, and MIQCQPs. + +It also provides classical callbacks one would need to implement when solving hard problems like generating user cuts +or lazy constraints. Simply give idol the separation model and let it handle the rest. + +Branch-and-Bound Algorithms +""""""""""""""""""""""""""" + +Idol can be used to create a custom branch-and-bound scheme very easily in which virtually anything can be tweaked. + +* **Node-agnostic:** The B&B algorithm can work with any node type as long as the user properly + defines how nodes must be updated. A default node type is already implemented for classical variable branching. This + node type can also be inherited, e.g., to enrich the information carried out from each parent node to its children. +* **Customizable branching rules:** The default branching rules include: most infeasible, least infeasible, first + infeasible found, uniformly random, strong branching (with phases) and pseudo-cost branching. The user can create its + own branching rule if needed. +* **Customizable node selection rules:** The default node selection rules include: best estimate, best bound, worst bound, + depth first, breadth first. The user can create its own node selection rule if needed. +* **Callbacks:** The user can specify its own callback to locally or globally modify a node's problem, submit heuristic + solutions, or influence the execution of the overall tree search. +* **Sub-tree exploration**. The B&B algorithm supports sub-trees exploration to reach valid solutions to the original + problem as quick as possible. + +Column Generation and Dantzig-Wolfe Decomposition +""""""""""""""""""""""""""""""""""""""""""""""""" + +Idol can be used to build and custom CG algorithms with the following features. + +* **Infeasible master problem procedures:** Idol can handle infeasible master problems by resorting to Farkas pricing or + by adding artificial variables to the original problem (if this fails, idol will automatically switch to pure phase I + so as to exactly prove infeasibility). +* **Automatic pool clean up:** If the master problem contains too many variables, they can be automatically removed. + This behavior is controlled by user parameters. +* **Stabilization via dual price smoothing:** The CG procedure can be stabilized using dual price smoothing controlled + by user inputs. Default implementation include `Wentges (1997) `_ and + `Neame (2000) `_. +* **Parallel pricing:** Each pricing problem can be solved in parallel. +* **Nested column generation:** A key idea of idol is that every optimizer is seen as a black-box to solve a given optimization model. + As such, a CG algorithm can easily be "plugged in" any algorithmic phase. For instance, solving the pricing of + a CG algorithm can be done by yet another CG algorithm. + +Bilevel Optimization +^^^^^^^^^^^^^^^^^^^^ + +Interfacing External Optimization Solvers +""""""""""""""""""""""""""""""""""""""""" + +Currently, idol can interface with the mixed-integer bilevel solver `coin-or/MibS `_. + +Robust Optimization +^^^^^^^^^^^^^^^^^^^^ + +Column-and-Constraint Generation +"""""""""""""""""""""""""""""""" + +Idol can be used to build and custom CCG algorithms with the following features. + +* **Separation Sub-Routine**: Different separation strategies are implemented in idol to solve the separation problem in + the CCG algorithm. Most importantly, any bilevel solver can be used to solve the max-min separation problem. If needed, the user can also easily implement its own separation strategy. +* **Trust Region Stabilization**: The CCG algorithm can be stabilized using trust region if the first-stage decisions are binary. + +Table of Contents +----------------- + +.. toctree:: + :maxdepth: 1 + + installation/index + tutorials/index + examples/index + api/index + faq/index + benchmark/index + developer_guide/index + references diff --git a/_sources/installation/global-installation/index.rst.txt b/_sources/installation/global-installation/index.rst.txt new file mode 100644 index 00000000..6c84c6cf --- /dev/null +++ b/_sources/installation/global-installation/index.rst.txt @@ -0,0 +1,97 @@ +.. _basics_installation: + +.. role:: bash(code) + :language: bash + +Global Installation +=================== + +This page is dedicated to the local installation of idol. It is thought for more advanced users who want to install +idol globally on their computer (e.g., in `/usr/lib`). +If you simply want to "try out" idol, we advise you to opt for a :ref:`local installation `. +The installation process is managed by the CMake build system. You will therefore need to have it +installed on your computer. + +The installation process follows the classical CMake build process "configure, build, install". + +Configure +--------- + +The first step is to create a :bash:`build` directory. +This is where the library will be compiled before being it is installed (i.e., copied) on your system. + +.. code-block:: bash + + mkdir build + cd build + +Then, you should call CMake to configure the build process. +It is at this time that we let CMake look for the necessary dependencies such as, e.g., external optimization solvers. +By default, running CMake without options will cause idol to be built without any external solver. Note that options +should be specified as follows: + +.. code-block:: bash + + cmake -D= .. + +A list of **all possible options** can be found on :ref:`this page `. + +.. admonition:: Example for Gurobi + + Here is an example of a possible CMake command which will create the necessary targets for configuring idol to interface Gurobi. + + .. code-block:: bash + + cmake -DUSE_GUROBI=YES .. + + Note that this example assumes that your environment variable :bash:`GUROBI_HOME` has been correctly configured + (see `this official Gurobi page `_). + + If you want to specify the path to the Gurobi installation folder, you can use the :bash:`GUROBI_DIR` option. + + .. code-block:: bash + + cmake -DUSE_GUROBI=YES -DGUROBI_DIR=/path/to/gurobi/install/dir .. + + +Build +----- + +Now that the build process has been configured, we can build idol by running the following command. + +.. code-block:: bash + + make idol + +This will compile the idol C++ library, and make it ready to be installed (i.e., copied) on your computer. + +If you encounter any error at this stage, please, do not hesitate to contact us on our `GitHub page `_. + +Install +------- + +To install idol on your computer, run the following command. + +.. code-block:: bash + + sudo make install + +.. hint:: + + Here, you need superuser rights to install idol globally. If you want to install idol on a specific folder, + you may also use the :bash:`CMAKE_INSTALL_PREFIX` CMake option to change the destination folder. + + .. code-block:: bash + + cmake -CMAKE_INSTALL_PREFIX=/my/custom/installation/folder .. + make install + + +Table of Contents +----------------- + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/installation/global-installation/linking.rst.txt b/_sources/installation/global-installation/linking.rst.txt new file mode 100644 index 00000000..fffca91f --- /dev/null +++ b/_sources/installation/global-installation/linking.rst.txt @@ -0,0 +1,53 @@ +.. _linking: + +.. role:: bash(code) + :language: bash + +Linking Your C++ Project +======================== + +If you have installed idol globally, you can link your C++ project with idol using CMake. +Note that if idol was locally installed, you should refer to the :ref:`local installation guideline `, +this page is **only for global installation**. + +Idol is built with and for CMake (even though it is still possible to link using :bash:`Makefile` or pure :bash:`gcc`, :bash:`clang`, ...). + +Here is a minimal :bash:`CMakeLists.txt` which creates a new executable target linked with idol. + +.. code-block:: cmake + + cmake_minimum_required(VERSION 3.22) + project(my_project) + + set(CMAKE_CXX_STANDARD 17) + + add_executable(my_target main.cpp) + + find_package(idol REQUIRED) ## Here, we search for the installed library idol + + target_link_library(my_target PUBLIC idol) ## Here, we ask CMake to link with idol + +Note that you do not need to link with any external solver if idol was already linked with one. + +The following :bash:`main.cpp` is then a minimal example. + +.. code-block:: cpp + + #include + #include + + int main(int t_argc, const char** t_argv) { + + using namespace idol; + + Env env; + + Model model(env); + + const auto x = model.add_var(0., 1., Binary, "x"); + + // ... + + return 0; + } + diff --git a/_sources/installation/index.rst.txt b/_sources/installation/index.rst.txt new file mode 100644 index 00000000..6b6e2717 --- /dev/null +++ b/_sources/installation/index.rst.txt @@ -0,0 +1,21 @@ +.. _installation: + +Installation +============ + +You are here on the installation guidelines. This page will guide through the installation process of idol. + +There are two ways to install idol: + +* :ref:`A local installation ` lets CMake automatically download and install idol a sub-folder of your + CMake project. This is the easiest way to get started with idol. +* :ref:`A global installation ` installs idol globally on your computer (e.g., in `/usr/lib`). + +.. toctree:: + :hidden: + :maxdepth: 1 + :glob: + + local_installation + global-installation/index + options diff --git a/_sources/installation/local_installation.rst.txt b/_sources/installation/local_installation.rst.txt new file mode 100644 index 00000000..3cb98df8 --- /dev/null +++ b/_sources/installation/local_installation.rst.txt @@ -0,0 +1,81 @@ +.. _installation_local: + +.. role:: bash(code) + :language: bash + +Local Installation +================== + +This page is dedicated to the local installation of idol. This is the easiest way to get your project working with +idol without installing it globally on your computer. +If you want to install idol globally, please read our :ref:`global installation guide `. + +The idea behind local installation is to let CMake download and manage the installation of idol in a sub-folder of your +project. This is done by using the CMake :bash:`FetchContent_*` directives. + +We provide here a minimal :bash:`CMakeLists.txt`. + +.. code-block:: cmake + + cmake_minimum_required(VERSION 3.23) + project(my_project) + + set(CMAKE_CXX_STANDARD 17) + + include(FetchContent) + + # Define your idol CMake options here + set(USE_GUROBI YES) # For instance, here, we specify that Gurobi will be used by idol + + # Tell CMake which version of idol you desire + FetchContent_Declare( + idol + GIT_REPOSITORY https://github.com/hlefebvr/idol.git + GIT_TAG origin/main + ) + + # Ask CMake to download idol and install it to a sub-folder + FetchContent_MakeAvailable(idol) + + # Normal executable definition + add_executable(my_target main.cpp) + + # Link your CMake target with idol as classically done + target_link_libraries(my_target PUBLIC idol) + +By default, CMake will download the latest version of idol. However, you can also explicitly specify the desired version +of idol you want to use by setting the :bash:`GIT_TAG` variable in the :bash:`FetchContent_Declare` function to the specific +version, e.g., :bash:`v0.2.4-alpha`. + +.. hint:: + + As you can see in the above example, some options must be set to tell CMake to look for external solvers. Here, we + specify that Gurobi will be used by idol. You can, of course, add other solvers such as Mosek or GLPK. + + This is done with the :bash:`set` CMake function. For instance, to set the option :bash:`MY_OPTION` to the + value :bash:`MY_VALUE`. You should add :code:`set(MY_OPTION MY_VALUE)` to your :bash:`CMakeLists.txt` file. + + A list of **all possible options** can be found on :ref:`this page `. + +Then, here is a starting :bash:`main.cpp`. + +.. code-block:: cpp + + #include + #include + + int main(int t_argc, const char** t_argv) { + + using namespace idol; + + Env env; + + Model model(env); + + const auto x = model.add_var(0., 1., Binary, "x"); + + // ... + + return 0; + } + diff --git a/_sources/installation/options.rst.txt b/_sources/installation/options.rst.txt new file mode 100644 index 00000000..83689086 --- /dev/null +++ b/_sources/installation/options.rst.txt @@ -0,0 +1,202 @@ +.. _cmake_options: + +.. role:: bash(code) + :language: bash + +List of CMake Options +===================== + +This page contains a list of all CMake options that can be used to configure idol. In particular, this is useful to +link idol with external solvers. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Linking with External Solvers +----------------------------- + +Gurobi (Commercial Solver) +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with Gurobi, you will need to pass the :bash:`USE_GUROBI` CMake option with value :bash:`YES`. + +By default, CMake will look for Gurobi inside the folder indicated by the environment variable :bash:`GUROBI_HOME` +(see `this official Gurobi page `_). +Note that it is also possible to pass the CMake option :bash:`GUROBI_DIR=/path/to/gurobi/install/dir` in order to specify +another directory to look for Gurobi. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with Gurobi. + + .. code-block:: bash + + cmake -DUSE_GUROBI=YES -DGUROBI_DIR=/path/to/gurobi/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_GUROBI YES) + set(GUROBI_DIR /path/to/gurobi/install/dir) + + +Mosek (Commercial Solver) +^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with Mosek, you will need to pass the :bash:`USE_MOSEK` CMake option with value :bash:`YES`. + +By default, CMake will look for Mosek inside the folder indicated by the environment variable :bash:`MOSEK_HOME`. +Note that it is also possible to pass the CMake option :bash:`MOSEK_DIR=/path/to/mosek/install/dir` in order to specify +another directory to look for Mosek. + +Note that :bash:`MOSEK_HOME` (or equivalently :bash:`MOSEK_DIR`) should point to the Mosek installation folder where +folders :bash:`h` and :bash:`bin` can be found. For instance, :bash:`MOSEK_HOME=/home//mosek/10.0/tools/platform/linux64x86`. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with Mosek. + + .. code-block:: bash + + cmake -DUSE_MOSEK=YES -DMOSEK_DIR=/path/to/mosek/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_MOSEK YES) + set(MOSEK_DIR /path/to/mosek/install/dir) + +.. attention:: + + If you intend to use Mosek for solving QPs or SOCPs, please :ref:`read this `. + +GLPK (Open-Source Solver) +^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with GLPK, you will need to pass the :bash:`USE_GLPK` CMake option with value :bash:`YES`. + +By default, CMake will look for GLPK inside the folder indicated by the environment variable :bash:`GLPK_HOME` as well +as in the default installation folders :bash:`/usr/include` and :bash:`/usr/lib`. +Note that it is also possible to pass the CMake option :bash:`GLPK_DIR=/path/to/glpk/install/dir` in order to specify +another directory to look for GLPK. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with GLPK. + + .. code-block:: bash + + cmake -DUSE_GLPK=YES -DGLPK_DIR=/path/to/glpk/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_GLPK YES) + set(GLPK_DIR /path/to/glpk/install/dir) + + +HiGHS (Open-Source Solver) +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To link with GLPK, you will need to pass the :bash:`USE_HIGHS` CMake option with value :bash:`YES`. + +By default, CMake will look for HIGHS inside the default installation folders :bash:`/usr/include` and :bash:`/usr/lib`. +Note that it is also possible to pass the CMake option :bash:`HIGHS_DIR=/path/to/highs/install/dir` in order to specify +another directory to look for GLPK. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with GLPK. + + .. code-block:: bash + + cmake -DUSE_HIGHS=YES -DHIGHS_DIR=/path/to/glpk/install/dir .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: bash + + set(USE_HIGHS YES) + set(HIGHS_DIR /path/to/glpk/install/dir) + + +Building Examples +----------------- + +:ref:`Examples :` can be found at the root level of the idol repository, inside the directory ``examples``. + +By default, CMake will not generate targets to build these example. To tell CMake to generate these, you +need to set the CMake option ``BUILD_EXAMPLE`` to ``YES``. + +.. admonition:: Example + + The following will tell CMake to create targets for examples. + + .. code-block:: + + cmake -DBUILD_EXAMPLES=YES .. + + For instance, we can now build the Knapsack Problem example, + + .. code-block:: + + make example_knapsack + + and run it. + + .. code-block:: + + cd examples && ./example_knapsack + +Other optional dependencies +--------------------------- + +Using martinus/robin-hood-hashing hash map +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Internally, idol uses unordered maps (also called hash maps). +Unfortunately, the default :code:`std` implementation is not the best choice when +it comes to performance. To avoid this, if found relevant, users can tell idol to use the hash-map implementation of +`martinus/robin-hood-hashing `_. It's actually a header-only library, so +all you have to do is to tell CMake where the :code:`robin_hood.hpp` file is. This is done through the CMake option +:code:`ROBINHOOD_DIR=/path/to/robin_hood/folder` together with :code:`USE_ROBINHOOD=YES`. + +Note that, if :code:`ROBINHOOD_DIR` is not specified, :code:`robin_hood.hpp` is searched for in :code:`/usr/include`, +:code:`/usr/include/robin_hood/`, :code:`/usr/local/include/`, :code:`/usr/local/include/robin_hood/` and in the path +stored in the environment variable :code:`ROBINHOOD_HOME`. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with martinus's robin_hood hash map + implementation. + + .. code-block:: + + cmake -DUSE_ROBINHOOD=YES -DROBINHOOD_DIR=/path/to/robin_hood/folder .. + +Using Eigen +^^^^^^^^^^^ + +Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms. +It is internally used by idol for some of its functionalities. In particular, this is *necessary* for solving QPs and SOCPs +with the Mosek solver. + +Since Eigen is a header-only library, all you have to do is to tell CMake where the :code:`Eigen` folder is. This is done +through the CMake option :code:`EIGEN_DIR=/path/to/eigen/folder` together with :code:`USE_EIGEN=YES`. + +.. admonition:: Example + + The following will create an :bash:`install` target which will install idol with Eigen. + + .. code-block:: + + cmake -DUSE_EIGEN=YES -DEIGEN_DIR=/path/to/eigen/folder .. + +Building Unit and Integration Tests +----------------------------------- + +To build tests for idol, please refer to this :ref:`developer page `. \ No newline at end of file diff --git a/_sources/references.rst.txt b/_sources/references.rst.txt new file mode 100644 index 00000000..c8779726 --- /dev/null +++ b/_sources/references.rst.txt @@ -0,0 +1,7 @@ +References +========== + +The implementation of idol is based on a lot of scientific publications. Here is a selected subset. + +.. bibliography:: + :all: diff --git a/_sources/tutorials/bilevel-optimization/index.rst.txt b/_sources/tutorials/bilevel-optimization/index.rst.txt new file mode 100644 index 00000000..056044e6 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/index.rst.txt @@ -0,0 +1,11 @@ +.. _bilevel: + +Bilevel Optimization +==================== + +.. toctree:: + :maxdepth: 3 + :glob: + + modeling/index + wrappers/index diff --git a/_sources/tutorials/bilevel-optimization/modeling/index.rst.txt b/_sources/tutorials/bilevel-optimization/modeling/index.rst.txt new file mode 100644 index 00000000..a64d9ab9 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/modeling/index.rst.txt @@ -0,0 +1,8 @@ +Modeling +======== + +.. toctree:: + :maxdepth: 1 + :glob: + + optimistic diff --git a/_sources/tutorials/bilevel-optimization/modeling/optimistic.rst.txt b/_sources/tutorials/bilevel-optimization/modeling/optimistic.rst.txt new file mode 100644 index 00000000..84ae2138 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/modeling/optimistic.rst.txt @@ -0,0 +1,139 @@ +.. _tutorial_optimistic_bilevel: + +Modeling an Optimistic Bilevel Problem +====================================== + +In this tutorial, we will see how to model an optimistic bilevel problem in idol. + +To follow this tutorial, you should be familiar with bilevel optimization and modeling optimization problems in idol. +If this is not the case, we recommend you to read the tutorial on :ref:`MIP modeling `. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Problem Definition and Main Steps +---------------------------------- + +We consider the optimistic bilevel problem + +.. math:: + + \begin{align} + \min_{x, y} \ & -x + -10 y \\ + \text{s.t.} \ & x \in \mathbb Z_+ \\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \ & y \\ + \text{s.t.} \ & -25 x + 20 y \leq 30, \\ + & x + 2 y \leq 10, \\ + & 2 x - y \leq 15, \\ + & 2 x + 10 y \geq 15, \\ + & y \geq 0, \\ + & y \in \mathbb Z_+. + \end{array} + \end{align} + +This is an ILP-ILP bilevel problem which is taken from :cite:`Moore1990` (Example 1). + +To model this problem in idol, there are three main steps: + +1. Define the high-point relaxation (HPR) model, i.e., in our example, + + .. math:: + + \begin{align} + \min_{x, y} \ & -x + -10 y \\ + \text{s.t.} \ & x \in \mathbb Z_+ \\ + & -25 x + 20 y \leq 30, \\ + & x + 2 y \leq 10, \\ + & 2 x - y \leq 15, \\ + & 2 x + 10 y \geq 15, \\ + & y \geq 0, \\ + & y \in \mathbb Z_+. + \end{align} + + This model defines all constraints and variables of the bilevel problem. + The feasible region is classically called the shared-constraint set. + +2. Describe which variables and constraints are part of the lower-level problem. + +3. Define the lower-level objective function. + +Modeling the High-Point Relaxation +---------------------------------- + +The HPR can be modeled in the same way as a classical optimization problem. +If you are not familiar with modeling optimization problems in idol, +we recommend you to read the tutorial on :ref:`MIP modeling `. + +Here is the code to model the HPR of the bilevel problem. + +.. code:: + + Env env; + Model high_point_relaxation(env); + + auto x = high_point_relaxation.add_var(0, Inf, Integer, "x"); + auto y = high_point_relaxation.add_var(0, Inf, Integer, "y"); + + high_point_relaxation.set_obj_expr(-x - 10 * y); + auto follower_c1 = high_point_relaxation.add_ctr(-25 * x + 20 * y <= 30); + auto follower_c2 = high_point_relaxation.add_ctr(x + 2 * y <= 10); + auto follower_c3 = high_point_relaxation.add_ctr(2 * x - y <= 15); + auto follower_c4 = high_point_relaxation.add_ctr(2 * x + 10 * y >= 15); + +Describing the Lower-Level Problem +---------------------------------- + +To describe the lower-level problem, we need to specify which variables and constraints are part of the lower-level problem. +This done by creating an object of type :code:`Bilevel::LowerLevelDescription` and calling the methods :code:`set_follower_var` +and :code:`set_follower_ctr`. + +.. code:: + + Bilevel::LowerLevelDescription description(env); + description.set_follower_var(y); + description.set_follower_ctr(follower_c1); + description.set_follower_ctr(follower_c2); + description.set_follower_ctr(follower_c3); + description.set_follower_ctr(follower_c4); + +Note that this does nothing more but to create two new :code:`Annotation` to indicate variables and constraints that are part of the lower-level problem. +These annotations are used by the bilevel solver to identify the lower-level problem. +In particular, all variables and constraints that are not annotated as follower variables or constraints are considered as leader variables and constraints +and have an annotation which is equal to :code:`MasterId`. + +Also note that it is possible to create and use your own annotation. For instance, the following code is equivalent to the previous one. + + +.. code:: + + Annotation follower_vars(env, MasterId, "follower_variables"); + y.set(follower_vars, 0); + + Annotation follower_ctrs(env, MasterId, "follower_constraints"); + follower_c1.set(follower_ctrs, 0); + follower_c2.set(follower_ctrs, 0); + follower_c3.set(follower_ctrs, 0); + follower_c4.set(follower_ctrs, 0); + + + Bilevel::LowerLevelDescription description(follower_vars, follower_ctrs); + + +Defining the Lower-Level Objective Function +------------------------------------------- + +Finally, we need to define the lower-level objective function. +This is done by calling the method :code:`set_follower_obj_expr` on the object of type :code:`Bilevel::LowerLevelDescription`. +An :code:`Expr` object is passed as argument to this method. + +.. code:: + + description.set_follower_obj_expr(y); + +Complete Example +---------------- + +A complete example is available :ref:`here `. diff --git a/_sources/tutorials/bilevel-optimization/wrappers/index.rst.txt b/_sources/tutorials/bilevel-optimization/wrappers/index.rst.txt new file mode 100644 index 00000000..8aff8053 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/wrappers/index.rst.txt @@ -0,0 +1,8 @@ +External Solvers +================ + +.. toctree:: + :maxdepth: 1 + :glob: + + mibs diff --git a/_sources/tutorials/bilevel-optimization/wrappers/mibs.rst.txt b/_sources/tutorials/bilevel-optimization/wrappers/mibs.rst.txt new file mode 100644 index 00000000..0e8eb260 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/wrappers/mibs.rst.txt @@ -0,0 +1,35 @@ +Solving Mixed-Integer Bilevel Problems with MibS +================================================ + +MibS is an optimization solver for mixed-integer bilevel problems. +Idol seemlessly integrates with MibS to solve bilevel problems. + +We will see that solving bilevel problems with MibS is very similar to solving bilevel problems with any optimizer in idol. + +We will assume that you have your bilevel problem modeled already in idol. In particular, we consider that you have +two variables: + +1. :code:`high_point_relaxation` which is a :code:`Model` representing the high-point relaxation of your bilevel problem. + +2. :code:`description` which is a :code:`Bilevel:LowerLevelDescription` object representing the bilevel problem. If you do not know what this is or how to create it, please refer to the :ref:`previous tutorial `. + +Then, you can solve your bilevel problem with MibS as follows: + +.. code:: + + high_point_relaxation.use(Bilevel::MibS(description)); + + high_point_relaxation.optimize(); + + std::cout << save_primal(high_point_relaxation) << std::endl; + +Notice how the MibS solver is attached to the high-point relaxation model. + +The rest of the code is the same as with any other solver. + +.. warning:: + + To use MibS, you need to have the MibS library installed on your system and idol linked to the executable. + You can download MibS from `here `_. + + Then, idol should be compiled with the options :code:`USE_MIBS=YES`, :code:`USE_CLP=YES`. diff --git a/_sources/tutorials/index.rst.txt b/_sources/tutorials/index.rst.txt new file mode 100644 index 00000000..605c422c --- /dev/null +++ b/_sources/tutorials/index.rst.txt @@ -0,0 +1,35 @@ +.. _tutorials: + +Tutorials +========= + +Mixed-Integer Programming +------------------------- + +.. toctree:: + :maxdepth: 3 + :glob: + :titlesonly: + + mixed-integer-programming/index + +Bilevel Optimization +-------------------- + +.. toctree:: + :maxdepth: 3 + :glob: + :titlesonly: + + bilevel-optimization/index + +Robust Optimization +------------------- + +.. toctree:: + :maxdepth: 3 + :glob: + :titlesonly: + + robust-optimization/index + diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.rst.txt new file mode 100644 index 00000000..c0573535 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.rst.txt @@ -0,0 +1,6 @@ +Creating Your Own Branching Rule (Advanced) [TODO] +================================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-callback.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-callback.rst.txt new file mode 100644 index 00000000..aec7ac3d --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-callback.rst.txt @@ -0,0 +1,8 @@ +.. _tutorial_create_bb_callback: + +Create Your Own Callback (Advanced) [TODO] +========================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.rst.txt new file mode 100644 index 00000000..e0c4c853 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.rst.txt @@ -0,0 +1,6 @@ +Creating Your Own Node Selection Rule (Advanced) [TODO] +======================================================= + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-node.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-node.rst.txt new file mode 100644 index 00000000..2a76e7d3 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/create-node.rst.txt @@ -0,0 +1,6 @@ +Creating Your Own Node Class (Advanced) [TODO] +============================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/index.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/index.rst.txt new file mode 100644 index 00000000..8ab23168 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/index.rst.txt @@ -0,0 +1,17 @@ +Branch-and-Bound Algorithm +========================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. + +.. toctree:: + :maxdepth: 1 + :glob: + + write-branch-and-bound + user-cuts-lazy-constraints + create-callback + create-node + create-branching-rule + create-node-selection-rule diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.rst.txt new file mode 100644 index 00000000..8bca1539 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.rst.txt @@ -0,0 +1,6 @@ +Adding User Cuts and Lazy Constraints [TODO] +============================================ + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.rst.txt b/_sources/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.rst.txt new file mode 100644 index 00000000..c031523b --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.rst.txt @@ -0,0 +1,6 @@ +Writing an LP-based Branch-and-Bound [TODO] +=========================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.rst.txt new file mode 100644 index 00000000..cd4142a3 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.rst.txt @@ -0,0 +1,8 @@ +.. _tutorial_column_generation: + +Modeling and Solving A Dantzig-Wolfe Reformulation [TODO] +========================================================= + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.rst.txt new file mode 100644 index 00000000..0c900feb --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.rst.txt @@ -0,0 +1,6 @@ +Using In-Out Stabilization [TODO] +================================= + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/index.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/index.rst.txt new file mode 100644 index 00000000..0aba8b1d --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/index.rst.txt @@ -0,0 +1,19 @@ +.. _tutorial_DantzigWolfe: + +Column Generation and Branch-and-Price Algorithm +================================================ + +.. warning:: + + This is a work in progress. Thank you for your understanding. + +.. toctree:: + :maxdepth: 1 + :glob: + + dantzig-wolfe + in-out-stabilization + writing-branch-and-price + integer-master + strong-branching + writing-branch-and-cut-and-price diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.rst.txt new file mode 100644 index 00000000..d0fbaf72 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.rst.txt @@ -0,0 +1,6 @@ +The Integer Master Heuristic [TODO] +=================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.rst.txt new file mode 100644 index 00000000..1e4264f7 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.rst.txt @@ -0,0 +1,298 @@ +.. _tutorials_dantzig_wolfe_gap: + +.. role:: cpp(code) + :language: cpp + +Branch-and-Price 101 +==================== + +In this section, we will show how to use the Branch-and-Price solver to solve the *Generalized Assignment Problem* (GAP) +using an external solver to solve each sub-problem. + +.. hint:: + + This tutorial regards the `advanced topic` of Column Generation and Dantzig-Wolfe decomposition. + Rudimentary notions in the following subjects are recommended: + + - `Column Generation and Branch-and-Price algorithms `_ + - `Dantzig-Wolfe decomposition `_ + - `Generalized Assignment Problem `_. + +.. seealso:: + + A `Benchmark on Generalized Assignment Problem `_ is + available. + +Mathematical Models +------------------- + +In this section, we assume that the reader is familiar with GAP. +Let :math:`m` be the number of agents and let :math:`n` be the number of tasks to be performed. + +Let :math:`c_{ij}` be the cost for assigning task :math:`j` to agent :math:`i`, :math:`w_{ij}` be the resource +consumption of task :math:`j` when performed by agent :math:`i` and let :math:`t_i` be the resource capacity of agent +:math:`i`. + +Original Formulation +^^^^^^^^^^^^^^^^^^^^ + +The Generalized Assignment Problem (GAP) can be modeled as + +.. math:: + + \min_x \quad & \sum_{i=1}^m\sum_{j=1}^n c_{ij} x_{ij} \\ + \textrm{s.t.} \quad & \sum_{j=1}^n w_{ij} x_{ij} \le t_i & i=1,...,m, \\ + & \sum_{i=1}^m x_{ij} = 1 & j = 1,...,n, \\ + & x_{ij}\in\{0,1\} & i=1,...,m, j=1,...,n. + +Here, variable :math:`x_{ij}` encodes the assignment decision and equals 1 if and only if task :math:`j` is assigned to +agent :math:`i`. + +Dantzig-Wolfe Reformulation +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Let us enumerate the list of all feasible assignments, i.e., let + +.. math:: + + \{\bar x^e_{ij} \}_{e\in E} = \left\{ x \in \{ 0,1 \}^{mn} : \sum_{j=1}^n w_{ij}x_{ij} \le t_i \quad i=1,...,m \right\}, + +in which :math:`E` denotes a list for their indices. The Dantzig-Wolfe reformulation of GAP reads + +.. math:: + + \min_{\lambda} \quad & \sum_{e\in E} \lambda_e\left( \sum_{i=1}^m\sum_{j=1}^n c_{ij}\bar x_{ij}^e \right) \\ + \textrm{s.t.} \quad & \sum_{e\in E} \lambda_e \left( \sum_{i=1}^m \bar x_{ij}^e \right) = 1 & j=1,...,n, \\ + & \sum_{e\in E} \lambda_e = 1, \\ + & \lambda_e \in \{ 0, 1 \} & \forall e\in E. + +Though this model contains an exponential number of variables (i.e., columns) it can be solved efficiently using +Column Generation and Branch-and-price. In such a case, the pricing problem is a Knapsack Problem. + +Automatic Reformulation +----------------------- + +The simplest way to solve a problem using Column Generation and idol is through its automatic reformulation feature. +To use this, one simply needs to give the *original space formulation* of the problem +and to indicate which constraints should be moved to the pricing problem (here, the knapsack constraints). + +The Original Formulation +^^^^^^^^^^^^^^^^^^^^^^^^ + +To read an instance for GAP, we first need to include the header file located in :code:`"idol/problems/generalized-assignment-problem/GAP_Instance.h"`. +This will allow us to use idol's instance parser for GAP. +Assuming that the instance file is named :code:`instance.txt`, it can be loaded as follows. + +.. code-block:: cpp + + const auto instance = Problems::GAP::read_instance("instance.txt"); + + const unsigned int n_agents = instance.n_agents(); + const unsigned int n_jobs = instance.n_jobs(); + +We are now ready to model our problem (for more details, refer to :ref:`this tutorial on modeling `) + +.. code-block:: cpp + + // Create optimization environment + Env env; + + // Create model + Model model(env); + + // Create assignment variables (x_ij binaries) + auto x = model.add_vars(Dim<2>(n_agents, n_jobs), 0., 1., Binary, "x"); + + // Create knapsack constraints (i.e., capacity constraints) + for (unsigned int i = 0 ; i < n_agents ; ++i) { + model.add_ctr(idol_Sum(j, Range(n_jobs), instance.resource_consumption(i, j) * x[i][j]) <= instance.capacity(i), "capacity_" + std::to_string(i)); + } + + // Create assignment constraints + for (unsigned int j = 0 ; j < n_jobs ; ++j) { + model.add(idol_Sum(i, Range(n_agents), x[i][j]) == 1, "assignment_" + std::to_string(j)); + } + + // Set the objective function + model.set_obj_expr(idol_Sum(i, Range(n_agents), idol_Sum(j, Range(n_jobs), instance.cost(i, j) * x[i][j]))); + +Giving Decomposition Instructions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +We are now at the crucial step of indicating which constraint should be moved to the pricing problem. In idol, this is done by using +*annotations*. Annotations are additional information associated to an optimization object (e.g., a constraint or a variable). +Note that annotations are global, i.e., they do not relate to a given optimization model. + +Every annotation is formed with two template arguments: an optimization object type and a value type. Here, we want to add +annotations to constraints, thus, the optimization object type must be :code:`Ctr`. The value type can typically be any desired +type. Here, however, the Dantzig-Wolfe decomposition needs an annotation corresponding to an :code:`unsigned int` which corresponds +to the sub-problem index to which the constraint shall be moved to. Thus, we create the annotation as follows. + +.. code-block:: cpp + + Annotation decomposition(env, "decomposition", MasterId); + +Here, we pass three arguments to the constructor of :code:`Annotation`. First, we pass the optimization +environment which will store the annotation. Then, a name (mandatory) is given to the annotation, here, "decomposition". +Finally, a default value is given and equals "MasterId". This will tell idol that constraints which have not been annotated +should remain in the master problem. + +Now, observe how the annotation is applied to the capacity constraints. + +.. code:: cpp + + for (unsigned int i = 0 ; i < n_agents ; ++i) { + Ctr capacity = model.add_ctr(idol_Sum(j, Range(n_jobs), instance.resource_consumption(i, j) * x[i][j]) <= instance.capacity(i), "capacity_" + std::to_string(i)); + capacity.set(decomposition, i); // <-- Annotating the capacity constraint + } + +Here, the first capacity constraint is moved to the first pricing problem (id: 0), +the second constraint to the second pricing problem (id: 1), and so on. + +Note that another decomposition would be materialized as follows. + +.. code:: cpp + + for (unsigned int i = 0 ; i < n_agents ; ++i) { + Ctr capacity = model.add_ctr(idol_Sum(j, Range(n_jobs), instance.resource_consumption(i, j) * x[i][j]) <= instance.capacity(i), "capacity_" + std::to_string(i)); + capacity.set(decomposition, 0); // <-- Annotating the capacity constraint + } + +Here, all the knapsack constraints would be moved to the same pricing problem (id: 0). + +Creating the Branch-and-Price Algorithm +--------------------------------------- + +Now that the desired decomposition has been specified, we can specify the desired optimizer to solve our model. +Here, we want to solve our problem using a Branch-and-Price algorithm, i.e., a Branch-and-Bound algorithm where each node +in the Branch-and-Bound tree is solved by a Dantzig-Wolfe decomposition. + +To begin with, we need to give some specification about how each sub-problem will be solved. In other words, we need +to specify the optimizer(s) used for pricing during the column generation process. This is done by first creating a +:code:`DantzigWolfe::SubProblem` object. + +.. code:: cpp + + const auto sub_problem_specifications = DantzigWolfe::SubProblem() + .add_optimizer(Gurobi()); + +Then, we can create our Column Generation algorithm (factory) in the following way. + +.. code:: cpp + + const auto column_generation = DantzigWolfeDecomposition(decomposition) + .with_master_optimizer(Gurobi::ContinuousRelaxation()) + .with_default_sub_problem_spec(sub_problem_specifications); + +Here, we are solving the relaxed master problem using Gurobi. We also define our default sub-problem specifications to +be the one we just defined. + +Our remaining task is to embed our Column Generation routine inside of a Branch-and-Bound algorithm. +This can be done as follows. + +.. code:: cpp + + const auto branch_and_bound = BranchAndBound() + /* Each node is solved by Column Generation */ + .with_node_optimizer(column_generation) + + /* Variables are selected for branching using the most-infeasible rule */ + .with_branching_rule(MostInfeasible()) + + /* Nodes are selected using the best-bound rule */ + .with_node_selection_rule(BestBound()) + + /* The algorithm will run with a time limit of 3600 */ + .with_time_limit(3600) + + ); + +Then, we can tell idol to use this algorithm for solving our model by using the :code:`Model::use` method. + +.. code:: cpp + + model.use(branch_and_bound); + +Finally, one can simply call the :code:`Model::optimize` method as follows. + +.. code:: cpp + + model.optimize(); + + +That's it! The problem is being solved by column generation, and possibly branching on fractional variables. + +.. hint:: + + Note that it is possible to obtain logs using the `with_log_level` method on the desired optimizer. + For instance, one may want to have + logs for the branch-and-bound optimizer. Then, one should do as follows. + + .. code:: cpp + + model.use( + BranchAndBound() + + /* ... omitting identical details */ + + .with_log_level(Info, Blue) + ); + +The rest remains unchanged and one can use :code:`Model::optimize` to solve the problem and retrieve the solution +through methods like :code:`Model::get_status` and :code:`Model::get_var_primal`. + +.. admonition:: Example + + Here, we can solve our model using a Dantzig-Wolfe decomposition. + + .. code-block:: + + model.optimize(); + + std::cout << save_primal(model) << std::endl; + + This will produce the following output (e.g.). + + .. code-block:: text + + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [branch-and-bound] + [2023-04-07 13:45:44] [info] [branch-and-bound] + [2023-04-07 13:45:44] [info] [branch-and-bound] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + [2023-04-07 13:45:44] [info] [dantzig-wolfe] + + +----------------------- + | Status: Optimal + | Reason: Proved + | ObjVal: -233.00 + | Values: + | x_1_7 = 1.00 + | x_2_0 = 1.00 + | x_2_1 = 1.00 + | x_1_4 = 1.00 + | x_1_5 = 1.00 + | x_0_6 = 1.00 + | x_0_2 = 1.00 + | x_0_3 = 1.00 + +----------------------- diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.rst.txt new file mode 100644 index 00000000..d8817e27 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.rst.txt @@ -0,0 +1,15 @@ +.. _tutorials_dantzig_wolfe_heuristic: + +.. role:: cpp(code) + :language: cpp + +Heuristic Pricing (to come) +=========================== + +Hey, you've implemented your first Branch-and-Price algorithm and are curious about how to use your own heuristic for +pricing during the Column Generation algorithm? Then you are at the right place! If not, make sure to check the +`Generalized Assignment Problem tutorial <_tutorials_dantzig_wolfe>`_. + +.. warning:: + + This tutorial is still under construction. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.rst.txt new file mode 100644 index 00000000..8e2eaafa --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.rst.txt @@ -0,0 +1,15 @@ +.. _tutorials_dantzig_wolfe_stabilization: + +.. role:: cpp(code) + :language: cpp + +In-Out Stabilization (to come) +============================== + +Hey, you've implemented your first Branch-and-Price algorithm and are curious about how to stabilize your Column +Generation algorithm? Then you are at the right place! If not, make sure to check the +`Generalized Assignment Problem tutorial <_tutorials_dantzig_wolfe>`_. + +.. warning:: + + This tutorial is still under construction. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst.txt new file mode 100644 index 00000000..cbd0bfd3 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst.txt @@ -0,0 +1,198 @@ +Using Strong Branching +====================== + +.. contents:: Table of Contents + :local: + :depth: 2 + +Basics +------ + +Strong Branching is a technique that falls into the category of *variable selection rules*, a crucial aspect of +Branch-and-Bound algorithms. + +More specifically, the task is to decide which variable to branch on at each node of the Branch-and-Bound tree, i.e, +among a set of branching candidates whose value must be integer, one must +decide which variable with fractional value in the current solution of the relaxation to choose for creating +child nodes. + +The most common rule is the so-called *Most-Infeasible* rule, which selects a variable whose fractional +part is closest to `0.5`. Unfortunately, this rule performs badly in practice. Most importantly, if solving a node is +computationally hard, it makes sense to spend some time in carefully choosing the variable to branch on. This is typically +the case when nodes are solved using Column Generation. + +.. hint:: + + Clearly, Strong Branching is not only used in the context of column generation. It is a general technique that can be + used in any context where solving a node is computationally expensive. Thus, this tutorial is not specific to the + context of column generation, though we will use it as an example. + +The idea of Strong Branching is to evaluate the effect of branching on a variable before branching actually happens. + +To be more clear, let :math:`C` be a set of indices for branching candidates at a given node, i.e., for each :math:`j\in C`, +:math:`x_j` is an integer variable in the original problem but with :math:`x_j^*\notin\mathbb Z` at the current node. +Strong Branching tries to evaluate the effect of applying branching constraints :math:`x_j \le \lfloor x_j^* \rfloor` and +:math:`x_j \ge \lceil x_j^* \rceil` to the current node. To do so, it solves, before branching happens, and for each :math:`j\in C`, +both the left and right child node. Let :math:`z_i^\le` and :math:`z_i^\ge` denote the (optimal) value of the +left and right nodes if branching is performed on :math:`x_j`. The "effect of branching on :math:`x_j`" is then estimated by +computing a score, noted :math:`\text{Score}(j)`, based on :math:`z_j^\le` and :math:`z_j^\ge`. Then Strong Branching +selects the variable with an index :math:`j^*` such that (for minimization problems) + +.. math:: + + j^* \in \text{argmax}\{ \text{Score}(j) : j\in C \}. + +Empirically, Strong Branching is known to produce substantially smaller Branch-and-Bound trees compared to other +branching rules. Unfortunately, computing :math:`\text{Score}(j)` typically requires a lot of time. To avoid this, +several techniques have been designed such as *Restricted Strong Branching* and *Strong Branching with Phases* (see below). + +For more details, please refer to :cite:`ACHTERBERG200542`. + +Scoring Functions +^^^^^^^^^^^^^^^^^ + +Two common scoring functions :math:`\text{Score}(j)` are found in the literature. The *linear* formula :cite:`Linderoth1999` + +.. math:: + + \text{LinearScore}(j) := (1 - \mu) \min(\Delta_j^\le, \Delta_j^\ge) + \mu \max(\Delta_j^\le, \Delta_j^\ge), + +and the *product* formula + +.. math:: + + \text{ProductScore}(j) := \max(\Delta_j^\le, \varepsilon) \max(\Delta_j^\ge, \varepsilon), + +in which :math:`\Delta_j^\le := z_j^\le - z^*` and :math:`\Delta_j^\ge := z_j^\ge - z^*` with :math:`z^*` denoting the +(optimal) value of the current node. Parameters :math:`\mu\in[0,1]` and :math:`\varepsilon > 0` are given. +In idol, :math:`\mu = 1/6` and :math:`\varepsilon = 10^{-6}`. + +Variants +^^^^^^^^ + +There are several variants of Strong Branching. The most common ones are: + +* **Full Strong Branching** denotes the standard Strong Branching rule which solves all :math:`2|C|` nodes at each branching + decision. The drawback of this approach is that it may take a lot of time to solve all these sub-problems before branching + actually happens. +* **Restricted Strong Branching** is an attempt to reduce the computational burden of Full Strong Branching. The idea is to + consider only a maximum of :math:`K` branching candidates at each branching decision instead of the whole set :math:`C`. + Thus, :math:`C` is replaced by a smaller set :math:`R\subseteq C` such that :math:`|R| = K` with :math:`K` fixed. + The "restricted branching candidate set" :math:`R` is created by taking the :math:`K` first variables selected by, yet + another, branching rule, e.g., the most-infeasible rule. +* **Strong Branching with Look Ahead** is similar to *Restricted Strong Branching* yet differs from it by not specifying a + fixed size for the "restricted branching candidate set" :math:`R`. Instead, it considers a look ahead parameter, noted + :math:`L`, and applies the Full Strong Branching rule. However, if the branching candidate does not change after :math:`L` + iterations, the algorithm stops and the current branching candidate is returned. +* **Strong Branching with Phases** is a combination of the above three approaches which applies different schemes depending + on the level of the current node in the Branch-and-Bound tree. Additionally, it allows to solve each node only approximately + by, e.g., imposing a maximum number of iterations for the underlying Column Generation algorithm. + +Implementation +-------------- + +This section explains how to use the Strong Branching rule in idol. +It is based on the Generalized Assignment Problem example from the :ref:`Column Generation `. +More specifically, we will assume that you have a variable +:code:`model` of type :code:`Model` which has a decomposable structure specified by the annotation :code:`(Annotation) decomposition`. + +Full Strong Branching +^^^^^^^^^^^^^^^^^^^^^ + +Recall that the Branch-and-Price algorithm is created by the following code. + +.. code:: cpp + + const auto column_generation = + DantzigWolfeDecomposition(decomposition) + .with_master_optimizer(Gurobi::ContinuousRelaxation()) + .with_default_sub_problem_spec( + DantzigWolfe::SubProblem() + .add_optimizer(Gurobi()) + ); + +Now, we will show how to use Strong Branching as a branching rule. This is done while creating our Branch-and-Bound algorithm. In +particular, we will use the :code:`StrongBranching` class to define our branching rule. We can, for instance, simply +declare + +.. code:: cpp + + const auto branching_rule = + StrongBranching(); + +which will create a new Full Strong Branching rule. Just like any other branching rule, it can be used by calling the +:code:`BranchAndBound::with_branching_rule` method. + +.. code:: cpp + + const auto branch_and_bound = + BranchAndBound() + .with_branching_rule(branching_rule) + .with_node_selection_strategy(BestBound()); + +Then, we can write a Branch-and-Price algorithm and solve our problem as follows. + +.. code:: cpp + + const auto branch_and_price = branch_and_bound + column_generation; + + model.use(branch_and_price); + + model.optimize(); + +Beware that here, we only implemented Full Strong Branching which, as we saw, is not computationally convenient... +Let's see how to implemented Restricted Strong Branching. + +Restricted Strong Branching +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To implement Restricted Branching, one simply needs to call the :code:`StrongBranching::with_max_n_variables` method. +This is done as follows. + +.. code:: cpp + + const auto branching_rule = + StrongBranching() + .with_max_n_variables(50); + +Here, we set the maximum number of considered variables equal to :math:`K = 50`. + +Phases +^^^^^^ + +In this section, we will discuss how to implement phases with the strong branching rule. This is done by using the +:code:`StrongBranching::add_phase` method. This method takes three arguments: a phase type, which is used to indicate +how each node should be solved, e.g., with some iteration limit, a maximum number of variables to consider, for restricted +strong branching, and a maximum depth, used to trigger the phase based on the level of the current node in the Branch-and-Bound +tree. + +Here is an instance of strong branching with phases which, for nodes whose level is below or equal to 3, applies Full +Strong Branching, then switches to Restricted Strong Branching with :math:`K = 30` and which solves nodes with an iteration +limit of 20. + +.. code:: cpp + + const auto branching_rule = + StrongBranching() + .add_phase(StrongBranchingPhases::WithNodeOptimizer(), std::numeric_limits::max(), 3) + .add_phase(StrongBranchingPhases::WithIterationLimit(20), 30, std::numeric_limits::max()); + +Observe how we used :code:`std::numeric_limits::max()` to remove restrictions on the number of +considered variables and on the maximum depth for the final phase. Note that, by default, if no phase is triggered for a +given depth, e.g., because it was not specified, Full Strong Branching is applied. Here, however, we make sure that the +second phase is always triggered. + +Changing the Scoring Function +----------------------------- + +The scoring function can be changed by calling the :code:`StrongBranching::with_scoring_function` method. This method +takes a scoring function as an argument. The scoring function is a sub-class of :code:`NodeScoreFunction` and can be +:code:`Linear` or :code:`Product`. + +By default, idol uses the product scoring function. To change it to the linear scoring function, one can simply write + +.. code:: + + const auto branching_rule = + StrongBranching() + .with_scoring_function(NodeScoreFunctions::Linear()); diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.rst.txt new file mode 100644 index 00000000..8d6500ff --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.rst.txt @@ -0,0 +1,6 @@ +Writing A Branch-and-Cut-and-Price Algorithm [TODO] +=================================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.rst.txt new file mode 100644 index 00000000..04ac0519 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.rst.txt @@ -0,0 +1,6 @@ +Writing A Branch-and-Price Algorithm [TODO] +=========================================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/index.rst.txt b/_sources/tutorials/mixed-integer-programming/index.rst.txt new file mode 100644 index 00000000..d50a1833 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/index.rst.txt @@ -0,0 +1,13 @@ +.. _mip: + +Mixed-Integer Programming +========================= + +.. toctree:: + :maxdepth: 2 + :glob: + + modeling/index + optimizers/index + branch-and-bound/index + dantzig-wolfe/index diff --git a/_sources/tutorials/mixed-integer-programming/modeling/constraints.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/constraints.rst.txt new file mode 100644 index 00000000..aa159efc --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/constraints.rst.txt @@ -0,0 +1,106 @@ +.. _api_constraints: + +Constraints +----------- + +.. contents:: Table of Contents + :local: + :depth: 2 + +Creating Constraints +^^^^^^^^^^^^^^^^^^^^ + +Similarly to variables, constraints are easily created and added to a given ``Model``. + +Constraints can be created by calling the constructor of the :ref:`Ctr ` class and added to a model by means of +:cpp:`Model::add` or by calling the :cpp:`Model::add_ctr` method. See for instance. + +.. code:: + + Env env; + Model model(env); + + Var x_0(env, 0., Inf, Continuous, "x_0"); + Var x_1(env, 0., Inf, Continuous, "x_1"); + Ctr constraint(env, x_0 + x_1 >= 1); + + model.add(x_0); + model.add(x_1); + model.add(constraint); + +A more compact version of this code is obtained by making use of the ``Model::add_vars`` and ``Model::add_ctr`` methods. + +.. code-block:: cpp + + Env env; + Model model(env); + + const auto x = model.add_vars(Dim<1>(2), 0., Inf, Continuous, "x"); + const auto constraint = model.add_ctr(x[0] + x[1] >= 1); + +As you can see, a constraint is created using the pattern :code:`{expression} {sign} {expression}` where + +* :code:`{sign}` is one of :code:`<=`, :code:`>=` and :code:`==`; +* :code:`{expression}` is an expression, i.e., an instance of :code:`Expr`. + +Actually, the pattern :code:`{expression} {sign} {expression}` only creates a "temporary" constraint, i.e., a constraint +which is not associated to any model. This is why we need to add it to a model by calling the :code:`Model::add_ctr` method. +Temporary constraints are objects of the class :ref:`TempCtr `. An equivalent code would be. + +.. code:: cpp + + Env env; + Model model(env); + + const auto x = model.add_vars(Dim<1>(2), 0., Inf, Continuous, "x"); + const auto temporary_constraint = TempCtr(Row(x[0] + x[1], 1), GreaterThan); + + model.add_ctr(temporary_constraint); + +Here, we used the class :ref:`Row ` to create the row associated to the constraint. The sign of the constraint is +specified by the second argument of the constructor of the :ref:`TempCtr ` class, and can take values +:code:`LessThan`, :code:`GreaterThan` and :code:`EqualTo`. + +Accessing Constraints +^^^^^^^^^^^^^^^^^^^^^ + +Information about a given constraint in a model can be accessed by calling the corresponding methods of the model. +The type of a constraint can be accessed by calling the :cpp:`Model::get_ctr_type` method. The row of a constraint can be +accessed by calling the :cpp:`Model::get_ctr_row` method. + +If a given model has been solved and feasibility could be proved (or better, optimality), the dual value of a constraint +can be accessed by calling the :cpp:`Model::get_ctr_dual` method. +For infeasible models, a Farkas certificate (dual ray) can be accessed by calling the :cpp:`Model::get_ctr_farkas` method. + +The :cpp:`Model::has` method can be used to check if a given constraint is in the model. + +The current index of a constraint in the model can be accessed by calling the :cpp:`Model::get_ctr_index` method. +Beware, however, that the index may change if the model is modified. + +For more details, see the :ref:`Model ` class. + +Modifying Constraints +^^^^^^^^^^^^^^^^^^^^^ + +The type of a constraint can be modified by calling the :cpp:`Ctr::set_ctr_type` method. +The value of the right-hand side of a constraint can be modified by calling the :cpp:`Ctr::set_rhs` method. + +The row of a constraint in the model can be modified by calling the :cpp:`Ctr::set_row` method. +For instance. + +.. code:: cpp + + Row row; + row.set_rhs(2); + row.linear().set(x, coefficient_for_x_in_constraint); + row.linear().set(y, coefficient_for_y_in_constraint); + + constraint.set_ctr_row(constraint, row); + +For more details, see the :ref:`Model ` class. + +Removing Constraints +^^^^^^^^^^^^^^^^^^^^ + +A constraint can be removed from a model by calling the :cpp:`Model::remove` method. + diff --git a/_sources/tutorials/mixed-integer-programming/modeling/environment.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/environment.rst.txt new file mode 100644 index 00000000..7017cfbf --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/environment.rst.txt @@ -0,0 +1,14 @@ +The Environment +--------------- + +Every optimization object (such as variables and constraints) are managed by an "optimization environment". +It is the environment that controls the death and life of such objects. It is also through the environment that idol +manages the different versions each optimization object may have during the execution of your program. + +Typically, only one environment should be used by your code. Yet, it is not forbidden to have several environments at the same time (not advised). + +Environments are objects of the :ref:`Env ` class, and can be created as follows. + +.. code-block:: + + Env env; // Creates a new optimization environment. diff --git a/_sources/tutorials/mixed-integer-programming/modeling/expressions.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/expressions.rst.txt new file mode 100644 index 00000000..b1b55c88 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/expressions.rst.txt @@ -0,0 +1,80 @@ +Expressions +----------- + +An expression generically refers to any mathematical expression involving variables or constraints. In idol, expressions +are represented by the :ref:`Expr ` class. + +An expression can be created by adding, subtracting or multiplying variables with constants or other expressions. For instance, +the following code creates the mathematical expression :math:`1 + 3 x_0 + x_1 + x_0 + 2 x_0 x_1`. + +.. code:: cpp + + const Expr expr = 1 + 3 * x[0] + x[1] + x[0] + 2 * x[0] * x[1]; + + std::cout << expr << std::endl; // "1 + 4 * x[0] + 1 * x[1] + 2 * x[0] * x[1]" + +Expressions are composed of three parts: + +* A constant (or offset) which is an instance of the :ref:`Constant ` class; +* A linear part which is an instance of the :ref:`LinExpr ` class; +* A quadratic part which is an instance of the :ref:`QuadExpr ` class. + +Each of these parts can be accessed using the methods :cpp:`Expr::constant`, :cpp:`Expr::linear` and :cpp:`Expr::quadratic`, respectively. +For instance, consider the following code. + +.. code-block:: cpp + + for (const auto& [var, coefficient] : expr.linear()) { + std::cout << var << " is multiplied by " << coefficient << std::endl; + } + +This code iterates over the linear part of the expression and prints the variables and their coefficients. + + +.. admonition:: About constants in expressions + + Without going into too much detail, we should here precise that each constant multiplying a variable in an :cpp:`Expr`, + as well as the offset constant, can actually be composite. For instance, this is the case when a variable is multiplied by + a parameter which is considered fixed in the current model but cannot be evaluated at the time the expression is created. + + Creating such "parameters" can be done by prepending a variable with the ``!`` symbol. This will automatically + create an instance of the :ref:`Param ` class. + For instance, the following code creates + a constant which involves the variables :math:`\xi_0` and :math:`\xi_1`, viewed as parameters. + + .. code-block:: + + Env env; + const Model model(env); + const auto x = model.add_vars(Dim<1>(2), 0., Inf, Continuous, "x"); + + const Model model2(env); + const auto xi = model2.add_vars(Dim<1>(2), 0., 1., Continuous, "xi"); + + const Expr expr = (1 + 2 * !xi[0]) * x[0] + 3 * !xi[1] * x[1]; + + Here, ``1 + 2 * !xi_0`` is an instance of the ``Constant`` object and can be used as follows. + + .. code-block:: + + Constant constant = 1 + 2 * !xi_0; + + std::cout << constant.numerical() << std::endl; // output: 1 + + for (const auto& [param, coeff] : constant) { + std::cout << coeff << " * " << param << std::endl; // output: 2 * !xi_0 + } + + Note that a parameter can be turned back into a variable by calling the :cpp:`Param::as` template method. + See, for instance. + + .. code-block:: cpp + + const auto param = !xi[0]; + + if (param.is()) { + const auto var = param.as(); + // do somthing with the variable + } + + Parameters can be variables or constraints. diff --git a/_sources/tutorials/mixed-integer-programming/modeling/index.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/index.rst.txt new file mode 100644 index 00000000..ebd207c1 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/index.rst.txt @@ -0,0 +1,30 @@ +.. _mip_modeling: + +.. role:: cpp(code) + :language: cpp + +Modeling +======== + +This page introduces the basic concepts of modeling optimization problems in idol. +We will discuss how to create optimization models and add variables, constraints and objective functions to that model. +We will also see how to access the different components of an existing model. + + +All classes which are used for modeling (standard) optimization problems can be accessed by including :code:`#include `. + +To simplify things, we will use the :code:`namespace idol` in the following examples. This dispenses us from prefixing +every class with :code:`idol::`. For instance, we will use :code:`Model` instead of :code:`idol::Model`. + +Let's get started. + +.. toctree:: + :maxdepth: 1 + :glob: + + environment + models + variables + expressions + constraints + objective-function diff --git a/_sources/tutorials/mixed-integer-programming/modeling/models.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/models.rst.txt new file mode 100644 index 00000000..fd8ee2a6 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/models.rst.txt @@ -0,0 +1,86 @@ +Models +------ + +The :ref:`Model ` class is used to represent a (standard) optimization model, i.e., a mathematical program of the form + +.. math:: + + \begin{align} + \min_x \ & c^\top x + x^\top D x + c_0 \\ + \text{s.t.} \ & a_{(i)}^\top x + x^\top Q^i x \le b_i \quad i=1,\dotsc,m \\ + & x_j \in \mathbb Z \quad j=1,\dotsc,p + \end{align} + +Here, :math:`x_j` are the decision variables of this optimization problem while matrices :math:`c, D, A` and :math:`Q^i` are given +input parameters for this model. Additionally, variables :math:`x_j` having :math:`j\in\{ 1,\dotsc,p \}` have to be integer-valued. + + +.. contents:: Table of Contents + :local: + :depth: 2 + +Creating a Model +^^^^^^^^^^^^^^^^ + +A Model is created by calling the constructor of the :cpp:`Model` class. Note that it is necessary to pass an environment +to the constructor. + +The following code creates a new optimization model. + +.. code-block:: cpp + + Env env; + Model model(env); + +We can now define our decision variables and constraints, and add an objective function to our model. +This is detailed in the :ref:`Variables `, :ref:`Constraints ` and :ref:`Objective ` sections. + +Reading a Model from a File +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A Model can also be created by reading a model from a file (typically, an MPS or an LP file). +To do this, idol relies on an external solver. The following code reads a model from a file using Gurobi. + +.. code-block:: cpp + + Env env; + auto model = Gurobi::read_from_file(env, "/path/to/model.mps"); + // auto model = GLPK::read_from_file(env, "/path/to/model.mps"); + +Writing a Model to a File +^^^^^^^^^^^^^^^^^^^^^^^^^ + +To write an optimization model to a file, the easiest way is again to rely on an external solver. +This is done by attaching a solver to a model, then by calling the :code:`Model::write` method. + +.. code:: + + Env env; + Model model = some_function_creating_my_model(env); // this is assumed to create the desired optimization model + + model.use(Gurobi()); // We will use Gurobi as the optimizer + + model.write("instance.lp"); // Creates a new file "instance.lp" storing the model + +Iterating over the Variables and Constraints +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The :ref:`Model ` class provides methods to iterate over the variables and constraints of the model. +See for instance, the following example. + +.. code-block:: cpp + + for (const auto& var : model.vars()) { + std::cout << "Variable " << var.name() << " belongs to the model." << std::endl; + } + + for (const auto& ctr : model.ctrs()) { + std::cout << "Constraint " << ctr.name() << " belongs to the model." << std::endl; + } + +The number of variables and constraints can be obtained by doing the following. + +.. code:: cpp + + std::cout << "Nb. of variables: " << model.vars().size() << std::endl; + std::cout << "Nb. of constraints: " << model.ctrs().size() << std::endl; diff --git a/_sources/tutorials/mixed-integer-programming/modeling/objective-function.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/objective-function.rst.txt new file mode 100644 index 00000000..b697101d --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/objective-function.rst.txt @@ -0,0 +1,45 @@ +.. _api_objective_functions: + +Objective Functions +=================== + +.. contents:: Table of Contents + :local: + :depth: 2 + +Adding an Objective Function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The objective function of an optimization model can specified by the ``Model::set_obj_expr`` method. The objective function is a linear expression of the decision variables. + +Here is an example which sets the objective function to :math:`-x_0 + 2 x_1`; + +.. code-block:: + + model.set_obj_expr(-x_0 + 2 * x_1); + +Accessing the Objective Function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The objective function can be accessed using the ``Model::get_obj_expr`` method. +The objective sense can be accessed using the ``Model::get_obj_sense`` method. + +If a given model has been solved, the best objective function value can be accessed using the ``Model::get_best_obj`` method. +The best bound can be accessed using the ``Model::get_best_bound`` method. + +Changing the Optimization Sense +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To change the optimization sense, use the ``Model::set_obj_sense`` method. +The optimization sense can be either ``Minimize`` or ``Maximize``. For instance, + +.. code:: cpp + + model.set_obj_sense(Maximize); + +Alternatively, one can use the constructor of the ``Model`` class to set the optimization sense. + +.. code:: cpp + + Env env; + Model model(env, Maximize); // Creates a model for maximization diff --git a/_sources/tutorials/mixed-integer-programming/modeling/variables.rst.txt b/_sources/tutorials/mixed-integer-programming/modeling/variables.rst.txt new file mode 100644 index 00000000..edd3085f --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/variables.rst.txt @@ -0,0 +1,149 @@ +.. _api_variables: + +Variables +--------- + +Variables are the decision variables of an optimization problem. They are the objects that we want to find the best +values for, with respect to some objective function given the specified constraints. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Creating Variables +^^^^^^^^^^^^^^^^^^^ + +There are mainly two ways to create variables in idol. The first one is to use the :ref:`Var ` class directly, and the +second one is to use the :cpp:`Model::add_var` method. + +Using the :cpp:`Var` class directly creates a variable that is not associated to any model. We will there need to add it +explicitly to a model. This is done by calling the :cpp:`Model::add` method. See for instance the following code which +creates a continuous variable :math:`x`, with bounds :math:`[0,\infty)`, and adds it to the model. + +.. code:: cpp + + Var x(env, 0., Inf, Continuous, "x"); + + model.add(x); // Variable x is added to the model + +Note that a variable may belong to several models at the same time. Each version of the variable in each model is then independent. +For instance, one could do the following. + +.. code:: cpp + + Var x(env, 0., Inf, Continuous, "x"); + + model.add(x); + + Model model2(env); + model2.add(x); + model2.set_var_ub(x, 10.); + +In this example, the variable :math:`x` is added to two different models. The upper bound of :math:`x` in the second model +is then set to 10. The upper bound of :math:`x` in the first model is not affected by this change. + +A more straightforward way to create variables is to call the ``add_var`` method of the ``Model`` class. +For instance, one can do: + +.. code-block:: cpp + + const auto x = model.add_var(0, Inf, Continuous, "x"); + +Here, we do not need to repeat the environment since the model's environment is used by default. Moreover, we do not need to +explicitly add the variable to the model since it is done automatically by the ``add_var`` method. + +Again, a variable may belong to several models at the same time. And we can do as follows. + +.. code:: cpp + + const auto x = model.add_var(0, Inf, Continuous, "x"); + + Model model2(env); + model2.add(x); + model2.set_var_ub(x, 10.); + +Note that an even more compact version of the previous code is obtained by using the ``Model::add`` method with additional +parameters. For instance, the following code is equivalent to the previous one. + +.. code:: cpp + + const auto x = model.add(0, Inf, Continuous, "x"); + + Model model2(env); + model2.add(x, TempVar(0, 10, Continuous)); + +Here, we used the class :ref:`TempVar ` to create a temporary variable. A temporary variable is a variable +which has not been instantiate yet. It is only a "template" of a variable specifying its bounds and type. Here, we therefore +add the variable :math:`x` to the second model and directly set its attributes (bounds and type) accordingly. + +Creating Several Variables at Once +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Sometimes, you will find it convenient to create several variables at once. This can be done by calling the ``Var::make_vector`` +function, or the ``Model::add_vars`` method. These functions require +an extra parameter specifying the dimension of the new variable. + +For instance, the following code creates variables :math:`y_{ij}` with :math:`i=1,...,K` and :math:`j=1,...,T`. + +.. code:: cpp + + const auto y = Var::make_vector(env, Dim<2>(K, T), 0., Inf, Continuous, "y"); + + model.add_vector(y); + + std::cout << y[0][0] << std::endl; // "y_0_0" + +Similarly, one could use the more direct ``Model::add_vars`` method. + +.. code:: cpp + + const auto y = model.add_vars(Dim<2>(K, T), 0., Inf, Continuous, "y"); + + std::cout << y[0][0] << std::endl; // "y_0_0" + +Integer and binary variables can be created by setting the type of the variable to :cpp:`Integer` and :cpp:`Binary` respectively. + +Accessing Variables +^^^^^^^^^^^^^^^^^^^ + +Information about a given variable in a model can be accessed by calling the corresponding methods of the model. For instance, +one can access the lower bound of a variable by calling the :cpp:`Model::get_var_lb` method. Similarly, the upper bound of a +variable can be accessed by calling the :cpp:`Model::get_var_ub` method. The type of a variable can be accessed by calling the +:cpp:`Model::get_var_type` method. The column of a variable in the model can be accessed by calling the :cpp:`Model::get_var_column` +method. + +If a given model has been solved and feasibility could be proved (or better, optimality), the value of a variable +can be accessed by calling the :cpp:`Model::get_var_primal` method. +When applicable, its reduced cost can be accessed by calling the :cpp:`Model::get_var_reduced_cost` method. +Similarly, for unbounded models, a primal ray can be accessed by calling the :cpp:`Model::get_var_ray` method. + +The :cpp:`Model::has` method can be used to check if a given variable is in the model. + +The current index of a variable in the model can be accessed by calling the :cpp:`Model::get_var_index` method. +Beware, however, that the index may change if the model is modified. + +For more details, see the :ref:`Model ` class. + +Modifying Variables +^^^^^^^^^^^^^^^^^^^ + +The bounds of a variable can be modified by calling the :cpp:`Model::set_var_lb` and :cpp:`Model::set_var_ub` methods. +The type of a variable can be modified by calling the :cpp:`Model::set_var_type` method. + +The column of a variable in the model can be modified by calling the :cpp:`Model::set_var_column` method. +For instance. + +.. code:: cpp + + Column column(objective_coefficient_for_x); + column.linear().set(constraint1, constraint1_coefficient_for_x); + column.linear().set(constraint2, constraint2_coefficient_for_x); + + model.set_var_column(x, column); + +For more details, see the :ref:`Model ` class. + +Removing Variables +^^^^^^^^^^^^^^^^^^ + +A variable can be removed from a model by calling the :cpp:`Model::remove` method. diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/access-optimizer.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/access-optimizer.rst.txt new file mode 100644 index 00000000..bc018a79 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/access-optimizer.rst.txt @@ -0,0 +1,32 @@ +Getting Access to The Underlying Optimizer +========================================== + +In some situations, you may want to access the underlying optimizer. +For instance, this could be the case if you want to get optimizer-specific information which are not exposed by the :code:`Model` interface. + +In this case, you can use the :code:`Model::optimizer` method. Note that this method +will return a reference of type :code:`Optimizer&`. + +To access optimizer-specific routines, you will need to cast the reference to the appropriate optimizer type. +This is made easier by the :code:`Optimizer::as` and :code:`Optimizer::is` methods, which allow you to cast the optimizer to a specific type or check if it is of a specific type. + +For instance, the following code shows how to access the underlying Gurobi optimizer of model. + +.. code:: + + Env env; + Model model(env); + const auto x = model.add_var(0.0, 1.0, Continuous, Column(-1), "x"); + + model.use(Gurobi()); + model.optimize(); + + auto& gurobi_optimizer = model.optimizer().as(); // Cast the optimizer to "Optimizers::Gurobi" + + GRBVar& var = gurobi_optimizer[x]; // Access the optimizer-specific routines + +.. warning:: + + A common mistake is to try to cast the optimizer to the wrong type. In particular, to cast optimizer to its + optimizer factory type (e.g., :code:`Gurobi` instead of :code:`Optimizers::Gurobi`). + This will result in a runtime error. diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/create-optimizer.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/create-optimizer.rst.txt new file mode 100644 index 00000000..f5f2e67b --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/create-optimizer.rst.txt @@ -0,0 +1,6 @@ +Creating Your Own Optimizer (Advanced) [TODO] +============================================= + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/create-universal-callback.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/create-universal-callback.rst.txt new file mode 100644 index 00000000..e85540f7 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/create-universal-callback.rst.txt @@ -0,0 +1,214 @@ +.. _tutorial_create_callback: + +Creating Your Own Universal Callback +==================================== + +In this page, we will show you how to create your own universal callback. +Universal callbacks are callbacks which are not specific to a particular solver. In that sense, they are generic and can be +used with any solver. + +Note that there are also solver-specific callbacks, which are specific to a particular solver. +If you are looking for this, you can refer to :ref:`this page `. + +Creating your own callback can useful if you want to create a callback that is not included in the +default set of callbacks implemented in idol. +If you are looking for quick and easy-to-use callbacks for separating user cuts or lazy constraints, +you can refer to :ref:`this page `. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Basics +^^^^^^ + +Creating your callback is done by creating a sub-class of the :ref:`Callback ` class and overriding the +:code:`Callack::operator()` method. It is this method that will be called by the solver at each iteration. + +Note, however, that callbacks cannot be given "as-is" to an optimizer but must be passed through a :ref:`CallbackFactory `. A callback +factory is a class whose role is to create a new callback object whenever it is needed. Every callback factories must be +a child (or little child) of the :ref:`CallbackFactory ` class. + +The following code shows how to create a callback factory and a callback that prints the value of the primal solution at each +iteration. + +.. code:: cpp + + class MyCallback : public CallbackFactory { + public: + + class Strategy { // Real callback implementation + protected: + void operator()(CallbackEvent t_event) { + + if (t_event != IncumbentSolution) { + return; + } + + std::cout << primal_solution() << std::endl; + } + } + + Callback* operator()() { // Creates a new callback object + return new Strategy(); + } + + CallbackFactory* clone() const { // Creates a copy of the callback factory + return new MyCallback(*this); + } + + } + +As you can see, the callback factory has two important methods: :code:`operator()` and :code:`clone()`. The :code:`operator()` +method is used to create a new callback object, while the :code:`clone()` method is used to create a copy of the callback factory. + +The nested class :code:`Strategy` is the actual callback implementation. It is a sub-class of the :ref:`Callback ` class and +overrides the :code:`operator()` method. In this example, the callback prints the value of the primal solution whenever the event +triggering the callback is :code:`IncumbentSolution`. In other words, this callback will print out all incumbent solutions found by the solver. + +As for the :ref:`UserCutCallback ` and :ref:`LazyConstraintCallback ` classes, +our new callback can be added to an optimizer as follows. + +.. code:: cpp + + model.use( + Gurobi().add_callback(MyCallback()) + ); + + model.optimize(); + +A Simple Example: Knapsack Cover Cuts +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. hint:: + + This section is dedicated to the "advanced topic" of knapsack cover inequalities. + Rudimentary notions on `Knapsack problems `_ and + `Cover inequalities `_ are recommended. + + +In this example, we will show how to create a callback that separates knapsack cover cuts. A knapsack cover cut is a valid inequality +for the knapsack problem. It is defined as follows: + +.. math:: + + \sum_{i \in C} x_i \leq |C| - 1 + + +where :math:`C` defines a cover of the knapsack, i.e., a set of items such that the sum of their weights is greater than the capacity of the knapsack. + +Given a solution :math:`\hat x` to the continuous relaxation of the knapsack problem, we can check whether it violates a cover inequality. +This is done by solving the following separation problem. + +.. math:: + + \begin{align} + \max_{z} \ & (1 - \hat x)^\top z & \ge 1 \\ + \text{s.t.} \ & w^\top z \ge W + 1, \\ + & z\in\{0,1\}^n. + \end{align} + +A cover inequality is violated if and only if the optimal objective value of this problem is strictly less than 1. +In such a case, a new cut should be added. + +We will write a callback that separates knapsack cover cuts. + +To this end, we first create our knapsack problem model. This is done as follows. + +.. code:: cpp + + Env env; + Model knapsack(env, Maximize); + + const auto x = knapsack.add_vars(Dim<1>(n), 0, 1, Binary, "x"); + + knapsack.add_ctr(idol_Sum(i, Range(n_items), w[i] * x[i]) <= W); + knapsack.set_obj_expr(idol_Sum(i, Range(n_items), p[i] * x[i])); + +Then, we create our callback factory. It is this factory that will be used to create a new callback object when needed. +Since we need to pass some parameters to the callback, we will use the constructor of the callback factory to pass these parameters. +This is done as follows. + +.. code:: cpp + + + class KnapsackCover : public CallbackFactory { + const std::vector m_x; + const std::vector m_weights; + const std::vector m_profits; + const double m_capacity; + public: + KnapsackCover(const std::vector& t_x, + const std::vector& t_weights, + const std::vector& t_profits, + double t_capacity) + : m_x(t_x), m_weights(t_weights), m_profits(t_profits), m_capacity(t_capacity) {} + + class Strategy; + + Callback* operator()() { // Creates a new callback object + return new Strategy(m_x, m_weights, m_profits, m_capacity); + } + + CallbackFactory* clone() const { // Creates a copy of the callback factory + return new MyCallback(*this); + } + + } + +The real implementation of the callback is done in the nested class :code:`Strategy`. +This class is a sub-class of the :ref:`Callback ` class and is defined as follows. + +.. code:: cpp + + class KnapsackCover::Strategy { // Real callback implementation + const std::vector m_x; + const std::vector m_weights; + const std::vector m_profits; + const double m_capacity; + protected: + Strategy(const std::vector& t_x, + const std::vector& t_weights, + const std::vector& t_profits, + double t_capacity) + : m_x(t_x), m_weights(t_weights), m_profits(t_profits), m_capacity(t_capacity) {} + + void operator()(CallbackEvent t_event) { + + if (t_event != InvalidSolution) { + return; + } + + auto& env = parent().env(); + const auto fractional_point = primal_solution(); + + Model separation(env, Maximize); + + const auto z = separation.add_vars(Dim<1>(m_x.size()), 0, 1, Binary, "z"); + separation.add_ctr(idol_Sum(i, Range(m_x.size()), m_weights[i] * z[i]) >= m_capacity + 1); + separation.set_obj_expr(idol_Sum(i, Range(m_x.size()), (1 - fractional_point[i]) * z[i])); + + separation.use(Gurobi()); + + separation.optimize(); + + if (separation.get_best_obj() < 1) { + return; + } + + const auto cut = idol_Sum(i, Range(m_x.size()), separation.get_var_primal(z[i]) * (1 - x[i])) >= 1; + + add_user_cut(cut); + + } + } + +Finally, we can add our callback to the optimizer as follows. + +.. code:: + + knapsack.use( + Gurobi::Continuous().add_callback(KnapsackCover(x, w, p, W)) + ); + + knapsack.optimize(); diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/index.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/index.rst.txt new file mode 100644 index 00000000..ee6368a7 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/index.rst.txt @@ -0,0 +1,120 @@ +.. _mip_optimizers: + +.. role:: cpp(code) + :language: cpp + +Optimizers +========== + +This page discusses the concept of optimizers and optimizer factories in idol. +We will discuss how to set up an optimizer for solving a model and how to access the solution of the model. + +In idol, an optimizer is a class that is responsible for solving a given optimization problem. +It is created by an optimizer factory, which is a class that is responsible for assembling and creating optimizers. + +We start with an example. Consider the following code, which models a simple knapsack problem: + +.. code:: cpp + + Env env; + Model model(env, Maximize); + const auto x = model.add_vars(Dim<1>(3), 0, 1, Binary, "x"); + model.add_ctr(x[0] + 2 * x[1] + 3 * x[2] <= 5); + model.set_obj_expr(x[0] + x[1] + x[2]); + +The code creates a model with three binary variables, and adds a constraint and an objective function to it. +Currently, the model does not have an optimizer, so it cannot be solved. +Calling :code:`model.optimize()` will result in an exception being thrown. + +To set up an optimizer, we need to call the :code:`Model::use` method, which takes an optimizer factory as an argument. +For instance, let us use the :ref:`GLPK ` optimizer factory, which creates an optimizer using GLPK to solve our model: + +.. code:: cpp + + model.use(GLPK()); + +Here, we assume that idol was linked with the GLPK library during installation. +Now, calling :code:`model.optimize()` will cause the optimizer factory to create an optimizer, which will solve the model. +Since we are using the :ref:`GLPK ` optimizer factory, an instance of :ref:`Optimizers::GLPK ` +will be created and used to solve the model. + +Note that we can modify the model after setting up the optimizer. The optimizer will be updated accordingly. For instance. + +.. code:: + + model.add_ctr(x[0] + x[1] <= 1); // Add a new constraint + model.optimize(); // The optimizer will solve the model with the new constraint + +Idol provides several optimizer factories, each of which creates an optimizer using a different solvers or implementing different algorithms. +For instance, the :ref:`Gurobi ` optimizer factory creates an optimizer using the Gurobi solver, +while the :ref:`BranchAndBound ` optimizer factory creates an optimizer implementing a branch-and-bound algorithm. + +Typically, users only work with optimizer factories, and do not need to create optimizers directly. +Passing arguments to an optimizer is always possible at creation time through the optimizer factory. +For instance, here is a small example of how to pass a time limit to the GLPK optimizer: + +.. code:: + + model.use(GLPK().with_time_limit(10)); // add time limit of 10 seconds + +As it can be seen, arguments are given by calling the :code:`with_` method of the optimizer factory, followed by the name of the argument. + + +In some cases, it is useful to nest optimizers to, e.g., to use an optimizer to solve a sub-problem of another optimization problem. +The process of nesting optimizers is straightforward and follows the same pattern as setting up an optimizer for a model. + +For instance, consider the following code, which implements a simple branch-and-bound algorithm to solve our knapsack problem: + +.. code:: cpp + + model.use( + /* The overall algorithm is a branch-and-bound */ + BranchAndBound() + + /* Each node is solved by the continuous relaxation of the problem, with GLPK */ + .with_node_solver(GLPK::ContinuousRelaxation()) + + /* Variables are selected for branching using the most-infeasible rule */ + .with_branching_rule(MostInfeasible()) + + /* Nodes are selected using the best-bound rule */ + .with_node_selection_rule(BestBound()) + + /* Turn on logs */ + .with_logs(true) + + /* The algorithm will run with a time limit of 3600 */ + .with_time_limit(3600) + ) + ); + +In this example, we create a branch-and-bound algorithm to solve the model, and we use GLPK to solve the continuous relaxation of the problem at each node. +Also note that we can nest optimizers as many times as we want with no restrictions. + +To simplify the writing of complex optimizer factories, it may be useful to use temporary variables to store intermediate results. +For instance. + +.. code:: cpp + + const auto continuous_relaxation = GLPK::ContinuousRelaxation().with_logs(true); + const auto branching_rule = MostInfeasible(); + const auto node_selection_rule = BestBound(); + + const auto branch_and_bound = BranchAndBound() + .with_node_solver(continuous_relaxation) + .with_branching_rule(branching_rule) + .with_node_selection_rule(node_selection_rule) + .with_logs(true) + .with_time_limit(3600); + + model.use(branch_and_bound); + +.. toctree:: + :maxdepth: 1 + :glob: + + solving + access-optimizer + universal-callbacks + create-universal-callback + create-optimizer diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/solving.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/solving.rst.txt new file mode 100644 index 00000000..70750f5e --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/solving.rst.txt @@ -0,0 +1,139 @@ +Solving a Model and Accessing the Solution +========================================== + +.. contents:: Table of Contents + :local: + :depth: 2 + +Solving a Model +^^^^^^^^^^^^^^^ + +This page shoes how to solve a model and access the solution. +The reader should be familiar with the concept of optimizer and optimizer factories. If this is not the case, +please refer to the page on :ref:`Optimizers `. + +Let us consider the following code. + +.. code:: cpp + + using namespace idol; + + const unsigned int n_items = 5; + const double[] profit = { 40., 50., 100., 95., 30., }; + const double[] weight = { 2., 3.14, 1.98, 5., 3., }; + const double capacity = 10.; + + Env env; + Model model(env, Maximize); + + const auto x = model.add_vars(Dim<1>(n_items), 0., 1., Binary, "x"); + model.add(idol_Sum(j, Range(n_items), weight[j] * x[j] ) <= capacity); + model.set_obj_expr(idol_Sum(j, Range(n_items), profit[i] * x[i]); + +This code creates a model for the knapsack problem. As described in the page on :ref:`this page `, +we now set up an optimizer and solve the model. We use GLPK. + +.. code:: cpp + + model.use(GLPK()); + +Solving the model is done by a single class to the :code:`optimize` method. + +.. code:: cpp + + model.optimize(); + +Then, idol provides several methods to access the solution. + +First, :code:`get_status` and :code:`get_reason` return the status and the reason of the solution. +The status can be, for instance, :code:`Optimal` or :code:`Infeasible`. The reason provides more details about the status. +For instance, if the status is :code:`Infeasible`, the reason can be that the original problem is infeasible (:code:`Proved`), +or that the solver reached a time limit before finding a feasible solution (:code:`TimeLimit`). + +The best objective value found can be accessed using :code:`get_best_obj`. This is the best objective value among feasible solutions considered during the execution of the algorithm. +The best objective value bound can be accessed using :code:`get_best_bound`. For instance, this can be a dual bound. +The methods :code:`get_relative_gap` and :code:`get_absolute_gap` return the relative and absolute optimality gaps, respectively. +See :ref:`this page ` for more details about gaps and tolerances. + +The methods :code:`get_var_primal` and :code:`get_var_ray` return the primal value and the (primal) ray value of a given variable, respectively. +Note that primal values are only accessible if the model has status :code:`Feasible`, :code:`SubOptimal` or :code:`Optimal`. +Similarly, a primal ray is only accessible if the model has status :code:`Unbounded`. + +The methods :code:`get_ctr_dual` and :code:`get_ctr_farkas` return the dual value and the Farkas certificate value of a given constraint, respectively. +Note that dual values are only accessible if the model is continuous and has status :code:`Optimal` or :code:`Feasible`. +Similarly, a Farkas certificate is only accessible if the model has status :code:`Infeasible`. + +Saving a Solution +^^^^^^^^^^^^^^^^^ + +Sometimes, you will find it useful to save a solution to access it later. idol provides the following functions to do so: +:code:`save_primal`, :code:`save_ray`, :code:`save_dual` and :code:`save_farkas`. +Each of these functions takes a model as argument and returns an object of the class :ref:`Solution::Primal ` or :ref:`Solution::Primal ` depending on the function. +The returned object stores the results of corresponding calls to :code:`get_var_primal`, :code:`get_var_ray`, :code:`get_ctr_dual` or :code:`get_ctr_farkas` methods. + +.. admonition:: Example + + This example shows how to solve a model using HiGHS and retrieves some piece of information about its solution. + + .. code-block:: + + model.use(HiGHS()); + + model.optimize(); + + const auto status = model.get_status(); + + if (status == Optimal) { + + std::cout << "Optimal solution found!" << std::endl; + + const auto primal_values = save_primal(model); + + std::cout << primal_values << std::endl; + + } else { + + std::cout << "An optimal solution could not be found." << std::endl; + + std::cout << "HiGHS returned status " << status << std::endl; + + std::cout << "The reason for this status is " << model.get_reason() << std::endl; + + if (status == Feasible) { + + std::cout << "The optimality gap is " << model.get_relative_gap() * 100 << " %" << std::endl; + + } else if (status == Unbounded) { + + std::cout << "An unbounded ray is" << std::endl; + + const auto primal_ray = save_ray(model); + + std::cout << primal_ray << std::endl; + + } else if (status == Infeasible) { + + std::cout << "A Farkas certificate is" << std::endl; + + const auto farkas = save_farkas(model); + + std::cout << farkas << std::endl; + + } + + } + +Saving a Projected Solution +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In a more advanced solution scheme, you may deal with extended formulations of an original model, and may want to save +the projected solution on the original problem space. +In such a case, you can use the functions :code:`save_*` with an additional argument to specify the original model. +For instance. + +.. code:: cpp + + const auto primal_values = save_primal(original_model, higher_dimensional_model); + +This code will return an object of the class :ref:`Solution::Primal ` storing the results of corresponding calls to :code:`get_var_primal` methods on the higher dimensional model +for the original model variables. diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst.txt new file mode 100644 index 00000000..ccc6a329 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst.txt @@ -0,0 +1,259 @@ +.. _tutorial_user_lazy_cuts: + +Adding User Cuts and Lazy Constraints +===================================== + +.. contents:: Table of Contents + :local: + :depth: 2 + +Introduction +^^^^^^^^^^^^ + +When solving a mixed-integer program (MIP), the underlying optimizers typically make use of a branch-and-cut algorithm. +This algorithm iteratively solves a(n LP) relaxation of the problem, and then adds cuts to the problem to strengthen the relaxation. +Typically, these cuts are generated by the solver itself. However, the user can also add his or her own cuts to the problem. +This is useful when the user has domain-specific knowledge that can be used to strengthen the relaxation. + +Classically, there are two types of cuts that can be added to a MIP: user cuts and lazy constraints. + +* **User cuts** are cuts which are not necessary to define the feasible region of the problem, but which can be used to strengthen the relaxation. As a matter of fact, *User cuts never cut off feasible solutions to the original problem*. +* **Lazy constraints** are constraints which are necessary to define the feasible region of the problem but are either unlikely to be violated or impractical to generate in advance. Lazy constraints are only added to the problem if they are violated by a current solution. + +In both cases, user cuts and lazy constraints are added to the problem within a callback function, given to the optimizer. +Then, the optimizer will call this callback function at each node of the branch-and-cut tree, allowing to look for violated cuts and constraints that can be added to the problem. + +Though it is possible for the user to create his or her own callback functions, +the idol library provides a simple way to add user cuts and lazy constraints to a MIP, using the :ref:`UserCutCallback ` and :ref:`LazyCutCallback ` classes. +In case you are interested in creating your own callback functions, you can refer to :ref:`this page `. + +Now, both classes are derived from the :ref:`CallbackFactory ` class, and are used to create callback objects that can be passed to the optimizer. +They both have a similar interface: First, the user defines a model for the separation problem (i.e., the problem that will be solved to generate the cuts or constraints), +and the corresponding cut to be added to the original problem. +Then, the user creates a callback factory object, and passes the model and the cut to the factory. +The user also specifies which optimizer should be used to solve the separation problem. +Finally, the user passes the callback factory to the optimizer, which will manage the execution of the callback. + +The main difference between the two classes is that the :ref:`UserCutCallback ` class is called +whenever an invalid solution is found, e.g., a point which violates integer requirements, while the :ref:`LazyCutCallback ` class is called +whenever a new valid solution is found to check that it satisfies all the lazy constraints. + +In the next section, we will show how to implement + +* a simple separation procedure for knapsack cover inequalities using the :ref:`UserCutCallback `, and +* a straightforward Bender's decomposition algorithm using the :ref:`LazyCutCallback ` class. + +.. contents:: Table of Contents + :local: + :depth: 2 + +An Example of User Cuts: Knapsack Cover Inequalities +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. hint:: + + This section is dedicated to the "advanced topic" of knapsack cover inequalities. + Rudimentary notions on `Knapsack problems `_ and + `Cover inequalities `_ are recommended. + +Consider the following knapsack problem. + +.. math:: + + \begin{align} + \max_{x} \ & p^\top x \\ + \text{s.t.} \ & w^\top x \le W, \\ + & x\in\{0,1\}^n. + \end{align} + +Here, :math:`x` is a binary vector, :math:`p` is a vector of profits, :math:`w` is a vector of weights, and :math:`W` is the capacity of the knapsack. + +It is well-known that the knapsack problem can be strengthened by adding cover inequalities. A cover inequality is a constraint of the form + +.. math:: + + \sum_{i\in C} x_i \le |C| - 1, + +where :math:`C` defines a cover of the knapsack, i.e., a set of items such that the sum of their weights is greater than the capacity of the knapsack. + +Given a solution :math:`\hat x` to the continuous relaxation of the knapsack problem, we can check whether it violates a cover inequality. +This is done by solving the following separation problem. + +.. math:: + + \begin{align} + \max_{z} \ & (1 - \hat x)^\top z & \ge 1 \\ + \text{s.t.} \ & w^\top z \ge W + 1, \\ + & z\in\{0,1\}^n. + \end{align} + +A cover inequality is violated if and only if the optimal objective value of this problem is strictly less than 1. +In such a case, a new cut should be added. + +As anticipated, we need to define three different things: + +- the original problem, i.e., the problem to be solved by the branch-and-cut algorithm; +- the feasible region of the separation problem, i.e., the set of all cover inequalities; +- the shape of the cuts to be added. + +Defining the original problem is straightforward and can be done as follows. + +.. code:: cpp + + Env env; + Model knapsack(env, Maximize); + + const auto x = knapsack.add_vars(Dim<1>(n), 0, 1, Binary, "x"); + + knapsack.add_ctr(idol_Sum(i, Range(n_items), w[i] * x[i]) <= W); + knapsack.set_obj_expr(idol_Sum(i, Range(n_items), p[i] * x[i])); + +Similarly, the feasible region of the separation problem can be defined as follows. + +.. code:: cpp + + Model cover(env); + + const auto z = cover.add_vars(Dim<1>(n), 0, 1, Binary, "z"); + + cover.add_ctr(idol_Sum(i, Range(n_items), w[i] * z[i]) >= W + 1); + +Finally, we need to define the cuts to be added to the original problem for a given cover inequality :math:`C`. +**Cuts are always expressed as if they were part of the original problem**. What we mean by this is that, here, :math:`x` +should be seen as a *variable* while :math:`z` should be seen as a *constant*. + +We therefore have, for a given :math:`z`, + +.. code:: cpp + + const auto cover_cut = idol_Sum(i, Range(n_items), !z[i] * x[i]) <= idol_Sum(i, Range(n_items), 1 - !z[i]); + +See how the z variables are "turned into" constants by prepending them with an "!" symbol. + +We are now ready to create the callback factory and pass it to the optimizer. This is done as follows. + +.. code:: cpp + + knapsack.use( + Gurobi::Continuous() + .add_callback( + UserCutCallback(cover, cover_cut) + .with_separation_optimizer(Gurobi()) + ) + ); + + knapsack.optimize(); + +Here, we solve the continuous relaxation of the knapsack problem using the Gurobi optimizer, and add the cover inequalities using the :ref:`UserCutCallback `. + +An Example of Lazy Cut Constraints: Benders Optimality Cuts +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. hint:: + + This section is dedicated to the "advanced topic" of Benders Decomposition. + Rudimentary notions on `Linear Programming duality `_ and + `Benders Decomposition `_ the following subjects are recommended. + +We will base our example on the following model taken from `Blanco, V., (2016), Benders Decomposition, MINLP School: Theory +and Applications `_. + +.. math:: + + \begin{align} + \min_{x,y} \ & 2 x_0 + 3x_1 + 2y \\ + \text{s.t.} \ & x_0 + 2x_1 + y \ge 3, \\ + & 2x_0 - x_1 + 3y \ge 4, \\ + & x\ge 0, y\in \mathbb N. + \end{align} + +The Benders reformulation of this problem, by considering :math:`y` as the complicating variable, leads to + +.. math:: + + \begin{align} + \min_{y,z} \ & 2y + z \\ + \text{s.t.} \ & z \ge \lambda_1 ( 3 - y ) + \lambda_2(4 - 3y) \qquad \forall \lambda \in \Lambda, \\ + & z \ge 0, y\in\mathbb N, + \end{align} + +with :math:`\Lambda` defined as the set of all dual feasible points, i.e., those :math:`\lambda\in\mathbb R^2_+` such that + +.. math:: + + \begin{align} + & \lambda_0 + 2 \lambda_1 \le 2, \\ + & 2\lambda_0 - \lambda_1 \le 3. + \end{align} + +Now, we will show how to implement the Benders decomposition algorithm using the :ref:`LazyCutCallback ` class. +This will be done so that constraints :math:`z \ge \hat \lambda_1 ( 3 - y ) + \hat \lambda_2(4 - 3y)` are added to the master problem +whenever a violated Benders cut is found. + +As anticipated, we need to define three different things: + +- the master problem, i.e., the problem to be solved at each node of the branch-and-cut tree; +- the dual space :math:`\Lambda`, i.e., the feasible region of the separation problem; +- the shape of the cuts to be added. + +Defining the master problem is straightforward and can be done as follows. + +.. code:: cpp + + + Env env; + + Model master(env); + + const auto y = master.add_var(0, Inf, Integer, "y"); + const auto z = master.add_var(0, Inf, Continuous, "z"); + + master.set_obj_expr(2 * y + z); + +Similarly, the dual space :math:`\Lambda` can be defined as follows. + + +.. code:: + + Model dual_space(env); + + const auto lambda = dual_space.add_vars(Dim<1>(2), 0, Inf, Continuous, "lambda"); + + dual_space.add_ctr(lambda[0] + 2 + lambda[1] <= 2); + dual_space.add_ctr(2 * lambda[0] - lambda[1] <= 3); + + +Finally, we need to define the cuts to be added to the master problem for a given dual variable :math:`\lambda`. +**Cuts are always expressed as if they were part of the master problem**. What we mean by this is that, here, :math:`y` +should be seen as a *variable* while :math:`\lambda` should be seen as a *constant*. + +We therefore have, for a given :math:`\lambda`, + +.. code:: + + const auto benders_cut = z >= !lambda[0] * (3 - y) + !lambda[1] * (4 - 3 * y); + +See how the lambda variables are "turned into" constants by prepending them with an "!" symbol. + +We are now ready to create the callback factory and pass it to the optimizer. This is done as follows. + +.. code:: + + master.use( + Gurobi() + .add_callback( + LazyCutCallback(dual_space, benders_cut) + .with_separation_optimizer(Gurobi()) + ) + .with_lazy_cut(true) + ); + + master.optimize(); + +That's it! The optimizer will now call the callback function at each node of the branch-and-cut tree, and add the cuts to the master problem whenever a violated constraint is found. + +.. hint:: + + Here, we added a call to :code:`Gurobi::with_lazy_cut`. This is because the Gurobi optimizer does not support lazy cuts by default + and one needs to explicitly enable them. + diff --git a/_sources/tutorials/robust-optimization/column-and-constraint-generation/index.rst.txt b/_sources/tutorials/robust-optimization/column-and-constraint-generation/index.rst.txt new file mode 100644 index 00000000..1c7f8bca --- /dev/null +++ b/_sources/tutorials/robust-optimization/column-and-constraint-generation/index.rst.txt @@ -0,0 +1,12 @@ +Column-and-Constraint-Generation Algorithm +========================================== + + +.. toctree:: + :maxdepth: 1 + :glob: + + introduction + write-ccg + trust-region-stabilization + writing-separator diff --git a/_sources/tutorials/robust-optimization/column-and-constraint-generation/introduction.rst.txt b/_sources/tutorials/robust-optimization/column-and-constraint-generation/introduction.rst.txt new file mode 100644 index 00000000..e8f84a02 --- /dev/null +++ b/_sources/tutorials/robust-optimization/column-and-constraint-generation/introduction.rst.txt @@ -0,0 +1,165 @@ +Introduction +============ + +The Column-and-Constraint Generation (CCG) algorithm is a classical method for solving two-stage robust optimization problems. +It was originally introduced by :cite:`Zeng2013`. + +In idol, the implementation of CCG alows to solve a class of problems which is slightly more general than classical +two-stage robust optimization problems. This class of problems is defined in the following section. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Problem Definition and Notation +------------------------------- + +The CCG algorithm can solve optimization problems of the form + +.. math:: + :label: eq:original-problem + + \begin{align} + \min_x \quad & f(x) \\ + \text{s.t.} \quad & x\in X, \\ + & \forall \xi\in\Xi, \ \exists y\in Y(x,\xi), \ G(x,y,\xi) \le 0. + \end{align} + +in which :math:`f:\mathbb R^{n_x}\rightarrow\mathbb R` is a given function, +:math:`X\subseteq\mathbb R^{n_x}` is a given set, called the *first-stage feasible set*, +:math:`\Xi\subseteq\mathbb R^{n_\xi}` is a given set, called the *uncertainty set*, typically compact, +:math:`Y(x,\xi) \subseteq \mathbb R^{n_y}` is a set, defined for all :math:`x\in X` and :math:`\xi\in\Xi`, called the *second-stage feasible set*, and +:math:`G:\mathbb R^{n_x+n_y+n_\xi}\rightarrow\mathbb R^\ell` is a given vector of functions, defining the so-called *coupling constraints* between the uncertainty, the first- and the second-stage decisions. + +.. admonition:: Regarding Coupling Constraints + + It is clear that coupling constraints are redundant since they can be incorporated into the definition of the second-stage feasible set. + However, we will see that explicitly defining *coupling constraints* may lead to different implementations of the CCG algorithm. + We will dive into this aspect after introducing the concept of *separators*. + +.. hint:: + + Consider the Min-Max-Min problem + + .. math:: + + \min_{x\in X} \ \max_{\xi\in\Xi} \ \min_{y\in Y(x,\xi)} \ \psi(x,y,\xi). + + Clearly, this is a special case of :math:numref:`eq:original-problem` since it can be written as + + .. math:: + + \begin{align} + \min_{x_0,x} \quad & x_0 \\ + \text{s.t.} \quad & (x_0,x) \in\mathbb R\times X, \\ + & \forall \xi\in\Xi, \ \exists y\in Y(x,\xi), \ \psi(x,y,\xi) \le x_0. + \end{align} + + Here, there is only one coupling constraint, which is :math:`\psi(x,y,\xi) \le x_0`. + + +The Algorithm +------------- + +Basic Idea +^^^^^^^^^^ + +The idea of the CCG algorithm is to consider a finite subset of points in :math:`\Xi`, say :math:`\{ \xi^1, \dotsc, \xi^k \}`, +and to solve the following problem instead of :math:numref:`eq:original-problem`: + +.. math:: + :label: eq:master-problem + + \begin{align} + \min_{x_0,x,y^1,\dotsc,y^K} \quad & f(x) \\ + \text{s.t.} \quad & x\in X, \\ + & G(x,y^t,\xi^t) \le 0 \qquad k=1,\dotsc,K, \\ + & y^t\in Y(x,\xi^t) \qquad k=1,\dotsc,K. + \end{align} + +Here, a new variable :math:`y^t` has been introduced for each :math:`t=1,...,k`, enforcing that, indeed, +there exists :math:`y^t\in Y(x,\xi^t)` such that :math:`G(x,y^t,\xi^t) \le 0`. + +Note that Problem :math:numref:`eq:master-problem` is a relaxation of Problem :math:numref:`eq:original-problem` since +any feasible point of :math:numref:`eq:original-problem` is also feasible for :math:numref:`eq:master-problem` (for some :math:`y^1,\dotsc,y^K`). + +Now, given a solution :math:`\hat x\in X` to the relaxed problem :math:numref:`eq:master-problem`, +one needs to check whether :math:`\hat x` is feasible for Problem :math:numref:`eq:original-problem`. +Thus, one seeks a scenario :math:`\xi^*\in\Xi` such that, either :math:`Y(\hat x, \xi^*)` is empty, or :math:`G(\hat x,y,\xi^*) > 0` for all :math:`y\in Y(\hat x, \xi^*)`. +If no such scenario exists, then :math:`\hat x` is feasible for :math:numref:`eq:original-problem`. Otherwise, the new scenario :math:`\xi^*` is added to the set of considered scenarios and the process is repeated. + +Identifying a missing scenario is called *separation*, and can be done by solving the following problem: + +.. math:: + :name: eq:separation-problem + + \max_{\xi\in \Xi} \ \max_{\ell=1,...,L} \left\{ \ \min_{ y\in Y(\hat x,\xi) } \ G_\ell(\hat x,y,\xi) \right\}. + +If the optimal value of the separation problem is non-positive, then :math:`\hat x` is feasible for :math:numref:`eq:original-problem`. +Otherwise, the solution to the separation problem gives a new scenario :math:`\xi^*` to be added to the set of scenarios. + +Note that we use the convention :math:`\max \emptyset = -\infty` and :math:`\min \emptyset = +\infty`. + +Separators +^^^^^^^^^^ + +Clearly, the separation problem :math:numref:`eq:separation-problem` can be solved in many different ways. In idol, +it is therefore possible to give a user-defined functor, called a *separator*, which solves the separation problem. +Note that the most common ways to solve the separation problem are already implemented in idol. +Yet, if you wish to implement your own separator, you should refer to :ref:`this tutorial `. + +Shortly put, the separator solves problems of the form + +.. math:: + :label: eq:single-separation-problem + + \max_{\xi\in \Xi} \ \min_{ y\in Y(\hat x,\xi) } \ G_\ell(\hat x,y,\xi), + +for a given :math:`G_\ell` (:math:`\ell\in\{1,...,L\}`). + +Note that it is ensured that the separator always solves a problem which is feasible. +Indeed, in case Problem :math:numref:`eq:separation-problem` +is not known to satisfy the *complete recourse assumption* (i.e., it is not known whether :math:`\forall x\in X, \forall\xi\in\Xi, \exists y\in Y(x,\xi)` holds), +the CCG algorithm will first solve a feasibility version of the separation problem to check whether +:math:`\hat x` is such that for all :math:`\xi\in\Xi` there exists :math:`y\in Y(\hat x,\xi)`. +Fortunately, it is also possible to specify that the complete recourse assumption holds, in which case the feasibility version of the separation problem is not solved. + +Let :math:`\xi^{\ell}` denote the solution to the separation problem :math:numref:`eq:single-separation-problem` for a given :math:`\ell\in\{1,...,L\}`. +Then, a scenario :math:`\xi^{\ell^*}` is added to Problem :math:numref:`eq:master-problem` if and only if + +.. math:: + + \ell^* \in \underset{\ell=1,...,L}{\text{argmax}} \ \min_{ y\in Y(\hat x,\xi^\ell) } \ G_\ell(\hat x,y,\xi^\ell) > \varepsilon_\text{feas}. + +See :ref:`the dedicated page ` for more details. + +On the Impact of Coupling Constraints +------------------------------------- + +We now discuss the impact of the definition of the coupling constraints :math:`G` on the implementation of the CCG algorithm. +Clearly, one obtains an equivalent problem to :math:numref:`eq:original-problem` by defining the second-stage feasible set as + +.. math:: + + \tilde Y(x,\xi) = \{ y\in Y(x,\xi) \ | \ G(x,y,\xi) \le 0 \}, + +and by considering the problem + +.. math:: + + \begin{align} + \min_x \quad & f(x) \\ + \text{s.t.} \quad & x\in X, \\ + & \forall \xi\in\Xi, \ \exists y\in \tilde Y(\hat x,\xi). + \end{align} + +In this case, the separation problem becomes + +.. math:: + + \max_{\xi\in\Xi} \ \min_{ y\in \tilde Y(\hat x,\xi) } \ 0, + +which is a feasibility problem. + +Though the two approaches are equivalent, in the sense that they will both lead to a solution to :math:numref:`eq:original-problem`, +they may lead to different computational performances. An interested reader may refer to, e.g., :cite:`Ayoub2016` for more details. diff --git a/_sources/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.rst.txt b/_sources/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.rst.txt new file mode 100644 index 00000000..d38ce803 --- /dev/null +++ b/_sources/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.rst.txt @@ -0,0 +1,132 @@ +Using Trust Region Stabilization +================================ + +This tutorial describes how to use the trust region stabilization in the CCG algorithm. +This stabilization technique is inspired by the work of :cite:`Baena2020` on Benders decomposition. + +.. admonition:: Assumption + + This feature is only applicable if the first-stage decisions are binary, i.e., :math:`X \subseteq \{0,1\}^{n_x}`. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Introduction +------------ + +In this section, we discuss stabilization of the CCG algorithm if the first-stage decisions are binary, i.e., :math:`X \subseteq \{0,1\}^{n_x}`. + +Let :math:`\bar x` be a given stability center, i.e., a point that is thought to be a "good" solution to the problem. +The following constraint is called a *local branching constraint*: + +.. math:: + + \Delta(x,\bar x) := \sum_{i:\bar x_i = 1} (1 - x_i) + \sum_{i:\bar x_i = 0} x_i \le \rho, + +with :math:`\rho` a given radius. Additionally, we call *reversed local branching constraint* the following constraint: + +.. math:: + + \Delta(x,\bar x) \ge \rho + 1. + +At each iteration, the stabilized CCG algorithm solves the following problem instead of :math:numref:`eq:master-problem`: + +.. math:: + + \begin{align} + \min_{x_0,x} \quad & f(x) \\ + \text{s.t.} \quad & x\in X, \\ + & G(x,y^t,\xi^t) \le 0 \quad t=1,\dotsc,k, \\ + & y^t\in Y(x,\xi^t) \quad t=1,\dotsc,k, \\ + & \Delta(x,\bar x) \le \rho, \\ + & \Delta(x,\bar x') \ge \rho' + 1 \quad \forall (\bar x', \rho') \in R, + \end{align} + +for some set :math:`R\subseteq X\times\mathbb N` of reversed local branching constraints. + +The complete stabilized CCG algorithm is described with the following pseudocode. + +.. raw:: html + +
+        \begin{algorithm}
+        \caption{Stabilized CCG Algorithm}
+        \begin{algorithmic}
+        \REQUIRE An initial radius \( \rho\in\{ 1,\dotsc, n_x \} \) and an initial point \( \bar x\in X \).
+        \STATE Initialize \( k \gets 0 \), \( UB \gets +\infty \), \( LB \gets -\infty \), \( R \gets \emptyset \)
+        \STATE Solve the restricted master problem (RMP)
+        \IF{the RMP is infeasible}
+            \IF{ \( \rho \ge n_x \) }
+                \STATE STOP, \( UB \) is the optimal value.
+            \ENDIF
+            \STATE Add a reversed local branching constraint, \( R \gets R \cup (\bar x, \rho) \)
+            \STATE Increase \( \rho \)
+        \ELSE
+            \STATE Let \( x^k \) be the solution of the RMP and \( v^k \) be its value
+            \STATE Solve the separation problem, let \( \xi^k \) be the solution and \( s^k \) be its value
+            \IF{ \( s^k \le \varepsilon_\text{feas} \) }
+                \STATE \( UB \gets \min\{ UB, v^k \} \)
+                \STATE Solve the RMP without the stabilization constraints, let $\underline v^k$ be its value, set \( LB \gets \underline v^k \)
+                \IF{ \( UB - LB \le \varepsilon \) }
+                    \STATE STOP, \( UB \) is the optimal value.
+                \ENDIF
+                \STATE Add a reversed local branching constraint, \( R \gets R \cup (x^k, \rho) \)
+                \STATE Update the stability center \( \bar x \gets x^k \)
+                \STATE Optionally, reset \( \rho \gets 1 \)
+            \ENDIF
+            \STATE \( k \gets k + 1 \)
+            \STATE Go back to step 2
+        \ENDIF
+        \end{algorithmic}
+        \end{algorithm}
+    
+ + +Note that if :math:`\rho \ge n_x`, the stabilized CCG is exactly the CCG algorithm. + +Implementation in idol +---------------------- + +Activating the trust region stabilization in idol is done through the method :code:`with_stabilization` of the :code:`idol::Robust::ColumnAndConstraintGeneration` class. +An object of the class :code:`Robust::CCGStabilizers::TrustRegion` must be passed as an argument to the method. + +The following code shows how to use the trust region stabilization in idol. + +.. code:: + + model.use( + Robust::ColumnAndConstraintGeneration(stages, uncertainty_set) + .with_master_optimizer(Gurobi()) + .with_separator(Robust::CCGSeparators::Bilevel()) + .with_stabilization(Robust::CCGStabilizers::TrustRegion()) + .with_logs(true) + ); + + model.optimize(); + +Note that the radius :math:`\rho` is set to + +.. math:: + + \rho \gets \lceil \mu_i n_x \rceil + +where :math:`\mu_i` is a parameter controlling the size of the trust region and :math:`n_x` is the number of (binary) first-stage variables. By default, :math:`\mu_i` takes value in +::math:`\lbrace .01, .02, .5 \rbrace`. +You can set the values of :math:`\mu_i` by calling the method :code:`with_trust_factors` of the class :code:`Robust::CCGStabilizers::TrustRegion`. +For instance, the following code sets the trust factors to :math:`\lbrace .02, .5 \rbrace`. + +.. code:: + + model.use( + Robust::ColumnAndConstraintGeneration(stages, uncertainty_set) + .with_master_optimizer(Gurobi()) + .with_separator(Robust::CCGSeparators::Bilevel()) + .with_stabilization( + Robust::CCGStabilizers::TrustRegion() + .with_trust_factors({.02, .5}) + ) + .with_logs(true) + ); diff --git a/_sources/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.rst.txt b/_sources/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.rst.txt new file mode 100644 index 00000000..0907e718 --- /dev/null +++ b/_sources/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.rst.txt @@ -0,0 +1,49 @@ +.. _tutorial_ccg: + +Writing a Column-and-Constraint-Generation Algorithm +==================================================== + +In this tutorial, we will see how to write a column-and-constraint-generation to solve a two-stage robust problem. + +To this end, we will assume that you have your two-stage robust problem modeled already in idol. In particular, +we consider that you have + +1. :code:`(idol::Model) model` which is the deterministic model of the problem in which the uncertain data are seen as parameters. + +2. :code:`(idol::Model) uncertainty_set` which is the uncertainty set of the robust problem. + +3. :code:`(idol::Robust::StageDescription) stages` which stores the assignments of variables and constraints to each stage. + +If you do not know what these are, please refer to the tutorial on :ref:`how to model a two-stage robust problem `. + +Then, you can solve this two-stage robust problem using a column-and-constraint-generation algorithm as follows: + +.. code:: + + model.use( + Robust::ColumnAndConstraintGeneration(stages, uncertainty_set) + .with_master_optimizer(Gurobi()) + .with_separator(Robust::CCGSeparators::Bilevel()) + .with_logs(true) + ); + + model.optimize(); + + std::cout << save_primal(model) << std::endl; + +Notice that the optimizer is attached to the deterministic model and that both the uncertainty set and the stages are passed as arguments. +An optimizer to solve the master problem is necessary and will be called when needed. Here, we use the Gurobi optimizer. + +Most importantly, it is also necessary to specify a separator. The separator is a sub-routine of the CCG algorithm +which solves the separation problem, i.e., it finds the worst-case scenario for a given solution to the master problem. +In this example, we use the Bilevel separator which calls the MibS bilevel optimization solver at each iteration. + +Finally, the method :code:`optimize` is called to solve the problem and the solution is printed. + +.. admonition:: + + Here, we have assumed that the problem does not satisfy the complete recourse assumption, i.e., it is not known if + :math:`\forall x\in X, \forall\xi\in\Xi, \exists y\in Y(x,\xi)`. If, to the contrary, this assumption holds, + it can be communicated to the solver by calling the method :code:`with_complete_recourse(true)`. By doing this, + the CCG algorithms will not solve the feasibility separation problem which is most likely to result in a faster convergence. + diff --git a/_sources/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.rst.txt b/_sources/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.rst.txt new file mode 100644 index 00000000..5cc62d57 --- /dev/null +++ b/_sources/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.rst.txt @@ -0,0 +1,8 @@ +.. _tutorial_write_ccg_separator: + +Writing Your Own Separator (Advanced) [TODO] +============================================ + +.. warning:: + + This is a work in progress. Thank you for your understanding. diff --git a/_sources/tutorials/robust-optimization/index.rst.txt b/_sources/tutorials/robust-optimization/index.rst.txt new file mode 100644 index 00000000..2be1b7a5 --- /dev/null +++ b/_sources/tutorials/robust-optimization/index.rst.txt @@ -0,0 +1,11 @@ +.. _robust: + +Robust Optimization +=================== + +.. toctree:: + :maxdepth: 3 + :glob: + + modeling/index + column-and-constraint-generation/index diff --git a/_sources/tutorials/robust-optimization/modeling/index.rst.txt b/_sources/tutorials/robust-optimization/modeling/index.rst.txt new file mode 100644 index 00000000..0881dccb --- /dev/null +++ b/_sources/tutorials/robust-optimization/modeling/index.rst.txt @@ -0,0 +1,8 @@ +Modeling +======== + +.. toctree:: + :maxdepth: 1 + :glob: + + two-stage-robust diff --git a/_sources/tutorials/robust-optimization/modeling/two-stage-robust.rst.txt b/_sources/tutorials/robust-optimization/modeling/two-stage-robust.rst.txt new file mode 100644 index 00000000..55e58d6d --- /dev/null +++ b/_sources/tutorials/robust-optimization/modeling/two-stage-robust.rst.txt @@ -0,0 +1,219 @@ +.. _modeling_two_stage_robust_problem: + +Modeling a Two-Stage Robust Problem +=================================== + +In this tutorial, we will see how to model a two-stage robust problem in idol. + +To follow this tutorial, you should be familiar with two-stage robust optimization and modeling optimization problems in idol. +If this is not the case, we recommend you to read the tutorial on :ref:`MIP modeling `. + +.. contents:: Table of Contents + :local: + :depth: 2 + +A Two-Stage Robust Facility Location Problem +-------------------------------------------- + +We consider a two-stage robust facility location problem (FLP) where demands are uncertain. + +Given a set of potential facility locations :math:`V_1` and a set of customers :math:`V_2`, the goal is to select a subset of facility locations +to activate in order to serve all customers' demand, while minimizing the total cost. +This version introduces uncertainty in the customers' demands. + +Note that there is also an example for the :ref:`deterministic version of the FLP using Column Generation `. + +Each facility :math:`i\in V_1` has an opening cost :math:`f_i` and a maximum capacity :math:`q_i`. +Each customer :math:`j\in V_2` has a demand :math:`d_j`. +The unitary cost for serving customer :math:`j\in V_2` from facility :math:`i\in V_1` is :math:`t_{ij}`. +The uncertainty in customer demands is controlled by a parameter :math:`\Gamma`. + +In this robust variant, we consider that the demands are uncertain and can be expressed as :math:`d_j(\xi) = d_j(1 + p\xi_j)` +with :math:`p` being the maximum increase in demand and :math:`\xi` being an unknown vector taken in the uncertainty set + +.. math:: + + \Xi := \left\{ \xi\in[ 0, 1 ]^{|V_2|} : \sum_{j\in V_2} \xi_j \le \Gamma \right\}. + +We model the two-stage robust FLP as + +.. math:: + + \min_{x\in \{0,1\}^{|V_1|}} \ \left\{ \sum_{i\in V_1} f_i x_i + \max_{\xi\in \Xi} \ \min_{y\in Y(x,\xi)} \ \sum_{i\in V_1} \sum_{j\in V_2} t_{ij} y_{ij} \right\} + +where :math:`Y(x,\xi)` is the set of feasible solutions for the second stage problem, given the first stage solution :math:`x` and the realization :math:`\xi` of the uncertain demand vector. +It is defined as the set of vectors :math:`y\in \mathbb{R}^{|V_1|\times|V_2|}` that satisfy the following constraints + +.. math:: + + \begin{align*} + & \sum_{i\in V_1} y_{ij} = d_j(\xi) && j\in V_2, \\ + & \sum_{j\in V_2} y_{ij} \le q_i x_i && i\in V_1, \\ + & y_{ij} \ge 0 && i\in V_1, j\in V_2. + \end{align*} + +In what follows, we will assume that we have a variable :code:`instance` of type :code:`idol::Problems::FLP::Instance` +that contains the data of the problem. Most typically, you will want to read the instance from a file. This is done as follows. + +.. code:: + + // Read instance + const auto instance = Problems::FLP::read_instance_1991_Cornuejols_eal("robust_ccg.data.txt"); + +Additionally, we define an optimization environment :code:`env` and some parameters. + +.. code:: + + Env env; + + const double Gamma = 3; + const double percentage_increase = .2; + +Modeling Steps +-------------- + +To model a two-stage robust problem, one needs to perform the following steps: + +1. Define an uncertainty set :math:`\Xi`. +2. Define the deterministic model in which :math:`\xi` is a parameter. +3. Assign a stage to each variable and constraint. + +Let's see how these steps are done in idol. + +Defining the Uncertainty Set +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Modeling the uncertainty set :math:`\Xi` is done in the same way as modeling any classical optimization problem. +For instance, one can do as follows. + +.. code:: + + const unsigned int n_customers = instance.n_customers(); + + Model uncertainty_set(env); + + auto xi = uncertainty_set.add_vars(Dim<1>(n_customers), 0., 1, Binary, "xi"); + uncertainty_set.add_ctr(idol_Sum(j, Range(n_customers), xi[j]) <= Gamma); + +Note that defining an objective function is not necessary since the uncertainty set is not optimized over. +If an objective function is defined, it will be ignored by the optimizer. + +Defining the Deterministic Model +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The deterministic model underlying the two-stage robust FLP is the same as the classical FLP, except that the demand is seen as a parameter. + +Recall that a variable, e.g., :code:`xi[0]`, can be turned into a parameter by prepending it with :code:`!`. + +Hence, +we can define the deterministic model as follows. + +.. code:: + + const unsigned int n_facilities = instance.n_facilities(); + + Model model(env); + + const auto x = model.add_vars(Dim<1>(n_facilities), 0., 1., Binary, "x"); + const auto y = model.add_vars(Dim<2>(n_facilities, n_customers), 0., Inf, Continuous, "y"); + + // Capacity constraints + for (unsigned int i = 0 ; i < n_facilities ; ++i) { + model.add_ctr(idol_Sum(j, Range(n_customers), y[i][j]) <= instance.capacity(i) * x[i]); + } + + // Demand satisfaction constraints + for (unsigned int j = 0 ; j < n_customers ; ++j) { + // IMPORTANT: here we use the parameter "!xi[j]" instead of the variable "xi[j]" + model.add_ctr(idol_Sum(i, Range(n_facilities), y[i][j]) == instance.demand(j) * (1 + percentage_increase * !xi[j])); + } + + // Objective function + model.seobj_expr(idol_Sum(i, Range(n_facilities), + instance.fixed_cost(i) * x[i] + + idol_Sum(j, Range(n_customers), + instance.per_unit_transportation_cost(i, j) * y[i][j] + ) + ) + ); + +Assigning Stages +^^^^^^^^^^^^^^^^ + +The last step is to assign a stage to each variable and constraint. Here, variables :math:`x` are first-stage variables +and variables :math:`y` are second-stage variables, i.e., they depend on the realization of the uncertain demand. +Similarly, all constraints are second-stage constraints since they are part of the second-stage feasible region. + +Assigning stages is done by creating a new object of type :code:`idol::Robust::StageDescription`. +Under the hood, this object does nothing more but defining new annotations for variables and constraints storing +the assigned stage of each variable and constraint. It is created as follows. + +.. code:: + + Robust::StageDescription stages(env); + +By default, all variables and constraints are assigned to the first stage. +To assign a variable or constraint to the second stage, one can use the method :code:`set_stage` of the object :code:`stages`. +For instance, one can do as follows. + +.. code:: + + for (const auto& var : model.vars()) { + if (var.name().front() != 'x') { + stages.set_stage(var, 2); + } + } + +Similarly, since all constraints are second-stage constraints, one can do as follows. + +.. code:: + + for (const auto& ctr : model.ctrs()) { + stages.set_stage(ctr, 2); + } + +.. admonition:: About stage annotations + + Note that it is also possible to define your own annotations to assign variables and constraints to stages. + This is a rather advanced feature and it is your responsability to ensure that the annotations are consistent with the model. + + The annotations are based on the following conventions: all first-stage variables and constraints have the annotation evaluating to :code:`MasterId`. + All second-stage variables and constraints have the annotation evaluating to :code:`0`. + + For instance, the following code is equivalent to the previous one. + + .. code:: + + Annotation stage_vars(model, "stage_vars", MasterId); // By default, all variables are first-stage variables + Annotation stage_ctrs(model, "stage_ctrs", MasterId); // By default, all constraints are first-stage constraints + + for (const auto& var : model.vars()) { + if (var.name().front() != 'x') { + var.set(stage_vars, 0); // Assign variable to the second stage + } + } + + for (const auto& ctr : model.ctrs()) { + ctr.set(stage_ctrs, 0); // Assign constraint to the second stage + } + + idol::Robust::StageDescription stages(stage_vars, stage_ctrs); + + By doing so, a call to :code:`stages.stage(var)` will return "1" for all first-stage variables and "2" for all second-stage variables. + The underlying annotation can be obtained using + + .. code:: + + Annotation stage_vars = stages.stage_vars() + + Finally, also note the method :code:`stages.stage_index(var)` that will return "0" for all first-stage variables and "1" for all second-stage variables. + + +That's it! We have now modeled a two-stage robust FLP in idol. Note that you will now need +to attach an optimizer to the model to solve it. +To this end, be sure to check the tutorials on optimizers for two-stage robust problems, e.g., :ref:`the column-and-constraint generation tutorial `. + +Complete Example +---------------- + +A complete example is given :ref:`here ` \ No newline at end of file diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000..81415803 --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..7ebbd6d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 00000000..2ea7ff3e --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 00000000..88ba55b9 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 00000000..0f14f106 --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search .wy-dropdown>aactive,.wy-side-nav-search .wy-dropdown>afocus,.wy-side-nav-search>a:hover,.wy-side-nav-search>aactive,.wy-side-nav-search>afocus{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon,.wy-side-nav-search>a.icon{display:block}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.switch-menus{position:relative;display:block;margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-side-nav-search>div.switch-menus>div.language-switch,.wy-side-nav-search>div.switch-menus>div.version-switch{display:inline-block;padding:.2em}.wy-side-nav-search>div.switch-menus>div.language-switch select,.wy-side-nav-search>div.switch-menus>div.version-switch select{display:inline-block;margin-right:-2rem;padding-right:2rem;max-width:240px;text-align-last:center;background:none;border:none;border-radius:0;box-shadow:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-size:1em;font-weight:400;color:hsla(0,0%,100%,.3);cursor:pointer;appearance:none;-webkit-appearance:none;-moz-appearance:none}.wy-side-nav-search>div.switch-menus>div.language-switch select:active,.wy-side-nav-search>div.switch-menus>div.language-switch select:focus,.wy-side-nav-search>div.switch-menus>div.language-switch select:hover,.wy-side-nav-search>div.switch-menus>div.version-switch select:active,.wy-side-nav-search>div.switch-menus>div.version-switch select:focus,.wy-side-nav-search>div.switch-menus>div.version-switch select:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.5)}.wy-side-nav-search>div.switch-menus>div.language-switch select option,.wy-side-nav-search>div.switch-menus>div.version-switch select option{color:#000}.wy-side-nav-search>div.switch-menus>div.language-switch:has(>select):after,.wy-side-nav-search>div.switch-menus>div.version-switch:has(>select):after{display:inline-block;width:1.5em;height:100%;padding:.1em;content:"\f0d7";font-size:1em;line-height:1.2em;font-family:FontAwesome;text-align:center;pointer-events:none;box-sizing:border-box}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/design.css b/_static/design.css new file mode 100644 index 00000000..ac589bf6 --- /dev/null +++ b/_static/design.css @@ -0,0 +1,175 @@ + +html { + scroll-behavior: smooth; +} + +.wy-nav-content { + font-family: -apple-system, BlinkMacSystemFont, + "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", + "Droid Sans", "Helvetica Neue", sans-serif; + line-height: 2.5em; +} + +* { + font-weight:300; +} + +h1, h2, h3, h4, h5, h6 { + font-weight:300; + font-family: -apple-system, BlinkMacSystemFont, + "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", + "Droid Sans", "Helvetica Neue", sans-serif; +} + +.my-button { + display: inline-block; + box-sizing: border-box; + padding: 0.3em 1em; + margin: 5px; + font-family: inherit; + font-size: inherit; + font-weight: 500; + line-height: 1.5; + color: gray; + text-decoration: none; + vertical-align: baseline; + cursor: pointer; + background-color: #f7f7f7; + border-width: 0; + border-radius: 4px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); + appearance: none; +} + +.my-button:hover { + background-color: #f5f5f5; +} + +.my-button:visited { + color: gray; +} + +#get-started { + background-color: #1f883d; + color: white; +} + +#get-started:hover { + background-color: #1c8139; +} + +.wy-nav-content-wrap { + background-color:#fcfcfc; +} + +.wy-nav-side { + border-right: 1px solid #eeebee; + background-color:#f5f6fa; +} + +.wy-menu-vertical a { + color: #404040; +} + +.wy-side-nav-search { + background-color: initial; + margin-bottom: 20px; + + #rtd-search-form { + border-top: 1px solid #e1e4e5; + margin-top: 10px; + padding-top: 20px; + } + + a { + color: #404040; + font-family: -apple-system, BlinkMacSystemFont, + "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", + "Droid Sans", "Helvetica Neue", sans-serif; + font-weight:300; + font-size :2.25em; + overflow-wrap: break-word; + } + + a:before { + content: ""; + } + +} + +.wy-menu-vertical li.toctree-l1.current > a { + border-top : 1px solid #efefef; + border-bottom : 1px solid #efefef; +} + +.wy-side-nav-search input[type=text] { + border-color: #e1e4e5; +} + +.toctree-l1 a:hover { + background-color:white; +} + +.rst-content div[class^=highlight], .rst-content pre.literal-block { + border: 1px solid #e1e4e5; + border-radius: 4px; + padding: 12px; + background-color: #f8f8f8; +} + +.admonition { + border-left:4px solid #6ab0de; + border-radius:4px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08); +} + +.rst-content .admonition-title, .wy-alert-title, +.rst-content .note .admonition-title, .rst-content .note .wy-alert-title, .rst-content .seealso .admonition-title, .rst-content .seealso .wy-alert-title, .rst-content .wy-alert-info.admonition-todo .admonition-title, .rst-content .wy-alert-info.admonition-todo .wy-alert-title, .rst-content .wy-alert-info.admonition .admonition-title, .rst-content .wy-alert-info.admonition .wy-alert-title, .rst-content .wy-alert-info.attention .admonition-title, .rst-content .wy-alert-info.attention .wy-alert-title, .rst-content .wy-alert-info.caution .admonition-title, .rst-content .wy-alert-info.caution .wy-alert-title, .rst-content .wy-alert-info.danger .admonition-title, .rst-content .wy-alert-info.danger .wy-alert-title, .rst-content .wy-alert-info.error .admonition-title, .rst-content .wy-alert-info.error .wy-alert-title, .rst-content .wy-alert-info.hint .admonition-title, .rst-content .wy-alert-info.hint .wy-alert-title, .rst-content .wy-alert-info.important .admonition-title, .rst-content .wy-alert-info.important .wy-alert-title, .rst-content .wy-alert-info.tip .admonition-title, .rst-content .wy-alert-info.tip .wy-alert-title, .rst-content .wy-alert-info.warning .admonition-title, .rst-content .wy-alert-info.warning .wy-alert-title, .rst-content .wy-alert.wy-alert-info .admonition-title, .wy-alert.wy-alert-info .rst-content .admonition-title, .wy-alert.wy-alert-info .wy-alert-title { + background-color: initial; + color:#6ab0de; + padding:15px; +} + +.rst-content .attention, .warning { + border-left:4px solid #f0ad4e; +} + +.rst-content .danger { + border-left:4px solid #d9534f; + + .admonition-title { + background-color: initial; + color:#d9534f; + } +} + +.hint { + border-left:4px solid #1abc9c; +} + +.rst-content .hint .admonition-title, .rst-content .hint .wy-alert-title, .rst-content .important .admonition-title, .rst-content .important .wy-alert-title, .rst-content .tip .admonition-title, .rst-content .tip .wy-alert-title, .rst-content .wy-alert-success.admonition-todo .admonition-title, .rst-content .wy-alert-success.admonition-todo .wy-alert-title, .rst-content .wy-alert-success.admonition .admonition-title, .rst-content .wy-alert-success.admonition .wy-alert-title, .rst-content .wy-alert-success.attention .admonition-title, .rst-content .wy-alert-success.attention .wy-alert-title, .rst-content .wy-alert-success.caution .admonition-title, .rst-content .wy-alert-success.caution .wy-alert-title, .rst-content .wy-alert-success.danger .admonition-title, .rst-content .wy-alert-success.danger .wy-alert-title, .rst-content .wy-alert-success.error .admonition-title, .rst-content .wy-alert-success.error .wy-alert-title, .rst-content .wy-alert-success.note .admonition-title, .rst-content .wy-alert-success.note .wy-alert-title, .rst-content .wy-alert-success.seealso .admonition-title, .rst-content .wy-alert-success.seealso .wy-alert-title, .rst-content .wy-alert-success.warning .admonition-title, .rst-content .wy-alert-success.warning .wy-alert-title, .rst-content .wy-alert.wy-alert-success .admonition-title, .wy-alert.wy-alert-success .rst-content .admonition-title, .wy-alert.wy-alert-success .wy-alert-title { + background-color: initial; + color:#1abc9c; +} + +.rst-content .attention .admonition-title, +.rst-content .caution .admonition-title, +.rst-content .warning .admonition-title { + background-color: initial; + color:#f0ad4e; +} + +.fa-exclamation-circle:before, .rst-content .admonition-title:before, .wy-inline-validate.wy-inline-validate-info .wy-input-context:before, .wy-inline-validate.wy-inline-validate-warning .wy-input-context:before { + content: ""; +} + +.document { + text-align: justify; +} + +.eqno { + float:right; +} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..7e4c114f --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/fonts/Lato/lato-bold.eot b/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/_static/fonts/Lato/lato-bold.eot differ diff --git a/_static/fonts/Lato/lato-bold.ttf b/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.ttf differ diff --git a/_static/fonts/Lato/lato-bold.woff b/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff differ diff --git a/_static/fonts/Lato/lato-bold.woff2 b/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/_static/fonts/Lato/lato-bolditalic.eot b/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/_static/fonts/Lato/lato-bolditalic.ttf b/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff b/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/_static/fonts/Lato/lato-bolditalic.woff2 b/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/_static/fonts/Lato/lato-italic.eot b/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.eot differ diff --git a/_static/fonts/Lato/lato-italic.ttf b/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.ttf differ diff --git a/_static/fonts/Lato/lato-italic.woff b/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff differ diff --git a/_static/fonts/Lato/lato-italic.woff2 b/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/_static/fonts/Lato/lato-regular.eot b/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.eot differ diff --git a/_static/fonts/Lato/lato-regular.ttf b/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/_static/fonts/Lato/lato-regular.ttf differ diff --git a/_static/fonts/Lato/lato-regular.woff b/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff differ diff --git a/_static/fonts/Lato/lato-regular.woff2 b/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 00000000..30f3837b --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,12 @@ +/* + * Sphinx stylesheet -- graphviz extension. + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 00000000..c4c6022f --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t +
Languages
+ ${config.projects.translations + .map( + (translation) => ` +
+ ${translation.language.code} +
+ `, + ) + .join("\n")} + + `; + return languagesHTML; + } + + function renderVersions(config) { + if (!config.versions.active.length) { + return ""; + } + const versionsHTML = ` +
+
Versions
+ ${config.versions.active + .map( + (version) => ` +
+ ${version.slug} +
+ `, + ) + .join("\n")} +
+ `; + return versionsHTML; + } + + function renderDownloads(config) { + if (!Object.keys(config.versions.current.downloads).length) { + return ""; + } + const downloadsNameDisplay = { + pdf: "PDF", + epub: "Epub", + htmlzip: "HTML", + }; + + const downloadsHTML = ` +
+
Downloads
+ ${Object.entries(config.versions.current.downloads) + .map( + ([name, url]) => ` +
+ ${downloadsNameDisplay[name]} +
+ `, + ) + .join("\n")} +
+ `; + return downloadsHTML; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const flyout = ` +
+ + Read the Docs + v: ${config.versions.current.slug} + + +
+
+ ${renderLanguages(config)} + ${renderVersions(config)} + ${renderDownloads(config)} +
+
On Read the Docs
+
+ Project Home +
+
+ Builds +
+
+ Downloads +
+
+
+
Search
+
+
+ +
+
+
+
+ + Hosted by Read the Docs + +
+
+ `; + + // Inject the generated flyout into the body HTML element. + document.body.insertAdjacentHTML("beforeend", flyout); + + // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout. + document + .querySelector("#flyout-search-form") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); + }) +} + +if (themeLanguageSelector || themeVersionSelector) { + function onSelectorSwitch(event) { + const option = event.target.selectedIndex; + const item = event.target.options[option]; + window.location.href = item.dataset.url; + } + + document.addEventListener("readthedocs-addons-data-ready", function (event) { + const config = event.detail.data(); + + const versionSwitch = document.querySelector( + "div.switch-menus > div.version-switch", + ); + if (themeVersionSelector) { + let versions = config.versions.active; + if (config.versions.current.hidden || config.versions.current.type === "external") { + versions.unshift(config.versions.current); + } + const versionSelect = ` + + `; + + versionSwitch.innerHTML = versionSelect; + versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + + const languageSwitch = document.querySelector( + "div.switch-menus > div.language-switch", + ); + + if (themeLanguageSelector) { + if (config.projects.translations.length) { + // Add the current language to the options on the selector + let languages = config.projects.translations.concat( + config.projects.current, + ); + languages = languages.sort((a, b) => + a.language.name.localeCompare(b.language.name), + ); + + const languageSelect = ` + + `; + + languageSwitch.innerHTML = languageSelect; + languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch); + } + else { + languageSwitch.remove(); + } + } + }); +} + +document.addEventListener("readthedocs-addons-data-ready", function (event) { + // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav. + document + .querySelector("[role='search'] input") + .addEventListener("focusin", () => { + const event = new CustomEvent("readthedocs-search-show"); + document.dispatchEvent(event); + }); +}); \ No newline at end of file diff --git a/_static/language_data.js b/_static/language_data.js new file mode 100644 index 00000000..c7fe6c6f --- /dev/null +++ b/_static/language_data.js @@ -0,0 +1,192 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 00000000..d96755fd Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 00000000..7107cec9 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pseudocode-js/pseudocode.min.css b/_static/pseudocode-js/pseudocode.min.css new file mode 100644 index 00000000..c28ebfe4 --- /dev/null +++ b/_static/pseudocode-js/pseudocode.min.css @@ -0,0 +1 @@ +@import url(https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.css);.ps-root{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-size:1em;font-weight:100;-webkit-font-smoothing:antialiased!important}.ps-root .ps-algorithm{margin:.8em 0;border-top:3px solid #000;border-bottom:2px solid #000}.ps-root .ps-algorithm.with-caption>.ps-line:first-child{border-bottom:2px solid #000}.ps-root .katex{text-indent:0;font-size:1em}.ps-root .MathJax,.ps-root .MathJax_CHTML{text-indent:0;font-size:1em!important}.ps-root .ps-line{margin:0;padding:0;line-height:1.2}.ps-root .ps-funcname{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-weight:400;font-variant:small-caps;font-style:normal;text-transform:none}.ps-root .ps-keyword{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-weight:700;font-variant:normal;font-style:normal;text-transform:none}.ps-root .ps-comment{font-family:KaTeX_Main,'Times New Roman',Times,serif;font-weight:400;font-variant:normal;font-style:normal;text-transform:none}.ps-root .ps-linenum{font-size:.8em;line-height:1em;width:1.6em;text-align:right;display:inline-block;position:relative;padding-right:.3em}.ps-root .ps-algorithmic.with-linenum .ps-line.ps-code{text-indent:-1.6em}.ps-root .ps-algorithmic.with-linenum .ps-line.ps-code>span{text-indent:0}.ps-root .ps-algorithmic.with-scopelines div.ps-block{border-left-style:solid;border-left-width:.1em;padding-left:.6em}.ps-root .ps-algorithmic.with-scopelines>div.ps-block{border-left:none} \ No newline at end of file diff --git a/_static/pseudocode-js/pseudocode.min.js b/_static/pseudocode-js/pseudocode.min.js new file mode 100644 index 00000000..e19fe9e0 --- /dev/null +++ b/_static/pseudocode-js/pseudocode.min.js @@ -0,0 +1 @@ +(function(e){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=e()}else if(typeof define==="function"&&define.amd){define([],e)}else{var t;if(typeof window!=="undefined"){t=window}else if(typeof global!=="undefined"){t=global}else if(typeof self!=="undefined"){t=self}else{t=this}t.pseudocode=e()}})(function(){var e,t,n;return function(){function p(o,s,a){function l(n,e){if(!s[n]){if(!o[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(h)return h(n,!0);var i=new Error("Cannot find module '"+n+"'");throw i.code="MODULE_NOT_FOUND",i}var r=s[n]={exports:{}};o[n][0].call(r.exports,function(e){var t=o[n][1][e];return l(t||e)},r,r.exports,p,o,s,a)}return s[n].exports}for(var h="function"==typeof require&&require,e=0;ethis.renderElement(e,t))}}},{"./src/Lexer":2,"./src/ParseError":3,"./src/Parser":4,"./src/Renderer":5}],2:[function(e,t,n){var i=e("./utils");var u=e("./ParseError");var r=function(e){this._input=e;this._remain=e;this._pos=0;this._nextAtom=this._currentAtom=null;this._next()};r.prototype.accept=function(e,t){if(this._nextAtom.type===e&&this._matchText(t)){this._next();return this._currentAtom.text}return null};r.prototype.expect=function(e,t){var n=this._nextAtom;if(n.type!==e){throw new u(`Expected an atom of ${e} but received ${n.type}`,this._pos,this._input)}if(!this._matchText(t)){throw new u(`Expected \`${t}\` but received \`${n.text}\``,this._pos,this._input)}this._next();return this._currentAtom.text};r.prototype.get=function(){return this._currentAtom};var o={exec:function(e){var t=[{start:"$",end:"$"},{start:"\\(",end:"\\)"}];var n=e.length;for(var i=0;i0&&a[l-1]==="\\"){var h=l+o.length;a=a.slice(h);s+=h;continue}var p=[e.slice(0,s+l+o.length),e.slice(r.length,s+l)];return p}}return null}};var p={special:/^(\\\\|\\{|\\}|\\\$|\\&|\\#|\\%|\\_)/,math:o,func:/^\\([a-zA-Z]+)/,open:/^\{/,close:/^\}/,quote:/^(`|``|'|'')/,ordinary:/^[^\\{}$&#%_\s]+/};var c=/^%.*/;var f=/^\s+/;r.prototype._skip=function(e){this._pos+=e;this._remain=this._remain.slice(e)};r.prototype._next=function(){var e=false;while(1){var t=f.exec(this._remain);if(t){e=true;var n=t[0].length;this._skip(n)}var i=c.exec(this._remain);if(!i)break;var r=i[0].length;this._skip(r)}this._currentAtom=this._nextAtom;if(this._remain===""){this._nextAtom={type:"EOF",text:null,whitespace:false};return false}for(var o in p){var s=p[o];var a=s.exec(this._remain);if(!a)continue;var l=a[0];var h=a[1]?a[1]:l;this._nextAtom={type:o,text:h,whitespace:e};this._pos+=l.length;this._remain=this._remain.slice(a[0].length);return true}throw new u("Unrecoganizable atom",this._pos,this._input)};r.prototype._matchText=function(e){if(e===null||e===undefined)return true;if(i.isString(e))return e.toLowerCase()===this._nextAtom.text.toLowerCase();else return e.some(e=>e.toLowerCase()===this._nextAtom.text.toLowerCase())};t.exports=r},{"./ParseError":3,"./utils":6}],3:[function(e,t,n){function i(e,t,n){var i=`Error: ${e}`;if(t!==undefined&&n!==undefined){i+=` at position ${t}: \``;n=`${n.slice(0,t)}\u21B1${n.slice(t)}`;var r=Math.max(0,t-15);var o=t+15;i+=`${n.slice(r,o)}\``}this.message=i}i.prototype=Object.create(Error.prototype);i.prototype.constructor=i;t.exports=i},{}],4:[function(e,t,n){var s=e("./utils");var r=e("./ParseError");var a=function(e,t){this.type=e;this.value=t;this.children=[]};a.prototype.toString=function(e){if(!e)e=0;var t="";for(var n=0;n`;if(this.value)i+=` (${s.toString(this.value)})`;i+="\n";if(this.children){for(var r=0;r0){e.addChild(t);continue}break}return e};i.prototype._parseCaption=function(){var e=this._lexer;if(!e.accept("func","caption"))return null;var t=new a("caption");e.expect("open");t.addChild(this._parseCloseText());e.expect("close");return t};i.prototype._parseBlock=function(){var e=new a("block");while(true){var t=this._parseControl();if(t){e.addChild(t);continue}var n=this._parseFunction();if(n){e.addChild(n);continue}var i=this._parseStatement(h);if(i){e.addChild(i);continue}var r=this._parseCommand(p);if(r){e.addChild(r);continue}var o=this._parseComment();if(o){e.addChild(o);continue}break}return e};i.prototype._parseControl=function(){var e;if(e=this._parseIf())return e;if(e=this._parseLoop())return e;if(e=this._parseRepeat())return e;if(e=this._parseUpon())return e};i.prototype._parseFunction=function(){var e=this._lexer;if(!e.accept("func",["function","procedure"]))return null;var t=this._lexer.get().text;e.expect("open");var n=e.expect("ordinary");e.expect("close");e.expect("open");var i=this._parseCloseText();e.expect("close");var r=this._parseBlock();e.expect("func",`end${t}`);var o=new a("function",{type:t,name:n});o.addChild(i);o.addChild(r);return o};i.prototype._parseIf=function(){if(!this._lexer.accept("func","if"))return null;var e=new a("if");this._lexer.expect("open");e.addChild(this._parseCond());this._lexer.expect("close");e.addChild(this._parseBlock());var t=0;while(this._lexer.accept("func",["elif","elsif","elseif"])){this._lexer.expect("open");e.addChild(this._parseCond());this._lexer.expect("close");e.addChild(this._parseBlock());t++}var n=false;if(this._lexer.accept("func","else")){n=true;e.addChild(this._parseBlock())}this._lexer.expect("func","endif");e.value={numElif:t,hasElse:n};return e};i.prototype._parseLoop=function(){if(!this._lexer.accept("func",["FOR","FORALL","WHILE"]))return null;var e=this._lexer.get().text.toLowerCase();var t=new a("loop",e);this._lexer.expect("open");t.addChild(this._parseCond());this._lexer.expect("close");t.addChild(this._parseBlock());var n=e!=="forall"?`end${e}`:"endfor";this._lexer.expect("func",n);return t};i.prototype._parseRepeat=function(){if(!this._lexer.accept("func",["REPEAT"]))return null;var e=this._lexer.get().text.toLowerCase();var t=new a("repeat",e);t.addChild(this._parseBlock());this._lexer.expect("func","until");this._lexer.expect("open");t.addChild(this._parseCond());this._lexer.expect("close");return t};i.prototype._parseUpon=function(){if(!this._lexer.accept("func","upon"))return null;var e=new a("upon");this._lexer.expect("open");e.addChild(this._parseCond());this._lexer.expect("close");e.addChild(this._parseBlock());this._lexer.expect("func","endupon");return e};var l=["ensure","require","input","output"];var h=["state","print","return"];i.prototype._parseStatement=function(e){if(!this._lexer.accept("func",e))return null;var t=this._lexer.get().text.toLowerCase();var n=new a("statement",t);n.addChild(this._parseOpenText());return n};var p=["break","continue"];i.prototype._parseCommand=function(e){if(!this._lexer.accept("func",e))return null;var t=this._lexer.get().text.toLowerCase();var n=new a("command",t);return n};i.prototype._parseComment=function(){if(!this._lexer.accept("func","comment"))return null;var e=new a("comment");this._lexer.expect("open");e.addChild(this._parseCloseText());this._lexer.expect("close");return e};i.prototype._parseCall=function(){var e=this._lexer;if(!e.accept("func","call"))return null;var t=e.get().whitespace;e.expect("open");var n=e.expect("ordinary");e.expect("close");var i=new a("call");i.whitespace=t;i.value=n;e.expect("open");var r=this._parseCloseText();i.addChild(r);e.expect("close");return i};i.prototype._parseCond=i.prototype._parseCloseText=function(){return this._parseText("close")};i.prototype._parseOpenText=function(){return this._parseText("open")};i.prototype._parseText=function(e){var t=new a(`${e}-text`);var n=false;var i;while(true){i=this._parseAtom()||this._parseCall();if(i){if(n)i.whitespace|=n;t.addChild(i);continue}if(this._lexer.accept("open")){i=this._parseCloseText();n=this._lexer.get().whitespace;i.whitespace=n;t.addChild(i);this._lexer.expect("close");n=this._lexer.get().whitespace;continue}break}return t};var u={ordinary:{tokenType:"ordinary"},math:{tokenType:"math"},special:{tokenType:"special"},"cond-symbol":{tokenType:"func",tokenValues:["and","or","not","true","false","to","downto"]},"quote-symbol":{tokenType:"quote"},"sizing-dclr":{tokenType:"func",tokenValues:["tiny","scriptsize","footnotesize","small","normalsize","large","Large","LARGE","huge","Huge"]},"font-dclr":{tokenType:"func",tokenValues:["normalfont","rmfamily","sffamily","ttfamily","upshape","itshape","slshape","scshape","bfseries","mdseries","lfseries"]},"font-cmd":{tokenType:"func",tokenValues:["textnormal","textrm","textsf","texttt","textup","textit","textsl","textsc","uppercase","lowercase","textbf","textmd","textlf"]},"text-symbol":{tokenType:"func",tokenValues:["textbackslash"]}};i.prototype._parseAtom=function(){for(var e in u){var t=u[e];var n=this._lexer.accept(t.tokenType,t.tokenValues);if(n===null)continue;var i=this._lexer.get().whitespace;if(e!=="ordinary"&&e!=="math")n=n.toLowerCase();return new o(e,n,i)}return null};t.exports=i},{"./ParseError":3,"./utils":6}],5:[function(n,e,t){var a=n("./utils");function A(e){this._css={};this._fontSize=this._outerFontSize=e!==undefined?e:1}A.prototype.outerFontSize=function(e){if(e!==undefined)this._outerFontSize=e;return this._outerFontSize};A.prototype.fontSize=function(){return this._fontSize};A.prototype._fontCommandTable={normalfont:{"font-family":"KaTeX_Main"},rmfamily:{"font-family":"KaTeX_Main"},sffamily:{"font-family":"KaTeX_SansSerif"},ttfamily:{"font-family":"KaTeX_Typewriter"},bfseries:{"font-weight":"bold"},mdseries:{"font-weight":"medium"},lfseries:{"font-weight":"lighter"},upshape:{"font-style":"normal","font-variant":"normal"},itshape:{"font-style":"italic","font-variant":"normal"},scshape:{"font-style":"normal","font-variant":"small-caps"},slshape:{"font-style":"oblique","font-variant":"normal"},textnormal:{"font-family":"KaTeX_Main"},textrm:{"font-family":"KaTeX_Main"},textsf:{"font-family":"KaTeX_SansSerif"},texttt:{"font-family":"KaTeX_Typewriter"},textbf:{"font-weight":"bold"},textmd:{"font-weight":"medium"},textlf:{"font-weight":"lighter"},textup:{"font-style":"normal","font-variant":"normal"},textit:{"font-style":"italic","font-variant":"normal"},textsc:{"font-style":"normal","font-variant":"small-caps"},textsl:{"font-style":"oblique","font-variant":"normal"},uppercase:{"text-transform":"uppercase"},lowercase:{"text-transform":"lowercase"}};A.prototype._sizingScalesTable={tiny:.68,scriptsize:.8,footnotesize:.85,small:.92,normalsize:1,large:1.17,Large:1.41,LARGE:1.58,huge:1.9,Huge:2.28};A.prototype.updateByCommand=function(e){var t=this._fontCommandTable[e];if(t!==undefined){for(var n in t)this._css[n]=t[n];return}var i=this._sizingScalesTable[e];if(i!==undefined){this._outerFontSize=this._fontSize;this._fontSize=i;return}throw new ParserError("Unrecognized `text-style` command")};A.prototype.toCSS=function(){var e="";for(var t in this._css){var n=this._css[t];if(n===undefined)continue;e+=`${t}:${n};`}if(this._fontSize!==this._outerFontSize)e+=`font-size:${this._fontSize/this._outerFontSize}em;`;return e};function B(e,t){this._nodes=e;this._textStyle=t}B.prototype._renderCloseText=function(e,t){var n=new A(this._textStyle.fontSize());var i=new B(e.children,n);if(e.whitespace)this._html.putText(" ");this._html.putHTML(i.renderToHTML(t))};B.prototype.renderToHTML=function(e){this._html=new _;var t;while((t=this._nodes.shift())!==undefined){var n=t.type;var i=t.value;if(t.whitespace)this._html.putText(" ");switch(n){case"ordinary":this._html.putText(i);break;case"math":if(typeof e==="undefined"){throw EvalError("No math backend found. Please setup KaTeX or MathJax.")}else if(e.name==="katex"){this._html.putHTML(e.driver.renderToString(i))}else if(e.name==="mathjax"){if(e.version<3){this._html.putText(`$${i}$`)}else{this._html.putHTML(e.driver.tex2chtml(i,{display:false}).outerHTML)}}else{throw new EvalError(`Unknown math backend ${e}`)}break;case"cond-symbol":this._html.beginSpan("ps-keyword").putText(i.toLowerCase()).endSpan();break;case"special":if(i==="\\\\"){this._html.putHTML("
");break}var r={"\\{":"{","\\}":"}","\\$":"$","\\&":"&","\\#":"#","\\%":"%","\\_":"_"};var o=r[i];this._html.putText(o);break;case"text-symbol":var s={textbackslash:"\\"};var a=s[i];this._html.putText(a);break;case"quote-symbol":var l={"`":"\u2018","``":"\u201c","'":"\u2019","''":"\u201d"};var h=l[i];this._html.putText(h);break;case"call":this._html.beginSpan("ps-funcname").putText(i).endSpan();this._html.write("(");var p=t.children[0];this._renderCloseText(p,e);this._html.write(")");break;case"close-text":this._renderCloseText(t,e);break;case"font-dclr":case"sizing-dclr":this._textStyle.updateByCommand(i);this._html.beginSpan(null,this._textStyle.toCSS());var u=new B(this._nodes,this._textStyle);this._html.putHTML(u.renderToHTML(e));this._html.endSpan();break;case"font-cmd":var c=this._nodes[0];if(c.type!=="close-text")continue;var f=new A(this._textStyle.fontSize());f.updateByCommand(i);this._html.beginSpan(null,f.toCSS());var d=new B(c.children,f);this._html.putHTML(d.renderToHTML(e));this._html.endSpan();break;default:throw new ParseError(`Unexpected ParseNode of type ${t.type}`)}}return this._html.toMarkup()};function _(){this._body=[];this._textBuf=[]}_.prototype.beginDiv=function(e,t,n){this._beginTag("div",e,t,n);this._body.push("\n");return this};_.prototype.endDiv=function(){this._endTag("div");this._body.push("\n");return this};_.prototype.beginP=function(e,t,n){this._beginTag("p",e,t,n);this._body.push("\n");return this};_.prototype.endP=function(){this._flushText();this._endTag("p");this._body.push("\n");return this};_.prototype.beginSpan=function(e,t,n){this._flushText();return this._beginTag("span",e,t,n)};_.prototype.endSpan=function(){this._flushText();return this._endTag("span")};_.prototype.putHTML=function(e){this._flushText();this._body.push(e);return this};_.prototype.putText=function(e){this._textBuf.push(e);return this};_.prototype.write=function(e){this._body.push(e)};_.prototype.toMarkup=function(){this._flushText();var e=this._body.join("");return e.trim()};_.prototype.toDOM=function(){var e=this.toMarkup();var t=document.createElement("div");t.innerHTML=e;return t.firstChild};_.prototype._flushText=function(){if(this._textBuf.length===0)return;var e=this._textBuf.join("");this._body.push(this._escapeHtml(e));this._textBuf=[]};_.prototype._beginTag=function(e,t,n,i){var r=`<${e}`;if(t)r+=` class="${t}"`;if(n){var o;if(a.isString(n)){o=n}else{o="";for(var s in n){attrVal=n[s];o+=`${s}:${attrVal};`}}if(i)o+=i;r+=` style="${o}"`}r+=">";this._body.push(r);return this};_.prototype._endTag=function(e){this._body.push(``);return this};var i={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};_.prototype._escapeHtml=function(e){return String(e).replace(/[&<>"'/]/g,e=>i[e])};function r(e){e=e||{};this.indentSize=e.indentSize?this._parseEmVal(e.indentSize):1.2;this.commentDelimiter=e.commentDelimiter!==undefined?e.commentDelimiter:" // ";this.lineNumberPunc=e.lineNumberPunc!==undefined?e.lineNumberPunc:":";this.lineNumber=e.lineNumber!==undefined?e.lineNumber:false;this.noEnd=e.noEnd!==undefined?e.noEnd:false;this.scopeLines=e.scopeLines!==undefined?e.scopeLines:false;if(e.captionCount!==undefined)F.captionCount=e.captionCount;this.titlePrefix=e.titlePrefix!==undefined?e.titlePrefix:"Algorithm"}r.prototype._parseEmVal=function(e){e=e.trim();if(e.indexOf("em")!==e.length-2)throw new TypeError("Unit error; expected `em` suffix");return Number(e.substring(0,e.length-2))};function F(e,t){this._root=e.parse();this._options=new r(t);this._openLine=false;this._blockLevel=0;this._textLevel=-1;this._globalTextStyle=new A;this.backend=undefined;try{if(typeof katex==="undefined")katex=n("katex")}catch(e){}try{if(typeof MathJax==="undefined")MathJax=n("mathjax")}catch(e){}if(typeof katex!=="undefined"){this.backend={name:"katex",driver:katex}}else if(typeof MathJax!=="undefined"){this.backend={name:"mathjax",version:parseInt(MathJax.version.split(".")[0]),driver:MathJax}}}F.captionCount=0;F.prototype.toMarkup=function(){var e=this._html=new _;this._buildTree(this._root);delete this._html;return e.toMarkup()};F.prototype.toDOM=function(){var e=this.toMarkup();var t=document.createElement("div");t.innerHTML=e;return t.firstChild};F.prototype._beginGroup=function(e,t,n){this._closeLineIfAny();this._html.beginDiv(`ps-${e}${t?` ${t}`:""}`,n)};F.prototype._endGroup=function(e){this._closeLineIfAny();this._html.endDiv()};F.prototype._beginBlock=function(){var e=this._options.lineNumber&&this._blockLevel===0?.6:0;var t=this._options.indentSize+e;if(this._options.scopeLines)t/=2;this._beginGroup("block",null,{"margin-left":`${t}em`});this._blockLevel++};F.prototype._endBlock=function(){this._closeLineIfAny();this._endGroup();this._blockLevel--};F.prototype._newLine=function(){this._closeLineIfAny();this._openLine=true;this._globalTextStyle.outerFontSize(1);var e=this._options.indentSize;if(this._blockLevel>0){this._numLOC++;this._html.beginP("ps-line ps-code",this._globalTextStyle.toCSS());var t=this._options.lineNumber?e*1.25:0;t+=this._options.scopeLines?e*.1:0;if(this._options.lineNumber){this._html.beginSpan("ps-linenum",{left:`${-((this._blockLevel-1)*t)}em`}).putText(this._numLOC+this._options.lineNumberPunc).endSpan()}}else{this._html.beginP("ps-line",{"text-indent":`${-e}em`,"padding-left":`${e}em`},this._globalTextStyle.toCSS())}};F.prototype._closeLineIfAny=function(){if(!this._openLine)return;this._html.endP();this._openLine=false};F.prototype._typeKeyword=function(e){this._html.beginSpan("ps-keyword").putText(e).endSpan()};F.prototype._typeFuncName=function(e){this._html.beginSpan("ps-funcname").putText(e).endSpan()};F.prototype._typeText=function(e){this._html.write(e)};F.prototype._buildTreeForAllChildren=function(e){var t=e.children;for(var n=0;n0&&t[0].type==="comment"){var n=t.shift();this._buildTree(n)}};F.prototype._buildTree=function(e){var t;var n;var i;switch(e.type){case"root":this._beginGroup("root");this._buildTreeForAllChildren(e);this._endGroup();break;case"algorithm":var r;for(t=0;t { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/api/classes/branch-and-bound/BranchAndBound.html b/api/classes/branch-and-bound/BranchAndBound.html new file mode 100644 index 00000000..38a57e44 --- /dev/null +++ b/api/classes/branch-and-bound/BranchAndBound.html @@ -0,0 +1,717 @@ + + + + + + + + + BranchAndBound — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/BranchAndBoundCallback.html b/api/classes/branch-and-bound/BranchAndBoundCallback.html new file mode 100644 index 00000000..96bf3c33 --- /dev/null +++ b/api/classes/branch-and-bound/BranchAndBoundCallback.html @@ -0,0 +1,361 @@ + + + + + + + + + BranchAndBoundCallback — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.html b/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.html new file mode 100644 index 00000000..93ada0cf --- /dev/null +++ b/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.html @@ -0,0 +1,175 @@ + + + + + + + + + BranchAndBoundCallbackFactory — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/cuts/KnapsackCover.html b/api/classes/branch-and-bound/cuts/KnapsackCover.html new file mode 100644 index 00000000..77f0a93c --- /dev/null +++ b/api/classes/branch-and-bound/cuts/KnapsackCover.html @@ -0,0 +1,206 @@ + + + + + + + + + Cuts::KnapsackCover — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/cuts/index.html b/api/classes/branch-and-bound/cuts/index.html new file mode 100644 index 00000000..7e715d1c --- /dev/null +++ b/api/classes/branch-and-bound/cuts/index.html @@ -0,0 +1,159 @@ + + + + + + + + + Cutting Planes — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/heuristics/LocalBranching.html b/api/classes/branch-and-bound/heuristics/LocalBranching.html new file mode 100644 index 00000000..d860f363 --- /dev/null +++ b/api/classes/branch-and-bound/heuristics/LocalBranching.html @@ -0,0 +1,198 @@ + + + + + + + + + Heuristics::LocalBranching — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/heuristics/RENS.html b/api/classes/branch-and-bound/heuristics/RENS.html new file mode 100644 index 00000000..ee852139 --- /dev/null +++ b/api/classes/branch-and-bound/heuristics/RENS.html @@ -0,0 +1,198 @@ + + + + + + + + + Heuristics::RENS — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/heuristics/SimpleRounding.html b/api/classes/branch-and-bound/heuristics/SimpleRounding.html new file mode 100644 index 00000000..1df00d29 --- /dev/null +++ b/api/classes/branch-and-bound/heuristics/SimpleRounding.html @@ -0,0 +1,185 @@ + + + + + + + + + Heuristics::SimpleRounding — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/heuristics/index.html b/api/classes/branch-and-bound/heuristics/index.html new file mode 100644 index 00000000..a9bd6bdd --- /dev/null +++ b/api/classes/branch-and-bound/heuristics/index.html @@ -0,0 +1,163 @@ + + + + + + + + + Heuristics — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/index.html b/api/classes/branch-and-bound/index.html new file mode 100644 index 00000000..1a5ffe0f --- /dev/null +++ b/api/classes/branch-and-bound/index.html @@ -0,0 +1,193 @@ + + + + + + + + + Branch-and-Bound Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/node-selection/BestBound.html b/api/classes/branch-and-bound/node-selection/BestBound.html new file mode 100644 index 00000000..c13498c3 --- /dev/null +++ b/api/classes/branch-and-bound/node-selection/BestBound.html @@ -0,0 +1,187 @@ + + + + + + + + + BestBound — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/node-selection/BestEstimate.html b/api/classes/branch-and-bound/node-selection/BestEstimate.html new file mode 100644 index 00000000..2fb78a24 --- /dev/null +++ b/api/classes/branch-and-bound/node-selection/BestEstimate.html @@ -0,0 +1,188 @@ + + + + + + + + + BestEstimate — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/node-selection/BreadthFirst.html b/api/classes/branch-and-bound/node-selection/BreadthFirst.html new file mode 100644 index 00000000..1d588fff --- /dev/null +++ b/api/classes/branch-and-bound/node-selection/BreadthFirst.html @@ -0,0 +1,187 @@ + + + + + + + + + BreadthFirst — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/node-selection/DepthFirst.html b/api/classes/branch-and-bound/node-selection/DepthFirst.html new file mode 100644 index 00000000..49c9d28b --- /dev/null +++ b/api/classes/branch-and-bound/node-selection/DepthFirst.html @@ -0,0 +1,187 @@ + + + + + + + + + DepthFirst — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/node-selection/WorstBound.html b/api/classes/branch-and-bound/node-selection/WorstBound.html new file mode 100644 index 00000000..15247ecd --- /dev/null +++ b/api/classes/branch-and-bound/node-selection/WorstBound.html @@ -0,0 +1,187 @@ + + + + + + + + + WorstBound — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/node-selection/index.html b/api/classes/branch-and-bound/node-selection/index.html new file mode 100644 index 00000000..2625e552 --- /dev/null +++ b/api/classes/branch-and-bound/node-selection/index.html @@ -0,0 +1,167 @@ + + + + + + + + + Node Selection Rules — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.html b/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.html new file mode 100644 index 00000000..af05e488 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.html @@ -0,0 +1,211 @@ + + + + + + + + + FirstInfeasibleFound — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/LeastInfeasible.html b/api/classes/branch-and-bound/variable-selection/LeastInfeasible.html new file mode 100644 index 00000000..8b0a3407 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/LeastInfeasible.html @@ -0,0 +1,211 @@ + + + + + + + + + LeastInfeasible — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/MostInfeasible.html b/api/classes/branch-and-bound/variable-selection/MostInfeasible.html new file mode 100644 index 00000000..c8b07375 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/MostInfeasible.html @@ -0,0 +1,211 @@ + + + + + + + + + MostInfeasible — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/PseudoCost.html b/api/classes/branch-and-bound/variable-selection/PseudoCost.html new file mode 100644 index 00000000..91f25c17 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/PseudoCost.html @@ -0,0 +1,211 @@ + + + + + + + + + PseudoCost — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/StrongBranching.html b/api/classes/branch-and-bound/variable-selection/StrongBranching.html new file mode 100644 index 00000000..62a59235 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/StrongBranching.html @@ -0,0 +1,231 @@ + + + + + + + + + StrongBranching — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/UniformlyRandom.html b/api/classes/branch-and-bound/variable-selection/UniformlyRandom.html new file mode 100644 index 00000000..084e7a97 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/UniformlyRandom.html @@ -0,0 +1,216 @@ + + + + + + + + + UniformlyRandom — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/branch-and-bound/variable-selection/index.html b/api/classes/branch-and-bound/variable-selection/index.html new file mode 100644 index 00000000..16ea20c2 --- /dev/null +++ b/api/classes/branch-and-bound/variable-selection/index.html @@ -0,0 +1,169 @@ + + + + + + + + + Branching Rules — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.html b/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.html new file mode 100644 index 00000000..8a6c7d50 --- /dev/null +++ b/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.html @@ -0,0 +1,489 @@ + + + + + + + + + Robust::ColumnAndConstraintGeneration — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.html b/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.html new file mode 100644 index 00000000..5a1c4b48 --- /dev/null +++ b/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.html @@ -0,0 +1,424 @@ + + + + + + + + + Optimizers::Robust::ColumnAndConstraintGeneration — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-and-constraint-generation/index.html b/api/classes/column-and-constraint-generation/index.html new file mode 100644 index 00000000..9fe9e5e4 --- /dev/null +++ b/api/classes/column-and-constraint-generation/index.html @@ -0,0 +1,151 @@ + + + + + + + + + Column-and-Constraint Generation Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/ArtificialCosts.html b/api/classes/column-generation/ArtificialCosts.html new file mode 100644 index 00000000..5eefd8ae --- /dev/null +++ b/api/classes/column-generation/ArtificialCosts.html @@ -0,0 +1,226 @@ + + + + + + + + + DantzigWolfe::ArtificialCosts — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/DantzigWolfeDecomposition.html b/api/classes/column-generation/DantzigWolfeDecomposition.html new file mode 100644 index 00000000..61eaf73b --- /dev/null +++ b/api/classes/column-generation/DantzigWolfeDecomposition.html @@ -0,0 +1,523 @@ + + + + + + + + + DantzigWolfeDecomposition — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/FarkasPricing.html b/api/classes/column-generation/FarkasPricing.html new file mode 100644 index 00000000..60084618 --- /dev/null +++ b/api/classes/column-generation/FarkasPricing.html @@ -0,0 +1,206 @@ + + + + + + + + + DantzigWolfe::FarkasPricing — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/IntegerMaster.html b/api/classes/column-generation/IntegerMaster.html new file mode 100644 index 00000000..0c7a118b --- /dev/null +++ b/api/classes/column-generation/IntegerMaster.html @@ -0,0 +1,266 @@ + + + + + + + + + Heuristics::IntegerMaster — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.html b/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.html new file mode 100644 index 00000000..6cfd1c66 --- /dev/null +++ b/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.html @@ -0,0 +1,436 @@ + + + + + + + + + Optimizers::DantzigWolfeDecomposition — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/index.html b/api/classes/column-generation/index.html new file mode 100644 index 00000000..18aced50 --- /dev/null +++ b/api/classes/column-generation/index.html @@ -0,0 +1,159 @@ + + + + + + + + + Column Generation Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/column-generation/stabilization/Neame.html b/api/classes/column-generation/stabilization/Neame.html new file mode 100644 index 00000000..40533ab9 --- /dev/null +++ b/api/classes/column-generation/stabilization/Neame.html @@ -0,0 +1,206 @@ + + + + + + + + + DantzigWolfe::Neame — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/stabilization/Wentges.html b/api/classes/column-generation/stabilization/Wentges.html new file mode 100644 index 00000000..54feee75 --- /dev/null +++ b/api/classes/column-generation/stabilization/Wentges.html @@ -0,0 +1,206 @@ + + + + + + + + + DantzigWolfe::Wentges — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/column-generation/stabilization/index.html b/api/classes/column-generation/stabilization/index.html new file mode 100644 index 00000000..dde111bd --- /dev/null +++ b/api/classes/column-generation/stabilization/index.html @@ -0,0 +1,160 @@ + + + + + + + + + Stabilization — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/common/Annotation.html b/api/classes/common/Annotation.html new file mode 100644 index 00000000..dcf142a5 --- /dev/null +++ b/api/classes/common/Annotation.html @@ -0,0 +1,328 @@ + + + + + + + + + Annotation — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Column.html b/api/classes/common/Column.html new file mode 100644 index 00000000..e8412678 --- /dev/null +++ b/api/classes/common/Column.html @@ -0,0 +1,477 @@ + + + + + + + + + Column — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Constant.html b/api/classes/common/Constant.html new file mode 100644 index 00000000..9ffb5b5d --- /dev/null +++ b/api/classes/common/Constant.html @@ -0,0 +1,546 @@ + + + + + + + + + Constant — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Ctr.html b/api/classes/common/Ctr.html new file mode 100644 index 00000000..d0c61534 --- /dev/null +++ b/api/classes/common/Ctr.html @@ -0,0 +1,366 @@ + + + + + + + + + Ctr — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Env.html b/api/classes/common/Env.html new file mode 100644 index 00000000..b01bd351 --- /dev/null +++ b/api/classes/common/Env.html @@ -0,0 +1,221 @@ + + + + + + + + + Env — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Expr.html b/api/classes/common/Expr.html new file mode 100644 index 00000000..3da13c17 --- /dev/null +++ b/api/classes/common/Expr.html @@ -0,0 +1,338 @@ + + + + + + + + + Expr — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/LinExpr.html b/api/classes/common/LinExpr.html new file mode 100644 index 00000000..d66757da --- /dev/null +++ b/api/classes/common/LinExpr.html @@ -0,0 +1,404 @@ + + + + + + + + + LinExpr — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Model.html b/api/classes/common/Model.html new file mode 100644 index 00000000..a9447127 --- /dev/null +++ b/api/classes/common/Model.html @@ -0,0 +1,1756 @@ + + + + + + + + + Model — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Param.html b/api/classes/common/Param.html new file mode 100644 index 00000000..63809a06 --- /dev/null +++ b/api/classes/common/Param.html @@ -0,0 +1,305 @@ + + + + + + + + + Param — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/QuadExpr.html b/api/classes/common/QuadExpr.html new file mode 100644 index 00000000..fcfe0ff3 --- /dev/null +++ b/api/classes/common/QuadExpr.html @@ -0,0 +1,228 @@ + + + + + + + + + QuadExpr — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Row.html b/api/classes/common/Row.html new file mode 100644 index 00000000..e0c1dd3d --- /dev/null +++ b/api/classes/common/Row.html @@ -0,0 +1,555 @@ + + + + + + + + + Row — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/SolutionDual.html b/api/classes/common/SolutionDual.html new file mode 100644 index 00000000..f3e9cce3 --- /dev/null +++ b/api/classes/common/SolutionDual.html @@ -0,0 +1,439 @@ + + + + + + + + + Solution::Dual — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/SolutionPrimal.html b/api/classes/common/SolutionPrimal.html new file mode 100644 index 00000000..36eced86 --- /dev/null +++ b/api/classes/common/SolutionPrimal.html @@ -0,0 +1,439 @@ + + + + + + + + + Solution::Primal — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/TempCtr.html b/api/classes/common/TempCtr.html new file mode 100644 index 00000000..1e645bef --- /dev/null +++ b/api/classes/common/TempCtr.html @@ -0,0 +1,302 @@ + + + + + + + + + TempCtr — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/TempVar.html b/api/classes/common/TempVar.html new file mode 100644 index 00000000..a981ef1f --- /dev/null +++ b/api/classes/common/TempVar.html @@ -0,0 +1,333 @@ + + + + + + + + + TempVar — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/Var.html b/api/classes/common/Var.html new file mode 100644 index 00000000..3cf62954 --- /dev/null +++ b/api/classes/common/Var.html @@ -0,0 +1,375 @@ + + + + + + + + + Var — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/common/index.html b/api/classes/common/index.html new file mode 100644 index 00000000..ae01fa60 --- /dev/null +++ b/api/classes/common/index.html @@ -0,0 +1,180 @@ + + + + + + + + + Common — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/external-bilevel/MibS.html b/api/classes/external-bilevel/MibS.html new file mode 100644 index 00000000..1576cdca --- /dev/null +++ b/api/classes/external-bilevel/MibS.html @@ -0,0 +1,474 @@ + + + + + + + + + Bilevel::Mibs — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-bilevel/Optimizers_MibS.html b/api/classes/external-bilevel/Optimizers_MibS.html new file mode 100644 index 00000000..00340e6b --- /dev/null +++ b/api/classes/external-bilevel/Optimizers_MibS.html @@ -0,0 +1,150 @@ + + + + + + + + + Optimizers::Bilevel::Mibs — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-bilevel/index.html b/api/classes/external-bilevel/index.html new file mode 100644 index 00000000..204a177f --- /dev/null +++ b/api/classes/external-bilevel/index.html @@ -0,0 +1,151 @@ + + + + + + + + + External Bilevel Solvers — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/GLPK.html b/api/classes/external-mip/GLPK.html new file mode 100644 index 00000000..08b5a0bc --- /dev/null +++ b/api/classes/external-mip/GLPK.html @@ -0,0 +1,489 @@ + + + + + + + + + GLPK — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Gurobi.html b/api/classes/external-mip/Gurobi.html new file mode 100644 index 00000000..d57920f7 --- /dev/null +++ b/api/classes/external-mip/Gurobi.html @@ -0,0 +1,519 @@ + + + + + + + + + Gurobi — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/HiGHS.html b/api/classes/external-mip/HiGHS.html new file mode 100644 index 00000000..ad0384c1 --- /dev/null +++ b/api/classes/external-mip/HiGHS.html @@ -0,0 +1,489 @@ + + + + + + + + + HiGHS — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Mosek.html b/api/classes/external-mip/Mosek.html new file mode 100644 index 00000000..27c45d4b --- /dev/null +++ b/api/classes/external-mip/Mosek.html @@ -0,0 +1,509 @@ + + + + + + + + + Mosek — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Optimizers_GLPK.html b/api/classes/external-mip/Optimizers_GLPK.html new file mode 100644 index 00000000..c535f0a5 --- /dev/null +++ b/api/classes/external-mip/Optimizers_GLPK.html @@ -0,0 +1,369 @@ + + + + + + + + + Optimizers::GLPK — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Optimizers_Gurobi.html b/api/classes/external-mip/Optimizers_Gurobi.html new file mode 100644 index 00000000..1b3bced6 --- /dev/null +++ b/api/classes/external-mip/Optimizers_Gurobi.html @@ -0,0 +1,427 @@ + + + + + + + + + Optimizers::Gurobi — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Optimizers_HiGHS.html b/api/classes/external-mip/Optimizers_HiGHS.html new file mode 100644 index 00000000..78a7772b --- /dev/null +++ b/api/classes/external-mip/Optimizers_HiGHS.html @@ -0,0 +1,157 @@ + + + + + + + + + Optimizers::HiGHS — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Optimizers_Mosek.html b/api/classes/external-mip/Optimizers_Mosek.html new file mode 100644 index 00000000..0b53044e --- /dev/null +++ b/api/classes/external-mip/Optimizers_Mosek.html @@ -0,0 +1,157 @@ + + + + + + + + + Optimizers::Mosek — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Osi/OsiCbc.html b/api/classes/external-mip/Osi/OsiCbc.html new file mode 100644 index 00000000..82724b62 --- /dev/null +++ b/api/classes/external-mip/Osi/OsiCbc.html @@ -0,0 +1,471 @@ + + + + + + + + + OsiCbc — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Osi/OsiClp.html b/api/classes/external-mip/Osi/OsiClp.html new file mode 100644 index 00000000..54b8dcb4 --- /dev/null +++ b/api/classes/external-mip/Osi/OsiClp.html @@ -0,0 +1,471 @@ + + + + + + + + + OsiClp — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Osi/OsiCplex.html b/api/classes/external-mip/Osi/OsiCplex.html new file mode 100644 index 00000000..62ef2b85 --- /dev/null +++ b/api/classes/external-mip/Osi/OsiCplex.html @@ -0,0 +1,471 @@ + + + + + + + + + OsiCplex — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Osi/OsiSymphony.html b/api/classes/external-mip/Osi/OsiSymphony.html new file mode 100644 index 00000000..10ef32c8 --- /dev/null +++ b/api/classes/external-mip/Osi/OsiSymphony.html @@ -0,0 +1,471 @@ + + + + + + + + + OsiSymphony — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/Osi/index.html b/api/classes/external-mip/Osi/index.html new file mode 100644 index 00000000..8e829a5f --- /dev/null +++ b/api/classes/external-mip/Osi/index.html @@ -0,0 +1,524 @@ + + + + + + + + + COIN-OR/Osi (Cplex, Xpress, Cbc, …) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/external-mip/index.html b/api/classes/external-mip/index.html new file mode 100644 index 00000000..89e7b52a --- /dev/null +++ b/api/classes/external-mip/index.html @@ -0,0 +1,190 @@ + + + + + + + + + External MIP solvers — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/classes/index.html b/api/classes/index.html new file mode 100644 index 00000000..54b0468b --- /dev/null +++ b/api/classes/index.html @@ -0,0 +1,229 @@ + + + + + + + + + Class List — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/api/classes/universal-callbacks/Callback.html b/api/classes/universal-callbacks/Callback.html new file mode 100644 index 00000000..47b48c2f --- /dev/null +++ b/api/classes/universal-callbacks/Callback.html @@ -0,0 +1,337 @@ + + + + + + + + + Callback — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/universal-callbacks/CallbackFactory.html b/api/classes/universal-callbacks/CallbackFactory.html new file mode 100644 index 00000000..6dd43f75 --- /dev/null +++ b/api/classes/universal-callbacks/CallbackFactory.html @@ -0,0 +1,172 @@ + + + + + + + + + CallbackFactory — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/universal-callbacks/LazyCutCallback.html b/api/classes/universal-callbacks/LazyCutCallback.html new file mode 100644 index 00000000..82bc90be --- /dev/null +++ b/api/classes/universal-callbacks/LazyCutCallback.html @@ -0,0 +1,228 @@ + + + + + + + + + LazyCutCallback — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/universal-callbacks/UserCutCallback.html b/api/classes/universal-callbacks/UserCutCallback.html new file mode 100644 index 00000000..a09802d2 --- /dev/null +++ b/api/classes/universal-callbacks/UserCutCallback.html @@ -0,0 +1,189 @@ + + + + + + + + + UserCutCallback — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/classes/universal-callbacks/index.html b/api/classes/universal-callbacks/index.html new file mode 100644 index 00000000..e56be58c --- /dev/null +++ b/api/classes/universal-callbacks/index.html @@ -0,0 +1,156 @@ + + + + + + + + + Universal Callbacks — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/constants/index.html b/api/constants/index.html new file mode 100644 index 00000000..ed73a18a --- /dev/null +++ b/api/constants/index.html @@ -0,0 +1,143 @@ + + + + + + + + + Constants — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/constants/tolerances.html b/api/constants/tolerances.html new file mode 100644 index 00000000..dc3bb96c --- /dev/null +++ b/api/constants/tolerances.html @@ -0,0 +1,271 @@ + + + + + + + + + Tolerances and Numerics — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/index.html b/api/index.html new file mode 100644 index 00000000..d2c8178a --- /dev/null +++ b/api/index.html @@ -0,0 +1,138 @@ + + + + + + + + + API — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/types/common/CtrType.html b/api/types/common/CtrType.html new file mode 100644 index 00000000..fc9ec53a --- /dev/null +++ b/api/types/common/CtrType.html @@ -0,0 +1,162 @@ + + + + + + + + + CtrType — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/types/common/VarType.html b/api/types/common/VarType.html new file mode 100644 index 00000000..aab0d9d7 --- /dev/null +++ b/api/types/common/VarType.html @@ -0,0 +1,162 @@ + + + + + + + + + VarType — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/types/common/index.html b/api/types/common/index.html new file mode 100644 index 00000000..0300b946 --- /dev/null +++ b/api/types/common/index.html @@ -0,0 +1,146 @@ + + + + + + + + + Common — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/types/index.html b/api/types/index.html new file mode 100644 index 00000000..4f30546c --- /dev/null +++ b/api/types/index.html @@ -0,0 +1,151 @@ + + + + + + + + + Type List — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/types/universal-callbacks/CallbackEvent.html b/api/types/universal-callbacks/CallbackEvent.html new file mode 100644 index 00000000..f9b90c2d --- /dev/null +++ b/api/types/universal-callbacks/CallbackEvent.html @@ -0,0 +1,171 @@ + + + + + + + + + Events — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/api/types/universal-callbacks/index.html b/api/types/universal-callbacks/index.html new file mode 100644 index 00000000..ac7387b8 --- /dev/null +++ b/api/types/universal-callbacks/index.html @@ -0,0 +1,144 @@ + + + + + + + + + Universal Callbacks — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/benchmark/index.html b/benchmark/index.html new file mode 100644 index 00000000..90a5088f --- /dev/null +++ b/benchmark/index.html @@ -0,0 +1,131 @@ + + + + + + + + + Benchmark — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/developer_guide/build-the-doc.html b/developer_guide/build-the-doc.html new file mode 100644 index 00000000..e0d06805 --- /dev/null +++ b/developer_guide/build-the-doc.html @@ -0,0 +1,175 @@ + + + + + + + + + Build the doc! — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/developer_guide/index.html b/developer_guide/index.html new file mode 100644 index 00000000..4e25f57a --- /dev/null +++ b/developer_guide/index.html @@ -0,0 +1,144 @@ + + + + + + + + + Developer guide — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/developer_guide/tests.html b/developer_guide/tests.html new file mode 100644 index 00000000..904ad303 --- /dev/null +++ b/developer_guide/tests.html @@ -0,0 +1,196 @@ + + + + + + + + + Unit and integration tests — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/bilevel-kkt.html b/examples/bilevel-kkt.html new file mode 100644 index 00000000..75adfcf5 --- /dev/null +++ b/examples/bilevel-kkt.html @@ -0,0 +1,234 @@ + + + + + + + + + Bilevel LP-LP (KKT Reformulation) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/bilevel-mibs.html b/examples/bilevel-mibs.html new file mode 100644 index 00000000..ecc2db30 --- /dev/null +++ b/examples/bilevel-mibs.html @@ -0,0 +1,231 @@ + + + + + + + + + Bilevel MILP-MILP (MibS) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/facility-location-problem.html b/examples/facility-location-problem.html new file mode 100644 index 00000000..66fd47af --- /dev/null +++ b/examples/facility-location-problem.html @@ -0,0 +1,233 @@ + + + + + + + + + Facility Location Problem (Branch-and-Bound) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/generalized-assignment-problem-bap.html b/examples/generalized-assignment-problem-bap.html new file mode 100644 index 00000000..47ec60ed --- /dev/null +++ b/examples/generalized-assignment-problem-bap.html @@ -0,0 +1,253 @@ + + + + + + + + + Generalized Assignment Problem (Branch-and-Price) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/generalized-assignment-problem-penalty-bap.html b/examples/generalized-assignment-problem-penalty-bap.html new file mode 100644 index 00000000..840b9472 --- /dev/null +++ b/examples/generalized-assignment-problem-penalty-bap.html @@ -0,0 +1,261 @@ + + + + + + + + + Generalized Assignment Problem (Column Generation + Penalty Method) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 00000000..fca191e9 --- /dev/null +++ b/examples/index.html @@ -0,0 +1,177 @@ + + + + + + + + + Examples — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/knapsack-problem.html b/examples/knapsack-problem.html new file mode 100644 index 00000000..dc6062d7 --- /dev/null +++ b/examples/knapsack-problem.html @@ -0,0 +1,196 @@ + + + + + + + + + Knapsack Problem (HiGHS) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/examples/two-stage-robust-facility-location-problem.html b/examples/two-stage-robust-facility-location-problem.html new file mode 100644 index 00000000..1eedbf3b --- /dev/null +++ b/examples/two-stage-robust-facility-location-problem.html @@ -0,0 +1,297 @@ + + + + + + + + + Two-Stage Robust Facility Location Problem (CCG) — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/faq/index.html b/faq/index.html new file mode 100644 index 00000000..e3bc8e91 --- /dev/null +++ b/faq/index.html @@ -0,0 +1,134 @@ + + + + + + + + + FAQ — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/faq/mosek-and-eigen.html b/faq/mosek-and-eigen.html new file mode 100644 index 00000000..5abb25c1 --- /dev/null +++ b/faq/mosek-and-eigen.html @@ -0,0 +1,181 @@ + + + + + + + + + Why is Eigen necessary to solve QPs and QCQPs with Mosek? — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..36146b0a --- /dev/null +++ b/genindex.html @@ -0,0 +1,2078 @@ + + + + + + + + Index — idol + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..40e11e73 --- /dev/null +++ b/index.html @@ -0,0 +1,288 @@ + + + + + + + + + What Is Idol? — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/global-installation/index.html b/installation/global-installation/index.html new file mode 100644 index 00000000..7d18674d --- /dev/null +++ b/installation/global-installation/index.html @@ -0,0 +1,203 @@ + + + + + + + + + Global Installation — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/global-installation/linking.html b/installation/global-installation/linking.html new file mode 100644 index 00000000..7edd46b5 --- /dev/null +++ b/installation/global-installation/linking.html @@ -0,0 +1,173 @@ + + + + + + + + + Linking Your C++ Project — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/index.html b/installation/index.html new file mode 100644 index 00000000..4def0fa2 --- /dev/null +++ b/installation/index.html @@ -0,0 +1,139 @@ + + + + + + + + + Installation — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/local_installation.html b/installation/local_installation.html new file mode 100644 index 00000000..5fed6a3a --- /dev/null +++ b/installation/local_installation.html @@ -0,0 +1,195 @@ + + + + + + + + + Local Installation — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/installation/options.html b/installation/options.html new file mode 100644 index 00000000..c8d05881 --- /dev/null +++ b/installation/options.html @@ -0,0 +1,304 @@ + + + + + + + + + List of CMake Options — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 00000000..beb89a2d Binary files /dev/null and b/objects.inv differ diff --git a/references.html b/references.html new file mode 100644 index 00000000..24a39dc1 --- /dev/null +++ b/references.html @@ -0,0 +1,184 @@ + + + + + + + + + References — idol + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..5b208138 --- /dev/null +++ b/search.html @@ -0,0 +1,136 @@ + + + + + + + + Search — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..a501dae3 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"A Simple Example: Knapsack Cover Cuts": [[138, "a-simple-example-knapsack-cover-cuts"]], "A Two-Stage Robust Facility Location Problem": [[149, "a-two-stage-robust-facility-location-problem"]], "API": [[77, null]], "About constants in expressions": [[131, null]], "About stage annotations": [[149, null]], "Accessing Constraints": [[129, "accessing-constraints"]], "Accessing Variables": [[135, "accessing-variables"]], "Accessing the Objective Function": [[134, "accessing-the-objective-function"]], "Adding User Cuts and Lazy Constraints": [[141, null]], "Adding User Cuts and Lazy Constraints [TODO]": [[116, null]], "Adding an Objective Function": [[134, "adding-an-objective-function"]], "An Example of Lazy Cut Constraints: Benders Optimality Cuts": [[141, "an-example-of-lazy-cut-constraints-benders-optimality-cuts"]], "An Example of User Cuts: Knapsack Cover Inequalities": [[141, "an-example-of-user-cuts-knapsack-cover-inequalities"]], "Annotation": [[35, null]], "Assigning Stages": [[149, "assigning-stages"]], "Assumption": [[144, null]], "Automatic Reformulation": [[122, "automatic-reformulation"]], "Basic Idea": [[143, "basic-idea"]], "Basics": [[125, "basics"], [138, "basics"]], "Benchmark": [[84, null]], "BestBound": [[10, null]], "BestEstimate": [[11, null]], "Bilevel LP-LP (KKT Reformulation)": [[88, null]], "Bilevel MILP-MILP (MibS)": [[89, null]], "Bilevel Optimization": [[69, "bilevel-optimization"], [93, "bilevel-optimization"], [98, "bilevel-optimization"], [105, null], [110, "bilevel-optimization"]], "Bilevel::Mibs": [[52, null]], "Branch-and-Bound": [[93, "branch-and-bound"]], "Branch-and-Bound Algorithm": [[9, null], [115, null]], "Branch-and-Bound Algorithms": [[98, "branch-and-bound-algorithms"]], "Branch-and-Price 101": [[122, null]], "BranchAndBound": [[0, null]], "BranchAndBoundCallback": [[1, null]], "BranchAndBoundCallbackFactory": [[2, null]], "Branching Rules": [[22, null]], "BreadthFirst": [[12, null]], "Build": [[99, "build"]], "Build instructions": [[85, "build-instructions"], [87, "build-instructions"]], "Build the doc!": [[85, null]], "Building Examples": [[103, "building-examples"]], "Building Unit and Integration Tests": [[103, "building-unit-and-integration-tests"]], "COIN-OR/Osi (Cplex, Xpress, Cbc, \u2026)": [[67, null]], "Callback": [[70, null]], "CallbackFactory": [[71, null]], "Changing the Optimization Sense": [[134, "changing-the-optimization-sense"]], "Changing the Scoring Function": [[125, "changing-the-scoring-function"]], "Class List": [[69, null]], "Code coverage options": [[87, "code-coverage-options"]], "Column": [[36, null]], "Column Generation Algorithm": [[31, null]], "Column Generation and Branch-and-Price": [[93, "column-generation-and-branch-and-price"]], "Column Generation and Branch-and-Price Algorithm": [[120, null]], "Column Generation and Dantzig-Wolfe Decomposition": [[98, "column-generation-and-dantzig-wolfe-decomposition"]], "Column-and-Constraint Generation": [[98, "column-and-constraint-generation"]], "Column-and-Constraint Generation Algorithm": [[25, null]], "Column-and-Constraint-Generation Algorithm": [[142, null]], "Common": [[51, null], [75, "common"], [80, null]], "Complete Example": [[107, "complete-example"], [149, "complete-example"]], "Configure": [[99, "configure"]], "Constant": [[37, null]], "Constants": [[75, null]], "Constraints": [[129, null]], "Create Your Own Callback (Advanced) [TODO]": [[112, null]], "Creating Constraints": [[129, "creating-constraints"]], "Creating Several Variables at Once": [[135, "creating-several-variables-at-once"]], "Creating Variables": [[135, "creating-variables"]], "Creating Your Own Branching Rule (Advanced) [TODO]": [[111, null]], "Creating Your Own Node Class (Advanced) [TODO]": [[113, null]], "Creating Your Own Node Selection Rule (Advanced) [TODO]": [[114, null]], "Creating Your Own Optimizer (Advanced) [TODO]": [[137, null]], "Creating Your Own Universal Callback": [[138, null]], "Creating a Model": [[133, "creating-a-model"]], "Creating the Branch-and-Price Algorithm": [[122, "creating-the-branch-and-price-algorithm"]], "Creating your own callback": [[70, "creating-your-own-callback"]], "Ctr": [[38, null]], "CtrType": [[78, null]], "Current Features": [[98, "current-features"]], "Cuts::KnapsackCover": [[3, null]], "Cutting Planes": [[4, null]], "Dantzig-Wolfe Reformulation": [[122, "dantzig-wolfe-reformulation"]], "DantzigWolfe::ArtificialCosts": [[26, null]], "DantzigWolfe::FarkasPricing": [[28, null]], "DantzigWolfe::Neame": [[32, null]], "DantzigWolfe::Wentges": [[33, null]], "DantzigWolfeDecomposition": [[27, null]], "Decomposition": [[91, "decomposition"]], "Defining the Deterministic Model": [[149, "defining-the-deterministic-model"]], "Defining the Lower-Level Objective Function": [[107, "defining-the-lower-level-objective-function"]], "Defining the Uncertainty Set": [[149, "defining-the-uncertainty-set"]], "Dependencies": [[85, "dependencies"], [87, "dependencies"]], "DepthFirst": [[13, null]], "Describing the Lower-Level Problem": [[107, "describing-the-lower-level-problem"]], "Description": [[85, "description"]], "Detailed Answer": [[97, "detailed-answer"]], "Developer guide": [[86, null]], "Env": [[39, null]], "Events": [[82, null]], "Example": [[0, null], [1, null], [41, null], [70, null], [87, null], [87, null], [98, null], [103, null], [103, null], [103, null], [103, null], [103, null], [103, null], [103, null], [122, null], [140, null]], "Example for Gurobi": [[99, null]], "Example:": [[42, null]], "Examples": [[93, null]], "Expr": [[40, null]], "Expressions": [[131, null]], "External Bilevel Solvers": [[54, null]], "External MIP solvers": [[68, null]], "External Solvers": [[108, null]], "FAQ": [[96, null]], "Facility Location Problem (Branch-and-Bound)": [[90, null]], "FirstInfeasibleFound": [[16, null]], "Full Strong Branching": [[125, "full-strong-branching"]], "GLPK": [[55, null]], "GLPK (Open-Source Solver)": [[103, "glpk-open-source-solver"]], "Generalized Assignment Problem (Branch-and-Price)": [[91, null]], "Generalized Assignment Problem (Column Generation + Penalty Method)": [[92, null]], "Getting Access to The Underlying Optimizer": [[136, null]], "Getting Started With Idol": [[98, "getting-started-with-idol"]], "Giving Decomposition Instructions": [[122, "giving-decomposition-instructions"]], "Global Installation": [[99, null]], "Gurobi": [[56, null]], "Gurobi (Commercial Solver)": [[103, "gurobi-commercial-solver"]], "Heuristic Pricing (to come)": [[123, null]], "Heuristics": [[8, null]], "Heuristics::IntegerMaster": [[29, null]], "Heuristics::LocalBranching": [[5, null]], "Heuristics::RENS": [[6, null]], "Heuristics::SimpleRounding": [[7, null]], "HiGHS": [[57, null]], "HiGHS (Open-Source Solver)": [[103, "highs-open-source-solver"]], "Implementation": [[125, "implementation"]], "Implementation in idol": [[144, "implementation-in-idol"]], "Implementation with idol": [[89, "implementation-with-idol"], [90, "implementation-with-idol"], [91, "implementation-with-idol"], [92, "implementation-with-idol"], [94, "implementation-with-idol"], [95, "implementation-with-idol"]], "In Short": [[97, "in-short"]], "In-Out Stabilization (to come)": [[124, null]], "Install": [[99, "install"]], "Installation": [[101, null]], "Installation guide (Ubuntu)": [[85, "installation-guide-ubuntu"], [87, "installation-guide-ubuntu"]], "Interfacing External Optimization Solvers": [[98, "interfacing-external-optimization-solvers"], [98, "id6"]], "Introduction": [[141, "introduction"], [143, null], [144, "introduction"]], "Is This a MIP Solver?": [[98, "is-this-a-mip-solver"]], "Iterating over the Variables and Constraints": [[133, "iterating-over-the-variables-and-constraints"]], "KKT Reformulation with idol": [[88, "kkt-reformulation-with-idol"]], "Knapsack Problem (HiGHS)": [[94, null]], "LazyCutCallback": [[72, null]], "LeastInfeasible": [[17, null]], "LinExpr": [[41, null]], "Linking Your C++ Project": [[100, null]], "Linking with External Solvers": [[103, "linking-with-external-solvers"]], "List of CMake Options": [[103, null]], "Local Installation": [[102, null]], "Mathematical Models": [[122, "mathematical-models"]], "Mixed-Integer Optimization": [[98, "mixed-integer-optimization"]], "Mixed-Integer Programming": [[69, "mixed-integer-programming"], [81, "mixed-integer-programming"], [93, "mixed-integer-programming"], [110, "mixed-integer-programming"], [128, null]], "Model": [[42, null]], "Modeling": [[106, null], [132, null], [148, null]], "Modeling Steps": [[149, "modeling-steps"]], "Modeling a Two-Stage Robust Problem": [[149, null]], "Modeling an Optimistic Bilevel Problem": [[107, null]], "Modeling and Solving A Dantzig-Wolfe Reformulation [TODO]": [[118, null]], "Modeling the High-Point Relaxation": [[107, "modeling-the-high-point-relaxation"]], "Models": [[133, null]], "Modifying Constraints": [[129, "modifying-constraints"]], "Modifying Variables": [[135, "modifying-variables"]], "Mosek": [[58, null]], "Mosek (Commercial Solver)": [[103, "mosek-commercial-solver"]], "MostInfeasible": [[18, null]], "Node Selection Rules": [[15, null]], "Objective Functions": [[134, null]], "On the Impact of Coupling Constraints": [[143, "on-the-impact-of-coupling-constraints"]], "Optimizers": [[139, null]], "Optimizers::Bilevel::Mibs": [[53, null]], "Optimizers::DantzigWolfeDecomposition": [[30, null]], "Optimizers::GLPK": [[59, null]], "Optimizers::Gurobi": [[60, null]], "Optimizers::HiGHS": [[61, null]], "Optimizers::Mosek": [[62, null]], "Optimizers::Robust::ColumnAndConstraintGeneration": [[24, null]], "Original Formulation": [[122, "original-formulation"]], "OsiCbc": [[63, null]], "OsiClp": [[64, null]], "OsiCplex": [[65, null]], "OsiSymphony": [[66, null]], "Other optional dependencies": [[103, "other-optional-dependencies"]], "Param": [[43, null]], "Phases": [[125, "phases"]], "Problem Definition": [[88, "problem-definition"], [89, "problem-definition"], [90, "problem-definition"], [91, "problem-definition"], [92, "problem-definition"], [94, "problem-definition"]], "Problem Definition and Main Steps": [[107, "problem-definition-and-main-steps"]], "Problem Definition and Notation": [[143, "problem-definition-and-notation"]], "Problem Description": [[95, "problem-description"]], "PseudoCost": [[19, null]], "QuadExpr": [[44, null]], "Reading a Model from a File": [[133, "reading-a-model-from-a-file"]], "References": [[104, null]], "Regarding Coupling Constraints": [[143, null]], "Removing Constraints": [[129, "removing-constraints"]], "Removing Variables": [[135, "removing-variables"]], "Restricted Strong Branching": [[125, "restricted-strong-branching"]], "Robust Optimization": [[69, "robust-optimization"], [93, "robust-optimization"], [98, "robust-optimization"], [110, "robust-optimization"], [147, null]], "Robust::ColumnAndConstraintGeneration": [[23, null]], "Row": [[45, null]], "Saving a Projected Solution": [[140, "saving-a-projected-solution"]], "Saving a Solution": [[140, "saving-a-solution"]], "Scoring Functions": [[125, "scoring-functions"]], "Separators": [[143, "separators"]], "Solution::Dual": [[46, null]], "Solution::Primal": [[47, null]], "Solving Mixed-Integer Bilevel Problems with MibS": [[109, null]], "Solving a Model": [[140, "solving-a-model"]], "Solving a Model and Accessing the Solution": [[140, null]], "Stabilization": [[34, null]], "StrongBranching": [[20, null]], "Table of Contents": [[98, "table-of-contents"], [99, "table-of-contents"], [103, "table-of-contents"], [107, "table-of-contents"], [125, "table-of-contents"], [129, "table-of-contents"], [133, "table-of-contents"], [134, "table-of-contents"], [135, "table-of-contents"], [138, "table-of-contents"], [140, "table-of-contents"], [141, "table-of-contents"], [143, "table-of-contents"], [144, "table-of-contents"], [149, "table-of-contents"]], "TempCtr": [[48, null]], "TempVar": [[49, null]], "The Algorithm": [[143, "the-algorithm"]], "The Environment": [[130, null]], "The Integer Master Heuristic [TODO]": [[121, null]], "The Original Formulation": [[122, "the-original-formulation"]], "Tolerances and Numerics": [[76, null]], "Tutorials": [[110, null]], "Two-Stage Robust Facility Location Problem (CCG)": [[95, null]], "Type List": [[81, null]], "UniformlyRandom": [[21, null]], "Unit and integration tests": [[87, null]], "Universal Callbacks": [[74, null], [83, null]], "UserCutCallback": [[73, null]], "UserCutCallback and LazyCutCallback": [[70, "usercutcallback-and-lazycutcallback"]], "Using Eigen": [[103, "using-eigen"]], "Using In-Out Stabilization [TODO]": [[119, null]], "Using Strong Branching": [[125, null]], "Using Trust Region Stabilization": [[144, null]], "Using martinus/robin-hood-hashing hash map": [[103, "using-martinus-robin-hood-hashing-hash-map"]], "Var": [[50, null]], "VarType": [[79, null]], "Variables": [[135, null]], "Variants": [[125, "variants"]], "What Is Idol?": [[98, null]], "Why is Eigen necessary to solve QPs and QCQPs with Mosek?": [[97, null]], "WorstBound": [[14, null]], "Writing A Branch-and-Cut-and-Price Algorithm [TODO]": [[126, null]], "Writing A Branch-and-Price Algorithm [TODO]": [[127, null]], "Writing Your Own Separator (Advanced) [TODO]": [[146, null]], "Writing a Column-and-Constraint-Generation Algorithm": [[145, null]], "Writing a Model to a File": [[133, "writing-a-model-to-a-file"]], "Writing an LP-based Branch-and-Bound [TODO]": [[117, null]]}, "docnames": ["api/classes/branch-and-bound/BranchAndBound", "api/classes/branch-and-bound/BranchAndBoundCallback", "api/classes/branch-and-bound/BranchAndBoundCallbackFactory", "api/classes/branch-and-bound/cuts/KnapsackCover", "api/classes/branch-and-bound/cuts/index", "api/classes/branch-and-bound/heuristics/LocalBranching", "api/classes/branch-and-bound/heuristics/RENS", "api/classes/branch-and-bound/heuristics/SimpleRounding", "api/classes/branch-and-bound/heuristics/index", "api/classes/branch-and-bound/index", "api/classes/branch-and-bound/node-selection/BestBound", "api/classes/branch-and-bound/node-selection/BestEstimate", "api/classes/branch-and-bound/node-selection/BreadthFirst", "api/classes/branch-and-bound/node-selection/DepthFirst", "api/classes/branch-and-bound/node-selection/WorstBound", "api/classes/branch-and-bound/node-selection/index", "api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound", "api/classes/branch-and-bound/variable-selection/LeastInfeasible", "api/classes/branch-and-bound/variable-selection/MostInfeasible", "api/classes/branch-and-bound/variable-selection/PseudoCost", "api/classes/branch-and-bound/variable-selection/StrongBranching", "api/classes/branch-and-bound/variable-selection/UniformlyRandom", "api/classes/branch-and-bound/variable-selection/index", "api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration", "api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration", "api/classes/column-and-constraint-generation/index", "api/classes/column-generation/ArtificialCosts", "api/classes/column-generation/DantzigWolfeDecomposition", "api/classes/column-generation/FarkasPricing", "api/classes/column-generation/IntegerMaster", "api/classes/column-generation/Optimizers_DantzigWolfeDecomposition", "api/classes/column-generation/index", "api/classes/column-generation/stabilization/Neame", "api/classes/column-generation/stabilization/Wentges", "api/classes/column-generation/stabilization/index", "api/classes/common/Annotation", "api/classes/common/Column", "api/classes/common/Constant", "api/classes/common/Ctr", "api/classes/common/Env", "api/classes/common/Expr", "api/classes/common/LinExpr", "api/classes/common/Model", "api/classes/common/Param", "api/classes/common/QuadExpr", "api/classes/common/Row", "api/classes/common/SolutionDual", "api/classes/common/SolutionPrimal", "api/classes/common/TempCtr", "api/classes/common/TempVar", "api/classes/common/Var", "api/classes/common/index", "api/classes/external-bilevel/MibS", "api/classes/external-bilevel/Optimizers_MibS", "api/classes/external-bilevel/index", "api/classes/external-mip/GLPK", "api/classes/external-mip/Gurobi", "api/classes/external-mip/HiGHS", "api/classes/external-mip/Mosek", "api/classes/external-mip/Optimizers_GLPK", "api/classes/external-mip/Optimizers_Gurobi", "api/classes/external-mip/Optimizers_HiGHS", "api/classes/external-mip/Optimizers_Mosek", "api/classes/external-mip/Osi/OsiCbc", "api/classes/external-mip/Osi/OsiClp", "api/classes/external-mip/Osi/OsiCplex", "api/classes/external-mip/Osi/OsiSymphony", "api/classes/external-mip/Osi/index", "api/classes/external-mip/index", "api/classes/index", "api/classes/universal-callbacks/Callback", "api/classes/universal-callbacks/CallbackFactory", "api/classes/universal-callbacks/LazyCutCallback", "api/classes/universal-callbacks/UserCutCallback", "api/classes/universal-callbacks/index", "api/constants/index", "api/constants/tolerances", "api/index", "api/types/common/CtrType", "api/types/common/VarType", "api/types/common/index", "api/types/index", "api/types/universal-callbacks/CallbackEvent", "api/types/universal-callbacks/index", "benchmark/index", "developer_guide/build-the-doc", "developer_guide/index", "developer_guide/tests", "examples/bilevel-kkt", "examples/bilevel-mibs", "examples/facility-location-problem", "examples/generalized-assignment-problem-bap", "examples/generalized-assignment-problem-penalty-bap", "examples/index", "examples/knapsack-problem", "examples/two-stage-robust-facility-location-problem", "faq/index", "faq/mosek-and-eigen", "index", "installation/global-installation/index", "installation/global-installation/linking", "installation/index", "installation/local_installation", "installation/options", "references", "tutorials/bilevel-optimization/index", "tutorials/bilevel-optimization/modeling/index", "tutorials/bilevel-optimization/modeling/optimistic", "tutorials/bilevel-optimization/wrappers/index", "tutorials/bilevel-optimization/wrappers/mibs", "tutorials/index", "tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule", "tutorials/mixed-integer-programming/branch-and-bound/create-callback", "tutorials/mixed-integer-programming/branch-and-bound/create-node", "tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule", "tutorials/mixed-integer-programming/branch-and-bound/index", "tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints", "tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound", "tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe", "tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization", "tutorials/mixed-integer-programming/dantzig-wolfe/index", "tutorials/mixed-integer-programming/dantzig-wolfe/integer-master", "tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe", "tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic", "tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization", "tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching", "tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price", "tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price", "tutorials/mixed-integer-programming/index", "tutorials/mixed-integer-programming/modeling/constraints", "tutorials/mixed-integer-programming/modeling/environment", "tutorials/mixed-integer-programming/modeling/expressions", "tutorials/mixed-integer-programming/modeling/index", "tutorials/mixed-integer-programming/modeling/models", "tutorials/mixed-integer-programming/modeling/objective-function", "tutorials/mixed-integer-programming/modeling/variables", "tutorials/mixed-integer-programming/optimizers/access-optimizer", "tutorials/mixed-integer-programming/optimizers/create-optimizer", "tutorials/mixed-integer-programming/optimizers/create-universal-callback", "tutorials/mixed-integer-programming/optimizers/index", "tutorials/mixed-integer-programming/optimizers/solving", "tutorials/mixed-integer-programming/optimizers/universal-callbacks", "tutorials/robust-optimization/column-and-constraint-generation/index", "tutorials/robust-optimization/column-and-constraint-generation/introduction", "tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization", "tutorials/robust-optimization/column-and-constraint-generation/write-ccg", "tutorials/robust-optimization/column-and-constraint-generation/writing-separator", "tutorials/robust-optimization/index", "tutorials/robust-optimization/modeling/index", "tutorials/robust-optimization/modeling/two-stage-robust"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["api/classes/branch-and-bound/BranchAndBound.rst", "api/classes/branch-and-bound/BranchAndBoundCallback.rst", "api/classes/branch-and-bound/BranchAndBoundCallbackFactory.rst", "api/classes/branch-and-bound/cuts/KnapsackCover.rst", "api/classes/branch-and-bound/cuts/index.rst", "api/classes/branch-and-bound/heuristics/LocalBranching.rst", "api/classes/branch-and-bound/heuristics/RENS.rst", "api/classes/branch-and-bound/heuristics/SimpleRounding.rst", "api/classes/branch-and-bound/heuristics/index.rst", "api/classes/branch-and-bound/index.rst", "api/classes/branch-and-bound/node-selection/BestBound.rst", "api/classes/branch-and-bound/node-selection/BestEstimate.rst", "api/classes/branch-and-bound/node-selection/BreadthFirst.rst", "api/classes/branch-and-bound/node-selection/DepthFirst.rst", "api/classes/branch-and-bound/node-selection/WorstBound.rst", "api/classes/branch-and-bound/node-selection/index.rst", "api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.rst", "api/classes/branch-and-bound/variable-selection/LeastInfeasible.rst", "api/classes/branch-and-bound/variable-selection/MostInfeasible.rst", "api/classes/branch-and-bound/variable-selection/PseudoCost.rst", "api/classes/branch-and-bound/variable-selection/StrongBranching.rst", "api/classes/branch-and-bound/variable-selection/UniformlyRandom.rst", "api/classes/branch-and-bound/variable-selection/index.rst", "api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.rst", "api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.rst", "api/classes/column-and-constraint-generation/index.rst", "api/classes/column-generation/ArtificialCosts.rst", "api/classes/column-generation/DantzigWolfeDecomposition.rst", "api/classes/column-generation/FarkasPricing.rst", "api/classes/column-generation/IntegerMaster.rst", "api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.rst", "api/classes/column-generation/index.rst", "api/classes/column-generation/stabilization/Neame.rst", "api/classes/column-generation/stabilization/Wentges.rst", "api/classes/column-generation/stabilization/index.rst", "api/classes/common/Annotation.rst", "api/classes/common/Column.rst", "api/classes/common/Constant.rst", "api/classes/common/Ctr.rst", "api/classes/common/Env.rst", "api/classes/common/Expr.rst", "api/classes/common/LinExpr.rst", "api/classes/common/Model.rst", "api/classes/common/Param.rst", "api/classes/common/QuadExpr.rst", "api/classes/common/Row.rst", "api/classes/common/SolutionDual.rst", "api/classes/common/SolutionPrimal.rst", "api/classes/common/TempCtr.rst", "api/classes/common/TempVar.rst", "api/classes/common/Var.rst", "api/classes/common/index.rst", "api/classes/external-bilevel/MibS.rst", "api/classes/external-bilevel/Optimizers_MibS.rst", "api/classes/external-bilevel/index.rst", "api/classes/external-mip/GLPK.rst", "api/classes/external-mip/Gurobi.rst", "api/classes/external-mip/HiGHS.rst", "api/classes/external-mip/Mosek.rst", "api/classes/external-mip/Optimizers_GLPK.rst", "api/classes/external-mip/Optimizers_Gurobi.rst", "api/classes/external-mip/Optimizers_HiGHS.rst", "api/classes/external-mip/Optimizers_Mosek.rst", "api/classes/external-mip/Osi/OsiCbc.rst", "api/classes/external-mip/Osi/OsiClp.rst", "api/classes/external-mip/Osi/OsiCplex.rst", "api/classes/external-mip/Osi/OsiSymphony.rst", "api/classes/external-mip/Osi/index.rst", "api/classes/external-mip/index.rst", "api/classes/index.rst", "api/classes/universal-callbacks/Callback.rst", "api/classes/universal-callbacks/CallbackFactory.rst", "api/classes/universal-callbacks/LazyCutCallback.rst", "api/classes/universal-callbacks/UserCutCallback.rst", "api/classes/universal-callbacks/index.rst", "api/constants/index.rst", "api/constants/tolerances.rst", "api/index.rst", "api/types/common/CtrType.rst", "api/types/common/VarType.rst", "api/types/common/index.rst", "api/types/index.rst", "api/types/universal-callbacks/CallbackEvent.rst", "api/types/universal-callbacks/index.rst", "benchmark/index.rst", "developer_guide/build-the-doc.rst", "developer_guide/index.rst", "developer_guide/tests.rst", "examples/bilevel-kkt.rst", "examples/bilevel-mibs.rst", "examples/facility-location-problem.rst", "examples/generalized-assignment-problem-bap.rst", "examples/generalized-assignment-problem-penalty-bap.rst", "examples/index.rst", "examples/knapsack-problem.rst", "examples/two-stage-robust-facility-location-problem.rst", "faq/index.rst", "faq/mosek-and-eigen.rst", "index.rst", "installation/global-installation/index.rst", "installation/global-installation/linking.rst", "installation/index.rst", "installation/local_installation.rst", "installation/options.rst", "references.rst", "tutorials/bilevel-optimization/index.rst", "tutorials/bilevel-optimization/modeling/index.rst", "tutorials/bilevel-optimization/modeling/optimistic.rst", "tutorials/bilevel-optimization/wrappers/index.rst", "tutorials/bilevel-optimization/wrappers/mibs.rst", "tutorials/index.rst", "tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.rst", "tutorials/mixed-integer-programming/branch-and-bound/create-callback.rst", "tutorials/mixed-integer-programming/branch-and-bound/create-node.rst", "tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.rst", "tutorials/mixed-integer-programming/branch-and-bound/index.rst", "tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.rst", "tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/index.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.rst", "tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.rst", "tutorials/mixed-integer-programming/index.rst", "tutorials/mixed-integer-programming/modeling/constraints.rst", "tutorials/mixed-integer-programming/modeling/environment.rst", "tutorials/mixed-integer-programming/modeling/expressions.rst", "tutorials/mixed-integer-programming/modeling/index.rst", "tutorials/mixed-integer-programming/modeling/models.rst", "tutorials/mixed-integer-programming/modeling/objective-function.rst", "tutorials/mixed-integer-programming/modeling/variables.rst", "tutorials/mixed-integer-programming/optimizers/access-optimizer.rst", "tutorials/mixed-integer-programming/optimizers/create-optimizer.rst", "tutorials/mixed-integer-programming/optimizers/create-universal-callback.rst", "tutorials/mixed-integer-programming/optimizers/index.rst", "tutorials/mixed-integer-programming/optimizers/solving.rst", "tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst", "tutorials/robust-optimization/column-and-constraint-generation/index.rst", "tutorials/robust-optimization/column-and-constraint-generation/introduction.rst", "tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.rst", "tutorials/robust-optimization/column-and-constraint-generation/write-ccg.rst", "tutorials/robust-optimization/column-and-constraint-generation/writing-separator.rst", "tutorials/robust-optimization/index.rst", "tutorials/robust-optimization/modeling/index.rst", "tutorials/robust-optimization/modeling/two-stage-robust.rst"], "indexentries": {"idol (c++ type)": [[76, "_CPPv44idol", false]], "idol::absolute_gap (c++ function)": [[76, "_CPPv4N4idol12absolute_gapEdd", false]], "idol::annotation (c++ class)": [[35, "_CPPv4I00EN4idol10AnnotationE", false]], "idol::annotation::annotation (c++ function)": [[35, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", false], [35, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", false]], "idol::annotation::default_value (c++ function)": [[35, "_CPPv4NK4idol10Annotation13default_valueEv", false]], "idol::annotation::env (c++ function)": [[35, "_CPPv4NK4idol10Annotation3envEv", false]], "idol::annotation::free (c++ function)": [[35, "_CPPv4N4idol10Annotation4freeEv", false]], "idol::annotation::has_default (c++ function)": [[35, "_CPPv4NK4idol10Annotation11has_defaultEv", false]], "idol::annotation::id (c++ function)": [[35, "_CPPv4NK4idol10Annotation2idEv", false]], "idol::annotation::is_ctr_annotation (c++ function)": [[35, "_CPPv4NK4idol10Annotation17is_ctr_annotationEv", false]], "idol::annotation::is_var_annotation (c++ function)": [[35, "_CPPv4NK4idol10Annotation17is_var_annotationEv", false]], "idol::annotation::make_with_default_value (c++ function)": [[35, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", false]], "idol::annotation::name (c++ function)": [[35, "_CPPv4NK4idol10Annotation4nameEv", false]], "idol::bestbound (c++ class)": [[10, "_CPPv4N4idol9BestBoundE", false]], "idol::bestbound::strategy (c++ class)": [[10, "_CPPv4I0EN4idol9BestBound8StrategyE", false]], "idol::bestbound::strategy::clone (c++ function)": [[10, "_CPPv4NK4idol9BestBound8Strategy5cloneEv", false]], "idol::bestbound::strategy::operator() (c++ function)": [[10, "_CPPv4NK4idol9BestBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::bestbound::strategy::strategy (c++ function)": [[10, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", false]], "idol::bestestimate (c++ class)": [[11, "_CPPv4N4idol12BestEstimateE", false]], "idol::bestestimate::strategy (c++ class)": [[11, "_CPPv4I0EN4idol12BestEstimate8StrategyE", false]], "idol::bestestimate::strategy::clone (c++ function)": [[11, "_CPPv4NK4idol12BestEstimate8Strategy5cloneEv", false]], "idol::bestestimate::strategy::operator() (c++ function)": [[11, "_CPPv4NK4idol12BestEstimate8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::bestestimate::strategy::strategy (c++ function)": [[11, "_CPPv4N4idol12BestEstimate8Strategy8StrategyERK12BestEstimate", false]], "idol::bilevel::mibs (c++ class)": [[52, "_CPPv4N4idol7Bilevel4MibSE", false]], "idol::bilevel::mibs::as (c++ function)": [[52, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", false], [52, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", false]], "idol::bilevel::mibs::clone (c++ function)": [[52, "_CPPv4NK4idol7Bilevel4MibS5cloneEv", false]], "idol::bilevel::mibs::conditional (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", false], [52, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", false]], "idol::bilevel::mibs::is (c++ function)": [[52, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", false]], "idol::bilevel::mibs::mibs (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel21LowerLevelDescriptionE", false], [52, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", false], [52, "_CPPv4N4idol7Bilevel4MibS4MibSERR4MibS", false]], "idol::bilevel::mibs::operator() (c++ function)": [[52, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", false]], "idol::bilevel::mibs::operator= (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibSaSERK4MibS", false], [52, "_CPPv4N4idol7Bilevel4MibSaSERR4MibS", false]], "idol::bilevel::mibs::with_absolute_gap_tolerance (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", false]], "idol::bilevel::mibs::with_best_bound_stop (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", false]], "idol::bilevel::mibs::with_best_obj_stop (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", false]], "idol::bilevel::mibs::with_infeasible_or_unbounded_info (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", false]], "idol::bilevel::mibs::with_iteration_limit (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", false]], "idol::bilevel::mibs::with_logs (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", false]], "idol::bilevel::mibs::with_osi_interface (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS18with_osi_interfaceERK18OsiSolverInterface", false]], "idol::bilevel::mibs::with_presolve (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", false]], "idol::bilevel::mibs::with_relative_gap_tolerance (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", false]], "idol::bilevel::mibs::with_thread_limit (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", false]], "idol::bilevel::mibs::with_time_limit (c++ function)": [[52, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", false]], "idol::branchandbound (c++ class)": [[0, "_CPPv4I0EN4idol14BranchAndBoundE", false]], "idol::branchandbound::add_callback (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound12add_callbackERK15CallbackFactory", false], [0, "_CPPv4N4idol14BranchAndBound12add_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", false]], "idol::branchandbound::as (c++ function)": [[0, "_CPPv4I0EN4idol14BranchAndBound2asER1Tv", false], [0, "_CPPv4I0ENK4idol14BranchAndBound2asERK1Tv", false]], "idol::branchandbound::branchandbound (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERK14BranchAndBound", false], [0, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERR14BranchAndBound", false], [0, "_CPPv4N4idol14BranchAndBound14BranchAndBoundEv", false]], "idol::branchandbound::clone (c++ function)": [[0, "_CPPv4NK4idol14BranchAndBound5cloneEv", false]], "idol::branchandbound::conditional (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", false], [0, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", false]], "idol::branchandbound::is (c++ function)": [[0, "_CPPv4I0ENK4idol14BranchAndBound2isEbv", false]], "idol::branchandbound::only_if_has_strategy (c++ type)": [[0, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", false]], "idol::branchandbound::operator() (c++ function)": [[0, "_CPPv4NK4idol14BranchAndBoundclERK5Model", false]], "idol::branchandbound::operator+= (c++ function)": [[0, "_CPPv4N4idol14BranchAndBoundpLERK16OptimizerFactory", false]], "idol::branchandbound::operator= (c++ function)": [[0, "_CPPv4N4idol14BranchAndBoundaSERK14BranchAndBound", false], [0, "_CPPv4N4idol14BranchAndBoundaSERR14BranchAndBound", false]], "idol::branchandbound::set_node_optimizer (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound18set_node_optimizerERK16OptimizerFactory", false]], "idol::branchandbound::with_absolute_gap_tolerance (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", false]], "idol::branchandbound::with_best_bound_stop (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", false]], "idol::branchandbound::with_best_obj_stop (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", false]], "idol::branchandbound::with_branching_rule (c++ function)": [[0, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", false], [0, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", false], [0, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", false]], "idol::branchandbound::with_infeasible_or_unbounded_info (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", false]], "idol::branchandbound::with_iteration_limit (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound20with_iteration_limitEj", false]], "idol::branchandbound::with_logger (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound11with_loggerERKN4Logs14BranchAndBound7FactoryI5NodeTEE", false]], "idol::branchandbound::with_logs (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound9with_logsEb", false]], "idol::branchandbound::with_node_optimizer (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", false]], "idol::branchandbound::with_node_selection_rule (c++ function)": [[0, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", false], [0, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", false], [0, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", false]], "idol::branchandbound::with_presolve (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound13with_presolveEb", false]], "idol::branchandbound::with_relative_gap_tolerance (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", false]], "idol::branchandbound::with_scaling (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound12with_scalingEb", false]], "idol::branchandbound::with_subtree_depth (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", false]], "idol::branchandbound::with_thread_limit (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", false]], "idol::branchandbound::with_time_limit (c++ function)": [[0, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", false]], "idol::branchandboundcallback (c++ class)": [[1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", false]], "idol::branchandboundcallback::add_lazy_cut (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", false]], "idol::branchandboundcallback::add_user_cut (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", false]], "idol::branchandboundcallback::best_bound (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback10best_boundEv", false]], "idol::branchandboundcallback::best_obj (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback8best_objEv", false]], "idol::branchandboundcallback::initialize (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback10initializeEv", false]], "idol::branchandboundcallback::log_after_termination (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback21log_after_terminationEv", false]], "idol::branchandboundcallback::node (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback4nodeEv", false]], "idol::branchandboundcallback::operator() (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", false]], "idol::branchandboundcallback::original_model (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback14original_modelEv", false]], "idol::branchandboundcallback::relaxation (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback10relaxationEv", false]], "idol::branchandboundcallback::side_effect_registry (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback20side_effect_registryEv", false]], "idol::branchandboundcallback::submit_bound (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", false]], "idol::branchandboundcallback::submit_heuristic_solution (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", false]], "idol::branchandboundcallback::terminate (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallback9terminateEv", false]], "idol::branchandboundcallback::time (c++ function)": [[1, "_CPPv4NK4idol22BranchAndBoundCallback4timeEv", false]], "idol::branchandboundcallback::~branchandboundcallback (c++ function)": [[1, "_CPPv4N4idol22BranchAndBoundCallbackD0Ev", false]], "idol::branchandboundcallbackfactory (c++ class)": [[2, "_CPPv4I0EN4idol29BranchAndBoundCallbackFactoryE", false]], "idol::branchandboundcallbackfactory::clone (c++ function)": [[2, "_CPPv4NK4idol29BranchAndBoundCallbackFactory5cloneEv", false]], "idol::branchandboundcallbackfactory::operator() (c++ function)": [[2, "_CPPv4N4idol29BranchAndBoundCallbackFactoryclEv", false]], "idol::branchandboundcallbackfactory::~branchandboundcallbackfactory (c++ function)": [[2, "_CPPv4N4idol29BranchAndBoundCallbackFactoryD0Ev", false]], "idol::breadthfirst (c++ class)": [[12, "_CPPv4N4idol12BreadthFirstE", false]], "idol::breadthfirst::strategy (c++ class)": [[12, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", false]], "idol::breadthfirst::strategy::clone (c++ function)": [[12, "_CPPv4NK4idol12BreadthFirst8Strategy5cloneEv", false]], "idol::breadthfirst::strategy::operator() (c++ function)": [[12, "_CPPv4NK4idol12BreadthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::breadthfirst::strategy::strategy (c++ function)": [[12, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", false]], "idol::callback (c++ class)": [[70, "_CPPv4N4idol8CallbackE", false]], "idol::callback::add_lazy_cut (c++ function)": [[70, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", false]], "idol::callback::add_user_cut (c++ function)": [[70, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", false]], "idol::callback::best_bound (c++ function)": [[70, "_CPPv4NK4idol8Callback10best_boundEv", false]], "idol::callback::best_obj (c++ function)": [[70, "_CPPv4NK4idol8Callback8best_objEv", false]], "idol::callback::operator() (c++ function)": [[70, "_CPPv4N4idol8CallbackclE13CallbackEvent", false]], "idol::callback::original_model (c++ function)": [[70, "_CPPv4NK4idol8Callback14original_modelEv", false]], "idol::callback::primal_solution (c++ function)": [[70, "_CPPv4NK4idol8Callback15primal_solutionEv", false]], "idol::callback::submit_heuristic_solution (c++ function)": [[70, "_CPPv4N4idol8Callback25submit_heuristic_solutionERKN8Solution6PrimalE", false]], "idol::callback::terminate (c++ function)": [[70, "_CPPv4N4idol8Callback9terminateEv", false]], "idol::callback::time (c++ function)": [[70, "_CPPv4NK4idol8Callback4timeEv", false]], "idol::callback::~callback (c++ function)": [[70, "_CPPv4N4idol8CallbackD0Ev", false]], "idol::callbackevent (c++ enum)": [[82, "_CPPv4N4idol13CallbackEventE", false]], "idol::callbackevent::incumbentsolution (c++ enumerator)": [[82, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", false]], "idol::callbackevent::invalidsolution (c++ enumerator)": [[82, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", false]], "idol::callbackevent::nodeloaded (c++ enumerator)": [[82, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", false]], "idol::callbackevent::prunedsolution (c++ enumerator)": [[82, "_CPPv4N4idol13CallbackEvent14PrunedSolutionE", false]], "idol::callbackfactory (c++ class)": [[71, "_CPPv4N4idol15CallbackFactoryE", false]], "idol::callbackfactory::clone (c++ function)": [[71, "_CPPv4NK4idol15CallbackFactory5cloneEv", false]], "idol::callbackfactory::operator() (c++ function)": [[71, "_CPPv4N4idol15CallbackFactoryclEv", false]], "idol::callbackfactory::~callbackfactory (c++ function)": [[71, "_CPPv4N4idol15CallbackFactoryD0Ev", false]], "idol::column (c++ class)": [[36, "_CPPv4N4idol6ColumnE", false]], "idol::column::column (c++ function)": [[36, "_CPPv4N4idol6Column6ColumnERK6Column", false], [36, "_CPPv4N4idol6Column6ColumnERK8Constant", false], [36, "_CPPv4N4idol6Column6ColumnERR6Column", false], [36, "_CPPv4N4idol6Column6ColumnERR8Constant", false], [36, "_CPPv4N4idol6Column6ColumnEv", false]], "idol::column::emptycolumn (c++ member)": [[36, "_CPPv4N4idol6Column11EmptyColumnE", false]], "idol::column::fix (c++ function)": [[36, "_CPPv4NK4idol6Column3fixERKN8Solution6PrimalE", false]], "idol::column::linear (c++ function)": [[36, "_CPPv4N4idol6Column6linearEv", false], [36, "_CPPv4NK4idol6Column6linearEv", false]], "idol::column::obj (c++ function)": [[36, "_CPPv4N4idol6Column3objEv", false], [36, "_CPPv4NK4idol6Column3objEv", false]], "idol::column::obj_quadratic (c++ function)": [[36, "_CPPv4N4idol6Column13obj_quadraticEv", false], [36, "_CPPv4NK4idol6Column13obj_quadraticEv", false]], "idol::column::operator*= (c++ function)": [[36, "_CPPv4N4idol6ColumnmLEd", false]], "idol::column::operator+= (c++ function)": [[36, "_CPPv4N4idol6ColumnpLERK6Column", false]], "idol::column::operator-= (c++ function)": [[36, "_CPPv4N4idol6ColumnmIERK6Column", false]], "idol::column::operator= (c++ function)": [[36, "_CPPv4N4idol6ColumnaSERK6Column", false], [36, "_CPPv4N4idol6ColumnaSERR6Column", false]], "idol::column::quadratic (c++ function)": [[36, "_CPPv4N4idol6Column9quadraticEv", false], [36, "_CPPv4NK4idol6Column9quadraticEv", false]], "idol::column::set_linear (c++ function)": [[36, "_CPPv4N4idol6Column10set_linearERK7LinExprI3CtrE", false], [36, "_CPPv4N4idol6Column10set_linearERR7LinExprI3CtrE", false]], "idol::column::set_obj (c++ function)": [[36, "_CPPv4N4idol6Column7set_objERK8Constant", false], [36, "_CPPv4N4idol6Column7set_objERR8Constant", false]], "idol::column::set_quadratic (c++ function)": [[36, "_CPPv4N4idol6Column13set_quadraticERK8QuadExprI3Ctr3VarE", false], [36, "_CPPv4N4idol6Column13set_quadraticERR8QuadExprI3Ctr3VarE", false]], "idol::constant (c++ class)": [[37, "_CPPv4N4idol8ConstantE", false]], "idol::constant::as_numerical (c++ function)": [[37, "_CPPv4NK4idol8Constant12as_numericalEv", false]], "idol::constant::constant (c++ function)": [[37, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", false], [37, "_CPPv4N4idol8Constant8ConstantERK5Paramd", false], [37, "_CPPv4N4idol8Constant8ConstantERK8Constant", false], [37, "_CPPv4N4idol8Constant8ConstantERR8Constant", false], [37, "_CPPv4N4idol8Constant8ConstantEd", false], [37, "_CPPv4N4idol8Constant8ConstantEv", false]], "idol::constant::fix (c++ function)": [[37, "_CPPv4NK4idol8Constant3fixERKN8Solution4DualE", false], [37, "_CPPv4NK4idol8Constant3fixERKN8Solution6PrimalE", false]], "idol::constant::get (c++ function)": [[37, "_CPPv4NK4idol8Constant3getERK5Param", false], [37, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", false]], "idol::constant::is_numerical (c++ function)": [[37, "_CPPv4NK4idol8Constant12is_numericalEv", false]], "idol::constant::is_zero (c++ function)": [[37, "_CPPv4NK4idol8Constant7is_zeroEv", false]], "idol::constant::linear (c++ function)": [[37, "_CPPv4N4idol8Constant6linearEv", false], [37, "_CPPv4NK4idol8Constant6linearEv", false]], "idol::constant::multiply_with_precision (c++ function)": [[37, "_CPPv4N4idol8Constant23multiply_with_precisionEdj", false]], "idol::constant::multiply_with_precision_by_power_of_10 (c++ function)": [[37, "_CPPv4N4idol8Constant38multiply_with_precision_by_power_of_10Ejj", false]], "idol::constant::numerical (c++ function)": [[37, "_CPPv4NK4idol8Constant9numericalEv", false]], "idol::constant::operator*= (c++ function)": [[37, "_CPPv4N4idol8ConstantmLEd", false]], "idol::constant::operator+= (c++ function)": [[37, "_CPPv4N4idol8ConstantpLERK5Param", false], [37, "_CPPv4N4idol8ConstantpLERK8Constant", false], [37, "_CPPv4N4idol8ConstantpLEd", false]], "idol::constant::operator-= (c++ function)": [[37, "_CPPv4N4idol8ConstantmIE5Param", false], [37, "_CPPv4N4idol8ConstantmIERK8Constant", false], [37, "_CPPv4N4idol8ConstantmIEd", false]], "idol::constant::operator/= (c++ function)": [[37, "_CPPv4N4idol8ConstantdVEd", false]], "idol::constant::operator= (c++ function)": [[37, "_CPPv4N4idol8ConstantaSERK8Constant", false], [37, "_CPPv4N4idol8ConstantaSERR8Constant", false]], "idol::constant::quadratic (c++ function)": [[37, "_CPPv4N4idol8Constant9quadraticEv", false], [37, "_CPPv4NK4idol8Constant9quadraticEv", false]], "idol::constant::round (c++ function)": [[37, "_CPPv4N4idol8Constant5roundEv", false]], "idol::constant::set (c++ function)": [[37, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", false], [37, "_CPPv4N4idol8Constant3setERK5Paramd", false]], "idol::constant::set_numerical (c++ function)": [[37, "_CPPv4N4idol8Constant13set_numericalEd", false]], "idol::constant::size (c++ function)": [[37, "_CPPv4NK4idol8Constant4sizeEv", false]], "idol::constant::zero (c++ member)": [[37, "_CPPv4N4idol8Constant4ZeroE", false]], "idol::ctr (c++ class)": [[38, "_CPPv4N4idol3CtrE", false]], "idol::ctr::ctr (c++ function)": [[38, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", false], [38, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", false], [38, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", false], [38, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", false]], "idol::ctr::get (c++ function)": [[38, "_CPPv4NK4idol3Ctr3getERK10AnnotationI3Ctr6ValueTE", false]], "idol::ctr::id (c++ function)": [[38, "_CPPv4NK4idol3Ctr2idEv", false]], "idol::ctr::is_in (c++ function)": [[38, "_CPPv4NK4idol3Ctr5is_inERK5Model", false]], "idol::ctr::make_vector (c++ function)": [[38, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", false]], "idol::ctr::name (c++ function)": [[38, "_CPPv4NK4idol3Ctr4nameEv", false]], "idol::ctr::set (c++ function)": [[38, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", false]], "idol::ctrtype (c++ enum)": [[78, "_CPPv4N4idol7CtrTypeE", false]], "idol::ctrtype::equal (c++ enumerator)": [[78, "_CPPv4N4idol7CtrType5EqualE", false]], "idol::ctrtype::greaterorequal (c++ enumerator)": [[78, "_CPPv4N4idol7CtrType14GreaterOrEqualE", false]], "idol::ctrtype::lessorequal (c++ enumerator)": [[78, "_CPPv4N4idol7CtrType11LessOrEqualE", false]], "idol::cuts::knapsackcover (c++ class)": [[3, "_CPPv4I0EN4idol4Cuts13KnapsackCoverE", false]], "idol::cuts::knapsackcover::clone (c++ function)": [[3, "_CPPv4NK4idol4Cuts13KnapsackCover5cloneEv", false]], "idol::cuts::knapsackcover::operator() (c++ function)": [[3, "_CPPv4N4idol4Cuts13KnapsackCoverclEv", false]], "idol::cuts::knapsackcover::strategy (c++ class)": [[3, "_CPPv4N4idol4Cuts13KnapsackCover8StrategyE", false]], "idol::cuts::knapsackcover::strategy::strategy (c++ function)": [[3, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", false]], "idol::cuts::knapsackcover::with_lifting (c++ function)": [[3, "_CPPv4N4idol4Cuts13KnapsackCover12with_liftingEb", false]], "idol::cuts::knapsackcover::with_max_cuts_factor (c++ function)": [[3, "_CPPv4N4idol4Cuts13KnapsackCover20with_max_cuts_factorEd", false]], "idol::cuts::knapsackcover::with_max_pass_root_node (c++ function)": [[3, "_CPPv4N4idol4Cuts13KnapsackCover23with_max_pass_root_nodeEj", false]], "idol::cuts::knapsackcover::with_tree_node_cuts (c++ function)": [[3, "_CPPv4N4idol4Cuts13KnapsackCover19with_tree_node_cutsEb", false]], "idol::dantzigwolfe::artificialcosts (c++ class)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCostsE", false]], "idol::dantzigwolfe::artificialcosts::clone (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts5cloneEv", false]], "idol::dantzigwolfe::artificialcosts::operator() (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCostsclEv", false]], "idol::dantzigwolfe::artificialcosts::strategy (c++ class)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8StrategyE", false]], "idol::dantzigwolfe::artificialcosts::strategy::best_bound (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy10best_boundEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::best_obj (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy8best_objEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::execute (c++ function)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", false]], "idol::dantzigwolfe::artificialcosts::strategy::primal_solution (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy15primal_solutionEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::reason (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6reasonEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::status (c++ function)": [[26, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6statusEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::strategy (c++ function)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", false]], "idol::dantzigwolfe::artificialcosts::with_initial_costs (c++ function)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_initial_costsEd", false]], "idol::dantzigwolfe::artificialcosts::with_max_updates_before_phase_i (c++ function)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts31with_max_updates_before_phase_IEj", false]], "idol::dantzigwolfe::artificialcosts::with_update_factor (c++ function)": [[26, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_update_factorEd", false]], "idol::dantzigwolfe::farkaspricing (c++ class)": [[28, "_CPPv4N4idol12DantzigWolfe13FarkasPricingE", false]], "idol::dantzigwolfe::farkaspricing::clone (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing5cloneEv", false]], "idol::dantzigwolfe::farkaspricing::operator() (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricingclEv", false]], "idol::dantzigwolfe::farkaspricing::strategy (c++ class)": [[28, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8StrategyE", false]], "idol::dantzigwolfe::farkaspricing::strategy::best_bound (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy10best_boundEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::best_obj (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy8best_objEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::execute (c++ function)": [[28, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", false]], "idol::dantzigwolfe::farkaspricing::strategy::primal_solution (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy15primal_solutionEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::reason (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6reasonEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::status (c++ function)": [[28, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6statusEv", false]], "idol::dantzigwolfe::neame (c++ class)": [[32, "_CPPv4N4idol12DantzigWolfe5NeameE", false]], "idol::dantzigwolfe::neame::clone (c++ function)": [[32, "_CPPv4NK4idol12DantzigWolfe5Neame5cloneEv", false]], "idol::dantzigwolfe::neame::neame (c++ function)": [[32, "_CPPv4N4idol12DantzigWolfe5Neame5NeameEd", false]], "idol::dantzigwolfe::neame::operator() (c++ function)": [[32, "_CPPv4NK4idol12DantzigWolfe5NeameclEv", false]], "idol::dantzigwolfe::neame::strategy (c++ class)": [[32, "_CPPv4N4idol12DantzigWolfe5Neame8StrategyE", false]], "idol::dantzigwolfe::neame::strategy::compute_smoothed_dual_solution (c++ function)": [[32, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy30compute_smoothed_dual_solutionERKN8Solution4DualE", false]], "idol::dantzigwolfe::neame::strategy::initialize (c++ function)": [[32, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy10initializeEv", false]], "idol::dantzigwolfe::neame::strategy::strategy (c++ function)": [[32, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy8StrategyEd", false]], "idol::dantzigwolfe::neame::strategy::update_stability_center (c++ function)": [[32, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy23update_stability_centerERKN8Solution4DualE", false]], "idol::dantzigwolfe::wentges (c++ class)": [[33, "_CPPv4N4idol12DantzigWolfe7WentgesE", false]], "idol::dantzigwolfe::wentges::clone (c++ function)": [[33, "_CPPv4NK4idol12DantzigWolfe7Wentges5cloneEv", false]], "idol::dantzigwolfe::wentges::operator() (c++ function)": [[33, "_CPPv4NK4idol12DantzigWolfe7WentgesclEv", false]], "idol::dantzigwolfe::wentges::strategy (c++ class)": [[33, "_CPPv4N4idol12DantzigWolfe7Wentges8StrategyE", false]], "idol::dantzigwolfe::wentges::strategy::compute_smoothed_dual_solution (c++ function)": [[33, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy30compute_smoothed_dual_solutionERKN8Solution4DualE", false]], "idol::dantzigwolfe::wentges::strategy::initialize (c++ function)": [[33, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy10initializeEv", false]], "idol::dantzigwolfe::wentges::strategy::strategy (c++ function)": [[33, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy8StrategyEd", false]], "idol::dantzigwolfe::wentges::strategy::update_stability_center (c++ function)": [[33, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy23update_stability_centerERKN8Solution4DualE", false]], "idol::dantzigwolfe::wentges::wentges (c++ function)": [[33, "_CPPv4N4idol12DantzigWolfe7Wentges7WentgesEd", false]], "idol::dantzigwolfedecomposition (c++ class)": [[27, "_CPPv4N4idol25DantzigWolfeDecompositionE", false]], "idol::dantzigwolfedecomposition::as (c++ function)": [[27, "_CPPv4I0EN4idol25DantzigWolfeDecomposition2asER1Tv", false], [27, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2asERK1Tv", false]], "idol::dantzigwolfedecomposition::clone (c++ function)": [[27, "_CPPv4NK4idol25DantzigWolfeDecomposition5cloneEv", false]], "idol::dantzigwolfedecomposition::conditional (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", false], [27, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", false]], "idol::dantzigwolfedecomposition::dantzigwolfedecomposition (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE", false], [27, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE10AnnotationI3VarjE", false], [27, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK25DantzigWolfeDecomposition", false], [27, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionEv", false]], "idol::dantzigwolfedecomposition::get_sub_problem_spec (c++ function)": [[27, "_CPPv4NK4idol25DantzigWolfeDecomposition20get_sub_problem_specEj", false]], "idol::dantzigwolfedecomposition::is (c++ function)": [[27, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2isEbv", false]], "idol::dantzigwolfedecomposition::operator() (c++ function)": [[27, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", false]], "idol::dantzigwolfedecomposition::with_absolute_gap_tolerance (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", false]], "idol::dantzigwolfedecomposition::with_best_bound_stop (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", false]], "idol::dantzigwolfedecomposition::with_best_obj_stop (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", false]], "idol::dantzigwolfedecomposition::with_default_sub_problem_spec (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition29with_default_sub_problem_specEN12DantzigWolfe10SubProblemE", false]], "idol::dantzigwolfedecomposition::with_dual_price_smoothing_stabilization (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationERKN12DantzigWolfe31DualPriceSmoothingStabilizationE", false]], "idol::dantzigwolfedecomposition::with_hard_branching (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition19with_hard_branchingEb", false]], "idol::dantzigwolfedecomposition::with_infeasibility_strategy (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition27with_infeasibility_strategyERKN12DantzigWolfe28InfeasibilityStrategyFactoryE", false]], "idol::dantzigwolfedecomposition::with_infeasible_columns_removal (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition31with_infeasible_columns_removalEb", false]], "idol::dantzigwolfedecomposition::with_infeasible_or_unbounded_info (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", false]], "idol::dantzigwolfedecomposition::with_iteration_limit (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition20with_iteration_limitEj", false]], "idol::dantzigwolfedecomposition::with_logger (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition11with_loggerERKN4Logs12DantzigWolfe7FactoryE", false]], "idol::dantzigwolfedecomposition::with_logs (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition9with_logsEb", false]], "idol::dantzigwolfedecomposition::with_master_optimizer (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", false]], "idol::dantzigwolfedecomposition::with_max_parallel_sub_problems (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition30with_max_parallel_sub_problemsEj", false]], "idol::dantzigwolfedecomposition::with_presolve (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", false]], "idol::dantzigwolfedecomposition::with_relative_gap_tolerance (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", false]], "idol::dantzigwolfedecomposition::with_sub_problem_spec (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", false]], "idol::dantzigwolfedecomposition::with_thread_limit (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", false]], "idol::dantzigwolfedecomposition::with_time_limit (c++ function)": [[27, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", false]], "idol::depthfirst (c++ class)": [[13, "_CPPv4N4idol10DepthFirstE", false]], "idol::depthfirst::strategy (c++ class)": [[13, "_CPPv4I0EN4idol10DepthFirst8StrategyE", false]], "idol::depthfirst::strategy::clone (c++ function)": [[13, "_CPPv4NK4idol10DepthFirst8Strategy5cloneEv", false]], "idol::depthfirst::strategy::operator() (c++ function)": [[13, "_CPPv4NK4idol10DepthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::depthfirst::strategy::strategy (c++ function)": [[13, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", false]], "idol::env (c++ class)": [[39, "_CPPv4N4idol3EnvE", false]], "idol::env::env (c++ function)": [[39, "_CPPv4N4idol3Env3EnvEv", false]], "idol::env::operator[] (c++ function)": [[39, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", false]], "idol::equals (c++ function)": [[76, "_CPPv4N4idol6equalsEddd", false]], "idol::expr (c++ class)": [[40, "_CPPv4I00EN4idol4ExprE", false]], "idol::expr::clear (c++ function)": [[40, "_CPPv4N4idol4Expr5clearEv", false]], "idol::expr::constant (c++ function)": [[40, "_CPPv4N4idol4Expr8constantEv", false], [40, "_CPPv4NK4idol4Expr8constantEv", false]], "idol::expr::expr (c++ function)": [[40, "_CPPv4N4idol4Expr4ExprERK4Expr", false], [40, "_CPPv4N4idol4Expr4ExprERK4Key1", false], [40, "_CPPv4N4idol4Expr4ExprERK5Param", false], [40, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1E", false], [40, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", false], [40, "_CPPv4N4idol4Expr4ExprERK8Constant", false], [40, "_CPPv4N4idol4Expr4ExprERK8QuadExprI4Key1E", false], [40, "_CPPv4N4idol4Expr4ExprERR4Expr", false], [40, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1E", false], [40, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", false], [40, "_CPPv4N4idol4Expr4ExprERR8Constant", false], [40, "_CPPv4N4idol4Expr4ExprERR8QuadExprI4Key1E", false], [40, "_CPPv4N4idol4Expr4ExprEd", false], [40, "_CPPv4N4idol4Expr4ExprEv", false]], "idol::expr::fix (c++ function)": [[40, "_CPPv4NK4idol4Expr3fixERKN8Solution6PrimalE", false]], "idol::expr::gcd (c++ function)": [[40, "_CPPv4NK4idol4Expr3gcdEv", false]], "idol::expr::is_zero (c++ function)": [[40, "_CPPv4NK4idol4Expr7is_zeroEv", false]], "idol::expr::linear (c++ function)": [[40, "_CPPv4N4idol4Expr6linearEv", false], [40, "_CPPv4NK4idol4Expr6linearEv", false]], "idol::expr::multiply_with_precision (c++ function)": [[40, "_CPPv4N4idol4Expr23multiply_with_precisionEdj", false]], "idol::expr::multiply_with_precision_by_power_of_10 (c++ function)": [[40, "_CPPv4N4idol4Expr38multiply_with_precision_by_power_of_10Ejj", false]], "idol::expr::operator*= (c++ function)": [[40, "_CPPv4N4idol4ExprmLEd", false]], "idol::expr::operator+= (c++ function)": [[40, "_CPPv4N4idol4ExprpLERK4ExprIN4idol3VarEN4idol3VarEE", false]], "idol::expr::operator-= (c++ function)": [[40, "_CPPv4N4idol4ExprmIERK4ExprIN4idol3VarEN4idol3VarEE", false]], "idol::expr::operator/= (c++ function)": [[40, "_CPPv4N4idol4ExprdVEd", false]], "idol::expr::operator= (c++ function)": [[40, "_CPPv4N4idol4ExpraSERK4Expr", false], [40, "_CPPv4N4idol4ExpraSERR4Expr", false]], "idol::expr::quadratic (c++ function)": [[40, "_CPPv4N4idol4Expr9quadraticEv", false], [40, "_CPPv4NK4idol4Expr9quadraticEv", false]], "idol::expr::round (c++ function)": [[40, "_CPPv4N4idol4Expr5roundEv", false]], "idol::expr::scale_to_integers (c++ function)": [[40, "_CPPv4N4idol4Expr17scale_to_integersEj", false]], "idol::firstinfeasiblefound (c++ class)": [[16, "_CPPv4N4idol20FirstInfeasibleFoundE", false]], "idol::firstinfeasiblefound::firstinfeasiblefound (c++ function)": [[16, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", false], [16, "_CPPv4N4idol20FirstInfeasibleFound20FirstInfeasibleFoundEv", false]], "idol::firstinfeasiblefound::strategy (c++ class)": [[16, "_CPPv4I0EN4idol20FirstInfeasibleFound8StrategyE", false]], "idol::firstinfeasiblefound::strategy::clone (c++ function)": [[16, "_CPPv4NK4idol20FirstInfeasibleFound8Strategy5cloneEv", false]], "idol::firstinfeasiblefound::strategy::operator() (c++ function)": [[16, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [16, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::firstinfeasiblefound::strategy::strategy (c++ function)": [[16, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyERK20FirstInfeasibleFound", false], [16, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyEv", false]], "idol::glpk (c++ class)": [[55, "_CPPv4N4idol4GLPKE", false]], "idol::glpk::as (c++ function)": [[55, "_CPPv4I0EN4idol4GLPK2asER1Tv", false], [55, "_CPPv4I0ENK4idol4GLPK2asERK1Tv", false]], "idol::glpk::clone (c++ function)": [[55, "_CPPv4NK4idol4GLPK5cloneEv", false]], "idol::glpk::conditional (c++ function)": [[55, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", false], [55, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", false]], "idol::glpk::continuousrelaxation (c++ function)": [[55, "_CPPv4N4idol4GLPK20ContinuousRelaxationEv", false]], "idol::glpk::glpk (c++ function)": [[55, "_CPPv4N4idol4GLPK4GLPKERK4GLPK", false], [55, "_CPPv4N4idol4GLPK4GLPKERR4GLPK", false], [55, "_CPPv4N4idol4GLPK4GLPKEv", false]], "idol::glpk::is (c++ function)": [[55, "_CPPv4I0ENK4idol4GLPK2isEbv", false]], "idol::glpk::operator() (c++ function)": [[55, "_CPPv4NK4idol4GLPKclERK5Model", false]], "idol::glpk::operator= (c++ function)": [[55, "_CPPv4N4idol4GLPKaSERK4GLPK", false], [55, "_CPPv4N4idol4GLPKaSERR4GLPK", false]], "idol::glpk::read_from_file (c++ function)": [[55, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", false]], "idol::glpk::with_absolute_gap_tolerance (c++ function)": [[55, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", false]], "idol::glpk::with_best_bound_stop (c++ function)": [[55, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", false]], "idol::glpk::with_best_obj_stop (c++ function)": [[55, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", false]], "idol::glpk::with_infeasible_or_unbounded_info (c++ function)": [[55, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", false]], "idol::glpk::with_iteration_limit (c++ function)": [[55, "_CPPv4N4idol4GLPK20with_iteration_limitEj", false]], "idol::glpk::with_logs (c++ function)": [[55, "_CPPv4N4idol4GLPK9with_logsEb", false]], "idol::glpk::with_presolve (c++ function)": [[55, "_CPPv4N4idol4GLPK13with_presolveEb", false]], "idol::glpk::with_relative_gap_tolerance (c++ function)": [[55, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", false]], "idol::glpk::with_thread_limit (c++ function)": [[55, "_CPPv4N4idol4GLPK17with_thread_limitEj", false]], "idol::glpk::with_time_limit (c++ function)": [[55, "_CPPv4N4idol4GLPK15with_time_limitEd", false]], "idol::gurobi (c++ class)": [[56, "_CPPv4N4idol6GurobiE", false]], "idol::gurobi::add_callback (c++ function)": [[56, "_CPPv4N4idol6Gurobi12add_callbackERK15CallbackFactory", false]], "idol::gurobi::as (c++ function)": [[56, "_CPPv4I0EN4idol6Gurobi2asER1Tv", false], [56, "_CPPv4I0ENK4idol6Gurobi2asERK1Tv", false]], "idol::gurobi::clone (c++ function)": [[56, "_CPPv4NK4idol6Gurobi5cloneEv", false]], "idol::gurobi::conditional (c++ function)": [[56, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", false], [56, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", false]], "idol::gurobi::continuousrelaxation (c++ function)": [[56, "_CPPv4N4idol6Gurobi20ContinuousRelaxationEv", false]], "idol::gurobi::gurobi (c++ function)": [[56, "_CPPv4N4idol6Gurobi6GurobiERK6Gurobi", false], [56, "_CPPv4N4idol6Gurobi6GurobiERR6Gurobi", false], [56, "_CPPv4N4idol6Gurobi6GurobiEv", false]], "idol::gurobi::is (c++ function)": [[56, "_CPPv4I0ENK4idol6Gurobi2isEbv", false]], "idol::gurobi::operator() (c++ function)": [[56, "_CPPv4NK4idol6GurobiclERK5Model", false]], "idol::gurobi::operator= (c++ function)": [[56, "_CPPv4N4idol6GurobiaSERK6Gurobi", false], [56, "_CPPv4N4idol6GurobiaSERR6Gurobi", false]], "idol::gurobi::read_from_file (c++ function)": [[56, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", false]], "idol::gurobi::with_absolute_gap_tolerance (c++ function)": [[56, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", false]], "idol::gurobi::with_best_bound_stop (c++ function)": [[56, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", false]], "idol::gurobi::with_best_obj_stop (c++ function)": [[56, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", false]], "idol::gurobi::with_continuous_relaxation_only (c++ function)": [[56, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", false]], "idol::gurobi::with_external_param (c++ function)": [[56, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", false], [56, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", false]], "idol::gurobi::with_infeasible_or_unbounded_info (c++ function)": [[56, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", false]], "idol::gurobi::with_iteration_limit (c++ function)": [[56, "_CPPv4N4idol6Gurobi20with_iteration_limitEj", false]], "idol::gurobi::with_lazy_cut (c++ function)": [[56, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", false]], "idol::gurobi::with_logs (c++ function)": [[56, "_CPPv4N4idol6Gurobi9with_logsEb", false]], "idol::gurobi::with_max_n_solution_in_pool (c++ function)": [[56, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", false]], "idol::gurobi::with_presolve (c++ function)": [[56, "_CPPv4N4idol6Gurobi13with_presolveEb", false]], "idol::gurobi::with_relative_gap_tolerance (c++ function)": [[56, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", false]], "idol::gurobi::with_thread_limit (c++ function)": [[56, "_CPPv4N4idol6Gurobi17with_thread_limitEj", false]], "idol::gurobi::with_time_limit (c++ function)": [[56, "_CPPv4N4idol6Gurobi15with_time_limitEd", false]], "idol::heuristics::integermaster (c++ class)": [[29, "_CPPv4I0EN4idol10Heuristics13IntegerMasterE", false]], "idol::heuristics::integermaster::clone (c++ function)": [[29, "_CPPv4NK4idol10Heuristics13IntegerMaster5cloneEv", false]], "idol::heuristics::integermaster::integermaster (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterERR13IntegerMaster", false], [29, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterEv", false]], "idol::heuristics::integermaster::operator() (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMasterclEv", false]], "idol::heuristics::integermaster::operator= (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMasteraSERK13IntegerMaster", false], [29, "_CPPv4N4idol10Heuristics13IntegerMasteraSERR13IntegerMaster", false]], "idol::heuristics::integermaster::strategy (c++ class)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8StrategyE", false]], "idol::heuristics::integermaster::strategy::set_frequency (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_frequencyEj", false]], "idol::heuristics::integermaster::strategy::set_integer_columns (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_integer_columnsEb", false]], "idol::heuristics::integermaster::strategy::set_iteration_limit (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_iteration_limitEj", false]], "idol::heuristics::integermaster::strategy::set_max_depth (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_max_depthEj", false]], "idol::heuristics::integermaster::strategy::set_time_limit (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy14set_time_limitEd", false]], "idol::heuristics::integermaster::strategy::strategy (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy8StrategyERK16OptimizerFactory", false]], "idol::heuristics::integermaster::strategy::with_integer_columns (c++ function)": [[29, "_CPPv4NK4idol10Heuristics13IntegerMaster8Strategy20with_integer_columnsEv", false]], "idol::heuristics::integermaster::with_frequency (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster14with_frequencyEj", false]], "idol::heuristics::integermaster::with_integer_columns (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster20with_integer_columnsEb", false]], "idol::heuristics::integermaster::with_iteration_limit (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster20with_iteration_limitEj", false]], "idol::heuristics::integermaster::with_max_depth (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster14with_max_depthEj", false]], "idol::heuristics::integermaster::with_optimizer (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster14with_optimizerERK16OptimizerFactory", false]], "idol::heuristics::integermaster::with_time_limit (c++ function)": [[29, "_CPPv4N4idol10Heuristics13IntegerMaster15with_time_limitEd", false]], "idol::heuristics::localbranching (c++ class)": [[5, "_CPPv4N4idol10Heuristics14LocalBranchingE", false]], "idol::heuristics::localbranching::clone (c++ function)": [[5, "_CPPv4NK4idol10Heuristics14LocalBranching5cloneEv", false]], "idol::heuristics::localbranching::localbranching (c++ function)": [[5, "_CPPv4N4idol10Heuristics14LocalBranching14LocalBranchingEv", false]], "idol::heuristics::localbranching::operator() (c++ function)": [[5, "_CPPv4N4idol10Heuristics14LocalBranchingclEv", false]], "idol::heuristics::localbranching::strategy (c++ class)": [[5, "_CPPv4N4idol10Heuristics14LocalBranching8StrategyE", false]], "idol::heuristics::localbranching::strategy::strategy (c++ function)": [[5, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", false]], "idol::heuristics::localbranching::with_optimizer (c++ function)": [[5, "_CPPv4N4idol10Heuristics14LocalBranching14with_optimizerERK16OptimizerFactory", false]], "idol::heuristics::rens (c++ class)": [[6, "_CPPv4N4idol10Heuristics4RENSE", false]], "idol::heuristics::rens::clone (c++ function)": [[6, "_CPPv4NK4idol10Heuristics4RENS5cloneEv", false]], "idol::heuristics::rens::operator() (c++ function)": [[6, "_CPPv4N4idol10Heuristics4RENSclEv", false]], "idol::heuristics::rens::rens (c++ function)": [[6, "_CPPv4N4idol10Heuristics4RENS4RENSEv", false]], "idol::heuristics::rens::strategy (c++ class)": [[6, "_CPPv4N4idol10Heuristics4RENS8StrategyE", false]], "idol::heuristics::rens::strategy::strategy (c++ function)": [[6, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", false]], "idol::heuristics::rens::with_optimizer (c++ function)": [[6, "_CPPv4N4idol10Heuristics4RENS14with_optimizerERK16OptimizerFactory", false]], "idol::heuristics::simplerounding (c++ class)": [[7, "_CPPv4N4idol10Heuristics14SimpleRoundingE", false]], "idol::heuristics::simplerounding::clone (c++ function)": [[7, "_CPPv4NK4idol10Heuristics14SimpleRounding5cloneEv", false]], "idol::heuristics::simplerounding::operator() (c++ function)": [[7, "_CPPv4N4idol10Heuristics14SimpleRoundingclEv", false]], "idol::heuristics::simplerounding::simplerounding (c++ function)": [[7, "_CPPv4N4idol10Heuristics14SimpleRounding14SimpleRoundingEv", false]], "idol::heuristics::simplerounding::strategy (c++ class)": [[7, "_CPPv4N4idol10Heuristics14SimpleRounding8StrategyE", false]], "idol::highs (c++ class)": [[57, "_CPPv4N4idol5HiGHSE", false]], "idol::highs::as (c++ function)": [[57, "_CPPv4I0EN4idol5HiGHS2asER1Tv", false], [57, "_CPPv4I0ENK4idol5HiGHS2asERK1Tv", false]], "idol::highs::clone (c++ function)": [[57, "_CPPv4NK4idol5HiGHS5cloneEv", false]], "idol::highs::conditional (c++ function)": [[57, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", false], [57, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", false]], "idol::highs::continuousrelaxation (c++ function)": [[57, "_CPPv4N4idol5HiGHS20ContinuousRelaxationEv", false]], "idol::highs::highs (c++ function)": [[57, "_CPPv4N4idol5HiGHS5HiGHSERK5HiGHS", false], [57, "_CPPv4N4idol5HiGHS5HiGHSERR5HiGHS", false], [57, "_CPPv4N4idol5HiGHS5HiGHSEv", false]], "idol::highs::is (c++ function)": [[57, "_CPPv4I0ENK4idol5HiGHS2isEbv", false]], "idol::highs::operator() (c++ function)": [[57, "_CPPv4NK4idol5HiGHSclERK5Model", false]], "idol::highs::operator= (c++ function)": [[57, "_CPPv4N4idol5HiGHSaSERK5HiGHS", false], [57, "_CPPv4N4idol5HiGHSaSERR5HiGHS", false]], "idol::highs::with_absolute_gap_tolerance (c++ function)": [[57, "_CPPv4N4idol5HiGHS27with_absolute_gap_toleranceEd", false]], "idol::highs::with_best_bound_stop (c++ function)": [[57, "_CPPv4N4idol5HiGHS20with_best_bound_stopEd", false]], "idol::highs::with_best_obj_stop (c++ function)": [[57, "_CPPv4N4idol5HiGHS18with_best_obj_stopEd", false]], "idol::highs::with_continuous_relaxation_only (c++ function)": [[57, "_CPPv4N4idol5HiGHS31with_continuous_relaxation_onlyEb", false]], "idol::highs::with_infeasible_or_unbounded_info (c++ function)": [[57, "_CPPv4N4idol5HiGHS33with_infeasible_or_unbounded_infoEb", false]], "idol::highs::with_iteration_limit (c++ function)": [[57, "_CPPv4N4idol5HiGHS20with_iteration_limitEj", false]], "idol::highs::with_logs (c++ function)": [[57, "_CPPv4N4idol5HiGHS9with_logsEb", false]], "idol::highs::with_presolve (c++ function)": [[57, "_CPPv4N4idol5HiGHS13with_presolveEb", false]], "idol::highs::with_relative_gap_tolerance (c++ function)": [[57, "_CPPv4N4idol5HiGHS27with_relative_gap_toleranceEd", false]], "idol::highs::with_thread_limit (c++ function)": [[57, "_CPPv4N4idol5HiGHS17with_thread_limitEj", false]], "idol::highs::with_time_limit (c++ function)": [[57, "_CPPv4N4idol5HiGHS15with_time_limitEd", false]], "idol::inf (c++ member)": [[76, "_CPPv4N4idol3InfE", false]], "idol::is_inf (c++ function)": [[76, "_CPPv4N4idol6is_infEd", false]], "idol::is_integer (c++ function)": [[76, "_CPPv4N4idol10is_integerEdd", false]], "idol::is_neg_inf (c++ function)": [[76, "_CPPv4N4idol10is_neg_infEd", false]], "idol::is_pos_inf (c++ function)": [[76, "_CPPv4N4idol10is_pos_infEd", false]], "idol::lazycutcallback (c++ class)": [[72, "_CPPv4N4idol15LazyCutCallbackE", false]], "idol::lazycutcallback::clone (c++ function)": [[72, "_CPPv4NK4idol15LazyCutCallback5cloneEv", false]], "idol::lazycutcallback::lazycutcallback (c++ function)": [[72, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", false]], "idol::lazycutcallback::operator() (c++ function)": [[72, "_CPPv4N4idol15LazyCutCallbackclEv", false]], "idol::lazycutcallback::strategy (c++ class)": [[72, "_CPPv4N4idol15LazyCutCallback8StrategyE", false]], "idol::lazycutcallback::strategy::strategy (c++ function)": [[72, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", false]], "idol::lazycutcallback::with_separation_optimizer (c++ function)": [[72, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", false]], "idol::leastinfeasible (c++ class)": [[17, "_CPPv4N4idol15LeastInfeasibleE", false]], "idol::leastinfeasible::leastinfeasible (c++ function)": [[17, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", false], [17, "_CPPv4N4idol15LeastInfeasible15LeastInfeasibleEv", false]], "idol::leastinfeasible::strategy (c++ class)": [[17, "_CPPv4I0EN4idol15LeastInfeasible8StrategyE", false]], "idol::leastinfeasible::strategy::clone (c++ function)": [[17, "_CPPv4NK4idol15LeastInfeasible8Strategy5cloneEv", false]], "idol::leastinfeasible::strategy::operator() (c++ function)": [[17, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [17, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::leastinfeasible::strategy::strategy (c++ function)": [[17, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyERK15LeastInfeasible", false], [17, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyEv", false]], "idol::linexpr (c++ class)": [[41, "_CPPv4I0EN4idol7LinExprE", false]], "idol::linexpr::begin (c++ function)": [[41, "_CPPv4NK4idol7LinExpr5beginEv", false]], "idol::linexpr::clear (c++ function)": [[41, "_CPPv4N4idol7LinExpr5clearEv", false]], "idol::linexpr::empty (c++ function)": [[41, "_CPPv4NK4idol7LinExpr5emptyEv", false]], "idol::linexpr::end (c++ function)": [[41, "_CPPv4NK4idol7LinExpr3endEv", false]], "idol::linexpr::fix (c++ function)": [[41, "_CPPv4NK4idol7LinExpr3fixERKN8Solution6PrimalE", false]], "idol::linexpr::gcd (c++ function)": [[41, "_CPPv4NK4idol7LinExpr3gcdEv", false]], "idol::linexpr::get (c++ function)": [[41, "_CPPv4NK4idol7LinExpr3getERK3Key", false]], "idol::linexpr::linexpr (c++ function)": [[41, "_CPPv4N4idol7LinExpr7LinExprERK3Key", false], [41, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", false], [41, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", false], [41, "_CPPv4N4idol7LinExpr7LinExprEv", false]], "idol::linexpr::multiply_with_precision (c++ function)": [[41, "_CPPv4N4idol7LinExpr23multiply_with_precisionEdj", false]], "idol::linexpr::multiply_with_precision_by_power_of_10 (c++ function)": [[41, "_CPPv4N4idol7LinExpr38multiply_with_precision_by_power_of_10Ejj", false]], "idol::linexpr::operator*= (c++ function)": [[41, "_CPPv4N4idol7LinExprmLEd", false]], "idol::linexpr::operator+= (c++ function)": [[41, "_CPPv4N4idol7LinExprpLERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", false]], "idol::linexpr::operator-= (c++ function)": [[41, "_CPPv4N4idol7LinExprmIERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", false]], "idol::linexpr::operator/= (c++ function)": [[41, "_CPPv4N4idol7LinExprdVEd", false]], "idol::linexpr::remove (c++ function)": [[41, "_CPPv4N4idol7LinExpr6removeERK3Key", false]], "idol::linexpr::round (c++ function)": [[41, "_CPPv4N4idol7LinExpr5roundEv", false]], "idol::linexpr::set (c++ function)": [[41, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", false], [41, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", false]], "idol::linexpr::size (c++ function)": [[41, "_CPPv4NK4idol7LinExpr4sizeEv", false]], "idol::model (c++ class)": [[42, "_CPPv4N4idol5ModelE", false]], "idol::model::add (c++ function)": [[42, "_CPPv4N4idol5Model3addERK3Ctr", false], [42, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", false], [42, "_CPPv4N4idol5Model3addERK3Var", false], [42, "_CPPv4N4idol5Model3addERK3Var7TempVar", false]], "idol::model::add_ctr (c++ function)": [[42, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", false], [42, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", false]], "idol::model::add_ctrs (c++ function)": [[42, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", false], [42, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", false]], "idol::model::add_var (c++ function)": [[42, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", false], [42, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", false]], "idol::model::add_vars (c++ function)": [[42, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", false], [42, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", false]], "idol::model::add_vector (c++ function)": [[42, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", false]], "idol::model::clone (c++ function)": [[42, "_CPPv4NK4idol5Model5cloneEv", false]], "idol::model::copy (c++ function)": [[42, "_CPPv4NK4idol5Model4copyEv", false]], "idol::model::ctrs (c++ function)": [[42, "_CPPv4NK4idol5Model4ctrsEv", false]], "idol::model::env (c++ function)": [[42, "_CPPv4NK4idol5Model3envEv", false]], "idol::model::fix (c++ function)": [[42, "_CPPv4NK4idol5Model3fixERKN8Solution6PrimalE", false]], "idol::model::get_best_bound (c++ function)": [[42, "_CPPv4NK4idol5Model14get_best_boundEv", false]], "idol::model::get_best_obj (c++ function)": [[42, "_CPPv4NK4idol5Model12get_best_objEv", false]], "idol::model::get_ctr_by_index (c++ function)": [[42, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", false]], "idol::model::get_ctr_dual (c++ function)": [[42, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", false]], "idol::model::get_ctr_farkas (c++ function)": [[42, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", false]], "idol::model::get_ctr_index (c++ function)": [[42, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", false]], "idol::model::get_ctr_row (c++ function)": [[42, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", false]], "idol::model::get_ctr_type (c++ function)": [[42, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", false]], "idol::model::get_mat_coeff (c++ function)": [[42, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", false]], "idol::model::get_n_solutions (c++ function)": [[42, "_CPPv4NK4idol5Model15get_n_solutionsEv", false]], "idol::model::get_obj_expr (c++ function)": [[42, "_CPPv4NK4idol5Model12get_obj_exprEv", false]], "idol::model::get_obj_sense (c++ function)": [[42, "_CPPv4NK4idol5Model13get_obj_senseEv", false]], "idol::model::get_reason (c++ function)": [[42, "_CPPv4NK4idol5Model10get_reasonEv", false]], "idol::model::get_rhs_expr (c++ function)": [[42, "_CPPv4NK4idol5Model12get_rhs_exprEv", false]], "idol::model::get_solution_index (c++ function)": [[42, "_CPPv4NK4idol5Model18get_solution_indexEv", false]], "idol::model::get_status (c++ function)": [[42, "_CPPv4NK4idol5Model10get_statusEv", false]], "idol::model::get_var_by_index (c++ function)": [[42, "_CPPv4NK4idol5Model16get_var_by_indexEj", false]], "idol::model::get_var_column (c++ function)": [[42, "_CPPv4NK4idol5Model14get_var_columnERK3Var", false]], "idol::model::get_var_index (c++ function)": [[42, "_CPPv4NK4idol5Model13get_var_indexERK3Var", false]], "idol::model::get_var_lb (c++ function)": [[42, "_CPPv4NK4idol5Model10get_var_lbERK3Var", false]], "idol::model::get_var_primal (c++ function)": [[42, "_CPPv4NK4idol5Model14get_var_primalERK3Var", false]], "idol::model::get_var_ray (c++ function)": [[42, "_CPPv4NK4idol5Model11get_var_rayERK3Var", false]], "idol::model::get_var_reduced_cost (c++ function)": [[42, "_CPPv4NK4idol5Model20get_var_reduced_costERK3Var", false]], "idol::model::get_var_type (c++ function)": [[42, "_CPPv4NK4idol5Model12get_var_typeERK3Var", false]], "idol::model::get_var_ub (c++ function)": [[42, "_CPPv4NK4idol5Model10get_var_ubERK3Var", false]], "idol::model::has (c++ function)": [[42, "_CPPv4NK4idol5Model3hasERK3Ctr", false], [42, "_CPPv4NK4idol5Model3hasERK3Var", false]], "idol::model::has_optimizer (c++ function)": [[42, "_CPPv4NK4idol5Model13has_optimizerEv", false]], "idol::model::has_optimizer_factory (c++ function)": [[42, "_CPPv4NK4idol5Model21has_optimizer_factoryEv", false]], "idol::model::id (c++ function)": [[42, "_CPPv4NK4idol5Model2idEv", false]], "idol::model::model (c++ function)": [[42, "_CPPv4N4idol5Model5ModelER3Env", false], [42, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", false], [42, "_CPPv4N4idol5Model5ModelERR5Model", false]], "idol::model::operator= (c++ function)": [[42, "_CPPv4N4idol5ModelaSERK5Model", false], [42, "_CPPv4N4idol5ModelaSERR5Model", false]], "idol::model::optimize (c++ function)": [[42, "_CPPv4N4idol5Model8optimizeEv", false]], "idol::model::optimizer (c++ function)": [[42, "_CPPv4N4idol5Model9optimizerEv", false], [42, "_CPPv4NK4idol5Model9optimizerEv", false]], "idol::model::optimizer_factory (c++ function)": [[42, "_CPPv4NK4idol5Model17optimizer_factoryEv", false]], "idol::model::remove (c++ function)": [[42, "_CPPv4N4idol5Model6removeERK3Ctr", false], [42, "_CPPv4N4idol5Model6removeERK3Var", false]], "idol::model::reserve_ctrs (c++ function)": [[42, "_CPPv4N4idol5Model12reserve_ctrsEj", false]], "idol::model::reserve_vars (c++ function)": [[42, "_CPPv4N4idol5Model12reserve_varsEj", false]], "idol::model::scale_to_integers (c++ function)": [[42, "_CPPv4N4idol5Model17scale_to_integersEj", false]], "idol::model::set_ctr_rhs (c++ function)": [[42, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", false], [42, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", false]], "idol::model::set_ctr_row (c++ function)": [[42, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", false], [42, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", false]], "idol::model::set_ctr_type (c++ function)": [[42, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", false]], "idol::model::set_mat_coeff (c++ function)": [[42, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", false], [42, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", false]], "idol::model::set_obj_const (c++ function)": [[42, "_CPPv4N4idol5Model13set_obj_constERK8Constant", false], [42, "_CPPv4N4idol5Model13set_obj_constERR8Constant", false]], "idol::model::set_obj_expr (c++ function)": [[42, "_CPPv4N4idol5Model12set_obj_exprERK4ExprI3Var3VarE", false], [42, "_CPPv4N4idol5Model12set_obj_exprERR4ExprI3Var3VarE", false]], "idol::model::set_obj_sense (c++ function)": [[42, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", false]], "idol::model::set_rhs_expr (c++ function)": [[42, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", false], [42, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", false]], "idol::model::set_solution_index (c++ function)": [[42, "_CPPv4N4idol5Model18set_solution_indexEj", false]], "idol::model::set_var_column (c++ function)": [[42, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", false], [42, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", false]], "idol::model::set_var_lb (c++ function)": [[42, "_CPPv4N4idol5Model10set_var_lbERK3Vard", false]], "idol::model::set_var_obj (c++ function)": [[42, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", false], [42, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", false]], "idol::model::set_var_type (c++ function)": [[42, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", false]], "idol::model::set_var_ub (c++ function)": [[42, "_CPPv4N4idol5Model10set_var_ubERK3Vard", false]], "idol::model::unuse (c++ function)": [[42, "_CPPv4N4idol5Model5unuseEv", false]], "idol::model::update (c++ function)": [[42, "_CPPv4N4idol5Model6updateEv", false]], "idol::model::use (c++ function)": [[42, "_CPPv4N4idol5Model3useERK16OptimizerFactory", false]], "idol::model::vars (c++ function)": [[42, "_CPPv4NK4idol5Model4varsEv", false]], "idol::model::write (c++ function)": [[42, "_CPPv4N4idol5Model5writeERKNSt6stringE", false]], "idol::model::~model (c++ function)": [[42, "_CPPv4N4idol5ModelD0Ev", false]], "idol::mosek (c++ class)": [[58, "_CPPv4N4idol5MosekE", false]], "idol::mosek::add_callback (c++ function)": [[58, "_CPPv4N4idol5Mosek12add_callbackERK15CallbackFactory", false]], "idol::mosek::as (c++ function)": [[58, "_CPPv4I0EN4idol5Mosek2asER1Tv", false], [58, "_CPPv4I0ENK4idol5Mosek2asERK1Tv", false]], "idol::mosek::clone (c++ function)": [[58, "_CPPv4NK4idol5Mosek5cloneEv", false]], "idol::mosek::conditional (c++ function)": [[58, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", false], [58, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", false]], "idol::mosek::continuousrelaxation (c++ function)": [[58, "_CPPv4N4idol5Mosek20ContinuousRelaxationEv", false]], "idol::mosek::is (c++ function)": [[58, "_CPPv4I0ENK4idol5Mosek2isEbv", false]], "idol::mosek::mosek (c++ function)": [[58, "_CPPv4N4idol5Mosek5MosekERK5Mosek", false], [58, "_CPPv4N4idol5Mosek5MosekERR5Mosek", false], [58, "_CPPv4N4idol5Mosek5MosekEv", false]], "idol::mosek::operator() (c++ function)": [[58, "_CPPv4NK4idol5MosekclERK5Model", false]], "idol::mosek::operator= (c++ function)": [[58, "_CPPv4N4idol5MosekaSERK5Mosek", false], [58, "_CPPv4N4idol5MosekaSERR5Mosek", false]], "idol::mosek::with_absolute_gap_tolerance (c++ function)": [[58, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", false]], "idol::mosek::with_best_bound_stop (c++ function)": [[58, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", false]], "idol::mosek::with_best_obj_stop (c++ function)": [[58, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", false]], "idol::mosek::with_continuous_relaxation_only (c++ function)": [[58, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", false]], "idol::mosek::with_external_parameter (c++ function)": [[58, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", false], [58, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", false], [58, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", false]], "idol::mosek::with_infeasible_or_unbounded_info (c++ function)": [[58, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", false]], "idol::mosek::with_iteration_limit (c++ function)": [[58, "_CPPv4N4idol5Mosek20with_iteration_limitEj", false]], "idol::mosek::with_logs (c++ function)": [[58, "_CPPv4N4idol5Mosek9with_logsEb", false]], "idol::mosek::with_presolve (c++ function)": [[58, "_CPPv4N4idol5Mosek13with_presolveEb", false]], "idol::mosek::with_relative_gap_tolerance (c++ function)": [[58, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", false]], "idol::mosek::with_thread_limit (c++ function)": [[58, "_CPPv4N4idol5Mosek17with_thread_limitEj", false]], "idol::mosek::with_time_limit (c++ function)": [[58, "_CPPv4N4idol5Mosek15with_time_limitEd", false]], "idol::mostinfeasible (c++ class)": [[18, "_CPPv4N4idol14MostInfeasibleE", false]], "idol::mostinfeasible::mostinfeasible (c++ function)": [[18, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", false], [18, "_CPPv4N4idol14MostInfeasible14MostInfeasibleEv", false]], "idol::mostinfeasible::strategy (c++ class)": [[18, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", false]], "idol::mostinfeasible::strategy::clone (c++ function)": [[18, "_CPPv4NK4idol14MostInfeasible8Strategy5cloneEv", false]], "idol::mostinfeasible::strategy::operator() (c++ function)": [[18, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [18, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::mostinfeasible::strategy::strategy (c++ function)": [[18, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", false], [18, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyEv", false]], "idol::multiply_with_precision (c++ function)": [[76, "_CPPv4N4idol23multiply_with_precisionEddj", false]], "idol::multiply_with_precision_by_power_of_10 (c++ function)": [[76, "_CPPv4N4idol38multiply_with_precision_by_power_of_10Edjj", false]], "idol::optimizers::dantzigwolfedecomposition (c++ class)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecompositionE", false]], "idol::optimizers::dantzigwolfedecomposition::as (c++ function)": [[30, "_CPPv4I0EN4idol10Optimizers25DantzigWolfeDecomposition2asER1Tv", false], [30, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2asERK1Tv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration (c++ class)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGenerationE", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::best_bound (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration10best_boundEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::best_obj (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration8best_objEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::columngeneration (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::execute (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration7executeEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::parent (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", false], [30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::primal_solution (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration15primal_solutionEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::reason (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6reasonEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::set_best_bound_stop (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration19set_best_bound_stopEd", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::status (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6statusEv", false]], "idol::optimizers::dantzigwolfedecomposition::dantzigwolfedecomposition (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", false]], "idol::optimizers::dantzigwolfedecomposition::formulation (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", false], [30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_absolute_gap (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_absolute_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_best_bound (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_best_boundEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_best_obj (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition12get_best_objEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_best_bound_stop (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_best_bound_stopEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_best_obj_stop (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition23get_param_best_obj_stopEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_infeasible_or_unbounded_info (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_iteration_limit (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_iteration_limitEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_logs (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_param_logsEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_presolve (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_param_presolveEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_thread_limit (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition22get_param_thread_limitEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_time_limit (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition20get_param_time_limitEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_reason (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_reasonEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_relative_gap (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_relative_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_remaining_time (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_remaining_timeEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_status (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_statusEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_feasibility (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition19get_tol_feasibilityEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_integer (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition15get_tol_integerEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_mip_absolute_gap (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_mip_relative_gap (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_relative_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_optimality (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_tol_optimalityEv", false]], "idol::optimizers::dantzigwolfedecomposition::is (c++ function)": [[30, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2isEbv", false]], "idol::optimizers::dantzigwolfedecomposition::is_terminated (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition13is_terminatedEv", false]], "idol::optimizers::dantzigwolfedecomposition::name (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4nameEv", false]], "idol::optimizers::dantzigwolfedecomposition::parent (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition6parentEv", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_best_bound_stop (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_best_bound_stopEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_best_obj_stop (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition23set_param_best_obj_stopEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_infeasible_or_unbounded_info (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_iteration_limit (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_iteration_limitEj", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_logs (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition14set_param_logsEb", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_presolve (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_param_presolveEb", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_threads (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition17set_param_threadsEj", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_time_limit (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition20set_param_time_limitEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_feasibility (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition19set_tol_feasibilityEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_integer (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition15set_tol_integerEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_mip_absolute_gap (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_mip_relative_gap (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_relative_gapEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_optimality (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_tol_optimalityEd", false]], "idol::optimizers::dantzigwolfedecomposition::terminate (c++ function)": [[30, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition9terminateEv", false]], "idol::optimizers::dantzigwolfedecomposition::time (c++ function)": [[30, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4timeEv", false]], "idol::optimizers::glpk (c++ class)": [[59, "_CPPv4N4idol10Optimizers4GLPKE", false]], "idol::optimizers::glpk::as (c++ function)": [[59, "_CPPv4I0EN4idol10Optimizers4GLPK2asER1Tv", false], [59, "_CPPv4I0ENK4idol10Optimizers4GLPK2asERK1Tv", false]], "idol::optimizers::glpk::get_param_best_bound_stop (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK25get_param_best_bound_stopEv", false]], "idol::optimizers::glpk::get_param_best_obj_stop (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK23get_param_best_obj_stopEv", false]], "idol::optimizers::glpk::get_param_infeasible_or_unbounded_info (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::glpk::get_param_iteration_limit (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK25get_param_iteration_limitEv", false]], "idol::optimizers::glpk::get_param_logs (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK14get_param_logsEv", false]], "idol::optimizers::glpk::get_param_presolve (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK18get_param_presolveEv", false]], "idol::optimizers::glpk::get_param_thread_limit (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK22get_param_thread_limitEv", false]], "idol::optimizers::glpk::get_param_time_limit (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK20get_param_time_limitEv", false]], "idol::optimizers::glpk::get_remaining_time (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK18get_remaining_timeEv", false]], "idol::optimizers::glpk::get_tol_feasibility (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK19get_tol_feasibilityEv", false]], "idol::optimizers::glpk::get_tol_integer (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK15get_tol_integerEv", false]], "idol::optimizers::glpk::get_tol_mip_absolute_gap (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::glpk::get_tol_mip_relative_gap (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_relative_gapEv", false]], "idol::optimizers::glpk::get_tol_optimality (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK18get_tol_optimalityEv", false]], "idol::optimizers::glpk::glpk (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", false]], "idol::optimizers::glpk::is (c++ function)": [[59, "_CPPv4I0ENK4idol10Optimizers4GLPK2isEbv", false]], "idol::optimizers::glpk::is_terminated (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK13is_terminatedEv", false]], "idol::optimizers::glpk::name (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK4nameEv", false]], "idol::optimizers::glpk::operator[] (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPKixERK3Ctr", false], [59, "_CPPv4N4idol10Optimizers4GLPKixERK3Var", false], [59, "_CPPv4NK4idol10Optimizers4GLPKixERK3Ctr", false], [59, "_CPPv4NK4idol10Optimizers4GLPKixERK3Var", false]], "idol::optimizers::glpk::parent (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK6parentEv", false]], "idol::optimizers::glpk::read_from_file (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", false]], "idol::optimizers::glpk::set_param_best_bound_stop (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK25set_param_best_bound_stopEd", false]], "idol::optimizers::glpk::set_param_best_obj_stop (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK23set_param_best_obj_stopEd", false]], "idol::optimizers::glpk::set_param_infeasible_or_unbounded_info (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::glpk::set_param_iteration_limit (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK25set_param_iteration_limitEj", false]], "idol::optimizers::glpk::set_param_logs (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK14set_param_logsEb", false]], "idol::optimizers::glpk::set_param_presolve (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK18set_param_presolveEb", false]], "idol::optimizers::glpk::set_param_threads (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK17set_param_threadsEj", false]], "idol::optimizers::glpk::set_param_time_limit (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK20set_param_time_limitEd", false]], "idol::optimizers::glpk::set_tol_feasibility (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK19set_tol_feasibilityEd", false]], "idol::optimizers::glpk::set_tol_integer (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK15set_tol_integerEd", false]], "idol::optimizers::glpk::set_tol_mip_absolute_gap (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::glpk::set_tol_mip_relative_gap (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_relative_gapEd", false]], "idol::optimizers::glpk::set_tol_optimality (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK18set_tol_optimalityEd", false]], "idol::optimizers::glpk::terminate (c++ function)": [[59, "_CPPv4N4idol10Optimizers4GLPK9terminateEv", false]], "idol::optimizers::glpk::time (c++ function)": [[59, "_CPPv4NK4idol10Optimizers4GLPK4timeEv", false]], "idol::optimizers::gurobi (c++ class)": [[60, "_CPPv4N4idol10Optimizers6GurobiE", false]], "idol::optimizers::gurobi::add_callback (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi12add_callbackEP8Callback", false]], "idol::optimizers::gurobi::as (c++ function)": [[60, "_CPPv4I0EN4idol10Optimizers6Gurobi2asER1Tv", false], [60, "_CPPv4I0ENK4idol10Optimizers6Gurobi2asERK1Tv", false]], "idol::optimizers::gurobi::env (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi3envEv", false], [60, "_CPPv4NK4idol10Optimizers6Gurobi3envEv", false]], "idol::optimizers::gurobi::get_param_best_bound_stop (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_best_bound_stopEv", false]], "idol::optimizers::gurobi::get_param_best_obj_stop (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi23get_param_best_obj_stopEv", false]], "idol::optimizers::gurobi::get_param_infeasible_or_unbounded_info (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::gurobi::get_param_iteration_limit (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_iteration_limitEv", false]], "idol::optimizers::gurobi::get_param_logs (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi14get_param_logsEv", false]], "idol::optimizers::gurobi::get_param_presolve (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi18get_param_presolveEv", false]], "idol::optimizers::gurobi::get_param_thread_limit (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi22get_param_thread_limitEv", false]], "idol::optimizers::gurobi::get_param_time_limit (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi20get_param_time_limitEv", false]], "idol::optimizers::gurobi::get_remaining_time (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi18get_remaining_timeEv", false]], "idol::optimizers::gurobi::get_tol_feasibility (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi19get_tol_feasibilityEv", false]], "idol::optimizers::gurobi::get_tol_integer (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi15get_tol_integerEv", false]], "idol::optimizers::gurobi::get_tol_mip_absolute_gap (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::gurobi::get_tol_mip_relative_gap (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_relative_gapEv", false]], "idol::optimizers::gurobi::get_tol_optimality (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi18get_tol_optimalityEv", false]], "idol::optimizers::gurobi::gurobi (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", false], [60, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", false]], "idol::optimizers::gurobi::is (c++ function)": [[60, "_CPPv4I0ENK4idol10Optimizers6Gurobi2isEbv", false]], "idol::optimizers::gurobi::is_terminated (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi13is_terminatedEv", false]], "idol::optimizers::gurobi::model (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi5modelEv", false], [60, "_CPPv4NK4idol10Optimizers6Gurobi5modelEv", false]], "idol::optimizers::gurobi::name (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi4nameEv", false]], "idol::optimizers::gurobi::operator[] (c++ function)": [[60, "_CPPv4N4idol10Optimizers6GurobiixERK3Ctr", false], [60, "_CPPv4N4idol10Optimizers6GurobiixERK3Var", false], [60, "_CPPv4NK4idol10Optimizers6GurobiixERK3Ctr", false], [60, "_CPPv4NK4idol10Optimizers6GurobiixERK3Var", false]], "idol::optimizers::gurobi::parent (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi6parentEv", false]], "idol::optimizers::gurobi::read_from_file (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", false]], "idol::optimizers::gurobi::set_lazy_cut (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi12set_lazy_cutEb", false]], "idol::optimizers::gurobi::set_max_n_solution_in_pool (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi26set_max_n_solution_in_poolEj", false]], "idol::optimizers::gurobi::set_param (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", false], [60, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", false]], "idol::optimizers::gurobi::set_param_best_bound_stop (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi25set_param_best_bound_stopEd", false]], "idol::optimizers::gurobi::set_param_best_obj_stop (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi23set_param_best_obj_stopEd", false]], "idol::optimizers::gurobi::set_param_infeasible_or_unbounded_info (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::gurobi::set_param_iteration_limit (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi25set_param_iteration_limitEj", false]], "idol::optimizers::gurobi::set_param_logs (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi14set_param_logsEb", false]], "idol::optimizers::gurobi::set_param_presolve (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi18set_param_presolveEb", false]], "idol::optimizers::gurobi::set_param_threads (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi17set_param_threadsEj", false]], "idol::optimizers::gurobi::set_param_time_limit (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi20set_param_time_limitEd", false]], "idol::optimizers::gurobi::set_tol_feasibility (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi19set_tol_feasibilityEd", false]], "idol::optimizers::gurobi::set_tol_integer (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi15set_tol_integerEd", false]], "idol::optimizers::gurobi::set_tol_mip_absolute_gap (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::gurobi::set_tol_mip_relative_gap (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_relative_gapEd", false]], "idol::optimizers::gurobi::set_tol_optimality (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi18set_tol_optimalityEd", false]], "idol::optimizers::gurobi::terminate (c++ function)": [[60, "_CPPv4N4idol10Optimizers6Gurobi9terminateEv", false]], "idol::optimizers::gurobi::time (c++ function)": [[60, "_CPPv4NK4idol10Optimizers6Gurobi4timeEv", false]], "idol::optimizers::robust::columnandconstraintgeneration (c++ class)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGenerationE", false]], "idol::optimizers::robust::columnandconstraintgeneration::as (c++ function)": [[24, "_CPPv4I0EN4idol10Optimizers6Robust29ColumnAndConstraintGeneration2asER1Tv", false], [24, "_CPPv4I0ENK4idol10Optimizers6Robust29ColumnAndConstraintGeneration2asERK1Tv", false]], "idol::optimizers::robust::columnandconstraintgeneration::columnandconstraintgeneration (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", false]], "idol::optimizers::robust::columnandconstraintgeneration::complete_recourse (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration17complete_recourseEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_absolute_gap (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration16get_absolute_gapEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_best_bound (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_best_boundEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_best_obj (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12get_best_objEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_ctr_dual (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12get_ctr_dualERK3Ctr", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_ctr_farkas (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_ctr_farkasERK3Ctr", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_n_solutions (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration15get_n_solutionsEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_best_bound_stop (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration25get_param_best_bound_stopEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_best_obj_stop (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration23get_param_best_obj_stopEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_infeasible_or_unbounded_info (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_iteration_limit (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration25get_param_iteration_limitEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_logs (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_param_logsEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_presolve (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_param_presolveEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_thread_limit (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration22get_param_thread_limitEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_param_time_limit (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration20get_param_time_limitEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_reason (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration10get_reasonEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_relative_gap (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration16get_relative_gapEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_remaining_time (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_remaining_timeEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_solution_index (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_solution_indexEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_status (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration10get_statusEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_tol_feasibility (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration19get_tol_feasibilityEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_tol_integer (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration15get_tol_integerEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_tol_mip_absolute_gap (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_tol_mip_relative_gap (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration24get_tol_mip_relative_gapEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_tol_optimality (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_tol_optimalityEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_var_primal (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_var_primalERK3Var", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_var_ray (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration11get_var_rayERK3Var", false]], "idol::optimizers::robust::columnandconstraintgeneration::get_var_reduced_cost (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration20get_var_reduced_costERK3Var", false]], "idol::optimizers::robust::columnandconstraintgeneration::is (c++ function)": [[24, "_CPPv4I0ENK4idol10Optimizers6Robust29ColumnAndConstraintGeneration2isEbv", false]], "idol::optimizers::robust::columnandconstraintgeneration::is_terminated (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration13is_terminatedEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::master_problem (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14master_problemEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::n_iterations (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12n_iterationsEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::name (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration4nameEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::parent (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration6parentEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_best_bound_stop (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration25set_param_best_bound_stopEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_best_obj_stop (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration23set_param_best_obj_stopEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_infeasible_or_unbounded_info (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_iteration_limit (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration25set_param_iteration_limitEj", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_logs (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration14set_param_logsEb", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_presolve (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration18set_param_presolveEb", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_threads (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration17set_param_threadsEj", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_param_time_limit (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration20set_param_time_limitEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_tol_feasibility (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration19set_tol_feasibilityEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_tol_integer (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration15set_tol_integerEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_tol_mip_absolute_gap (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_tol_mip_relative_gap (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration24set_tol_mip_relative_gapEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::set_tol_optimality (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration18set_tol_optimalityEd", false]], "idol::optimizers::robust::columnandconstraintgeneration::stage_description (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration17stage_descriptionEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::terminate (c++ function)": [[24, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration9terminateEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::time (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration4timeEv", false]], "idol::optimizers::robust::columnandconstraintgeneration::uncertainty_set (c++ function)": [[24, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration15uncertainty_setEv", false]], "idol::osi (c++ class)": [[67, "_CPPv4N4idol3OsiE", false]], "idol::osi::as (c++ function)": [[67, "_CPPv4I0EN4idol3Osi2asER1Tv", false], [67, "_CPPv4I0ENK4idol3Osi2asERK1Tv", false]], "idol::osi::clone (c++ function)": [[67, "_CPPv4NK4idol3Osi5cloneEv", false]], "idol::osi::conditional (c++ function)": [[67, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [67, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osi::continuousrelaxation (c++ function)": [[67, "_CPPv4N4idol3Osi20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osi::create_osi_solver_interface (c++ function)": [[67, "_CPPv4NK4idol3Osi27create_osi_solver_interfaceEv", false]], "idol::osi::is (c++ function)": [[67, "_CPPv4I0ENK4idol3Osi2isEbv", false]], "idol::osi::operator() (c++ function)": [[67, "_CPPv4NK4idol3OsiclERK5Model", false]], "idol::osi::operator= (c++ function)": [[67, "_CPPv4N4idol3OsiaSERK3Osi", false], [67, "_CPPv4N4idol3OsiaSERR3Osi", false]], "idol::osi::osi (c++ function)": [[67, "_CPPv4N4idol3Osi3OsiERK18OsiSolverInterface", false], [67, "_CPPv4N4idol3Osi3OsiERK3Osi", false], [67, "_CPPv4N4idol3Osi3OsiERR3Osi", false]], "idol::osi::with_absolute_gap_tolerance (c++ function)": [[67, "_CPPv4N4idol3Osi27with_absolute_gap_toleranceEd", false]], "idol::osi::with_best_bound_stop (c++ function)": [[67, "_CPPv4N4idol3Osi20with_best_bound_stopEd", false]], "idol::osi::with_best_obj_stop (c++ function)": [[67, "_CPPv4N4idol3Osi18with_best_obj_stopEd", false]], "idol::osi::with_infeasible_or_unbounded_info (c++ function)": [[67, "_CPPv4N4idol3Osi33with_infeasible_or_unbounded_infoEb", false]], "idol::osi::with_iteration_limit (c++ function)": [[67, "_CPPv4N4idol3Osi20with_iteration_limitEj", false]], "idol::osi::with_logs (c++ function)": [[67, "_CPPv4N4idol3Osi9with_logsEb", false]], "idol::osi::with_presolve (c++ function)": [[67, "_CPPv4N4idol3Osi13with_presolveEb", false]], "idol::osi::with_relative_gap_tolerance (c++ function)": [[67, "_CPPv4N4idol3Osi27with_relative_gap_toleranceEd", false]], "idol::osi::with_thread_limit (c++ function)": [[67, "_CPPv4N4idol3Osi17with_thread_limitEj", false]], "idol::osi::with_time_limit (c++ function)": [[67, "_CPPv4N4idol3Osi15with_time_limitEd", false]], "idol::osicbc (c++ class)": [[63, "_CPPv4N4idol6OsiCbcE", false]], "idol::osicbc::as (c++ function)": [[63, "_CPPv4I0EN4idol6OsiCbc2asER1Tv", false], [63, "_CPPv4I0ENK4idol6OsiCbc2asERK1Tv", false]], "idol::osicbc::clone (c++ function)": [[63, "_CPPv4NK4idol6OsiCbc5cloneEv", false]], "idol::osicbc::conditional (c++ function)": [[63, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [63, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osicbc::continuousrelaxation (c++ function)": [[63, "_CPPv4N4idol6OsiCbc20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osicbc::create_osi_solver_interface (c++ function)": [[63, "_CPPv4NK4idol6OsiCbc27create_osi_solver_interfaceEv", false]], "idol::osicbc::is (c++ function)": [[63, "_CPPv4I0ENK4idol6OsiCbc2isEbv", false]], "idol::osicbc::operator() (c++ function)": [[63, "_CPPv4NK4idol6OsiCbcclERK5Model", false]], "idol::osicbc::with_absolute_gap_tolerance (c++ function)": [[63, "_CPPv4N4idol6OsiCbc27with_absolute_gap_toleranceEd", false]], "idol::osicbc::with_best_bound_stop (c++ function)": [[63, "_CPPv4N4idol6OsiCbc20with_best_bound_stopEd", false]], "idol::osicbc::with_best_obj_stop (c++ function)": [[63, "_CPPv4N4idol6OsiCbc18with_best_obj_stopEd", false]], "idol::osicbc::with_infeasible_or_unbounded_info (c++ function)": [[63, "_CPPv4N4idol6OsiCbc33with_infeasible_or_unbounded_infoEb", false]], "idol::osicbc::with_iteration_limit (c++ function)": [[63, "_CPPv4N4idol6OsiCbc20with_iteration_limitEj", false]], "idol::osicbc::with_logs (c++ function)": [[63, "_CPPv4N4idol6OsiCbc9with_logsEb", false]], "idol::osicbc::with_presolve (c++ function)": [[63, "_CPPv4N4idol6OsiCbc13with_presolveEb", false]], "idol::osicbc::with_relative_gap_tolerance (c++ function)": [[63, "_CPPv4N4idol6OsiCbc27with_relative_gap_toleranceEd", false]], "idol::osicbc::with_thread_limit (c++ function)": [[63, "_CPPv4N4idol6OsiCbc17with_thread_limitEj", false]], "idol::osicbc::with_time_limit (c++ function)": [[63, "_CPPv4N4idol6OsiCbc15with_time_limitEd", false]], "idol::osiclp (c++ class)": [[64, "_CPPv4N4idol6OsiClpE", false]], "idol::osiclp::as (c++ function)": [[64, "_CPPv4I0EN4idol6OsiClp2asER1Tv", false], [64, "_CPPv4I0ENK4idol6OsiClp2asERK1Tv", false]], "idol::osiclp::clone (c++ function)": [[64, "_CPPv4NK4idol6OsiClp5cloneEv", false]], "idol::osiclp::conditional (c++ function)": [[64, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [64, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osiclp::continuousrelaxation (c++ function)": [[64, "_CPPv4N4idol6OsiClp20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osiclp::create_osi_solver_interface (c++ function)": [[64, "_CPPv4NK4idol6OsiClp27create_osi_solver_interfaceEv", false]], "idol::osiclp::is (c++ function)": [[64, "_CPPv4I0ENK4idol6OsiClp2isEbv", false]], "idol::osiclp::operator() (c++ function)": [[64, "_CPPv4NK4idol6OsiClpclERK5Model", false]], "idol::osiclp::with_absolute_gap_tolerance (c++ function)": [[64, "_CPPv4N4idol6OsiClp27with_absolute_gap_toleranceEd", false]], "idol::osiclp::with_best_bound_stop (c++ function)": [[64, "_CPPv4N4idol6OsiClp20with_best_bound_stopEd", false]], "idol::osiclp::with_best_obj_stop (c++ function)": [[64, "_CPPv4N4idol6OsiClp18with_best_obj_stopEd", false]], "idol::osiclp::with_infeasible_or_unbounded_info (c++ function)": [[64, "_CPPv4N4idol6OsiClp33with_infeasible_or_unbounded_infoEb", false]], "idol::osiclp::with_iteration_limit (c++ function)": [[64, "_CPPv4N4idol6OsiClp20with_iteration_limitEj", false]], "idol::osiclp::with_logs (c++ function)": [[64, "_CPPv4N4idol6OsiClp9with_logsEb", false]], "idol::osiclp::with_presolve (c++ function)": [[64, "_CPPv4N4idol6OsiClp13with_presolveEb", false]], "idol::osiclp::with_relative_gap_tolerance (c++ function)": [[64, "_CPPv4N4idol6OsiClp27with_relative_gap_toleranceEd", false]], "idol::osiclp::with_thread_limit (c++ function)": [[64, "_CPPv4N4idol6OsiClp17with_thread_limitEj", false]], "idol::osiclp::with_time_limit (c++ function)": [[64, "_CPPv4N4idol6OsiClp15with_time_limitEd", false]], "idol::osicplex (c++ class)": [[65, "_CPPv4N4idol8OsiCplexE", false]], "idol::osicplex::as (c++ function)": [[65, "_CPPv4I0EN4idol8OsiCplex2asER1Tv", false], [65, "_CPPv4I0ENK4idol8OsiCplex2asERK1Tv", false]], "idol::osicplex::clone (c++ function)": [[65, "_CPPv4NK4idol8OsiCplex5cloneEv", false]], "idol::osicplex::conditional (c++ function)": [[65, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [65, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osicplex::continuousrelaxation (c++ function)": [[65, "_CPPv4N4idol8OsiCplex20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osicplex::create_osi_solver_interface (c++ function)": [[65, "_CPPv4NK4idol8OsiCplex27create_osi_solver_interfaceEv", false]], "idol::osicplex::is (c++ function)": [[65, "_CPPv4I0ENK4idol8OsiCplex2isEbv", false]], "idol::osicplex::operator() (c++ function)": [[65, "_CPPv4NK4idol8OsiCplexclERK5Model", false]], "idol::osicplex::with_absolute_gap_tolerance (c++ function)": [[65, "_CPPv4N4idol8OsiCplex27with_absolute_gap_toleranceEd", false]], "idol::osicplex::with_best_bound_stop (c++ function)": [[65, "_CPPv4N4idol8OsiCplex20with_best_bound_stopEd", false]], "idol::osicplex::with_best_obj_stop (c++ function)": [[65, "_CPPv4N4idol8OsiCplex18with_best_obj_stopEd", false]], "idol::osicplex::with_infeasible_or_unbounded_info (c++ function)": [[65, "_CPPv4N4idol8OsiCplex33with_infeasible_or_unbounded_infoEb", false]], "idol::osicplex::with_iteration_limit (c++ function)": [[65, "_CPPv4N4idol8OsiCplex20with_iteration_limitEj", false]], "idol::osicplex::with_logs (c++ function)": [[65, "_CPPv4N4idol8OsiCplex9with_logsEb", false]], "idol::osicplex::with_presolve (c++ function)": [[65, "_CPPv4N4idol8OsiCplex13with_presolveEb", false]], "idol::osicplex::with_relative_gap_tolerance (c++ function)": [[65, "_CPPv4N4idol8OsiCplex27with_relative_gap_toleranceEd", false]], "idol::osicplex::with_thread_limit (c++ function)": [[65, "_CPPv4N4idol8OsiCplex17with_thread_limitEj", false]], "idol::osicplex::with_time_limit (c++ function)": [[65, "_CPPv4N4idol8OsiCplex15with_time_limitEd", false]], "idol::osisymphony (c++ class)": [[66, "_CPPv4N4idol11OsiSymphonyE", false]], "idol::osisymphony::as (c++ function)": [[66, "_CPPv4I0EN4idol11OsiSymphony2asER1Tv", false], [66, "_CPPv4I0ENK4idol11OsiSymphony2asERK1Tv", false]], "idol::osisymphony::clone (c++ function)": [[66, "_CPPv4NK4idol11OsiSymphony5cloneEv", false]], "idol::osisymphony::conditional (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [66, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osisymphony::continuousrelaxation (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osisymphony::create_osi_solver_interface (c++ function)": [[66, "_CPPv4NK4idol11OsiSymphony27create_osi_solver_interfaceEv", false]], "idol::osisymphony::is (c++ function)": [[66, "_CPPv4I0ENK4idol11OsiSymphony2isEbv", false]], "idol::osisymphony::operator() (c++ function)": [[66, "_CPPv4NK4idol11OsiSymphonyclERK5Model", false]], "idol::osisymphony::with_absolute_gap_tolerance (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony27with_absolute_gap_toleranceEd", false]], "idol::osisymphony::with_best_bound_stop (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony20with_best_bound_stopEd", false]], "idol::osisymphony::with_best_obj_stop (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony18with_best_obj_stopEd", false]], "idol::osisymphony::with_infeasible_or_unbounded_info (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony33with_infeasible_or_unbounded_infoEb", false]], "idol::osisymphony::with_iteration_limit (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony20with_iteration_limitEj", false]], "idol::osisymphony::with_logs (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony9with_logsEb", false]], "idol::osisymphony::with_presolve (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony13with_presolveEb", false]], "idol::osisymphony::with_relative_gap_tolerance (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony27with_relative_gap_toleranceEd", false]], "idol::osisymphony::with_thread_limit (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony17with_thread_limitEj", false]], "idol::osisymphony::with_time_limit (c++ function)": [[66, "_CPPv4N4idol11OsiSymphony15with_time_limitEd", false]], "idol::param (c++ class)": [[43, "_CPPv4N4idol5ParamE", false]], "idol::param::as (c++ function)": [[43, "_CPPv4I0ENK4idol5Param2asE1Tv", false]], "idol::param::id (c++ function)": [[43, "_CPPv4NK4idol5Param2idEv", false]], "idol::param::is (c++ function)": [[43, "_CPPv4I0ENK4idol5Param2isEbv", false]], "idol::param::name (c++ function)": [[43, "_CPPv4NK4idol5Param4nameEv", false]], "idol::param::operator= (c++ function)": [[43, "_CPPv4N4idol5ParamaSERK5Param", false], [43, "_CPPv4N4idol5ParamaSERR5Param", false]], "idol::param::param (c++ function)": [[43, "_CPPv4N4idol5Param5ParamERK3Ctr", false], [43, "_CPPv4N4idol5Param5ParamERK3Var", false], [43, "_CPPv4N4idol5Param5ParamERK5Param", false], [43, "_CPPv4N4idol5Param5ParamERR5Param", false]], "idol::pseudocost (c++ class)": [[19, "_CPPv4N4idol10PseudoCostE", false]], "idol::pseudocost::pseudocost (c++ function)": [[19, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", false], [19, "_CPPv4N4idol10PseudoCost10PseudoCostEv", false]], "idol::pseudocost::strategy (c++ class)": [[19, "_CPPv4I0EN4idol10PseudoCost8StrategyE", false]], "idol::pseudocost::strategy::clone (c++ function)": [[19, "_CPPv4NK4idol10PseudoCost8Strategy5cloneEv", false]], "idol::pseudocost::strategy::operator() (c++ function)": [[19, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [19, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::pseudocost::strategy::strategy (c++ function)": [[19, "_CPPv4N4idol10PseudoCost8Strategy8StrategyERK10PseudoCost", false], [19, "_CPPv4N4idol10PseudoCost8Strategy8StrategyEv", false]], "idol::quadexpr (c++ class)": [[44, "_CPPv4I0000EN4idol8QuadExprE", false]], "idol::quadexpr::fix (c++ function)": [[44, "_CPPv4NK4idol8QuadExpr3fixERKN8Solution6PrimalE", false]], "idol::quadexpr::get (c++ function)": [[44, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", false]], "idol::quadexpr::operator= (c++ function)": [[44, "_CPPv4N4idol8QuadExpraSERK8QuadExpr", false], [44, "_CPPv4N4idol8QuadExpraSERR8QuadExpr", false]], "idol::quadexpr::quadexpr (c++ function)": [[44, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", false], [44, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", false], [44, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr", false], [44, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", false], [44, "_CPPv4N4idol8QuadExpr8QuadExprERR8QuadExpr", false], [44, "_CPPv4N4idol8QuadExpr8QuadExprEv", false]], "idol::quadexpr::set (c++ function)": [[44, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", false]], "idol::quadexpr::~quadexpr (c++ function)": [[44, "_CPPv4N4idol8QuadExprD0Ev", false]], "idol::relative_gap (c++ function)": [[76, "_CPPv4N4idol12relative_gapEdd", false]], "idol::robust::columnandconstraintgeneration (c++ class)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGenerationE", false]], "idol::robust::columnandconstraintgeneration::as (c++ function)": [[23, "_CPPv4I0EN4idol6Robust29ColumnAndConstraintGeneration2asER1Tv", false], [23, "_CPPv4I0ENK4idol6Robust29ColumnAndConstraintGeneration2asERK1Tv", false]], "idol::robust::columnandconstraintgeneration::clone (c++ function)": [[23, "_CPPv4NK4idol6Robust29ColumnAndConstraintGeneration5cloneEv", false]], "idol::robust::columnandconstraintgeneration::columnandconstraintgeneration (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationEN6Robust16StageDescriptionERK5Model", false], [23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK29ColumnAndConstraintGeneration", false], [23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERR29ColumnAndConstraintGeneration", false]], "idol::robust::columnandconstraintgeneration::conditional (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", false], [23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEERKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", false]], "idol::robust::columnandconstraintgeneration::is (c++ function)": [[23, "_CPPv4I0ENK4idol6Robust29ColumnAndConstraintGeneration2isEbv", false]], "idol::robust::columnandconstraintgeneration::operator() (c++ function)": [[23, "_CPPv4NK4idol6Robust29ColumnAndConstraintGenerationclERK5Model", false]], "idol::robust::columnandconstraintgeneration::operator= (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGenerationaSERK29ColumnAndConstraintGeneration", false], [23, "_CPPv4N4idol6Robust29ColumnAndConstraintGenerationaSERR29ColumnAndConstraintGeneration", false]], "idol::robust::columnandconstraintgeneration::with_absolute_gap_tolerance (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration27with_absolute_gap_toleranceEd", false]], "idol::robust::columnandconstraintgeneration::with_best_bound_stop (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration20with_best_bound_stopEd", false]], "idol::robust::columnandconstraintgeneration::with_best_obj_stop (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration18with_best_obj_stopEd", false]], "idol::robust::columnandconstraintgeneration::with_complete_recourse (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration22with_complete_recourseEb", false]], "idol::robust::columnandconstraintgeneration::with_infeasible_or_unbounded_info (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration33with_infeasible_or_unbounded_infoEb", false]], "idol::robust::columnandconstraintgeneration::with_iteration_limit (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration20with_iteration_limitEj", false]], "idol::robust::columnandconstraintgeneration::with_logs (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration9with_logsEb", false]], "idol::robust::columnandconstraintgeneration::with_master_optimizer (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration21with_master_optimizerERK16OptimizerFactory", false]], "idol::robust::columnandconstraintgeneration::with_presolve (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration13with_presolveEb", false]], "idol::robust::columnandconstraintgeneration::with_relative_gap_tolerance (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration27with_relative_gap_toleranceEd", false]], "idol::robust::columnandconstraintgeneration::with_separator (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration14with_separatorERK12CCGSeparator", false]], "idol::robust::columnandconstraintgeneration::with_stabilization (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration18with_stabilizationERK13CCGStabilizer", false]], "idol::robust::columnandconstraintgeneration::with_thread_limit (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration17with_thread_limitEj", false]], "idol::robust::columnandconstraintgeneration::with_time_limit (c++ function)": [[23, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration15with_time_limitEd", false]], "idol::round (c++ function)": [[76, "_CPPv4N4idol5roundEdj", false]], "idol::row (c++ class)": [[45, "_CPPv4N4idol3RowE", false]], "idol::row::emptyrow (c++ member)": [[45, "_CPPv4N4idol3Row8EmptyRowE", false]], "idol::row::fix (c++ function)": [[45, "_CPPv4NK4idol3Row3fixERKN8Solution4DualE", false], [45, "_CPPv4NK4idol3Row3fixERKN8Solution6PrimalE", false]], "idol::row::gcd (c++ function)": [[45, "_CPPv4NK4idol3Row3gcdEv", false]], "idol::row::is_violated (c++ function)": [[45, "_CPPv4NK4idol3Row11is_violatedERKN8Solution6PrimalE7CtrTyped", false]], "idol::row::linear (c++ function)": [[45, "_CPPv4N4idol3Row6linearEv", false], [45, "_CPPv4NK4idol3Row6linearEv", false]], "idol::row::multiply_with_precision_by_power_of_10 (c++ function)": [[45, "_CPPv4N4idol3Row38multiply_with_precision_by_power_of_10Ejj", false]], "idol::row::operator*= (c++ function)": [[45, "_CPPv4N4idol3RowmLEd", false]], "idol::row::operator+= (c++ function)": [[45, "_CPPv4N4idol3RowpLERK3Row", false]], "idol::row::operator-= (c++ function)": [[45, "_CPPv4N4idol3RowmIERK3Row", false]], "idol::row::operator/= (c++ function)": [[45, "_CPPv4N4idol3RowdVEd", false]], "idol::row::operator= (c++ function)": [[45, "_CPPv4N4idol3RowaSERK3Row", false], [45, "_CPPv4N4idol3RowaSERR3Row", false]], "idol::row::quadratic (c++ function)": [[45, "_CPPv4N4idol3Row9quadraticEv", false], [45, "_CPPv4NK4idol3Row9quadraticEv", false]], "idol::row::rhs (c++ function)": [[45, "_CPPv4N4idol3Row3rhsEv", false], [45, "_CPPv4NK4idol3Row3rhsEv", false]], "idol::row::row (c++ function)": [[45, "_CPPv4N4idol3Row3RowERK3Row", false], [45, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", false], [45, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", false], [45, "_CPPv4N4idol3Row3RowERR3Row", false], [45, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", false], [45, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", false], [45, "_CPPv4N4idol3Row3RowEv", false]], "idol::row::scale_to_integers (c++ function)": [[45, "_CPPv4N4idol3Row17scale_to_integersEj", false]], "idol::row::set_linear (c++ function)": [[45, "_CPPv4N4idol3Row10set_linearERK7LinExprI3VarE", false], [45, "_CPPv4N4idol3Row10set_linearERR7LinExprI3VarE", false]], "idol::row::set_quadratic (c++ function)": [[45, "_CPPv4N4idol3Row13set_quadraticERK8QuadExprI3Var3VarE", false], [45, "_CPPv4N4idol3Row13set_quadraticERR8QuadExprI3Var3VarE", false]], "idol::row::set_rhs (c++ function)": [[45, "_CPPv4N4idol3Row7set_rhsERK8Constant", false], [45, "_CPPv4N4idol3Row7set_rhsERR8Constant", false]], "idol::row::value (c++ function)": [[45, "_CPPv4NK4idol3Row5valueERKN8Solution6PrimalE", false]], "idol::solution::dual (c++ class)": [[46, "_CPPv4N4idol8Solution4DualE", false]], "idol::solution::dual::begin (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual5beginEv", false]], "idol::solution::dual::cbegin (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual6cbeginEv", false]], "idol::solution::dual::cend (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual4cendEv", false]], "idol::solution::dual::const_iterator (c++ type)": [[46, "_CPPv4N4idol8Solution4Dual14const_iteratorE", false]], "idol::solution::dual::end (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual3endEv", false]], "idol::solution::dual::get (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual3getERK3Ctr", false]], "idol::solution::dual::has_objective_value (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual19has_objective_valueEv", false]], "idol::solution::dual::merge_without_conflict (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual22merge_without_conflictE4Dual", false]], "idol::solution::dual::norm (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual4normEd", false]], "idol::solution::dual::normalize (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual9normalizeEd", false]], "idol::solution::dual::objective_value (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual15objective_valueEv", false]], "idol::solution::dual::operator*= (c++ function)": [[46, "_CPPv4N4idol8Solution4DualmLEd", false]], "idol::solution::dual::operator+= (c++ function)": [[46, "_CPPv4N4idol8Solution4DualpLERK4Dual", false]], "idol::solution::dual::reason (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual6reasonEv", false]], "idol::solution::dual::reset_objective_value (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual21reset_objective_valueEv", false]], "idol::solution::dual::round (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual5roundEj", false]], "idol::solution::dual::set (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", false]], "idol::solution::dual::set_objective_value (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual19set_objective_valueEd", false]], "idol::solution::dual::set_reason (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual10set_reasonE14SolutionReason", false]], "idol::solution::dual::set_status (c++ function)": [[46, "_CPPv4N4idol8Solution4Dual10set_statusE14SolutionStatus", false]], "idol::solution::dual::size (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual4sizeEv", false]], "idol::solution::dual::status (c++ function)": [[46, "_CPPv4NK4idol8Solution4Dual6statusEv", false]], "idol::solution::primal (c++ class)": [[47, "_CPPv4N4idol8Solution6PrimalE", false]], "idol::solution::primal::begin (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal5beginEv", false]], "idol::solution::primal::cbegin (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal6cbeginEv", false]], "idol::solution::primal::cend (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal4cendEv", false]], "idol::solution::primal::const_iterator (c++ type)": [[47, "_CPPv4N4idol8Solution6Primal14const_iteratorE", false]], "idol::solution::primal::end (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal3endEv", false]], "idol::solution::primal::get (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal3getERK3Var", false]], "idol::solution::primal::has_objective_value (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal19has_objective_valueEv", false]], "idol::solution::primal::merge_without_conflict (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal22merge_without_conflictE6Primal", false]], "idol::solution::primal::norm (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal4normEd", false]], "idol::solution::primal::normalize (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal9normalizeEd", false]], "idol::solution::primal::objective_value (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal15objective_valueEv", false]], "idol::solution::primal::operator*= (c++ function)": [[47, "_CPPv4N4idol8Solution6PrimalmLEd", false]], "idol::solution::primal::operator+= (c++ function)": [[47, "_CPPv4N4idol8Solution6PrimalpLERK6Primal", false]], "idol::solution::primal::reason (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal6reasonEv", false]], "idol::solution::primal::reset_objective_value (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal21reset_objective_valueEv", false]], "idol::solution::primal::round (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal5roundEj", false]], "idol::solution::primal::set (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal3setERK3Vard", false]], "idol::solution::primal::set_objective_value (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal19set_objective_valueEd", false]], "idol::solution::primal::set_reason (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal10set_reasonE14SolutionReason", false]], "idol::solution::primal::set_status (c++ function)": [[47, "_CPPv4N4idol8Solution6Primal10set_statusE14SolutionStatus", false]], "idol::solution::primal::size (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal4sizeEv", false]], "idol::solution::primal::status (c++ function)": [[47, "_CPPv4NK4idol8Solution6Primal6statusEv", false]], "idol::strongbranching (c++ class)": [[20, "_CPPv4N4idol15StrongBranchingE", false]], "idol::strongbranching::add_phase (c++ function)": [[20, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", false]], "idol::strongbranching::strategy (c++ class)": [[20, "_CPPv4I0EN4idol15StrongBranching8StrategyE", false]], "idol::strongbranching::strategy::clone (c++ function)": [[20, "_CPPv4NK4idol15StrongBranching8Strategy5cloneEv", false]], "idol::strongbranching::strategy::operator() (c++ function)": [[20, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [20, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::strongbranching::strategy::strategy (c++ function)": [[20, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK15StrongBranching", false], [20, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK8StrategyI9NodeInfoTE", false], [20, "_CPPv4N4idol15StrongBranching8Strategy8StrategyEv", false]], "idol::strongbranching::strongbranching (c++ function)": [[20, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", false], [20, "_CPPv4N4idol15StrongBranching15StrongBranchingEv", false]], "idol::strongbranching::with_max_n_variables (c++ function)": [[20, "_CPPv4N4idol15StrongBranching20with_max_n_variablesEj", false]], "idol::strongbranching::with_node_scoring_function (c++ function)": [[20, "_CPPv4N4idol15StrongBranching26with_node_scoring_functionERK17NodeScoreFunction", false]], "idol::tempctr (c++ class)": [[48, "_CPPv4N4idol7TempCtrE", false]], "idol::tempctr::is_violated (c++ function)": [[48, "_CPPv4NK4idol7TempCtr11is_violatedERKN8Solution6PrimalE", false]], "idol::tempctr::operator= (c++ function)": [[48, "_CPPv4N4idol7TempCtraSERK7TempCtr", false], [48, "_CPPv4N4idol7TempCtraSERR7TempCtr", false]], "idol::tempctr::row (c++ function)": [[48, "_CPPv4N4idol7TempCtr3rowEv", false], [48, "_CPPv4NK4idol7TempCtr3rowEv", false]], "idol::tempctr::set_type (c++ function)": [[48, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", false]], "idol::tempctr::tempctr (c++ function)": [[48, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", false], [48, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", false], [48, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", false], [48, "_CPPv4N4idol7TempCtr7TempCtrEv", false]], "idol::tempctr::type (c++ function)": [[48, "_CPPv4NK4idol7TempCtr4typeEv", false]], "idol::tempvar (c++ class)": [[49, "_CPPv4N4idol7TempVarE", false]], "idol::tempvar::column (c++ function)": [[49, "_CPPv4N4idol7TempVar6columnEv", false], [49, "_CPPv4NK4idol7TempVar6columnEv", false]], "idol::tempvar::lb (c++ function)": [[49, "_CPPv4NK4idol7TempVar2lbEv", false]], "idol::tempvar::operator= (c++ function)": [[49, "_CPPv4N4idol7TempVaraSERK7TempVar", false], [49, "_CPPv4N4idol7TempVaraSERR7TempVar", false]], "idol::tempvar::set_lb (c++ function)": [[49, "_CPPv4N4idol7TempVar6set_lbEd", false]], "idol::tempvar::set_type (c++ function)": [[49, "_CPPv4N4idol7TempVar8set_typeE7VarType", false]], "idol::tempvar::set_ub (c++ function)": [[49, "_CPPv4N4idol7TempVar6set_ubEd", false]], "idol::tempvar::tempvar (c++ function)": [[49, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", false], [49, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", false], [49, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", false], [49, "_CPPv4N4idol7TempVar7TempVarEv", false]], "idol::tempvar::type (c++ function)": [[49, "_CPPv4NK4idol7TempVar4typeEv", false]], "idol::tempvar::ub (c++ function)": [[49, "_CPPv4NK4idol7TempVar2ubEv", false]], "idol::tolerance (c++ type)": [[76, "_CPPv4N4idol9ToleranceE", false]], "idol::tolerance::digits (c++ member)": [[76, "_CPPv4N4idol9Tolerance6DigitsE", false]], "idol::tolerance::feasibility (c++ member)": [[76, "_CPPv4N4idol9Tolerance11FeasibilityE", false]], "idol::tolerance::integer (c++ member)": [[76, "_CPPv4N4idol9Tolerance7IntegerE", false]], "idol::tolerance::mipabsolutegap (c++ member)": [[76, "_CPPv4N4idol9Tolerance14MIPAbsoluteGapE", false]], "idol::tolerance::miprelativegap (c++ member)": [[76, "_CPPv4N4idol9Tolerance14MIPRelativeGapE", false]], "idol::tolerance::optimality (c++ member)": [[76, "_CPPv4N4idol9Tolerance10OptimalityE", false]], "idol::tolerance::sparsity (c++ member)": [[76, "_CPPv4N4idol9Tolerance8SparsityE", false]], "idol::uniformlyrandom (c++ class)": [[21, "_CPPv4N4idol15UniformlyRandomE", false]], "idol::uniformlyrandom::strategy (c++ class)": [[21, "_CPPv4I0EN4idol15UniformlyRandom8StrategyE", false]], "idol::uniformlyrandom::strategy::clone (c++ function)": [[21, "_CPPv4NK4idol15UniformlyRandom8Strategy5cloneEv", false]], "idol::uniformlyrandom::strategy::operator() (c++ function)": [[21, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [21, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::uniformlyrandom::strategy::strategy (c++ function)": [[21, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyERK15UniformlyRandom", false], [21, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyEv", false]], "idol::uniformlyrandom::uniformlyrandom (c++ function)": [[21, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", false], [21, "_CPPv4N4idol15UniformlyRandom15UniformlyRandomEv", false]], "idol::uniformlyrandom::with_seed (c++ function)": [[21, "_CPPv4N4idol15UniformlyRandom9with_seedEj", false]], "idol::usercutcallback (c++ class)": [[73, "_CPPv4N4idol15UserCutCallbackE", false]], "idol::usercutcallback::clone (c++ function)": [[73, "_CPPv4NK4idol15UserCutCallback5cloneEv", false]], "idol::usercutcallback::operator() (c++ function)": [[73, "_CPPv4N4idol15UserCutCallbackclEv", false]], "idol::usercutcallback::strategy (c++ class)": [[73, "_CPPv4N4idol15UserCutCallback8StrategyE", false]], "idol::usercutcallback::strategy::strategy (c++ function)": [[73, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", false]], "idol::usercutcallback::usercutcallback (c++ function)": [[73, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", false]], "idol::usercutcallback::with_separation_optimizer (c++ function)": [[73, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", false]], "idol::var (c++ class)": [[50, "_CPPv4N4idol3VarE", false]], "idol::var::get (c++ function)": [[50, "_CPPv4NK4idol3Var3getERK10AnnotationI3Var6ValueTE", false]], "idol::var::id (c++ function)": [[50, "_CPPv4NK4idol3Var2idEv", false]], "idol::var::is_in (c++ function)": [[50, "_CPPv4NK4idol3Var5is_inERK5Model", false]], "idol::var::make_vector (c++ function)": [[50, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", false]], "idol::var::name (c++ function)": [[50, "_CPPv4NK4idol3Var4nameEv", false]], "idol::var::operator= (c++ function)": [[50, "_CPPv4N4idol3VaraSERK3Var", false], [50, "_CPPv4N4idol3VaraSERR3Var", false]], "idol::var::set (c++ function)": [[50, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", false]], "idol::var::var (c++ function)": [[50, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", false], [50, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", false], [50, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", false], [50, "_CPPv4N4idol3Var3VarERK3Var", false], [50, "_CPPv4N4idol3Var3VarERR3Var", false]], "idol::vartype (c++ enum)": [[79, "_CPPv4N4idol7VarTypeE", false]], "idol::vartype::binary (c++ enumerator)": [[79, "_CPPv4N4idol7VarType6BinaryE", false]], "idol::vartype::continuous (c++ enumerator)": [[79, "_CPPv4N4idol7VarType10ContinuousE", false]], "idol::vartype::integer (c++ enumerator)": [[79, "_CPPv4N4idol7VarType7IntegerE", false]], "idol::worstbound (c++ class)": [[14, "_CPPv4N4idol10WorstBoundE", false]], "idol::worstbound::strategy (c++ class)": [[14, "_CPPv4I0EN4idol10WorstBound8StrategyE", false]], "idol::worstbound::strategy::clone (c++ function)": [[14, "_CPPv4NK4idol10WorstBound8Strategy5cloneEv", false]], "idol::worstbound::strategy::operator() (c++ function)": [[14, "_CPPv4NK4idol10WorstBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::worstbound::strategy::strategy (c++ function)": [[14, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", false]]}, "objects": {"": [[76, 0, 1, "_CPPv44idol", "idol"], [35, 1, 1, "_CPPv4I00EN4idol10AnnotationE", "idol::Annotation"], [35, 2, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation"], [35, 2, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation"], [35, 3, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::ArgsT"], [35, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_args"], [35, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_env"], [35, 4, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation::t_env"], [35, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_name"], [35, 4, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation::t_name"], [35, 3, 1, "_CPPv4I00EN4idol10AnnotationE", "idol::Annotation::ObjectT"], [35, 3, 1, "_CPPv4I00EN4idol10AnnotationE", "idol::Annotation::ValueT"], [35, 2, 1, "_CPPv4NK4idol10Annotation13default_valueEv", "idol::Annotation::default_value"], [35, 2, 1, "_CPPv4NK4idol10Annotation3envEv", "idol::Annotation::env"], [35, 2, 1, "_CPPv4N4idol10Annotation4freeEv", "idol::Annotation::free"], [35, 2, 1, "_CPPv4NK4idol10Annotation11has_defaultEv", "idol::Annotation::has_default"], [35, 2, 1, "_CPPv4NK4idol10Annotation2idEv", "idol::Annotation::id"], [35, 2, 1, "_CPPv4NK4idol10Annotation17is_ctr_annotationEv", "idol::Annotation::is_ctr_annotation"], [35, 2, 1, "_CPPv4NK4idol10Annotation17is_var_annotationEv", "idol::Annotation::is_var_annotation"], [35, 2, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value"], [35, 3, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::ArgsT"], [35, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_args"], [35, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_env"], [35, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI7ObjectT6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_name"], [35, 2, 1, "_CPPv4NK4idol10Annotation4nameEv", "idol::Annotation::name"], [10, 1, 1, "_CPPv4N4idol9BestBoundE", "idol::BestBound"], [10, 1, 1, "_CPPv4I0EN4idol9BestBound8StrategyE", "idol::BestBound::Strategy"], [10, 3, 1, "_CPPv4I0EN4idol9BestBound8StrategyE", "idol::BestBound::Strategy::NodeT"], [10, 2, 1, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", "idol::BestBound::Strategy::Strategy"], [10, 4, 1, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", "idol::BestBound::Strategy::Strategy::t_parent"], [10, 2, 1, "_CPPv4NK4idol9BestBound8Strategy5cloneEv", "idol::BestBound::Strategy::clone"], [10, 2, 1, "_CPPv4NK4idol9BestBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestBound::Strategy::operator()"], [10, 4, 1, "_CPPv4NK4idol9BestBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestBound::Strategy::operator()::t_parent"], [11, 1, 1, "_CPPv4N4idol12BestEstimateE", "idol::BestEstimate"], [11, 1, 1, "_CPPv4I0EN4idol12BestEstimate8StrategyE", "idol::BestEstimate::Strategy"], [11, 3, 1, "_CPPv4I0EN4idol12BestEstimate8StrategyE", "idol::BestEstimate::Strategy::NodeT"], [11, 2, 1, "_CPPv4N4idol12BestEstimate8Strategy8StrategyERK12BestEstimate", "idol::BestEstimate::Strategy::Strategy"], [11, 4, 1, "_CPPv4N4idol12BestEstimate8Strategy8StrategyERK12BestEstimate", "idol::BestEstimate::Strategy::Strategy::t_parent"], [11, 2, 1, "_CPPv4NK4idol12BestEstimate8Strategy5cloneEv", "idol::BestEstimate::Strategy::clone"], [11, 2, 1, "_CPPv4NK4idol12BestEstimate8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestEstimate::Strategy::operator()"], [11, 4, 1, "_CPPv4NK4idol12BestEstimate8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestEstimate::Strategy::operator()::t_parent"], [52, 1, 1, "_CPPv4N4idol7Bilevel4MibSE", "idol::Bilevel::MibS"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel21LowerLevelDescriptionE", "idol::Bilevel::MibS::MibS"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", "idol::Bilevel::MibS::MibS"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERR4MibS", "idol::Bilevel::MibS::MibS"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel21LowerLevelDescriptionE", "idol::Bilevel::MibS::MibS::t_description"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", "idol::Bilevel::MibS::MibS::t_src"], [52, 2, 1, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", "idol::Bilevel::MibS::as"], [52, 2, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", "idol::Bilevel::MibS::as"], [52, 3, 1, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", "idol::Bilevel::MibS::as::T"], [52, 3, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", "idol::Bilevel::MibS::as::T"], [52, 2, 1, "_CPPv4NK4idol7Bilevel4MibS5cloneEv", "idol::Bilevel::MibS::clone"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_conditional_value"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_conditional_value"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_else"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_if"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_if"], [52, 2, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", "idol::Bilevel::MibS::is"], [52, 3, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", "idol::Bilevel::MibS::is::T"], [52, 2, 1, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", "idol::Bilevel::MibS::operator()"], [52, 4, 1, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", "idol::Bilevel::MibS::operator()::t_model"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibSaSERK4MibS", "idol::Bilevel::MibS::operator="], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibSaSERR4MibS", "idol::Bilevel::MibS::operator="], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", "idol::Bilevel::MibS::with_absolute_gap_tolerance"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", "idol::Bilevel::MibS::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", "idol::Bilevel::MibS::with_best_bound_stop"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", "idol::Bilevel::MibS::with_best_bound_stop::t_best_bound_stop"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", "idol::Bilevel::MibS::with_best_obj_stop"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", "idol::Bilevel::MibS::with_best_obj_stop::t_user_best_obj"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::MibS::with_infeasible_or_unbounded_info"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::MibS::with_infeasible_or_unbounded_info::t_value"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", "idol::Bilevel::MibS::with_iteration_limit"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", "idol::Bilevel::MibS::with_iteration_limit::t_iteration_count_limit"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", "idol::Bilevel::MibS::with_logs"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", "idol::Bilevel::MibS::with_logs::t_value"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS18with_osi_interfaceERK18OsiSolverInterface", "idol::Bilevel::MibS::with_osi_interface"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS18with_osi_interfaceERK18OsiSolverInterface", "idol::Bilevel::MibS::with_osi_interface::t_osi_optimizer"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", "idol::Bilevel::MibS::with_presolve"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", "idol::Bilevel::MibS::with_presolve::t_value"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", "idol::Bilevel::MibS::with_relative_gap_tolerance"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", "idol::Bilevel::MibS::with_relative_gap_tolerance::t_relative_gap_tolerance"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", "idol::Bilevel::MibS::with_thread_limit"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", "idol::Bilevel::MibS::with_thread_limit::t_max_n_threads"], [52, 2, 1, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", "idol::Bilevel::MibS::with_time_limit"], [52, 4, 1, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", "idol::Bilevel::MibS::with_time_limit::t_time_limit"], [79, 5, 1, "_CPPv4N4idol7VarType6BinaryE", "idol::Binary"], [0, 1, 1, "_CPPv4I0EN4idol14BranchAndBoundE", "idol::BranchAndBound"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERK14BranchAndBound", "idol::BranchAndBound::BranchAndBound"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERR14BranchAndBound", "idol::BranchAndBound::BranchAndBound"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundEv", "idol::BranchAndBound::BranchAndBound"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERK14BranchAndBound", "idol::BranchAndBound::BranchAndBound::t_rhs"], [0, 3, 1, "_CPPv4I0EN4idol14BranchAndBoundE", "idol::BranchAndBound::NodeT"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK15CallbackFactory", "idol::BranchAndBound::add_callback"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", "idol::BranchAndBound::add_callback"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK15CallbackFactory", "idol::BranchAndBound::add_callback::t_callback"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", "idol::BranchAndBound::add_callback::t_callback"], [0, 2, 1, "_CPPv4I0EN4idol14BranchAndBound2asER1Tv", "idol::BranchAndBound::as"], [0, 2, 1, "_CPPv4I0ENK4idol14BranchAndBound2asERK1Tv", "idol::BranchAndBound::as"], [0, 3, 1, "_CPPv4I0EN4idol14BranchAndBound2asER1Tv", "idol::BranchAndBound::as::T"], [0, 3, 1, "_CPPv4I0ENK4idol14BranchAndBound2asERK1Tv", "idol::BranchAndBound::as::T"], [0, 2, 1, "_CPPv4NK4idol14BranchAndBound5cloneEv", "idol::BranchAndBound::clone"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional::t_conditional_value"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional::t_conditional_value"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional::t_else"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional::t_if"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEERKNSt8functionIFvR14BranchAndBoundIN4idol15DefaultNodeInfoEEEEE", "idol::BranchAndBound::conditional::t_if"], [0, 2, 1, "_CPPv4I0ENK4idol14BranchAndBound2isEbv", "idol::BranchAndBound::is"], [0, 3, 1, "_CPPv4I0ENK4idol14BranchAndBound2isEbv", "idol::BranchAndBound::is::T"], [0, 0, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy"], [0, 3, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy::ReturnT"], [0, 3, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy::T"], [0, 2, 1, "_CPPv4NK4idol14BranchAndBoundclERK5Model", "idol::BranchAndBound::operator()"], [0, 4, 1, "_CPPv4NK4idol14BranchAndBoundclERK5Model", "idol::BranchAndBound::operator()::t_model"], [0, 2, 1, "_CPPv4N4idol14BranchAndBoundpLERK16OptimizerFactory", "idol::BranchAndBound::operator+="], [0, 4, 1, "_CPPv4N4idol14BranchAndBoundpLERK16OptimizerFactory", "idol::BranchAndBound::operator+=::t_node_optimizer"], [0, 2, 1, "_CPPv4N4idol14BranchAndBoundaSERK14BranchAndBound", "idol::BranchAndBound::operator="], [0, 2, 1, "_CPPv4N4idol14BranchAndBoundaSERR14BranchAndBound", "idol::BranchAndBound::operator="], [0, 2, 1, "_CPPv4N4idol14BranchAndBound18set_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::set_node_optimizer"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound18set_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::set_node_optimizer::t_node_optimizer"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", "idol::BranchAndBound::with_absolute_gap_tolerance"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", "idol::BranchAndBound::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", "idol::BranchAndBound::with_best_bound_stop"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", "idol::BranchAndBound::with_best_bound_stop::t_best_bound_stop"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", "idol::BranchAndBound::with_best_obj_stop"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", "idol::BranchAndBound::with_best_obj_stop::t_user_best_obj"], [0, 2, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule"], [0, 2, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", "idol::BranchAndBound::with_branching_rule"], [0, 3, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::BranchingRuleFactoryT"], [0, 3, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::BranchingRuleFactoryT"], [0, 4, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [0, 4, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", "idol::BranchAndBound::with_infeasible_or_unbounded_info"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", "idol::BranchAndBound::with_infeasible_or_unbounded_info::t_value"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound20with_iteration_limitEj", "idol::BranchAndBound::with_iteration_limit"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound20with_iteration_limitEj", "idol::BranchAndBound::with_iteration_limit::t_iteration_count_limit"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound11with_loggerERKN4Logs14BranchAndBound7FactoryI5NodeTEE", "idol::BranchAndBound::with_logger"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound11with_loggerERKN4Logs14BranchAndBound7FactoryI5NodeTEE", "idol::BranchAndBound::with_logger::t_log_factory"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound9with_logsEb", "idol::BranchAndBound::with_logs"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound9with_logsEb", "idol::BranchAndBound::with_logs::t_value"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::with_node_optimizer"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::with_node_optimizer::t_node_optimizer"], [0, 2, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule"], [0, 2, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", "idol::BranchAndBound::with_node_selection_rule"], [0, 3, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::NodeSelectionRuleFactoryT"], [0, 3, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::NodeSelectionRuleFactoryT"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", "idol::BranchAndBound::with_node_selection_rule::t_node_selection"], [0, 4, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::t_node_selection_rule"], [0, 4, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::t_node_selection_rule"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound13with_presolveEb", "idol::BranchAndBound::with_presolve"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound13with_presolveEb", "idol::BranchAndBound::with_presolve::t_value"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", "idol::BranchAndBound::with_relative_gap_tolerance"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", "idol::BranchAndBound::with_relative_gap_tolerance::t_relative_gap_tolerance"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound12with_scalingEb", "idol::BranchAndBound::with_scaling"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound12with_scalingEb", "idol::BranchAndBound::with_scaling::t_value"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", "idol::BranchAndBound::with_subtree_depth"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", "idol::BranchAndBound::with_subtree_depth::t_depth"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", "idol::BranchAndBound::with_thread_limit"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", "idol::BranchAndBound::with_thread_limit::t_max_n_threads"], [0, 2, 1, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", "idol::BranchAndBound::with_time_limit"], [0, 4, 1, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", "idol::BranchAndBound::with_time_limit::t_time_limit"], [1, 1, 1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", "idol::BranchAndBoundCallback"], [1, 3, 1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", "idol::BranchAndBoundCallback::NodeInfoT"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_lazy_cut"], [1, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_lazy_cut::t_cut"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_user_cut"], [1, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_user_cut::t_cut"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback10best_boundEv", "idol::BranchAndBoundCallback::best_bound"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback8best_objEv", "idol::BranchAndBoundCallback::best_obj"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback10initializeEv", "idol::BranchAndBoundCallback::initialize"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback21log_after_terminationEv", "idol::BranchAndBoundCallback::log_after_termination"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback4nodeEv", "idol::BranchAndBoundCallback::node"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", "idol::BranchAndBoundCallback::operator()"], [1, 4, 1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", "idol::BranchAndBoundCallback::operator()::t_event"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback14original_modelEv", "idol::BranchAndBoundCallback::original_model"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback10relaxationEv", "idol::BranchAndBoundCallback::relaxation"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback20side_effect_registryEv", "idol::BranchAndBoundCallback::side_effect_registry"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", "idol::BranchAndBoundCallback::submit_bound"], [1, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", "idol::BranchAndBoundCallback::submit_bound::t_bound"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", "idol::BranchAndBoundCallback::submit_heuristic_solution"], [1, 4, 1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", "idol::BranchAndBoundCallback::submit_heuristic_solution::t_info"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback9terminateEv", "idol::BranchAndBoundCallback::terminate"], [1, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback4timeEv", "idol::BranchAndBoundCallback::time"], [1, 2, 1, "_CPPv4N4idol22BranchAndBoundCallbackD0Ev", "idol::BranchAndBoundCallback::~BranchAndBoundCallback"], [2, 1, 1, "_CPPv4I0EN4idol29BranchAndBoundCallbackFactoryE", "idol::BranchAndBoundCallbackFactory"], [2, 3, 1, "_CPPv4I0EN4idol29BranchAndBoundCallbackFactoryE", "idol::BranchAndBoundCallbackFactory::NodeInfoT"], [2, 2, 1, "_CPPv4NK4idol29BranchAndBoundCallbackFactory5cloneEv", "idol::BranchAndBoundCallbackFactory::clone"], [2, 2, 1, "_CPPv4N4idol29BranchAndBoundCallbackFactoryclEv", "idol::BranchAndBoundCallbackFactory::operator()"], [2, 2, 1, "_CPPv4N4idol29BranchAndBoundCallbackFactoryD0Ev", "idol::BranchAndBoundCallbackFactory::~BranchAndBoundCallbackFactory"], [12, 1, 1, "_CPPv4N4idol12BreadthFirstE", "idol::BreadthFirst"], [12, 1, 1, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", "idol::BreadthFirst::Strategy"], [12, 3, 1, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", "idol::BreadthFirst::Strategy::NodeT"], [12, 2, 1, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", "idol::BreadthFirst::Strategy::Strategy"], [12, 4, 1, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", "idol::BreadthFirst::Strategy::Strategy::t_parent"], [12, 2, 1, "_CPPv4NK4idol12BreadthFirst8Strategy5cloneEv", "idol::BreadthFirst::Strategy::clone"], [12, 2, 1, "_CPPv4NK4idol12BreadthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BreadthFirst::Strategy::operator()"], [12, 4, 1, "_CPPv4NK4idol12BreadthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BreadthFirst::Strategy::operator()::t_parent"], [70, 1, 1, "_CPPv4N4idol8CallbackE", "idol::Callback"], [70, 2, 1, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", "idol::Callback::add_lazy_cut"], [70, 4, 1, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", "idol::Callback::add_lazy_cut::t_cut"], [70, 2, 1, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", "idol::Callback::add_user_cut"], [70, 4, 1, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", "idol::Callback::add_user_cut::t_cut"], [70, 2, 1, "_CPPv4NK4idol8Callback10best_boundEv", "idol::Callback::best_bound"], [70, 2, 1, "_CPPv4NK4idol8Callback8best_objEv", "idol::Callback::best_obj"], [70, 2, 1, "_CPPv4N4idol8CallbackclE13CallbackEvent", "idol::Callback::operator()"], [70, 4, 1, "_CPPv4N4idol8CallbackclE13CallbackEvent", "idol::Callback::operator()::t_event"], [70, 2, 1, "_CPPv4NK4idol8Callback14original_modelEv", "idol::Callback::original_model"], [70, 2, 1, "_CPPv4NK4idol8Callback15primal_solutionEv", "idol::Callback::primal_solution"], [70, 2, 1, "_CPPv4N4idol8Callback25submit_heuristic_solutionERKN8Solution6PrimalE", "idol::Callback::submit_heuristic_solution"], [70, 4, 1, "_CPPv4N4idol8Callback25submit_heuristic_solutionERKN8Solution6PrimalE", "idol::Callback::submit_heuristic_solution::t_solution"], [70, 2, 1, "_CPPv4N4idol8Callback9terminateEv", "idol::Callback::terminate"], [70, 2, 1, "_CPPv4NK4idol8Callback4timeEv", "idol::Callback::time"], [70, 2, 1, "_CPPv4N4idol8CallbackD0Ev", "idol::Callback::~Callback"], [82, 6, 1, "_CPPv4N4idol13CallbackEventE", "idol::CallbackEvent"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", "idol::CallbackEvent::IncumbentSolution"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", "idol::CallbackEvent::InvalidSolution"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", "idol::CallbackEvent::NodeLoaded"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent14PrunedSolutionE", "idol::CallbackEvent::PrunedSolution"], [71, 1, 1, "_CPPv4N4idol15CallbackFactoryE", "idol::CallbackFactory"], [71, 2, 1, "_CPPv4NK4idol15CallbackFactory5cloneEv", "idol::CallbackFactory::clone"], [71, 2, 1, "_CPPv4N4idol15CallbackFactoryclEv", "idol::CallbackFactory::operator()"], [71, 2, 1, "_CPPv4N4idol15CallbackFactoryD0Ev", "idol::CallbackFactory::~CallbackFactory"], [36, 1, 1, "_CPPv4N4idol6ColumnE", "idol::Column"], [36, 2, 1, "_CPPv4N4idol6Column6ColumnERK6Column", "idol::Column::Column"], [36, 2, 1, "_CPPv4N4idol6Column6ColumnERK8Constant", "idol::Column::Column"], [36, 2, 1, "_CPPv4N4idol6Column6ColumnERR6Column", "idol::Column::Column"], [36, 2, 1, "_CPPv4N4idol6Column6ColumnERR8Constant", "idol::Column::Column"], [36, 2, 1, "_CPPv4N4idol6Column6ColumnEv", "idol::Column::Column"], [36, 4, 1, "_CPPv4N4idol6Column6ColumnERK8Constant", "idol::Column::Column::t_obj"], [36, 4, 1, "_CPPv4N4idol6Column6ColumnERR8Constant", "idol::Column::Column::t_obj"], [36, 4, 1, "_CPPv4N4idol6Column6ColumnERK6Column", "idol::Column::Column::t_src"], [36, 4, 1, "_CPPv4N4idol6Column6ColumnERR6Column", "idol::Column::Column::t_src"], [36, 7, 1, "_CPPv4N4idol6Column11EmptyColumnE", "idol::Column::EmptyColumn"], [36, 2, 1, "_CPPv4NK4idol6Column3fixERKN8Solution6PrimalE", "idol::Column::fix"], [36, 4, 1, "_CPPv4NK4idol6Column3fixERKN8Solution6PrimalE", "idol::Column::fix::t_primals"], [36, 2, 1, "_CPPv4N4idol6Column6linearEv", "idol::Column::linear"], [36, 2, 1, "_CPPv4NK4idol6Column6linearEv", "idol::Column::linear"], [36, 2, 1, "_CPPv4N4idol6Column3objEv", "idol::Column::obj"], [36, 2, 1, "_CPPv4NK4idol6Column3objEv", "idol::Column::obj"], [36, 2, 1, "_CPPv4N4idol6Column13obj_quadraticEv", "idol::Column::obj_quadratic"], [36, 2, 1, "_CPPv4NK4idol6Column13obj_quadraticEv", "idol::Column::obj_quadratic"], [36, 2, 1, "_CPPv4N4idol6ColumnmLEd", "idol::Column::operator*="], [36, 4, 1, "_CPPv4N4idol6ColumnmLEd", "idol::Column::operator*=::t_rhs"], [36, 2, 1, "_CPPv4N4idol6ColumnpLERK6Column", "idol::Column::operator+="], [36, 4, 1, "_CPPv4N4idol6ColumnpLERK6Column", "idol::Column::operator+=::t_rhs"], [36, 2, 1, "_CPPv4N4idol6ColumnmIERK6Column", "idol::Column::operator-="], [36, 4, 1, "_CPPv4N4idol6ColumnmIERK6Column", "idol::Column::operator-=::t_rhs"], [36, 2, 1, "_CPPv4N4idol6ColumnaSERK6Column", "idol::Column::operator="], [36, 2, 1, "_CPPv4N4idol6ColumnaSERR6Column", "idol::Column::operator="], [36, 4, 1, "_CPPv4N4idol6ColumnaSERK6Column", "idol::Column::operator=::t_src"], [36, 4, 1, "_CPPv4N4idol6ColumnaSERR6Column", "idol::Column::operator=::t_src"], [36, 2, 1, "_CPPv4N4idol6Column9quadraticEv", "idol::Column::quadratic"], [36, 2, 1, "_CPPv4NK4idol6Column9quadraticEv", "idol::Column::quadratic"], [36, 2, 1, "_CPPv4N4idol6Column10set_linearERK7LinExprI3CtrE", "idol::Column::set_linear"], [36, 2, 1, "_CPPv4N4idol6Column10set_linearERR7LinExprI3CtrE", "idol::Column::set_linear"], [36, 4, 1, "_CPPv4N4idol6Column10set_linearERK7LinExprI3CtrE", "idol::Column::set_linear::t_lin_expr"], [36, 4, 1, "_CPPv4N4idol6Column10set_linearERR7LinExprI3CtrE", "idol::Column::set_linear::t_lin_expr"], [36, 2, 1, "_CPPv4N4idol6Column7set_objERK8Constant", "idol::Column::set_obj"], [36, 2, 1, "_CPPv4N4idol6Column7set_objERR8Constant", "idol::Column::set_obj"], [36, 4, 1, "_CPPv4N4idol6Column7set_objERK8Constant", "idol::Column::set_obj::t_obj"], [36, 4, 1, "_CPPv4N4idol6Column7set_objERR8Constant", "idol::Column::set_obj::t_obj"], [36, 2, 1, "_CPPv4N4idol6Column13set_quadraticERK8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic"], [36, 2, 1, "_CPPv4N4idol6Column13set_quadraticERR8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic"], [36, 4, 1, "_CPPv4N4idol6Column13set_quadraticERK8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic::t_quad_expr"], [36, 4, 1, "_CPPv4N4idol6Column13set_quadraticERR8QuadExprI3Ctr3VarE", "idol::Column::set_quadratic::t_quad_expr"], [37, 1, 1, "_CPPv4N4idol8ConstantE", "idol::Constant"], [37, 2, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant"], [37, 2, 1, "_CPPv4N4idol8Constant8ConstantERK5Paramd", "idol::Constant::Constant"], [37, 2, 1, "_CPPv4N4idol8Constant8ConstantERK8Constant", "idol::Constant::Constant"], [37, 2, 1, "_CPPv4N4idol8Constant8ConstantERR8Constant", "idol::Constant::Constant"], [37, 2, 1, "_CPPv4N4idol8Constant8ConstantEd", "idol::Constant::Constant"], [37, 2, 1, "_CPPv4N4idol8Constant8ConstantEv", "idol::Constant::Constant"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantEd", "idol::Constant::Constant::t_constant"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5Paramd", "idol::Constant::Constant::t_param"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant::t_param_1"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant::t_param_2"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantERK8Constant", "idol::Constant::Constant::t_src"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5ParamRK5Paramd", "idol::Constant::Constant::t_value"], [37, 4, 1, "_CPPv4N4idol8Constant8ConstantERK5Paramd", "idol::Constant::Constant::t_value"], [37, 7, 1, "_CPPv4N4idol8Constant4ZeroE", "idol::Constant::Zero"], [37, 2, 1, "_CPPv4NK4idol8Constant12as_numericalEv", "idol::Constant::as_numerical"], [37, 2, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution4DualE", "idol::Constant::fix"], [37, 2, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution6PrimalE", "idol::Constant::fix"], [37, 4, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution4DualE", "idol::Constant::fix::t_duals"], [37, 4, 1, "_CPPv4NK4idol8Constant3fixERKN8Solution6PrimalE", "idol::Constant::fix::t_primals"], [37, 2, 1, "_CPPv4NK4idol8Constant3getERK5Param", "idol::Constant::get"], [37, 2, 1, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", "idol::Constant::get"], [37, 4, 1, "_CPPv4NK4idol8Constant3getERK5Param", "idol::Constant::get::t_param"], [37, 4, 1, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", "idol::Constant::get::t_param_1"], [37, 4, 1, "_CPPv4NK4idol8Constant3getERK5ParamRK5Param", "idol::Constant::get::t_param_2"], [37, 2, 1, "_CPPv4NK4idol8Constant12is_numericalEv", "idol::Constant::is_numerical"], [37, 2, 1, "_CPPv4NK4idol8Constant7is_zeroEv", "idol::Constant::is_zero"], [37, 2, 1, "_CPPv4N4idol8Constant6linearEv", "idol::Constant::linear"], [37, 2, 1, "_CPPv4NK4idol8Constant6linearEv", "idol::Constant::linear"], [37, 2, 1, "_CPPv4N4idol8Constant23multiply_with_precisionEdj", "idol::Constant::multiply_with_precision"], [37, 4, 1, "_CPPv4N4idol8Constant23multiply_with_precisionEdj", "idol::Constant::multiply_with_precision::t_factor"], [37, 4, 1, "_CPPv4N4idol8Constant23multiply_with_precisionEdj", "idol::Constant::multiply_with_precision::t_n_digits"], [37, 2, 1, "_CPPv4N4idol8Constant38multiply_with_precision_by_power_of_10Ejj", "idol::Constant::multiply_with_precision_by_power_of_10"], [37, 4, 1, "_CPPv4N4idol8Constant38multiply_with_precision_by_power_of_10Ejj", "idol::Constant::multiply_with_precision_by_power_of_10::t_exponent"], [37, 4, 1, "_CPPv4N4idol8Constant38multiply_with_precision_by_power_of_10Ejj", "idol::Constant::multiply_with_precision_by_power_of_10::t_n_digits"], [37, 2, 1, "_CPPv4NK4idol8Constant9numericalEv", "idol::Constant::numerical"], [37, 2, 1, "_CPPv4N4idol8ConstantmLEd", "idol::Constant::operator*="], [37, 4, 1, "_CPPv4N4idol8ConstantmLEd", "idol::Constant::operator*=::t_coefficient"], [37, 2, 1, "_CPPv4N4idol8ConstantpLERK5Param", "idol::Constant::operator+="], [37, 2, 1, "_CPPv4N4idol8ConstantpLERK8Constant", "idol::Constant::operator+="], [37, 2, 1, "_CPPv4N4idol8ConstantpLEd", "idol::Constant::operator+="], [37, 4, 1, "_CPPv4N4idol8ConstantpLERK5Param", "idol::Constant::operator+=::t_term"], [37, 4, 1, "_CPPv4N4idol8ConstantpLERK8Constant", "idol::Constant::operator+=::t_term"], [37, 4, 1, "_CPPv4N4idol8ConstantpLEd", "idol::Constant::operator+=::t_term"], [37, 2, 1, "_CPPv4N4idol8ConstantmIE5Param", "idol::Constant::operator-="], [37, 2, 1, "_CPPv4N4idol8ConstantmIERK8Constant", "idol::Constant::operator-="], [37, 2, 1, "_CPPv4N4idol8ConstantmIEd", "idol::Constant::operator-="], [37, 4, 1, "_CPPv4N4idol8ConstantmIE5Param", "idol::Constant::operator-=::t_term"], [37, 4, 1, "_CPPv4N4idol8ConstantmIERK8Constant", "idol::Constant::operator-=::t_term"], [37, 4, 1, "_CPPv4N4idol8ConstantmIEd", "idol::Constant::operator-=::t_term"], [37, 2, 1, "_CPPv4N4idol8ConstantdVEd", "idol::Constant::operator/="], [37, 4, 1, "_CPPv4N4idol8ConstantdVEd", "idol::Constant::operator/=::t_coefficient"], [37, 2, 1, "_CPPv4N4idol8ConstantaSERK8Constant", "idol::Constant::operator="], [37, 2, 1, "_CPPv4N4idol8ConstantaSERR8Constant", "idol::Constant::operator="], [37, 4, 1, "_CPPv4N4idol8ConstantaSERK8Constant", "idol::Constant::operator=::t_rhs"], [37, 2, 1, "_CPPv4N4idol8Constant9quadraticEv", "idol::Constant::quadratic"], [37, 2, 1, "_CPPv4NK4idol8Constant9quadraticEv", "idol::Constant::quadratic"], [37, 2, 1, "_CPPv4N4idol8Constant5roundEv", "idol::Constant::round"], [37, 2, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set"], [37, 2, 1, "_CPPv4N4idol8Constant3setERK5Paramd", "idol::Constant::set"], [37, 4, 1, "_CPPv4N4idol8Constant3setERK5Paramd", "idol::Constant::set::t_param"], [37, 4, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set::t_param_1"], [37, 4, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set::t_param_2"], [37, 4, 1, "_CPPv4N4idol8Constant3setERK5ParamRK5Paramd", "idol::Constant::set::t_value"], [37, 4, 1, "_CPPv4N4idol8Constant3setERK5Paramd", "idol::Constant::set::t_value"], [37, 2, 1, "_CPPv4N4idol8Constant13set_numericalEd", "idol::Constant::set_numerical"], [37, 4, 1, "_CPPv4N4idol8Constant13set_numericalEd", "idol::Constant::set_numerical::t_constant"], [37, 2, 1, "_CPPv4NK4idol8Constant4sizeEv", "idol::Constant::size"], [79, 5, 1, "_CPPv4N4idol7VarType10ContinuousE", "idol::Continuous"], [38, 1, 1, "_CPPv4N4idol3CtrE", "idol::Ctr"], [38, 2, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr"], [38, 2, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr"], [38, 2, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr"], [38, 2, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_constant"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_constant"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_env"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_env"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_env"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_env"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_name"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_name"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_name"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_name"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_temp_ctr"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_temp_ctr"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRK8ConstantNSt6stringE", "idol::Ctr::Ctr::t_type"], [38, 4, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypeRR8ConstantNSt6stringE", "idol::Ctr::Ctr::t_type"], [38, 2, 1, "_CPPv4NK4idol3Ctr3getERK10AnnotationI3Ctr6ValueTE", "idol::Ctr::get"], [38, 4, 1, "_CPPv4NK4idol3Ctr3getERK10AnnotationI3Ctr6ValueTE", "idol::Ctr::get::t_annotation"], [38, 2, 1, "_CPPv4NK4idol3Ctr2idEv", "idol::Ctr::id"], [38, 2, 1, "_CPPv4NK4idol3Ctr5is_inERK5Model", "idol::Ctr::is_in"], [38, 4, 1, "_CPPv4NK4idol3Ctr5is_inERK5Model", "idol::Ctr::is_in::t_model"], [38, 2, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector"], [38, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::I"], [38, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::N"], [38, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_constant"], [38, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_dim"], [38, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_env"], [38, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_name"], [38, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Ctr::make_vector::t_type"], [38, 2, 1, "_CPPv4NK4idol3Ctr4nameEv", "idol::Ctr::name"], [38, 2, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", "idol::Ctr::set"], [38, 4, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", "idol::Ctr::set::t_annotation"], [38, 4, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI3Ctr6ValueTEDpRR5ArgsT", "idol::Ctr::set::t_args"], [78, 6, 1, "_CPPv4N4idol7CtrTypeE", "idol::CtrType"], [78, 5, 1, "_CPPv4N4idol7CtrType5EqualE", "idol::CtrType::Equal"], [78, 5, 1, "_CPPv4N4idol7CtrType14GreaterOrEqualE", "idol::CtrType::GreaterOrEqual"], [78, 5, 1, "_CPPv4N4idol7CtrType11LessOrEqualE", "idol::CtrType::LessOrEqual"], [3, 1, 1, "_CPPv4I0EN4idol4Cuts13KnapsackCoverE", "idol::Cuts::KnapsackCover"], [3, 3, 1, "_CPPv4I0EN4idol4Cuts13KnapsackCoverE", "idol::Cuts::KnapsackCover::NodeInfoT"], [3, 1, 1, "_CPPv4N4idol4Cuts13KnapsackCover8StrategyE", "idol::Cuts::KnapsackCover::Strategy"], [3, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_apply_to_tree_nodes"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_max_cuts_factor"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_max_pass_root_node"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_use_lifting"], [3, 2, 1, "_CPPv4NK4idol4Cuts13KnapsackCover5cloneEv", "idol::Cuts::KnapsackCover::clone"], [3, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCoverclEv", "idol::Cuts::KnapsackCover::operator()"], [3, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover12with_liftingEb", "idol::Cuts::KnapsackCover::with_lifting"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover12with_liftingEb", "idol::Cuts::KnapsackCover::with_lifting::t_value"], [3, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover20with_max_cuts_factorEd", "idol::Cuts::KnapsackCover::with_max_cuts_factor"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover20with_max_cuts_factorEd", "idol::Cuts::KnapsackCover::with_max_cuts_factor::t_value"], [3, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover23with_max_pass_root_nodeEj", "idol::Cuts::KnapsackCover::with_max_pass_root_node"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover23with_max_pass_root_nodeEj", "idol::Cuts::KnapsackCover::with_max_pass_root_node::t_value"], [3, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover19with_tree_node_cutsEb", "idol::Cuts::KnapsackCover::with_tree_node_cuts"], [3, 4, 1, "_CPPv4N4idol4Cuts13KnapsackCover19with_tree_node_cutsEb", "idol::Cuts::KnapsackCover::with_tree_node_cuts::t_value"], [26, 1, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCostsE", "idol::DantzigWolfe::ArtificialCosts"], [26, 1, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8StrategyE", "idol::DantzigWolfe::ArtificialCosts::Strategy"], [26, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy::t_initial_costs"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy::t_max_updates_before_phase_I"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy::t_update_factor"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy10best_boundEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::best_bound"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy8best_objEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::best_obj"], [26, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::ArtificialCosts::Strategy::execute"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::ArtificialCosts::Strategy::execute::t_parent"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy15primal_solutionEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::primal_solution"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6reasonEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::reason"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6statusEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::status"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts5cloneEv", "idol::DantzigWolfe::ArtificialCosts::clone"], [26, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCostsclEv", "idol::DantzigWolfe::ArtificialCosts::operator()"], [26, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_initial_costsEd", "idol::DantzigWolfe::ArtificialCosts::with_initial_costs"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_initial_costsEd", "idol::DantzigWolfe::ArtificialCosts::with_initial_costs::t_value"], [26, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts31with_max_updates_before_phase_IEj", "idol::DantzigWolfe::ArtificialCosts::with_max_updates_before_phase_I"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts31with_max_updates_before_phase_IEj", "idol::DantzigWolfe::ArtificialCosts::with_max_updates_before_phase_I::t_value"], [26, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_update_factorEd", "idol::DantzigWolfe::ArtificialCosts::with_update_factor"], [26, 4, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_update_factorEd", "idol::DantzigWolfe::ArtificialCosts::with_update_factor::t_value"], [28, 1, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricingE", "idol::DantzigWolfe::FarkasPricing"], [28, 1, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8StrategyE", "idol::DantzigWolfe::FarkasPricing::Strategy"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy10best_boundEv", "idol::DantzigWolfe::FarkasPricing::Strategy::best_bound"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy8best_objEv", "idol::DantzigWolfe::FarkasPricing::Strategy::best_obj"], [28, 2, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::FarkasPricing::Strategy::execute"], [28, 4, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::FarkasPricing::Strategy::execute::t_parent"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy15primal_solutionEv", "idol::DantzigWolfe::FarkasPricing::Strategy::primal_solution"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6reasonEv", "idol::DantzigWolfe::FarkasPricing::Strategy::reason"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6statusEv", "idol::DantzigWolfe::FarkasPricing::Strategy::status"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing5cloneEv", "idol::DantzigWolfe::FarkasPricing::clone"], [28, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricingclEv", "idol::DantzigWolfe::FarkasPricing::operator()"], [32, 1, 1, "_CPPv4N4idol12DantzigWolfe5NeameE", "idol::DantzigWolfe::Neame"], [32, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame5NeameEd", "idol::DantzigWolfe::Neame::Neame"], [32, 4, 1, "_CPPv4N4idol12DantzigWolfe5Neame5NeameEd", "idol::DantzigWolfe::Neame::Neame::t_initial_factor"], [32, 1, 1, "_CPPv4N4idol12DantzigWolfe5Neame8StrategyE", "idol::DantzigWolfe::Neame::Strategy"], [32, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy8StrategyEd", "idol::DantzigWolfe::Neame::Strategy::Strategy"], [32, 4, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy8StrategyEd", "idol::DantzigWolfe::Neame::Strategy::Strategy::t_initial_factor"], [32, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy30compute_smoothed_dual_solutionERKN8Solution4DualE", "idol::DantzigWolfe::Neame::Strategy::compute_smoothed_dual_solution"], [32, 4, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy30compute_smoothed_dual_solutionERKN8Solution4DualE", "idol::DantzigWolfe::Neame::Strategy::compute_smoothed_dual_solution::t_master_dual"], [32, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy10initializeEv", "idol::DantzigWolfe::Neame::Strategy::initialize"], [32, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy23update_stability_centerERKN8Solution4DualE", "idol::DantzigWolfe::Neame::Strategy::update_stability_center"], [32, 4, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy23update_stability_centerERKN8Solution4DualE", "idol::DantzigWolfe::Neame::Strategy::update_stability_center::t_master_dual"], [32, 2, 1, "_CPPv4NK4idol12DantzigWolfe5Neame5cloneEv", "idol::DantzigWolfe::Neame::clone"], [32, 2, 1, "_CPPv4NK4idol12DantzigWolfe5NeameclEv", "idol::DantzigWolfe::Neame::operator()"], [33, 1, 1, "_CPPv4N4idol12DantzigWolfe7WentgesE", "idol::DantzigWolfe::Wentges"], [33, 1, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8StrategyE", "idol::DantzigWolfe::Wentges::Strategy"], [33, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy8StrategyEd", "idol::DantzigWolfe::Wentges::Strategy::Strategy"], [33, 4, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy8StrategyEd", "idol::DantzigWolfe::Wentges::Strategy::Strategy::t_initial_factor"], [33, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy30compute_smoothed_dual_solutionERKN8Solution4DualE", "idol::DantzigWolfe::Wentges::Strategy::compute_smoothed_dual_solution"], [33, 4, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy30compute_smoothed_dual_solutionERKN8Solution4DualE", "idol::DantzigWolfe::Wentges::Strategy::compute_smoothed_dual_solution::t_master_dual"], [33, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy10initializeEv", "idol::DantzigWolfe::Wentges::Strategy::initialize"], [33, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy23update_stability_centerERKN8Solution4DualE", "idol::DantzigWolfe::Wentges::Strategy::update_stability_center"], [33, 4, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy23update_stability_centerERKN8Solution4DualE", "idol::DantzigWolfe::Wentges::Strategy::update_stability_center::t_master_dual"], [33, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges7WentgesEd", "idol::DantzigWolfe::Wentges::Wentges"], [33, 4, 1, "_CPPv4N4idol12DantzigWolfe7Wentges7WentgesEd", "idol::DantzigWolfe::Wentges::Wentges::t_initial_factor"], [33, 2, 1, "_CPPv4NK4idol12DantzigWolfe7Wentges5cloneEv", "idol::DantzigWolfe::Wentges::clone"], [33, 2, 1, "_CPPv4NK4idol12DantzigWolfe7WentgesclEv", "idol::DantzigWolfe::Wentges::operator()"], [27, 1, 1, "_CPPv4N4idol25DantzigWolfeDecompositionE", "idol::DantzigWolfeDecomposition"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE10AnnotationI3VarjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK25DantzigWolfeDecomposition", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionEv", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE10AnnotationI3VarjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_ctr_decomposition"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_decomposition"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK25DantzigWolfeDecomposition", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_src"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationI3CtrjE10AnnotationI3VarjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_var_decomposition"], [27, 2, 1, "_CPPv4I0EN4idol25DantzigWolfeDecomposition2asER1Tv", "idol::DantzigWolfeDecomposition::as"], [27, 2, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2asERK1Tv", "idol::DantzigWolfeDecomposition::as"], [27, 3, 1, "_CPPv4I0EN4idol25DantzigWolfeDecomposition2asER1Tv", "idol::DantzigWolfeDecomposition::as::T"], [27, 3, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2asERK1Tv", "idol::DantzigWolfeDecomposition::as::T"], [27, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition5cloneEv", "idol::DantzigWolfeDecomposition::clone"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_conditional_value"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_conditional_value"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_else"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_if"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_if"], [27, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition20get_sub_problem_specEj", "idol::DantzigWolfeDecomposition::get_sub_problem_spec"], [27, 4, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition20get_sub_problem_specEj", "idol::DantzigWolfeDecomposition::get_sub_problem_spec::t_id"], [27, 2, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2isEbv", "idol::DantzigWolfeDecomposition::is"], [27, 3, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2isEbv", "idol::DantzigWolfeDecomposition::is::T"], [27, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", "idol::DantzigWolfeDecomposition::operator()"], [27, 4, 1, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", "idol::DantzigWolfeDecomposition::operator()::t_model"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_absolute_gap_tolerance"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", "idol::DantzigWolfeDecomposition::with_best_bound_stop"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", "idol::DantzigWolfeDecomposition::with_best_bound_stop::t_best_bound_stop"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", "idol::DantzigWolfeDecomposition::with_best_obj_stop"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", "idol::DantzigWolfeDecomposition::with_best_obj_stop::t_user_best_obj"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition29with_default_sub_problem_specEN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_default_sub_problem_spec"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition29with_default_sub_problem_specEN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_default_sub_problem_spec::t_sub_problem"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationERKN12DantzigWolfe31DualPriceSmoothingStabilizationE", "idol::DantzigWolfeDecomposition::with_dual_price_smoothing_stabilization"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationERKN12DantzigWolfe31DualPriceSmoothingStabilizationE", "idol::DantzigWolfeDecomposition::with_dual_price_smoothing_stabilization::t_stabilization"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition19with_hard_branchingEb", "idol::DantzigWolfeDecomposition::with_hard_branching"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition19with_hard_branchingEb", "idol::DantzigWolfeDecomposition::with_hard_branching::t_value"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_infeasibility_strategyERKN12DantzigWolfe28InfeasibilityStrategyFactoryE", "idol::DantzigWolfeDecomposition::with_infeasibility_strategy"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_infeasibility_strategyERKN12DantzigWolfe28InfeasibilityStrategyFactoryE", "idol::DantzigWolfeDecomposition::with_infeasibility_strategy::t_strategy"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition31with_infeasible_columns_removalEb", "idol::DantzigWolfeDecomposition::with_infeasible_columns_removal"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition31with_infeasible_columns_removalEb", "idol::DantzigWolfeDecomposition::with_infeasible_columns_removal::t_value"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", "idol::DantzigWolfeDecomposition::with_infeasible_or_unbounded_info"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", "idol::DantzigWolfeDecomposition::with_infeasible_or_unbounded_info::t_value"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_iteration_limitEj", "idol::DantzigWolfeDecomposition::with_iteration_limit"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_iteration_limitEj", "idol::DantzigWolfeDecomposition::with_iteration_limit::t_iteration_count_limit"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11with_loggerERKN4Logs12DantzigWolfe7FactoryE", "idol::DantzigWolfeDecomposition::with_logger"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11with_loggerERKN4Logs12DantzigWolfe7FactoryE", "idol::DantzigWolfeDecomposition::with_logger::t_logger"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition9with_logsEb", "idol::DantzigWolfeDecomposition::with_logs"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition9with_logsEb", "idol::DantzigWolfeDecomposition::with_logs::t_value"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_master_optimizer"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_master_optimizer::t_optimizer_factory"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_max_parallel_sub_problemsEj", "idol::DantzigWolfeDecomposition::with_max_parallel_sub_problems"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_max_parallel_sub_problemsEj", "idol::DantzigWolfeDecomposition::with_max_parallel_sub_problems::t_n_sub_problems"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", "idol::DantzigWolfeDecomposition::with_presolve"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", "idol::DantzigWolfeDecomposition::with_presolve::t_value"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_relative_gap_tolerance"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_relative_gap_tolerance::t_relative_gap_tolerance"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_sub_problem_spec"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_sub_problem_spec::t_id"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_sub_problem_spec::t_sub_problem"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", "idol::DantzigWolfeDecomposition::with_thread_limit"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", "idol::DantzigWolfeDecomposition::with_thread_limit::t_max_n_threads"], [27, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", "idol::DantzigWolfeDecomposition::with_time_limit"], [27, 4, 1, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", "idol::DantzigWolfeDecomposition::with_time_limit::t_time_limit"], [13, 1, 1, "_CPPv4N4idol10DepthFirstE", "idol::DepthFirst"], [13, 1, 1, "_CPPv4I0EN4idol10DepthFirst8StrategyE", "idol::DepthFirst::Strategy"], [13, 3, 1, "_CPPv4I0EN4idol10DepthFirst8StrategyE", "idol::DepthFirst::Strategy::NodeT"], [13, 2, 1, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", "idol::DepthFirst::Strategy::Strategy"], [13, 4, 1, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", "idol::DepthFirst::Strategy::Strategy::t_parent"], [13, 2, 1, "_CPPv4NK4idol10DepthFirst8Strategy5cloneEv", "idol::DepthFirst::Strategy::clone"], [13, 2, 1, "_CPPv4NK4idol10DepthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::DepthFirst::Strategy::operator()"], [13, 4, 1, "_CPPv4NK4idol10DepthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::DepthFirst::Strategy::operator()::t_parent"], [39, 1, 1, "_CPPv4N4idol3EnvE", "idol::Env"], [39, 2, 1, "_CPPv4N4idol3Env3EnvEv", "idol::Env::Env"], [39, 2, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]"], [39, 3, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]::T"], [39, 4, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]::t_object"], [78, 5, 1, "_CPPv4N4idol7CtrType5EqualE", "idol::Equal"], [40, 1, 1, "_CPPv4I00EN4idol4ExprE", "idol::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK4Expr", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK4Key1", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK5Param", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1E", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK8Constant", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERK8QuadExprI4Key1E", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERR4Expr", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1E", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERR8Constant", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprERR8QuadExprI4Key1E", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprEd", "idol::Expr::Expr"], [40, 2, 1, "_CPPv4N4idol4Expr4ExprEv", "idol::Expr::Expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr::t_constant"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr::t_constant"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1E", "idol::Expr::Expr::t_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK8Constant", "idol::Expr::Expr::t_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK8QuadExprI4Key1E", "idol::Expr::Expr::t_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1E", "idol::Expr::Expr::t_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERR8Constant", "idol::Expr::Expr::t_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERR8QuadExprI4Key1E", "idol::Expr::Expr::t_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr::t_lin_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr::t_lin_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprEd", "idol::Expr::Expr::t_num"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK5Param", "idol::Expr::Expr::t_param"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK7LinExprI4Key1ERK8QuadExprI4Key14Key2ERK8Constant", "idol::Expr::Expr::t_quad_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERR7LinExprI4Key1ERR8QuadExprI4Key14Key2ERR8Constant", "idol::Expr::Expr::t_quad_expr"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK4Expr", "idol::Expr::Expr::t_src"], [40, 4, 1, "_CPPv4N4idol4Expr4ExprERK4Key1", "idol::Expr::Expr::t_var"], [40, 3, 1, "_CPPv4I00EN4idol4ExprE", "idol::Expr::Key1"], [40, 3, 1, "_CPPv4I00EN4idol4ExprE", "idol::Expr::Key2"], [40, 2, 1, "_CPPv4N4idol4Expr5clearEv", "idol::Expr::clear"], [40, 2, 1, "_CPPv4N4idol4Expr8constantEv", "idol::Expr::constant"], [40, 2, 1, "_CPPv4NK4idol4Expr8constantEv", "idol::Expr::constant"], [40, 2, 1, "_CPPv4NK4idol4Expr3fixERKN8Solution6PrimalE", "idol::Expr::fix"], [40, 4, 1, "_CPPv4NK4idol4Expr3fixERKN8Solution6PrimalE", "idol::Expr::fix::t_primals"], [40, 2, 1, "_CPPv4NK4idol4Expr3gcdEv", "idol::Expr::gcd"], [40, 2, 1, "_CPPv4NK4idol4Expr7is_zeroEv", "idol::Expr::is_zero"], [40, 2, 1, "_CPPv4N4idol4Expr6linearEv", "idol::Expr::linear"], [40, 2, 1, "_CPPv4NK4idol4Expr6linearEv", "idol::Expr::linear"], [40, 2, 1, "_CPPv4N4idol4Expr23multiply_with_precisionEdj", "idol::Expr::multiply_with_precision"], [40, 4, 1, "_CPPv4N4idol4Expr23multiply_with_precisionEdj", "idol::Expr::multiply_with_precision::t_factor"], [40, 4, 1, "_CPPv4N4idol4Expr23multiply_with_precisionEdj", "idol::Expr::multiply_with_precision::t_n_digits"], [40, 2, 1, "_CPPv4N4idol4Expr38multiply_with_precision_by_power_of_10Ejj", "idol::Expr::multiply_with_precision_by_power_of_10"], [40, 4, 1, "_CPPv4N4idol4Expr38multiply_with_precision_by_power_of_10Ejj", "idol::Expr::multiply_with_precision_by_power_of_10::t_exponent"], [40, 4, 1, "_CPPv4N4idol4Expr38multiply_with_precision_by_power_of_10Ejj", "idol::Expr::multiply_with_precision_by_power_of_10::t_n_digits"], [40, 2, 1, "_CPPv4N4idol4ExprmLEd", "idol::Expr::operator*="], [40, 4, 1, "_CPPv4N4idol4ExprmLEd", "idol::Expr::operator*=::t_rhs"], [40, 2, 1, "_CPPv4N4idol4ExprpLERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator+="], [40, 4, 1, "_CPPv4N4idol4ExprpLERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator+=::t_rhs"], [40, 2, 1, "_CPPv4N4idol4ExprmIERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator-="], [40, 4, 1, "_CPPv4N4idol4ExprmIERK4ExprIN4idol3VarEN4idol3VarEE", "idol::Expr::operator-=::t_rhs"], [40, 2, 1, "_CPPv4N4idol4ExprdVEd", "idol::Expr::operator/="], [40, 4, 1, "_CPPv4N4idol4ExprdVEd", "idol::Expr::operator/=::t_rhs"], [40, 2, 1, "_CPPv4N4idol4ExpraSERK4Expr", "idol::Expr::operator="], [40, 2, 1, "_CPPv4N4idol4ExpraSERR4Expr", "idol::Expr::operator="], [40, 4, 1, "_CPPv4N4idol4ExpraSERK4Expr", "idol::Expr::operator=::t_rhs"], [40, 2, 1, "_CPPv4N4idol4Expr9quadraticEv", "idol::Expr::quadratic"], [40, 2, 1, "_CPPv4NK4idol4Expr9quadraticEv", "idol::Expr::quadratic"], [40, 2, 1, "_CPPv4N4idol4Expr5roundEv", "idol::Expr::round"], [40, 2, 1, "_CPPv4N4idol4Expr17scale_to_integersEj", "idol::Expr::scale_to_integers"], [40, 4, 1, "_CPPv4N4idol4Expr17scale_to_integersEj", "idol::Expr::scale_to_integers::t_n_significant_digits"], [16, 1, 1, "_CPPv4N4idol20FirstInfeasibleFoundE", "idol::FirstInfeasibleFound"], [16, 2, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound"], [16, 2, 1, "_CPPv4N4idol20FirstInfeasibleFound20FirstInfeasibleFoundEv", "idol::FirstInfeasibleFound::FirstInfeasibleFound"], [16, 3, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound::IteratorT"], [16, 4, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound::t_begin"], [16, 4, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound::t_end"], [16, 1, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound8StrategyE", "idol::FirstInfeasibleFound::Strategy"], [16, 3, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound8StrategyE", "idol::FirstInfeasibleFound::Strategy::NodeInfoT"], [16, 2, 1, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyERK20FirstInfeasibleFound", "idol::FirstInfeasibleFound::Strategy::Strategy"], [16, 2, 1, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyEv", "idol::FirstInfeasibleFound::Strategy::Strategy"], [16, 4, 1, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyERK20FirstInfeasibleFound", "idol::FirstInfeasibleFound::Strategy::Strategy::t_parent"], [16, 2, 1, "_CPPv4NK4idol20FirstInfeasibleFound8Strategy5cloneEv", "idol::FirstInfeasibleFound::Strategy::clone"], [16, 2, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::FirstInfeasibleFound::Strategy::operator()"], [16, 2, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::FirstInfeasibleFound::Strategy::operator()"], [16, 4, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::FirstInfeasibleFound::Strategy::operator()::t_parent"], [16, 4, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::FirstInfeasibleFound::Strategy::operator()::t_parent"], [55, 1, 1, "_CPPv4N4idol4GLPKE", "idol::GLPK"], [55, 2, 1, "_CPPv4N4idol4GLPK20ContinuousRelaxationEv", "idol::GLPK::ContinuousRelaxation"], [55, 2, 1, "_CPPv4N4idol4GLPK4GLPKERK4GLPK", "idol::GLPK::GLPK"], [55, 2, 1, "_CPPv4N4idol4GLPK4GLPKERR4GLPK", "idol::GLPK::GLPK"], [55, 2, 1, "_CPPv4N4idol4GLPK4GLPKEv", "idol::GLPK::GLPK"], [55, 2, 1, "_CPPv4I0EN4idol4GLPK2asER1Tv", "idol::GLPK::as"], [55, 2, 1, "_CPPv4I0ENK4idol4GLPK2asERK1Tv", "idol::GLPK::as"], [55, 3, 1, "_CPPv4I0EN4idol4GLPK2asER1Tv", "idol::GLPK::as::T"], [55, 3, 1, "_CPPv4I0ENK4idol4GLPK2asERK1Tv", "idol::GLPK::as::T"], [55, 2, 1, "_CPPv4NK4idol4GLPK5cloneEv", "idol::GLPK::clone"], [55, 2, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional"], [55, 2, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional"], [55, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_conditional_value"], [55, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_conditional_value"], [55, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_else"], [55, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_if"], [55, 4, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_if"], [55, 2, 1, "_CPPv4I0ENK4idol4GLPK2isEbv", "idol::GLPK::is"], [55, 3, 1, "_CPPv4I0ENK4idol4GLPK2isEbv", "idol::GLPK::is::T"], [55, 2, 1, "_CPPv4NK4idol4GLPKclERK5Model", "idol::GLPK::operator()"], [55, 4, 1, "_CPPv4NK4idol4GLPKclERK5Model", "idol::GLPK::operator()::t_model"], [55, 2, 1, "_CPPv4N4idol4GLPKaSERK4GLPK", "idol::GLPK::operator="], [55, 2, 1, "_CPPv4N4idol4GLPKaSERR4GLPK", "idol::GLPK::operator="], [55, 2, 1, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::GLPK::read_from_file"], [55, 4, 1, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::GLPK::read_from_file::t_env"], [55, 4, 1, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::GLPK::read_from_file::t_filename"], [55, 2, 1, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", "idol::GLPK::with_absolute_gap_tolerance"], [55, 4, 1, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", "idol::GLPK::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [55, 2, 1, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", "idol::GLPK::with_best_bound_stop"], [55, 4, 1, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", "idol::GLPK::with_best_bound_stop::t_best_bound_stop"], [55, 2, 1, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", "idol::GLPK::with_best_obj_stop"], [55, 4, 1, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", "idol::GLPK::with_best_obj_stop::t_user_best_obj"], [55, 2, 1, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", "idol::GLPK::with_infeasible_or_unbounded_info"], [55, 4, 1, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", "idol::GLPK::with_infeasible_or_unbounded_info::t_value"], [55, 2, 1, "_CPPv4N4idol4GLPK20with_iteration_limitEj", "idol::GLPK::with_iteration_limit"], [55, 4, 1, "_CPPv4N4idol4GLPK20with_iteration_limitEj", "idol::GLPK::with_iteration_limit::t_iteration_count_limit"], [55, 2, 1, "_CPPv4N4idol4GLPK9with_logsEb", "idol::GLPK::with_logs"], [55, 4, 1, "_CPPv4N4idol4GLPK9with_logsEb", "idol::GLPK::with_logs::t_value"], [55, 2, 1, "_CPPv4N4idol4GLPK13with_presolveEb", "idol::GLPK::with_presolve"], [55, 4, 1, "_CPPv4N4idol4GLPK13with_presolveEb", "idol::GLPK::with_presolve::t_value"], [55, 2, 1, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", "idol::GLPK::with_relative_gap_tolerance"], [55, 4, 1, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", "idol::GLPK::with_relative_gap_tolerance::t_relative_gap_tolerance"], [55, 2, 1, "_CPPv4N4idol4GLPK17with_thread_limitEj", "idol::GLPK::with_thread_limit"], [55, 4, 1, "_CPPv4N4idol4GLPK17with_thread_limitEj", "idol::GLPK::with_thread_limit::t_max_n_threads"], [55, 2, 1, "_CPPv4N4idol4GLPK15with_time_limitEd", "idol::GLPK::with_time_limit"], [55, 4, 1, "_CPPv4N4idol4GLPK15with_time_limitEd", "idol::GLPK::with_time_limit::t_time_limit"], [78, 5, 1, "_CPPv4N4idol7CtrType14GreaterOrEqualE", "idol::GreaterOrEqual"], [56, 1, 1, "_CPPv4N4idol6GurobiE", "idol::Gurobi"], [56, 2, 1, "_CPPv4N4idol6Gurobi20ContinuousRelaxationEv", "idol::Gurobi::ContinuousRelaxation"], [56, 2, 1, "_CPPv4N4idol6Gurobi6GurobiERK6Gurobi", "idol::Gurobi::Gurobi"], [56, 2, 1, "_CPPv4N4idol6Gurobi6GurobiERR6Gurobi", "idol::Gurobi::Gurobi"], [56, 2, 1, "_CPPv4N4idol6Gurobi6GurobiEv", "idol::Gurobi::Gurobi"], [56, 4, 1, "_CPPv4N4idol6Gurobi6GurobiERK6Gurobi", "idol::Gurobi::Gurobi::t_src"], [56, 2, 1, "_CPPv4N4idol6Gurobi12add_callbackERK15CallbackFactory", "idol::Gurobi::add_callback"], [56, 4, 1, "_CPPv4N4idol6Gurobi12add_callbackERK15CallbackFactory", "idol::Gurobi::add_callback::t_cb"], [56, 2, 1, "_CPPv4I0EN4idol6Gurobi2asER1Tv", "idol::Gurobi::as"], [56, 2, 1, "_CPPv4I0ENK4idol6Gurobi2asERK1Tv", "idol::Gurobi::as"], [56, 3, 1, "_CPPv4I0EN4idol6Gurobi2asER1Tv", "idol::Gurobi::as::T"], [56, 3, 1, "_CPPv4I0ENK4idol6Gurobi2asERK1Tv", "idol::Gurobi::as::T"], [56, 2, 1, "_CPPv4NK4idol6Gurobi5cloneEv", "idol::Gurobi::clone"], [56, 2, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional"], [56, 2, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional"], [56, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_conditional_value"], [56, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_conditional_value"], [56, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_else"], [56, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_if"], [56, 4, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_if"], [56, 2, 1, "_CPPv4I0ENK4idol6Gurobi2isEbv", "idol::Gurobi::is"], [56, 3, 1, "_CPPv4I0ENK4idol6Gurobi2isEbv", "idol::Gurobi::is::T"], [56, 2, 1, "_CPPv4NK4idol6GurobiclERK5Model", "idol::Gurobi::operator()"], [56, 4, 1, "_CPPv4NK4idol6GurobiclERK5Model", "idol::Gurobi::operator()::t_model"], [56, 2, 1, "_CPPv4N4idol6GurobiaSERK6Gurobi", "idol::Gurobi::operator="], [56, 2, 1, "_CPPv4N4idol6GurobiaSERR6Gurobi", "idol::Gurobi::operator="], [56, 2, 1, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Gurobi::read_from_file"], [56, 4, 1, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Gurobi::read_from_file::t_env"], [56, 4, 1, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Gurobi::read_from_file::t_filename"], [56, 2, 1, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", "idol::Gurobi::with_absolute_gap_tolerance"], [56, 4, 1, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", "idol::Gurobi::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [56, 2, 1, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", "idol::Gurobi::with_best_bound_stop"], [56, 4, 1, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", "idol::Gurobi::with_best_bound_stop::t_best_bound_stop"], [56, 2, 1, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", "idol::Gurobi::with_best_obj_stop"], [56, 4, 1, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", "idol::Gurobi::with_best_obj_stop::t_user_best_obj"], [56, 2, 1, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", "idol::Gurobi::with_continuous_relaxation_only"], [56, 4, 1, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", "idol::Gurobi::with_continuous_relaxation_only::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param"], [56, 2, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param"], [56, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param::t_param"], [56, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param::t_param"], [56, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param::t_value"], [56, 4, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", "idol::Gurobi::with_infeasible_or_unbounded_info"], [56, 4, 1, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", "idol::Gurobi::with_infeasible_or_unbounded_info::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi20with_iteration_limitEj", "idol::Gurobi::with_iteration_limit"], [56, 4, 1, "_CPPv4N4idol6Gurobi20with_iteration_limitEj", "idol::Gurobi::with_iteration_limit::t_iteration_count_limit"], [56, 2, 1, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", "idol::Gurobi::with_lazy_cut"], [56, 4, 1, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", "idol::Gurobi::with_lazy_cut::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi9with_logsEb", "idol::Gurobi::with_logs"], [56, 4, 1, "_CPPv4N4idol6Gurobi9with_logsEb", "idol::Gurobi::with_logs::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", "idol::Gurobi::with_max_n_solution_in_pool"], [56, 4, 1, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", "idol::Gurobi::with_max_n_solution_in_pool::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi13with_presolveEb", "idol::Gurobi::with_presolve"], [56, 4, 1, "_CPPv4N4idol6Gurobi13with_presolveEb", "idol::Gurobi::with_presolve::t_value"], [56, 2, 1, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", "idol::Gurobi::with_relative_gap_tolerance"], [56, 4, 1, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", "idol::Gurobi::with_relative_gap_tolerance::t_relative_gap_tolerance"], [56, 2, 1, "_CPPv4N4idol6Gurobi17with_thread_limitEj", "idol::Gurobi::with_thread_limit"], [56, 4, 1, "_CPPv4N4idol6Gurobi17with_thread_limitEj", "idol::Gurobi::with_thread_limit::t_max_n_threads"], [56, 2, 1, "_CPPv4N4idol6Gurobi15with_time_limitEd", "idol::Gurobi::with_time_limit"], [56, 4, 1, "_CPPv4N4idol6Gurobi15with_time_limitEd", "idol::Gurobi::with_time_limit::t_time_limit"], [29, 1, 1, "_CPPv4I0EN4idol10Heuristics13IntegerMasterE", "idol::Heuristics::IntegerMaster"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterERR13IntegerMaster", "idol::Heuristics::IntegerMaster::IntegerMaster"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterEv", "idol::Heuristics::IntegerMaster::IntegerMaster"], [29, 3, 1, "_CPPv4I0EN4idol10Heuristics13IntegerMasterE", "idol::Heuristics::IntegerMaster::NodeInfoT"], [29, 1, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8StrategyE", "idol::Heuristics::IntegerMaster::Strategy"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy8StrategyERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::Strategy::Strategy"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy8StrategyERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::Strategy::Strategy::t_optimizer"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_frequencyEj", "idol::Heuristics::IntegerMaster::Strategy::set_frequency"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_frequencyEj", "idol::Heuristics::IntegerMaster::Strategy::set_frequency::t_frequency"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_integer_columnsEb", "idol::Heuristics::IntegerMaster::Strategy::set_integer_columns"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_integer_columnsEb", "idol::Heuristics::IntegerMaster::Strategy::set_integer_columns::t_value"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_iteration_limitEj", "idol::Heuristics::IntegerMaster::Strategy::set_iteration_limit"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_iteration_limitEj", "idol::Heuristics::IntegerMaster::Strategy::set_iteration_limit::t_iteration_limit"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_max_depthEj", "idol::Heuristics::IntegerMaster::Strategy::set_max_depth"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_max_depthEj", "idol::Heuristics::IntegerMaster::Strategy::set_max_depth::t_max_depth"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy14set_time_limitEd", "idol::Heuristics::IntegerMaster::Strategy::set_time_limit"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy14set_time_limitEd", "idol::Heuristics::IntegerMaster::Strategy::set_time_limit::t_time_limit"], [29, 2, 1, "_CPPv4NK4idol10Heuristics13IntegerMaster8Strategy20with_integer_columnsEv", "idol::Heuristics::IntegerMaster::Strategy::with_integer_columns"], [29, 2, 1, "_CPPv4NK4idol10Heuristics13IntegerMaster5cloneEv", "idol::Heuristics::IntegerMaster::clone"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMasterclEv", "idol::Heuristics::IntegerMaster::operator()"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMasteraSERK13IntegerMaster", "idol::Heuristics::IntegerMaster::operator="], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMasteraSERR13IntegerMaster", "idol::Heuristics::IntegerMaster::operator="], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_frequencyEj", "idol::Heuristics::IntegerMaster::with_frequency"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_frequencyEj", "idol::Heuristics::IntegerMaster::with_frequency::t_frequency"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_integer_columnsEb", "idol::Heuristics::IntegerMaster::with_integer_columns"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_integer_columnsEb", "idol::Heuristics::IntegerMaster::with_integer_columns::t_value"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_iteration_limitEj", "idol::Heuristics::IntegerMaster::with_iteration_limit"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_iteration_limitEj", "idol::Heuristics::IntegerMaster::with_iteration_limit::t_iteration_limit"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_max_depthEj", "idol::Heuristics::IntegerMaster::with_max_depth"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_max_depthEj", "idol::Heuristics::IntegerMaster::with_max_depth::t_max_depth"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_optimizerERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::with_optimizer"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_optimizerERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::with_optimizer::t_optimizer"], [29, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster15with_time_limitEd", "idol::Heuristics::IntegerMaster::with_time_limit"], [29, 4, 1, "_CPPv4N4idol10Heuristics13IntegerMaster15with_time_limitEd", "idol::Heuristics::IntegerMaster::with_time_limit::t_time_limit"], [5, 1, 1, "_CPPv4N4idol10Heuristics14LocalBranchingE", "idol::Heuristics::LocalBranching"], [5, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranching14LocalBranchingEv", "idol::Heuristics::LocalBranching::LocalBranching"], [5, 1, 1, "_CPPv4N4idol10Heuristics14LocalBranching8StrategyE", "idol::Heuristics::LocalBranching::Strategy"], [5, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", "idol::Heuristics::LocalBranching::Strategy::Strategy"], [5, 4, 1, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", "idol::Heuristics::LocalBranching::Strategy::Strategy::t_neighbourhood_size"], [5, 4, 1, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", "idol::Heuristics::LocalBranching::Strategy::Strategy::t_optimizer_factory"], [5, 2, 1, "_CPPv4NK4idol10Heuristics14LocalBranching5cloneEv", "idol::Heuristics::LocalBranching::clone"], [5, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranchingclEv", "idol::Heuristics::LocalBranching::operator()"], [5, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranching14with_optimizerERK16OptimizerFactory", "idol::Heuristics::LocalBranching::with_optimizer"], [5, 4, 1, "_CPPv4N4idol10Heuristics14LocalBranching14with_optimizerERK16OptimizerFactory", "idol::Heuristics::LocalBranching::with_optimizer::t_optimizer_factory"], [6, 1, 1, "_CPPv4N4idol10Heuristics4RENSE", "idol::Heuristics::RENS"], [6, 2, 1, "_CPPv4N4idol10Heuristics4RENS4RENSEv", "idol::Heuristics::RENS::RENS"], [6, 1, 1, "_CPPv4N4idol10Heuristics4RENS8StrategyE", "idol::Heuristics::RENS::Strategy"], [6, 2, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy"], [6, 4, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy::t_minimum_ratio_of_integer_variables_to_fix"], [6, 4, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy::t_minimum_ratio_of_variables_to_fix"], [6, 4, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy::t_optimizer_factory"], [6, 2, 1, "_CPPv4NK4idol10Heuristics4RENS5cloneEv", "idol::Heuristics::RENS::clone"], [6, 2, 1, "_CPPv4N4idol10Heuristics4RENSclEv", "idol::Heuristics::RENS::operator()"], [6, 2, 1, "_CPPv4N4idol10Heuristics4RENS14with_optimizerERK16OptimizerFactory", "idol::Heuristics::RENS::with_optimizer"], [6, 4, 1, "_CPPv4N4idol10Heuristics4RENS14with_optimizerERK16OptimizerFactory", "idol::Heuristics::RENS::with_optimizer::t_optimizer_factory"], [7, 1, 1, "_CPPv4N4idol10Heuristics14SimpleRoundingE", "idol::Heuristics::SimpleRounding"], [7, 2, 1, "_CPPv4N4idol10Heuristics14SimpleRounding14SimpleRoundingEv", "idol::Heuristics::SimpleRounding::SimpleRounding"], [7, 1, 1, "_CPPv4N4idol10Heuristics14SimpleRounding8StrategyE", "idol::Heuristics::SimpleRounding::Strategy"], [7, 2, 1, "_CPPv4NK4idol10Heuristics14SimpleRounding5cloneEv", "idol::Heuristics::SimpleRounding::clone"], [7, 2, 1, "_CPPv4N4idol10Heuristics14SimpleRoundingclEv", "idol::Heuristics::SimpleRounding::operator()"], [57, 1, 1, "_CPPv4N4idol5HiGHSE", "idol::HiGHS"], [57, 2, 1, "_CPPv4N4idol5HiGHS20ContinuousRelaxationEv", "idol::HiGHS::ContinuousRelaxation"], [57, 2, 1, "_CPPv4N4idol5HiGHS5HiGHSERK5HiGHS", "idol::HiGHS::HiGHS"], [57, 2, 1, "_CPPv4N4idol5HiGHS5HiGHSERR5HiGHS", "idol::HiGHS::HiGHS"], [57, 2, 1, "_CPPv4N4idol5HiGHS5HiGHSEv", "idol::HiGHS::HiGHS"], [57, 2, 1, "_CPPv4I0EN4idol5HiGHS2asER1Tv", "idol::HiGHS::as"], [57, 2, 1, "_CPPv4I0ENK4idol5HiGHS2asERK1Tv", "idol::HiGHS::as"], [57, 3, 1, "_CPPv4I0EN4idol5HiGHS2asER1Tv", "idol::HiGHS::as::T"], [57, 3, 1, "_CPPv4I0ENK4idol5HiGHS2asERK1Tv", "idol::HiGHS::as::T"], [57, 2, 1, "_CPPv4NK4idol5HiGHS5cloneEv", "idol::HiGHS::clone"], [57, 2, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional"], [57, 2, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional"], [57, 4, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_conditional_value"], [57, 4, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_conditional_value"], [57, 4, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_else"], [57, 4, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_if"], [57, 4, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_if"], [57, 2, 1, "_CPPv4I0ENK4idol5HiGHS2isEbv", "idol::HiGHS::is"], [57, 3, 1, "_CPPv4I0ENK4idol5HiGHS2isEbv", "idol::HiGHS::is::T"], [57, 2, 1, "_CPPv4NK4idol5HiGHSclERK5Model", "idol::HiGHS::operator()"], [57, 4, 1, "_CPPv4NK4idol5HiGHSclERK5Model", "idol::HiGHS::operator()::t_model"], [57, 2, 1, "_CPPv4N4idol5HiGHSaSERK5HiGHS", "idol::HiGHS::operator="], [57, 2, 1, "_CPPv4N4idol5HiGHSaSERR5HiGHS", "idol::HiGHS::operator="], [57, 2, 1, "_CPPv4N4idol5HiGHS27with_absolute_gap_toleranceEd", "idol::HiGHS::with_absolute_gap_tolerance"], [57, 4, 1, "_CPPv4N4idol5HiGHS27with_absolute_gap_toleranceEd", "idol::HiGHS::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [57, 2, 1, "_CPPv4N4idol5HiGHS20with_best_bound_stopEd", "idol::HiGHS::with_best_bound_stop"], [57, 4, 1, "_CPPv4N4idol5HiGHS20with_best_bound_stopEd", "idol::HiGHS::with_best_bound_stop::t_best_bound_stop"], [57, 2, 1, "_CPPv4N4idol5HiGHS18with_best_obj_stopEd", "idol::HiGHS::with_best_obj_stop"], [57, 4, 1, "_CPPv4N4idol5HiGHS18with_best_obj_stopEd", "idol::HiGHS::with_best_obj_stop::t_user_best_obj"], [57, 2, 1, "_CPPv4N4idol5HiGHS31with_continuous_relaxation_onlyEb", "idol::HiGHS::with_continuous_relaxation_only"], [57, 4, 1, "_CPPv4N4idol5HiGHS31with_continuous_relaxation_onlyEb", "idol::HiGHS::with_continuous_relaxation_only::t_value"], [57, 2, 1, "_CPPv4N4idol5HiGHS33with_infeasible_or_unbounded_infoEb", "idol::HiGHS::with_infeasible_or_unbounded_info"], [57, 4, 1, "_CPPv4N4idol5HiGHS33with_infeasible_or_unbounded_infoEb", "idol::HiGHS::with_infeasible_or_unbounded_info::t_value"], [57, 2, 1, "_CPPv4N4idol5HiGHS20with_iteration_limitEj", "idol::HiGHS::with_iteration_limit"], [57, 4, 1, "_CPPv4N4idol5HiGHS20with_iteration_limitEj", "idol::HiGHS::with_iteration_limit::t_iteration_count_limit"], [57, 2, 1, "_CPPv4N4idol5HiGHS9with_logsEb", "idol::HiGHS::with_logs"], [57, 4, 1, "_CPPv4N4idol5HiGHS9with_logsEb", "idol::HiGHS::with_logs::t_value"], [57, 2, 1, "_CPPv4N4idol5HiGHS13with_presolveEb", "idol::HiGHS::with_presolve"], [57, 4, 1, "_CPPv4N4idol5HiGHS13with_presolveEb", "idol::HiGHS::with_presolve::t_value"], [57, 2, 1, "_CPPv4N4idol5HiGHS27with_relative_gap_toleranceEd", "idol::HiGHS::with_relative_gap_tolerance"], [57, 4, 1, "_CPPv4N4idol5HiGHS27with_relative_gap_toleranceEd", "idol::HiGHS::with_relative_gap_tolerance::t_relative_gap_tolerance"], [57, 2, 1, "_CPPv4N4idol5HiGHS17with_thread_limitEj", "idol::HiGHS::with_thread_limit"], [57, 4, 1, "_CPPv4N4idol5HiGHS17with_thread_limitEj", "idol::HiGHS::with_thread_limit::t_max_n_threads"], [57, 2, 1, "_CPPv4N4idol5HiGHS15with_time_limitEd", "idol::HiGHS::with_time_limit"], [57, 4, 1, "_CPPv4N4idol5HiGHS15with_time_limitEd", "idol::HiGHS::with_time_limit::t_time_limit"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", "idol::IncumbentSolution"], [76, 7, 1, "_CPPv4N4idol3InfE", "idol::Inf"], [79, 5, 1, "_CPPv4N4idol7VarType7IntegerE", "idol::Integer"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", "idol::InvalidSolution"], [72, 1, 1, "_CPPv4N4idol15LazyCutCallbackE", "idol::LazyCutCallback"], [72, 2, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback"], [72, 4, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback::t_cut"], [72, 4, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback::t_model"], [72, 1, 1, "_CPPv4N4idol15LazyCutCallback8StrategyE", "idol::LazyCutCallback::Strategy"], [72, 2, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::LazyCutCallback::Strategy::Strategy"], [72, 4, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::LazyCutCallback::Strategy::Strategy::t_cut"], [72, 4, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::LazyCutCallback::Strategy::Strategy::t_separation_problem"], [72, 2, 1, "_CPPv4NK4idol15LazyCutCallback5cloneEv", "idol::LazyCutCallback::clone"], [72, 2, 1, "_CPPv4N4idol15LazyCutCallbackclEv", "idol::LazyCutCallback::operator()"], [72, 2, 1, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::LazyCutCallback::with_separation_optimizer"], [72, 4, 1, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::LazyCutCallback::with_separation_optimizer::t_optimizer_factory"], [17, 1, 1, "_CPPv4N4idol15LeastInfeasibleE", "idol::LeastInfeasible"], [17, 2, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible"], [17, 2, 1, "_CPPv4N4idol15LeastInfeasible15LeastInfeasibleEv", "idol::LeastInfeasible::LeastInfeasible"], [17, 3, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible::IteratorT"], [17, 4, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible::t_begin"], [17, 4, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible::t_end"], [17, 1, 1, "_CPPv4I0EN4idol15LeastInfeasible8StrategyE", "idol::LeastInfeasible::Strategy"], [17, 3, 1, "_CPPv4I0EN4idol15LeastInfeasible8StrategyE", "idol::LeastInfeasible::Strategy::NodeInfoT"], [17, 2, 1, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyERK15LeastInfeasible", "idol::LeastInfeasible::Strategy::Strategy"], [17, 2, 1, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyEv", "idol::LeastInfeasible::Strategy::Strategy"], [17, 4, 1, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyERK15LeastInfeasible", "idol::LeastInfeasible::Strategy::Strategy::t_parent"], [17, 2, 1, "_CPPv4NK4idol15LeastInfeasible8Strategy5cloneEv", "idol::LeastInfeasible::Strategy::clone"], [17, 2, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::LeastInfeasible::Strategy::operator()"], [17, 2, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::LeastInfeasible::Strategy::operator()"], [17, 4, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::LeastInfeasible::Strategy::operator()::t_parent"], [17, 4, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::LeastInfeasible::Strategy::operator()::t_parent"], [78, 5, 1, "_CPPv4N4idol7CtrType11LessOrEqualE", "idol::LessOrEqual"], [41, 1, 1, "_CPPv4I0EN4idol7LinExprE", "idol::LinExpr"], [41, 3, 1, "_CPPv4I0EN4idol7LinExprE", "idol::LinExpr::Key"], [41, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERK3Key", "idol::LinExpr::LinExpr"], [41, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", "idol::LinExpr::LinExpr"], [41, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", "idol::LinExpr::LinExpr"], [41, 2, 1, "_CPPv4N4idol7LinExpr7LinExprEv", "idol::LinExpr::LinExpr"], [41, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", "idol::LinExpr::LinExpr::t_factor"], [41, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", "idol::LinExpr::LinExpr::t_factor"], [41, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERK3Key", "idol::LinExpr::LinExpr::t_key"], [41, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERK8ConstantRK3Key", "idol::LinExpr::LinExpr::t_key"], [41, 4, 1, "_CPPv4N4idol7LinExpr7LinExprERR8ConstantRK3Key", "idol::LinExpr::LinExpr::t_key"], [41, 2, 1, "_CPPv4NK4idol7LinExpr5beginEv", "idol::LinExpr::begin"], [41, 2, 1, "_CPPv4N4idol7LinExpr5clearEv", "idol::LinExpr::clear"], [41, 2, 1, "_CPPv4NK4idol7LinExpr5emptyEv", "idol::LinExpr::empty"], [41, 2, 1, "_CPPv4NK4idol7LinExpr3endEv", "idol::LinExpr::end"], [41, 2, 1, "_CPPv4NK4idol7LinExpr3fixERKN8Solution6PrimalE", "idol::LinExpr::fix"], [41, 4, 1, "_CPPv4NK4idol7LinExpr3fixERKN8Solution6PrimalE", "idol::LinExpr::fix::t_primals"], [41, 2, 1, "_CPPv4NK4idol7LinExpr3gcdEv", "idol::LinExpr::gcd"], [41, 2, 1, "_CPPv4NK4idol7LinExpr3getERK3Key", "idol::LinExpr::get"], [41, 4, 1, "_CPPv4NK4idol7LinExpr3getERK3Key", "idol::LinExpr::get::t_key"], [41, 2, 1, "_CPPv4N4idol7LinExpr23multiply_with_precisionEdj", "idol::LinExpr::multiply_with_precision"], [41, 4, 1, "_CPPv4N4idol7LinExpr23multiply_with_precisionEdj", "idol::LinExpr::multiply_with_precision::t_factor"], [41, 4, 1, "_CPPv4N4idol7LinExpr23multiply_with_precisionEdj", "idol::LinExpr::multiply_with_precision::t_n_digits"], [41, 2, 1, "_CPPv4N4idol7LinExpr38multiply_with_precision_by_power_of_10Ejj", "idol::LinExpr::multiply_with_precision_by_power_of_10"], [41, 4, 1, "_CPPv4N4idol7LinExpr38multiply_with_precision_by_power_of_10Ejj", "idol::LinExpr::multiply_with_precision_by_power_of_10::t_exponent"], [41, 4, 1, "_CPPv4N4idol7LinExpr38multiply_with_precision_by_power_of_10Ejj", "idol::LinExpr::multiply_with_precision_by_power_of_10::t_n_digits"], [41, 2, 1, "_CPPv4N4idol7LinExprmLEd", "idol::LinExpr::operator*="], [41, 4, 1, "_CPPv4N4idol7LinExprmLEd", "idol::LinExpr::operator*=::t_factor"], [41, 2, 1, "_CPPv4N4idol7LinExprpLERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator+="], [41, 4, 1, "_CPPv4N4idol7LinExprpLERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator+=::t_rhs"], [41, 2, 1, "_CPPv4N4idol7LinExprmIERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator-="], [41, 4, 1, "_CPPv4N4idol7LinExprmIERK12AbstractExprI3Key15IteratorOutputT4Hash7EqualToE", "idol::LinExpr::operator-=::t_rhs"], [41, 2, 1, "_CPPv4N4idol7LinExprdVEd", "idol::LinExpr::operator/="], [41, 4, 1, "_CPPv4N4idol7LinExprdVEd", "idol::LinExpr::operator/=::t_factor"], [41, 2, 1, "_CPPv4N4idol7LinExpr6removeERK3Key", "idol::LinExpr::remove"], [41, 4, 1, "_CPPv4N4idol7LinExpr6removeERK3Key", "idol::LinExpr::remove::t_key"], [41, 2, 1, "_CPPv4N4idol7LinExpr5roundEv", "idol::LinExpr::round"], [41, 2, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", "idol::LinExpr::set"], [41, 2, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", "idol::LinExpr::set"], [41, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", "idol::LinExpr::set::t_coefficient"], [41, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", "idol::LinExpr::set::t_coefficient"], [41, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRK8Constant", "idol::LinExpr::set::t_key"], [41, 4, 1, "_CPPv4N4idol7LinExpr3setERK3KeyRR8Constant", "idol::LinExpr::set::t_key"], [41, 2, 1, "_CPPv4NK4idol7LinExpr4sizeEv", "idol::LinExpr::size"], [42, 1, 1, "_CPPv4N4idol5ModelE", "idol::Model"], [42, 2, 1, "_CPPv4N4idol5Model5ModelER3Env", "idol::Model::Model"], [42, 2, 1, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", "idol::Model::Model"], [42, 2, 1, "_CPPv4N4idol5Model5ModelERR5Model", "idol::Model::Model"], [42, 4, 1, "_CPPv4N4idol5Model5ModelER3Env", "idol::Model::Model::t_env"], [42, 4, 1, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", "idol::Model::Model::t_env"], [42, 4, 1, "_CPPv4N4idol5Model5ModelER3Env14ObjectiveSense", "idol::Model::Model::t_sense"], [42, 2, 1, "_CPPv4N4idol5Model3addERK3Ctr", "idol::Model::add"], [42, 2, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add"], [42, 2, 1, "_CPPv4N4idol5Model3addERK3Var", "idol::Model::add"], [42, 2, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add"], [42, 4, 1, "_CPPv4N4idol5Model3addERK3Ctr", "idol::Model::add::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add::t_temp_ctr"], [42, 4, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add::t_temp_var"], [42, 4, 1, "_CPPv4N4idol5Model3addERK3Var", "idol::Model::add::t_var"], [42, 4, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add::t_var"], [42, 2, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr"], [42, 2, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr"], [42, 4, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr::t_name"], [42, 4, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr::t_name"], [42, 4, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr::t_row"], [42, 4, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr::t_temp_ctr"], [42, 4, 1, "_CPPv4N4idol5Model7add_ctrERR3Row7CtrTypeNSt6stringE", "idol::Model::add_ctr::t_type"], [42, 2, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs"], [42, 2, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs"], [42, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::N"], [42, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::N"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_constant"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_constant"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_dim"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_dim"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_name"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_name"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_type"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypeRK8ConstantRKNSt6stringE", "idol::Model::add_ctrs::t_type"], [42, 2, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var"], [42, 2, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_column"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_lb"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_lb"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_name"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_name"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_type"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_type"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarType6ColumnNSt6stringE", "idol::Model::add_var::t_ub"], [42, 4, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypeNSt6stringE", "idol::Model::add_var::t_ub"], [42, 2, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars"], [42, 2, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars"], [42, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::N"], [42, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::N"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_dim"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_dim"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_lb"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_lb"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_name"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_name"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_type"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_type"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_ub"], [42, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Model::add_vars::t_ub"], [42, 2, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector"], [42, 3, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::N"], [42, 3, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::T"], [42, 4, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::t_vector"], [42, 2, 1, "_CPPv4NK4idol5Model5cloneEv", "idol::Model::clone"], [42, 2, 1, "_CPPv4NK4idol5Model4copyEv", "idol::Model::copy"], [42, 2, 1, "_CPPv4NK4idol5Model4ctrsEv", "idol::Model::ctrs"], [42, 2, 1, "_CPPv4NK4idol5Model3envEv", "idol::Model::env"], [42, 2, 1, "_CPPv4NK4idol5Model3fixERKN8Solution6PrimalE", "idol::Model::fix"], [42, 4, 1, "_CPPv4NK4idol5Model3fixERKN8Solution6PrimalE", "idol::Model::fix::t_primals"], [42, 2, 1, "_CPPv4NK4idol5Model14get_best_boundEv", "idol::Model::get_best_bound"], [42, 2, 1, "_CPPv4NK4idol5Model12get_best_objEv", "idol::Model::get_best_obj"], [42, 2, 1, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", "idol::Model::get_ctr_by_index"], [42, 4, 1, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", "idol::Model::get_ctr_by_index::t_index"], [42, 2, 1, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", "idol::Model::get_ctr_dual"], [42, 4, 1, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", "idol::Model::get_ctr_dual::t_ctr"], [42, 2, 1, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", "idol::Model::get_ctr_farkas"], [42, 4, 1, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", "idol::Model::get_ctr_farkas::t_ctr"], [42, 2, 1, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", "idol::Model::get_ctr_index"], [42, 4, 1, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", "idol::Model::get_ctr_index::t_ctr"], [42, 2, 1, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", "idol::Model::get_ctr_row"], [42, 4, 1, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", "idol::Model::get_ctr_row::t_ctr"], [42, 2, 1, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", "idol::Model::get_ctr_type"], [42, 4, 1, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", "idol::Model::get_ctr_type::t_ctr"], [42, 2, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff"], [42, 4, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff::t_ctr"], [42, 4, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model15get_n_solutionsEv", "idol::Model::get_n_solutions"], [42, 2, 1, "_CPPv4NK4idol5Model12get_obj_exprEv", "idol::Model::get_obj_expr"], [42, 2, 1, "_CPPv4NK4idol5Model13get_obj_senseEv", "idol::Model::get_obj_sense"], [42, 2, 1, "_CPPv4NK4idol5Model10get_reasonEv", "idol::Model::get_reason"], [42, 2, 1, "_CPPv4NK4idol5Model12get_rhs_exprEv", "idol::Model::get_rhs_expr"], [42, 2, 1, "_CPPv4NK4idol5Model18get_solution_indexEv", "idol::Model::get_solution_index"], [42, 2, 1, "_CPPv4NK4idol5Model10get_statusEv", "idol::Model::get_status"], [42, 2, 1, "_CPPv4NK4idol5Model16get_var_by_indexEj", "idol::Model::get_var_by_index"], [42, 4, 1, "_CPPv4NK4idol5Model16get_var_by_indexEj", "idol::Model::get_var_by_index::t_index"], [42, 2, 1, "_CPPv4NK4idol5Model14get_var_columnERK3Var", "idol::Model::get_var_column"], [42, 4, 1, "_CPPv4NK4idol5Model14get_var_columnERK3Var", "idol::Model::get_var_column::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model13get_var_indexERK3Var", "idol::Model::get_var_index"], [42, 4, 1, "_CPPv4NK4idol5Model13get_var_indexERK3Var", "idol::Model::get_var_index::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model10get_var_lbERK3Var", "idol::Model::get_var_lb"], [42, 4, 1, "_CPPv4NK4idol5Model10get_var_lbERK3Var", "idol::Model::get_var_lb::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model14get_var_primalERK3Var", "idol::Model::get_var_primal"], [42, 4, 1, "_CPPv4NK4idol5Model14get_var_primalERK3Var", "idol::Model::get_var_primal::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model11get_var_rayERK3Var", "idol::Model::get_var_ray"], [42, 4, 1, "_CPPv4NK4idol5Model11get_var_rayERK3Var", "idol::Model::get_var_ray::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model20get_var_reduced_costERK3Var", "idol::Model::get_var_reduced_cost"], [42, 4, 1, "_CPPv4NK4idol5Model20get_var_reduced_costERK3Var", "idol::Model::get_var_reduced_cost::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model12get_var_typeERK3Var", "idol::Model::get_var_type"], [42, 4, 1, "_CPPv4NK4idol5Model12get_var_typeERK3Var", "idol::Model::get_var_type::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model10get_var_ubERK3Var", "idol::Model::get_var_ub"], [42, 4, 1, "_CPPv4NK4idol5Model10get_var_ubERK3Var", "idol::Model::get_var_ub::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model3hasERK3Ctr", "idol::Model::has"], [42, 2, 1, "_CPPv4NK4idol5Model3hasERK3Var", "idol::Model::has"], [42, 4, 1, "_CPPv4NK4idol5Model3hasERK3Ctr", "idol::Model::has::t_ctr"], [42, 4, 1, "_CPPv4NK4idol5Model3hasERK3Var", "idol::Model::has::t_var"], [42, 2, 1, "_CPPv4NK4idol5Model13has_optimizerEv", "idol::Model::has_optimizer"], [42, 2, 1, "_CPPv4NK4idol5Model21has_optimizer_factoryEv", "idol::Model::has_optimizer_factory"], [42, 2, 1, "_CPPv4NK4idol5Model2idEv", "idol::Model::id"], [42, 2, 1, "_CPPv4N4idol5ModelaSERK5Model", "idol::Model::operator="], [42, 2, 1, "_CPPv4N4idol5ModelaSERR5Model", "idol::Model::operator="], [42, 2, 1, "_CPPv4N4idol5Model8optimizeEv", "idol::Model::optimize"], [42, 2, 1, "_CPPv4N4idol5Model9optimizerEv", "idol::Model::optimizer"], [42, 2, 1, "_CPPv4NK4idol5Model9optimizerEv", "idol::Model::optimizer"], [42, 2, 1, "_CPPv4NK4idol5Model17optimizer_factoryEv", "idol::Model::optimizer_factory"], [42, 2, 1, "_CPPv4N4idol5Model6removeERK3Ctr", "idol::Model::remove"], [42, 2, 1, "_CPPv4N4idol5Model6removeERK3Var", "idol::Model::remove"], [42, 4, 1, "_CPPv4N4idol5Model6removeERK3Ctr", "idol::Model::remove::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model6removeERK3Var", "idol::Model::remove::t_var"], [42, 2, 1, "_CPPv4N4idol5Model12reserve_ctrsEj", "idol::Model::reserve_ctrs"], [42, 4, 1, "_CPPv4N4idol5Model12reserve_ctrsEj", "idol::Model::reserve_ctrs::t_size"], [42, 2, 1, "_CPPv4N4idol5Model12reserve_varsEj", "idol::Model::reserve_vars"], [42, 4, 1, "_CPPv4N4idol5Model12reserve_varsEj", "idol::Model::reserve_vars::t_size"], [42, 2, 1, "_CPPv4N4idol5Model17scale_to_integersEj", "idol::Model::scale_to_integers"], [42, 4, 1, "_CPPv4N4idol5Model17scale_to_integersEj", "idol::Model::scale_to_integers::t_n_digits"], [42, 2, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", "idol::Model::set_ctr_rhs"], [42, 2, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", "idol::Model::set_ctr_rhs"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", "idol::Model::set_ctr_rhs::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", "idol::Model::set_ctr_rhs::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRK8Constant", "idol::Model::set_ctr_rhs::t_rhs"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3CtrRR8Constant", "idol::Model::set_ctr_rhs::t_rhs"], [42, 2, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", "idol::Model::set_ctr_row"], [42, 2, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", "idol::Model::set_ctr_row"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", "idol::Model::set_ctr_row::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", "idol::Model::set_ctr_row::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK3Row", "idol::Model::set_ctr_row::t_row"], [42, 4, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR3Row", "idol::Model::set_ctr_row::t_row"], [42, 2, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type"], [42, 4, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type::t_type"], [42, 2, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff"], [42, 2, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff"], [42, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff::t_coeff"], [42, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff::t_coeff"], [42, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff::t_ctr"], [42, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRK8Constant", "idol::Model::set_mat_coeff::t_var"], [42, 4, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3VarRR8Constant", "idol::Model::set_mat_coeff::t_var"], [42, 2, 1, "_CPPv4N4idol5Model13set_obj_constERK8Constant", "idol::Model::set_obj_const"], [42, 2, 1, "_CPPv4N4idol5Model13set_obj_constERR8Constant", "idol::Model::set_obj_const"], [42, 4, 1, "_CPPv4N4idol5Model13set_obj_constERK8Constant", "idol::Model::set_obj_const::t_constant"], [42, 4, 1, "_CPPv4N4idol5Model13set_obj_constERR8Constant", "idol::Model::set_obj_const::t_constant"], [42, 2, 1, "_CPPv4N4idol5Model12set_obj_exprERK4ExprI3Var3VarE", "idol::Model::set_obj_expr"], [42, 2, 1, "_CPPv4N4idol5Model12set_obj_exprERR4ExprI3Var3VarE", "idol::Model::set_obj_expr"], [42, 4, 1, "_CPPv4N4idol5Model12set_obj_exprERK4ExprI3Var3VarE", "idol::Model::set_obj_expr::t_objective"], [42, 4, 1, "_CPPv4N4idol5Model12set_obj_exprERR4ExprI3Var3VarE", "idol::Model::set_obj_expr::t_objective"], [42, 2, 1, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", "idol::Model::set_obj_sense"], [42, 4, 1, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", "idol::Model::set_obj_sense::t_value"], [42, 2, 1, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", "idol::Model::set_rhs_expr"], [42, 2, 1, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", "idol::Model::set_rhs_expr"], [42, 4, 1, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", "idol::Model::set_rhs_expr::t_rhs"], [42, 4, 1, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", "idol::Model::set_rhs_expr::t_rhs"], [42, 2, 1, "_CPPv4N4idol5Model18set_solution_indexEj", "idol::Model::set_solution_index"], [42, 4, 1, "_CPPv4N4idol5Model18set_solution_indexEj", "idol::Model::set_solution_index::t_index"], [42, 2, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", "idol::Model::set_var_column"], [42, 2, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", "idol::Model::set_var_column"], [42, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", "idol::Model::set_var_column::t_column"], [42, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", "idol::Model::set_var_column::t_column"], [42, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK6Column", "idol::Model::set_var_column::t_var"], [42, 4, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR6Column", "idol::Model::set_var_column::t_var"], [42, 2, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb"], [42, 4, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb::t_lb"], [42, 4, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb::t_var"], [42, 2, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", "idol::Model::set_var_obj"], [42, 2, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", "idol::Model::set_var_obj"], [42, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", "idol::Model::set_var_obj::t_obj"], [42, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", "idol::Model::set_var_obj::t_obj"], [42, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRK8Constant", "idol::Model::set_var_obj::t_var"], [42, 4, 1, "_CPPv4N4idol5Model11set_var_objERK3VarRR8Constant", "idol::Model::set_var_obj::t_var"], [42, 2, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type"], [42, 4, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type::t_type"], [42, 4, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type::t_var"], [42, 2, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub"], [42, 4, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub::t_ub"], [42, 4, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub::t_var"], [42, 2, 1, "_CPPv4N4idol5Model5unuseEv", "idol::Model::unuse"], [42, 2, 1, "_CPPv4N4idol5Model6updateEv", "idol::Model::update"], [42, 2, 1, "_CPPv4N4idol5Model3useERK16OptimizerFactory", "idol::Model::use"], [42, 4, 1, "_CPPv4N4idol5Model3useERK16OptimizerFactory", "idol::Model::use::t_optimizer_factory"], [42, 2, 1, "_CPPv4NK4idol5Model4varsEv", "idol::Model::vars"], [42, 2, 1, "_CPPv4N4idol5Model5writeERKNSt6stringE", "idol::Model::write"], [42, 4, 1, "_CPPv4N4idol5Model5writeERKNSt6stringE", "idol::Model::write::t_name"], [42, 2, 1, "_CPPv4N4idol5ModelD0Ev", "idol::Model::~Model"], [58, 1, 1, "_CPPv4N4idol5MosekE", "idol::Mosek"], [58, 2, 1, "_CPPv4N4idol5Mosek20ContinuousRelaxationEv", "idol::Mosek::ContinuousRelaxation"], [58, 2, 1, "_CPPv4N4idol5Mosek5MosekERK5Mosek", "idol::Mosek::Mosek"], [58, 2, 1, "_CPPv4N4idol5Mosek5MosekERR5Mosek", "idol::Mosek::Mosek"], [58, 2, 1, "_CPPv4N4idol5Mosek5MosekEv", "idol::Mosek::Mosek"], [58, 2, 1, "_CPPv4N4idol5Mosek12add_callbackERK15CallbackFactory", "idol::Mosek::add_callback"], [58, 4, 1, "_CPPv4N4idol5Mosek12add_callbackERK15CallbackFactory", "idol::Mosek::add_callback::t_cb"], [58, 2, 1, "_CPPv4I0EN4idol5Mosek2asER1Tv", "idol::Mosek::as"], [58, 2, 1, "_CPPv4I0ENK4idol5Mosek2asERK1Tv", "idol::Mosek::as"], [58, 3, 1, "_CPPv4I0EN4idol5Mosek2asER1Tv", "idol::Mosek::as::T"], [58, 3, 1, "_CPPv4I0ENK4idol5Mosek2asERK1Tv", "idol::Mosek::as::T"], [58, 2, 1, "_CPPv4NK4idol5Mosek5cloneEv", "idol::Mosek::clone"], [58, 2, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional"], [58, 2, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional"], [58, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_conditional_value"], [58, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_conditional_value"], [58, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_else"], [58, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_if"], [58, 4, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_if"], [58, 2, 1, "_CPPv4I0ENK4idol5Mosek2isEbv", "idol::Mosek::is"], [58, 3, 1, "_CPPv4I0ENK4idol5Mosek2isEbv", "idol::Mosek::is::T"], [58, 2, 1, "_CPPv4NK4idol5MosekclERK5Model", "idol::Mosek::operator()"], [58, 4, 1, "_CPPv4NK4idol5MosekclERK5Model", "idol::Mosek::operator()::t_model"], [58, 2, 1, "_CPPv4N4idol5MosekaSERK5Mosek", "idol::Mosek::operator="], [58, 2, 1, "_CPPv4N4idol5MosekaSERR5Mosek", "idol::Mosek::operator="], [58, 2, 1, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", "idol::Mosek::with_absolute_gap_tolerance"], [58, 4, 1, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", "idol::Mosek::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [58, 2, 1, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", "idol::Mosek::with_best_bound_stop"], [58, 4, 1, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", "idol::Mosek::with_best_bound_stop::t_best_bound_stop"], [58, 2, 1, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", "idol::Mosek::with_best_obj_stop"], [58, 4, 1, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", "idol::Mosek::with_best_obj_stop::t_user_best_obj"], [58, 2, 1, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", "idol::Mosek::with_continuous_relaxation_only"], [58, 4, 1, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", "idol::Mosek::with_continuous_relaxation_only::t_value"], [58, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter"], [58, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter"], [58, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter"], [58, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter::t_param"], [58, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter::t_param"], [58, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter::t_param"], [58, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter::t_value"], [58, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter::t_value"], [58, 4, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter::t_value"], [58, 2, 1, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", "idol::Mosek::with_infeasible_or_unbounded_info"], [58, 4, 1, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", "idol::Mosek::with_infeasible_or_unbounded_info::t_value"], [58, 2, 1, "_CPPv4N4idol5Mosek20with_iteration_limitEj", "idol::Mosek::with_iteration_limit"], [58, 4, 1, "_CPPv4N4idol5Mosek20with_iteration_limitEj", "idol::Mosek::with_iteration_limit::t_iteration_count_limit"], [58, 2, 1, "_CPPv4N4idol5Mosek9with_logsEb", "idol::Mosek::with_logs"], [58, 4, 1, "_CPPv4N4idol5Mosek9with_logsEb", "idol::Mosek::with_logs::t_value"], [58, 2, 1, "_CPPv4N4idol5Mosek13with_presolveEb", "idol::Mosek::with_presolve"], [58, 4, 1, "_CPPv4N4idol5Mosek13with_presolveEb", "idol::Mosek::with_presolve::t_value"], [58, 2, 1, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", "idol::Mosek::with_relative_gap_tolerance"], [58, 4, 1, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", "idol::Mosek::with_relative_gap_tolerance::t_relative_gap_tolerance"], [58, 2, 1, "_CPPv4N4idol5Mosek17with_thread_limitEj", "idol::Mosek::with_thread_limit"], [58, 4, 1, "_CPPv4N4idol5Mosek17with_thread_limitEj", "idol::Mosek::with_thread_limit::t_max_n_threads"], [58, 2, 1, "_CPPv4N4idol5Mosek15with_time_limitEd", "idol::Mosek::with_time_limit"], [58, 4, 1, "_CPPv4N4idol5Mosek15with_time_limitEd", "idol::Mosek::with_time_limit::t_time_limit"], [18, 1, 1, "_CPPv4N4idol14MostInfeasibleE", "idol::MostInfeasible"], [18, 2, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible"], [18, 2, 1, "_CPPv4N4idol14MostInfeasible14MostInfeasibleEv", "idol::MostInfeasible::MostInfeasible"], [18, 3, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::IteratorT"], [18, 4, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::t_begin"], [18, 4, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::t_end"], [18, 1, 1, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", "idol::MostInfeasible::Strategy"], [18, 3, 1, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", "idol::MostInfeasible::Strategy::NodeInfoT"], [18, 2, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", "idol::MostInfeasible::Strategy::Strategy"], [18, 2, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyEv", "idol::MostInfeasible::Strategy::Strategy"], [18, 4, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", "idol::MostInfeasible::Strategy::Strategy::t_parent"], [18, 2, 1, "_CPPv4NK4idol14MostInfeasible8Strategy5cloneEv", "idol::MostInfeasible::Strategy::clone"], [18, 2, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::MostInfeasible::Strategy::operator()"], [18, 2, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::MostInfeasible::Strategy::operator()"], [18, 4, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::MostInfeasible::Strategy::operator()::t_parent"], [18, 4, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::MostInfeasible::Strategy::operator()::t_parent"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", "idol::NodeLoaded"], [30, 1, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecompositionE", "idol::Optimizers::DantzigWolfeDecomposition"], [30, 1, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGenerationE", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration::t_best_bound_stop"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration::t_parent"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration::t_use_farkas_for_infeasibility"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration10best_boundEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::best_bound"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration8best_objEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::best_obj"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration7executeEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::execute"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::parent"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::parent"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration15primal_solutionEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::primal_solution"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6reasonEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::reason"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration19set_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::set_best_bound_stop"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration19set_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::set_best_bound_stop::t_best_bound_stop"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6statusEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::status"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_default_sub_problem_spec"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_formulation"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_logger_factory"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_master_optimizer_factory"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_max_parallel_pricing"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_model"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_remove_infeasible_columns"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_stabilization"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_strategy"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_sub_problem_specifications"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_use_hard_branching"], [30, 2, 1, "_CPPv4I0EN4idol10Optimizers25DantzigWolfeDecomposition2asER1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as"], [30, 2, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2asERK1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as"], [30, 3, 1, "_CPPv4I0EN4idol10Optimizers25DantzigWolfeDecomposition2asER1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as::T"], [30, 3, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2asERK1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as::T"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", "idol::Optimizers::DantzigWolfeDecomposition::formulation"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", "idol::Optimizers::DantzigWolfeDecomposition::formulation"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_absolute_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_absolute_gap"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_best_boundEv", "idol::Optimizers::DantzigWolfeDecomposition::get_best_bound"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition12get_best_objEv", "idol::Optimizers::DantzigWolfeDecomposition::get_best_obj"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_best_bound_stopEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_best_bound_stop"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition23get_param_best_obj_stopEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_best_obj_stop"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_infeasible_or_unbounded_info"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_iteration_limitEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_iteration_limit"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_param_logsEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_logs"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_param_presolveEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_presolve"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition22get_param_thread_limitEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_thread_limit"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition20get_param_time_limitEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_time_limit"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_reasonEv", "idol::Optimizers::DantzigWolfeDecomposition::get_reason"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_relative_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_relative_gap"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_remaining_timeEv", "idol::Optimizers::DantzigWolfeDecomposition::get_remaining_time"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_statusEv", "idol::Optimizers::DantzigWolfeDecomposition::get_status"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition19get_tol_feasibilityEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_feasibility"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition15get_tol_integerEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_integer"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_absolute_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_mip_absolute_gap"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_relative_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_mip_relative_gap"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_tol_optimalityEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_optimality"], [30, 2, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2isEbv", "idol::Optimizers::DantzigWolfeDecomposition::is"], [30, 3, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2isEbv", "idol::Optimizers::DantzigWolfeDecomposition::is::T"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition13is_terminatedEv", "idol::Optimizers::DantzigWolfeDecomposition::is_terminated"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4nameEv", "idol::Optimizers::DantzigWolfeDecomposition::name"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition6parentEv", "idol::Optimizers::DantzigWolfeDecomposition::parent"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_bound_stop"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_bound_stop::t_best_bound_stop"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition23set_param_best_obj_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_obj_stop"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition23set_param_best_obj_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_obj_stop::t_best_obj_stop"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_infeasible_or_unbounded_info"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_infeasible_or_unbounded_info::t_value"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_iteration_limitEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_iteration_limit"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_iteration_limitEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_iteration_limit::t_iteration_limit"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition14set_param_logsEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_logs"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition14set_param_logsEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_logs::t_value"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_param_presolveEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_presolve"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_param_presolveEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_presolve::t_value"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition17set_param_threadsEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_threads"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition17set_param_threadsEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_threads::t_threads"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition20set_param_time_limitEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_time_limit"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition20set_param_time_limitEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_time_limit::t_time_limit"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition19set_tol_feasibilityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_feasibility"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition19set_tol_feasibilityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_feasibility::t_tol_feasibility"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition15set_tol_integerEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_integer"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition15set_tol_integerEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_integer::t_tol_integer"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_absolute_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_absolute_gap"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_absolute_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_relative_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_relative_gap"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_relative_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_tol_optimalityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_optimality"], [30, 4, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_tol_optimalityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_optimality::t_tol_optimality"], [30, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition9terminateEv", "idol::Optimizers::DantzigWolfeDecomposition::terminate"], [30, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4timeEv", "idol::Optimizers::DantzigWolfeDecomposition::time"], [59, 1, 1, "_CPPv4N4idol10Optimizers4GLPKE", "idol::Optimizers::GLPK"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", "idol::Optimizers::GLPK::GLPK"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", "idol::Optimizers::GLPK::GLPK::t_continuous_relaxation"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", "idol::Optimizers::GLPK::GLPK::t_model"], [59, 2, 1, "_CPPv4I0EN4idol10Optimizers4GLPK2asER1Tv", "idol::Optimizers::GLPK::as"], [59, 2, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2asERK1Tv", "idol::Optimizers::GLPK::as"], [59, 3, 1, "_CPPv4I0EN4idol10Optimizers4GLPK2asER1Tv", "idol::Optimizers::GLPK::as::T"], [59, 3, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2asERK1Tv", "idol::Optimizers::GLPK::as::T"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK25get_param_best_bound_stopEv", "idol::Optimizers::GLPK::get_param_best_bound_stop"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK23get_param_best_obj_stopEv", "idol::Optimizers::GLPK::get_param_best_obj_stop"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::GLPK::get_param_infeasible_or_unbounded_info"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK25get_param_iteration_limitEv", "idol::Optimizers::GLPK::get_param_iteration_limit"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK14get_param_logsEv", "idol::Optimizers::GLPK::get_param_logs"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK18get_param_presolveEv", "idol::Optimizers::GLPK::get_param_presolve"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK22get_param_thread_limitEv", "idol::Optimizers::GLPK::get_param_thread_limit"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK20get_param_time_limitEv", "idol::Optimizers::GLPK::get_param_time_limit"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK18get_remaining_timeEv", "idol::Optimizers::GLPK::get_remaining_time"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK19get_tol_feasibilityEv", "idol::Optimizers::GLPK::get_tol_feasibility"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK15get_tol_integerEv", "idol::Optimizers::GLPK::get_tol_integer"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_absolute_gapEv", "idol::Optimizers::GLPK::get_tol_mip_absolute_gap"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_relative_gapEv", "idol::Optimizers::GLPK::get_tol_mip_relative_gap"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK18get_tol_optimalityEv", "idol::Optimizers::GLPK::get_tol_optimality"], [59, 2, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2isEbv", "idol::Optimizers::GLPK::is"], [59, 3, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2isEbv", "idol::Optimizers::GLPK::is::T"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK13is_terminatedEv", "idol::Optimizers::GLPK::is_terminated"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK4nameEv", "idol::Optimizers::GLPK::name"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]::t_ctr"], [59, 4, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]::t_ctr"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]::t_var"], [59, 4, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]::t_var"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK6parentEv", "idol::Optimizers::GLPK::parent"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::GLPK::read_from_file"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::GLPK::read_from_file::t_env"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::GLPK::read_from_file::t_filename"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_best_bound_stopEd", "idol::Optimizers::GLPK::set_param_best_bound_stop"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_best_bound_stopEd", "idol::Optimizers::GLPK::set_param_best_bound_stop::t_best_bound_stop"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK23set_param_best_obj_stopEd", "idol::Optimizers::GLPK::set_param_best_obj_stop"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK23set_param_best_obj_stopEd", "idol::Optimizers::GLPK::set_param_best_obj_stop::t_best_obj_stop"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::GLPK::set_param_infeasible_or_unbounded_info"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::GLPK::set_param_infeasible_or_unbounded_info::t_value"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_iteration_limitEj", "idol::Optimizers::GLPK::set_param_iteration_limit"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_iteration_limitEj", "idol::Optimizers::GLPK::set_param_iteration_limit::t_iteration_limit"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK14set_param_logsEb", "idol::Optimizers::GLPK::set_param_logs"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK14set_param_logsEb", "idol::Optimizers::GLPK::set_param_logs::t_value"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK18set_param_presolveEb", "idol::Optimizers::GLPK::set_param_presolve"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK18set_param_presolveEb", "idol::Optimizers::GLPK::set_param_presolve::t_value"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK17set_param_threadsEj", "idol::Optimizers::GLPK::set_param_threads"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK17set_param_threadsEj", "idol::Optimizers::GLPK::set_param_threads::t_threads"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK20set_param_time_limitEd", "idol::Optimizers::GLPK::set_param_time_limit"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK20set_param_time_limitEd", "idol::Optimizers::GLPK::set_param_time_limit::t_time_limit"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK19set_tol_feasibilityEd", "idol::Optimizers::GLPK::set_tol_feasibility"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK19set_tol_feasibilityEd", "idol::Optimizers::GLPK::set_tol_feasibility::t_tol_feasibility"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK15set_tol_integerEd", "idol::Optimizers::GLPK::set_tol_integer"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK15set_tol_integerEd", "idol::Optimizers::GLPK::set_tol_integer::t_tol_integer"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_absolute_gapEd", "idol::Optimizers::GLPK::set_tol_mip_absolute_gap"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_absolute_gapEd", "idol::Optimizers::GLPK::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_relative_gapEd", "idol::Optimizers::GLPK::set_tol_mip_relative_gap"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_relative_gapEd", "idol::Optimizers::GLPK::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK18set_tol_optimalityEd", "idol::Optimizers::GLPK::set_tol_optimality"], [59, 4, 1, "_CPPv4N4idol10Optimizers4GLPK18set_tol_optimalityEd", "idol::Optimizers::GLPK::set_tol_optimality::t_tol_optimality"], [59, 2, 1, "_CPPv4N4idol10Optimizers4GLPK9terminateEv", "idol::Optimizers::GLPK::terminate"], [59, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK4timeEv", "idol::Optimizers::GLPK::time"], [60, 1, 1, "_CPPv4N4idol10Optimizers6GurobiE", "idol::Optimizers::Gurobi"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", "idol::Optimizers::Gurobi::Gurobi"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", "idol::Optimizers::Gurobi::Gurobi::t_continuous_relaxation"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi::t_continuous_relaxation"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi::t_env"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", "idol::Optimizers::Gurobi::Gurobi::t_model"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi::t_model"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi12add_callbackEP8Callback", "idol::Optimizers::Gurobi::add_callback"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi12add_callbackEP8Callback", "idol::Optimizers::Gurobi::add_callback::t_ptr_to_callback"], [60, 2, 1, "_CPPv4I0EN4idol10Optimizers6Gurobi2asER1Tv", "idol::Optimizers::Gurobi::as"], [60, 2, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2asERK1Tv", "idol::Optimizers::Gurobi::as"], [60, 3, 1, "_CPPv4I0EN4idol10Optimizers6Gurobi2asER1Tv", "idol::Optimizers::Gurobi::as::T"], [60, 3, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2asERK1Tv", "idol::Optimizers::Gurobi::as::T"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi3envEv", "idol::Optimizers::Gurobi::env"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi3envEv", "idol::Optimizers::Gurobi::env"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_best_bound_stopEv", "idol::Optimizers::Gurobi::get_param_best_bound_stop"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi23get_param_best_obj_stopEv", "idol::Optimizers::Gurobi::get_param_best_obj_stop"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::Gurobi::get_param_infeasible_or_unbounded_info"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_iteration_limitEv", "idol::Optimizers::Gurobi::get_param_iteration_limit"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi14get_param_logsEv", "idol::Optimizers::Gurobi::get_param_logs"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi18get_param_presolveEv", "idol::Optimizers::Gurobi::get_param_presolve"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi22get_param_thread_limitEv", "idol::Optimizers::Gurobi::get_param_thread_limit"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi20get_param_time_limitEv", "idol::Optimizers::Gurobi::get_param_time_limit"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi18get_remaining_timeEv", "idol::Optimizers::Gurobi::get_remaining_time"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi19get_tol_feasibilityEv", "idol::Optimizers::Gurobi::get_tol_feasibility"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi15get_tol_integerEv", "idol::Optimizers::Gurobi::get_tol_integer"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_absolute_gapEv", "idol::Optimizers::Gurobi::get_tol_mip_absolute_gap"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_relative_gapEv", "idol::Optimizers::Gurobi::get_tol_mip_relative_gap"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi18get_tol_optimalityEv", "idol::Optimizers::Gurobi::get_tol_optimality"], [60, 2, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2isEbv", "idol::Optimizers::Gurobi::is"], [60, 3, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2isEbv", "idol::Optimizers::Gurobi::is::T"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi13is_terminatedEv", "idol::Optimizers::Gurobi::is_terminated"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi5modelEv", "idol::Optimizers::Gurobi::model"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi5modelEv", "idol::Optimizers::Gurobi::model"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi4nameEv", "idol::Optimizers::Gurobi::name"], [60, 2, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]"], [60, 2, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]"], [60, 4, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]::t_ctr"], [60, 4, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]::t_ctr"], [60, 4, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]::t_var"], [60, 4, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]::t_var"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi6parentEv", "idol::Optimizers::Gurobi::parent"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::Gurobi::read_from_file"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::Gurobi::read_from_file::t_env"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::Gurobi::read_from_file::t_filename"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi12set_lazy_cutEb", "idol::Optimizers::Gurobi::set_lazy_cut"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi12set_lazy_cutEb", "idol::Optimizers::Gurobi::set_lazy_cut::t_value"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi26set_max_n_solution_in_poolEj", "idol::Optimizers::Gurobi::set_max_n_solution_in_pool"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi26set_max_n_solution_in_poolEj", "idol::Optimizers::Gurobi::set_max_n_solution_in_pool::t_value"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", "idol::Optimizers::Gurobi::set_param"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", "idol::Optimizers::Gurobi::set_param"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", "idol::Optimizers::Gurobi::set_param::t_param"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", "idol::Optimizers::Gurobi::set_param::t_param"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", "idol::Optimizers::Gurobi::set_param::t_value"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", "idol::Optimizers::Gurobi::set_param::t_value"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_best_bound_stopEd", "idol::Optimizers::Gurobi::set_param_best_bound_stop"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_best_bound_stopEd", "idol::Optimizers::Gurobi::set_param_best_bound_stop::t_best_bound_stop"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi23set_param_best_obj_stopEd", "idol::Optimizers::Gurobi::set_param_best_obj_stop"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi23set_param_best_obj_stopEd", "idol::Optimizers::Gurobi::set_param_best_obj_stop::t_best_obj_stop"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Gurobi::set_param_infeasible_or_unbounded_info"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Gurobi::set_param_infeasible_or_unbounded_info::t_value"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_iteration_limitEj", "idol::Optimizers::Gurobi::set_param_iteration_limit"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_iteration_limitEj", "idol::Optimizers::Gurobi::set_param_iteration_limit::t_iteration_limit"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi14set_param_logsEb", "idol::Optimizers::Gurobi::set_param_logs"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi14set_param_logsEb", "idol::Optimizers::Gurobi::set_param_logs::t_value"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_param_presolveEb", "idol::Optimizers::Gurobi::set_param_presolve"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_param_presolveEb", "idol::Optimizers::Gurobi::set_param_presolve::t_value"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi17set_param_threadsEj", "idol::Optimizers::Gurobi::set_param_threads"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi17set_param_threadsEj", "idol::Optimizers::Gurobi::set_param_threads::t_thread_limit"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi20set_param_time_limitEd", "idol::Optimizers::Gurobi::set_param_time_limit"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi20set_param_time_limitEd", "idol::Optimizers::Gurobi::set_param_time_limit::t_time_limit"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi19set_tol_feasibilityEd", "idol::Optimizers::Gurobi::set_tol_feasibility"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi19set_tol_feasibilityEd", "idol::Optimizers::Gurobi::set_tol_feasibility::t_tol_feasibility"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi15set_tol_integerEd", "idol::Optimizers::Gurobi::set_tol_integer"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi15set_tol_integerEd", "idol::Optimizers::Gurobi::set_tol_integer::t_tol_integer"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_absolute_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_absolute_gap"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_absolute_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_absolute_gap::t_absolute_gap_tolerance"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_relative_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_relative_gap"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_relative_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_relative_gap::t_relative_gap_tolerance"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_tol_optimalityEd", "idol::Optimizers::Gurobi::set_tol_optimality"], [60, 4, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_tol_optimalityEd", "idol::Optimizers::Gurobi::set_tol_optimality::t_tol_optimality"], [60, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi9terminateEv", "idol::Optimizers::Gurobi::terminate"], [60, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi4timeEv", "idol::Optimizers::Gurobi::time"], [24, 1, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGenerationE", "idol::Optimizers::Robust::ColumnAndConstraintGeneration"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_complete_recourse"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_master_optimizer"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_parent"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_separator"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_stabilizer"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_stage_description"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK5ModelRK5ModelRK16OptimizerFactoryRKN4idol6Robust12CCGSeparatorERKN4idol6Robust13CCGStabilizerEN4idol6Robust16StageDescriptionEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_uncertainty_set"], [24, 2, 1, "_CPPv4I0EN4idol10Optimizers6Robust29ColumnAndConstraintGeneration2asER1Tv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::as"], [24, 2, 1, "_CPPv4I0ENK4idol10Optimizers6Robust29ColumnAndConstraintGeneration2asERK1Tv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::as"], [24, 3, 1, "_CPPv4I0EN4idol10Optimizers6Robust29ColumnAndConstraintGeneration2asER1Tv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::as::T"], [24, 3, 1, "_CPPv4I0ENK4idol10Optimizers6Robust29ColumnAndConstraintGeneration2asERK1Tv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::as::T"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration17complete_recourseEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::complete_recourse"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration16get_absolute_gapEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_absolute_gap"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_best_boundEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_best_bound"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12get_best_objEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_best_obj"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12get_ctr_dualERK3Ctr", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_ctr_dual"], [24, 4, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12get_ctr_dualERK3Ctr", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_ctr_dual::t_ctr"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_ctr_farkasERK3Ctr", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_ctr_farkas"], [24, 4, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_ctr_farkasERK3Ctr", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_ctr_farkas::t_ctr"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration15get_n_solutionsEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_n_solutions"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration25get_param_best_bound_stopEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_best_bound_stop"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration23get_param_best_obj_stopEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_best_obj_stop"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_infeasible_or_unbounded_info"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration25get_param_iteration_limitEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_iteration_limit"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_param_logsEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_logs"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_param_presolveEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_presolve"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration22get_param_thread_limitEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_thread_limit"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration20get_param_time_limitEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_param_time_limit"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration10get_reasonEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_reason"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration16get_relative_gapEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_relative_gap"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_remaining_timeEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_remaining_time"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_solution_indexEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_solution_index"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration10get_statusEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_status"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration19get_tol_feasibilityEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_tol_feasibility"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration15get_tol_integerEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_tol_integer"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration24get_tol_mip_absolute_gapEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_tol_mip_absolute_gap"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration24get_tol_mip_relative_gapEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_tol_mip_relative_gap"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration18get_tol_optimalityEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_tol_optimality"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_var_primalERK3Var", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_var_primal"], [24, 4, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14get_var_primalERK3Var", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_var_primal::t_var"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration11get_var_rayERK3Var", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_var_ray"], [24, 4, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration11get_var_rayERK3Var", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_var_ray::t_var"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration20get_var_reduced_costERK3Var", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_var_reduced_cost"], [24, 4, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration20get_var_reduced_costERK3Var", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::get_var_reduced_cost::t_var"], [24, 2, 1, "_CPPv4I0ENK4idol10Optimizers6Robust29ColumnAndConstraintGeneration2isEbv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::is"], [24, 3, 1, "_CPPv4I0ENK4idol10Optimizers6Robust29ColumnAndConstraintGeneration2isEbv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::is::T"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration13is_terminatedEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::is_terminated"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration14master_problemEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::master_problem"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration12n_iterationsEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::n_iterations"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration4nameEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::name"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration6parentEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::parent"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration25set_param_best_bound_stopEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_best_bound_stop"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration25set_param_best_bound_stopEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_best_bound_stop::t_best_bound_stop"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration23set_param_best_obj_stopEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_best_obj_stop"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration23set_param_best_obj_stopEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_best_obj_stop::t_best_obj_stop"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_infeasible_or_unbounded_info"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_infeasible_or_unbounded_info::t_value"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration25set_param_iteration_limitEj", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_iteration_limit"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration25set_param_iteration_limitEj", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_iteration_limit::t_iteration_limit"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration14set_param_logsEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_logs"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration14set_param_logsEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_logs::t_value"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration18set_param_presolveEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_presolve"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration18set_param_presolveEb", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_presolve::t_value"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration17set_param_threadsEj", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_threads"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration17set_param_threadsEj", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_threads::t_threads"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration20set_param_time_limitEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_time_limit"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration20set_param_time_limitEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_param_time_limit::t_time_limit"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration19set_tol_feasibilityEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_feasibility"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration19set_tol_feasibilityEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_feasibility::t_tol_feasibility"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration15set_tol_integerEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_integer"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration15set_tol_integerEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_integer::t_tol_integer"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration24set_tol_mip_absolute_gapEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_mip_absolute_gap"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration24set_tol_mip_absolute_gapEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration24set_tol_mip_relative_gapEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_mip_relative_gap"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration24set_tol_mip_relative_gapEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration18set_tol_optimalityEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_optimality"], [24, 4, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration18set_tol_optimalityEd", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::set_tol_optimality::t_tol_optimality"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration17stage_descriptionEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::stage_description"], [24, 2, 1, "_CPPv4N4idol10Optimizers6Robust29ColumnAndConstraintGeneration9terminateEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::terminate"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration4timeEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::time"], [24, 2, 1, "_CPPv4NK4idol10Optimizers6Robust29ColumnAndConstraintGeneration15uncertainty_setEv", "idol::Optimizers::Robust::ColumnAndConstraintGeneration::uncertainty_set"], [67, 1, 1, "_CPPv4N4idol3OsiE", "idol::Osi"], [67, 2, 1, "_CPPv4N4idol3Osi20ContinuousRelaxationERK18OsiSolverInterface", "idol::Osi::ContinuousRelaxation"], [67, 4, 1, "_CPPv4N4idol3Osi20ContinuousRelaxationERK18OsiSolverInterface", "idol::Osi::ContinuousRelaxation::t_solver_interface"], [67, 2, 1, "_CPPv4N4idol3Osi3OsiERK18OsiSolverInterface", "idol::Osi::Osi"], [67, 2, 1, "_CPPv4N4idol3Osi3OsiERK3Osi", "idol::Osi::Osi"], [67, 2, 1, "_CPPv4N4idol3Osi3OsiERR3Osi", "idol::Osi::Osi"], [67, 4, 1, "_CPPv4N4idol3Osi3OsiERK18OsiSolverInterface", "idol::Osi::Osi::t_solver_interface"], [67, 4, 1, "_CPPv4N4idol3Osi3OsiERK3Osi", "idol::Osi::Osi::t_src"], [67, 2, 1, "_CPPv4I0EN4idol3Osi2asER1Tv", "idol::Osi::as"], [67, 2, 1, "_CPPv4I0ENK4idol3Osi2asERK1Tv", "idol::Osi::as"], [67, 3, 1, "_CPPv4I0EN4idol3Osi2asER1Tv", "idol::Osi::as::T"], [67, 3, 1, "_CPPv4I0ENK4idol3Osi2asERK1Tv", "idol::Osi::as::T"], [67, 2, 1, "_CPPv4NK4idol3Osi5cloneEv", "idol::Osi::clone"], [67, 2, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional"], [67, 2, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional"], [67, 4, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_conditional_value"], [67, 4, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_conditional_value"], [67, 4, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_else"], [67, 4, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_if"], [67, 4, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_if"], [67, 2, 1, "_CPPv4NK4idol3Osi27create_osi_solver_interfaceEv", "idol::Osi::create_osi_solver_interface"], [67, 2, 1, "_CPPv4I0ENK4idol3Osi2isEbv", "idol::Osi::is"], [67, 3, 1, "_CPPv4I0ENK4idol3Osi2isEbv", "idol::Osi::is::T"], [67, 2, 1, "_CPPv4NK4idol3OsiclERK5Model", "idol::Osi::operator()"], [67, 4, 1, "_CPPv4NK4idol3OsiclERK5Model", "idol::Osi::operator()::t_model"], [67, 2, 1, "_CPPv4N4idol3OsiaSERK3Osi", "idol::Osi::operator="], [67, 2, 1, "_CPPv4N4idol3OsiaSERR3Osi", "idol::Osi::operator="], [67, 2, 1, "_CPPv4N4idol3Osi27with_absolute_gap_toleranceEd", "idol::Osi::with_absolute_gap_tolerance"], [67, 4, 1, "_CPPv4N4idol3Osi27with_absolute_gap_toleranceEd", "idol::Osi::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [67, 2, 1, "_CPPv4N4idol3Osi20with_best_bound_stopEd", "idol::Osi::with_best_bound_stop"], [67, 4, 1, "_CPPv4N4idol3Osi20with_best_bound_stopEd", "idol::Osi::with_best_bound_stop::t_best_bound_stop"], [67, 2, 1, "_CPPv4N4idol3Osi18with_best_obj_stopEd", "idol::Osi::with_best_obj_stop"], [67, 4, 1, "_CPPv4N4idol3Osi18with_best_obj_stopEd", "idol::Osi::with_best_obj_stop::t_user_best_obj"], [67, 2, 1, "_CPPv4N4idol3Osi33with_infeasible_or_unbounded_infoEb", "idol::Osi::with_infeasible_or_unbounded_info"], [67, 4, 1, "_CPPv4N4idol3Osi33with_infeasible_or_unbounded_infoEb", "idol::Osi::with_infeasible_or_unbounded_info::t_value"], [67, 2, 1, "_CPPv4N4idol3Osi20with_iteration_limitEj", "idol::Osi::with_iteration_limit"], [67, 4, 1, "_CPPv4N4idol3Osi20with_iteration_limitEj", "idol::Osi::with_iteration_limit::t_iteration_count_limit"], [67, 2, 1, "_CPPv4N4idol3Osi9with_logsEb", "idol::Osi::with_logs"], [67, 4, 1, "_CPPv4N4idol3Osi9with_logsEb", "idol::Osi::with_logs::t_value"], [67, 2, 1, "_CPPv4N4idol3Osi13with_presolveEb", "idol::Osi::with_presolve"], [67, 4, 1, "_CPPv4N4idol3Osi13with_presolveEb", "idol::Osi::with_presolve::t_value"], [67, 2, 1, "_CPPv4N4idol3Osi27with_relative_gap_toleranceEd", "idol::Osi::with_relative_gap_tolerance"], [67, 4, 1, "_CPPv4N4idol3Osi27with_relative_gap_toleranceEd", "idol::Osi::with_relative_gap_tolerance::t_relative_gap_tolerance"], [67, 2, 1, "_CPPv4N4idol3Osi17with_thread_limitEj", "idol::Osi::with_thread_limit"], [67, 4, 1, "_CPPv4N4idol3Osi17with_thread_limitEj", "idol::Osi::with_thread_limit::t_max_n_threads"], [67, 2, 1, "_CPPv4N4idol3Osi15with_time_limitEd", "idol::Osi::with_time_limit"], [67, 4, 1, "_CPPv4N4idol3Osi15with_time_limitEd", "idol::Osi::with_time_limit::t_time_limit"], [63, 1, 1, "_CPPv4N4idol6OsiCbcE", "idol::OsiCbc"], [63, 2, 1, "_CPPv4N4idol6OsiCbc20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCbc::ContinuousRelaxation"], [63, 4, 1, "_CPPv4N4idol6OsiCbc20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCbc::ContinuousRelaxation::t_solver_interface"], [63, 2, 1, "_CPPv4I0EN4idol6OsiCbc2asER1Tv", "idol::OsiCbc::as"], [63, 2, 1, "_CPPv4I0ENK4idol6OsiCbc2asERK1Tv", "idol::OsiCbc::as"], [63, 3, 1, "_CPPv4I0EN4idol6OsiCbc2asER1Tv", "idol::OsiCbc::as::T"], [63, 3, 1, "_CPPv4I0ENK4idol6OsiCbc2asERK1Tv", "idol::OsiCbc::as::T"], [63, 2, 1, "_CPPv4NK4idol6OsiCbc5cloneEv", "idol::OsiCbc::clone"], [63, 2, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional"], [63, 2, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional"], [63, 4, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_conditional_value"], [63, 4, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_conditional_value"], [63, 4, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_else"], [63, 4, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_if"], [63, 4, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_if"], [63, 2, 1, "_CPPv4NK4idol6OsiCbc27create_osi_solver_interfaceEv", "idol::OsiCbc::create_osi_solver_interface"], [63, 2, 1, "_CPPv4I0ENK4idol6OsiCbc2isEbv", "idol::OsiCbc::is"], [63, 3, 1, "_CPPv4I0ENK4idol6OsiCbc2isEbv", "idol::OsiCbc::is::T"], [63, 2, 1, "_CPPv4NK4idol6OsiCbcclERK5Model", "idol::OsiCbc::operator()"], [63, 4, 1, "_CPPv4NK4idol6OsiCbcclERK5Model", "idol::OsiCbc::operator()::t_model"], [63, 2, 1, "_CPPv4N4idol6OsiCbc27with_absolute_gap_toleranceEd", "idol::OsiCbc::with_absolute_gap_tolerance"], [63, 4, 1, "_CPPv4N4idol6OsiCbc27with_absolute_gap_toleranceEd", "idol::OsiCbc::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [63, 2, 1, "_CPPv4N4idol6OsiCbc20with_best_bound_stopEd", "idol::OsiCbc::with_best_bound_stop"], [63, 4, 1, "_CPPv4N4idol6OsiCbc20with_best_bound_stopEd", "idol::OsiCbc::with_best_bound_stop::t_best_bound_stop"], [63, 2, 1, "_CPPv4N4idol6OsiCbc18with_best_obj_stopEd", "idol::OsiCbc::with_best_obj_stop"], [63, 4, 1, "_CPPv4N4idol6OsiCbc18with_best_obj_stopEd", "idol::OsiCbc::with_best_obj_stop::t_user_best_obj"], [63, 2, 1, "_CPPv4N4idol6OsiCbc33with_infeasible_or_unbounded_infoEb", "idol::OsiCbc::with_infeasible_or_unbounded_info"], [63, 4, 1, "_CPPv4N4idol6OsiCbc33with_infeasible_or_unbounded_infoEb", "idol::OsiCbc::with_infeasible_or_unbounded_info::t_value"], [63, 2, 1, "_CPPv4N4idol6OsiCbc20with_iteration_limitEj", "idol::OsiCbc::with_iteration_limit"], [63, 4, 1, "_CPPv4N4idol6OsiCbc20with_iteration_limitEj", "idol::OsiCbc::with_iteration_limit::t_iteration_count_limit"], [63, 2, 1, "_CPPv4N4idol6OsiCbc9with_logsEb", "idol::OsiCbc::with_logs"], [63, 4, 1, "_CPPv4N4idol6OsiCbc9with_logsEb", "idol::OsiCbc::with_logs::t_value"], [63, 2, 1, "_CPPv4N4idol6OsiCbc13with_presolveEb", "idol::OsiCbc::with_presolve"], [63, 4, 1, "_CPPv4N4idol6OsiCbc13with_presolveEb", "idol::OsiCbc::with_presolve::t_value"], [63, 2, 1, "_CPPv4N4idol6OsiCbc27with_relative_gap_toleranceEd", "idol::OsiCbc::with_relative_gap_tolerance"], [63, 4, 1, "_CPPv4N4idol6OsiCbc27with_relative_gap_toleranceEd", "idol::OsiCbc::with_relative_gap_tolerance::t_relative_gap_tolerance"], [63, 2, 1, "_CPPv4N4idol6OsiCbc17with_thread_limitEj", "idol::OsiCbc::with_thread_limit"], [63, 4, 1, "_CPPv4N4idol6OsiCbc17with_thread_limitEj", "idol::OsiCbc::with_thread_limit::t_max_n_threads"], [63, 2, 1, "_CPPv4N4idol6OsiCbc15with_time_limitEd", "idol::OsiCbc::with_time_limit"], [63, 4, 1, "_CPPv4N4idol6OsiCbc15with_time_limitEd", "idol::OsiCbc::with_time_limit::t_time_limit"], [64, 1, 1, "_CPPv4N4idol6OsiClpE", "idol::OsiClp"], [64, 2, 1, "_CPPv4N4idol6OsiClp20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiClp::ContinuousRelaxation"], [64, 4, 1, "_CPPv4N4idol6OsiClp20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiClp::ContinuousRelaxation::t_solver_interface"], [64, 2, 1, "_CPPv4I0EN4idol6OsiClp2asER1Tv", "idol::OsiClp::as"], [64, 2, 1, "_CPPv4I0ENK4idol6OsiClp2asERK1Tv", "idol::OsiClp::as"], [64, 3, 1, "_CPPv4I0EN4idol6OsiClp2asER1Tv", "idol::OsiClp::as::T"], [64, 3, 1, "_CPPv4I0ENK4idol6OsiClp2asERK1Tv", "idol::OsiClp::as::T"], [64, 2, 1, "_CPPv4NK4idol6OsiClp5cloneEv", "idol::OsiClp::clone"], [64, 2, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional"], [64, 2, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional"], [64, 4, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_conditional_value"], [64, 4, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_conditional_value"], [64, 4, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_else"], [64, 4, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_if"], [64, 4, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_if"], [64, 2, 1, "_CPPv4NK4idol6OsiClp27create_osi_solver_interfaceEv", "idol::OsiClp::create_osi_solver_interface"], [64, 2, 1, "_CPPv4I0ENK4idol6OsiClp2isEbv", "idol::OsiClp::is"], [64, 3, 1, "_CPPv4I0ENK4idol6OsiClp2isEbv", "idol::OsiClp::is::T"], [64, 2, 1, "_CPPv4NK4idol6OsiClpclERK5Model", "idol::OsiClp::operator()"], [64, 4, 1, "_CPPv4NK4idol6OsiClpclERK5Model", "idol::OsiClp::operator()::t_model"], [64, 2, 1, "_CPPv4N4idol6OsiClp27with_absolute_gap_toleranceEd", "idol::OsiClp::with_absolute_gap_tolerance"], [64, 4, 1, "_CPPv4N4idol6OsiClp27with_absolute_gap_toleranceEd", "idol::OsiClp::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [64, 2, 1, "_CPPv4N4idol6OsiClp20with_best_bound_stopEd", "idol::OsiClp::with_best_bound_stop"], [64, 4, 1, "_CPPv4N4idol6OsiClp20with_best_bound_stopEd", "idol::OsiClp::with_best_bound_stop::t_best_bound_stop"], [64, 2, 1, "_CPPv4N4idol6OsiClp18with_best_obj_stopEd", "idol::OsiClp::with_best_obj_stop"], [64, 4, 1, "_CPPv4N4idol6OsiClp18with_best_obj_stopEd", "idol::OsiClp::with_best_obj_stop::t_user_best_obj"], [64, 2, 1, "_CPPv4N4idol6OsiClp33with_infeasible_or_unbounded_infoEb", "idol::OsiClp::with_infeasible_or_unbounded_info"], [64, 4, 1, "_CPPv4N4idol6OsiClp33with_infeasible_or_unbounded_infoEb", "idol::OsiClp::with_infeasible_or_unbounded_info::t_value"], [64, 2, 1, "_CPPv4N4idol6OsiClp20with_iteration_limitEj", "idol::OsiClp::with_iteration_limit"], [64, 4, 1, "_CPPv4N4idol6OsiClp20with_iteration_limitEj", "idol::OsiClp::with_iteration_limit::t_iteration_count_limit"], [64, 2, 1, "_CPPv4N4idol6OsiClp9with_logsEb", "idol::OsiClp::with_logs"], [64, 4, 1, "_CPPv4N4idol6OsiClp9with_logsEb", "idol::OsiClp::with_logs::t_value"], [64, 2, 1, "_CPPv4N4idol6OsiClp13with_presolveEb", "idol::OsiClp::with_presolve"], [64, 4, 1, "_CPPv4N4idol6OsiClp13with_presolveEb", "idol::OsiClp::with_presolve::t_value"], [64, 2, 1, "_CPPv4N4idol6OsiClp27with_relative_gap_toleranceEd", "idol::OsiClp::with_relative_gap_tolerance"], [64, 4, 1, "_CPPv4N4idol6OsiClp27with_relative_gap_toleranceEd", "idol::OsiClp::with_relative_gap_tolerance::t_relative_gap_tolerance"], [64, 2, 1, "_CPPv4N4idol6OsiClp17with_thread_limitEj", "idol::OsiClp::with_thread_limit"], [64, 4, 1, "_CPPv4N4idol6OsiClp17with_thread_limitEj", "idol::OsiClp::with_thread_limit::t_max_n_threads"], [64, 2, 1, "_CPPv4N4idol6OsiClp15with_time_limitEd", "idol::OsiClp::with_time_limit"], [64, 4, 1, "_CPPv4N4idol6OsiClp15with_time_limitEd", "idol::OsiClp::with_time_limit::t_time_limit"], [65, 1, 1, "_CPPv4N4idol8OsiCplexE", "idol::OsiCplex"], [65, 2, 1, "_CPPv4N4idol8OsiCplex20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCplex::ContinuousRelaxation"], [65, 4, 1, "_CPPv4N4idol8OsiCplex20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCplex::ContinuousRelaxation::t_solver_interface"], [65, 2, 1, "_CPPv4I0EN4idol8OsiCplex2asER1Tv", "idol::OsiCplex::as"], [65, 2, 1, "_CPPv4I0ENK4idol8OsiCplex2asERK1Tv", "idol::OsiCplex::as"], [65, 3, 1, "_CPPv4I0EN4idol8OsiCplex2asER1Tv", "idol::OsiCplex::as::T"], [65, 3, 1, "_CPPv4I0ENK4idol8OsiCplex2asERK1Tv", "idol::OsiCplex::as::T"], [65, 2, 1, "_CPPv4NK4idol8OsiCplex5cloneEv", "idol::OsiCplex::clone"], [65, 2, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional"], [65, 2, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional"], [65, 4, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_conditional_value"], [65, 4, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_conditional_value"], [65, 4, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_else"], [65, 4, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_if"], [65, 4, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_if"], [65, 2, 1, "_CPPv4NK4idol8OsiCplex27create_osi_solver_interfaceEv", "idol::OsiCplex::create_osi_solver_interface"], [65, 2, 1, "_CPPv4I0ENK4idol8OsiCplex2isEbv", "idol::OsiCplex::is"], [65, 3, 1, "_CPPv4I0ENK4idol8OsiCplex2isEbv", "idol::OsiCplex::is::T"], [65, 2, 1, "_CPPv4NK4idol8OsiCplexclERK5Model", "idol::OsiCplex::operator()"], [65, 4, 1, "_CPPv4NK4idol8OsiCplexclERK5Model", "idol::OsiCplex::operator()::t_model"], [65, 2, 1, "_CPPv4N4idol8OsiCplex27with_absolute_gap_toleranceEd", "idol::OsiCplex::with_absolute_gap_tolerance"], [65, 4, 1, "_CPPv4N4idol8OsiCplex27with_absolute_gap_toleranceEd", "idol::OsiCplex::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [65, 2, 1, "_CPPv4N4idol8OsiCplex20with_best_bound_stopEd", "idol::OsiCplex::with_best_bound_stop"], [65, 4, 1, "_CPPv4N4idol8OsiCplex20with_best_bound_stopEd", "idol::OsiCplex::with_best_bound_stop::t_best_bound_stop"], [65, 2, 1, "_CPPv4N4idol8OsiCplex18with_best_obj_stopEd", "idol::OsiCplex::with_best_obj_stop"], [65, 4, 1, "_CPPv4N4idol8OsiCplex18with_best_obj_stopEd", "idol::OsiCplex::with_best_obj_stop::t_user_best_obj"], [65, 2, 1, "_CPPv4N4idol8OsiCplex33with_infeasible_or_unbounded_infoEb", "idol::OsiCplex::with_infeasible_or_unbounded_info"], [65, 4, 1, "_CPPv4N4idol8OsiCplex33with_infeasible_or_unbounded_infoEb", "idol::OsiCplex::with_infeasible_or_unbounded_info::t_value"], [65, 2, 1, "_CPPv4N4idol8OsiCplex20with_iteration_limitEj", "idol::OsiCplex::with_iteration_limit"], [65, 4, 1, "_CPPv4N4idol8OsiCplex20with_iteration_limitEj", "idol::OsiCplex::with_iteration_limit::t_iteration_count_limit"], [65, 2, 1, "_CPPv4N4idol8OsiCplex9with_logsEb", "idol::OsiCplex::with_logs"], [65, 4, 1, "_CPPv4N4idol8OsiCplex9with_logsEb", "idol::OsiCplex::with_logs::t_value"], [65, 2, 1, "_CPPv4N4idol8OsiCplex13with_presolveEb", "idol::OsiCplex::with_presolve"], [65, 4, 1, "_CPPv4N4idol8OsiCplex13with_presolveEb", "idol::OsiCplex::with_presolve::t_value"], [65, 2, 1, "_CPPv4N4idol8OsiCplex27with_relative_gap_toleranceEd", "idol::OsiCplex::with_relative_gap_tolerance"], [65, 4, 1, "_CPPv4N4idol8OsiCplex27with_relative_gap_toleranceEd", "idol::OsiCplex::with_relative_gap_tolerance::t_relative_gap_tolerance"], [65, 2, 1, "_CPPv4N4idol8OsiCplex17with_thread_limitEj", "idol::OsiCplex::with_thread_limit"], [65, 4, 1, "_CPPv4N4idol8OsiCplex17with_thread_limitEj", "idol::OsiCplex::with_thread_limit::t_max_n_threads"], [65, 2, 1, "_CPPv4N4idol8OsiCplex15with_time_limitEd", "idol::OsiCplex::with_time_limit"], [65, 4, 1, "_CPPv4N4idol8OsiCplex15with_time_limitEd", "idol::OsiCplex::with_time_limit::t_time_limit"], [66, 1, 1, "_CPPv4N4idol11OsiSymphonyE", "idol::OsiSymphony"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiSymphony::ContinuousRelaxation"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiSymphony::ContinuousRelaxation::t_solver_interface"], [66, 2, 1, "_CPPv4I0EN4idol11OsiSymphony2asER1Tv", "idol::OsiSymphony::as"], [66, 2, 1, "_CPPv4I0ENK4idol11OsiSymphony2asERK1Tv", "idol::OsiSymphony::as"], [66, 3, 1, "_CPPv4I0EN4idol11OsiSymphony2asER1Tv", "idol::OsiSymphony::as::T"], [66, 3, 1, "_CPPv4I0ENK4idol11OsiSymphony2asERK1Tv", "idol::OsiSymphony::as::T"], [66, 2, 1, "_CPPv4NK4idol11OsiSymphony5cloneEv", "idol::OsiSymphony::clone"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_conditional_value"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_conditional_value"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_else"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_if"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_if"], [66, 2, 1, "_CPPv4NK4idol11OsiSymphony27create_osi_solver_interfaceEv", "idol::OsiSymphony::create_osi_solver_interface"], [66, 2, 1, "_CPPv4I0ENK4idol11OsiSymphony2isEbv", "idol::OsiSymphony::is"], [66, 3, 1, "_CPPv4I0ENK4idol11OsiSymphony2isEbv", "idol::OsiSymphony::is::T"], [66, 2, 1, "_CPPv4NK4idol11OsiSymphonyclERK5Model", "idol::OsiSymphony::operator()"], [66, 4, 1, "_CPPv4NK4idol11OsiSymphonyclERK5Model", "idol::OsiSymphony::operator()::t_model"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony27with_absolute_gap_toleranceEd", "idol::OsiSymphony::with_absolute_gap_tolerance"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony27with_absolute_gap_toleranceEd", "idol::OsiSymphony::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony20with_best_bound_stopEd", "idol::OsiSymphony::with_best_bound_stop"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony20with_best_bound_stopEd", "idol::OsiSymphony::with_best_bound_stop::t_best_bound_stop"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony18with_best_obj_stopEd", "idol::OsiSymphony::with_best_obj_stop"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony18with_best_obj_stopEd", "idol::OsiSymphony::with_best_obj_stop::t_user_best_obj"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony33with_infeasible_or_unbounded_infoEb", "idol::OsiSymphony::with_infeasible_or_unbounded_info"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony33with_infeasible_or_unbounded_infoEb", "idol::OsiSymphony::with_infeasible_or_unbounded_info::t_value"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony20with_iteration_limitEj", "idol::OsiSymphony::with_iteration_limit"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony20with_iteration_limitEj", "idol::OsiSymphony::with_iteration_limit::t_iteration_count_limit"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony9with_logsEb", "idol::OsiSymphony::with_logs"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony9with_logsEb", "idol::OsiSymphony::with_logs::t_value"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony13with_presolveEb", "idol::OsiSymphony::with_presolve"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony13with_presolveEb", "idol::OsiSymphony::with_presolve::t_value"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony27with_relative_gap_toleranceEd", "idol::OsiSymphony::with_relative_gap_tolerance"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony27with_relative_gap_toleranceEd", "idol::OsiSymphony::with_relative_gap_tolerance::t_relative_gap_tolerance"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony17with_thread_limitEj", "idol::OsiSymphony::with_thread_limit"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony17with_thread_limitEj", "idol::OsiSymphony::with_thread_limit::t_max_n_threads"], [66, 2, 1, "_CPPv4N4idol11OsiSymphony15with_time_limitEd", "idol::OsiSymphony::with_time_limit"], [66, 4, 1, "_CPPv4N4idol11OsiSymphony15with_time_limitEd", "idol::OsiSymphony::with_time_limit::t_time_limit"], [43, 1, 1, "_CPPv4N4idol5ParamE", "idol::Param"], [43, 2, 1, "_CPPv4N4idol5Param5ParamERK3Ctr", "idol::Param::Param"], [43, 2, 1, "_CPPv4N4idol5Param5ParamERK3Var", "idol::Param::Param"], [43, 2, 1, "_CPPv4N4idol5Param5ParamERK5Param", "idol::Param::Param"], [43, 2, 1, "_CPPv4N4idol5Param5ParamERR5Param", "idol::Param::Param"], [43, 4, 1, "_CPPv4N4idol5Param5ParamERK3Ctr", "idol::Param::Param::t_ctr"], [43, 4, 1, "_CPPv4N4idol5Param5ParamERK5Param", "idol::Param::Param::t_param"], [43, 4, 1, "_CPPv4N4idol5Param5ParamERR5Param", "idol::Param::Param::t_param"], [43, 4, 1, "_CPPv4N4idol5Param5ParamERK3Var", "idol::Param::Param::t_var"], [43, 2, 1, "_CPPv4I0ENK4idol5Param2asE1Tv", "idol::Param::as"], [43, 3, 1, "_CPPv4I0ENK4idol5Param2asE1Tv", "idol::Param::as::T"], [43, 2, 1, "_CPPv4NK4idol5Param2idEv", "idol::Param::id"], [43, 2, 1, "_CPPv4I0ENK4idol5Param2isEbv", "idol::Param::is"], [43, 3, 1, "_CPPv4I0ENK4idol5Param2isEbv", "idol::Param::is::T"], [43, 2, 1, "_CPPv4NK4idol5Param4nameEv", "idol::Param::name"], [43, 2, 1, "_CPPv4N4idol5ParamaSERK5Param", "idol::Param::operator="], [43, 2, 1, "_CPPv4N4idol5ParamaSERR5Param", "idol::Param::operator="], [43, 4, 1, "_CPPv4N4idol5ParamaSERK5Param", "idol::Param::operator=::t_param"], [43, 4, 1, "_CPPv4N4idol5ParamaSERR5Param", "idol::Param::operator=::t_param"], [82, 5, 1, "_CPPv4N4idol13CallbackEvent14PrunedSolutionE", "idol::PrunedSolution"], [19, 1, 1, "_CPPv4N4idol10PseudoCostE", "idol::PseudoCost"], [19, 2, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost"], [19, 2, 1, "_CPPv4N4idol10PseudoCost10PseudoCostEv", "idol::PseudoCost::PseudoCost"], [19, 3, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost::IteratorT"], [19, 4, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost::t_begin"], [19, 4, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost::t_end"], [19, 1, 1, "_CPPv4I0EN4idol10PseudoCost8StrategyE", "idol::PseudoCost::Strategy"], [19, 3, 1, "_CPPv4I0EN4idol10PseudoCost8StrategyE", "idol::PseudoCost::Strategy::NodeInfoT"], [19, 2, 1, "_CPPv4N4idol10PseudoCost8Strategy8StrategyERK10PseudoCost", "idol::PseudoCost::Strategy::Strategy"], [19, 2, 1, "_CPPv4N4idol10PseudoCost8Strategy8StrategyEv", "idol::PseudoCost::Strategy::Strategy"], [19, 4, 1, "_CPPv4N4idol10PseudoCost8Strategy8StrategyERK10PseudoCost", "idol::PseudoCost::Strategy::Strategy::t_parent"], [19, 2, 1, "_CPPv4NK4idol10PseudoCost8Strategy5cloneEv", "idol::PseudoCost::Strategy::clone"], [19, 2, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::PseudoCost::Strategy::operator()"], [19, 2, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::PseudoCost::Strategy::operator()"], [19, 4, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::PseudoCost::Strategy::operator()::t_parent"], [19, 4, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::PseudoCost::Strategy::operator()::t_parent"], [44, 1, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr"], [44, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::EqualTo"], [44, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::Hash"], [44, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::Key1"], [44, 3, 1, "_CPPv4I0000EN4idol8QuadExprE", "idol::QuadExpr::Key2"], [44, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", "idol::QuadExpr::QuadExpr"], [44, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr"], [44, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr", "idol::QuadExpr::QuadExpr"], [44, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr"], [44, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8QuadExpr", "idol::QuadExpr::QuadExpr"], [44, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprEv", "idol::QuadExpr::QuadExpr"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_a"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_a"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_a"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_b"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_b"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_b"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_factor"], [44, 4, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8ConstantRK4Key1RK4Key2", "idol::QuadExpr::QuadExpr::t_factor"], [44, 2, 1, "_CPPv4NK4idol8QuadExpr3fixERKN8Solution6PrimalE", "idol::QuadExpr::fix"], [44, 4, 1, "_CPPv4NK4idol8QuadExpr3fixERKN8Solution6PrimalE", "idol::QuadExpr::fix::t_primals"], [44, 2, 1, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", "idol::QuadExpr::get"], [44, 4, 1, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", "idol::QuadExpr::get::t_a"], [44, 4, 1, "_CPPv4NK4idol8QuadExpr3getERK4Key1RK4Key2", "idol::QuadExpr::get::t_b"], [44, 2, 1, "_CPPv4N4idol8QuadExpraSERK8QuadExpr", "idol::QuadExpr::operator="], [44, 2, 1, "_CPPv4N4idol8QuadExpraSERR8QuadExpr", "idol::QuadExpr::operator="], [44, 2, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set"], [44, 4, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set::t_a"], [44, 4, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set::t_b"], [44, 4, 1, "_CPPv4N4idol8QuadExpr3setERK4Key1RK4Key28Constant", "idol::QuadExpr::set::t_coefficient"], [44, 2, 1, "_CPPv4N4idol8QuadExprD0Ev", "idol::QuadExpr::~QuadExpr"], [23, 1, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGenerationE", "idol::Robust::ColumnAndConstraintGeneration"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationEN6Robust16StageDescriptionERK5Model", "idol::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK29ColumnAndConstraintGeneration", "idol::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERR29ColumnAndConstraintGeneration", "idol::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationERK29ColumnAndConstraintGeneration", "idol::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_src"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationEN6Robust16StageDescriptionERK5Model", "idol::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_stage_description"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration29ColumnAndConstraintGenerationEN6Robust16StageDescriptionERK5Model", "idol::Robust::ColumnAndConstraintGeneration::ColumnAndConstraintGeneration::t_uncertainty_set"], [23, 2, 1, "_CPPv4I0EN4idol6Robust29ColumnAndConstraintGeneration2asER1Tv", "idol::Robust::ColumnAndConstraintGeneration::as"], [23, 2, 1, "_CPPv4I0ENK4idol6Robust29ColumnAndConstraintGeneration2asERK1Tv", "idol::Robust::ColumnAndConstraintGeneration::as"], [23, 3, 1, "_CPPv4I0EN4idol6Robust29ColumnAndConstraintGeneration2asER1Tv", "idol::Robust::ColumnAndConstraintGeneration::as::T"], [23, 3, 1, "_CPPv4I0ENK4idol6Robust29ColumnAndConstraintGeneration2asERK1Tv", "idol::Robust::ColumnAndConstraintGeneration::as::T"], [23, 2, 1, "_CPPv4NK4idol6Robust29ColumnAndConstraintGeneration5cloneEv", "idol::Robust::ColumnAndConstraintGeneration::clone"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEERKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional::t_conditional_value"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEERKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional::t_conditional_value"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEERKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional::t_else"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional::t_if"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration11conditionalEbRKNSt8functionIFvR29ColumnAndConstraintGenerationEEERKNSt8functionIFvR29ColumnAndConstraintGenerationEEE", "idol::Robust::ColumnAndConstraintGeneration::conditional::t_if"], [23, 2, 1, "_CPPv4I0ENK4idol6Robust29ColumnAndConstraintGeneration2isEbv", "idol::Robust::ColumnAndConstraintGeneration::is"], [23, 3, 1, "_CPPv4I0ENK4idol6Robust29ColumnAndConstraintGeneration2isEbv", "idol::Robust::ColumnAndConstraintGeneration::is::T"], [23, 2, 1, "_CPPv4NK4idol6Robust29ColumnAndConstraintGenerationclERK5Model", "idol::Robust::ColumnAndConstraintGeneration::operator()"], [23, 4, 1, "_CPPv4NK4idol6Robust29ColumnAndConstraintGenerationclERK5Model", "idol::Robust::ColumnAndConstraintGeneration::operator()::t_model"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGenerationaSERK29ColumnAndConstraintGeneration", "idol::Robust::ColumnAndConstraintGeneration::operator="], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGenerationaSERR29ColumnAndConstraintGeneration", "idol::Robust::ColumnAndConstraintGeneration::operator="], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration27with_absolute_gap_toleranceEd", "idol::Robust::ColumnAndConstraintGeneration::with_absolute_gap_tolerance"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration27with_absolute_gap_toleranceEd", "idol::Robust::ColumnAndConstraintGeneration::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration20with_best_bound_stopEd", "idol::Robust::ColumnAndConstraintGeneration::with_best_bound_stop"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration20with_best_bound_stopEd", "idol::Robust::ColumnAndConstraintGeneration::with_best_bound_stop::t_best_bound_stop"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration18with_best_obj_stopEd", "idol::Robust::ColumnAndConstraintGeneration::with_best_obj_stop"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration18with_best_obj_stopEd", "idol::Robust::ColumnAndConstraintGeneration::with_best_obj_stop::t_user_best_obj"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration22with_complete_recourseEb", "idol::Robust::ColumnAndConstraintGeneration::with_complete_recourse"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration22with_complete_recourseEb", "idol::Robust::ColumnAndConstraintGeneration::with_complete_recourse::t_value"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration33with_infeasible_or_unbounded_infoEb", "idol::Robust::ColumnAndConstraintGeneration::with_infeasible_or_unbounded_info"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration33with_infeasible_or_unbounded_infoEb", "idol::Robust::ColumnAndConstraintGeneration::with_infeasible_or_unbounded_info::t_value"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration20with_iteration_limitEj", "idol::Robust::ColumnAndConstraintGeneration::with_iteration_limit"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration20with_iteration_limitEj", "idol::Robust::ColumnAndConstraintGeneration::with_iteration_limit::t_iteration_count_limit"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration9with_logsEb", "idol::Robust::ColumnAndConstraintGeneration::with_logs"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration9with_logsEb", "idol::Robust::ColumnAndConstraintGeneration::with_logs::t_value"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration21with_master_optimizerERK16OptimizerFactory", "idol::Robust::ColumnAndConstraintGeneration::with_master_optimizer"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration21with_master_optimizerERK16OptimizerFactory", "idol::Robust::ColumnAndConstraintGeneration::with_master_optimizer::t_optimizer"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration13with_presolveEb", "idol::Robust::ColumnAndConstraintGeneration::with_presolve"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration13with_presolveEb", "idol::Robust::ColumnAndConstraintGeneration::with_presolve::t_value"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration27with_relative_gap_toleranceEd", "idol::Robust::ColumnAndConstraintGeneration::with_relative_gap_tolerance"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration27with_relative_gap_toleranceEd", "idol::Robust::ColumnAndConstraintGeneration::with_relative_gap_tolerance::t_relative_gap_tolerance"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration14with_separatorERK12CCGSeparator", "idol::Robust::ColumnAndConstraintGeneration::with_separator"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration14with_separatorERK12CCGSeparator", "idol::Robust::ColumnAndConstraintGeneration::with_separator::t_separator"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration18with_stabilizationERK13CCGStabilizer", "idol::Robust::ColumnAndConstraintGeneration::with_stabilization"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration18with_stabilizationERK13CCGStabilizer", "idol::Robust::ColumnAndConstraintGeneration::with_stabilization::t_stabilizer"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration17with_thread_limitEj", "idol::Robust::ColumnAndConstraintGeneration::with_thread_limit"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration17with_thread_limitEj", "idol::Robust::ColumnAndConstraintGeneration::with_thread_limit::t_max_n_threads"], [23, 2, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration15with_time_limitEd", "idol::Robust::ColumnAndConstraintGeneration::with_time_limit"], [23, 4, 1, "_CPPv4N4idol6Robust29ColumnAndConstraintGeneration15with_time_limitEd", "idol::Robust::ColumnAndConstraintGeneration::with_time_limit::t_time_limit"], [45, 1, 1, "_CPPv4N4idol3RowE", "idol::Row"], [45, 7, 1, "_CPPv4N4idol3Row8EmptyRowE", "idol::Row::EmptyRow"], [45, 2, 1, "_CPPv4N4idol3Row3RowERK3Row", "idol::Row::Row"], [45, 2, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row"], [45, 2, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row"], [45, 2, 1, "_CPPv4N4idol3Row3RowERR3Row", "idol::Row::Row"], [45, 2, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row"], [45, 2, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row"], [45, 2, 1, "_CPPv4N4idol3Row3RowEv", "idol::Row::Row"], [45, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_lhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERK4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERK4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERR4ExprI3Var3VarERR4ExprI3Var3VarE", "idol::Row::Row::t_rhs"], [45, 4, 1, "_CPPv4N4idol3Row3RowERK3Row", "idol::Row::Row::t_src"], [45, 4, 1, "_CPPv4N4idol3Row3RowERR3Row", "idol::Row::Row::t_src"], [45, 2, 1, "_CPPv4NK4idol3Row3fixERKN8Solution4DualE", "idol::Row::fix"], [45, 2, 1, "_CPPv4NK4idol3Row3fixERKN8Solution6PrimalE", "idol::Row::fix"], [45, 4, 1, "_CPPv4NK4idol3Row3fixERKN8Solution4DualE", "idol::Row::fix::t_duals"], [45, 4, 1, "_CPPv4NK4idol3Row3fixERKN8Solution6PrimalE", "idol::Row::fix::t_primals"], [45, 2, 1, "_CPPv4NK4idol3Row3gcdEv", "idol::Row::gcd"], [45, 2, 1, "_CPPv4NK4idol3Row11is_violatedERKN8Solution6PrimalE7CtrTyped", "idol::Row::is_violated"], [45, 4, 1, "_CPPv4NK4idol3Row11is_violatedERKN8Solution6PrimalE7CtrTyped", "idol::Row::is_violated::t_primals"], [45, 4, 1, "_CPPv4NK4idol3Row11is_violatedERKN8Solution6PrimalE7CtrTyped", "idol::Row::is_violated::t_tolerance"], [45, 4, 1, "_CPPv4NK4idol3Row11is_violatedERKN8Solution6PrimalE7CtrTyped", "idol::Row::is_violated::t_type"], [45, 2, 1, "_CPPv4N4idol3Row6linearEv", "idol::Row::linear"], [45, 2, 1, "_CPPv4NK4idol3Row6linearEv", "idol::Row::linear"], [45, 2, 1, "_CPPv4N4idol3Row38multiply_with_precision_by_power_of_10Ejj", "idol::Row::multiply_with_precision_by_power_of_10"], [45, 4, 1, "_CPPv4N4idol3Row38multiply_with_precision_by_power_of_10Ejj", "idol::Row::multiply_with_precision_by_power_of_10::t_exponent"], [45, 4, 1, "_CPPv4N4idol3Row38multiply_with_precision_by_power_of_10Ejj", "idol::Row::multiply_with_precision_by_power_of_10::t_n_significant_digits"], [45, 2, 1, "_CPPv4N4idol3RowmLEd", "idol::Row::operator*="], [45, 4, 1, "_CPPv4N4idol3RowmLEd", "idol::Row::operator*=::t_rhs"], [45, 2, 1, "_CPPv4N4idol3RowpLERK3Row", "idol::Row::operator+="], [45, 4, 1, "_CPPv4N4idol3RowpLERK3Row", "idol::Row::operator+=::t_rhs"], [45, 2, 1, "_CPPv4N4idol3RowmIERK3Row", "idol::Row::operator-="], [45, 4, 1, "_CPPv4N4idol3RowmIERK3Row", "idol::Row::operator-=::t_rhs"], [45, 2, 1, "_CPPv4N4idol3RowdVEd", "idol::Row::operator/="], [45, 4, 1, "_CPPv4N4idol3RowdVEd", "idol::Row::operator/=::t_rhs"], [45, 2, 1, "_CPPv4N4idol3RowaSERK3Row", "idol::Row::operator="], [45, 2, 1, "_CPPv4N4idol3RowaSERR3Row", "idol::Row::operator="], [45, 4, 1, "_CPPv4N4idol3RowaSERK3Row", "idol::Row::operator=::t_src"], [45, 4, 1, "_CPPv4N4idol3RowaSERR3Row", "idol::Row::operator=::t_src"], [45, 2, 1, "_CPPv4N4idol3Row9quadraticEv", "idol::Row::quadratic"], [45, 2, 1, "_CPPv4NK4idol3Row9quadraticEv", "idol::Row::quadratic"], [45, 2, 1, "_CPPv4N4idol3Row3rhsEv", "idol::Row::rhs"], [45, 2, 1, "_CPPv4NK4idol3Row3rhsEv", "idol::Row::rhs"], [45, 2, 1, "_CPPv4N4idol3Row17scale_to_integersEj", "idol::Row::scale_to_integers"], [45, 4, 1, "_CPPv4N4idol3Row17scale_to_integersEj", "idol::Row::scale_to_integers::t_n_significant_digits"], [45, 2, 1, "_CPPv4N4idol3Row10set_linearERK7LinExprI3VarE", "idol::Row::set_linear"], [45, 2, 1, "_CPPv4N4idol3Row10set_linearERR7LinExprI3VarE", "idol::Row::set_linear"], [45, 4, 1, "_CPPv4N4idol3Row10set_linearERK7LinExprI3VarE", "idol::Row::set_linear::t_lin_expr"], [45, 4, 1, "_CPPv4N4idol3Row10set_linearERR7LinExprI3VarE", "idol::Row::set_linear::t_lin_expr"], [45, 2, 1, "_CPPv4N4idol3Row13set_quadraticERK8QuadExprI3Var3VarE", "idol::Row::set_quadratic"], [45, 2, 1, "_CPPv4N4idol3Row13set_quadraticERR8QuadExprI3Var3VarE", "idol::Row::set_quadratic"], [45, 4, 1, "_CPPv4N4idol3Row13set_quadraticERK8QuadExprI3Var3VarE", "idol::Row::set_quadratic::t_quad_expr"], [45, 4, 1, "_CPPv4N4idol3Row13set_quadraticERR8QuadExprI3Var3VarE", "idol::Row::set_quadratic::t_quad_expr"], [45, 2, 1, "_CPPv4N4idol3Row7set_rhsERK8Constant", "idol::Row::set_rhs"], [45, 2, 1, "_CPPv4N4idol3Row7set_rhsERR8Constant", "idol::Row::set_rhs"], [45, 4, 1, "_CPPv4N4idol3Row7set_rhsERK8Constant", "idol::Row::set_rhs::t_rhs"], [45, 4, 1, "_CPPv4N4idol3Row7set_rhsERR8Constant", "idol::Row::set_rhs::t_rhs"], [45, 2, 1, "_CPPv4NK4idol3Row5valueERKN8Solution6PrimalE", "idol::Row::value"], [45, 4, 1, "_CPPv4NK4idol3Row5valueERKN8Solution6PrimalE", "idol::Row::value::t_primals"], [46, 1, 1, "_CPPv4N4idol8Solution4DualE", "idol::Solution::Dual"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual5beginEv", "idol::Solution::Dual::begin"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual6cbeginEv", "idol::Solution::Dual::cbegin"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual4cendEv", "idol::Solution::Dual::cend"], [46, 0, 1, "_CPPv4N4idol8Solution4Dual14const_iteratorE", "idol::Solution::Dual::const_iterator"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual3endEv", "idol::Solution::Dual::end"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual3getERK3Ctr", "idol::Solution::Dual::get"], [46, 4, 1, "_CPPv4NK4idol8Solution4Dual3getERK3Ctr", "idol::Solution::Dual::get::t_key"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual19has_objective_valueEv", "idol::Solution::Dual::has_objective_value"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual22merge_without_conflictE4Dual", "idol::Solution::Dual::merge_without_conflict"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual22merge_without_conflictE4Dual", "idol::Solution::Dual::merge_without_conflict::t_rhs"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual4normEd", "idol::Solution::Dual::norm"], [46, 4, 1, "_CPPv4NK4idol8Solution4Dual4normEd", "idol::Solution::Dual::norm::t_p"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual9normalizeEd", "idol::Solution::Dual::normalize"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual9normalizeEd", "idol::Solution::Dual::normalize::t_p"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual15objective_valueEv", "idol::Solution::Dual::objective_value"], [46, 2, 1, "_CPPv4N4idol8Solution4DualmLEd", "idol::Solution::Dual::operator*="], [46, 4, 1, "_CPPv4N4idol8Solution4DualmLEd", "idol::Solution::Dual::operator*=::t_factor"], [46, 2, 1, "_CPPv4N4idol8Solution4DualpLERK4Dual", "idol::Solution::Dual::operator+="], [46, 4, 1, "_CPPv4N4idol8Solution4DualpLERK4Dual", "idol::Solution::Dual::operator+=::t_rhs"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual6reasonEv", "idol::Solution::Dual::reason"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual21reset_objective_valueEv", "idol::Solution::Dual::reset_objective_value"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual5roundEj", "idol::Solution::Dual::round"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual5roundEj", "idol::Solution::Dual::round::t_n_digits"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", "idol::Solution::Dual::set"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", "idol::Solution::Dual::set::t_key"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual3setERK3Ctrd", "idol::Solution::Dual::set::t_value"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual19set_objective_valueEd", "idol::Solution::Dual::set_objective_value"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual19set_objective_valueEd", "idol::Solution::Dual::set_objective_value::t_value"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual10set_reasonE14SolutionReason", "idol::Solution::Dual::set_reason"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual10set_reasonE14SolutionReason", "idol::Solution::Dual::set_reason::t_reason"], [46, 2, 1, "_CPPv4N4idol8Solution4Dual10set_statusE14SolutionStatus", "idol::Solution::Dual::set_status"], [46, 4, 1, "_CPPv4N4idol8Solution4Dual10set_statusE14SolutionStatus", "idol::Solution::Dual::set_status::t_status"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual4sizeEv", "idol::Solution::Dual::size"], [46, 2, 1, "_CPPv4NK4idol8Solution4Dual6statusEv", "idol::Solution::Dual::status"], [47, 1, 1, "_CPPv4N4idol8Solution6PrimalE", "idol::Solution::Primal"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal5beginEv", "idol::Solution::Primal::begin"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal6cbeginEv", "idol::Solution::Primal::cbegin"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal4cendEv", "idol::Solution::Primal::cend"], [47, 0, 1, "_CPPv4N4idol8Solution6Primal14const_iteratorE", "idol::Solution::Primal::const_iterator"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal3endEv", "idol::Solution::Primal::end"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal3getERK3Var", "idol::Solution::Primal::get"], [47, 4, 1, "_CPPv4NK4idol8Solution6Primal3getERK3Var", "idol::Solution::Primal::get::t_key"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal19has_objective_valueEv", "idol::Solution::Primal::has_objective_value"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal22merge_without_conflictE6Primal", "idol::Solution::Primal::merge_without_conflict"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal22merge_without_conflictE6Primal", "idol::Solution::Primal::merge_without_conflict::t_rhs"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal4normEd", "idol::Solution::Primal::norm"], [47, 4, 1, "_CPPv4NK4idol8Solution6Primal4normEd", "idol::Solution::Primal::norm::t_p"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal9normalizeEd", "idol::Solution::Primal::normalize"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal9normalizeEd", "idol::Solution::Primal::normalize::t_p"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal15objective_valueEv", "idol::Solution::Primal::objective_value"], [47, 2, 1, "_CPPv4N4idol8Solution6PrimalmLEd", "idol::Solution::Primal::operator*="], [47, 4, 1, "_CPPv4N4idol8Solution6PrimalmLEd", "idol::Solution::Primal::operator*=::t_factor"], [47, 2, 1, "_CPPv4N4idol8Solution6PrimalpLERK6Primal", "idol::Solution::Primal::operator+="], [47, 4, 1, "_CPPv4N4idol8Solution6PrimalpLERK6Primal", "idol::Solution::Primal::operator+=::t_rhs"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal6reasonEv", "idol::Solution::Primal::reason"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal21reset_objective_valueEv", "idol::Solution::Primal::reset_objective_value"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal5roundEj", "idol::Solution::Primal::round"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal5roundEj", "idol::Solution::Primal::round::t_n_digits"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal3setERK3Vard", "idol::Solution::Primal::set"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal3setERK3Vard", "idol::Solution::Primal::set::t_key"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal3setERK3Vard", "idol::Solution::Primal::set::t_value"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal19set_objective_valueEd", "idol::Solution::Primal::set_objective_value"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal19set_objective_valueEd", "idol::Solution::Primal::set_objective_value::t_value"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal10set_reasonE14SolutionReason", "idol::Solution::Primal::set_reason"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal10set_reasonE14SolutionReason", "idol::Solution::Primal::set_reason::t_reason"], [47, 2, 1, "_CPPv4N4idol8Solution6Primal10set_statusE14SolutionStatus", "idol::Solution::Primal::set_status"], [47, 4, 1, "_CPPv4N4idol8Solution6Primal10set_statusE14SolutionStatus", "idol::Solution::Primal::set_status::t_status"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal4sizeEv", "idol::Solution::Primal::size"], [47, 2, 1, "_CPPv4NK4idol8Solution6Primal6statusEv", "idol::Solution::Primal::status"], [20, 1, 1, "_CPPv4N4idol15StrongBranchingE", "idol::StrongBranching"], [20, 1, 1, "_CPPv4I0EN4idol15StrongBranching8StrategyE", "idol::StrongBranching::Strategy"], [20, 3, 1, "_CPPv4I0EN4idol15StrongBranching8StrategyE", "idol::StrongBranching::Strategy::NodeInfoT"], [20, 2, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK15StrongBranching", "idol::StrongBranching::Strategy::Strategy"], [20, 2, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK8StrategyI9NodeInfoTE", "idol::StrongBranching::Strategy::Strategy"], [20, 2, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyEv", "idol::StrongBranching::Strategy::Strategy"], [20, 4, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK15StrongBranching", "idol::StrongBranching::Strategy::Strategy::t_parent"], [20, 4, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK8StrategyI9NodeInfoTE", "idol::StrongBranching::Strategy::Strategy::t_src"], [20, 2, 1, "_CPPv4NK4idol15StrongBranching8Strategy5cloneEv", "idol::StrongBranching::Strategy::clone"], [20, 2, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::StrongBranching::Strategy::operator()"], [20, 2, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::StrongBranching::Strategy::operator()"], [20, 4, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::StrongBranching::Strategy::operator()::t_parent"], [20, 4, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::StrongBranching::Strategy::operator()::t_parent"], [20, 2, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching"], [20, 2, 1, "_CPPv4N4idol15StrongBranching15StrongBranchingEv", "idol::StrongBranching::StrongBranching"], [20, 3, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching::IteratorT"], [20, 4, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching::t_begin"], [20, 4, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching::t_end"], [20, 2, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase"], [20, 4, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase::t_max_depth"], [20, 4, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase::t_max_n_variables"], [20, 4, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase::t_phase"], [20, 2, 1, "_CPPv4N4idol15StrongBranching20with_max_n_variablesEj", "idol::StrongBranching::with_max_n_variables"], [20, 4, 1, "_CPPv4N4idol15StrongBranching20with_max_n_variablesEj", "idol::StrongBranching::with_max_n_variables::t_n_variables"], [20, 2, 1, "_CPPv4N4idol15StrongBranching26with_node_scoring_functionERK17NodeScoreFunction", "idol::StrongBranching::with_node_scoring_function"], [20, 4, 1, "_CPPv4N4idol15StrongBranching26with_node_scoring_functionERK17NodeScoreFunction", "idol::StrongBranching::with_node_scoring_function::t_score_function"], [48, 1, 1, "_CPPv4N4idol7TempCtrE", "idol::TempCtr"], [48, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", "idol::TempCtr::TempCtr"], [48, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", "idol::TempCtr::TempCtr"], [48, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", "idol::TempCtr::TempCtr"], [48, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrEv", "idol::TempCtr::TempCtr"], [48, 4, 1, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", "idol::TempCtr::TempCtr::t_row"], [48, 4, 1, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", "idol::TempCtr::TempCtr::t_src"], [48, 4, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", "idol::TempCtr::TempCtr::t_src"], [48, 4, 1, "_CPPv4N4idol7TempCtr7TempCtrERR3Row7CtrType", "idol::TempCtr::TempCtr::t_type"], [48, 2, 1, "_CPPv4NK4idol7TempCtr11is_violatedERKN8Solution6PrimalE", "idol::TempCtr::is_violated"], [48, 4, 1, "_CPPv4NK4idol7TempCtr11is_violatedERKN8Solution6PrimalE", "idol::TempCtr::is_violated::t_solution"], [48, 2, 1, "_CPPv4N4idol7TempCtraSERK7TempCtr", "idol::TempCtr::operator="], [48, 2, 1, "_CPPv4N4idol7TempCtraSERR7TempCtr", "idol::TempCtr::operator="], [48, 4, 1, "_CPPv4N4idol7TempCtraSERK7TempCtr", "idol::TempCtr::operator=::t_src"], [48, 4, 1, "_CPPv4N4idol7TempCtraSERR7TempCtr", "idol::TempCtr::operator=::t_src"], [48, 2, 1, "_CPPv4N4idol7TempCtr3rowEv", "idol::TempCtr::row"], [48, 2, 1, "_CPPv4NK4idol7TempCtr3rowEv", "idol::TempCtr::row"], [48, 2, 1, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", "idol::TempCtr::set_type"], [48, 4, 1, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", "idol::TempCtr::set_type::t_type"], [48, 2, 1, "_CPPv4NK4idol7TempCtr4typeEv", "idol::TempCtr::type"], [49, 1, 1, "_CPPv4N4idol7TempVarE", "idol::TempVar"], [49, 2, 1, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", "idol::TempVar::TempVar"], [49, 2, 1, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", "idol::TempVar::TempVar"], [49, 2, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar"], [49, 2, 1, "_CPPv4N4idol7TempVar7TempVarEv", "idol::TempVar::TempVar"], [49, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_column"], [49, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_lb"], [49, 4, 1, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", "idol::TempVar::TempVar::t_src"], [49, 4, 1, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", "idol::TempVar::TempVar::t_src"], [49, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_type"], [49, 4, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypeRR6Column", "idol::TempVar::TempVar::t_ub"], [49, 2, 1, "_CPPv4N4idol7TempVar6columnEv", "idol::TempVar::column"], [49, 2, 1, "_CPPv4NK4idol7TempVar6columnEv", "idol::TempVar::column"], [49, 2, 1, "_CPPv4NK4idol7TempVar2lbEv", "idol::TempVar::lb"], [49, 2, 1, "_CPPv4N4idol7TempVaraSERK7TempVar", "idol::TempVar::operator="], [49, 2, 1, "_CPPv4N4idol7TempVaraSERR7TempVar", "idol::TempVar::operator="], [49, 4, 1, "_CPPv4N4idol7TempVaraSERK7TempVar", "idol::TempVar::operator=::t_src"], [49, 4, 1, "_CPPv4N4idol7TempVaraSERR7TempVar", "idol::TempVar::operator=::t_src"], [49, 2, 1, "_CPPv4N4idol7TempVar6set_lbEd", "idol::TempVar::set_lb"], [49, 4, 1, "_CPPv4N4idol7TempVar6set_lbEd", "idol::TempVar::set_lb::t_lb"], [49, 2, 1, "_CPPv4N4idol7TempVar8set_typeE7VarType", "idol::TempVar::set_type"], [49, 4, 1, "_CPPv4N4idol7TempVar8set_typeE7VarType", "idol::TempVar::set_type::t_type"], [49, 2, 1, "_CPPv4N4idol7TempVar6set_ubEd", "idol::TempVar::set_ub"], [49, 4, 1, "_CPPv4N4idol7TempVar6set_ubEd", "idol::TempVar::set_ub::t_ub"], [49, 2, 1, "_CPPv4NK4idol7TempVar4typeEv", "idol::TempVar::type"], [49, 2, 1, "_CPPv4NK4idol7TempVar2ubEv", "idol::TempVar::ub"], [76, 0, 1, "_CPPv4N4idol9ToleranceE", "idol::Tolerance"], [76, 7, 1, "_CPPv4N4idol9Tolerance6DigitsE", "idol::Tolerance::Digits"], [76, 7, 1, "_CPPv4N4idol9Tolerance11FeasibilityE", "idol::Tolerance::Feasibility"], [76, 7, 1, "_CPPv4N4idol9Tolerance7IntegerE", "idol::Tolerance::Integer"], [76, 7, 1, "_CPPv4N4idol9Tolerance14MIPAbsoluteGapE", "idol::Tolerance::MIPAbsoluteGap"], [76, 7, 1, "_CPPv4N4idol9Tolerance14MIPRelativeGapE", "idol::Tolerance::MIPRelativeGap"], [76, 7, 1, "_CPPv4N4idol9Tolerance10OptimalityE", "idol::Tolerance::Optimality"], [76, 7, 1, "_CPPv4N4idol9Tolerance8SparsityE", "idol::Tolerance::Sparsity"], [21, 1, 1, "_CPPv4N4idol15UniformlyRandomE", "idol::UniformlyRandom"], [21, 1, 1, "_CPPv4I0EN4idol15UniformlyRandom8StrategyE", "idol::UniformlyRandom::Strategy"], [21, 3, 1, "_CPPv4I0EN4idol15UniformlyRandom8StrategyE", "idol::UniformlyRandom::Strategy::NodeInfoT"], [21, 2, 1, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyERK15UniformlyRandom", "idol::UniformlyRandom::Strategy::Strategy"], [21, 2, 1, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyEv", "idol::UniformlyRandom::Strategy::Strategy"], [21, 4, 1, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyERK15UniformlyRandom", "idol::UniformlyRandom::Strategy::Strategy::t_parent"], [21, 2, 1, "_CPPv4NK4idol15UniformlyRandom8Strategy5cloneEv", "idol::UniformlyRandom::Strategy::clone"], [21, 2, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::UniformlyRandom::Strategy::operator()"], [21, 2, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::UniformlyRandom::Strategy::operator()"], [21, 4, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::UniformlyRandom::Strategy::operator()::t_parent"], [21, 4, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::UniformlyRandom::Strategy::operator()::t_parent"], [21, 2, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom"], [21, 2, 1, "_CPPv4N4idol15UniformlyRandom15UniformlyRandomEv", "idol::UniformlyRandom::UniformlyRandom"], [21, 3, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom::IteratorT"], [21, 4, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom::t_begin"], [21, 4, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom::t_end"], [21, 2, 1, "_CPPv4N4idol15UniformlyRandom9with_seedEj", "idol::UniformlyRandom::with_seed"], [21, 4, 1, "_CPPv4N4idol15UniformlyRandom9with_seedEj", "idol::UniformlyRandom::with_seed::t_seed"], [73, 1, 1, "_CPPv4N4idol15UserCutCallbackE", "idol::UserCutCallback"], [73, 1, 1, "_CPPv4N4idol15UserCutCallback8StrategyE", "idol::UserCutCallback::Strategy"], [73, 2, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::UserCutCallback::Strategy::Strategy"], [73, 4, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::UserCutCallback::Strategy::Strategy::t_cut"], [73, 4, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::UserCutCallback::Strategy::Strategy::t_separation_problem"], [73, 2, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback"], [73, 4, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback::t_cut"], [73, 4, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback::t_model"], [73, 2, 1, "_CPPv4NK4idol15UserCutCallback5cloneEv", "idol::UserCutCallback::clone"], [73, 2, 1, "_CPPv4N4idol15UserCutCallbackclEv", "idol::UserCutCallback::operator()"], [73, 2, 1, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::UserCutCallback::with_separation_optimizer"], [73, 4, 1, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::UserCutCallback::with_separation_optimizer::t_optimizer_factory"], [50, 1, 1, "_CPPv4N4idol3VarE", "idol::Var"], [50, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var"], [50, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var"], [50, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var"], [50, 2, 1, "_CPPv4N4idol3Var3VarERK3Var", "idol::Var::Var"], [50, 2, 1, "_CPPv4N4idol3Var3VarERR3Var", "idol::Var::Var"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_column"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_column"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_env"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_env"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_env"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_lb"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_lb"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_lb"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_name"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_name"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_name"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_type"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_type"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_type"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeNSt6stringE", "idol::Var::Var::t_ub"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRK6ColumnNSt6stringE", "idol::Var::Var::t_ub"], [50, 4, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypeRR6ColumnNSt6stringE", "idol::Var::Var::t_ub"], [50, 2, 1, "_CPPv4NK4idol3Var3getERK10AnnotationI3Var6ValueTE", "idol::Var::get"], [50, 4, 1, "_CPPv4NK4idol3Var3getERK10AnnotationI3Var6ValueTE", "idol::Var::get::t_annotation"], [50, 2, 1, "_CPPv4NK4idol3Var2idEv", "idol::Var::id"], [50, 2, 1, "_CPPv4NK4idol3Var5is_inERK5Model", "idol::Var::is_in"], [50, 4, 1, "_CPPv4NK4idol3Var5is_inERK5Model", "idol::Var::is_in::t_model"], [50, 2, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector"], [50, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::I"], [50, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::N"], [50, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_dim"], [50, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_env"], [50, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_lb"], [50, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_name"], [50, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_type"], [50, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypeRKNSt6stringE", "idol::Var::make_vector::t_ub"], [50, 2, 1, "_CPPv4NK4idol3Var4nameEv", "idol::Var::name"], [50, 2, 1, "_CPPv4N4idol3VaraSERK3Var", "idol::Var::operator="], [50, 2, 1, "_CPPv4N4idol3VaraSERR3Var", "idol::Var::operator="], [50, 2, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", "idol::Var::set"], [50, 4, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", "idol::Var::set::t_annotation"], [50, 4, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI3Var6ValueTEDpRR5ArgsT", "idol::Var::set::t_args"], [79, 6, 1, "_CPPv4N4idol7VarTypeE", "idol::VarType"], [79, 5, 1, "_CPPv4N4idol7VarType6BinaryE", "idol::VarType::Binary"], [79, 5, 1, "_CPPv4N4idol7VarType10ContinuousE", "idol::VarType::Continuous"], [79, 5, 1, "_CPPv4N4idol7VarType7IntegerE", "idol::VarType::Integer"], [14, 1, 1, "_CPPv4N4idol10WorstBoundE", "idol::WorstBound"], [14, 1, 1, "_CPPv4I0EN4idol10WorstBound8StrategyE", "idol::WorstBound::Strategy"], [14, 3, 1, "_CPPv4I0EN4idol10WorstBound8StrategyE", "idol::WorstBound::Strategy::NodeT"], [14, 2, 1, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", "idol::WorstBound::Strategy::Strategy"], [14, 4, 1, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", "idol::WorstBound::Strategy::Strategy::t_parent"], [14, 2, 1, "_CPPv4NK4idol10WorstBound8Strategy5cloneEv", "idol::WorstBound::Strategy::clone"], [14, 2, 1, "_CPPv4NK4idol10WorstBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::WorstBound::Strategy::operator()"], [14, 4, 1, "_CPPv4NK4idol10WorstBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::WorstBound::Strategy::operator()::t_parent"], [76, 2, 1, "_CPPv4N4idol12absolute_gapEdd", "idol::absolute_gap"], [76, 4, 1, "_CPPv4N4idol12absolute_gapEdd", "idol::absolute_gap::t_lb"], [76, 4, 1, "_CPPv4N4idol12absolute_gapEdd", "idol::absolute_gap::t_ub"], [76, 2, 1, "_CPPv4N4idol6equalsEddd", "idol::equals"], [76, 4, 1, "_CPPv4N4idol6equalsEddd", "idol::equals::t_a"], [76, 4, 1, "_CPPv4N4idol6equalsEddd", "idol::equals::t_b"], [76, 4, 1, "_CPPv4N4idol6equalsEddd", "idol::equals::t_tolerance"], [76, 2, 1, "_CPPv4N4idol6is_infEd", "idol::is_inf"], [76, 4, 1, "_CPPv4N4idol6is_infEd", "idol::is_inf::t_value"], [76, 2, 1, "_CPPv4N4idol10is_integerEdd", "idol::is_integer"], [76, 4, 1, "_CPPv4N4idol10is_integerEdd", "idol::is_integer::t_tolerance"], [76, 4, 1, "_CPPv4N4idol10is_integerEdd", "idol::is_integer::t_value"], [76, 2, 1, "_CPPv4N4idol10is_neg_infEd", "idol::is_neg_inf"], [76, 4, 1, "_CPPv4N4idol10is_neg_infEd", "idol::is_neg_inf::t_value"], [76, 2, 1, "_CPPv4N4idol10is_pos_infEd", "idol::is_pos_inf"], [76, 4, 1, "_CPPv4N4idol10is_pos_infEd", "idol::is_pos_inf::t_value"], [76, 2, 1, "_CPPv4N4idol23multiply_with_precisionEddj", "idol::multiply_with_precision"], [76, 4, 1, "_CPPv4N4idol23multiply_with_precisionEddj", "idol::multiply_with_precision::t_a"], [76, 4, 1, "_CPPv4N4idol23multiply_with_precisionEddj", "idol::multiply_with_precision::t_b"], [76, 4, 1, "_CPPv4N4idol23multiply_with_precisionEddj", "idol::multiply_with_precision::t_n_digits"], [76, 2, 1, "_CPPv4N4idol38multiply_with_precision_by_power_of_10Edjj", "idol::multiply_with_precision_by_power_of_10"], [76, 4, 1, "_CPPv4N4idol38multiply_with_precision_by_power_of_10Edjj", "idol::multiply_with_precision_by_power_of_10::t_exponent"], [76, 4, 1, "_CPPv4N4idol38multiply_with_precision_by_power_of_10Edjj", "idol::multiply_with_precision_by_power_of_10::t_n_digits"], [76, 4, 1, "_CPPv4N4idol38multiply_with_precision_by_power_of_10Edjj", "idol::multiply_with_precision_by_power_of_10::t_x"], [76, 2, 1, "_CPPv4N4idol12relative_gapEdd", "idol::relative_gap"], [76, 4, 1, "_CPPv4N4idol12relative_gapEdd", "idol::relative_gap::t_lb"], [76, 4, 1, "_CPPv4N4idol12relative_gapEdd", "idol::relative_gap::t_ub"], [76, 2, 1, "_CPPv4N4idol5roundEdj", "idol::round"], [76, 4, 1, "_CPPv4N4idol5roundEdj", "idol::round::t_n_digits"], [76, 4, 1, "_CPPv4N4idol5roundEdj", "idol::round::t_value"]]}, "objnames": {"0": ["cpp", "type", "C++ type"], "1": ["cpp", "class", "C++ class"], "2": ["cpp", "function", "C++ function"], "3": ["cpp", "templateParam", "C++ template parameter"], "4": ["cpp", "functionParam", "C++ function parameter"], "5": ["cpp", "enumerator", "C++ enumerator"], "6": ["cpp", "enum", "C++ enum"], "7": ["cpp", "member", "C++ member"]}, "objtypes": {"0": "cpp:type", "1": "cpp:class", "2": "cpp:function", "3": "cpp:templateParam", "4": "cpp:functionParam", "5": "cpp:enumerator", "6": "cpp:enum", "7": "cpp:member"}, "terms": {"": [0, 1, 23, 27, 36, 38, 41, 42, 45, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 87, 88, 89, 90, 91, 92, 94, 98, 103, 104, 107, 122, 125, 132, 133, 135, 138, 141, 143, 144, 149], "0": [0, 1, 2, 16, 17, 18, 19, 20, 21, 23, 27, 35, 38, 41, 42, 43, 46, 47, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 71, 72, 76, 88, 89, 90, 91, 92, 94, 95, 97, 98, 100, 102, 103, 104, 107, 122, 125, 129, 131, 135, 136, 138, 139, 140, 141, 143, 144, 149], "00": 122, "00000": 122, "00000001": [91, 92], "002": 104, "003": 104, "01": [122, 144], "016": 104, "02": [89, 122, 144], "0249": 104, "03": [91, 92], "04": [90, 94, 104, 122], "05": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 104], "06": [90, 94, 95], "07": [89, 122], "0784": 104, "08": [88, 122], "1": [0, 23, 27, 37, 38, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 89, 90, 91, 92, 94, 95, 97, 98, 100, 102, 104, 107, 122, 125, 129, 131, 133, 135, 136, 138, 139, 140, 141, 143, 144, 149], "10": [42, 76, 89, 98, 103, 104, 107, 122, 125, 135, 139, 140], "100": [42, 46, 98, 140], "1002": 104, "1007": 104, "1016": 104, "10e": 76, "11": 104, "110000": 122, "12": [88, 104], "12451": 122, "1287": 104, "13": [46, 47, 91, 92, 104, 122], "14": [98, 104, 122, 140, 143], "15": [89, 107], "1500": [91, 92], "16": 122, "17": [100, 102], "173": 104, "17547": 122, "17552": 122, "187": 104, "1911818": 104, "1961": 104, "1974": [11, 104], "1990": [89, 104], "1997": 98, "1999": 104, "1e": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76], "1e20": 76, "1e3": 92, "2": [0, 36, 37, 38, 41, 42, 43, 46, 47, 48, 49, 50, 76, 88, 89, 90, 91, 92, 95, 97, 98, 102, 104, 107, 122, 125, 129, 131, 134, 135, 139, 140, 141, 143, 144, 149], "20": [11, 89, 95, 104, 107, 125], "200": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 122], "2000": 98, "2002": 104, "2004": 104, "2005": 104, "2006": 104, "201": 104, "2013": 104, "2016": [104, 141], "2017": 104, "2018": 104, "2019": 104, "2020": 104, "2021": 88, "2023": 122, "20572": 122, "21": 122, "2106593638087168512": 122, "213": 104, "218": 122, "219": 104, "22": 100, "22397": 122, "224": 122, "22579": 122, "23": [90, 91, 92, 94, 102], "2307": 104, "233": 122, "235": 122, "239": 104, "24": [88, 89, 95], "242": 122, "25": [89, 107], "25486": 104, "25760": 122, "277": 122, "29": 104, "2_": 141, "2_12": 104, "2x_0": 141, "2x_1": 141, "2y": 141, "3": [41, 42, 88, 91, 92, 95, 98, 100, 102, 104, 125, 131, 139, 140, 141, 143, 144, 149], "30": [88, 89, 98, 104, 107, 125, 140], "30068": 122, "3051": 104, "3068": 104, "33": 104, "331": 104, "3341": 104, "339": 104, "35": 122, "35653": 122, "358": 104, "36": 122, "360": 104, "3600": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 122, 139], "36123": 122, "36131": 122, "38": 104, "387": 104, "3x_1": 141, "3y": 141, "4": [0, 23, 27, 38, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 102, 104, 122, 131, 141, 143], "40": [98, 140], "40096": 122, "41": 104, "42": 104, "42918454935603896320": 122, "44": 122, "45": 122, "457": 104, "461": 104, "4747": 122, "49817": 122, "5": [0, 11, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 88, 97, 98, 104, 122, 125, 139, 140, 144], "50": [98, 122, 125, 140], "50000": 122, "50093": 122, "51": 122, "54": 104, "58": 122, "58001": 122, "5y": 88, "6": [76, 84, 88, 104, 122, 125], "66": 104, "7": [104, 122], "736": [11, 104], "7492": 122, "75": [91, 92], "767": 104, "773": [11, 104], "8": [76, 88, 104, 122], "80933": 122, "81": 122, "85653": 122, "86": 122, "9": [76, 104, 122, 125], "90269": 122, "90909090909090928": 122, "91": 104, "911": 104, "921": 104, "95": [98, 140], "9781119606475": 104, "98": [98, 140], "A": [0, 11, 23, 27, 37, 38, 43, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 84, 98, 99, 101, 102, 104, 107, 110, 120, 122, 128, 129, 131, 133, 135, 136, 140, 141, 147], "And": 135, "As": [98, 102, 129, 138, 139, 140, 141], "At": [67, 144], "By": [1, 85, 87, 98, 99, 102, 103, 125, 144, 149], "For": [0, 1, 35, 36, 37, 38, 70, 76, 85, 87, 94, 98, 102, 103, 107, 122, 125, 129, 131, 132, 134, 135, 136, 139, 140, 144, 149], "IF": 144, "If": [0, 1, 37, 38, 39, 41, 42, 45, 46, 47, 50, 70, 72, 87, 97, 98, 99, 100, 102, 103, 107, 109, 123, 124, 129, 134, 135, 138, 140, 143, 145, 149], "In": [0, 41, 70, 88, 89, 90, 91, 92, 94, 95, 103, 107, 109, 110, 120, 122, 125, 128, 131, 135, 136, 138, 139, 140, 141, 143, 144, 145, 149], "It": [0, 36, 37, 39, 41, 45, 48, 49, 76, 82, 91, 95, 97, 98, 99, 103, 125, 130, 135, 138, 139, 141, 143, 149], "No": 35, "OR": [68, 69, 98], "On": 147, "Such": [36, 45], "That": [92, 122, 141, 149], "The": [0, 1, 11, 23, 27, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 76, 85, 87, 88, 89, 90, 91, 94, 95, 97, 98, 99, 100, 102, 103, 104, 107, 109, 110, 120, 125, 128, 129, 132, 133, 134, 135, 138, 139, 140, 141, 144, 145, 147, 149], "Then": [1, 72, 87, 92, 97, 99, 102, 109, 122, 123, 124, 125, 138, 140, 141, 143, 145], "There": [101, 125, 135], "These": [70, 107, 135], "To": [35, 87, 98, 99, 103, 107, 109, 122, 125, 132, 133, 134, 136, 138, 139, 145, 149], "_": 122, "_0": 37, "_build": [53, 61, 62], "_j": 37, "_r": 97, "a_": [97, 133], "abl": 42, "about": [82, 122, 123, 124, 129, 135, 140], "abov": [102, 125], "absgap": 122, "absolut": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 140], "absolute_gap": 76, "absolutegap": 76, "abstractexpr": [41, 44], "abstractsolut": [46, 47], "access": [1, 35, 39, 46, 47, 70, 98, 110, 128, 131, 132, 139], "accord": [0, 1, 84], "accordingli": [135, 139], "account": 76, "achiev": 103, "achterberg": 104, "action": 87, "activ": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 87, 90, 95, 144, 149], "actual": [0, 42, 103, 125, 129, 131, 138], "ad": [0, 1, 37, 38, 41, 42, 45, 50, 70, 72, 98, 110, 115, 128, 129, 131, 135, 138, 139, 143], "add": [0, 1, 36, 37, 38, 41, 42, 45, 46, 47, 50, 70, 72, 85, 102, 122, 129, 132, 133, 135, 138, 139, 140, 141, 144], "add_callback": [0, 56, 58, 60, 90, 91, 92, 138, 141], "add_ctr": [38, 42, 45, 48, 88, 89, 90, 91, 92, 94, 95, 98, 107, 122, 129, 138, 139, 141, 149], "add_execut": [100, 102], "add_kkt_reformul": 88, "add_lazy_cut": [1, 70], "add_optim": [91, 92, 122, 125], "add_phas": [20, 125], "add_user_cut": [1, 70, 138], "add_var": [41, 42, 43, 49, 50, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 107, 122, 129, 131, 135, 136, 138, 139, 140, 141, 149], "add_vector": [42, 135], "addit": [35, 70, 76, 122, 135, 140], "addition": [125, 133, 144, 149], "adjust": 104, "advanc": [1, 70, 99, 110, 115, 122, 128, 138, 139, 140, 141, 142, 147, 149], "advanced_interfac": 1, "advantag": [1, 98], "adversari": 95, "advis": [0, 39, 99, 130], "affect": 135, "affin": 37, "after": [35, 46, 47, 125, 139, 143], "again": [133, 135], "against": 72, "agap": 122, "agent": [91, 122], "agnost": 98, "ahead": 125, "aim": 98, "alexand": 104, "algebra": 103, "algorithm": [0, 1, 23, 24, 27, 30, 35, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 69, 70, 82, 88, 90, 91, 92, 95, 103, 104, 110, 123, 124, 125, 128, 139, 140, 141, 144, 147], "align": [72, 88, 89, 90, 91, 92, 94, 95, 97, 107, 133, 138, 141, 143, 144, 149], "all": [36, 39, 41, 45, 46, 47, 48, 49, 72, 76, 85, 87, 90, 95, 99, 102, 103, 107, 122, 125, 132, 138, 141, 143, 149], "allow": [122, 125, 136, 141], "along": 0, "alow": 143, "alpha": 102, "alreadi": [42, 46, 47, 92, 98, 100, 109, 143, 145], "also": [0, 27, 37, 39, 42, 67, 70, 72, 76, 87, 95, 98, 99, 102, 103, 107, 122, 130, 132, 133, 138, 139, 141, 143, 145, 149], "altern": 134, "alwai": [76, 125, 139, 141, 143], "among": [125, 140], "amount": 76, "an": [0, 1, 35, 36, 37, 38, 39, 41, 42, 45, 46, 47, 48, 49, 50, 67, 70, 72, 76, 82, 87, 88, 90, 91, 95, 97, 99, 103, 105, 106, 109, 110, 115, 122, 125, 128, 129, 130, 131, 132, 133, 135, 138, 139, 140, 143, 144, 145, 149], "ani": [42, 67, 98, 99, 100, 109, 122, 125, 129, 131, 135, 138, 143, 149], "annot": [27, 38, 39, 50, 51, 69, 91, 92, 107, 122, 125], "anoth": [37, 38, 43, 45, 46, 47, 50, 98, 103, 122, 125, 139], "anticip": 141, "antonio": 104, "anyth": 98, "anywher": 35, "apart": 76, "api": 98, "appear": 37, "appli": [122, 125], "applic": [104, 135, 141, 144], "approach": [38, 50, 125, 143], "appropri": [37, 136], "approxim": 125, "apt": 85, "ar": [0, 1, 27, 29, 35, 36, 37, 38, 39, 41, 42, 43, 45, 49, 70, 72, 87, 91, 95, 97, 98, 101, 103, 107, 122, 123, 124, 125, 129, 130, 131, 132, 133, 135, 136, 138, 139, 140, 141, 143, 144, 145, 149], "arg": [88, 89, 107], "argmax": [125, 143], "argmin": [88, 89], "argst": [35, 38, 50], "argument": [0, 23, 27, 35, 37, 38, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 107, 122, 125, 129, 139, 140, 144, 145], "aris": [46, 47, 72], "aro": 98, "arrai": [42, 88, 89, 107], "articl": 85, "artifici": 98, "artificialcost": [31, 69], "as_numer": 37, "ask": [42, 70, 100, 102], "aspect": [125, 143], "assembl": 139, "assign": [36, 37, 43, 45, 48, 49, 84, 93, 122, 123, 124, 125, 145], "assignment_": [91, 92, 122], "associ": [35, 37, 38, 43, 46, 47, 50, 72, 122, 129, 135], "assum": [72, 97, 99, 109, 122, 125, 133, 139, 145, 149], "assumpt": [97, 143], "attach": [109, 133, 145, 149], "attempt": [87, 125], "attent": 42, "attribut": [36, 37, 42, 45, 135], "auto": [0, 23, 27, 37, 38, 39, 41, 42, 43, 45, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 107, 122, 125, 129, 131, 133, 135, 136, 138, 139, 140, 141, 149], "autom": 104, "automat": [0, 42, 72, 85, 87, 97, 98, 101, 131, 135], "avail": [42, 70, 84, 87, 107, 122], "avoid": [0, 103, 125], "ayoub": 104, "b": [37, 43, 98, 104], "b_i": [97, 133], "back": [131, 144], "backend": 90, "badli": 125, "baena": 104, "bap": [91, 92], "bar": [122, 144], "bard": [89, 104], "base": [42, 97, 104, 110, 115, 125, 128, 141, 149], "basic": 132, "bbuild": 87, "becaus": [42, 46, 47, 125, 141], "becom": 143, "been": [42, 48, 49, 67, 70, 72, 82, 99, 122, 125, 129, 134, 135, 143], "befor": [42, 98, 99, 125, 140], "beforehand": 42, "begin": [1, 41, 42, 46, 47, 72, 88, 89, 90, 91, 92, 94, 95, 97, 107, 122, 133, 138, 141, 143, 144, 149], "behavior": [39, 70, 98], "behaviour": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 82], "behind": [43, 102], "being": [0, 1, 42, 70, 95, 99, 122, 139, 149], "belong": [133, 135], "below": 125, "benchmark": [98, 104, 122], "bender": [72, 104, 144], "benders_cut": 141, "berlin": 104, "berthold": 104, "best": [0, 1, 11, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 98, 103, 122, 134, 135, 139, 140], "best_bound": [1, 26, 28, 30, 42, 70], "best_obj": [1, 26, 28, 30, 42, 70], "bestbnd": 122, "bestbound": [0, 9, 15, 122, 125, 139], "bestestim": [9, 15, 90], "bestobj": 122, "better": [129, 135], "between": [45, 48, 97, 141, 143], "bewar": [125, 129, 135], "bilevel": [95, 104, 106, 108, 144, 145], "bin": 103, "binari": [42, 49, 79, 90, 91, 92, 94, 95, 98, 100, 102, 122, 135, 138, 139, 140, 141, 144, 149], "black": 98, "blanco": 141, "block": [1, 70, 85], "blue": 122, "bo": [98, 104], "bool": [0, 3, 23, 24, 27, 29, 30, 35, 37, 38, 40, 41, 42, 43, 45, 46, 47, 48, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 76, 92], "boston": 104, "both": [37, 45, 125, 141, 143, 145], "bound": [0, 1, 23, 27, 42, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 69, 70, 72, 82, 84, 91, 92, 110, 122, 125, 128, 134, 135, 139, 140], "box": [70, 98], "branch": [0, 1, 35, 42, 69, 70, 82, 84, 92, 104, 110, 123, 124, 128, 139, 141, 144], "branch_and_bound": [91, 92, 98, 122, 125, 139], "branch_and_pric": [91, 98, 125], "branchandbound": [1, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 29, 42, 69, 70, 90, 91, 92, 122, 125, 139], "branchandboundcallback": [0, 2, 3, 9, 29, 69, 70], "branchandboundcallbackfactori": [0, 1, 3, 9, 29, 69], "branching_rul": [125, 139], "branchingrul": [16, 17, 18, 19, 20, 21], "branchingrulefactori": 0, "branchingrulefactoryt": 0, "breadth": 98, "breadthfirst": [9, 15], "break": 91, "breath": 85, "build": [0, 23, 27, 37, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 86, 91, 98], "build_exampl": 103, "build_test": 87, "built": [35, 48, 49, 85, 99, 100], "bunch": 85, "burden": 125, "button": 85, "c": [42, 72, 85, 87, 94, 97, 98, 99, 103, 125, 133, 138, 141], "c1": 42, "c2": 42, "c_": [91, 92, 122], "c_0": 133, "c_i": [91, 92], "call": [0, 1, 35, 36, 37, 38, 41, 42, 45, 46, 47, 50, 70, 87, 95, 98, 99, 103, 107, 122, 125, 129, 131, 133, 135, 138, 139, 140, 141, 143, 144, 145, 149], "callack": 138, "callback": [0, 1, 5, 6, 7, 60, 69, 71, 72, 73, 81, 82, 90, 91, 92, 98, 110, 115, 128, 139, 141], "callbackasbranchandboundcallback": [1, 2], "callbackev": [1, 70, 82, 138], "callbackfactori": [0, 5, 6, 7, 56, 58, 69, 70, 72, 73, 74, 138, 141], "callbacki": 70, "can": [0, 1, 23, 27, 29, 35, 37, 38, 39, 42, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 85, 87, 95, 97, 98, 99, 100, 102, 103, 107, 109, 122, 125, 129, 130, 131, 132, 133, 134, 135, 136, 138, 139, 140, 141, 143, 144, 145, 149], "candid": 125, "cannot": [1, 53, 61, 62, 70, 87, 131, 138, 139], "capac": [90, 91, 92, 94, 95, 98, 122, 138, 140, 141, 149], "capacit": [90, 95], "capacity_": [91, 92, 122], "caption": 144, "captur": 87, "carefulli": 125, "carri": 98, "case": [0, 23, 27, 42, 46, 47, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 107, 122, 125, 131, 136, 138, 139, 140, 141, 143, 145, 149], "cast": 136, "castro": 104, "catch2": 87, "catchorg": 87, "categori": 125, "caus": [99, 139], "cbc": [68, 69], "cbegin": [46, 47], "ccg": [93, 98, 143, 144, 145], "ccgsepar": [23, 24, 95, 144, 145], "ccgstabil": [23, 24, 95, 144], "cd": [87, 99, 103], "cend": [46, 47], "center": 144, "certain": 70, "certif": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 129, 140], "cg": 98, "challeng": 98, "chang": [1, 42, 76, 99, 129, 135], "char": [88, 89, 90, 91, 92, 94, 95, 100, 102], "character": 76, "check": [1, 35, 48, 72, 123, 124, 129, 135, 136, 138, 141, 143, 149], "child": [0, 70, 125, 138], "children": [0, 98], "choic": 103, "choos": 125, "clang": 100, "class": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 70, 71, 72, 73, 77, 110, 115, 125, 128, 129, 130, 131, 132, 133, 134, 135, 138, 139, 140, 141, 143, 144], "classic": [98, 99, 102, 107, 141, 143, 149], "clean": 98, "clear": [40, 41, 98, 125, 143], "clearli": [125, 143], "clone": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 26, 27, 28, 29, 32, 33, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 71, 72, 73, 87, 138], "close": 76, "closer": 76, "closest": [46, 47, 76, 125], "clp": 67, "cmake": [85, 87, 99, 100, 101, 102], "cmake_cxx_standard": [100, 102], "cmake_install_prefix": 99, "cmake_minimum_requir": [100, 102], "cmakelist": [100, 102], "code": [35, 39, 85, 86, 98, 107, 109, 125, 129, 130, 131, 133, 135, 136, 138, 139, 140, 144, 149], "codecov": 87, "coeff": [42, 131], "coeffici": [36, 37, 41, 42, 45, 131], "coefficient_for_x_in_constraint": 129, "coefficient_for_y_in_constraint": 129, "coin": [68, 69, 89, 98], "color": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "column": [42, 45, 49, 50, 51, 69, 95, 104, 110, 122, 123, 124, 125, 128, 135, 136, 143, 147, 149], "column_gener": [91, 92, 98, 122, 125], "columnandconstraintgener": [25, 69, 95, 144, 145], "columngener": 30, "com": [87, 102], "combin": [37, 42, 98, 104, 125], "combinatori": 104, "come": 103, "command": [85, 87, 99], "common": [69, 70, 81, 98, 125, 136, 143], "compact": [129, 135, 143], "compar": [37, 76, 125], "compat": 98, "compil": [87, 99, 109], "complet": [98, 105, 143, 144, 147], "complete_recours": 24, "complex": [98, 139], "compliant": [70, 85], "complic": 141, "compon": [36, 132], "compos": [37, 131], "composit": 131, "comput": [37, 46, 47, 76, 84, 97, 99, 101, 102, 104, 125, 143], "computation": 125, "compute_smoothed_dual_solut": [32, 33], "concept": [132, 139, 140, 143], "condit": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "conditional_t": 44, "cone": 97, "configur": 103, "conflict": [46, 47], "conic": 97, "consid": [43, 72, 76, 90, 91, 92, 94, 95, 97, 107, 109, 125, 131, 139, 140, 141, 143, 145, 149], "consist": [1, 41, 70, 149], "const": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 71, 72, 73, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 122, 125, 129, 131, 133, 135, 136, 138, 139, 140, 141, 149], "const_iter": [41, 46, 47], "constant": [36, 38, 40, 41, 42, 43, 44, 45, 48, 51, 69, 77, 141], "constexpr": 76, "constiteratorforward": 42, "constrain": 98, "constraint": [35, 36, 38, 42, 43, 45, 48, 69, 70, 72, 76, 91, 92, 95, 97, 104, 107, 110, 115, 122, 125, 128, 130, 131, 132, 135, 138, 139, 140, 144, 147, 149], "constraint1": 135, "constraint1_coefficient_for_x": 135, "constraint2": 135, "constraint2_coefficient_for_x": 135, "constraint_1": 46, "constraint_1_4": 38, "construct": [35, 38, 42, 50, 123, 124], "constructor": [0, 35, 36, 37, 38, 39, 43, 45, 48, 49, 50, 122, 129, 133, 134, 138], "consumpt": [91, 122], "contact": 99, "contain": [0, 37, 48, 49, 97, 98, 103, 122, 149], "content": 85, "context": 125, "continu": [0, 41, 42, 43, 49, 50, 79, 88, 92, 95, 129, 131, 135, 136, 138, 139, 140, 141, 149], "continuous_relax": 139, "continuousrelax": [0, 1, 55, 56, 57, 58, 63, 64, 65, 66, 67, 90, 91, 92, 122, 125, 139], "control": [39, 70, 95, 98, 130, 144, 149], "conveni": [125, 135], "convent": [143, 149], "converg": 70, "convers": 97, "convert": [0, 97], "convex": [88, 97], "coordin": 91, "copi": [0, 23, 27, 36, 37, 41, 42, 43, 45, 48, 49, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 85, 99, 138], "copybutton": 85, "correctli": 99, "correspond": [1, 36, 37, 42, 45, 91, 122, 129, 135, 140, 141], "cost": [42, 76, 90, 91, 92, 95, 98, 122, 135, 149], "could": [98, 129, 135, 136, 140], "coupl": 147, "cours": 102, "cout": [1, 35, 38, 41, 42, 46, 47, 50, 70, 88, 89, 90, 91, 92, 94, 95, 109, 122, 131, 133, 135, 138, 140, 145], "cover_cut": 141, "coverag": 86, "cplex": [68, 69, 98], "cpp": [100, 102], "craft": 90, "creat": [0, 1, 23, 27, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 85, 87, 88, 89, 90, 91, 92, 94, 95, 98, 99, 100, 103, 107, 109, 110, 115, 125, 128, 130, 131, 132, 134, 139, 140, 141, 149], "create_deterministic_model": 95, "create_osi_solver_interfac": [63, 64, 65, 66, 67], "create_stage_descript": 95, "create_uncertainty_set": 95, "creation": [42, 139], "crucial": [122, 125], "ctr": [24, 27, 35, 36, 39, 42, 43, 46, 48, 51, 59, 60, 69, 91, 92, 95, 107, 122, 125, 129, 133, 149], "ctrtype": [38, 42, 45, 48, 80, 81], "ctrversion": [38, 48], "cup": 144, "curiou": [123, 124], "current": [0, 1, 23, 27, 37, 41, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 125, 129, 131, 135, 139, 141], "custom": [0, 70, 90, 95, 98, 99, 149], "customiz": 98, "cut": [1, 9, 69, 70, 72, 90, 98, 110, 115, 120, 128, 139], "cutsepar": [70, 72, 73], "d": [97, 99, 104, 133], "d_j": [90, 95, 149], "daniel": 104, "dantzig": [27, 37, 91, 92, 104, 110, 120, 128], "dantzigwolf": [27, 30, 31, 34, 69, 91, 92, 122, 125], "dantzigwolfedecomposit": [26, 28, 29, 31, 69, 91, 92, 122, 125], "data": [76, 90, 91, 92, 94, 95, 104, 145, 149], "dbuild_exampl": 103, "dbuild_test": 87, "deal": 140, "death": [39, 130], "decid": 125, "decis": [37, 42, 98, 122, 125, 133, 134, 135, 143, 144], "declar": [76, 125], "decompos": 125, "decomposit": [27, 35, 37, 72, 92, 97, 104, 125, 141, 144], "dedic": [67, 99, 102, 138, 141, 143], "default": [0, 1, 2, 5, 6, 7, 16, 17, 18, 19, 20, 21, 23, 27, 29, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 55, 56, 57, 58, 67, 70, 71, 72, 76, 85, 87, 98, 99, 102, 103, 122, 125, 135, 138, 141, 144, 149], "default_valu": 35, "defaultnodeinfo": [0, 3, 29], "defin": [37, 42, 70, 76, 88, 89, 95, 98, 102, 105, 122, 125, 133, 138, 141, 143], "definit": [70, 72, 102, 105, 147], "degre": 0, "deigen_dir": 103, "delet": [0, 23, 29, 42, 52, 55, 56, 57, 58, 67], "delta": 144, "delta_j": 125, "demand": [90, 95, 149], "denot": [72, 94, 97, 122, 125, 143], "depend": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 86, 99, 125, 140, 149], "depth": [0, 98, 125], "depthfirst": [0, 1, 9, 15], "deriv": [88, 141], "describ": [105, 140, 144], "descript": [88, 89, 107, 109], "design": [35, 98, 125], "desir": [46, 47, 48, 49, 102, 122, 133], "destin": [42, 99], "destroi": 39, "detail": [85, 122, 125, 129, 131, 133, 135, 140, 143], "detect": [46, 47], "determinist": [95, 145], "develop": [98, 103], "dglpk_dir": 103, "dgurobi_dir": [99, 103], "dhighs_dir": 103, "diagon": 97, "differ": [0, 23, 27, 39, 42, 45, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 98, 125, 130, 132, 135, 139, 141, 143], "digit": [46, 47, 76], "dim": [38, 41, 42, 50, 90, 91, 92, 94, 95, 98, 122, 129, 131, 135, 138, 139, 140, 141, 149], "dimens": [38, 42, 50, 135], "dimension": 140, "dir": [99, 103], "direct": [102, 135], "directli": [38, 42, 50, 67, 135, 139], "directori": [53, 61, 62, 85, 87, 99, 103], "disabl": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "discuss": [125, 132, 139, 143, 144], "dispens": 132, "displaystyl": [88, 89, 107], "dive": 143, "divid": [46, 47], "dmosek_dir": 103, "do": [1, 35, 38, 42, 67, 85, 98, 99, 100, 103, 109, 122, 125, 131, 133, 135, 139, 140, 145, 149], "doc": 86, "document": [27, 85], "doe": [94, 107, 125, 139, 141, 149], "doi": 104, "dolan": 104, "domain": 141, "done": [0, 1, 42, 87, 97, 98, 102, 103, 107, 122, 125, 131, 133, 135, 138, 140, 141, 143, 144, 149], "dotsc": [91, 92, 94, 133, 143, 144], "doubl": [0, 1, 3, 6, 23, 24, 26, 27, 28, 29, 30, 32, 33, 36, 37, 40, 41, 42, 45, 46, 47, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 76, 95, 98, 138, 140, 149], "down": 91, "download": [87, 98, 101, 102, 109], "doxygen": [53, 61, 62, 85], "doxygenclass": [53, 61, 62], "drawback": 125, "drobinhood_dir": 103, "dual": [32, 33, 37, 42, 45, 51, 69, 98, 129, 140, 141], "dual_spac": 141, "dualiti": 141, "dualpricesmoothingstabil": [27, 30, 32, 33], "dure": [39, 70, 72, 82, 122, 123, 130, 139, 140], "duse_eigen": 103, "duse_glpk": 103, "duse_gurobi": [99, 103], "duse_high": 103, "duse_mosek": 103, "duse_robinhood": 103, "dwith_code_coverag": 87, "dx": 104, "e": [0, 1, 23, 27, 35, 37, 41, 42, 45, 46, 47, 48, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 82, 91, 92, 97, 98, 99, 101, 102, 104, 107, 122, 125, 129, 133, 136, 138, 139, 141, 143, 144, 145, 149], "e_": 122, "each": [0, 36, 37, 38, 39, 41, 45, 50, 70, 90, 91, 94, 95, 98, 122, 125, 130, 131, 135, 138, 139, 140, 141, 143, 144, 145, 149], "easi": [98, 138], "easier": 136, "easiest": [98, 101, 102, 133], "easili": [98, 129], "econometrica": 104, "effect": [1, 87, 125], "effici": [98, 122], "eigen": 96, "eigen_dir": 103, "either": [134, 141, 143], "element": [38, 50], "elizabeth": 104, "ell": 143, "els": [140, 144], "emb": 122, "empir": 125, "empti": [36, 37, 41, 45, 48, 143], "emptycolumn": 36, "emptyrow": 45, "emptyset": [143, 144], "enabl": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 141], "encod": 122, "encount": [45, 99], "end": [41, 42, 46, 47, 72, 88, 89, 90, 91, 92, 94, 95, 97, 107, 133, 138, 141, 143, 144, 145, 149], "endif": 144, "endl": [1, 35, 38, 41, 42, 46, 47, 50, 70, 88, 89, 90, 91, 92, 94, 95, 109, 122, 131, 133, 135, 138, 140, 145], "enforc": [92, 143], "engin": 98, "enhanc": 98, "enlight": 97, "enrich": 98, "ensur": [91, 143, 149], "entri": [37, 41, 45, 46, 47, 97], "enum": [78, 79, 82], "enumer": [72, 78, 79, 82, 122], "env": [35, 38, 42, 50, 51, 55, 56, 59, 60, 69, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 107, 122, 129, 130, 131, 133, 134, 135, 136, 138, 139, 140, 141, 149], "environ": [35, 38, 39, 42, 50, 85, 91, 92, 99, 103, 110, 122, 128, 132, 133, 135, 149], "equal": [0, 36, 37, 41, 76, 78, 107, 122, 125], "equal_to": 44, "equalto": [41, 42, 44, 129], "equival": [37, 41, 48, 103, 107, 129, 135, 143, 149], "error": [99, 136], "essenti": [39, 72], "estim": [11, 98, 125], "evalu": [125, 131, 149], "even": [42, 98, 100, 135], "event": [1, 70, 81, 83, 138], "eventu": 39, "everi": [0, 37, 39, 41, 42, 46, 47, 70, 87, 98, 122, 130, 132, 138], "evid": 98, "exactli": [91, 98, 144], "exampl": [23, 27, 38, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 88, 89, 90, 91, 92, 94, 95, 100, 102, 105, 125, 132, 133, 134, 135, 139, 145, 147], "example_knapsack": 103, "exce": 94, "except": [37, 38, 45, 46, 47, 50, 139, 149], "execept": 97, "execut": [0, 1, 23, 26, 27, 28, 30, 39, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 82, 98, 100, 102, 109, 130, 140, 141], "exist": [1, 42, 70, 72, 87, 98, 132, 143], "expect": 97, "expens": 125, "explain": [85, 87, 125], "explicit": [10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 27, 29, 32, 33, 42, 43, 59, 60, 72, 73], "explicitli": [46, 47, 102, 135, 141, 143], "exploit": 0, "explor": [0, 1, 70, 98], "exponenti": 122, "exportbranchandboundtreetocsv": 1, "expos": 136, "expr": [42, 45, 48, 51, 69, 107, 129, 131], "express": [37, 41, 42, 48, 95, 97, 110, 128, 129, 132, 134, 141, 149], "extend": 140, "extens": 85, "extern": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 69, 76, 89, 99, 100, 102, 105, 110, 122, 133], "extra": 135, "f": [97, 104, 143, 144], "f1": 88, "f2": 88, "f3": 88, "f4": 88, "f_i": [90, 95, 149], "facil": [93, 147], "fact": 141, "factor": [36, 41, 45, 46, 47, 144], "factori": [0, 23, 27, 30, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 90, 91, 92, 122, 136, 138, 139, 140, 141], "fail": [42, 98], "fall": 125, "fals": [0, 23, 27, 35, 37, 38, 43, 46, 47, 48, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 91, 92], "familiar": [0, 107, 122, 140, 149], "faq": 98, "far": 70, "farka": [42, 98, 129, 140], "farkaspr": [31, 69, 91, 92], "fast": 98, "fault": 39, "fea": [143, 144], "feasibl": [0, 23, 27, 42, 45, 46, 47, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 76, 92, 95, 107, 122, 129, 135, 140, 141, 143, 149], "featur": [1, 70, 122, 144, 149], "februari": 104, "fetchcont": 102, "fetchcontent_": 102, "fetchcontent_declar": 102, "fetchcontent_makeavail": 102, "file": [42, 87, 102, 103, 122, 149], "final": [92, 107, 122, 125, 138, 141, 145, 149], "find": [42, 53, 61, 62, 97, 135, 140, 145], "find_packag": 100, "fine": 98, "finit": 143, "first": [0, 1, 23, 27, 37, 41, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 92, 95, 97, 98, 99, 122, 123, 124, 125, 135, 138, 140, 141, 143, 144, 149], "firstinfeasiblefound": [9, 22], "fix": [36, 37, 40, 41, 42, 44, 45, 125, 131], "fixed_cost": [90, 95, 149], "flexibl": 98, "flp": [90, 95, 149], "flp_instanc": [90, 95], "fly": 72, "folder": [98, 99, 101, 102, 103], "follow": [1, 35, 37, 39, 41, 42, 67, 72, 76, 85, 87, 88, 89, 91, 94, 95, 98, 99, 100, 103, 107, 109, 122, 125, 130, 131, 132, 133, 135, 136, 138, 139, 140, 141, 143, 144, 145, 149], "follower_c1": [88, 89, 107], "follower_c2": [88, 89, 107], "follower_c3": [88, 89, 107], "follower_c4": [88, 89, 107], "follower_constraint": 107, "follower_ctr": 107, "follower_var": 107, "follower_vari": 107, "foral": [122, 141, 143, 144], "forbidden": 130, "forc": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 87], "form": [0, 45, 122, 133, 141, 143], "formul": [30, 88, 89, 140], "formula": 125, "forrest": [11, 104], "fortun": 143, "found": [0, 23, 27, 37, 38, 42, 46, 47, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 82, 87, 98, 99, 102, 103, 125, 138, 140, 141], "frac": 76, "fraction": [122, 125], "fractional_point": 138, "framework": [87, 91, 92, 98], "fran": 104, "frangioni": 104, "free": 35, "freedom": 0, "friend": [38, 39, 50, 60, 70], "friendli": 98, "from": [0, 1, 37, 41, 42, 43, 46, 47, 53, 61, 62, 76, 87, 88, 89, 90, 95, 98, 107, 109, 125, 129, 132, 135, 141, 149], "front": [95, 149], "fulfil": 67, "fulli": 67, "function": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 71, 72, 73, 76, 91, 92, 95, 102, 103, 105, 110, 122, 128, 132, 133, 135, 139, 140, 141, 143, 149], "functor": 143, "fx": 97, "g": [1, 35, 42, 82, 87, 98, 99, 101, 102, 122, 125, 136, 139, 141, 143, 144, 149], "g_": 143, "gamma": [95, 149], "gap": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 91, 92, 122, 140], "gap_inst": [91, 92, 122], "gcc": 100, "gcd": [40, 41, 45], "gcov": 87, "ge": [88, 95, 97, 125, 138, 141, 144, 149], "gener": [69, 70, 72, 84, 85, 87, 95, 103, 104, 110, 122, 123, 124, 125, 128, 131, 138, 141, 143, 147, 149], "georg": 104, "geq": [89, 107], "get": [35, 37, 38, 41, 44, 46, 47, 50, 72, 85, 101, 102, 110, 128, 132, 139, 144], "get_absolute_gap": [24, 30, 140], "get_best_bound": [24, 30, 42, 134, 140], "get_best_obj": [24, 30, 42, 94, 134, 138, 140], "get_ctr_by_index": 42, "get_ctr_dual": [24, 42, 129, 140], "get_ctr_farka": [24, 42, 129, 140], "get_ctr_index": [42, 129], "get_ctr_row": [42, 45, 129], "get_ctr_typ": [42, 129], "get_mat_coeff": 42, "get_n_solut": [24, 42], "get_obj_expr": [42, 134], "get_obj_sens": [42, 134], "get_param_best_bound_stop": [24, 30, 59, 60], "get_param_best_obj_stop": [24, 30, 59, 60], "get_param_infeasible_or_unbounded_info": [24, 30, 59, 60], "get_param_iteration_limit": [24, 30, 59, 60], "get_param_log": [24, 30, 59, 60], "get_param_presolv": [0, 23, 24, 27, 30, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67], "get_param_thread_limit": [24, 30, 59, 60], "get_param_time_limit": [24, 30, 59, 60], "get_reason": [24, 30, 42, 140], "get_relative_gap": [24, 30, 140], "get_remaining_tim": [24, 30, 59, 60], "get_rhs_expr": 42, "get_solution_index": [24, 42], "get_statu": [24, 30, 42, 46, 47, 122, 140], "get_sub_problem_spec": 27, "get_tol_feas": [24, 30, 59, 60], "get_tol_integ": [24, 30, 59, 60], "get_tol_mip_absolute_gap": [24, 30, 59, 60], "get_tol_mip_relative_gap": [24, 30, 59, 60], "get_tol_optim": [24, 30, 59, 60], "get_var_by_index": 42, "get_var_column": [42, 135], "get_var_index": [42, 135], "get_var_lb": [42, 135], "get_var_prim": [24, 42, 122, 135, 138, 140], "get_var_rai": [24, 42, 135, 140], "get_var_reduced_cost": [24, 42, 135], "get_var_typ": [42, 135], "get_var_ub": [42, 135], "git": [87, 102], "git_repositori": 102, "git_tag": 102, "github": [87, 99, 102], "give": [35, 70, 98, 143], "given": [0, 1, 23, 27, 35, 36, 37, 38, 42, 45, 46, 47, 48, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 90, 91, 94, 95, 98, 122, 125, 129, 133, 134, 135, 138, 139, 140, 141, 143, 144, 145, 149], "global": [35, 76, 98, 100, 101, 102, 122], "glpk": [0, 1, 23, 27, 52, 56, 57, 58, 63, 64, 65, 66, 67, 68, 69, 90, 91, 92, 98, 102, 133, 139, 140], "glpk_dir": 103, "glpk_home": 103, "go": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 87, 131, 144], "goal": [90, 91, 94, 95, 149], "good": 144, "grb_doubleparam": [56, 60], "grb_intparam": [56, 60], "grbconstr": 60, "grbenv": 60, "grbmodel": 60, "grbqconstr": 60, "grbvar": [60, 136], "greater": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 138, 141], "greaterorequ": 78, "greaterthan": 129, "guid": [98, 101, 102], "guidelin": [98, 100, 101], "gurobi": [42, 68, 69, 70, 88, 89, 90, 95, 98, 102, 122, 125, 133, 136, 138, 139, 141, 144, 145], "gurobi_dir": [99, 103], "gurobi_hom": [99, 103], "gurobi_optim": 136, "gurobicallbacki": 60, "h": [11, 87, 88, 89, 90, 91, 92, 94, 95, 100, 102, 103, 104, 122, 132], "ha": [0, 35, 36, 42, 46, 47, 48, 49, 67, 70, 82, 87, 90, 91, 95, 97, 98, 99, 122, 125, 129, 134, 135, 138, 140, 141, 143, 149], "hand": [36, 38, 42, 45, 90, 98, 129], "handl": [91, 98], "handsid": 72, "happen": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 125], "hard": [98, 125], "has_default": 35, "has_objective_valu": [46, 47], "has_optim": 42, "has_optimizer_factori": 42, "hash": [41, 44], "hat": [138, 141, 143], "have": [0, 23, 27, 36, 39, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 85, 94, 97, 98, 99, 100, 103, 107, 109, 122, 125, 130, 133, 139, 141, 145, 149], "header": [103, 122], "hei": [123, 124], "help": 98, "henc": [97, 149], "henri": [88, 89, 90, 91, 92, 94, 95], "her": 141, "here": [0, 1, 42, 43, 95, 98, 99, 100, 101, 102, 104, 107, 109, 122, 125, 129, 131, 133, 134, 135, 139, 141, 143, 145, 149], "hesit": 99, "heurist": [1, 9, 31, 69, 70, 71, 91, 92, 98, 104, 110, 120, 128], "hi": [42, 141], "high": [68, 69, 76, 88, 89, 90, 92, 93, 98, 105, 109, 140], "high_point_relax": [88, 89, 107, 109], "higher": 140, "higher_dimensional_model": 140, "highs_dir": 103, "hirst": [11, 104], "hlefebvr": 102, "hold": [72, 97, 143], "home": 103, "hood": 149, "how": [72, 85, 87, 88, 89, 90, 91, 92, 94, 95, 98, 107, 109, 122, 123, 124, 125, 132, 136, 138, 139, 140, 141, 144, 145, 149], "howev": [37, 102, 122, 125, 129, 135, 138, 141, 143], "hpp": [89, 103], "hpr": 107, "html": 85, "http": [87, 102, 104], "i": [0, 1, 23, 24, 27, 30, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 72, 76, 82, 84, 85, 87, 88, 89, 90, 91, 92, 94, 95, 96, 99, 100, 101, 102, 103, 104, 107, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 130, 131, 133, 134, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 149], "id": [1, 35, 38, 42, 43, 50, 122], "idea": [72, 98, 102, 125], "ident": [42, 122], "identifi": [0, 72, 107, 143], "idol": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 70, 71, 72, 73, 76, 78, 79, 82, 87, 97, 99, 100, 101, 102, 103, 104, 107, 109, 122, 125, 130, 131, 132, 133, 135, 138, 139, 140, 141, 143, 145, 147, 149], "idol_sum": [90, 91, 92, 94, 95, 98, 122, 138, 140, 141, 149], "iff": 97, "ignor": [76, 149], "ij": [42, 90, 91, 92, 95, 97, 122, 135, 149], "ijoc": 104, "ilp": 107, "impact": 147, "impl": [35, 36, 38, 39, 40, 44, 45, 50, 70, 72, 73], "implement": [1, 70, 72, 84, 98, 103, 104, 123, 124, 138, 139, 141, 143, 147], "impli": 36, "import": [39, 138, 149], "importantli": [98, 125, 145], "impos": 125, "impract": 141, "improv": [1, 70, 92], "includ": [88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 103, 122, 132, 138], "incorpor": [0, 143], "increas": [95, 144, 149], "incumb": [1, 82, 138], "incumbentsolut": [70, 82, 138], "inde": [98, 143], "independ": [0, 1, 91, 135], "index": [42, 122, 125, 129, 135], "indic": [42, 82, 98, 103, 107, 122, 125], "individu": 91, "inequ": 138, "inf": [41, 42, 46, 47, 49, 50, 76, 88, 89, 95, 107, 122, 129, 131, 135, 141, 149], "infeas": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 91, 92, 98, 122, 125, 129, 139, 140, 144], "infeasibilitystrategyfactori": [26, 27, 28, 30], "infin": [46, 47], "infinit": 72, "influenc": [82, 98], "info": [87, 91, 92, 122], "inform": [0, 1, 35, 42, 98, 104, 122, 129, 135, 136, 140], "infti": [76, 135, 143, 144], "inherit": [0, 70, 98], "initi": [1, 32, 33, 144], "inlin": [0, 1, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 72, 73], "input": [98, 133], "insid": [37, 70, 82, 85, 87, 103, 122], "inspir": 144, "instal": [98, 100, 103, 109, 139], "instanc": [1, 35, 36, 37, 38, 76, 85, 87, 90, 91, 92, 94, 95, 97, 98, 102, 103, 107, 122, 125, 129, 131, 132, 133, 134, 135, 136, 139, 140, 144, 149], "instanti": [39, 48, 49, 98, 135], "instead": [1, 70, 72, 97, 125, 132, 136, 143, 144, 149], "instruct": [35, 86], "int": [0, 3, 5, 20, 21, 23, 24, 26, 27, 29, 30, 35, 37, 38, 40, 41, 42, 43, 45, 46, 47, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 76, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 122, 125, 140, 149], "integ": [0, 11, 46, 47, 76, 79, 82, 88, 89, 90, 91, 92, 94, 95, 104, 105, 107, 108, 120, 125, 133, 135, 141], "integermast": [0, 1, 31, 69, 91, 92], "integr": [85, 86, 98, 109], "intend": [70, 103], "interact": 85, "interest": [72, 141, 143], "interfac": [1, 41, 67, 97, 99, 136, 141], "intermedi": [38, 139], "intern": 103, "introduc": [11, 92, 95, 132, 143, 149], "introduct": [110, 142, 147], "invalid": 141, "invalidsolut": [82, 138], "invok": 70, "involv": [42, 131], "iostream": [88, 89, 90, 91, 92, 94, 95, 100, 102], "is_ctr_annot": 35, "is_in": [38, 50], "is_inf": 76, "is_integ": 76, "is_neg_inf": 76, "is_numer": 37, "is_pos_inf": 76, "is_same_v": 44, "is_termin": [24, 30, 59, 60], "is_var_annot": 35, "is_viol": [45, 48], "is_zero": [37, 40], "item": [94, 138, 141], "iter": [0, 23, 27, 41, 42, 46, 47, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 92, 122, 125, 131, 138, 141, 144, 145], "iteratoroutputt": 41, "iteratort": [16, 17, 18, 19, 20, 21], "iterlimit": [46, 47], "its": [0, 23, 27, 37, 38, 39, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 85, 87, 88, 94, 98, 103, 122, 135, 136, 140, 144], "itself": [0, 23, 27, 41, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 98, 141], "ix_jx_k": 97, "j": [11, 37, 42, 90, 91, 92, 94, 95, 97, 98, 104, 122, 125, 133, 135, 140, 149], "jame": 104, "jan": 104, "januari": 104, "jk": 97, "job": 91, "jonathan": 104, "jordi": 104, "jorg": 104, "josett": 104, "journal": 104, "judici": 72, "juli": 104, "just": [122, 125], "k": [97, 125, 135, 143, 144], "kei": [41, 46, 47, 70, 98], "kept": 35, "key1": [40, 44], "key2": [40, 44], "kkt": 93, "kleinert": 88, "kleinert2021": 104, "knapsack": [84, 91, 92, 93, 98, 103, 122, 139, 140], "knapsackcov": [1, 4, 9, 90, 138], "know": [109, 145], "knowledg": 141, "known": [42, 125, 141, 143], "koch": 104, "kp": 94, "kp_instanc": 94, "l": [88, 89, 97, 125, 143], "l_p": [46, 47], "lambda": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 122, 141], "lambda_": 122, "lambda_0": 141, "lambda_1": 141, "lambda_2": 141, "languag": 85, "larg": [0, 11, 70, 72, 104], "larger": [76, 98], "last": [85, 149], "later": [70, 140], "latest": [98, 102], "laurenc": 104, "lazi": [1, 42, 70, 72, 98, 110, 115, 128, 138, 139], "lazyconstraintcallback": 138, "lazycutcallback": [1, 69, 71, 74, 141], "lb": [42, 49, 76, 144], "lbrace": 144, "lceil": [125, 144], "lcov": 87, "le": [42, 72, 88, 90, 91, 92, 94, 95, 97, 122, 125, 133, 141, 143, 144, 149], "lead": [39, 46, 47, 141, 143], "leader": 107, "learn": 35, "least": 98, "leastinfeas": [9, 22], "left": [1, 42, 45, 70, 72, 92, 95, 122, 125, 143, 149], "leftrightarrow": 72, "leq": [89, 107, 138], "less": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 138, 141], "lessorequ": [38, 42, 48, 78], "lessthan": 129, "let": [98, 99, 101, 102, 122, 125, 132, 139, 140, 143, 144, 149], "letter": 104, "level": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 89, 103, 105, 125], "levl": 122, "lfloor": 125, "li": 1, "lib": [88, 89, 95, 99, 101, 103], "librari": [67, 98, 99, 100, 103, 109, 139, 141], "life": 130, "like": [0, 70, 97, 98, 122, 125], "limit": [0, 23, 27, 46, 47, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 122, 125, 139, 140], "lin": 42, "lin_expr": 41, "linderoth": 104, "linear": [36, 37, 40, 41, 42, 45, 89, 91, 94, 98, 103, 104, 125, 129, 131, 134, 135, 141], "linearscor": 125, "linexpr": [36, 40, 42, 45, 51, 69, 131], "link": [67, 99, 102, 109, 139], "linterm": 41, "linux64x86": 103, "list": [77, 99, 102, 122], "literatur": 125, "littl": [70, 138], "live": 39, "ll": 42, "load": 122, "local": [76, 85, 87, 98, 99, 100, 101, 103, 144], "localbranch": [8, 9, 70, 71], "locat": [93, 122, 147], "log": [0, 27, 30, 91, 92, 122, 139], "log_after_termin": 1, "log_mast": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "long": [41, 98, 104], "look": [87, 98, 99, 102, 103, 125, 138, 141], "lot": [104, 125], "lower": [42, 49, 50, 89, 105, 135], "lowerleveldescript": [52, 88, 89, 95, 107, 109], "lp": [42, 93, 98, 110, 115, 128, 133, 141], "lvert": 97, "m": [38, 42, 50, 91, 92, 104, 122, 133], "m_capac": 138, "m_profit": 138, "m_weight": 138, "m_x": 138, "ma": 104, "machin": [85, 87], "made": [36, 45, 48, 49, 136], "mai": [38, 39, 42, 72, 87, 99, 104, 122, 125, 129, 130, 135, 136, 139, 140, 143], "main": [1, 70, 88, 89, 90, 91, 92, 94, 95, 100, 102, 105, 141], "mainli": 135, "maintain": 91, "make": [0, 1, 85, 87, 90, 97, 98, 99, 103, 123, 124, 125, 129, 141], "make_follower_ctr": [88, 89], "make_follower_var": [88, 89], "make_vector": [38, 42, 50, 135], "make_with_default_valu": 35, "makefil": 100, "manag": [11, 39, 87, 99, 102, 104, 130, 141], "mandatori": 122, "mani": [39, 98, 139, 143], "manner": 76, "manual": 1, "map": [46, 47], "martin": 104, "master": [72, 91, 92, 98, 104, 110, 120, 122, 128, 141, 144, 145], "master_problem": 24, "masterid": [91, 92, 107, 122, 149], "mater": 98, "materi": [72, 122], "mathbb": [89, 95, 107, 125, 133, 141, 143, 144, 149], "mathcal": 97, "mathemat": [37, 42, 98, 104, 131, 133], "matric": [97, 103, 133], "matrix": [42, 97], "matter": 141, "max": [98, 125, 143], "max_": [72, 94, 95, 138, 141, 143, 149], "maxim": [42, 94, 134, 138, 139, 140, 141], "maximum": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 90, 94, 95, 125, 149], "mean": [129, 141], "memori": 35, "merg": [46, 47], "merge_without_conflict": [46, 47], "method": [0, 1, 35, 38, 42, 46, 47, 50, 70, 93, 104, 107, 122, 125, 129, 131, 133, 134, 135, 136, 138, 139, 140, 143, 144, 145, 149], "mib": [54, 69, 88, 93, 95, 98, 105, 108, 110, 145], "michael": 104, "milp": [90, 93, 98], "min": [88, 89, 98, 107, 125, 143, 144], "min_": [88, 89, 90, 91, 92, 95, 107, 122, 141, 143, 144, 149], "min_x": [72, 122, 133, 143], "minim": [42, 90, 91, 95, 100, 102, 125, 134, 149], "minlp": 141, "mip": [42, 69, 76, 107, 141, 149], "mipabsolutegap": 76, "miprelativegap": 76, "miqcqp": 98, "miqp": 98, "miss": [104, 143], "mistak": 136, "mix": [11, 88, 89, 90, 91, 92, 94, 95, 104, 105, 108, 141], "mkdir": 99, "mn": 122, "mnsc": 104, "model": [0, 1, 23, 24, 27, 30, 35, 36, 37, 38, 39, 41, 43, 45, 46, 47, 48, 49, 50, 51, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 69, 70, 72, 73, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 105, 109, 110, 120, 125, 128, 129, 131, 134, 135, 136, 138, 139, 141, 144, 145, 147], "model1": 42, "model2": [42, 131, 135], "modifi": [82, 98, 139], "moment": 67, "monitor": 70, "moor": [89, 104], "mor": 104, "more": [35, 43, 70, 97, 98, 99, 107, 122, 125, 129, 135, 140, 143, 149], "moreov": 135, "mosek": [68, 69, 96, 98, 102], "mosek_dir": 103, "mosek_hom": 103, "most": [0, 1, 98, 122, 125, 139, 143, 145, 149], "mostinfeas": [0, 1, 9, 22, 91, 92, 122, 139], "move": [36, 37, 41, 42, 43, 45, 48, 49, 95, 122], "mp": 133, "mu": 125, "mu_i": 144, "much": 131, "multi": 85, "multipl": [0, 37, 42, 45, 46, 47, 92], "multipli": [36, 37, 41, 45, 46, 47, 131], "multiply_with_precis": [37, 40, 41, 76], "multiply_with_precision_by_power_of_10": [37, 40, 41, 45, 76], "must": [42, 70, 76, 97, 98, 102, 122, 125, 138, 144], "my": [35, 99], "my_annot": 35, "my_cut": 0, "my_known_best_bound": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "my_known_best_obj": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "my_opt": 102, "my_project": [100, 102], "my_target": [100, 102], "my_usernam": 103, "my_valu": 102, "mycallback": [1, 70, 138], "n": [37, 38, 42, 50, 91, 92, 94, 97, 122, 138, 141, 144], "n_": [97, 143], "n_agent": [91, 92, 122], "n_custom": [90, 95, 149], "n_facil": [90, 95, 149], "n_item": [94, 98, 138, 140, 141], "n_iter": 24, "n_job": [91, 92, 122], "n_solut": 42, "n_solved_nod": 42, "n_x": [143, 144], "n_y": 143, "name": [0, 24, 30, 35, 38, 42, 43, 50, 59, 60, 70, 95, 122, 133, 139, 149], "namespac": [76, 88, 89, 90, 91, 92, 94, 95, 98, 100, 102, 132, 140], "natur": [38, 98], "nb": 133, "nbsp": 98, "neam": [34, 91, 92, 98], "necessari": [42, 70, 96, 99, 103, 133, 141, 145, 149], "need": [42, 48, 49, 70, 85, 87, 97, 98, 99, 100, 103, 107, 109, 122, 125, 129, 135, 136, 138, 139, 141, 143, 145, 149], "neg": 97, "nest": [0, 38, 50, 98, 138, 139], "never": 141, "new": [0, 1, 23, 27, 35, 36, 37, 38, 39, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 87, 92, 98, 100, 107, 125, 130, 133, 135, 138, 139, 141, 143, 149], "next": 141, "ngen": 122, "node": [0, 1, 9, 11, 29, 69, 70, 82, 90, 91, 92, 98, 110, 115, 122, 125, 128, 139, 141], "node_selection_rul": 139, "nodeinfo": 1, "nodeinfot": [0, 1, 2, 3, 16, 17, 18, 19, 20, 21, 29], "nodeload": [1, 82], "nodescorefunct": [20, 125], "nodeselectionrul": [10, 11, 12, 13, 14], "nodeselectionrulefactori": [0, 10, 11, 12, 13, 14], "nodeselectionrulefactoryt": 0, "nodet": [0, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21], "nodevarinfo": [0, 29], "nodiscard": 1, "noexcept": [0, 23, 29, 36, 37, 40, 42, 43, 44, 45, 48, 52, 55, 56, 57, 58, 67], "non": [1, 37, 41, 46, 47, 70, 97, 143], "nor": 87, "norm": [46, 47], "normal": [46, 47, 102], "notat": 147, "note": [0, 27, 35, 38, 42, 46, 47, 67, 70, 85, 87, 95, 99, 100, 103, 107, 122, 125, 131, 133, 135, 136, 138, 139, 140, 143, 144, 149], "noth": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 107, 149], "notic": [109, 145], "notin": 125, "notion": [122, 138, 141], "now": [42, 70, 87, 95, 97, 98, 99, 103, 122, 125, 133, 139, 140, 141, 143, 149], "number": [0, 23, 27, 37, 38, 41, 42, 46, 47, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 122, 125, 133, 144], "numer": [37, 42, 75, 103, 131], "numeric_limit": 125, "nutshel": 70, "obj": [36, 42, 122], "obj_quadrat": 36, "object": [0, 1, 23, 27, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 91, 92, 94, 95, 98, 105, 109, 110, 122, 128, 129, 130, 131, 132, 133, 135, 138, 139, 140, 141, 144, 149], "objective_coefficient_for_x": 135, "objective_valu": [46, 47], "objectivesens": 42, "objectt": 35, "objval": 122, "observ": [72, 122, 125], "obtain": [1, 46, 47, 122, 129, 133, 135, 143, 149], "occur": 82, "octob": 104, "off": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 87, 141], "offer": [70, 98], "offici": [99, 103], "offset": 131, "oi": 104, "old": [36, 37, 38, 43, 45, 50], "omit": [70, 72, 122], "onc": [87, 98], "one": [38, 39, 42, 48, 91, 97, 98, 100, 107, 122, 125, 129, 130, 134, 135, 141, 143, 149], "ones": 125, "onli": [0, 1, 23, 27, 29, 39, 41, 42, 46, 47, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 87, 100, 103, 122, 125, 129, 130, 135, 138, 139, 140, 141, 143, 144], "only_if_has_strategi": 0, "open": [67, 90, 95, 149], "oper": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 26, 27, 28, 29, 32, 33, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 71, 72, 73, 104, 138], "opr": 104, "opt": 99, "optim": [0, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29, 31, 35, 36, 38, 39, 42, 43, 45, 46, 47, 50, 52, 54, 55, 56, 57, 58, 63, 64, 65, 66, 67, 68, 70, 72, 76, 88, 89, 90, 91, 92, 94, 95, 99, 104, 107, 109, 122, 125, 128, 129, 130, 132, 133, 135, 138, 140, 143, 144, 145, 149], "optimist": [105, 106, 110], "optimizer_factori": 42, "optimizerfactori": [0, 5, 6, 23, 24, 27, 29, 30, 42, 72, 73], "optimizerfactorywithdefaultparamet": [0, 23, 27, 52, 55, 56, 57, 58, 67], "optimizerwithlazyupd": [59, 60], "optimum": 42, "option": [30, 86, 90, 99, 102, 109, 144], "order": [0, 90, 95, 97, 103, 149], "org": [85, 104], "origin": [1, 70, 72, 98, 102, 125, 140, 141, 143], "original_model": [1, 70, 140], "orl": 104, "osi": [63, 64, 65, 66, 68, 69, 98], "osicbc": [67, 68], "osiclp": [67, 68], "osiclpsolverinterfac": 89, "osicplex": [67, 68], "osicpxsolverinterfac": 67, "osisolverinterfac": [52, 63, 64, 65, 66, 67], "osisymphoni": [67, 68], "other": [42, 85, 98, 102, 109, 122, 125, 131, 138], "otherwis": [35, 37, 38, 43, 46, 47, 48, 50, 97, 143], "our": [35, 98, 99, 102, 107, 122, 125, 133, 138, 139, 141], "out": [1, 70, 98, 99, 110, 120, 128, 138], "output": [0, 23, 27, 41, 42, 52, 53, 55, 56, 57, 58, 61, 62, 63, 64, 65, 66, 67, 85, 87, 122, 131], "over": [42, 131, 149], "overal": [91, 98, 139], "overload": [37, 48], "overrid": [0, 1, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 41, 42, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 72, 73, 138], "own": [0, 98, 107, 110, 115, 123, 128, 139, 141, 142, 143, 147, 149], "p": [11, 46, 47, 95, 98, 104, 133, 138, 141, 149], "p_j": 94, "pack": [35, 38, 50], "padm": 92, "page": [0, 27, 85, 87, 99, 100, 101, 102, 103, 104, 132, 138, 139, 140, 141, 143], "pair": [0, 36, 37, 44, 45, 95], "parallel": 98, "param": [36, 37, 40, 45, 51, 69, 131], "paramet": [0, 1, 23, 27, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 76, 92, 95, 98, 125, 131, 133, 135, 138, 144, 145, 149], "parametr": 37, "parametrized_express": 43, "parent": [24, 30, 59, 60, 98, 138], "parser": 122, "part": [37, 38, 42, 45, 50, 70, 72, 107, 125, 131, 141, 149], "particular": [35, 42, 85, 103, 107, 109, 125, 136, 138, 145], "pass": [38, 50, 67, 70, 103, 107, 122, 133, 138, 139, 141, 144, 145], "path": [99, 103, 133], "pattern": [129, 139], "penal": 92, "penalized_constraint": 92, "penalti": 93, "penalty_method": 92, "penaltymethod": 92, "penaltyupd": 92, "peopl": 98, "per_unit_transportation_cost": [90, 95, 149], "percentage_increas": [95, 149], "perform": [1, 42, 70, 84, 103, 104, 122, 125, 143, 149], "pessoa": 104, "phase": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 98], "phd": 88, "philip": 104, "piec": [42, 98, 140], "pip3": 85, "place": [35, 38, 50, 123, 124], "plane": [9, 69, 90], "platform": 103, "pleas": [0, 1, 85, 99, 102, 103, 109, 125, 140, 145], "plug": 98, "plugin": 85, "point": [41, 45, 70, 76, 88, 89, 103, 105, 109, 141, 143, 144], "pointer": 42, "polymorph": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "polytop": 104, "pool": [42, 98], "posit": 143, "poss": 104, "possibl": [1, 39, 46, 47, 70, 76, 98, 99, 100, 102, 103, 107, 122, 139, 141, 143, 149], "possibli": [50, 122], "potenti": [70, 72, 90, 95, 149], "power": 98, "practic": [11, 104, 125], "pre": 1, "precis": [43, 131], "prefix": 132, "prepar": [88, 89], "prepend": [43, 131, 141, 149], "presenc": 70, "previou": [107, 109, 135, 149], "price": [35, 84, 92, 98, 110, 124, 125, 128], "primal": [26, 28, 30, 36, 37, 40, 41, 42, 44, 45, 48, 51, 69, 70, 76, 104, 135, 138, 140], "primal_rai": 140, "primal_solut": [26, 28, 30, 70, 138], "primal_valu": 140, "print": [1, 70, 89, 91, 92, 97, 131, 138, 145], "privaci": 104, "problem": [0, 1, 11, 42, 46, 47, 72, 84, 93, 98, 103, 104, 105, 106, 108, 110, 122, 123, 124, 125, 132, 133, 135, 138, 139, 140, 141, 144, 145, 147, 148], "procedur": [70, 98, 141], "process": [70, 72, 92, 98, 99, 101, 122, 139, 143], "produc": [122, 125], "product": [41, 125], "productscor": 125, "profil": [84, 104], "profit": [94, 98, 140, 141], "program": [11, 39, 89, 91, 94, 98, 104, 130, 133, 141], "progress": [70, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 126, 127, 137, 146], "project": [53, 61, 62, 99, 101, 102], "properli": [67, 98], "protect": [1, 70, 138], "prove": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 98, 122, 129, 135, 140], "proven": 1, "provid": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 98, 102, 133, 139, 140, 141], "prunedsolut": 82, "pseudo": 98, "pseudocod": 144, "pseudocost": [9, 22, 90], "psi": 143, "public": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 71, 72, 73, 100, 102, 104, 138], "pure": [37, 98, 100], "push": 87, "put": 143, "python": 85, "python3": 85, "q": [97, 133], "q_": 97, "q_i": [90, 95, 149], "qcqp": 96, "qp": [96, 98, 103], "qquad": [141, 143], "quad": [72, 122, 133, 143, 144], "quadexpr": [36, 40, 45, 51, 69, 131], "quadrat": [36, 37, 40, 42, 45, 97, 98, 131], "quadterm": 44, "qualiti": 70, "queri": [37, 39, 42, 46, 47], "quick": [98, 138], "r": [95, 104, 125, 141, 143, 144, 149], "r_": [91, 92], "radiu": 144, "rai": [42, 129, 135, 140], "random": 98, "rang": [76, 90, 91, 92, 94, 95, 98, 122, 138, 140, 141, 149], "rather": [76, 149], "rbrace": 144, "rceil": [125, 144], "rea": 122, "reach": [46, 47, 98, 140], "read": [90, 95, 102, 103, 107, 122, 149], "read_from_fil": [55, 56, 59, 60, 88, 89, 95, 133], "read_inst": [91, 92, 94, 122], "read_instance_1991_cornuejols_": 149, "read_instance_1991_cornuejols_et_": [90, 95], "reader": [122, 140, 143], "readi": [99, 122, 141], "real": [37, 48, 49, 70, 138], "realiz": [95, 149], "realli": 98, "reason": [26, 28, 30, 42, 46, 47, 70, 98, 122, 140], "recal": [125, 149], "recogn": 76, "recommend": [76, 107, 122, 138, 141, 149], "recours": 143, "recurs": [38, 50], "reduc": [42, 76, 125, 135], "redund": 143, "refer": [0, 42, 85, 98, 100, 103, 109, 122, 125, 131, 136, 138, 140, 141, 143, 145], "reformul": [37, 93, 110, 120, 128, 141], "regard": [1, 122], "region": [98, 107, 110, 141, 142, 147, 149], "registri": 1, "rel": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 140], "relat": [35, 97, 103, 122], "relative_gap": [42, 76], "relativegap": 76, "relax": [0, 1, 70, 72, 82, 88, 89, 92, 105, 109, 122, 125, 138, 139, 141, 143], "relev": 103, "relgap": 122, "reli": 133, "remain": 122, "remov": [37, 41, 42, 98, 125], "ren": [8, 9, 70, 71], "render": 85, "repeat": [0, 135, 143], "replac": [36, 37, 42, 45, 97, 125], "report": 87, "repositori": [87, 103], "repres": [36, 37, 38, 41, 42, 43, 45, 48, 49, 50, 109, 131, 133], "represent": 42, "requir": [46, 47, 67, 100, 125, 135, 141, 144], "research": [88, 89, 95, 104], "reserve_ctr": 42, "reserve_var": 42, "reset": [46, 47, 144], "reset_objective_valu": [46, 47], "resolv": 72, "resort": 98, "resourc": [91, 122], "resource_consumpt": [91, 92, 122], "respect": [46, 47, 91, 131, 135, 140], "respons": [91, 139, 149], "rest": [98, 109, 122], "restrict": [42, 139, 144], "result": [37, 41, 95, 136, 139, 140], "retriev": [42, 122, 140], "return": [0, 1, 23, 27, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 88, 89, 90, 91, 92, 94, 95, 100, 102, 125, 136, 138, 140, 149], "returnt": 0, "returnth": 39, "revers": 144, "revisit": 104, "rfloor": 125, "rgap": 122, "rh": [42, 45], "rho": 144, "rho_j": 92, "right": [36, 38, 42, 45, 72, 92, 95, 99, 122, 123, 124, 125, 129, 143, 149], "rightarrow": 143, "rl": 107, "rmp": 144, "ro": 98, "robin_hood": 103, "robinhood_dir": 103, "robinhood_hom": 103, "robust": [25, 104, 143, 144, 145, 148], "robust_ccg": [90, 95, 149], "role": [70, 138], "root": [0, 103], "rotat": 97, "round": [37, 40, 41, 46, 47, 76], "routin": [70, 98, 122, 136, 145], "row": [36, 42, 48, 51, 69, 129], "rst": [0, 42, 48], "rtd": 85, "rudimentari": [122, 138, 141], "rule": [0, 1, 9, 11, 69, 90, 91, 92, 98, 104, 110, 115, 122, 125, 128, 139], "run": [1, 87, 99, 103, 122, 139], "runtim": 136, "rvert_2": 97, "s101070100263": 104, "s10287": 104, "sadykov": 104, "sai": [97, 143], "same": [49, 67, 103, 107, 109, 122, 130, 135, 139, 149], "satisfact": [76, 95, 149], "satisfi": [72, 76, 95, 141, 143, 149], "save": 76, "save_": 140, "save_du": [46, 140], "save_farka": 140, "save_prim": [42, 47, 88, 89, 90, 91, 92, 94, 95, 109, 122, 140, 145], "save_rai": 140, "savelsbergh": 104, "saw": 125, "scalar": 41, "scale": 104, "scale_to_integ": [40, 42, 45], "scenario": [143, 145], "scheme": [37, 98, 125, 140], "school": [104, 141], "scienc": [11, 104], "scientif": 104, "scratch": [46, 47, 98], "search": [72, 98, 100, 103, 104], "second": [0, 23, 27, 37, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 95, 97, 98, 122, 125, 129, 135, 139, 143, 149], "second_typ": 0, "section": [122, 125, 133, 138, 141, 143, 144], "see": [48, 49, 70, 72, 99, 102, 103, 107, 109, 125, 129, 131, 132, 133, 135, 138, 140, 141, 143, 145, 149], "seek": 143, "seem": 67, "seemlessli": 109, "seen": [37, 98, 139, 141, 145, 149], "segment": 39, "select": [0, 9, 11, 42, 69, 90, 91, 92, 94, 95, 98, 104, 110, 115, 122, 125, 128, 139, 149], "sens": [42, 125, 138, 143], "seobj_expr": 149, "separ": [70, 95, 98, 110, 138, 141, 142, 144, 145, 147], "separation_model": 0, "septemb": 104, "serv": [90, 95, 149], "set": [0, 1, 23, 27, 36, 37, 38, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 87, 90, 91, 92, 94, 95, 97, 100, 102, 103, 107, 122, 125, 129, 134, 135, 138, 139, 140, 141, 143, 144, 145], "set_best_bound_stop": 30, "set_ctr_rh": 42, "set_ctr_row": [42, 129], "set_ctr_typ": [42, 129], "set_follower_ctr": 107, "set_follower_obj_expr": [88, 89, 107], "set_follower_var": 107, "set_frequ": 29, "set_integer_column": 29, "set_iteration_limit": 29, "set_lazy_cut": 60, "set_lb": 49, "set_linear": [36, 45], "set_mat_coeff": 42, "set_max_depth": 29, "set_max_n_solution_in_pool": 60, "set_node_optim": 0, "set_numer": 37, "set_obj": 36, "set_obj_const": 42, "set_obj_expr": [42, 88, 89, 90, 91, 92, 94, 95, 98, 107, 122, 134, 138, 139, 140, 141], "set_obj_sens": [42, 134], "set_objective_valu": [46, 47], "set_param": 60, "set_param_best_bound_stop": [24, 30, 59, 60], "set_param_best_obj_stop": [24, 30, 59, 60], "set_param_infeasible_or_unbounded_info": [24, 30, 59, 60], "set_param_iteration_limit": [24, 30, 59, 60], "set_param_log": [24, 30, 59, 60], "set_param_presolv": [24, 30, 59, 60], "set_param_thread": [24, 30, 59, 60], "set_param_time_limit": [24, 30, 59, 60], "set_quadrat": [36, 45], "set_reason": [46, 47], "set_rh": [45, 129], "set_rhs_expr": 42, "set_row": 129, "set_solution_index": 42, "set_stag": [95, 149], "set_statu": [46, 47], "set_time_limit": 29, "set_tol_feas": [24, 30, 59, 60], "set_tol_integ": [24, 30, 59, 60], "set_tol_mip_absolute_gap": [24, 30, 59, 60], "set_tol_mip_relative_gap": [24, 30, 59, 60], "set_tol_optim": [24, 30, 59, 60], "set_typ": [48, 49], "set_ub": 49, "set_var_column": [42, 135], "set_var_lb": [42, 135], "set_var_obj": 42, "set_var_typ": [42, 135], "set_var_ub": [42, 135], "sever": [42, 125, 130, 139, 140], "sfina": 0, "shall": [87, 122], "shape": 141, "share": 107, "shoe": 140, "short": 42, "shortli": 143, "should": [1, 39, 42, 46, 47, 70, 76, 87, 98, 99, 100, 102, 103, 107, 109, 122, 125, 130, 131, 138, 140, 141, 143, 149], "show": [72, 88, 89, 90, 91, 92, 94, 95, 122, 125, 136, 138, 140, 141, 144], "shown": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "side": [1, 36, 38, 42, 45, 129], "side_effect_registri": 1, "sideeffectregistri": 1, "sigma_i": 98, "sign": 129, "similar": [109, 125, 141], "similarli": [70, 129, 135, 140, 141, 149], "simpl": [0, 72, 139, 141], "simpleround": [8, 9, 70, 71], "simplest": 122, "simpli": [98, 99, 122, 125], "simplifi": [132, 139], "sinc": [42, 98, 103, 135, 138, 139, 143, 149], "singl": 140, "single_level": 88, "sitemap": 85, "situat": 136, "size": [37, 41, 46, 47, 98, 125, 133, 138, 144], "slightli": 143, "small": 139, "smaller": [72, 76, 125], "smooth": 98, "so": [0, 42, 70, 97, 98, 103, 122, 125, 139, 140, 141, 143, 149], "socp": 103, "softwar": [98, 104], "solut": [1, 11, 26, 28, 30, 32, 33, 36, 37, 40, 41, 42, 44, 45, 48, 51, 69, 70, 72, 76, 82, 89, 91, 92, 95, 98, 104, 110, 122, 125, 128, 138, 139, 141, 143, 144, 145, 149], "solutionreason": [24, 26, 28, 30, 42, 46, 47], "solutionstatu": [24, 26, 28, 30, 42, 46, 47], "solv": [0, 1, 23, 27, 29, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 82, 89, 90, 91, 92, 94, 95, 96, 98, 103, 104, 105, 108, 110, 120, 122, 125, 128, 129, 134, 135, 138, 139, 141, 143, 144, 145, 149], "solver": [0, 1, 67, 69, 70, 89, 94, 95, 99, 100, 102, 105, 107, 109, 110, 122, 133, 138, 139, 140, 141, 145], "some": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 97, 102, 103, 122, 125, 135, 136, 138, 139, 140, 143, 144, 149], "some_function_creating_my_model": 133, "sometim": [135, 140], "somth": 131, "soon": 70, "space": [122, 140, 141], "spars": 76, "sparsiti": [37, 41, 76], "special": 143, "specif": [1, 37, 42, 70, 99, 102, 122, 125, 136, 138, 141], "specifi": [98, 99, 102, 103, 107, 122, 125, 129, 134, 135, 140, 141, 143, 145], "spend": 125, "sphinx": 85, "springer": 104, "sqrt": 97, "stabil": [31, 69, 91, 92, 95, 98, 104, 110, 120, 128, 142, 147], "stabl": 67, "stage": [93, 98, 99, 104, 110, 143, 144, 145, 147, 148], "stage_ctr": 149, "stage_descript": 24, "stage_index": 149, "stage_var": 149, "stagedescript": [23, 24, 95, 145, 149], "standalon": 98, "standard": [1, 125, 132, 133], "start": [1, 72, 101, 102, 132, 139], "stat": 122, "state": 144, "static": [35, 36, 37, 38, 45, 50, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 76], "statu": [26, 28, 30, 42, 46, 47, 122, 140], "std": [0, 1, 23, 24, 27, 30, 35, 38, 41, 42, 43, 44, 46, 47, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 88, 89, 90, 91, 92, 94, 95, 103, 109, 122, 125, 131, 133, 135, 138, 140, 145], "step": [70, 99, 105, 122, 144, 147], "still": [100, 123, 124], "stop": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 125, 144], "store": [0, 1, 35, 37, 38, 39, 41, 42, 45, 46, 47, 50, 76, 103, 122, 133, 139, 140, 145, 149], "straightforward": [135, 139, 141], "strategi": [0, 1, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 26, 28, 29, 32, 33, 70, 72, 73, 91, 92, 98, 104, 138], "strengthen": 141, "strictli": [0, 138, 141], "string": [24, 30, 35, 38, 42, 43, 50, 55, 56, 58, 59, 60], "strong": [98, 110, 120, 128], "strongbranch": [9, 22, 125], "strongbranchingphas": 125, "strongbranchingphasetyp": 20, "strongli": 0, "structur": 125, "studi": [92, 104], "sub": [0, 42, 98, 101, 102, 122, 125, 138, 139, 145], "sub_problem_specif": 122, "subclass": [1, 2, 48, 49, 67, 70, 71], "subject": [42, 104, 122, 141], "submit": [1, 70, 98], "submit_bound": 1, "submit_heuristic_solut": [1, 70], "suboptim": 140, "subproblem": [27, 30, 91, 92, 122, 125], "subset": [90, 94, 95, 104, 143, 149], "subseteq": [125, 143, 144], "substanti": 125, "substract": 37, "subtarct": 45, "subtract": [36, 37, 41, 45, 131], "sudo": [85, 87, 99], "sum": [138, 141], "sum_": [37, 90, 91, 92, 94, 95, 97, 122, 138, 141, 144, 149], "superus": 99, "support": [98, 141], "sure": [1, 98, 123, 124, 125, 149], "switch": [98, 125], "symbol": [43, 131, 141], "symmetric_pair_equal_to": 44, "symmetric_pair_hash": 44, "symphoni": [67, 98], "system": [99, 109], "t": [0, 23, 24, 27, 30, 39, 42, 43, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 72, 88, 89, 90, 91, 92, 94, 104, 107, 122, 131, 133, 135, 138, 141, 143, 144], "t_": [90, 95, 149], "t_a": [44, 76], "t_absolute_gap_toler": [0, 23, 27, 52, 55, 56, 57, 58, 60, 63, 64, 65, 66, 67], "t_annot": [38, 50], "t_apply_to_tree_nod": 3, "t_arg": [35, 38, 50], "t_argc": [88, 89, 90, 91, 92, 94, 95, 100, 102], "t_argv": [88, 89, 90, 91, 92, 94, 95, 100, 102], "t_b": [44, 76], "t_begin": [16, 17, 18, 19, 20, 21], "t_best_bound_stop": [0, 23, 24, 27, 30, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67], "t_best_obj_stop": [24, 30, 59, 60], "t_bound": 1, "t_branching_rul": 0, "t_callback": 0, "t_capac": 138, "t_cb": [56, 58], "t_coeff": 42, "t_coeffici": [37, 41, 44], "t_column": [42, 49, 50], "t_complete_recours": 24, "t_conditional_valu": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_constant": [37, 38, 40, 42], "t_continuous_relax": [59, 60], "t_ctr": [24, 42, 43, 59, 60], "t_ctr_decomposit": 27, "t_cut": [1, 70, 72, 73], "t_decomposit": 27, "t_default_sub_problem_spec": 30, "t_depth": 0, "t_descript": 52, "t_dim": [38, 42, 50], "t_dual": [37, 45], "t_els": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_end": [16, 17, 18, 19, 20, 21], "t_env": [35, 38, 42, 50, 55, 56, 59, 60, 95], "t_event": [1, 70, 138], "t_expon": [37, 40, 41, 45, 76], "t_expr": 40, "t_factor": [37, 40, 41, 44, 46, 47], "t_filenam": [55, 56, 59, 60], "t_formul": 30, "t_frequenc": 29, "t_gamma": 95, "t_i": 122, "t_id": 27, "t_if": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_index": 42, "t_info": 1, "t_initial_cost": 26, "t_initial_factor": [32, 33], "t_instanc": 95, "t_iteration_count_limit": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_iteration_limit": [24, 29, 30, 59, 60], "t_kei": [41, 46, 47], "t_lb": [42, 49, 50, 76], "t_lh": 45, "t_lin_expr": [36, 40, 45], "t_log_color": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_log_factori": 0, "t_log_level": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_logger": 27, "t_logger_factori": 30, "t_master_du": [32, 33], "t_master_optim": 24, "t_master_optimizer_factori": 30, "t_max_cuts_factor": 3, "t_max_depth": [20, 29], "t_max_n_thread": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_max_n_vari": 20, "t_max_parallel_pr": 30, "t_max_pass_root_nod": 3, "t_max_updates_before_phase_i": 26, "t_minimum_ratio_of_integer_variables_to_fix": 6, "t_minimum_ratio_of_variables_to_fix": 6, "t_mip_tol_absolute_gap": [24, 30, 59], "t_model": [0, 23, 27, 30, 38, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 72, 73, 95], "t_n_digit": [37, 40, 41, 42, 46, 47, 76], "t_n_significant_digit": [40, 45], "t_n_sub_problem": 27, "t_n_variabl": 20, "t_name": [35, 38, 42, 50], "t_neighbourhood_s": 5, "t_node_optim": 0, "t_node_select": 0, "t_node_selection_rul": 0, "t_num": 40, "t_obj": [36, 42], "t_object": [39, 42], "t_optim": [23, 29], "t_optimizer_factori": [5, 6, 27, 42, 72, 73], "t_osi_optim": 52, "t_p": [46, 47], "t_param": [37, 40, 43, 56, 58, 60], "t_param_1": 37, "t_param_2": 37, "t_parent": [10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 24, 26, 28, 30], "t_percentage_increas": 95, "t_phase": 20, "t_primal": [36, 37, 40, 41, 42, 44, 45], "t_profit": 138, "t_ptr_to_callback": 60, "t_quad_expr": [36, 40, 45], "t_reason": [46, 47], "t_relative_gap_toler": [0, 23, 27, 52, 55, 56, 57, 58, 60, 63, 64, 65, 66, 67], "t_remove_infeasible_column": 30, "t_rh": [0, 36, 37, 40, 41, 42, 45, 46, 47], "t_row": [42, 48], "t_score_funct": 20, "t_seed": 21, "t_sens": 42, "t_separ": [23, 24], "t_separation_problem": [72, 73], "t_size": 42, "t_solut": [48, 70], "t_solver_interfac": [63, 64, 65, 66, 67], "t_src": [20, 23, 27, 36, 37, 40, 45, 48, 49, 52, 56, 67], "t_stabil": [23, 24, 27, 30], "t_stage_descript": [23, 24], "t_statu": [46, 47], "t_strategi": [27, 30], "t_sub_problem": 27, "t_sub_problem_specif": 30, "t_temp_ctr": [38, 42], "t_temp_var": 42, "t_term": 37, "t_thread": [24, 30, 59], "t_thread_limit": 60, "t_time_limit": [0, 23, 24, 27, 29, 30, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67], "t_tol_feas": [24, 30, 59, 60], "t_tol_integ": [24, 30, 59, 60], "t_tol_mip_relative_gap": [24, 30, 59], "t_tol_optim": [24, 30, 59, 60], "t_toler": [45, 76], "t_type": [38, 42, 45, 48, 49, 50], "t_ub": [42, 49, 50, 76], "t_uncertainty_set": [23, 24], "t_update_factor": 26, "t_use_farkas_for_infeas": 30, "t_use_hard_branch": 30, "t_use_lift": 3, "t_user_best_obj": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "t_valu": [0, 3, 23, 24, 26, 27, 29, 30, 37, 42, 46, 47, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 76], "t_var": [24, 40, 42, 43, 59, 60], "t_var_decomposit": 27, "t_vector": 42, "t_weight": 138, "t_x": [76, 138], "t_xi": 95, "take": [0, 35, 125, 129, 139, 140, 144], "taken": [45, 76, 88, 89, 95, 107, 141, 149], "target": [85, 87, 99, 100, 102, 103], "target_link_librari": [100, 102], "task": [97, 122, 125], "techniqu": [104, 125, 144], "technisch": 104, "tell": [87, 102, 103, 122], "tempctr": [1, 38, 42, 51, 69, 70, 72, 73, 129], "templat": [0, 1, 2, 3, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 27, 29, 30, 35, 38, 39, 40, 41, 42, 43, 44, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 103, 122, 131, 135], "temporari": [38, 48, 49, 129, 135, 139], "temporary_constraint": 129, "tempvar": [42, 51, 69, 135], "term": [36, 37, 41, 45, 48], "termin": [1, 24, 30, 59, 60, 70], "test": [43, 67, 86, 98], "text": [37, 72, 88, 89, 90, 91, 92, 94, 107, 125, 133, 138, 141, 143, 144], "textbf": 97, "textrm": [42, 122], "th": [91, 92], "than": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 97, 98, 138, 141, 143], "thank": [111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 126, 127, 137, 146], "thei": [35, 37, 98, 122, 135, 138, 141, 143, 149], "them": [39, 42, 72, 87, 98, 141], "theme": 85, "theoret": 98, "theori": 141, "therefor": [35, 42, 99, 135, 141, 143], "thesi": [88, 104], "thi": [0, 1, 23, 27, 29, 36, 37, 39, 41, 42, 43, 45, 46, 47, 48, 49, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 84, 85, 87, 88, 89, 90, 91, 92, 94, 95, 97, 99, 100, 101, 102, 103, 107, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 129, 131, 132, 133, 135, 136, 137, 138, 139, 140, 141, 143, 144, 145, 146, 149], "thing": [132, 141], "think": 98, "thorsten": 104, "those": 141, "though": [39, 67, 98, 100, 122, 125, 141, 143], "thought": [99, 144], "thread": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "three": [107, 122, 125, 131, 139, 141], "threshold": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "through": [0, 23, 27, 39, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 98, 101, 103, 122, 130, 138, 139, 144], "throughout": 92, "throw": [37, 46, 47], "thrown": [38, 45, 46, 47, 50, 97, 139], "thu": [0, 35, 72, 98, 122, 125, 143], "tild": 143, "time": [0, 1, 23, 24, 27, 30, 37, 42, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 82, 95, 99, 122, 125, 130, 131, 135, 139, 140, 143, 144, 149], "timelimit": 140, "timer": [1, 24, 30, 59, 60, 70], "timi": 122, "timo": 104, "timt": 122, "to_str": [91, 92, 122], "tobia": 104, "todo": [110, 115, 120, 128, 139, 142, 147], "togeth": 103, "told": 87, "toler": [0, 23, 27, 37, 41, 45, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 75, 140], "tomlin": [11, 104], "too": [98, 131], "tool": [85, 98, 103], "top": [72, 97, 133, 138, 141], "topic": [122, 138, 141], "total": [70, 90, 91, 94, 95, 149], "tree": [0, 1, 70, 82, 98, 122, 125, 141], "tri": 125, "trigger": [1, 70, 125, 138], "true": [0, 23, 27, 35, 37, 38, 41, 42, 43, 45, 46, 47, 48, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 89, 91, 92, 95, 139, 141, 144, 145], "trust": [98, 110, 142, 147], "trustregion": [95, 144], "try": [1, 39, 46, 47, 99, 136], "tune": 98, "turn": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 131, 139, 141, 149], "tutori": [27, 35, 72, 98, 107, 109, 122, 123, 124, 125, 143, 144, 145, 149], "tweak": 98, "two": [35, 93, 97, 98, 101, 104, 107, 109, 110, 122, 125, 135, 138, 141, 143, 145, 147, 148], "txt": [90, 91, 92, 94, 95, 100, 102, 122, 149], "type": [0, 35, 38, 39, 42, 43, 45, 46, 47, 48, 49, 50, 77, 82, 98, 107, 122, 125, 129, 135, 136, 141, 149], "typenam": [0, 46, 47], "typic": [37, 39, 41, 42, 46, 47, 48, 70, 72, 82, 98, 122, 125, 130, 133, 139, 141, 143, 149], "u": [99, 104, 122, 132, 139, 140], "ub": [42, 49, 76, 144], "uchoa": 104, "umpir": [11, 104], "unbound": [0, 23, 27, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 135, 140], "unbounded": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "uncertain": [95, 145, 149], "uncertainti": [95, 104, 143, 145], "uncertainty_set": [24, 95, 144, 145, 149], "unchang": 122, "undefin": 39, "under": [97, 123, 124, 149], "underli": [35, 43, 110, 125, 128, 139, 141, 149], "underlin": 144, "underset": [88, 89, 107, 143], "understand": [111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 126, 127, 137, 146], "unfortun": [103, 125], "unifi": 98, "uniformli": 98, "uniformlyrandom": [9, 22], "uniqu": [35, 38, 42, 50], "unit": 86, "unitari": [90, 95, 149], "univers": [69, 81, 110, 128, 139], "universit": 104, "unknown": [95, 149], "unlik": 141, "unord": 103, "unsign": [0, 3, 5, 20, 21, 23, 24, 26, 27, 29, 30, 35, 37, 38, 40, 41, 42, 43, 45, 46, 47, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 76, 90, 91, 92, 95, 98, 122, 125, 140, 149], "unus": 42, "up": [37, 41, 98, 139, 140], "updat": [1, 42, 91, 92, 98, 139, 144], "update_stability_cent": [32, 33], "upper": [42, 49, 50, 89, 135], "url": 104, "us": [0, 1, 23, 27, 29, 35, 36, 37, 38, 39, 41, 42, 43, 45, 46, 47, 48, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 82, 85, 87, 88, 89, 90, 91, 92, 94, 95, 97, 98, 99, 100, 102, 104, 107, 109, 110, 120, 122, 123, 128, 129, 130, 131, 132, 133, 134, 135, 136, 138, 139, 140, 141, 142, 143, 145, 147, 149], "usag": 67, "use_clp": 109, "use_eigen": 103, "use_glpk": 103, "use_gurobi": [102, 103], "use_high": 103, "use_mib": 109, "use_mosek": 103, "use_presolv": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "use_robinhood": 103, "user": [0, 1, 42, 70, 76, 98, 99, 103, 110, 115, 128, 138, 139, 143], "usercutcallback": [0, 1, 69, 71, 74, 138, 141], "usr": [99, 101, 103], "usual": [46, 47], "util": 1, "v": [141, 144], "v0": 102, "v_1": [90, 95, 149], "v_2": [90, 95, 149], "valid": [1, 70, 82, 98, 138, 141], "valu": [0, 23, 27, 35, 36, 37, 38, 41, 42, 45, 46, 47, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 76, 78, 79, 82, 94, 97, 102, 103, 122, 125, 129, 133, 134, 135, 138, 140, 141, 143, 144], "valuet": [35, 38, 50], "vanderbeck": 104, "var": [24, 27, 36, 39, 40, 41, 42, 43, 44, 45, 47, 49, 51, 59, 60, 69, 95, 107, 129, 131, 133, 135, 136, 138, 149], "varepsilon": [72, 125, 144], "varepsilon_": [143, 144], "variabl": [0, 23, 27, 35, 36, 37, 41, 42, 43, 45, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 76, 91, 92, 98, 99, 102, 103, 107, 109, 110, 122, 125, 128, 129, 130, 131, 132, 134, 139, 140, 141, 143, 144, 145, 149], "variablebranch": [16, 17, 18, 19, 20, 21], "variant": [60, 95, 149], "vartyp": [42, 49, 50, 80, 81], "varvers": [49, 50], "ve": [123, 124], "vector": [30, 38, 42, 50, 95, 103, 138, 141, 143, 149], "veri": [1, 98, 109], "versatil": 98, "version": [1, 38, 39, 42, 50, 85, 95, 98, 100, 102, 129, 130, 135, 143, 149], "via": [42, 87, 98], "view": [43, 131], "violat": [45, 48, 72, 76, 138, 141], "virtual": [0, 1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 41, 44, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 71, 72, 73, 98], "void": [0, 1, 23, 24, 26, 27, 28, 29, 30, 32, 33, 35, 36, 37, 38, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 59, 60, 63, 64, 65, 66, 67, 70, 138], "w": [104, 138, 141], "w_": 122, "w_j": 94, "wa": [11, 38, 42, 50, 100, 125, 139, 143], "wai": [91, 101, 102, 107, 122, 133, 135, 141, 143, 149], "want": [1, 70, 87, 97, 98, 99, 102, 122, 135, 136, 138, 139, 140, 149], "warn": 97, "we": [0, 35, 41, 46, 47, 70, 72, 87, 88, 89, 90, 91, 92, 94, 95, 97, 98, 99, 100, 102, 103, 107, 109, 122, 125, 129, 131, 132, 133, 135, 138, 139, 140, 141, 143, 144, 145, 149], "websit": 85, "weight": [94, 98, 138, 140, 141], "well": [98, 103, 131, 141], "wentg": [34, 98], "were": [70, 141], "what": [1, 109, 141, 145, 149], "when": [0, 1, 23, 27, 35, 42, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 76, 82, 87, 91, 98, 103, 122, 125, 131, 135, 138, 141, 145], "whenev": [70, 138, 141], "where": [0, 37, 89, 95, 97, 99, 103, 122, 125, 129, 138, 141, 144, 149], "whether": [138, 141, 143], "which": [0, 1, 23, 27, 29, 35, 36, 37, 38, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 70, 72, 85, 94, 98, 99, 100, 102, 103, 107, 109, 122, 125, 129, 131, 132, 134, 135, 136, 138, 139, 141, 143, 145, 149], "while": [0, 42, 45, 90, 91, 95, 125, 133, 138, 139, 141, 149], "who": 99, "whole": [45, 72, 125], "whose": [36, 41, 70, 125, 138], "why": [96, 129], "wide": 98, "wilei": 104, "wish": [1, 143], "with_": 139, "with_absolute_gap_toler": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_best_bound_stop": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_best_obj_stop": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_branching_rul": [0, 1, 90, 91, 92, 122, 125, 139], "with_callback": [0, 1, 70], "with_column_pool_clean_up": [91, 92], "with_complete_recours": [23, 95], "with_continuous_relaxation_onli": [56, 57, 58], "with_default_sub_problem_spec": [27, 91, 92, 122, 125], "with_dual_price_smoothing_stabil": [27, 91, 92], "with_external_param": 56, "with_external_paramet": 58, "with_feasible_solution_statu": 92, "with_frequ": 29, "with_frequency_in_second": [91, 92], "with_hard_branch": [27, 91, 92], "with_infeasibility_strategi": [27, 91, 92], "with_infeasible_columns_remov": 27, "with_infeasible_or_unbounded_info": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_initial_cost": 26, "with_integer_column": 29, "with_iteration_limit": [0, 23, 27, 29, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_lazy_cut": [56, 141], "with_lift": 3, "with_log": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 89, 91, 92, 95, 139, 144, 145], "with_log_level": 122, "with_logg": [0, 27, 91, 92], "with_master_optim": [23, 27, 91, 92, 95, 122, 125, 144, 145], "with_max_cuts_factor": 3, "with_max_depth": 29, "with_max_n_solution_in_pool": 56, "with_max_n_vari": [20, 125], "with_max_parallel_sub_problem": 27, "with_max_pass_root_nod": 3, "with_max_updates_before_phase_i": 26, "with_node_optim": [0, 1, 90, 122], "with_node_scoring_funct": 20, "with_node_select": 0, "with_node_selection_rul": [0, 1, 90, 91, 92, 122, 139], "with_node_selection_strategi": 125, "with_node_solv": 139, "with_optim": [5, 6, 29, 91], "with_osi_interfac": [52, 89, 92], "with_penalty_upd": 92, "with_presolv": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_relative_gap_toler": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_resc": 92, "with_scal": 0, "with_scoring_funct": 125, "with_se": 21, "with_separ": [23, 95, 144, 145], "with_separation_optim": [72, 73, 141], "with_stabil": [23, 95, 144], "with_sub_problem_spec": 27, "with_subtree_depth": [0, 91, 92], "with_test_coverag": 87, "with_thread_limit": [0, 23, 27, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67], "with_time_limit": [0, 23, 27, 29, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 122, 139], "with_tree_node_cut": 3, "with_trust_factor": [95, 144], "with_update_factor": 26, "within": [35, 42, 91, 92, 98, 141], "withiterationlimit": 125, "withnodeoptim": 125, "without": [42, 98, 99, 102, 131, 144], "wolf": [27, 37, 91, 92, 104, 110, 120, 128], "wolsei": 104, "word": [122, 138], "work": [98, 102, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 126, 127, 137, 139, 144, 146], "worst": [98, 145], "worstbound": [9, 15, 91, 92], "would": [98, 122, 129], "wrapper": [88, 89, 90, 91, 92, 94, 95], "write": [1, 42, 70, 98, 110, 115, 120, 125, 128, 138, 139, 142, 147], "written": [97, 143], "wrong": 136, "x": [0, 23, 27, 36, 38, 41, 42, 43, 45, 47, 48, 50, 52, 55, 56, 57, 58, 63, 64, 65, 66, 67, 72, 88, 89, 90, 91, 92, 94, 95, 97, 98, 100, 102, 107, 122, 129, 131, 133, 135, 136, 138, 139, 140, 141, 143, 144, 149], "x_": [42, 91, 92, 97, 122], "x_0": [41, 42, 97, 129, 131, 134, 141, 143, 144], "x_0_2": 122, "x_0_3": 122, "x_0_6": 122, "x_1": [41, 42, 129, 131, 134, 141], "x_1_4": [50, 122], "x_1_5": 122, "x_1_7": 122, "x_2_0": 122, "x_2_1": 122, "x_i": [90, 95, 97, 138, 141, 144, 149], "x_ij": [91, 92, 122], "x_j": [94, 97, 125, 133], "xi": [37, 72, 95, 131, 143, 144, 149], "xi_0": [72, 131], "xi_1": 131, "xi_j": [95, 149], "xml": [53, 61, 62], "xpress": [68, 69], "y": [36, 38, 43, 45, 48, 88, 89, 90, 95, 107, 129, 135, 141, 143, 144, 149], "y_": [90, 95, 135, 149], "y_0_0": 135, "ye": [87, 99, 102, 103, 109], "yet": [48, 49, 70, 76, 98, 125, 130, 135, 143], "yield": 37, "you": [0, 1, 42, 70, 72, 85, 87, 98, 99, 100, 101, 102, 103, 107, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 123, 124, 125, 126, 127, 129, 135, 136, 137, 138, 140, 141, 143, 144, 145, 146, 149], "your": [0, 39, 87, 98, 99, 101, 102, 107, 109, 110, 115, 116, 117, 118, 119, 120, 121, 123, 124, 126, 127, 128, 130, 139, 141, 142, 143, 145, 147, 149], "your_cmake_opt": 99, "your_other_cmake_opt": 99, "your_valu": 99, "z": [125, 133, 138, 141], "z_": [89, 107], "z_i": 125, "z_j": 125, "zeng": 104, "zero": [37, 41, 46, 47, 76, 97], "zhao": 104, "\u00e4": 104, "\u00e7": 104, "\u00e9": 104}, "titles": ["BranchAndBound", "BranchAndBoundCallback", "BranchAndBoundCallbackFactory", "Cuts::KnapsackCover", "Cutting Planes", "Heuristics::LocalBranching", "Heuristics::RENS", "Heuristics::SimpleRounding", "Heuristics", "Branch-and-Bound Algorithm", "BestBound", "BestEstimate", "BreadthFirst", "DepthFirst", "WorstBound", "Node Selection Rules", "FirstInfeasibleFound", "LeastInfeasible", "MostInfeasible", "PseudoCost", "StrongBranching", "UniformlyRandom", "Branching Rules", "Robust::ColumnAndConstraintGeneration", "Optimizers::Robust::ColumnAndConstraintGeneration", "Column-and-Constraint Generation Algorithm", "DantzigWolfe::ArtificialCosts", "DantzigWolfeDecomposition", "DantzigWolfe::FarkasPricing", "Heuristics::IntegerMaster", "Optimizers::DantzigWolfeDecomposition", "Column Generation Algorithm", "DantzigWolfe::Neame", "DantzigWolfe::Wentges", "Stabilization", "Annotation", "Column", "Constant", "Ctr", "Env", "Expr", "LinExpr", "Model", "Param", "QuadExpr", "Row", "Solution::Dual", "Solution::Primal", "TempCtr", "TempVar", "Var", "Common", "Bilevel::Mibs", "Optimizers::Bilevel::Mibs", "External Bilevel Solvers", "GLPK", "Gurobi", "HiGHS", "Mosek", "Optimizers::GLPK", "Optimizers::Gurobi", "Optimizers::HiGHS", "Optimizers::Mosek", "OsiCbc", "OsiClp", "OsiCplex", "OsiSymphony", "COIN-OR/Osi (Cplex, Xpress, Cbc, \u2026)", "External MIP solvers", "Class List", "Callback", "CallbackFactory", "LazyCutCallback", "UserCutCallback", "Universal Callbacks", "Constants", "Tolerances and Numerics", "API", "CtrType", "VarType", "Common", "Type List", "Events", "Universal Callbacks", "Benchmark", "Build the doc!", "Developer guide", "Unit and integration tests", "Bilevel LP-LP (KKT Reformulation)", "Bilevel MILP-MILP (MibS)", "Facility Location Problem (Branch-and-Bound)", "Generalized Assignment Problem (Branch-and-Price)", "Generalized Assignment Problem (Column Generation + Penalty Method)", "Examples", "Knapsack Problem (HiGHS)", "Two-Stage Robust Facility Location Problem (CCG)", "FAQ", "Why is Eigen necessary to solve QPs and QCQPs with Mosek?", "What Is Idol?", "Global Installation", "Linking Your C++ Project", "Installation", "Local Installation", "List of CMake Options", "References", "Bilevel Optimization", "Modeling", "Modeling an Optimistic Bilevel Problem", "External Solvers", "Solving Mixed-Integer Bilevel Problems with MibS", "Tutorials", "Creating Your Own Branching Rule (Advanced) [TODO]", "Create Your Own Callback (Advanced) [TODO]", "Creating Your Own Node Class (Advanced) [TODO]", "Creating Your Own Node Selection Rule (Advanced) [TODO]", "Branch-and-Bound Algorithm", "Adding User Cuts and Lazy Constraints [TODO]", "Writing an LP-based Branch-and-Bound [TODO]", "Modeling and Solving A Dantzig-Wolfe Reformulation [TODO]", "Using In-Out Stabilization [TODO]", "Column Generation and Branch-and-Price Algorithm", "The Integer Master Heuristic [TODO]", "Branch-and-Price 101", "Heuristic Pricing (to come)", "In-Out Stabilization (to come)", "Using Strong Branching", "Writing A Branch-and-Cut-and-Price Algorithm [TODO]", "Writing A Branch-and-Price Algorithm [TODO]", "Mixed-Integer Programming", "Constraints", "The Environment", "Expressions", "Modeling", "Models", "Objective Functions", "Variables", "Getting Access to The Underlying Optimizer", "Creating Your Own Optimizer (Advanced) [TODO]", "Creating Your Own Universal Callback", "Optimizers", "Solving a Model and Accessing the Solution", "Adding User Cuts and Lazy Constraints", "Column-and-Constraint-Generation Algorithm", "Introduction", "Using Trust Region Stabilization", "Writing a Column-and-Constraint-Generation Algorithm", "Writing Your Own Separator (Advanced) [TODO]", "Robust Optimization", "Modeling", "Modeling a Two-Stage Robust Problem"], "titleterms": {"101": 122, "A": [118, 126, 127, 138, 149], "In": [97, 119, 124], "OR": 67, "On": 143, "The": [121, 122, 130, 136, 143], "With": 98, "about": [131, 149], "access": [129, 134, 135, 136, 140], "ad": [116, 134, 141], "advanc": [111, 112, 113, 114, 137, 146], "algorithm": [9, 25, 31, 98, 115, 120, 122, 126, 127, 142, 143, 145], "an": [107, 117, 134, 141], "annot": [35, 149], "answer": 97, "api": 77, "artificialcost": 26, "assign": [91, 92, 149], "assumpt": 144, "automat": 122, "base": 117, "basic": [125, 138, 143], "benchmark": 84, "bender": 141, "bestbound": 10, "bestestim": 11, "bilevel": [52, 53, 54, 69, 88, 89, 93, 98, 105, 107, 109, 110], "bound": [9, 90, 93, 98, 115, 117], "branch": [9, 22, 90, 91, 93, 98, 111, 115, 117, 120, 122, 125, 126, 127], "branchandbound": 0, "branchandboundcallback": 1, "branchandboundcallbackfactori": 2, "breadthfirst": 12, "build": [85, 87, 99, 103], "c": 100, "callback": [70, 74, 83, 112, 138], "callbackfactori": 71, "cbc": 67, "ccg": 95, "chang": [125, 134], "class": [69, 113], "cmake": 103, "code": 87, "coin": 67, "column": [25, 31, 36, 92, 93, 98, 120, 142, 145], "columnandconstraintgener": [23, 24], "come": [123, 124], "commerci": 103, "common": [51, 75, 80], "complet": [107, 149], "configur": 99, "constant": [37, 75, 131], "constraint": [25, 98, 116, 129, 133, 141, 142, 143, 145], "content": [98, 99, 103, 107, 125, 129, 133, 134, 135, 138, 140, 141, 143, 144, 149], "coupl": 143, "cover": [138, 141], "coverag": 87, "cplex": 67, "creat": [70, 111, 112, 113, 114, 122, 129, 133, 135, 137, 138], "ctr": 38, "ctrtype": 78, "current": 98, "cut": [3, 4, 116, 126, 138, 141], "dantzig": [98, 118, 122], "dantzigwolf": [26, 28, 32, 33], "dantzigwolfedecomposit": [27, 30], "decomposit": [91, 98, 122], "defin": [107, 149], "definit": [88, 89, 90, 91, 92, 94, 107, 143], "depend": [85, 87, 103], "depthfirst": 13, "describ": 107, "descript": [85, 95], "detail": 97, "determinist": 149, "develop": 86, "doc": 85, "dual": 46, "eigen": [97, 103], "env": 39, "environ": 130, "event": 82, "exampl": [0, 1, 41, 42, 70, 87, 93, 98, 99, 103, 107, 122, 138, 140, 141, 149], "expr": 40, "express": 131, "extern": [54, 68, 98, 103, 108], "facil": [90, 95, 149], "faq": 96, "farkaspr": 28, "featur": 98, "file": 133, "firstinfeasiblefound": 16, "formul": 122, "from": 133, "full": 125, "function": [107, 125, 134], "gener": [25, 31, 91, 92, 93, 98, 120, 142, 145], "get": [98, 136], "give": 122, "global": 99, "glpk": [55, 59, 103], "guid": [85, 86, 87], "gurobi": [56, 60, 99, 103], "hash": 103, "heurist": [5, 6, 7, 8, 29, 121, 123], "high": [57, 61, 94, 103, 107], "hood": 103, "i": [97, 98], "idea": 143, "idol": [88, 89, 90, 91, 92, 94, 95, 98, 144], "impact": 143, "implement": [89, 90, 91, 92, 94, 95, 125, 144], "inequ": 141, "instal": [85, 87, 99, 101, 102], "instruct": [85, 87, 122], "integ": [69, 81, 93, 98, 109, 110, 121, 128], "integermast": 29, "integr": [87, 103], "interfac": 98, "introduct": [141, 143, 144], "iter": 133, "kkt": 88, "knapsack": [94, 138, 141], "knapsackcov": 3, "lazi": [116, 141], "lazycutcallback": [70, 72], "leastinfeas": 17, "level": 107, "linexpr": 41, "link": [100, 103], "list": [69, 81, 103], "local": 102, "localbranch": 5, "locat": [90, 95, 149], "lower": 107, "lp": [88, 117], "main": 107, "map": 103, "martinu": 103, "master": 121, "mathemat": 122, "method": 92, "mib": [52, 53, 89, 109], "milp": 89, "mip": [68, 98], "mix": [69, 81, 93, 98, 109, 110, 128], "model": [42, 106, 107, 118, 122, 132, 133, 140, 148, 149], "modifi": [129, 135], "mosek": [58, 62, 97, 103], "mostinfeas": 18, "neam": 32, "necessari": 97, "node": [15, 113, 114], "notat": 143, "numer": 76, "object": [107, 134], "onc": 135, "open": 103, "optim": [24, 30, 53, 59, 60, 61, 62, 69, 93, 98, 105, 110, 134, 136, 137, 139, 141, 147], "optimist": 107, "option": [87, 103], "origin": 122, "osi": 67, "osicbc": 63, "osiclp": 64, "osicplex": 65, "osisymphoni": 66, "other": 103, "out": [119, 124], "over": 133, "own": [70, 111, 112, 113, 114, 137, 138, 146], "param": 43, "penalti": 92, "phase": 125, "plane": 4, "point": 107, "price": [91, 93, 120, 122, 123, 126, 127], "primal": 47, "problem": [88, 89, 90, 91, 92, 94, 95, 107, 109, 143, 149], "program": [69, 81, 93, 110, 128], "project": [100, 140], "pseudocost": 19, "qcqp": 97, "qp": 97, "quadexpr": 44, "read": 133, "refer": 104, "reformul": [88, 118, 122], "regard": 143, "region": 144, "relax": 107, "remov": [129, 135], "ren": 6, "restrict": 125, "robin": 103, "robust": [23, 24, 69, 93, 95, 98, 110, 147, 149], "row": 45, "rule": [15, 22, 111, 114], "save": 140, "score": 125, "select": [15, 114], "sens": 134, "separ": [143, 146], "set": 149, "sever": 135, "short": 97, "simpl": 138, "simpleround": 7, "solut": [46, 47, 140], "solv": [97, 109, 118, 140], "solver": [54, 68, 98, 103, 108], "sourc": 103, "stabil": [34, 119, 124, 144], "stage": [95, 149], "start": 98, "step": [107, 149], "strong": 125, "strongbranch": 20, "tabl": [98, 99, 103, 107, 125, 129, 133, 134, 135, 138, 140, 141, 143, 144, 149], "tempctr": 48, "tempvar": 49, "test": [87, 103], "thi": 98, "todo": [111, 112, 113, 114, 116, 117, 118, 119, 121, 126, 127, 137, 146], "toler": 76, "trust": 144, "tutori": 110, "two": [95, 149], "type": 81, "ubuntu": [85, 87], "uncertainti": 149, "underli": 136, "uniformlyrandom": 21, "unit": [87, 103], "univers": [74, 83, 138], "us": [103, 119, 125, 144], "user": [116, 141], "usercutcallback": [70, 73], "var": 50, "variabl": [133, 135], "variant": 125, "vartyp": 79, "wentg": 33, "what": 98, "why": 97, "wolf": [98, 118, 122], "worstbound": 14, "write": [117, 126, 127, 133, 145, 146], "xpress": 67, "your": [70, 100, 111, 112, 113, 114, 137, 138, 146]}}) \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..142e1a52 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,2 @@ + +https://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/BranchAndBound.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/BranchAndBoundCallback.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/BranchAndBoundCallbackFactory.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/cuts/KnapsackCover.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/cuts/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/heuristics/LocalBranching.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/heuristics/RENS.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/heuristics/SimpleRounding.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/heuristics/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/node-selection/BestBound.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/node-selection/BestEstimate.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/node-selection/BreadthFirst.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/node-selection/DepthFirst.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/node-selection/WorstBound.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/node-selection/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/FirstInfeasibleFound.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/LeastInfeasible.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/MostInfeasible.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/PseudoCost.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/StrongBranching.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/UniformlyRandom.htmlhttps://hlefebvr.github.io/idol/en/api/classes/branch-and-bound/variable-selection/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-and-constraint-generation/ColumnAndConstraintGeneration.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-and-constraint-generation/Optimizers_ColumnAndConstraintGeneration.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-and-constraint-generation/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/ArtificialCosts.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/DantzigWolfeDecomposition.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/FarkasPricing.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/IntegerMaster.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/Optimizers_DantzigWolfeDecomposition.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/stabilization/Neame.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/stabilization/Wentges.htmlhttps://hlefebvr.github.io/idol/en/api/classes/column-generation/stabilization/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Annotation.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Column.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Constant.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Ctr.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Env.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Expr.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/LinExpr.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Model.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Param.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/QuadExpr.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Row.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/SolutionDual.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/SolutionPrimal.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/TempCtr.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/TempVar.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/Var.htmlhttps://hlefebvr.github.io/idol/en/api/classes/common/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-bilevel/MibS.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-bilevel/Optimizers_MibS.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-bilevel/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/GLPK.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Gurobi.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/HiGHS.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Mosek.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Optimizers_GLPK.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Optimizers_Gurobi.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Optimizers_HiGHS.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Optimizers_Mosek.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Osi/OsiCbc.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Osi/OsiClp.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Osi/OsiCplex.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Osi/OsiSymphony.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/Osi/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/external-mip/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/index.htmlhttps://hlefebvr.github.io/idol/en/api/classes/universal-callbacks/Callback.htmlhttps://hlefebvr.github.io/idol/en/api/classes/universal-callbacks/CallbackFactory.htmlhttps://hlefebvr.github.io/idol/en/api/classes/universal-callbacks/LazyCutCallback.htmlhttps://hlefebvr.github.io/idol/en/api/classes/universal-callbacks/UserCutCallback.htmlhttps://hlefebvr.github.io/idol/en/api/classes/universal-callbacks/index.htmlhttps://hlefebvr.github.io/idol/en/api/constants/index.htmlhttps://hlefebvr.github.io/idol/en/api/constants/tolerances.htmlhttps://hlefebvr.github.io/idol/en/api/index.htmlhttps://hlefebvr.github.io/idol/en/api/types/common/CtrType.htmlhttps://hlefebvr.github.io/idol/en/api/types/common/VarType.htmlhttps://hlefebvr.github.io/idol/en/api/types/common/index.htmlhttps://hlefebvr.github.io/idol/en/api/types/index.htmlhttps://hlefebvr.github.io/idol/en/api/types/universal-callbacks/CallbackEvent.htmlhttps://hlefebvr.github.io/idol/en/api/types/universal-callbacks/index.htmlhttps://hlefebvr.github.io/idol/en/benchmark/index.htmlhttps://hlefebvr.github.io/idol/en/developer_guide/build-the-doc.htmlhttps://hlefebvr.github.io/idol/en/developer_guide/index.htmlhttps://hlefebvr.github.io/idol/en/developer_guide/tests.htmlhttps://hlefebvr.github.io/idol/en/examples/bilevel-kkt.htmlhttps://hlefebvr.github.io/idol/en/examples/bilevel-mibs.htmlhttps://hlefebvr.github.io/idol/en/examples/facility-location-problem.htmlhttps://hlefebvr.github.io/idol/en/examples/generalized-assignment-problem-bap.htmlhttps://hlefebvr.github.io/idol/en/examples/generalized-assignment-problem-penalty-bap.htmlhttps://hlefebvr.github.io/idol/en/examples/index.htmlhttps://hlefebvr.github.io/idol/en/examples/knapsack-problem.htmlhttps://hlefebvr.github.io/idol/en/examples/two-stage-robust-facility-location-problem.htmlhttps://hlefebvr.github.io/idol/en/faq/index.htmlhttps://hlefebvr.github.io/idol/en/faq/mosek-and-eigen.htmlhttps://hlefebvr.github.io/idol/en/index.htmlhttps://hlefebvr.github.io/idol/en/installation/global-installation/index.htmlhttps://hlefebvr.github.io/idol/en/installation/global-installation/linking.htmlhttps://hlefebvr.github.io/idol/en/installation/index.htmlhttps://hlefebvr.github.io/idol/en/installation/local_installation.htmlhttps://hlefebvr.github.io/idol/en/installation/options.htmlhttps://hlefebvr.github.io/idol/en/references.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/modeling/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/modeling/optimistic.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/wrappers/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/wrappers/mibs.htmlhttps://hlefebvr.github.io/idol/en/tutorials/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/create-callback.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/create-node.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/constraints.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/environment.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/expressions.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/models.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/objective-function.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/modeling/variables.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/optimizers/access-optimizer.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/optimizers/create-optimizer.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/optimizers/create-universal-callback.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/optimizers/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/optimizers/solving.htmlhttps://hlefebvr.github.io/idol/en/tutorials/mixed-integer-programming/optimizers/universal-callbacks.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/column-and-constraint-generation/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/column-and-constraint-generation/introduction.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/modeling/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/modeling/two-stage-robust.htmlhttps://hlefebvr.github.io/idol/en/genindex.htmlhttps://hlefebvr.github.io/idol/en/search.html \ No newline at end of file diff --git a/tutorials/bilevel-optimization/index.html b/tutorials/bilevel-optimization/index.html new file mode 100644 index 00000000..70e1fd7a --- /dev/null +++ b/tutorials/bilevel-optimization/index.html @@ -0,0 +1,155 @@ + + + + + + + + + Bilevel Optimization — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/modeling/index.html b/tutorials/bilevel-optimization/modeling/index.html new file mode 100644 index 00000000..47cbce36 --- /dev/null +++ b/tutorials/bilevel-optimization/modeling/index.html @@ -0,0 +1,145 @@ + + + + + + + + + Modeling — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/modeling/optimistic.html b/tutorials/bilevel-optimization/modeling/optimistic.html new file mode 100644 index 00000000..c408d4ea --- /dev/null +++ b/tutorials/bilevel-optimization/modeling/optimistic.html @@ -0,0 +1,261 @@ + + + + + + + + + Modeling an Optimistic Bilevel Problem — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/wrappers/index.html b/tutorials/bilevel-optimization/wrappers/index.html new file mode 100644 index 00000000..be80b717 --- /dev/null +++ b/tutorials/bilevel-optimization/wrappers/index.html @@ -0,0 +1,144 @@ + + + + + + + + + External Solvers — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/wrappers/mibs.html b/tutorials/bilevel-optimization/wrappers/mibs.html new file mode 100644 index 00000000..d97d8f7f --- /dev/null +++ b/tutorials/bilevel-optimization/wrappers/mibs.html @@ -0,0 +1,165 @@ + + + + + + + + + Solving Mixed-Integer Bilevel Problems with MibS — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/index.html b/tutorials/index.html new file mode 100644 index 00000000..a79031f2 --- /dev/null +++ b/tutorials/index.html @@ -0,0 +1,215 @@ + + + + + + + + + Tutorials — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.html b/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.html new file mode 100644 index 00000000..62b2a68d --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.html @@ -0,0 +1,151 @@ + + + + + + + + + Creating Your Own Branching Rule (Advanced) [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/create-callback.html b/tutorials/mixed-integer-programming/branch-and-bound/create-callback.html new file mode 100644 index 00000000..837e5563 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-callback.html @@ -0,0 +1,151 @@ + + + + + + + + + Create Your Own Callback (Advanced) [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.html b/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.html new file mode 100644 index 00000000..940806c2 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.html @@ -0,0 +1,151 @@ + + + + + + + + + Creating Your Own Node Selection Rule (Advanced) [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/create-node.html b/tutorials/mixed-integer-programming/branch-and-bound/create-node.html new file mode 100644 index 00000000..b0ad1ca4 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-node.html @@ -0,0 +1,151 @@ + + + + + + + + + Creating Your Own Node Class (Advanced) [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/index.html b/tutorials/mixed-integer-programming/branch-and-bound/index.html new file mode 100644 index 00000000..8bfb5299 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/index.html @@ -0,0 +1,160 @@ + + + + + + + + + Branch-and-Bound Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.html b/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.html new file mode 100644 index 00000000..938d08a7 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.html @@ -0,0 +1,151 @@ + + + + + + + + + Adding User Cuts and Lazy Constraints [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.html b/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.html new file mode 100644 index 00000000..3a51634d --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.html @@ -0,0 +1,151 @@ + + + + + + + + + Writing an LP-based Branch-and-Bound [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.html b/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.html new file mode 100644 index 00000000..b6cf0282 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.html @@ -0,0 +1,151 @@ + + + + + + + + + Modeling and Solving A Dantzig-Wolfe Reformulation [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.html b/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.html new file mode 100644 index 00000000..03248cca --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.html @@ -0,0 +1,151 @@ + + + + + + + + + Using In-Out Stabilization [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/index.html b/tutorials/mixed-integer-programming/dantzig-wolfe/index.html new file mode 100644 index 00000000..6b84b7c1 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/index.html @@ -0,0 +1,161 @@ + + + + + + + + + Column Generation and Branch-and-Price Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.html b/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.html new file mode 100644 index 00000000..9ca04b28 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.html @@ -0,0 +1,151 @@ + + + + + + + + + The Integer Master Heuristic [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.html b/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.html new file mode 100644 index 00000000..2a9d128e --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/old/dantzig_wolfe.html @@ -0,0 +1,365 @@ + + + + + + + + + Branch-and-Price 101 — idol + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.html b/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.html new file mode 100644 index 00000000..5bffe6de --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/old/heuristic.html @@ -0,0 +1,127 @@ + + + + + + + + + Heuristic Pricing (to come) — idol + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.html b/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.html new file mode 100644 index 00000000..e39bb8f7 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/old/stabilization.html @@ -0,0 +1,127 @@ + + + + + + + + + In-Out Stabilization (to come) — idol + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.html b/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.html new file mode 100644 index 00000000..a2c76a28 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.html @@ -0,0 +1,323 @@ + + + + + + + + + Using Strong Branching — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.html b/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.html new file mode 100644 index 00000000..aad35c1a --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.html @@ -0,0 +1,151 @@ + + + + + + + + + Writing A Branch-and-Cut-and-Price Algorithm [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.html b/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.html new file mode 100644 index 00000000..19ef6e60 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.html @@ -0,0 +1,151 @@ + + + + + + + + + Writing A Branch-and-Price Algorithm [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/index.html b/tutorials/mixed-integer-programming/index.html new file mode 100644 index 00000000..2cdcf9e3 --- /dev/null +++ b/tutorials/mixed-integer-programming/index.html @@ -0,0 +1,177 @@ + + + + + + + + + Mixed-Integer Programming — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/constraints.html b/tutorials/mixed-integer-programming/modeling/constraints.html new file mode 100644 index 00000000..4712015e --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/constraints.html @@ -0,0 +1,235 @@ + + + + + + + + + Constraints — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/environment.html b/tutorials/mixed-integer-programming/modeling/environment.html new file mode 100644 index 00000000..97522959 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/environment.html @@ -0,0 +1,155 @@ + + + + + + + + + The Environment — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/expressions.html b/tutorials/mixed-integer-programming/modeling/expressions.html new file mode 100644 index 00000000..ef38e5e4 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/expressions.html @@ -0,0 +1,212 @@ + + + + + + + + + Expressions — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/index.html b/tutorials/mixed-integer-programming/modeling/index.html new file mode 100644 index 00000000..c6be5545 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/index.html @@ -0,0 +1,164 @@ + + + + + + + + + Modeling — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/models.html b/tutorials/mixed-integer-programming/modeling/models.html new file mode 100644 index 00000000..29d07c92 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/models.html @@ -0,0 +1,220 @@ + + + + + + + + + Models — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/objective-function.html b/tutorials/mixed-integer-programming/modeling/objective-function.html new file mode 100644 index 00000000..5fd701a5 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/objective-function.html @@ -0,0 +1,184 @@ + + + + + + + + + Objective Functions — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/modeling/variables.html b/tutorials/mixed-integer-programming/modeling/variables.html new file mode 100644 index 00000000..24257a57 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/variables.html @@ -0,0 +1,268 @@ + + + + + + + + + Variables — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/access-optimizer.html b/tutorials/mixed-integer-programming/optimizers/access-optimizer.html new file mode 100644 index 00000000..bc442291 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/access-optimizer.html @@ -0,0 +1,171 @@ + + + + + + + + + Getting Access to The Underlying Optimizer — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/create-optimizer.html b/tutorials/mixed-integer-programming/optimizers/create-optimizer.html new file mode 100644 index 00000000..523ab10d --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/create-optimizer.html @@ -0,0 +1,150 @@ + + + + + + + + + Creating Your Own Optimizer (Advanced) [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/create-universal-callback.html b/tutorials/mixed-integer-programming/optimizers/create-universal-callback.html new file mode 100644 index 00000000..0d2df1f7 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/create-universal-callback.html @@ -0,0 +1,329 @@ + + + + + + + + + Creating Your Own Universal Callback — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/index.html b/tutorials/mixed-integer-programming/optimizers/index.html new file mode 100644 index 00000000..57194054 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/index.html @@ -0,0 +1,237 @@ + + + + + + + + + Optimizers — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/solving.html b/tutorials/mixed-integer-programming/optimizers/solving.html new file mode 100644 index 00000000..164305ce --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/solving.html @@ -0,0 +1,270 @@ + + + + + + + + + Solving a Model and Accessing the Solution — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/universal-callbacks.html b/tutorials/mixed-integer-programming/optimizers/universal-callbacks.html new file mode 100644 index 00000000..aa216620 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/universal-callbacks.html @@ -0,0 +1,349 @@ + + + + + + + + + Adding User Cuts and Lazy Constraints — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/column-and-constraint-generation/index.html b/tutorials/robust-optimization/column-and-constraint-generation/index.html new file mode 100644 index 00000000..2130fd59 --- /dev/null +++ b/tutorials/robust-optimization/column-and-constraint-generation/index.html @@ -0,0 +1,151 @@ + + + + + + + + + Column-and-Constraint-Generation Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/column-and-constraint-generation/introduction.html b/tutorials/robust-optimization/column-and-constraint-generation/introduction.html new file mode 100644 index 00000000..58306846 --- /dev/null +++ b/tutorials/robust-optimization/column-and-constraint-generation/introduction.html @@ -0,0 +1,267 @@ + + + + + + + + + Introduction — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.html b/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.html new file mode 100644 index 00000000..3b266860 --- /dev/null +++ b/tutorials/robust-optimization/column-and-constraint-generation/trust-region-stabilization.html @@ -0,0 +1,251 @@ + + + + + + + + + Using Trust Region Stabilization — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.html b/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.html new file mode 100644 index 00000000..6e5a722e --- /dev/null +++ b/tutorials/robust-optimization/column-and-constraint-generation/write-ccg.html @@ -0,0 +1,171 @@ + + + + + + + + + Writing a Column-and-Constraint-Generation Algorithm — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.html b/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.html new file mode 100644 index 00000000..9651b157 --- /dev/null +++ b/tutorials/robust-optimization/column-and-constraint-generation/writing-separator.html @@ -0,0 +1,147 @@ + + + + + + + + + Writing Your Own Separator (Advanced) [TODO] — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/index.html b/tutorials/robust-optimization/index.html new file mode 100644 index 00000000..e68889a6 --- /dev/null +++ b/tutorials/robust-optimization/index.html @@ -0,0 +1,165 @@ + + + + + + + + + Robust Optimization — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/modeling/index.html b/tutorials/robust-optimization/modeling/index.html new file mode 100644 index 00000000..40379546 --- /dev/null +++ b/tutorials/robust-optimization/modeling/index.html @@ -0,0 +1,145 @@ + + + + + + + + + Modeling — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/modeling/two-stage-robust.html b/tutorials/robust-optimization/modeling/two-stage-robust.html new file mode 100644 index 00000000..a21de9ce --- /dev/null +++ b/tutorials/robust-optimization/modeling/two-stage-robust.html @@ -0,0 +1,323 @@ + + + + + + + + + Modeling a Two-Stage Robust Problem — idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file