From c61ad499a1599a221294d25271d9beed09b26c4f Mon Sep 17 00:00:00 2001 From: hlefebvr Date: Tue, 28 Jan 2025 11:47:20 +0000 Subject: [PATCH] deploy: 7f26e616ce65d52261aade6189bd4e1aef546011 --- .buildinfo | 4 + .../api/bilevel/external-solvers/MibS.doctree | Bin 0 -> 135516 bytes .../external-solvers/Optimizers_MibS.doctree | Bin 0 -> 3677 bytes .doctrees/api/bilevel/index.doctree | Bin 0 -> 4211 bytes .../api/bilevel/modeling/Description.doctree | Bin 0 -> 78977 bytes .../api/bilevel/single-level/KKT.doctree | Bin 0 -> 139794 bytes .../single-level/Optimizers_KKT.doctree | Bin 0 -> 155230 bytes .../Optimizers_StrongDuality.doctree | Bin 0 -> 156127 bytes .../single-level/StrongDuality.doctree | Bin 0 -> 132778 bytes .../api/classes/external-bilevel/MibS.doctree | Bin 0 -> 135342 bytes .../external-bilevel/Optimizers_MibS.doctree | Bin 0 -> 3467 bytes .../classes/external-bilevel/index.doctree | Bin 0 -> 2950 bytes .doctrees/api/classes/index.doctree | Bin 0 -> 4447 bytes .../universal-callbacks/Callback.doctree | Bin 0 -> 58150 bytes .../CallbackFactory.doctree | Bin 0 -> 15480 bytes .../LazyCutCallback.doctree | Bin 0 -> 37030 bytes .../UserCutCallback.doctree | Bin 0 -> 28590 bytes .../classes/universal-callbacks/index.doctree | Bin 0 -> 3056 bytes .doctrees/api/index.doctree | Bin 0 -> 4692 bytes .../branch-and-bound/BranchAndBound.doctree | Bin 0 -> 251347 bytes .../BranchAndBoundCallback.doctree | Bin 0 -> 77193 bytes .../BranchAndBoundCallbackFactory.doctree | Bin 0 -> 18603 bytes .../cuts/KnapsackCover.doctree | Bin 0 -> 38730 bytes .../branch-and-bound/cuts/index.doctree | Bin 0 -> 2939 bytes .../heuristics/LocalBranching.doctree | Bin 0 -> 26483 bytes .../branch-and-bound/heuristics/RENS.doctree | Bin 0 -> 26155 bytes .../heuristics/SimpleRounding.doctree | Bin 0 -> 18793 bytes .../branch-and-bound/heuristics/index.doctree | Bin 0 -> 3070 bytes .../node-selection/BestBound.doctree | Bin 0 -> 23302 bytes .../node-selection/BestEstimate.doctree | Bin 0 -> 24480 bytes .../node-selection/BreadthFirst.doctree | Bin 0 -> 23527 bytes .../node-selection/DepthFirst.doctree | Bin 0 -> 23393 bytes .../node-selection/WorstBound.doctree | Bin 0 -> 23393 bytes .../node-selection/index.doctree | Bin 0 -> 3267 bytes .../FirstInfeasibleFound.doctree | Bin 0 -> 42925 bytes .../LeastInfeasible.doctree | Bin 0 -> 42355 bytes .../variable-selection/MostInfeasible.doctree | Bin 0 -> 42241 bytes .../variable-selection/PseudoCost.doctree | Bin 0 -> 41785 bytes .../StrongBranching.doctree | Bin 0 -> 57469 bytes .../UniformlyRandom.doctree | Bin 0 -> 45541 bytes .../variable-selection/index.doctree | Bin 0 -> 3373 bytes .../column-generation/ArtificialCosts.doctree | Bin 0 -> 50888 bytes .../DantzigWolfeDecomposition.doctree | Bin 0 -> 164114 bytes .../column-generation/FarkasPricing.doctree | Bin 0 -> 37820 bytes .../column-generation/IntegerMaster.doctree | Bin 0 -> 77469 bytes ...timizers_DantzigWolfeDecomposition.doctree | Bin 0 -> 185112 bytes .../stabilization/Neame.doctree | Bin 0 -> 35715 bytes .../stabilization/Wentges.doctree | Bin 0 -> 35909 bytes .../stabilization/index.doctree | Bin 0 -> 3024 bytes .../external-solvers/GLPK.doctree | Bin 0 -> 130835 bytes .../external-solvers/Gurobi.doctree | Bin 0 -> 150285 bytes .../external-solvers/HiGHS.doctree | Bin 0 -> 128568 bytes .../external-solvers/Mosek.doctree | Bin 0 -> 145063 bytes .../external-solvers/Optimizers_GLPK.doctree | Bin 0 -> 127797 bytes .../Optimizers_Gurobi.doctree | Bin 0 -> 159777 bytes .../external-solvers/Optimizers_HiGHS.doctree | Bin 0 -> 3621 bytes .../external-solvers/Optimizers_Mosek.doctree | Bin 0 -> 3621 bytes .../external-solvers/Osi.doctree | Bin 0 -> 138195 bytes .../external-solvers/Osi/OsiCbc.doctree | Bin 0 -> 114536 bytes .../external-solvers/Osi/OsiClp.doctree | Bin 0 -> 114536 bytes .../external-solvers/Osi/OsiCplex.doctree | Bin 0 -> 114826 bytes .../external-solvers/Osi/OsiSymphony.doctree | Bin 0 -> 115340 bytes .doctrees/api/mixed-integer/index.doctree | Bin 0 -> 7862 bytes .../api/mixed-integer/misc/CtrType.doctree | Bin 0 -> 10670 bytes .../api/mixed-integer/misc/VarType.doctree | Bin 0 -> 10649 bytes .../api/mixed-integer/misc/tolerances.doctree | Bin 0 -> 70715 bytes .../mixed-integer/modeling/Annotation.doctree | Bin 0 -> 50844 bytes .../api/mixed-integer/modeling/Ctr.doctree | Bin 0 -> 82328 bytes .../api/mixed-integer/modeling/Dim.doctree | Bin 0 -> 18594 bytes .../api/mixed-integer/modeling/Env.doctree | Bin 0 -> 20990 bytes .../api/mixed-integer/modeling/Expr.doctree | Bin 0 -> 71344 bytes .../mixed-integer/modeling/LinExpr.doctree | Bin 0 -> 146647 bytes .../api/mixed-integer/modeling/Model.doctree | Bin 0 -> 377299 bytes .../api/mixed-integer/modeling/Point.doctree | Bin 0 -> 126581 bytes .../api/mixed-integer/modeling/QCtr.doctree | Bin 0 -> 68525 bytes .../mixed-integer/modeling/QuadExpr.doctree | Bin 0 -> 182974 bytes .../mixed-integer/modeling/TempCtr.doctree | Bin 0 -> 58055 bytes .../mixed-integer/modeling/TempQCtr.doctree | Bin 0 -> 40047 bytes .../mixed-integer/modeling/TempVar.doctree | Bin 0 -> 65823 bytes .../api/mixed-integer/modeling/Var.doctree | Bin 0 -> 106507 bytes .../padm/Optimizers_PADM.doctree | Bin 0 -> 177172 bytes .doctrees/api/mixed-integer/padm/PADM.doctree | Bin 0 -> 149516 bytes .doctrees/api/robust/index.doctree | Bin 0 -> 3052 bytes .../api/robust/modeling/Description.doctree | Bin 0 -> 91278 bytes .doctrees/api/types/index.doctree | Bin 0 -> 3536 bytes .../universal-callbacks/CallbackEvent.doctree | Bin 0 -> 14241 bytes .../types/universal-callbacks/index.doctree | Bin 0 -> 2888 bytes .doctrees/benchmark/index.doctree | Bin 0 -> 4042 bytes .../developer_guide/build-the-doc.doctree | Bin 0 -> 13481 bytes .doctrees/developer_guide/index.doctree | Bin 0 -> 7863 bytes .doctrees/developer_guide/tests.doctree | Bin 0 -> 13105 bytes .doctrees/environment.pickle | Bin 0 -> 4290048 bytes .doctrees/examples/bilevel-kkt.doctree | Bin 0 -> 11225 bytes .doctrees/examples/bilevel-mibs.doctree | Bin 0 -> 9672 bytes .../examples/bilevel-pessimistic.doctree | Bin 0 -> 15258 bytes .../facility-location-problem.doctree | Bin 0 -> 19221 bytes ...generalized-assignment-problem-bap.doctree | Bin 0 -> 17928 bytes ...zed-assignment-problem-penalty-bap.doctree | Bin 0 -> 16558 bytes .doctrees/examples/index.doctree | Bin 0 -> 5013 bytes .doctrees/examples/knapsack-problem.doctree | Bin 0 -> 9854 bytes .doctrees/examples/robust-adr.doctree | Bin 0 -> 19145 bytes .doctrees/examples/robust-determistic.doctree | Bin 0 -> 20510 bytes ...e-robust-facility-location-problem.doctree | Bin 0 -> 11508 bytes .doctrees/faq/gap.doctree | Bin 0 -> 4713 bytes .doctrees/faq/index.doctree | Bin 0 -> 3506 bytes .doctrees/faq/mosek-and-eigen.doctree | Bin 0 -> 14178 bytes .doctrees/index.doctree | Bin 0 -> 21410 bytes .../global-installation/index.doctree | Bin 0 -> 16106 bytes .../global-installation/linking.doctree | Bin 0 -> 7405 bytes .doctrees/installation/index.doctree | Bin 0 -> 7990 bytes .../installation/local_installation.doctree | Bin 0 -> 11782 bytes .doctrees/installation/options.doctree | Bin 0 -> 45848 bytes .doctrees/references.doctree | Bin 0 -> 3863 bytes .../bilevel-optimization/files.doctree | Bin 0 -> 11882 bytes .../bilevel-optimization/index.doctree | Bin 0 -> 9924 bytes .../bilevel-optimization/kkt.doctree | Bin 0 -> 27136 bytes .../bilevel-optimization/mibs.doctree | Bin 0 -> 13210 bytes .../bilevel-optimization/modeling.doctree | Bin 0 -> 19650 bytes .../bilevel-optimization/pessimistic.doctree | Bin 0 -> 18178 bytes .doctrees/tutorials/index.doctree | Bin 0 -> 5227 bytes .../create-branching-rule.doctree | Bin 0 -> 2959 bytes .../branch-and-bound/create-callback.doctree | Bin 0 -> 3440 bytes .../create-node-selection-rule.doctree | Bin 0 -> 2984 bytes .../branch-and-bound/create-node.doctree | Bin 0 -> 2933 bytes .../branch-and-bound/index.doctree | Bin 0 -> 3297 bytes .../user-cuts-lazy-constraints.doctree | Bin 0 -> 2942 bytes .../write-branch-and-bound.doctree | Bin 0 -> 2934 bytes .../dantzig-wolfe/dantzig-wolfe.doctree | Bin 0 -> 37499 bytes .../in-out-stabilization.doctree | Bin 0 -> 2889 bytes .../dantzig-wolfe/index.doctree | Bin 0 -> 9350 bytes .../dantzig-wolfe/integer-master.doctree | Bin 0 -> 2891 bytes .../dantzig-wolfe/strong-branching.doctree | Bin 0 -> 41597 bytes .../writing-branch-and-cut-and-price.doctree | Bin 0 -> 2973 bytes .../writing-branch-and-price.doctree | Bin 0 -> 13491 bytes .../mixed-integer-programming/index.doctree | Bin 0 -> 10412 bytes .../modeling/constraints.doctree | Bin 0 -> 29330 bytes .../modeling/environment.doctree | Bin 0 -> 4579 bytes .../modeling/expressions.doctree | Bin 0 -> 14619 bytes .../modeling/index.doctree | Bin 0 -> 6190 bytes .../modeling/models.doctree | Bin 0 -> 15501 bytes .../modeling/objective-function.doctree | Bin 0 -> 11561 bytes .../modeling/variables.doctree | Bin 0 -> 40159 bytes .../optimizers/access-optimizer.doctree | Bin 0 -> 7337 bytes .../optimizers/create-optimizer.doctree | Bin 0 -> 2928 bytes .../create-universal-callback.doctree | Bin 0 -> 30873 bytes .../optimizers/index.doctree | Bin 0 -> 4321 bytes .../optimizers/optimizers.doctree | Bin 0 -> 18793 bytes .../optimizers/solving.doctree | Bin 0 -> 34575 bytes .../optimizers/universal-callbacks.doctree | Bin 0 -> 45029 bytes .../robust-optimization/index.doctree | Bin 0 -> 3643 bytes .../single-stage/index.doctree | Bin 0 -> 3636 bytes .../index.doctree | Bin 0 -> 3291 bytes .../introduction.doctree | Bin 0 -> 39551 bytes .../trust-region-stabilization.doctree | Bin 0 -> 19961 bytes .../write-ccg.doctree | Bin 0 -> 11615 bytes .../writing-separator.doctree | Bin 0 -> 3474 bytes .../two-stage/index.doctree | Bin 0 -> 3577 bytes .../two-stage/modeling.doctree | Bin 0 -> 36321 bytes .nojekyll | 0 _images/ecdf-gap.png | Bin 0 -> 71638 bytes .../api/bilevel/external-solvers/MibS.rst.txt | 7 + .../external-solvers/Optimizers_MibS.rst.txt | 7 + _sources/api/bilevel/index.rst.txt | 29 + .../api/bilevel/modeling/Description.rst.txt | 7 + _sources/api/bilevel/single-level/KKT.rst.txt | 7 + .../single-level/Optimizers_KKT.rst.txt | 7 + .../Optimizers_StrongDuality.rst.txt | 7 + .../single-level/StrongDuality.rst.txt | 7 + .../api/classes/external-bilevel/MibS.rst.txt | 4 + .../external-bilevel/Optimizers_MibS.rst.txt | 4 + .../classes/external-bilevel/index.rst.txt | 8 + _sources/api/classes/index.rst.txt | 36 + .../universal-callbacks/Callback.rst.txt | 85 + .../CallbackFactory.rst.txt | 7 + .../LazyCutCallback.rst.txt | 60 + .../UserCutCallback.rst.txt | 6 + .../classes/universal-callbacks/index.rst.txt | 8 + _sources/api/index.rst.txt | 31 + .../branch-and-bound/BranchAndBound.rst.txt | 34 + .../BranchAndBoundCallback.rst.txt | 77 + .../BranchAndBoundCallbackFactory.rst.txt | 8 + .../cuts/KnapsackCover.rst.txt | 7 + .../branch-and-bound/cuts/index.rst.txt | 10 + .../heuristics/LocalBranching.rst.txt | 7 + .../branch-and-bound/heuristics/RENS.rst.txt | 7 + .../heuristics/SimpleRounding.rst.txt | 7 + .../branch-and-bound/heuristics/index.rst.txt | 10 + .../node-selection/BestBound.rst.txt | 7 + .../node-selection/BestEstimate.rst.txt | 9 + .../node-selection/BreadthFirst.rst.txt | 7 + .../node-selection/DepthFirst.rst.txt | 7 + .../node-selection/WorstBound.rst.txt | 7 + .../node-selection/index.rst.txt | 10 + .../FirstInfeasibleFound.rst.txt | 7 + .../LeastInfeasible.rst.txt | 7 + .../variable-selection/MostInfeasible.rst.txt | 7 + .../variable-selection/PseudoCost.rst.txt | 7 + .../StrongBranching.rst.txt | 7 + .../UniformlyRandom.rst.txt | 7 + .../variable-selection/index.rst.txt | 10 + .../column-generation/ArtificialCosts.rst.txt | 7 + .../DantzigWolfeDecomposition.rst.txt | 12 + .../column-generation/FarkasPricing.rst.txt | 7 + .../column-generation/IntegerMaster.rst.txt | 12 + ...timizers_DantzigWolfeDecomposition.rst.txt | 7 + .../stabilization/Neame.rst.txt | 7 + .../stabilization/Wentges.rst.txt | 7 + .../stabilization/index.rst.txt | 8 + .../external-solvers/GLPK.rst.txt | 9 + .../external-solvers/Gurobi.rst.txt | 9 + .../external-solvers/HiGHS.rst.txt | 7 + .../external-solvers/Mosek.rst.txt | 7 + .../external-solvers/Optimizers_GLPK.rst.txt | 9 + .../Optimizers_Gurobi.rst.txt | 7 + .../external-solvers/Optimizers_HiGHS.rst.txt | 7 + .../external-solvers/Optimizers_Mosek.rst.txt | 7 + .../external-solvers/Osi.rst.txt | 40 + .../external-solvers/Osi/OsiCbc.rst.txt | 7 + .../external-solvers/Osi/OsiClp.rst.txt | 7 + .../external-solvers/Osi/OsiCplex.rst.txt | 7 + .../external-solvers/Osi/OsiSymphony.rst.txt | 7 + _sources/api/mixed-integer/index.rst.txt | 64 + .../api/mixed-integer/misc/CtrType.rst.txt | 6 + .../api/mixed-integer/misc/VarType.rst.txt | 6 + .../api/mixed-integer/misc/tolerances.rst.txt | 6 + .../mixed-integer/modeling/Annotation.rst.txt | 30 + .../api/mixed-integer/modeling/Ctr.rst.txt | 9 + .../api/mixed-integer/modeling/Dim.rst.txt | 9 + .../api/mixed-integer/modeling/Env.rst.txt | 9 + .../api/mixed-integer/modeling/Expr.rst.txt | 9 + .../mixed-integer/modeling/LinExpr.rst.txt | 27 + .../api/mixed-integer/modeling/Model.rst.txt | 9 + .../api/mixed-integer/modeling/Point.rst.txt | 6 + .../api/mixed-integer/modeling/QCtr.rst.txt | 9 + .../mixed-integer/modeling/QuadExpr.rst.txt | 9 + .../mixed-integer/modeling/TempCtr.rst.txt | 9 + .../mixed-integer/modeling/TempQCtr.rst.txt | 9 + .../mixed-integer/modeling/TempVar.rst.txt | 9 + .../api/mixed-integer/modeling/Var.rst.txt | 9 + .../padm/Optimizers_PADM.rst.txt | 9 + _sources/api/mixed-integer/padm/PADM.rst.txt | 9 + _sources/api/robust/index.rst.txt | 11 + .../api/robust/modeling/Description.rst.txt | 7 + _sources/api/types/index.rst.txt | 16 + .../universal-callbacks/CallbackEvent.rst.txt | 6 + .../types/universal-callbacks/index.rst.txt | 9 + _sources/benchmark/index.rst.txt | 14 + .../developer_guide/build-the-doc.rst.txt | 61 + _sources/developer_guide/index.rst.txt | 33 + _sources/developer_guide/tests.rst.txt | 91 + _sources/examples/bilevel-kkt.rst.txt | 37 + _sources/examples/bilevel-mibs.rst.txt | 34 + _sources/examples/bilevel-pessimistic.rst.txt | 67 + .../facility-location-problem.rst.txt | 47 + ...generalized-assignment-problem-bap.rst.txt | 40 + ...zed-assignment-problem-penalty-bap.rst.txt | 43 + _sources/examples/index.rst.txt | 38 + _sources/examples/knapsack-problem.rst.txt | 40 + _sources/examples/robust-adr.rst.txt | 47 + _sources/examples/robust-determistic.rst.txt | 65 + ...e-robust-facility-location-problem.rst.txt | 49 + _sources/faq/gap.rst.txt | 24 + _sources/faq/index.rst.txt | 10 + _sources/faq/mosek-and-eigen.rst.txt | 83 + _sources/index.rst.txt | 161 ++ .../global-installation/index.rst.txt | 102 + .../global-installation/linking.rst.txt | 53 + _sources/installation/index.rst.txt | 41 + .../installation/local_installation.rst.txt | 81 + _sources/installation/options.rst.txt | 232 ++ _sources/references.rst.txt | 7 + .../bilevel-optimization/files.rst.txt | 57 + .../bilevel-optimization/index.rst.txt | 72 + .../bilevel-optimization/kkt.rst.txt | 198 ++ .../bilevel-optimization/mibs.rst.txt | 66 + .../bilevel-optimization/modeling.rst.txt | 136 + .../bilevel-optimization/pessimistic.rst.txt | 104 + _sources/tutorials/index.rst.txt | 38 + .../create-branching-rule.rst.txt | 6 + .../branch-and-bound/create-callback.rst.txt | 8 + .../create-node-selection-rule.rst.txt | 6 + .../branch-and-bound/create-node.rst.txt | 6 + .../branch-and-bound/index.rst.txt | 12 + .../user-cuts-lazy-constraints.rst.txt | 6 + .../write-branch-and-bound.rst.txt | 6 + .../dantzig-wolfe/dantzig-wolfe.rst.txt | 217 ++ .../in-out-stabilization.rst.txt | 6 + .../dantzig-wolfe/index.rst.txt | 31 + .../dantzig-wolfe/integer-master.rst.txt | 6 + .../dantzig-wolfe/strong-branching.rst.txt | 198 ++ .../writing-branch-and-cut-and-price.rst.txt | 6 + .../writing-branch-and-price.rst.txt | 81 + .../mixed-integer-programming/index.rst.txt | 41 + .../modeling/constraints.rst.txt | 141 + .../modeling/environment.rst.txt | 14 + .../modeling/expressions.rst.txt | 79 + .../modeling/index.rst.txt | 29 + .../modeling/models.rst.txt | 90 + .../modeling/objective-function.rst.txt | 57 + .../modeling/variables.rst.txt | 201 ++ .../optimizers/access-optimizer.rst.txt | 37 + .../optimizers/create-optimizer.rst.txt | 6 + .../create-universal-callback.rst.txt | 238 ++ .../optimizers/index.rst.txt | 23 + .../optimizers/optimizers.rst.txt | 122 + .../optimizers/solving.rst.txt | 189 ++ .../optimizers/universal-callbacks.rst.txt | 257 ++ .../robust-optimization/index.rst.txt | 15 + .../single-stage/index.rst.txt | 14 + .../index.rst.txt | 10 + .../introduction.rst.txt | 165 ++ .../trust-region-stabilization.rst.txt | 132 + .../write-ccg.rst.txt | 49 + .../writing-separator.rst.txt | 8 + .../two-stage/index.rst.txt | 13 + .../two-stage/modeling.rst.txt | 219 ++ _static/basic.css | 914 ++++++ _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 + _static/copybutton.js | 248 ++ _static/copybutton_funcs.js | 73 + _static/design.css | 273 ++ _static/doctools.js | 149 + _static/documentation_options.js | 13 + _static/ecdf-gap.png | Bin 0 -> 71638 bytes _static/file.png | Bin 0 -> 286 bytes _static/graphviz.css | 12 + _static/language_data.js | 192 ++ _static/minus.png | Bin 0 -> 90 bytes _static/plus.png | Bin 0 -> 90 bytes _static/pseudocode-js/pseudocode.min.css | 1 + _static/pseudocode-js/pseudocode.min.js | 1 + _static/pygments.css | 75 + _static/robust.png | Bin 0 -> 127986 bytes _static/searchtools.js | 632 +++++ _static/sphinx_highlight.js | 154 + _static/theme.css | 1 + _static/theme.js | 38 + api/bilevel/external-solvers/MibS.html | 580 ++++ .../external-solvers/Optimizers_MibS.html | 246 ++ api/bilevel/index.html | 265 ++ api/bilevel/modeling/Description.html | 350 +++ api/bilevel/single-level/KKT.html | 578 ++++ api/bilevel/single-level/Optimizers_KKT.html | 495 ++++ .../Optimizers_StrongDuality.html | 495 ++++ api/bilevel/single-level/StrongDuality.html | 568 ++++ api/classes/external-bilevel/MibS.html | 555 ++++ .../external-bilevel/Optimizers_MibS.html | 221 ++ api/classes/external-bilevel/index.html | 223 ++ api/classes/index.html | 249 ++ api/classes/universal-callbacks/Callback.html | 406 +++ .../universal-callbacks/CallbackFactory.html | 241 ++ .../universal-callbacks/LazyCutCallback.html | 297 ++ .../universal-callbacks/UserCutCallback.html | 258 ++ api/classes/universal-callbacks/index.html | 226 ++ api/index.html | 355 +++ .../branch-and-bound/BranchAndBound.html | 803 ++++++ .../BranchAndBoundCallback.html | 457 +++ .../BranchAndBoundCallbackFactory.html | 266 ++ .../branch-and-bound/cuts/KnapsackCover.html | 295 ++ .../branch-and-bound/cuts/index.html | 244 ++ .../heuristics/LocalBranching.html | 285 ++ .../branch-and-bound/heuristics/RENS.html | 285 ++ .../heuristics/SimpleRounding.html | 272 ++ .../branch-and-bound/heuristics/index.html | 246 ++ .../node-selection/BestBound.html | 272 ++ .../node-selection/BestEstimate.html | 273 ++ .../node-selection/BreadthFirst.html | 272 ++ .../node-selection/DepthFirst.html | 272 ++ .../node-selection/WorstBound.html | 272 ++ .../node-selection/index.html | 248 ++ .../FirstInfeasibleFound.html | 295 ++ .../variable-selection/LeastInfeasible.html | 295 ++ .../variable-selection/MostInfeasible.html | 295 ++ .../variable-selection/PseudoCost.html | 295 ++ .../variable-selection/StrongBranching.html | 315 +++ .../variable-selection/UniformlyRandom.html | 300 ++ .../variable-selection/index.html | 249 ++ .../column-generation/ArtificialCosts.html | 318 +++ .../DantzigWolfeDecomposition.html | 610 ++++ .../column-generation/FarkasPricing.html | 298 ++ .../column-generation/IntegerMaster.html | 358 +++ .../Optimizers_DantzigWolfeDecomposition.html | 528 ++++ .../stabilization/Neame.html | 295 ++ .../stabilization/Wentges.html | 295 ++ .../stabilization/index.html | 245 ++ api/mixed-integer/external-solvers/GLPK.html | 578 ++++ .../external-solvers/Gurobi.html | 608 ++++ api/mixed-integer/external-solvers/HiGHS.html | 578 ++++ api/mixed-integer/external-solvers/Mosek.html | 598 ++++ .../external-solvers/Optimizers_GLPK.html | 458 +++ .../external-solvers/Optimizers_Gurobi.html | 516 ++++ .../external-solvers/Optimizers_HiGHS.html | 246 ++ .../external-solvers/Optimizers_Mosek.html | 246 ++ api/mixed-integer/external-solvers/Osi.html | 610 ++++ .../external-solvers/Osi/OsiCbc.html | 555 ++++ .../external-solvers/Osi/OsiClp.html | 555 ++++ .../external-solvers/Osi/OsiCplex.html | 555 ++++ .../external-solvers/Osi/OsiSymphony.html | 555 ++++ api/mixed-integer/index.html | 321 +++ api/mixed-integer/misc/CtrType.html | 260 ++ api/mixed-integer/misc/VarType.html | 260 ++ api/mixed-integer/misc/tolerances.html | 380 +++ api/mixed-integer/modeling/Annotation.html | 342 +++ api/mixed-integer/modeling/Ctr.html | 427 +++ api/mixed-integer/modeling/Dim.html | 260 ++ api/mixed-integer/modeling/Env.html | 308 ++ api/mixed-integer/modeling/Expr.html | 358 +++ api/mixed-integer/modeling/LinExpr.html | 461 +++ api/mixed-integer/modeling/Model.html | 785 ++++++ api/mixed-integer/modeling/Point.html | 445 +++ api/mixed-integer/modeling/QCtr.html | 360 +++ api/mixed-integer/modeling/QuadExpr.html | 511 ++++ api/mixed-integer/modeling/TempCtr.html | 380 +++ api/mixed-integer/modeling/TempQCtr.html | 305 ++ api/mixed-integer/modeling/TempVar.html | 424 +++ api/mixed-integer/modeling/Var.html | 455 +++ api/mixed-integer/padm/Optimizers_PADM.html | 528 ++++ api/mixed-integer/padm/PADM.html | 600 ++++ api/robust/index.html | 245 ++ api/robust/modeling/Description.html | 363 +++ api/types/index.html | 228 ++ .../universal-callbacks/CallbackEvent.html | 248 ++ api/types/universal-callbacks/index.html | 222 ++ benchmark/index.html | 249 ++ developer_guide/build-the-doc.html | 282 ++ developer_guide/index.html | 275 ++ developer_guide/tests.html | 303 ++ examples/bilevel-kkt.html | 342 +++ examples/bilevel-mibs.html | 327 +++ examples/bilevel-pessimistic.html | 357 +++ examples/facility-location-problem.html | 387 +++ .../generalized-assignment-problem-bap.html | 361 +++ ...alized-assignment-problem-penalty-bap.html | 362 +++ examples/index.html | 276 ++ examples/knapsack-problem.html | 312 +++ examples/robust-adr.html | 373 +++ examples/robust-determistic.html | 383 +++ ...tage-robust-facility-location-problem.html | 248 ++ faq/gap.html | 250 ++ faq/index.html | 248 ++ faq/mosek-and-eigen.html | 289 ++ genindex.html | 2483 +++++++++++++++++ index.html | 369 +++ installation/global-installation/index.html | 311 +++ installation/global-installation/linking.html | 277 ++ installation/index.html | 265 ++ installation/local_installation.html | 301 ++ installation/options.html | 438 +++ objects.inv | Bin 0 -> 49368 bytes references.html | 305 ++ search.html | 245 ++ searchindex.js | 1 + sitemap.xml | 2 + tutorials/bilevel-optimization/files.html | 293 ++ tutorials/bilevel-optimization/index.html | 289 ++ tutorials/bilevel-optimization/kkt.html | 408 +++ tutorials/bilevel-optimization/mibs.html | 296 ++ tutorials/bilevel-optimization/modeling.html | 354 +++ .../bilevel-optimization/pessimistic.html | 318 +++ tutorials/index.html | 318 +++ .../create-branching-rule.html | 221 ++ .../branch-and-bound/create-callback.html | 221 ++ .../create-node-selection-rule.html | 221 ++ .../branch-and-bound/create-node.html | 221 ++ .../branch-and-bound/index.html | 248 ++ .../user-cuts-lazy-constraints.html | 221 ++ .../write-branch-and-bound.html | 245 ++ .../dantzig-wolfe/dantzig-wolfe.html | 432 +++ .../dantzig-wolfe/in-out-stabilization.html | 221 ++ .../dantzig-wolfe/index.html | 263 ++ .../dantzig-wolfe/integer-master.html | 221 ++ .../dantzig-wolfe/strong-branching.html | 417 +++ .../writing-branch-and-cut-and-price.html | 221 ++ .../writing-branch-and-price.html | 305 ++ .../mixed-integer-programming/index.html | 290 ++ .../modeling/constraints.html | 370 +++ .../modeling/environment.html | 249 ++ .../modeling/expressions.html | 309 ++ .../modeling/index.html | 257 ++ .../modeling/models.html | 317 +++ .../modeling/objective-function.html | 291 ++ .../modeling/variables.html | 424 +++ .../optimizers/access-optimizer.html | 271 ++ .../optimizers/create-optimizer.html | 221 ++ .../optimizers/create-universal-callback.html | 449 +++ .../optimizers/index.html | 252 ++ .../optimizers/optimizers.html | 340 +++ .../optimizers/solving.html | 443 +++ .../optimizers/universal-callbacks.html | 446 +++ tutorials/robust-optimization/index.html | 264 ++ .../single-stage/index.html | 245 ++ .../index.html | 249 ++ .../introduction.html | 367 +++ .../trust-region-stabilization.html | 351 +++ .../write-ccg.html | 279 ++ .../writing-separator.html | 221 ++ .../robust-optimization/two-stage/index.html | 270 ++ .../two-stage/modeling.html | 424 +++ 501 files changed, 65575 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/api/bilevel/external-solvers/MibS.doctree create mode 100644 .doctrees/api/bilevel/external-solvers/Optimizers_MibS.doctree create mode 100644 .doctrees/api/bilevel/index.doctree create mode 100644 .doctrees/api/bilevel/modeling/Description.doctree create mode 100644 .doctrees/api/bilevel/single-level/KKT.doctree create mode 100644 .doctrees/api/bilevel/single-level/Optimizers_KKT.doctree create mode 100644 .doctrees/api/bilevel/single-level/Optimizers_StrongDuality.doctree create mode 100644 .doctrees/api/bilevel/single-level/StrongDuality.doctree create mode 100644 .doctrees/api/classes/external-bilevel/MibS.doctree create mode 100644 .doctrees/api/classes/external-bilevel/Optimizers_MibS.doctree create mode 100644 .doctrees/api/classes/external-bilevel/index.doctree create mode 100644 .doctrees/api/classes/index.doctree create mode 100644 .doctrees/api/classes/universal-callbacks/Callback.doctree create mode 100644 .doctrees/api/classes/universal-callbacks/CallbackFactory.doctree create mode 100644 .doctrees/api/classes/universal-callbacks/LazyCutCallback.doctree create mode 100644 .doctrees/api/classes/universal-callbacks/UserCutCallback.doctree create mode 100644 .doctrees/api/classes/universal-callbacks/index.doctree create mode 100644 .doctrees/api/index.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/BranchAndBound.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/cuts/index.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/heuristics/RENS.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/heuristics/index.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/node-selection/BestBound.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/node-selection/WorstBound.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/node-selection/index.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.doctree create mode 100644 .doctrees/api/mixed-integer/branch-and-bound/variable-selection/index.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/ArtificialCosts.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/DantzigWolfeDecomposition.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/FarkasPricing.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/IntegerMaster.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/stabilization/Neame.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/stabilization/Wentges.doctree create mode 100644 .doctrees/api/mixed-integer/column-generation/stabilization/index.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/GLPK.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Gurobi.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/HiGHS.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Mosek.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Optimizers_GLPK.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Optimizers_Gurobi.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Optimizers_HiGHS.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Optimizers_Mosek.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Osi.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Osi/OsiCbc.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Osi/OsiClp.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Osi/OsiCplex.doctree create mode 100644 .doctrees/api/mixed-integer/external-solvers/Osi/OsiSymphony.doctree create mode 100644 .doctrees/api/mixed-integer/index.doctree create mode 100644 .doctrees/api/mixed-integer/misc/CtrType.doctree create mode 100644 .doctrees/api/mixed-integer/misc/VarType.doctree create mode 100644 .doctrees/api/mixed-integer/misc/tolerances.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Annotation.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Ctr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Dim.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Env.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Expr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/LinExpr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Model.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Point.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/QCtr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/QuadExpr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/TempCtr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/TempQCtr.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/TempVar.doctree create mode 100644 .doctrees/api/mixed-integer/modeling/Var.doctree create mode 100644 .doctrees/api/mixed-integer/padm/Optimizers_PADM.doctree create mode 100644 .doctrees/api/mixed-integer/padm/PADM.doctree create mode 100644 .doctrees/api/robust/index.doctree create mode 100644 .doctrees/api/robust/modeling/Description.doctree create mode 100644 .doctrees/api/types/index.doctree create mode 100644 .doctrees/api/types/universal-callbacks/CallbackEvent.doctree create mode 100644 .doctrees/api/types/universal-callbacks/index.doctree create mode 100644 .doctrees/benchmark/index.doctree create mode 100644 .doctrees/developer_guide/build-the-doc.doctree create mode 100644 .doctrees/developer_guide/index.doctree create mode 100644 .doctrees/developer_guide/tests.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/examples/bilevel-kkt.doctree create mode 100644 .doctrees/examples/bilevel-mibs.doctree create mode 100644 .doctrees/examples/bilevel-pessimistic.doctree create mode 100644 .doctrees/examples/facility-location-problem.doctree create mode 100644 .doctrees/examples/generalized-assignment-problem-bap.doctree create mode 100644 .doctrees/examples/generalized-assignment-problem-penalty-bap.doctree create mode 100644 .doctrees/examples/index.doctree create mode 100644 .doctrees/examples/knapsack-problem.doctree create mode 100644 .doctrees/examples/robust-adr.doctree create mode 100644 .doctrees/examples/robust-determistic.doctree create mode 100644 .doctrees/examples/two-stage-robust-facility-location-problem.doctree create mode 100644 .doctrees/faq/gap.doctree create mode 100644 .doctrees/faq/index.doctree create mode 100644 .doctrees/faq/mosek-and-eigen.doctree create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/installation/global-installation/index.doctree create mode 100644 .doctrees/installation/global-installation/linking.doctree create mode 100644 .doctrees/installation/index.doctree create mode 100644 .doctrees/installation/local_installation.doctree create mode 100644 .doctrees/installation/options.doctree create mode 100644 .doctrees/references.doctree create mode 100644 .doctrees/tutorials/bilevel-optimization/files.doctree create mode 100644 .doctrees/tutorials/bilevel-optimization/index.doctree create mode 100644 .doctrees/tutorials/bilevel-optimization/kkt.doctree create mode 100644 .doctrees/tutorials/bilevel-optimization/mibs.doctree create mode 100644 .doctrees/tutorials/bilevel-optimization/modeling.doctree create mode 100644 .doctrees/tutorials/bilevel-optimization/pessimistic.doctree create mode 100644 .doctrees/tutorials/index.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-callback.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/create-node.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/index.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/index.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/index.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/constraints.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/environment.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/expressions.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/index.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/models.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/objective-function.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/modeling/variables.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/access-optimizer.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/create-optimizer.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/create-universal-callback.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/index.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/optimizers.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/solving.doctree create mode 100644 .doctrees/tutorials/mixed-integer-programming/optimizers/universal-callbacks.doctree create mode 100644 .doctrees/tutorials/robust-optimization/index.doctree create mode 100644 .doctrees/tutorials/robust-optimization/single-stage/index.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/index.doctree create mode 100644 .doctrees/tutorials/robust-optimization/two-stage/modeling.doctree create mode 100644 .nojekyll create mode 100644 _images/ecdf-gap.png create mode 100644 _sources/api/bilevel/external-solvers/MibS.rst.txt create mode 100644 _sources/api/bilevel/external-solvers/Optimizers_MibS.rst.txt create mode 100644 _sources/api/bilevel/index.rst.txt create mode 100644 _sources/api/bilevel/modeling/Description.rst.txt create mode 100644 _sources/api/bilevel/single-level/KKT.rst.txt create mode 100644 _sources/api/bilevel/single-level/Optimizers_KKT.rst.txt create mode 100644 _sources/api/bilevel/single-level/Optimizers_StrongDuality.rst.txt create mode 100644 _sources/api/bilevel/single-level/StrongDuality.rst.txt create mode 100644 _sources/api/classes/external-bilevel/MibS.rst.txt create mode 100644 _sources/api/classes/external-bilevel/Optimizers_MibS.rst.txt create mode 100644 _sources/api/classes/external-bilevel/index.rst.txt create mode 100644 _sources/api/classes/index.rst.txt create mode 100644 _sources/api/classes/universal-callbacks/Callback.rst.txt create mode 100644 _sources/api/classes/universal-callbacks/CallbackFactory.rst.txt create mode 100644 _sources/api/classes/universal-callbacks/LazyCutCallback.rst.txt create mode 100644 _sources/api/classes/universal-callbacks/UserCutCallback.rst.txt create mode 100644 _sources/api/classes/universal-callbacks/index.rst.txt create mode 100644 _sources/api/index.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/BranchAndBound.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/cuts/index.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/heuristics/RENS.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/heuristics/index.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/node-selection/BestBound.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/node-selection/WorstBound.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/node-selection/index.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.rst.txt create mode 100644 _sources/api/mixed-integer/branch-and-bound/variable-selection/index.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/ArtificialCosts.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/DantzigWolfeDecomposition.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/FarkasPricing.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/IntegerMaster.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/stabilization/Neame.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/stabilization/Wentges.rst.txt create mode 100644 _sources/api/mixed-integer/column-generation/stabilization/index.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/GLPK.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Gurobi.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/HiGHS.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Mosek.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Optimizers_GLPK.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Optimizers_Gurobi.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Optimizers_HiGHS.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Optimizers_Mosek.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Osi.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Osi/OsiCbc.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Osi/OsiClp.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Osi/OsiCplex.rst.txt create mode 100644 _sources/api/mixed-integer/external-solvers/Osi/OsiSymphony.rst.txt create mode 100644 _sources/api/mixed-integer/index.rst.txt create mode 100644 _sources/api/mixed-integer/misc/CtrType.rst.txt create mode 100644 _sources/api/mixed-integer/misc/VarType.rst.txt create mode 100644 _sources/api/mixed-integer/misc/tolerances.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Annotation.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Ctr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Dim.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Env.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Expr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/LinExpr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Model.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Point.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/QCtr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/QuadExpr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/TempCtr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/TempQCtr.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/TempVar.rst.txt create mode 100644 _sources/api/mixed-integer/modeling/Var.rst.txt create mode 100644 _sources/api/mixed-integer/padm/Optimizers_PADM.rst.txt create mode 100644 _sources/api/mixed-integer/padm/PADM.rst.txt create mode 100644 _sources/api/robust/index.rst.txt create mode 100644 _sources/api/robust/modeling/Description.rst.txt create mode 100644 _sources/api/types/index.rst.txt create mode 100644 _sources/api/types/universal-callbacks/CallbackEvent.rst.txt create mode 100644 _sources/api/types/universal-callbacks/index.rst.txt create mode 100644 _sources/benchmark/index.rst.txt create mode 100644 _sources/developer_guide/build-the-doc.rst.txt create mode 100644 _sources/developer_guide/index.rst.txt create mode 100644 _sources/developer_guide/tests.rst.txt create mode 100644 _sources/examples/bilevel-kkt.rst.txt create mode 100644 _sources/examples/bilevel-mibs.rst.txt create mode 100644 _sources/examples/bilevel-pessimistic.rst.txt create mode 100644 _sources/examples/facility-location-problem.rst.txt create mode 100644 _sources/examples/generalized-assignment-problem-bap.rst.txt create mode 100644 _sources/examples/generalized-assignment-problem-penalty-bap.rst.txt create mode 100644 _sources/examples/index.rst.txt create mode 100644 _sources/examples/knapsack-problem.rst.txt create mode 100644 _sources/examples/robust-adr.rst.txt create mode 100644 _sources/examples/robust-determistic.rst.txt create mode 100644 _sources/examples/two-stage-robust-facility-location-problem.rst.txt create mode 100644 _sources/faq/gap.rst.txt create mode 100644 _sources/faq/index.rst.txt create mode 100644 _sources/faq/mosek-and-eigen.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/installation/global-installation/index.rst.txt create mode 100644 _sources/installation/global-installation/linking.rst.txt create mode 100644 _sources/installation/index.rst.txt create mode 100644 _sources/installation/local_installation.rst.txt create mode 100644 _sources/installation/options.rst.txt create mode 100644 _sources/references.rst.txt create mode 100644 _sources/tutorials/bilevel-optimization/files.rst.txt create mode 100644 _sources/tutorials/bilevel-optimization/index.rst.txt create mode 100644 _sources/tutorials/bilevel-optimization/kkt.rst.txt create mode 100644 _sources/tutorials/bilevel-optimization/mibs.rst.txt create mode 100644 _sources/tutorials/bilevel-optimization/modeling.rst.txt create mode 100644 _sources/tutorials/bilevel-optimization/pessimistic.rst.txt create mode 100644 _sources/tutorials/index.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/create-callback.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/create-node.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/index.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/index.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/index.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/constraints.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/environment.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/expressions.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/index.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/models.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/objective-function.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/modeling/variables.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/access-optimizer.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/create-optimizer.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/create-universal-callback.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/index.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/optimizers.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/solving.rst.txt create mode 100644 _sources/tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst.txt create mode 100644 _sources/tutorials/robust-optimization/index.rst.txt create mode 100644 _sources/tutorials/robust-optimization/single-stage/index.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/index.rst.txt create mode 100644 _sources/tutorials/robust-optimization/two-stage/modeling.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/design.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/ecdf-gap.png create mode 100644 _static/file.png create mode 100644 _static/graphviz.css create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/plus.png create mode 100644 _static/pseudocode-js/pseudocode.min.css create mode 100644 _static/pseudocode-js/pseudocode.min.js create mode 100644 _static/pygments.css create mode 100644 _static/robust.png create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 _static/theme.css create mode 100644 _static/theme.js create mode 100644 api/bilevel/external-solvers/MibS.html create mode 100644 api/bilevel/external-solvers/Optimizers_MibS.html create mode 100644 api/bilevel/index.html create mode 100644 api/bilevel/modeling/Description.html create mode 100644 api/bilevel/single-level/KKT.html create mode 100644 api/bilevel/single-level/Optimizers_KKT.html create mode 100644 api/bilevel/single-level/Optimizers_StrongDuality.html create mode 100644 api/bilevel/single-level/StrongDuality.html create mode 100644 api/classes/external-bilevel/MibS.html create mode 100644 api/classes/external-bilevel/Optimizers_MibS.html create mode 100644 api/classes/external-bilevel/index.html create mode 100644 api/classes/index.html create mode 100644 api/classes/universal-callbacks/Callback.html create mode 100644 api/classes/universal-callbacks/CallbackFactory.html create mode 100644 api/classes/universal-callbacks/LazyCutCallback.html create mode 100644 api/classes/universal-callbacks/UserCutCallback.html create mode 100644 api/classes/universal-callbacks/index.html create mode 100644 api/index.html create mode 100644 api/mixed-integer/branch-and-bound/BranchAndBound.html create mode 100644 api/mixed-integer/branch-and-bound/BranchAndBoundCallback.html create mode 100644 api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.html create mode 100644 api/mixed-integer/branch-and-bound/cuts/KnapsackCover.html create mode 100644 api/mixed-integer/branch-and-bound/cuts/index.html create mode 100644 api/mixed-integer/branch-and-bound/heuristics/LocalBranching.html create mode 100644 api/mixed-integer/branch-and-bound/heuristics/RENS.html create mode 100644 api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.html create mode 100644 api/mixed-integer/branch-and-bound/heuristics/index.html create mode 100644 api/mixed-integer/branch-and-bound/node-selection/BestBound.html create mode 100644 api/mixed-integer/branch-and-bound/node-selection/BestEstimate.html create mode 100644 api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.html create mode 100644 api/mixed-integer/branch-and-bound/node-selection/DepthFirst.html create mode 100644 api/mixed-integer/branch-and-bound/node-selection/WorstBound.html create mode 100644 api/mixed-integer/branch-and-bound/node-selection/index.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.html create mode 100644 api/mixed-integer/branch-and-bound/variable-selection/index.html create mode 100644 api/mixed-integer/column-generation/ArtificialCosts.html create mode 100644 api/mixed-integer/column-generation/DantzigWolfeDecomposition.html create mode 100644 api/mixed-integer/column-generation/FarkasPricing.html create mode 100644 api/mixed-integer/column-generation/IntegerMaster.html create mode 100644 api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.html create mode 100644 api/mixed-integer/column-generation/stabilization/Neame.html create mode 100644 api/mixed-integer/column-generation/stabilization/Wentges.html create mode 100644 api/mixed-integer/column-generation/stabilization/index.html create mode 100644 api/mixed-integer/external-solvers/GLPK.html create mode 100644 api/mixed-integer/external-solvers/Gurobi.html create mode 100644 api/mixed-integer/external-solvers/HiGHS.html create mode 100644 api/mixed-integer/external-solvers/Mosek.html create mode 100644 api/mixed-integer/external-solvers/Optimizers_GLPK.html create mode 100644 api/mixed-integer/external-solvers/Optimizers_Gurobi.html create mode 100644 api/mixed-integer/external-solvers/Optimizers_HiGHS.html create mode 100644 api/mixed-integer/external-solvers/Optimizers_Mosek.html create mode 100644 api/mixed-integer/external-solvers/Osi.html create mode 100644 api/mixed-integer/external-solvers/Osi/OsiCbc.html create mode 100644 api/mixed-integer/external-solvers/Osi/OsiClp.html create mode 100644 api/mixed-integer/external-solvers/Osi/OsiCplex.html create mode 100644 api/mixed-integer/external-solvers/Osi/OsiSymphony.html create mode 100644 api/mixed-integer/index.html create mode 100644 api/mixed-integer/misc/CtrType.html create mode 100644 api/mixed-integer/misc/VarType.html create mode 100644 api/mixed-integer/misc/tolerances.html create mode 100644 api/mixed-integer/modeling/Annotation.html create mode 100644 api/mixed-integer/modeling/Ctr.html create mode 100644 api/mixed-integer/modeling/Dim.html create mode 100644 api/mixed-integer/modeling/Env.html create mode 100644 api/mixed-integer/modeling/Expr.html create mode 100644 api/mixed-integer/modeling/LinExpr.html create mode 100644 api/mixed-integer/modeling/Model.html create mode 100644 api/mixed-integer/modeling/Point.html create mode 100644 api/mixed-integer/modeling/QCtr.html create mode 100644 api/mixed-integer/modeling/QuadExpr.html create mode 100644 api/mixed-integer/modeling/TempCtr.html create mode 100644 api/mixed-integer/modeling/TempQCtr.html create mode 100644 api/mixed-integer/modeling/TempVar.html create mode 100644 api/mixed-integer/modeling/Var.html create mode 100644 api/mixed-integer/padm/Optimizers_PADM.html create mode 100644 api/mixed-integer/padm/PADM.html create mode 100644 api/robust/index.html create mode 100644 api/robust/modeling/Description.html create mode 100644 api/types/index.html create mode 100644 api/types/universal-callbacks/CallbackEvent.html create mode 100644 api/types/universal-callbacks/index.html create mode 100644 benchmark/index.html create mode 100644 developer_guide/build-the-doc.html create mode 100644 developer_guide/index.html create mode 100644 developer_guide/tests.html create mode 100644 examples/bilevel-kkt.html create mode 100644 examples/bilevel-mibs.html create mode 100644 examples/bilevel-pessimistic.html create mode 100644 examples/facility-location-problem.html create mode 100644 examples/generalized-assignment-problem-bap.html create mode 100644 examples/generalized-assignment-problem-penalty-bap.html create mode 100644 examples/index.html create mode 100644 examples/knapsack-problem.html create mode 100644 examples/robust-adr.html create mode 100644 examples/robust-determistic.html create mode 100644 examples/two-stage-robust-facility-location-problem.html create mode 100644 faq/gap.html create mode 100644 faq/index.html create mode 100644 faq/mosek-and-eigen.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 installation/global-installation/index.html create mode 100644 installation/global-installation/linking.html create mode 100644 installation/index.html create mode 100644 installation/local_installation.html create mode 100644 installation/options.html create mode 100644 objects.inv create mode 100644 references.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 sitemap.xml create mode 100644 tutorials/bilevel-optimization/files.html create mode 100644 tutorials/bilevel-optimization/index.html create mode 100644 tutorials/bilevel-optimization/kkt.html create mode 100644 tutorials/bilevel-optimization/mibs.html create mode 100644 tutorials/bilevel-optimization/modeling.html create mode 100644 tutorials/bilevel-optimization/pessimistic.html create mode 100644 tutorials/index.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/create-callback.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/create-node.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/index.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.html create mode 100644 tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/index.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.html create mode 100644 tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.html create mode 100644 tutorials/mixed-integer-programming/index.html create mode 100644 tutorials/mixed-integer-programming/modeling/constraints.html create mode 100644 tutorials/mixed-integer-programming/modeling/environment.html create mode 100644 tutorials/mixed-integer-programming/modeling/expressions.html create mode 100644 tutorials/mixed-integer-programming/modeling/index.html create mode 100644 tutorials/mixed-integer-programming/modeling/models.html create mode 100644 tutorials/mixed-integer-programming/modeling/objective-function.html create mode 100644 tutorials/mixed-integer-programming/modeling/variables.html create mode 100644 tutorials/mixed-integer-programming/optimizers/access-optimizer.html create mode 100644 tutorials/mixed-integer-programming/optimizers/create-optimizer.html create mode 100644 tutorials/mixed-integer-programming/optimizers/create-universal-callback.html create mode 100644 tutorials/mixed-integer-programming/optimizers/index.html create mode 100644 tutorials/mixed-integer-programming/optimizers/optimizers.html create mode 100644 tutorials/mixed-integer-programming/optimizers/solving.html create mode 100644 tutorials/mixed-integer-programming/optimizers/universal-callbacks.html create mode 100644 tutorials/robust-optimization/index.html create mode 100644 tutorials/robust-optimization/single-stage/index.html create mode 100644 tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.html create mode 100644 tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.html create mode 100644 tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.html create mode 100644 tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.html create mode 100644 tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.html create mode 100644 tutorials/robust-optimization/two-stage/index.html create mode 100644 tutorials/robust-optimization/two-stage/modeling.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..bb1cd79d0 --- /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: 4295ac0db0d6807f0e54186f96877923 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/api/bilevel/external-solvers/MibS.doctree b/.doctrees/api/bilevel/external-solvers/MibS.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ad55246bbd30a6f653b8ac7cb73fbcdbd32d51b1 GIT binary patch literal 135516 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 K3Ev%5cm4mZw2e0a literal 0 HcmV?d00001 diff --git a/.doctrees/api/bilevel/external-solvers/Optimizers_MibS.doctree b/.doctrees/api/bilevel/external-solvers/Optimizers_MibS.doctree new file mode 100644 index 0000000000000000000000000000000000000000..853fa8f644bb91b6d91a958e46462691047f92a3 GIT binary patch literal 3677 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 Hy8HhFX3jA@ literal 0 HcmV?d00001 diff --git a/.doctrees/api/bilevel/single-level/Optimizers_KKT.doctree b/.doctrees/api/bilevel/single-level/Optimizers_KKT.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e07b529f823189065926aabbcc24af55234b6ec6 GIT binary patch literal 155230 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 YZbB!+hZK6SoffWZ%FWv0?fBJ*7umAu6 literal 0 HcmV?d00001 diff --git a/.doctrees/api/bilevel/single-level/Optimizers_StrongDuality.doctree b/.doctrees/api/bilevel/single-level/Optimizers_StrongDuality.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2056e0496b9409a6ffa752ec35e754fcc7306727 GIT binary patch literal 156127 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/bilevel/single-level/StrongDuality.doctree b/.doctrees/api/bilevel/single-level/StrongDuality.doctree new file mode 100644 index 0000000000000000000000000000000000000000..07704275cb0ac89113938b33473c8afc2bb50ab2 GIT binary patch literal 132778 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

}VN=BqBaPu?`qYe0MoKd8c@)XG+#j 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 E3kL!%<^TWy literal 0 HcmV?d00001 diff --git a/.doctrees/api/classes/external-bilevel/MibS.doctree b/.doctrees/api/classes/external-bilevel/MibS.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5c738ca8e0e187d086b5a5ee9f6bbebe373f6ddc GIT binary patch literal 135342 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..735618975d2ca3836a80911aeb852c5b8c2ac166 GIT binary patch literal 3467 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 G7XKe))l^gf literal 0 HcmV?d00001 diff --git a/.doctrees/api/classes/universal-callbacks/LazyCutCallback.doctree b/.doctrees/api/classes/universal-callbacks/LazyCutCallback.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eaa05fe9610af80429932c6554cdbb707d97161d GIT binary patch literal 37030 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 F{|AyK#Fqd7 literal 0 HcmV?d00001 diff --git a/.doctrees/api/classes/universal-callbacks/index.doctree b/.doctrees/api/classes/universal-callbacks/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c2574cb185b806df161f3a8b343416ddec6ab4bc GIT binary patch literal 3056 zcma)8TW=gS6i$=uW;fYOE-gZ814XDb6-^c)9uQB6qCQaA2Sj;lWqD`3Ybzdmusz8x zQYCmOY9zna{6zi-pJ!$#yHTaK(lqPibB@pD`;Prr>)-$OHp+i~Xmc*q{EVil(kZjS zcT$}c8B;F24Uhf~ufmD%8hUAUVG2;{0Yv&ZPxWEs5 zmo&liE#IzV9{X)66bs{GLj5jv&WK6jkZa6sOQbgDv6Dz@Erj^pQZ%c6bIV(TY(SxUEbsO_!d9*KaIG~*vJ%0F*CZ<=6oblEvx?!oE_0zjOw#S#WMHP zWSRR&sFcmmj7379JliZLs6!{wS*{C}t`x4SDc?XGI&p@r7Pa2{6#4PbP|45nJ;3)6 z-y?i?{eusR0#!j_jVNnzGWI9$vs!jA{1e9hy_qhxpVGu>v-mKhpXr~ACxu(uewfj7 z%gnkF^F5&wS)^<#WR)NPp8vpq9qOzKH^tX%DL%xIhD<_ZRIo0Nd#fDMj`6K?F=iB?nOh;oQ@i3Z;G16nvu zu0?)R0BilU$a2!)5mhY(0#G!H%II)dN=i1w)?bTq%ZgN!c^1*M&*r(djI3Ig5J?=l z5LQ%p9gLEdl*dU zQ?{accT%+_AFmG zuGN_~GtlWy)GPylCUGo7dmP%)f&BErSKpwX12au-xQ~)+_g^gCgSj-~^_-bA!Q8Yw z1Jhu{T_$l@*U^#cF*hN`d*L|Y6!D<(71>bbvV^ccFLE3aA4%n1P|pBd9FPb#1qSM& za2ThAEhabAL>93tHLaK!A2R0wkijLBg1!qxz!`Hm<4yvtbHXwzB*Ako4&5^9gZe=R ztjcLM(60OzQy1|;g^lCM!UP_vAaCAG&)@KkI`yed>!1m>8sws<&S}p z;L!$D;5tdPlqf86zHSA literal 0 HcmV?d00001 diff --git a/.doctrees/api/index.doctree b/.doctrees/api/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..40a646862c338b7656a0570d84dbc73755005fc2 GIT binary patch literal 4692 zcmb_gTW=f36_zZKB6Ytx7bj{Mr*Z8RB3+;lg$oqu1w{?jOluT}fEMS>nKNh3`Ob~c z8h?GbyO8}eTPk5Zo^(kN#3G=|npPnEG@`M#AKQC>vLD*JrY*^-5~=j5H4EVI84m+V zV|$FvO~Qz1`!JP=|2A5N$q#P@g{&`DP+ZPNj3n-xWU%|%=pi8WZ$ zJ?<_x8=C8o*0#*jkAL+rdpmZQe?uqEIyvzpo7tFk*mv36Y>D0Ov$y)`fUs>?hV33( zwvW#%_`HVCtz(eQ?pT=t_ZC-jRsWGz#c7_)y(@!#NiouR}niiwVd;Q&2DE-Yr~0` zJZ-iLBOIPek|b1GGVlCf;#|$L5J4-jm|GWKd?@O!CMA^SxH@xOHK2Wa4rtDcF96#9 zPhig{G`tdGS8vY1^~dXh>uC*K+feIK3HJgskLT9U#}NA+J3fY^cN}5{`3q)PVFUs4 zcf$OmB^LAyHvCDGO`dIB0t4GQq;M5 zolX*zFKq1*n;5z40Y8?g~|$5l~(qS+1HZ9D$Ht)mq;;^ zROLm#p@k-4o-hlZEPtjhM=qL8Kb5XAYXf~DRH|{rQwqOnKipZh>3-!was(0;o1fi3vV(MGJ-2M6)INZ zp)9(VOF`fpIfaHaqj;xWGp}rna9?qt=#*diHu=Ia7aobP}*>rPu-K8emsWFJRnB|;IgKj>fzxJ4i(4uH!p5_ zR7xQ|M&cku;Q|csHeXw_m0P|hrIAUo=3s7TPQ-X`abdx1=5l8`l&9akxG{IwY`ZrA zdy2tCA>L%oMo8jON=6hG53s(0dT#b4^@R*P6n`KG*SHpL)Xl zAYh+x#dFARc>z~s5W0sHTCS9#g0Nf1V-$iT@9}_|g3T)%9`lO(hD#KcuFrvQoHUmm z*3hw3OLWjXF5ZBgcmyDZ=p40uwEZ2knb2gGLEK~39c4hEy9*8T8q+#a4|+Y2RW~`) zOvGIwM~JAKjx$pLoSvo;+@s-+7U+lX-v2)AxhaSKoOnl>iN8~dNAMB{*%K4dwI6jXzSUEExPM@R+u5cq$)+82b039VLJRSlA zMPAr-i2_-6j*UkSyP+U?FuEz{!~!ztJ_AJX88l!Nv)9zz^ucxF(TMQS!*u8JZl?84 zF}VP%;V{o>Q?o?lCl=+*wDN3%@C6bv^Kit5_VS4?o4IzN6p*Dc@&PsIpj|dMyBDbW zv<5Py4XZ`drBn=hu7aSYS|`e^xXqk)7j@@=O<2l4WuLGw*ypKfyIp;jKy5b*eRa+z zQ}*eUeKAehuA>}a2>KGA6#eig>?!-4eU_Syx^FY(Hhd0*ICY^xPH`bz^5xH}Q*u6( zRbU|+h_Hf7#=1X8thn13B(}?2vqQTVz_)T$tslOkB!I7dbp zI9P4h-1%9Wgxp7Db~qxG<3XJq2_5H|2c6sKyl!{%x%R$!?|-p>{p_DO@b$BQb#2u? zj{gAlU%G=Ff8e+~<5T>()UMTLWcDR7jiMkfnq`L}MDfG^&);`dDgPw{S+e+%U>P09 zIL#!_Pu0ZiR{6R#pfl_E3D_?V7~`jxNSLed{Q`GO7pA4@GNX04>YzF3ROu%uZGzYR z1A^3xe*q{B@i(x($PkyTF#ZcpTw#O7(gu)b)~YvWd0?#=cae8S?x&g6z}3s5v^d|T GgYGw15&o$F literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/BranchAndBound.doctree b/.doctrees/api/mixed-integer/branch-and-bound/BranchAndBound.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7f75be70ba43d35b9785c37f3a80ff28de59d4f5 GIT binary patch literal 251347 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.doctree b/.doctrees/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c62468c2d217fa6b41b593facb6552f3f53312b9 GIT binary patch literal 38730 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/cuts/index.doctree b/.doctrees/api/mixed-integer/branch-and-bound/cuts/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c0897cdc0bda3aa49d45a070cd9be4a01b140241 GIT binary patch literal 2939 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.doctree b/.doctrees/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.doctree new file mode 100644 index 0000000000000000000000000000000000000000..998adc4fb827e526bdfa682fc9d88563c6942ae7 GIT binary patch literal 18793 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/heuristics/index.doctree b/.doctrees/api/mixed-integer/branch-and-bound/heuristics/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..886ba424b0103fda34109a9a396aa2b5a354f6c7 GIT binary patch literal 3070 zcmbVO-EJH;6i$=uW;fZNByA8<8z@4ht?2He!UaNHpaK$7>0Y!5p-R!nGvi%b@z{gy zX*L&?%0*Fwd{^@dJQ%OQ3-Ebnc6JkSQz}ifK0ZD^Ki_wJUbX)GXK$nY=Y}R{TrS2W zO{Gey@vf7qq{yhW{;j|Nn}6x=xvnN>Min}t-fci5VO*q|N`K86SqsO)jTdN;tla_@zjJ^b`n91fe^o2 zl4RAdPFm!vMNE=YO=m%;a66XF!(cR{ID z?h5uPd&rL20~B~0NSXkpY`s`+Sl4uPrb(Vt?a6xm!uin(fx!-dP8$>MFayg*N{&{r zf`u9d?kMaA4z6|s2gwp1!Tc`FZ&d&<-2@IVySVO8Lp%1s-LR;z5hSE7%C(wnYAV{b ztg=K@xv6!^R2AXAYi^JfI*>YQDBN30Dk{57z+E>bXa<&KITm|bDGOJDg@t$5Cf@B;E=0KZ6bifbvd{vn zK1vgXwh(sVN-Na$+`GdW%t&SF+U6VA5A6}Sh!!)YGvH@nz@R(=p+nO(FnF_)P(e#c zbjB@7rx_4Iu^pxJ1q(Dic+b#dQli8+|!4eD2+?%bO9^TIqYe$7g&wBp_Im7Oal*dK0C8C^NBJbLT$#+8$9KLh~a8HW4_1ms;`5IHZ%oFd&R z)|=q1yRK=XbQ*!=fDNt*{cP&miIOwKh;;CDi3Zko15#KOtwe5<18e=X$nvPcBeGfw zLVMSeh+uG7N=i0_(yv6hp+%~qMHbMsPZzl|G+IAdLL{-#3vPIY*I|@$Lt+sEslD7; z@&uggAs9TRvLqdh_G`6h+1=cG;TJA3RF}l0GFVGd?>%%T)Tvsc!0l3b%UJd5h#N8CX+H@y&#DRd=I>E?=x$2^VMVmu^H#*mMJ+_dJZ}r1+pr415wyC+;|6=7s5AA`CF;N^gX%Na0GH-*E{B}@@tQR7*_u27_6 zVi;*oJs^WuCIx-Z;Q^!6;*O&PTBi}s2p18CyU=t?uMg_+3|JMjs-a!DEh=Ax(a3eG zRs!wqo2j@}S zELNf^f2n%oim=h{Ub5I--dY|yyksA(RogHg99^|l@8I=E!$>f102O#n5+wu@ix}`; z?0j3x-y-cXaPToUg!;<99W^#lTl%tN(y)6m-LE)X8?A|C$> DjEcn) literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/node-selection/BestBound.doctree b/.doctrees/api/mixed-integer/branch-and-bound/node-selection/BestBound.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d4a2c4f35809e242999e210fe705a6417efd5355 GIT binary patch literal 23302 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 JczTG*{{a9-7RCSo literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.doctree b/.doctrees/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fd707407477995f589a59b95755d86e0100d993c GIT binary patch literal 24480 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 WOU%?{31S^wwc@5I+eEfXlm7!d`D~&9 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.doctree b/.doctrees/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7325f21ceb08eed8ed74b7cd2f06915ff495a140 GIT binary patch literal 23527 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 Gng0RClt6d@ literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/node-selection/index.doctree b/.doctrees/api/mixed-integer/branch-and-bound/node-selection/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1baf24238253d1ddf968adfe4ba0d092d0230be8 GIT binary patch literal 3267 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.doctree b/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.doctree new file mode 100644 index 0000000000000000000000000000000000000000..52ea3ab7f69bac4c51bcb7cc54619784a2a20bbb GIT binary patch literal 42241 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�wLw^q3L?dKx-O%g^)SL~VPugP2_TsDn6>FF!A0 zNl+mX&CMIjm75ptg?18N7gb)~lS-7O5-jzcaA?%FYyWdd)QRd$HYY;V6B7SGui}-(ucS$oR zTkn5HIk}YFI|-nC5$mt2p~>w^3A9YI`??yCoa`ik1PP{{#P(e^BsmF6AZ1SJM`}R1 zr?duN!{4Z>S>&6jwNj&1FGoJ!j(dWz+)h#wX8W2UmBoO2>dCiieo4l?8zrZl&K9Z+ z!++udDHg;MhF}r>Jv_yJ@S+T>14d-a1v+mDRz75!lKa-se<8KH=b#m2hPwfuMOsIb5kgxxi@?c zF&?VhE_@WbYG|%it{I`;l22ltt_yX#R_W99xpvFZ;Vg|?@DBLeRKu-lo@F;mO~+n@ z?=-sY2jP=ly`Jr9wf2cMcmu0rRN%4&>tOcaA-(00qxwogUki8>yF)%z-Cn>0!S}u0 zHoS0Y>n+c!xg%A_Zg}MDgShX0t=2MJ_L0gW?z3B7v*ooH%q%Wy`6-)n?DuOJ(>dC3y-%>Gi)t zj<;8#n}+Qfp@++Ovuo%csIJmd)pqLbWjy41j@2ybcD)V_UFdMPf5)g9^iJu#<(VaV zs4h$f-~|n8n(NXVn;fHQJ6@?~oHGEOYw-qCtMSWTyvS3_0mgwY2!VyC$TQj+km6+kl(Ku18e=_=z~~eyp_xW zXwNkPMKzdH8*i>@jm4I>XaL6Huot`*7z$tI7`p9LN)@9ClmlQair7Agja6ZqfDx<0 z2*T{cLt4wTOX3z@YXP}!uC(gS5+_MOEWKd?H98HgMwV_1y+etetiHI_bd6TUE-lpw zL2ZRI4Q>_Y4&_awL3*pel5cdh^RQI@<%u4=jqn>#PGb=Wu?A-WdF{Kl-iU{q zMzaK5VgQ%wJ|&VnWevtoSOf1eJ+JA`A3O-R-I3-6&$JsOwzCKvbv3C;2LLro?5l8X zJOKBH_l-^hK8KvD9_yam5#8@+-2?M#gk;Ye&WL4rRSE+H!a>uk*8td{r4@KL)*H{t8KIxM`;Z-8ZrLTG)q)dUbjFgnlj0RO%ixCqo^>mZeZ1_HUT zod^oIRgP7&>V$S{w&pYAdMc8DWWW}#00&=y5txSI0gS654MICxGU}RDD`}Mqk-K!% z+eptu8oNfV>dUl?c%9KW*Croo8SteEurE-e)u_OCb%E|Y%~>=+Isx5mgFyjhc_40~ zkBU(x(j0G(+-+!e00p<9w<^ErBOcNMLsRE*KFH)En zDX3)%W|@Lmrrj^ou9s=I%e2d7+TF6bxZE=Lf)=CWHaF2hgWA5!ydSyb{OkLX=l^N> ze;yJoGL(KC9{m*)-ZdA!u(C5qM!=_z zyLjnZUZTtXT~d#({aJtQ%PqV)%<+^4H^Yg+zF7iv>E9uOoz?S+J$#2qBYGDkM7<12 z7LlquVmEp1!AP}129@@-J<>nuXvb@V#JxJ+SMUT(B~Uv$oV^CJ1?&>tuGM^I2E(KO zXmJ1Cz zM}rSSi{mVUr#tcOuK><+h(Id%;-YZ9;!^T8h7NZ_=C=l!3spzvvL z^CiGy=3cOE;UlkcQ~f`n4pjXK{81XCy@6rWgVz(@2WftM;m(u9I^jkt5u--?L_hHW zenk62KZZZiZ&{$9C2pBJab-obhWwlABsq4Cp0_qVIcv;Kz?(sUg0V4usys8Pm(_^b zz9lzewm{VtAqH)N7MBYxQ}9}pF*7?mHd>h(n<|e^Yhx2|9^FiNdTx4pe5|TQ%PslQ za^P~J<*pS{i}>cHdj5Cjpa0RzIsazI^Uv|Q5H*S($d95kS1gLMj*wTQ==J$gbpDD( zQP%mFY818eqv%~%E{ZbVR#l_u@%$+I*yThK%8*5ol*#=0vufmgH9vB`{2U<1z#F*% gNL{>*Rzt6~D#WE+B;MVI3JHY-Q3De1Yn4a-4|R6*ivR!s literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.doctree b/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a3167e3ef6fe45b9fec223cd2c895c6c14ebee0a GIT binary patch literal 41785 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.doctree b/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f1626721a9c78d236438797476b1a84bab2c1431 GIT binary patch literal 57469 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 aYO73)_61@;Zz>aKljoNq9@SRy!2bieyizFu literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/index.doctree b/.doctrees/api/mixed-integer/branch-and-bound/variable-selection/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..eb18aa5a3f4bd939547c00acd3e99a8c1a8288a8 GIT binary patch literal 3373 zcmbtWO>Y}F5Or)zmTXD>NYWNb+&V4NIA|mlMGr-L36eBulSU}gk6W;zb}5lCm)w$E zTRsFx4=G}RhXP^$LVs9)NgsDtYuQCFPJoTY;cz%JeD9I38h?Gvw+tqLxwALV1>)`_*6k8_L4L!~P`F`=rpSP)}i z#P5bAY5A*_!<5fx(&y6BDZIu-ANoWl{jthrGCU-jld+(ELq*xzA(siA4YWa-A3j;m z$7oV3R%sUe7n)o4oh>0d6 z75QASw4bb2a$1w57{I39eYe& zD zp*yEA%Gqb^3%1Md0`sdN*$@O~i}-b$70mlbnq(Q(o-9H-tnZ(aGsJ-g&^m;BKZO+a zmF$-kgcS94kRpVs*x{}Pm!MX)%U36+}*RGNovDg7GpK>@I5>E1g83J79xtg2<0tGgfkf8qp4(%+bJ_u19jKqEnMw z=D=Dv$bO9+Lnw#p(IFo%k2V?X;d?_E+8^lK*)*PGRM-AS;Y91348$Ws=!6$UB{#ZEc-17 zr41T&xfqwjNT`^U7m3@A89_cc_>yesa?wJpKFBj{5nhOnK;DITM+uLWcIo5k#faqVER#~Ctw=~;YY*iHO>!8*ou7tg9#-Hka;JZz7Mr6o{u z?pLO{Xes@WJkB;9D^VYR;dIr?s90 NX{%HqT;BP3@GsU_IYj^f literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/ArtificialCosts.doctree b/.doctrees/api/mixed-integer/column-generation/ArtificialCosts.doctree new file mode 100644 index 0000000000000000000000000000000000000000..04cbc85afaff8f0accc7025d1d9e42f104652152 GIT binary patch literal 50888 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/DantzigWolfeDecomposition.doctree b/.doctrees/api/mixed-integer/column-generation/DantzigWolfeDecomposition.doctree new file mode 100644 index 0000000000000000000000000000000000000000..204eb77068719d89312af3fb3f2250090f491b29 GIT binary patch literal 164114 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 K){~p1WB(7SN4h`& literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/IntegerMaster.doctree b/.doctrees/api/mixed-integer/column-generation/IntegerMaster.doctree new file mode 100644 index 0000000000000000000000000000000000000000..59ad24511d8443ec7117713bc49a14c42a6d4a3a GIT binary patch literal 77469 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.doctree b/.doctrees/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.doctree new file mode 100644 index 0000000000000000000000000000000000000000..34cc75d909a8275c2409eae5ba141d1f5b6a3f92 GIT binary patch literal 185112 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 D?ljmy literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/stabilization/Neame.doctree b/.doctrees/api/mixed-integer/column-generation/stabilization/Neame.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1e1f193526b9e5bdaf7e8426a04df5b3c9533387 GIT binary patch literal 35715 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/stabilization/Wentges.doctree b/.doctrees/api/mixed-integer/column-generation/stabilization/Wentges.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c6230f32a99e68561cab7d2f706b8af465a02c0b GIT binary patch literal 35909 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 U#~#EH1at~+IQS-QyLj^d0VchbM*si- literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/column-generation/stabilization/index.doctree b/.doctrees/api/mixed-integer/column-generation/stabilization/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3490a7f2fe5ed48314521677e73552cb22f5a92c GIT binary patch literal 3024 zcmbVO&2Aev5O!=!mTbwgowx{)xJ^)`Nzh0tiUR#P740#I4sFo}NP`8nq(s78a!Yb! zxj=yQkRS$l3;POvlfFowq#t)zYso+lO@NKX;c#X+^L@j4)%x@Ay^ZppAK07=wHOgf zm8Q%F-=R7!GNxR37asl*UWNz0Ysi_^g-KcP8_-C(kkl|0o(I1l)t!)bRG;6mEOkPw z<~VQhHs5(39`LSjIpHK*+447^Xv6Mkb>~M%rb3F}Njy9njY2$wBilc*MU3S?H2-<^ zS9l$&INLcvR4(vC-%Xlp@Gal2qo4R~DHIEnVoLljan6Wo;c)AC%Pm1|ywOf7iM0^o zcT171`qiODez};E^wh9f)G7RqBlEZw_<-NyJ${>S@e}{+nCpy% zm84er<{OAir_Qj|gx7l?;l}(f68tf~d-(3-dx-Cr|METKLgtWsBg%X|n7ogj35#ib z6DI!a{~yFJ@IHt0H-Y({P^l~^n+aKk!@uRObkxiLlG(6t$yCsaRR`MLWyP(JA%?ti1|D2!jM<~%Y@Gu6}_-eZS zpsvdB%#b{1CXm$%#Ph>T97Q{TD{D;n;|z=$YBgNL28`6D^f#kIq|};1q!d|}IXc;e zldTG@Ww5~0dZ4ROH5B5H{0(P_va$qdk{dlY%vKa?Iqit7GF0o72`i$%Ykog1OeAR1 z(6P6aRJ8OR%bXKxjy`nQG?tms;0F-y+dmUoprB1>YU{$~g$oltnD}nZ8*KofE+rtg zBUz5cp3&MNRN!F|{IzlLdsPSt{GLK#w_X-TV%0~1l1TBmi%?pzy63?k&0t1p$5uAq z`hIM9Ku5BeX_Em(`xY$76A&}DQ452&DhZRUlq6@u@nqR%;IBSV_nnFF8J26~63JdL zq;u2naw3~$%OA3ZKo%Wwg9LDEIZQWmci;}Z%wOPESE zg;wz0!p(+X4XwcM+v}SNGe(<)6GbJE3K-ySsSAEkWq!pry5m_w-u~i#IWHdM^B_$hT=`TgOWd+sAB8zA` zV2fN^maLvEA(Fb}g|NbvcpW5ESTdFIB6XBIOP+vpJzU0u871jpv|p( zG84NR3KOkS)O!#8sac}&9Y(SNHfjzON|6Z{o*dlw`#H-KPy|g*rDei;Q8FcnJ@Ufe zxoADT8JIc=;$3v~n9CSL4nq>gcOdQKl9*1&tARpfQ>`-^|i0=A-1&{3lEE zU@nPxJ!NJjn46V8&<)1iWfIQ1coRV(8ryisp8$|q(lE2RKw|TVkPClc&y^#Kgo`_bur=)s3{7K3Q;z8jnvLVZ53UT_h$l)RmLFJQB z_W-;fkO(yc2I{786uX2irdQNN7O^WeshAkYlhXjm;H{yc?>Qpij5+u?PN8+0u#5JRMhP7FsI{t$GJD02)S$!3(IsbAriDBC)sw-iw{@Yxz4|{&n~P;KyVN8ex{SsCVVC=^Ja} dy+&M?Y_Fa}0FimD)-H{$t?mNx@h+yLe*rKlwT1uy literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/GLPK.doctree b/.doctrees/api/mixed-integer/external-solvers/GLPK.doctree new file mode 100644 index 0000000000000000000000000000000000000000..644834548523c53aeb872b002367941db8962cfa GIT binary patch literal 130835 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Gurobi.doctree b/.doctrees/api/mixed-integer/external-solvers/Gurobi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3322e389d729cc3a9945783c4c761fd8019c880e GIT binary patch literal 150285 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/HiGHS.doctree b/.doctrees/api/mixed-integer/external-solvers/HiGHS.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c9cebc5693f275ecbfe2f379975655ca6f6d906a GIT binary patch literal 128568 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Mosek.doctree b/.doctrees/api/mixed-integer/external-solvers/Mosek.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e1477d2787dbebe1fc7d82db0eddd7338f438e6f GIT binary patch literal 145063 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 Ut&&`Bqb0>;^(|UAKdA2b{{baz&;S4c literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Optimizers_GLPK.doctree b/.doctrees/api/mixed-integer/external-solvers/Optimizers_GLPK.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c8b6e19110f3e398fe2efe25e82b55c89290aa54 GIT binary patch literal 127797 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 byt2F&z8BSn;}BryKAexRy}fMC+Wr3n2PCSU literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Optimizers_Gurobi.doctree b/.doctrees/api/mixed-integer/external-solvers/Optimizers_Gurobi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5478ba0dbe2727d3936bb96bf52921dcd5ef5347 GIT binary patch literal 159777 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 F{{Ur(qly3k literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Optimizers_HiGHS.doctree b/.doctrees/api/mixed-integer/external-solvers/Optimizers_HiGHS.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e3d31af3ff370567d31d0a0dd3e56c060260dbec GIT binary patch literal 3621 zcmeHKTaOe)6b5!@XJ;?77cMcv;($RQvO7HZVCKPSz<}8}CTP@zK&Pg=W~$ukuC^|_ zGbR{(z_3ZZ(Z1=Q<2M)+-~6g?Gdl|6yCg%pPMtb+F5mg;?9;|CZ?{k7|J;U78BfN0 zB#IIlQJuNvNQO41iOF7MH-E~WWH($(ks~dw3Tfs}K_g^bM2aTaqs+Cvy5U0amFJt9 zhK9?eKF%6!i8UW(H(1Lx3^#(#Y`Lv3Qp02Z168`$yU*|4|1$H+&|UnBj=dBAr1C5) zJX=Z${4g2Ya;>0toGrMe(%-&Y6g;6>-wuddA;u^^um*AZxE6S%eGJV|5UnA^cOxNj z@wFV;bh;Rj@IcX_*Rif?$jEPHY=d27YwQwRU_0*HE|W3sDw`x!b&sSv=<-O4;y*a2 zyCmh^n2%|+%M(LK&_ak*B}D9MDGrf??lc`io{c@F5#HtfGj_mMi+W5Gx>*Ta^R66E zMkq<1ybIHHnJKt=yKuA5F8gG#caQ;g1(|*qziaqi$L}VhWAEot?H20n7A|k#@|J5J z5tZ;{G*iB!ve;{(5M-oC%4T-mk5S=Op5I>Q4oMPeIzygBom|wp>J!xKO@l5maJ9pe zPIjVP}barv5TP5S?e{AYI(48rdgHCt5FWHP={S{|2D2w~h=e9Mo>!n&SRFZeH9qN&OolP2C;gnF-HRzRJK<^E~6<(mz#Nk%}S zz)Nqk&o{5Tc1qI#EkeM#f(XHuiJ%K@1+yNWU?pK2<># zGcYtpc?`<24EgT0+aDmGZ8Z$%%zMey{CkyobT09DJ)mljQ!~u(02_3f@h=F#Oa^G7 z$gpgG+3f(3aZq<=9YCN{kC0=xsV9jc2F%V#FdXxB?lY>Ju>9U5Ev*)VcWBWwu3n}9((Kx zNs3PNlhHv2$ixF0p?xRtfKh62$N3Oi2LX)<7XfBNPrA9+Tjg{ItcqblXvc1WCWn5) za?1skpm%{pyz=?092lZT6x4+2Y70&QSq2j$=sfcC)DuwM328BNK@4ldda>mB6yqA? zO)o6IZ?GW?*<<$5x|WxkNeVapWHUTwkB=?8;=ex9Ktb!&cT`-FWEtuh%p=lr~_atH4n=p&TY zlLH=?Pzr%^BL=)4%{!(11+wrgdw^EJWQL}~P^(dWe<8-Tww`D-P9?41xN5Xyck9XW z{~7MYNI9M1{`_w<+#j!DSLUAYqZC#+<9AC(>K{RQ?&h#mj{ literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Optimizers_Mosek.doctree b/.doctrees/api/mixed-integer/external-solvers/Optimizers_Mosek.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b31b8cd2d698d2fe9caf8ada445b39b11dc77128 GIT binary patch literal 3621 zcmeHKTW=dh6mFB)j&pJ1^ddx?;ue**qK^B(1M&j`wFsf8Mye1XRqblLJN69T-C5?6 z*hod?p{SAOt;-wyx&8)(#2er2&5ofL-l^nj=ggTi=klFzPM+3&eYbTc`)7Al!gxGA zAVCm|fU4B42f{ZIjdl7Wz4deYB)w^yk{l~xq)$_O1{yx&VIXOoK1yxNscRmpgW`Nc zQD1WrSI1e6)mh_FdXqJ6O>-U6g)Q6uD$zXRKT@gs{rf`EN$QlLyY@AmIw$^33iDN2z$3jkeJP=|2ADmM? zlJH){r!?sDSkp1I5F(W^3A;*!N60~Mo(?a|#(`7_@5ZoGW@+bbM- z`Skaybf3PdV4px~v0x1|q*aA&qliBxWw94U3w7U^qq(g6 zf|*@WwQ4uYI(2TZJ>Tp1%grUrs|$z%oL>#Ws(aaOdtOTttB^QK@lg7)q$=;;niiUb z>ERi>QR>hDOXCoH*0y{j9XEIt6Ks`|oDuB0qFMvbAiZ|QVyGWlGY(Q)|AvGHR8Y}i zJqKYrU^@fbM6*#zfVmWlfPhmpi4rU}r4Smf(h;Ag_G~Y;o4E@f?wvqkqgWalVzsS> z?>TmHyKtojpXDsIdn1@ZyU>Nr=XTq%YiuHKidKly=eDIlX^H2H$Z@uU!ArS>hBT9S z$6Pb7WH{Vc94IJnV7DYqgw$S0k0{c)VmBBGt7Xl$>69ajnrNd+rJAh;bZEx7u2rxC zG$bVvBu$jVr!FMtACJ+v9*unwIPS1bqetD3yNcuc^65>FN-3nrNF0Pzq5{rUU#E5_ z&-{XwT4p7+`%61ZCfEzx%8kw)D34w~y|HxC?z#W~JjIZo5CNrjJ0$VgkTFHN1FToT zxAq*EN65enXad;a8V<}1Y~2^}2r(iZJSfq?>b6CU7T#QBS2(b?9hfNbDm)^qnZUgg z?saemcQQ$abXWShC{fe|!UN$!YnM(Fw5GRsGJ}Y(y(6x8j@KP8;ED`G7f9h{qwEv( z+!lgS=!~rCV061s^F}<(-^PpX3zsM=v&N*cvlgJ-7Ha4ckg+;-N(-TGY=Hw&f&40^eO<*ms!LiR$-y5UYb^rkRKjgdC%tE;!B10cd)f zMktR)Io2WXUcd7Z^4XFjf62U)%*}sLnn&jnht~;}2b}6rb_dv?$FzGv0A?~o3k8~` zhwFA9fQ-DVGphhRl{kc)*j+V?HJN&hk6DNxz`GU-hx;uR5p>xP1}&|SsB_smUwWbN zNs-!ppW!L>QTV*skmW3eI6W~5u5c4qHbxa3a02uQpT{F$pdf`k#}dj6m(+OVup0`J zccPn&CMh5j4QYV(oxuY}sm2`_d}vKP8WA3Pm<=82W?r|8=?+*8M>(OL*i{-Ixe3dz z=Tw5;1rqVfXRorSi5yc<6Q-*+oC2~mCPvVC;O40(pt@7ieCC1})<)H$?)Vhr8srTp z%)f845%bw&_R!d-lj>OlH{E12I$@7b47=*SeT--iS=ZR@#mZ&2wtbHJJ7-`&m$(Kk z^>U{dCAl6#L8YUi2rDpTs^^!4m3H%##b$YHc4+UEeGskGDLUuEvaMnV?;YsF7sinT z9v5GPAb4 zxKktLe1`k$zs+!ezINiNRj==w!!Qc@?Pm`LUk<)-{Net9IczLUMQ+0R0TLQ;z= literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Osi.doctree b/.doctrees/api/mixed-integer/external-solvers/Osi.doctree new file mode 100644 index 0000000000000000000000000000000000000000..84282c91ca85640b5822865e75947639ae00daa7 GIT binary patch literal 138195 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 b)n?zsJ=_`GPF-hW>;c`T#{iptW%B<6#<^F3 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Osi/OsiClp.doctree b/.doctrees/api/mixed-integer/external-solvers/Osi/OsiClp.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4b9200ea224952d6fc847d8baa9889e875e193ec GIT binary patch literal 114536 zcmeHw3A`Lfd8c(e-I6U?mXGISd`O;WNl$aWnUS%L5i%IXPsWyy7@VPJy64Tb=FL3M zp~J?;#%p+jP6F#8;n;*D5N?wtu*pIK3z(2VmR;B-KnP*uaD+Qc*zCq6u-{i*)m2?x zUEMS92|ep4gXUFtSJhYFS6_Yg)xW;#et7J4tIk?>7XIg)-JPp9TE`|0(`>a(t2=Pk znC)tR)@thI%_+|(QdonsagZ)EXYxU#&t`dVkK*XT7Z;gPfIV7IZaIXA!@kYVK^>ljk@?msqg+pucR z0E)dqeY3N+>@~5z!dXRIHtnozHd@wTx?eGzbw;n(X;k_>;0QTb(J;H%+SS#j(e1)b zNRPFQSvR%D?9cIwicvk>v1*v7@2u__Gx%swKf69&-%!7}zM_7KbK9PJd)C_1>9<-| zXV1}g=kT6}*>1W&(75g%W3I7hwsFidcQ;x+YX))wUsk7OG$6e^?M->cJ53N$xjTNt>t~U-g+cAox?0sZjSwf`l{*Pz`%B04{XqOxokkI zR)S_$1C2_;lTG-f+-*Q7_4*y3W?klM!`{SPztU_}6W(1{jAuFL`l~1tEn>P~A9F4v zEl*HhLh3=~Uez-?GZr5=tPefmIp>n9um$CGIqlXsFudNGF~kmf2?*lFVt)d==diYx z4_n7U?@U1`&KRkkX$QUHy3rEr^6Q4P>@YM#QjjL6PZVS|Q4mky z?k2>+kb-KGq$P^hS$k}@xz`n*vu3Vib*;`3iww!%P;mZ`H~d4y`+@L=*IyOrRJCxo zdUBiVx2nCqAsKLI*3dG*v?+vctZoArZI3Hq2Qq6Krky7|c|{7^K$vbsobj(bzC{-3!j_ziC?X)&R4p z@lVSd@7HW-jM<(w8m)n|qB=JR^DW%z9iM|4VO_(7nW9l^Se*el6mZ)$mi1pat7qFL z87I@uT4KWJ#U`j?uRHCdxf?haQD?=a(Vc|nljZL5*$S}eto@aC`*45m0A!>F0;Ub4 zXTUU`bk0|mG+@?sw%&OAp=qnzv&?Cj=Jz)($@L-4KG-=pH?R}nGdUX}|IM5gW{aGa zq|w05hDNt+wA!uXv+aI&aH3yvHuS97xu(&xZtTo-(Lb4U`zE>Q->({C|qk^)XKqmhbh(FeW`MuyaU__%%wm;j;ln zP>te$VRQl-xB{j*rhp{PDeu=)R;r-=94Hi53+*kCnJb~a6)y$lbJlWiAWRMI3!soa z4nKrN`%*}ON(K5aiP>0JsX90%X0S7GrRzD%^BO$&fI4sW_t&3rHiE-mp0hf$2DmGS z2lLqf_c-UcYEE33G97oO1!JmX^x7R9z<0Vm%_em21|;jZQ2okEt{J_Zk#BGCWQYE{ zh0O#<8|FV4>^KXyD>keI;DO**I2X?Lo4tnHKp5IELGtSk50 z)iPx3bqDod)L;J!80F-aJJw#0OdqOW;xYrwy%3orUdjeCp;g=9dkYI0=8&PYwiX|P zr2=!r#<2K!Ri|I+G(?}%IpR`nUR9n5^Hy zZaB|9(&&I|(o7tj>osN@_gkIBH3_jP(4*a6f{;n<=#^nsv6>SJ_ih`OTph6GZlAr# ztMoaFN_m~h*i|O$2CGwAF*#Y;=`W{^bRl0ftJ#!UEoDu^N>y{FRj_K=QX!YIN>&Cs zl`h%rk3u)f>jL|OUf)u=aTjMb<%nsgcg>aZzeuII6(CfVevUwr8IO9Dt7Cs&Pe|$Q zs0fA6E^9qyVEhVqILF`6H$*+t{0$UZteM9CJE-iGOfi9pinuXbz>PUbhw*dz0O#E7 z0XEL^Hh6B!lM{ok;Cn<4Y;iJE^jyc!CT*>1D9eDi4WIn7>!b-Obab}A=& zt(K^>tR0+MN?2svb}9Q^lw|!~^>_OwdvsKAiiTyaN_=NITS&V-H-LBnyy4C^wfS}B z$ebONah6UG+uz+xAPLvZY}K$Dk#iyKb+AE1v<2+mCOCf@=Rx zW3*`Hf}z^Mv~bxDVSv70U%A>)(aJdlu$sC;jD&a172~5?Ldp7DowexEld|9NYb?o~qGo z?q(BgxlBy$zT5WEm9Kpi8+Z(Ud~=|yy7q%`f8KrwesLY^^A`XLdKm6ITixvdadic= zwY0>w--}g{Rj&PVNHPz^U2~9iEe_I|jsZhWm`V@q!?mW>O&BdR(Xn8wqy_0j%Q^}x zD7KpFwG(7-Dgleq1X(>LW*SGVR>J5eylHmQ1Nj%VPOe$o^_nHjJZKQE#N6X{LMj9c z{B-~|Hcb~=;F92i8Y9mIA@N7FC_x!`QD@z)46yK){^Bjp!VOYuxOTEtov_biU+1#0 z7yr0e26_-41C_SvA(}}BQP@{OZr1ruj#~J{?%jz)Uf&(9H>!2gm%NLQHkwV^$sq}Y>@>kn2Do|$iS|)!kuo_ls#uifS29JF+ucUl4Us5g=tQRmyUYQY zF{^?ZGlgn+75k4Y0D3IJ+h&3<)w?rBuF> z&6bKO(<&B>l9?@)(v?c7kg4XaOwkZP#_xfO1wh8X!;v6Zn|k=db4!pdW++sTxN-Q2 zL_;#Z>Luxqp^(lvkS!iIn6{vE7zB3*M;a5pMKAAg z=2u4p8RIMcN+NZjdi|jwn1evQrfLzk>u+1Lj3OiV9v?|=CXE?ShcuP_33ft0C zQ?EdSZ26~X5wg&&K)>#pEjCiP-Y4y^phYCUy=_t!pqWf%_ zx*aS%?Dy{7t1(WBb?aYKfk8M!aNQcZ)s0>rb*)$hBe_=gCxN{Eo1iiFr!e&zOg-tP zJ`Jf8_Meg8&ye3gC%=C|em_foKZn1I?gCvQbzHOE3OYL%tDK#D74t60tJ&`DeRdnL zl}ak~9G8S21>zpemA+D>5OY%eWrp-tvc+sZU(IE$w3V5vW;0ncUocBXF`u5wT9v6O z!CUztbYH+*dADQ__!f-)N%YQL+pX9Q{UfO$AIX~CP)>~*fN1;pq@Ix4J}L->x?%S7 zIHOXi&6o7F)sxW|p^!Woi57AwKMUKoH2o}yl!c+B@Tl|y&*wTRx+!uG=->2x5?ddl zU8nV9S|?5IIw@GF! z0Nt27o@m!3d>OzRhzmPD2{3e{n}GlKyOxB z;iVLMd{`=E=RiN%a*86Rivi~TwnT?3mS&e=fQ90Nxw#v$qZ-f$ZZszAv1-4Ar>WT8 zWMk5r+?BYd2fZ`lZSag%m`nd%LorCD{|+c5TYS;y5P)BlMNHuLwJ~a?z^~l>;dVn< zov`t=fYr$tpo#A4j%C4NV$f&F%f7#|0O<8n zFlC7y39qt5veIrh6TR{gquIA6T$GWoPA(?dz1)h-nq|oy{zy%>F?y40)b0ZIpKH|& z2w>(Lfe_1?E9Glbut>?JGARh%EY=Wh%@k6#sZtd$g@wycp=SdNm+!;PcrdHRzyDXM z63LjTy{mtLLb|bbn)vr?J#|p{_>rpXbMtv$F?S%^54>uXzkj8!Q9DcuLfp;&fPj#S z@j@9rCAFKcpv2vLL3EOu`}U40=FH~#zdZBZ-a4Nyo{NWHrsY`x#z-=wer_MIX= zx-iD#mfd$2a{@DoGI81b$-FAr)7L2#J;XCO~s)C=Nd7!~G{3!g!qu&A&*i4dfb zBDiZx%sQwG;gogY?sq&}$_6=aNYZ`^o_gU$p%b1LUKF0=qLA6OT&|1|Q)J_SWd8rT z%>VZ+pJEO0P0D7RH9-D$tJfvIKFt5+SvWZdr!Sh;5vxfeimL4 zu7dB=s-QfOs3-YusgQqF^ZfnC3^&9$I^cg?>w3#ch*MeX)hL8;ene^n#Pw`s@ivuayLwm*x4C{{O`*nXo3j$@5gPHN z+=y+CctYD&JYVYxBxXG@+Oe80M)fSaZiGUsT(L)#To>`2#S;0NbLQrQXpMRQEIom& z7Y3HTi&x^f(`Q*eajhnUeo}DOG>z6w-^vtF#?hLW8y7tL(8kRZm2N1VjF4f*o(1{4sHN@w!YGDHmzQGq~%&X z*inWc!&$-DsY1`Lf=Xa|apx6?WyCntz z?RLL6*Y5#lg!8#Z(jkI>@sbCGBrACokuZ zCFQpe^7@wgq^z%X4%<9#&&H^g1~cM-i-~FdD#;pcA!5Xp{w=mMc2`l`@HH%?vkiWS z>k`sg3{y!^q&U&&b**O2!yF@W@$UWcP)(*L_Xk8|`tGG2f!qz%5qeFa;G*o4>I>1( z2j-|R09?Fa4FeZ1#1sJ+N$S*ri@OxdA2^9%!8|hC=mj9g9g5dRrSrra=cV?W3qTro z3P>ZbGLbafaPHp%Ysqg0V8;m#JMvuNB^MooOqVj2RjgL>MXP9~D;YDJt)xsiV_t*5 z=}cC@Ag=`l2w;#IxG5Td@K8?;2DwkFL>gym$miKmNQQjG1>I?aL7pvXssf3OtKmLC zl6M@#Dx#62!}@+w1Ck0t(SYP}JtZ|Dsi4FG$$%UsSh9{3U05=Zl}{e8(zi>ksjq-S zvZm_6$si|waPqux3*pBo&sEqU>YbHgZNj`fJVAiAiaBQNk~97eE#vlKs4NVZd@Er; zTD$&GOCki9q?L1Aa)W4Y89)A;oU2c0Noo;FmvHzr9Ewo>4iSfB;)F$%5}^z#L^x#~ zLOJO%%tk$LNYb8wr;ck){O|Hn&6hNz|Ls1?jM8yP$)J_trJO|f+!p~2a~#sfLCc`a z3w_X~FqsC=Lhhtehy!45_W(?+GU56dp@3z~+*||y(d!W9JG2D75CDK5N`?IX^0Wsh zj(`dZa?4JoQjsv_&*i3kN;E6aU5pmE_6k;QGCH|xt>k-1=%nJg5}j1!^FSI{gyG{L zIvKZ65S>(&6wyi5a{+hb%{gfgk7RnfTx`iQxFV#ve8Pw+tk`EvrEI6l767j z??F&U(SMU0_4g0O5e2Z`4TaQDAwKb~v9>uEYunFTA{UL-|G!UKqVEO@c3?Ne1Uvpc z$+{@0(^n*c=$lG4=1W*8zQ#o0NmK(Oa`BG%?odspsMEKJ$n@ONjzI2)>Il6iP}E6w zH1vfi>cqUO1)xq_)-lxSTuc$viKI>)>NKfBo$3(aif@Wg;Z8{v?o@D{U!mN7djZH3 zz6G7dxb=ie6UlxH-n-L+@J%=h4G7e%aje`byIHyc5Gp5tP(m#+Dp_G@ zh(~P>Xs`m2im&@VOp13NTb)Lu2A00B)R>flP&6jh)l*VqQVL2OlTyf1LZvE5(?z8e znfdhc@APd`YwW{NNY+?AE*0d)k4s$|!({jYs*81oN`+LdVFehr!*6hLyjd#_En4*^ zB9v&od%u=M2wLSKt@CTbf}QKY{z4w=Zi6 zYoRw+is8OUDD?K*KvPzD(L^hux1i34Q`SLmNsnP>-1xMTw6BDxj%zk0=uPP|(5w>p zrp~%E!gDE?*^t`Z7$trXZ4?9H#{D3i=u8A*xb0LTabURXJs1vLnZ|5?Hqq+ORv?y; zoFqawtea51x2kHi@F)>e$c0wJ^>@{JzoWrBQ?+WP4*d$LkRQ0aWkJB5DC>MAZnsr# zi4V8iHwtbiHGqg5!y9GT?qZ2FWbxp(B;aj|=StX4kvbR%#>}65}7m9-Kz;{6Z32+rbKs`W zrj7#n-7ZxkjZQUyaw`LyZd`@W;E5t&O7rmt`1Al6XO4#2qBipavc%#0BYVG|kC?spI9{vmRoZakT$PgcPlfpVE>D!O`5xW5a=8(9&2GHol=H zp=CpW1J5UicHm22IEM-o2t#2)pYtyJp|&Afc+izIR|+eq-ttW z967$0N+%9f_*@NC=&__m3uoF87}9C?XW$UJYk3!^GOpJbZ}dAWypuJs;e}EmKWup0 zLSRErAg;@p%*2TKyGCw~4?BGR2-u;r6|T8g0Eiihz6>BLo+|-FMLrQg#K%DZF>awC zfT$`d0*I>T0#?YIbLJ)i5SOw*#$5nWt=HTd$Xy;Wb*NB8G8mO8qC8B)D;H42fT=mT zDB_dSP}ZA63i*5j3&n?go)zMaFf=i^q2zU2S9z2*)P13IM(A_i@n0Q^Zwf1Z2@0uU zMSS900&jCJM_5tM8gGtVK9;I{ku*o&V-&{19*YTMeT-yX6g+X|CcjklO{L1U3=73q zu0_TZ&l{@A6i?g&g>-%^4sY5K$lXvKq1Ob8C(1@cUx?y~%%xiZo_IZQ+me#Fs08%bD<{r1o6kgsKKNk%}(pm}*|Y6Qz2Ev#QdQ0EU?57^0MwpGlJ* zxOFT#ZkSFPgQ7em?L2fxd-m?R_5F@EvWVxB8X^>`>K{i2&hIY_qr9{SyEQ<3yWXH6VBgvw8XVQ zn%ji%$vhND`xFt3WD13&jLJB>ppt}B)&XgUJcgM~;0;OI2jQs>NRvbi21f^^DRN6+ zR3Z45lx-m=UU6`%K{Sbo0z`Wul}sEE?d=3aGY}55y7hJw-UHntho+EBf;cnewSDN& z%)wXQ$TRQ#eUpj1>hSqbT!MJ_5_RK<1!ceug13MR)wp4M@XGHQ^15*RW+23I;2Wjk zhf?1q)rDlclMJMLW;B+M$!%x*JrAy+8W8YYsgNH8e9Qv@$=Bl&)JD!8FCT8TkG5RX z0k86gw-lx(uU$6+Mkni6pz6q&!>eQte7NBQr?BB3)EM}d`!1=?GS;Yg9-LzonM9xw z9}}Q)b3mrTInlV4_}-xyx6leuiU?XFRH>*|j`CDwQSz)rX5$w2c!hXREE5Q@^lk>> zSQQP%V`OzoR?gfU5Mb65`l%Jjgp0w(uv;3yRfZ>%3h-|>_pIk)t z+mgZ4&rK9G`+F=DA2ho%;L0*A)|>E^z^lU1rGCBQ37>9%HWW(~Z2iAbNDa2)6CZA{ z&DlhbV>4%k?ayE^yPP>zm;aQ|)=QoOdMNprfZqQiSr-La-Eodz1p1~@CAks{#aEI= zMpg?$HJKu-IVdDAb;XDP0a-=vhUy5tCQxKm9{l=36j^0{{sNHImjE{|vT9(8Agd&G z>X6kvibzdj+rg_<ab#YWxZth=vQQtbX)_xue$y%#NQG@*WQPc~x2E&h`Zu2lypKWp1 z!9yabKh(0XMNq#>gb=N1Khu&3K~QPsUWYnx%qPe#Ea(IGdDpJp?6+!ugQP`IUGm`* zb|`xKErn)?PKOdb4Jt=CWgU8Y#FI3$1DxfgeIGn^TodCDLkyW#XVP8R!0X`J*UqP0g{>{fz_L27JR_!OEtji zNpE>LvN|m_T1HkC&x6RSB9jO@;bVdco~sb6fcnI(#={$NX&<-H@{|azs!B1~F{D-* zT2)oSFbCQ$!n6`vja%4bRjg4d+aR>6qQQ8KtWHVe%uN?sMac$0?qB{*5n9z-F3li| za8OjxDlv3QXjL|W;g#!5|H*|`*KE-_lk)ULQL`~D6dyIaT=H?_0jmKIn67&Q_xW6V z$xzHtQ1wD6qy|;-i4Q)|fvR%mSe?C%(B|H(YO9rkswnfASl)7ybx}ao=Sw2cHGUJr)^M{neqGOhMH3pz5QT zBA_ZsojOpps91A#tR|e?J7Se*jJa~J-LyJJt7-+JRx=88HRHa4N?pT(VAg#C%&M+l zz+2TB0>G<#z@ETr>Jl7KQ9nOPfvsk`SS)2ynNm7EWfrY$)|x70)3sD8m#$bvUtsGy zK#>Aa?0dAsN&X=e5%WiXGSJi~^G#Wu*APS>B-xl!=DS zzNGIzH8`sv6b;V)y`GX9oK;Zb;H*}@5=#3;r0$}$+G5;u`Ki9WYR&#fC?spP9E(?g;Ul+y07>2 zommgwkfi-MJat?P<%e{m=5kudkL^YlQoV0S-KPsdd(kK`w0FA??N!rKz`n1eQi}uo zzS%o*&ZXgojyS)DZD9ISIS~f03>EVj@N~A7g$RWkJ8?!^-UbSXl0fl7E z)?>&)4nr|yb(3A|5{4nG%TV9X_nK7}c}1nfF1bK%)Cxq4Azw$t60MB~wIo6?WLmk` z*9Z}7*mg1GkPMvLd$mo`V#scT!rg^X47o(aBn`o+mnsAmD4enmL;kF1$(i-w4N2Oc zhNn6VSuIbnP&y1bypRe*R_9&_hKxo*jUlUPDKO;EP^k@vA+zeGCD~{gvRB#SW5{0B z{x#OAZYLk5j&_uaK7{}RoRA9nG30v|f*~`3Nf>h4+MSCG@qMG*EFVmK>j*Hhwl$$h z@Y|$z$Vjl_xe^IhllA;}!}c!K#uX60CYIfWEvrXKoTCcqt3yN*4*%>o>O& za@R*pkSZLK3{E8uDG%H5%5^5_OIZCWp1a51or6f;U=q4<~);E?M6U^pauDouJJ zI3&yMx1_FHPoe-qGVor%c_^kS4!Iu+sc}er;#)3L9Fny|W{WpOE*VQhoZMuHBj# zI9Dm6SJPP%*T>52uPorp>{kf!s;t69veIrh;cM*V_+J1@OpqeJCMXIl`oaHfx{|L{ z)2V9Of=@3M;mH3~x=_jHE46gCU>O+!Df|L-bpR>+bGYdL~j@swqe^N$1Pbc(kQfuhNP)OELJ>nPS!jJfEQkVokythF#GAb-@C1zm0 zl6%3~yjIJm7RM_PW~24!W-W;j9FJDc`|M?_ygpk^Evm4)dzY4m7NBz}h0mj*09}^w zFO3SpdsYT{2KzglvJRko(lelJK=Xzq?T^D#I_3F;JcCmn&E^m5RAjqUadL!Bbmeko zln;sHFl30^`M#)4R6A7hVcl~bI-ghk=Yr9ysOs=E+eiisduGn!q?jc4rjJFPB!T)mc1h-$8GbghWE z#>eIM`T(oO2!PdS&2%jwz*KTfllw;uZ=bS*nsElBIes zfL6RYXKoTCYbgulY!}J$6knL&6x}>VhOa))@(J->1d2+Os_Tz}j9Y4q*bsetl;l=` z*%_hOmY}5?p_VaX+%yFv=4TZ?NNk}JAC#?Rc;&jO;N;?i_g)IFL`qP3wr&3{J^c!~4R6lXx;ka+-~!N^;zat4%-&6`Zz7Y$>SJXuY9iJGg$rN;aFAWD-DmN^bs>S|FS7K;vITB&q?DwQpzi^f!{SgTn@tCq@H zQ|VmZ%B8H70AfB3suKV)|2N$9+2c__%;gvQE0IR18Y21yP?jMgaS3>ufS8vP5L2fn z3Se{evEc(ddFL{0BpRf;M&Fleuv0-O8tg3UDXGCu1tku4#*noHfL@JlZ~@R5g}EPb zv%c+Wjo%N2WR2H@qCswdxuB@2Wm5}^zJxFvt#2JIi4ahfRvs4=eOOCF3yQjw!sq!= zQ1r!wf5{RGO9mw<8tm_I$~sW=hn`hu1D`h}Y5xN}bzBqU2SwvezqF_yD2-V(Go;rr zBA|-HngOaieSoUY5Gz2|?@>X<0a>5)K-P){pL}Yx`yId$rSCT##m_?-iP^RZYdbj4 z4xgAh3g3Kc!*`()ylshgC*iqI^vFCMt;Br2PT!J03I+8*@L|<5F#|bFpKu+q201z} zR@TB7q*jiTTn!VyUu7h!R;SmfHL6C>^6=i%gBfnHpU|2B(eDuOhWAQ^{Lu4D76Lu< zz7D#|N$lguz{o$58|TBB?;HVVj?t!2Q29xzH8QBIc&-GM75PM{3?BzU<+z1{pt7o@ z2r8?d3-~c_&Y7D8R9?ygq2ZBQEf?TVMc1#yfl0EwZu;YAk^deX;QJI5dHsO1oFQUb zS7E7SyeqL(*%E|TuCr|?7fb!Mi?mBb!7&oB)E8l)_z)EfFbc&|X;6UgaJL6}hC`s; zq1sL%&^8oOL!kJ?x8&aDoTr391!a`W#OmTEX#)5BG`J;7Iwo9pH_5svxaIFklF&Dm z;+Aj1Lh+Sik#Wlp4Ao?cTfUEoOwS#~Es?vSIzq1r6t|Qe8GRv&TQc8w0l4K?fEyRL z{3@mhZb?$74!4v(wg9h)HyaolX*2@}<+TcgGMyGm?62H*VEXo6k%d>@eAAKJ@H6rI z_wQdo1mztrNGZ_q;7H+~8%wz>0k`10wB4S$cQ0$kvl2(z4KqoqnYcc&qgQU!0zsEA zB#(s(8Coga($QcfcK9hQI>4DtmkNfFDdci_b1G9aQ#p7$XeyV<7Bhu>wNwxQ&Yyvf z1pv;Uz)hdE9R=WAG48KK8p>+8=PW2B!#(0c<1_&{*9!`xfHD^}hw&LSzfsFt z{kS0-Tv%Duo3L8@Ez-8=j(exRa<%cGm50tU&I*{T36IcmB+WbOkM#uAWA?*@8)-%o z)>A`GGarG20q+4{E)7(FNM^-gQR^0yOXrHV~!;L z?1G=^er0+ZU|2arO3Ywq;7XBc2eibi#h!pG-(*0=%b~`}2EHNVdVE77x>(&V_!*P#A23XJj`!%bvvq4k<3_ zb1xpbll>q4TZtlKB-{&5<#H_*?PMYAtFtW0s6dL7*rO#;A5B~B=kdX@0{nh~-m~@e z)GB%%6k045C2e~~>Z1JtJ~1uZA;{F!%T(Kko zD|UdtPh}8i2lzAlk6BfC`5(T@+)6Z!*@|g+XKxcT@M#&?`-MGU3rQx(F&wLBbrOwQ z!hjp?R`WQf8}LT$TB8H5veB98&swb>?iAzR!(`%69XEUFao$7~K6D8i$MA7ivh`c( zH=1U`Y(N-T2TPGx-!$$A3h?&3Uc1wPmYLR^1&|kP{I*+(ZhO{BSjV6Zh<_b1It_>x z=9|E$4L^Jg|CM$Oiy9>CmHZE>kbfWeJKjDpz5yudE^^2M75arAv)Y?@z}>qirxhNY zNIbAEf&UG)QHup8MTHef>`J`o-XvDHBXMlvfy6QC5Cz>;esIF2>&75VLIp{qIRnbk ztItkc>wCuZCkgi-j5zl6O<6|1?dY$c)}kR3MiSR^z@{*r{y>t6yeY1FE;@sX=YbWl zB9Axgf(ggRWW!uO?;5w<22sOe@+Q(BszlGSON2{zL+?`d`c;<8&#UDQm_>;yX(m* z<#>+l5a{a=ZLHX2e_%`8Hgl^f*0pTu4b<~UXr}BI=|!~!+1Tu|A$V}3u<)R!P{fi_ z6~aV(L}dt*>^+88u5-&zZU~cosTN}tAa`sdjaHe#LfUAR`&LsxJy{>CuR`D?X&(vP z^Dj9J#byvjJ;CD9U1Q+-6QPX2A{17Smb*wbcVTw27}=F*wR?436V{D6SRQsKm8V6O z+e{ScQ9k3#uE&Ow9Sxy+1PZA`sPKu1>4Rhaf<@$=w_7F@OD`WH?dDL4D(N4b|*xS0~`Qvr%MG3w8 z7E~qngkAvDm_3Dsw8reJ72KFPiyV6Q&qFnthTi=X5t*Jl+7ZazP#vMy1R8oLV@LWz zk04SxZZptv0ik!7T?Vk|r=UCR1g1#n9Z5YSLhlYOAoT8J#N<6pqUA8yjzASkX9 zNwRlh?}XF|*a~6c9nQ%asJ>7S-m`2MDmrxMK7B{3_Zk(1qW2wNrl+LdcT`YXthm3| z=-Z=KVMn3D`nbO!2mZJ}d!ccE!`dT%sM+EL2)-zty5`Oo33#Vo)Vls1 zA`-BwrJ|h`0;-x8I1#rI?$go;2?dPQ)bLQiNA&d6O8O8KS}Y}9LZN`eYGYU^;5+m( z)oEj$8?&yUA>!uq2N$LGM}*qNV8D+rp!SEng(_@Cv0*AAfq$v5TsxO?!GwwZul2QS z#m+sd_i(|;p@84f641I(?g(8Z7wT#^+9)*2n=RUDgi5?a6~E9j7veW-(CkK#mKqNk^}Y8OGFMYC$p7$=HKnGdf}C+bGMP}SorvJ)ems2A#qs(W&J z5qt6(??eSUILwJUq8GKUe}{0Q9@SFOI#B^m!knnrYH5TxQIVP&?nJ#+Pfx9+zYB#H z&D>zymd1IC2q!Aghhek%r}Z+`X=4m0>Whm~dzcgTjRn*mIhX!GU%7TJ`&`! z*NWY9qMTLkt^sob*(Kk#U44blA<()~t_F?lN`)6xo~j5!o)Hy{pVyB1kaHLrsgN%y z>TYA%S!XSoqZsrY1)kT4_%GI(ja`dWAN$bFNje0wPwpV`5XjwkK?j}cb0CW(M|PHG zsq_n7-v>^h9FRIhK7pcoE@F_1=YbO_iacWcF+NtFK#5x}>;y{O^1c%&u?vY2)`~)6 zbTme`DY7gRPoSutGdzqICqfFGKv5LrvD9IdRW*wzP_R-rUY`YE4^@-0`i0#T1LTKk zi}D1DLS{;h^qoM7TPSz}MOBi?RqR`J8x|(FGj$Hg2^6l;&k%XWJAraWwFYNKQ1EEg zGfvx|(Pm0I-lZ6m;_T(qSMhk4qMTAJ(($gi#dOEJ6m^IWjM!xV@h(L{Wt*2j80GAo znGm0u^OUl?&)i)4UWZ_{#PJIC7eirOgWZp2NBo_27dBg|Y6p440ZQ@HJU)H5( zbRv(Jsx0o(V?%qqG&T$3@lv@^1h%d^UP{m>(i^w4ZGq|f zrSR%RzA2zOKS)nxU5|ydC$dI4UfNcjAzaAuQujD2o*oIDU~DY@Vbd26B}sZ{@op%j zK5U9ld?!n`Id_kI*fdHK93hv<#?sk42p4+Qp{E&dBUzX3(bLByvFn*)M}`Sgs-vfm zNYz1}MLc>c*B-009wLp^^EF&&y};dU#iQWzE>ZlG!eoy?c~qEf-qL_RcFA@22}#I$ z-q>;B&^~*QR2}r$vlq-4Z>?N?tWJC9u$`u_m7W(q7^7BtOchOj%www8lB|n!UKpwp zjiA0~*?D0sq@A5k>UrUzn#|4%6Ork;W9NlQR(sfVfYPhm#zb`YsQ-TrRF8C5Q{1iVxPj|{0?}9ls>0A#79BN ziz{}i{&mVCD(<7tk@UU<+$1Aj;4i7g<7&!%NsQNu%mGT}jw}s^0vd$(p1a37t#%y;0 zPB$MyoA@9zy50~o*l7ay{W$f@@U4HB-#c)gO|%V1emPxEADrtoX7P2WH<7oU9xta2 zGgB(%s>W0%Z&lK{VzpSynzei}pE2RIdBqe@mA@NW8#q<|7LNs2Uhs;{M*#YPSM@ln z+@>;BXO~>ppODH*lZsl`IYF;iBX#{x^n}#9t{@a1UVlGQpogtQRsXMg%4${rEEJMe zT@3gc>VzV;Y-vQhO6TRBeEOw*q$u_YT~= zTjjimj?Y;Gnw@-t!OfQt@*S{_lWK1@s)uhjpKH~OezV8QB%Kw9t>Xjx9uSR9*n8y%~=uW7)mLI-d=a$5Es-Bc)I zq{gqkT029=*7)ck*z@(2)H9@lB|eX!UXZcmO(gbDK;m?G;Ztrxl6vau@pTmxlE;^R zDhamNf0%zcwZxv`l@Tdrylk*m{j_0+#mk~}F0QYjD~Z+O;s@eo;i)rD{J^Zr4?HrU zPc!PLBSf!acd@sKZ(wf`C({+qe1}*&(J!Y>R|c(yN)s_i=Gc3@yYr7${kTJ0G;;1%*b18%;;9DK(sG=#sWpyatdWZs~x1-$z==&8l# zE7Jb|zMhcU{wvtxR+;(o+$e|nJb$dGt+vS@f_dZ*y6)VMxk*!&oij{)z9;EZBLT;*< zN!3bKpL_ouXl=l~|67j**}b>_fDhrIYyShOTrAg~6Y~aeq@w?eo{(D66@>Ws)qPEE zb&}1rN^7AWzY1!RY;DyOip|#WE0*ng%IeX31r(A;uQ)1Bj};4XLz&~x-nC-?6vlzO zHnIONBw=0hG`r(2KYq?GllC&u)|d+mdnM#OVUNMDyO6L~xk)E_>h~=lMp3^z^hyw0 z{kTC6J4091Q&Jmb1xtLQ8fN*>(^FR~`#4;xm-^W@Y*i%BzW!BF2L_XKF<%u0oM>1UxsS=RNb&fju8VrmJY3R^ye?uDEMUXq z&!P9+b!LMA$o;$_uaoBq3pS(g!4@Yf}6_mJvKpZV>J#^N@2>z6UTBJX>3+V#*jx*nqAN*Y$9 zuZ4=4V#X*IDz%J}DwtE1TF%VZvZeG?He*(E8F8y)8pIM<3+!hLIE#M|t#zHn zZ(@o#izKyRXVKrG&X!8YG9XBFH+&?t*MQf}TQzv|x$yp0(h6t&T))z6RCnW-Kv7`! zD=-iUH%Z3rM=^Pc>)+U~gbTK1&Au+<2=|=xZzVM)ZtoerMm2F0{j?~x8{5L4bIb8h zp{nidme|?dYxJ7dZrb`Tp-GrPUc2r)-t9L)`+PhjgRe%e#_fOfXpxBnp~f5h{Dp3- zIIH2CsQ3+3*j!E44>)Omc+tLgtJi4t+x_lsR?|2J(tr=7%KrDWUH{u3ZIn_K-GAGG zbP+a(Zf`e_Se=_&u!9O8VYQ@?B+d>6AaC_EldRvtZaCAfxDxp0e-%ac>Cqrjd<$Tg zw4>Z$4GDZv;FgH$>4!~+sa^AtfUG}qquYRB4GSVO%%WMDs^+Flb1Gdltf^Ekn@{I* zg@RE_3!eZ;T%+({&WD>~+!VLW&MKEVHqo<7uEX1sHnS5I3##oq{pNJD|2*tVq^uCY}$qyhmP)6T*zfDgV@^lYRf+|+kt zY!%{uqMCW4M0`W6fn?oHO?7@gnjX@(P_1b9D-=z?CJYMC?@LaOV6*(MsNYqEX{m=M zSF+XRxVD!_LeATWm9B+P2}!H~!=H=-2cj)%GaINy4@%zN@eOv$8i< z|5I?qXwy9d;cN+d8EnE;J>ur#pS9$*uK;u#;di2av(u_p8$#{sgL%4jZQrpRw0PWp zEzs0WYs!$Opuq{JOezQoX*$cuMCP|0@79LwTCC3jgc=hOD9(?IV}V zL0hozw!sKXLY!dOlJHWf6e9We?p008ibdi%RH7p<5?KXo<>c?!SdmtfJJ}*}52nZ> zk)%diB$A~8UB>wvV}BnOLB1jBE(*5GuCVO zjOO6LSrvkI2U|XH&J`>A+GImTaW1X=ekwg9lIs)6SZ%)q}O_On2aHHrv&H zuhHyI);h3&wOZ!DS#_t;?87pb2Nk#by}5pGFkL@;+F1*tvpPnv-GQ3cnsCGg)<&~) zaIwDAhLgW@9jn$jHgJ~h893|RCX|8hVaTwKUiLdpxZ2ojSIZTM3dX0nXHypz<8$R|dv+EIcA>&?_m0)H$er@hMz3Bb z>qKA%=+OdAquV7nHgv4HcBfZvT1PAp=W=IV-DrB3W6oylSOcU8AVa^)GL1Q7rd8?B zKz*Bz8l4tM5pn?LG7ERsLU&XxWC`2XXo1YiR;$`JA=kiJ+wawO7k76XkiOXeuxxcY z?M}IFw9KZ}fgZr7R(k{IY*+F^En}pXfpdxUM5@Am1V)gv$*q^Sft9}4|3E72oP#`o z?se-Rq9(!)&c>$En&}%e7D(KL>*X+joO3%?wcRnxrUhU9HGvGGBh$_*@Oo>&CP<`V zGKHwGayA+LUc1b10fG$bw$bd*&Xqlt1i_LU1Zij)O|0;2a)&58_CCKg*R}d)yL@aG z73v)8*j&47xflg4NwlQeD<5fe8?MTpT{atCqtZl1Xe(E2%bd+P-avC&GoXk~I9t*i+;Yy< z&ZaqQt_-8Zf>By^H4*Pr;Oo0(92(9A^b=<}5L??b zDlm%7UVU(24SbHZ)0i!LgVST6+?_)WIpLhsJ>KdW$IA7_OuY&JKz~;@+o<{*y0Zoh zwEOxns=FYlbIG-PS#Gwg1{Lik)jAyNsRGvJjyI4p5h0X5+@Avyo1k?B0;Fc(1ZYpY z+Gy242dG`xf`+2ouSnS%v#7hxw&4!OmBb{0%FI?Q6GrfHXhGewdO+j6D&#s`wq}h+ zvuv0q+FjD>%@k7wU2WD}n|8ukVYQBsLknwMYXZX;G_e8S`Gm32EBB1fj0M&S^ky?O z3N)(+<`yhE0JCV#oh`n*En^l)!ELCm=3T5plWLOttMR6rPTGfXmV6=p{0jcuj6WX* zgv9;%9!77IpAW8t6#4n-7^KM0wQC?ne)8)eMSc!!fE4*LHbIK~JbDhK$j>{rK#Kf) zc`KyI&lk2qiu^o%0i?*!&n|)#`N0ou+T;fhN7>{D<0x(NgS&_}`9UB=vxoda0KpUHL7{_ZGbO4*WTa{Yg^C zywq_oMY{a`nC~gP_Z|Fs%PN+7tCxD4mm;e1W6U>!`Z0+=-}F-7@>1XSQbdKO@bXI3 zqa^-3?WKO^rT*1R5mig!WeN4|di*(OBTH@eQd_(fQOTPy-$B&NL-@1qY?fN@r8ame zqPj1}eD|UL9>Jeon^|hNmzwlaM8zM%e2=4^zaD?4&t<8DUg}maMTWv#FyE(fJbV^^ z9zKty9`RBy_fllYd=c|~9LLR*_;dVxmb%|dJ>aFt(E3Zv_YXL}euzJByO5=R&r7}C zOOYY?e=y&7aUA{#e?A8vB63rI>7~d3{bziNZ;ZF`rSkSQ@LE?lwbM(H;d>oE#gj7R zOs0Jcj$u5VX-|78GPvK4_b_(M#_%%xLrIqUu$Ll3|0#Tm+lDsoEZYAKEdfdWcP~W@ z!_9b!%UK&&y!M4?;7IBsFE#F^h!q)!d|*W?eP^RMQxV&_vD&~5BQU;TPu)A{kg$BN zkrwZ``M`9;%r;wrL!!Q{Tcw*`?zO&bYZ+Bi{}x~U;9GWj1Mn2ilk1{Sz{Ll5soL)2 zwhQ>v)poN9(+cna4)f}L^#0>8V>~vv4W@oLZ3j*S%pqNv?OcMM*CgIf*4KgqeY^_} z1iS6I`}Hw*qtEwtbb4}jn^Sr|80HSno(XquOI#su#lX7ziUdS_fe)YXyaaQS0(^j- zd>8r*&i;k&wBh=ZzE9!XkX5^48l&F(GG`@D8Q^l8gS676jAa$8m3+}ETIov0%w{Vo z6YNk8{-!foy|kL~rPVkcq&1Z(rc0%%LJmw)YN~2f4YOD^Qdu)qETvPWlwMk|h%c>2 zPX}pLv$;$r3#tUKyeNSEo-#6dGo3DGDtRMg6imIe-V$G0zjHcBE1fb5xl#&bR)O(Y zg6P?FsRri=4YQESr?U~#`bd0f{n6KP~E|)i_GBq=m0}GadQzXSqAzv*O^ds@k_|m%lbdZ)+gtv*A z6>uU-#dIZG%;yR)G^Z-XsY=$IszvznbMd7$dn%<>8*-f(oZI+QK#7Sg85i{!F=>o3ML*b85Iw&m&I4&%i>EXK^B&?-b1d*p6dEW btJ>_FxQ9D~+o|hJj6I;+^cY~%uT1`bqWffr literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/external-solvers/Osi/OsiCplex.doctree b/.doctrees/api/mixed-integer/external-solvers/Osi/OsiCplex.doctree new file mode 100644 index 0000000000000000000000000000000000000000..459646089dba93985e157cff1ea1c4d9476bdba2 GIT binary patch literal 114826 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 F{|^ubz&!u} literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/index.doctree b/.doctrees/api/mixed-integer/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..56b75de5602e86503cc48611ef1c63a21ee1097e GIT binary patch literal 7862 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/misc/tolerances.doctree b/.doctrees/api/mixed-integer/misc/tolerances.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4853517e77253e7d34d468a1ae125047cf01f54b GIT binary patch literal 70715 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 borY0sndoD$puan6Vr+8_jUK{dHvMW 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/modeling/Dim.doctree b/.doctrees/api/mixed-integer/modeling/Dim.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4cde1678d60fc2dcf6d2d35b357c52eee71a7697 GIT binary patch literal 18594 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/modeling/Env.doctree b/.doctrees/api/mixed-integer/modeling/Env.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7db885adf8aae81eb0c6282bad4e61282a972d66 GIT binary patch literal 20990 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 A>Hq)$ literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/modeling/Expr.doctree b/.doctrees/api/mixed-integer/modeling/Expr.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c812350cdbf8eaa8b69082342f21ef98c07b559f GIT binary patch literal 71344 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 Br^5gM literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/modeling/LinExpr.doctree b/.doctrees/api/mixed-integer/modeling/LinExpr.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a5eabcad8df4d493c22b997cd3c69ba36330db6b GIT binary patch literal 146647 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 SCh4Vxv+J7sHRsKEtN$N%UmZpO literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/modeling/Point.doctree b/.doctrees/api/mixed-integer/modeling/Point.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cbd060914bd4cc3b9850de7677e5628015d5e610 GIT binary patch literal 126581 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

SA;st+y4zu9e09bO929Q zu*}#hfG_g}@vqNu75(^rp7DR!Xk><{yn-Ph>MuYXT!{KhlA;imrj7}Sdc9zO_SfVt z;?j{5V0GihO*!}`{UP0)?!_TgubfxRUup#Sv{0?rib~lsEI7HS2wwwfHfy?JR^bJ= zieVKMA3ias>EvL#RqIy%Bu69tsVHPeseQ9tq;pmHr`@fYKG5r5oK3 z^5$Eaq1+`|db~^0E63Y2zZve{G>F9~CU&J0ux*z9_+=!>Hy_dcAckW;&1&-GW10y>sC&d6=d`5F-oiFI1t*hr_Z60Z(P{EbvG0#I4h z6{}oTbgf*jSw^u4oBRu^X%x+ZT2_pb|HIz7QzfACG`JZ6m6?%MK2(#K=?Ip*5DJB{ z3-{>Zqr*2Oef+2d?i@Om25I< zxE^Pg+zLquc~&(R)IANSBsZ)QN+KA)+?!V6u(Y#`Kk}f9cSAsz+wm63E#d?f)Yfs% ziH6zL8{PK)hF3LXX1=vp9-MkEO3+y_1)iTTFg(**Z{JCZn>pqL1Uw03WiSgG&KdL-#xdW?u`x0{ST}Kfj9)Ey~YiJ@g-V?Q%WDnjQ${^Em)V z=tE$i{1U3=5tIlT%6CZxr@CJ&#Cn={15M0?NdEsBho82s&{JuXo1|PHR_wQy*+GitEy3(6{im$W7iqQCYN~!+93#SN$tmyZvIQAkMLJX#`Cv?pQ@f zDCk%{j%!$pPe*~6+y^-x3LV2U{KFs%!Uwq@eg&rNZ>dbBScBSxkF9+6q^@1fUVBhh zQ+WoD&`yW+zt8QIdInKBPgZW%;@wKE+ys)omxRihUh$Trgr9XAPEf8_vh?f#PAGNH zJhd(Nc@E=b}DdO|^ zj6dS@_;aQAd4^ba8p7v!78{PtJ`b;82%qQUAP=t3^EV_#eIA-RdOlC&eF%rZ3cIq^9?q!sc7C^yC}w%BhGr9~I8vRO9S7i#rVwP00>O0m?0J@&A-Ue^rx z2dhwKQ}=JO|2}Xy;^%xbq!63B<42a=lm-aI)+hD(9dy>-?FQpytWh)-vDkB z?BXgk84avEgR9-Wt#kKAMq6%UB!oPh8SCoga7uEsDWN1>ofTr{L>4*{d>sXEjNH_X zK_Sq`eqYC4Ln?By4`HA{J-bl~sK4XV37S#d--!-W(BFA{7m{v5yB@QU^kh1?$pUNP zmCFT|Ri1ev>FGF8xf9o;Jql?$AEKYkTygl$M{b#fKK9D4I3rY5GMBpT{iu56r0=kOi(h1Jr1J)CQMWO2eU#vYRe3coqwD-@@4m?l;zw#b$!zQP72GhF8t3<1~w z6Qsh0>;FYk6t2_M9E9s*Y2o_B6^|iYC#}c~*T;5YWwXF_vjArX)s2c-D_hMT0p6mWy?xSyuhq!%jR?0@s(p&CzTRJ0nz+nBfRqKNSjLT4|o!yD(fIO9R(K;v2A# zf?ZsZCZnHAamL84rG!wj<-7)`B)6OrN)osZBS#=}zU2j`?mpu<*q8+WlGZ4mhPO(N z+n-7WGl<)FlZqH_hxQ2EK7mp|al1<=XjO6C9v!cviQ8w~Gd}vXACTpK>;I+%O4{Lfl z-2O010mbbuo!~rAh1;J4G%*V)#qCiY5liD8wU!n|DcyWWna8YEvtf3YJ>7O4YJr zD#Z#MU1KQCYPq1o8yvnZLze&-Bcb#v+#C%yzdTfvn8gS--vfm(%`?w!S{R#e4q|ge zL<6=@Fo~W41kYkx=~qqeXxaykXFJ(oSCq5F%|IW) zc69zzboj$~hYvz!ksVSt+=LynAD{!9EUbTrl88Crg;kyoR(%zvfWj)5PLOMsD$4PA${4IFc^&3DLo_6BZ-b|ftA4_JwW)<<&%!&j-Di9z6tIev2TX!tbGf~vH<*T_w5uf>rWZ;zRk7etQ7vee?t@R;fQu3MbRpav4SZ5VHHq1Zz^4)v`W=E#+ta`&Dxv}S zB$&iiVX{TK4QGcOK1m2A!>4hak{musC`sTGjMsqh=?=Uxa`<$ZN?{N_-9jp2@ClkB z(8M316j1o&(g~VF96m*d>G6k8Z^1i^!KXLUflU_H51=Gs;1jDn9enx(N&$sWE}bCP z{1_nioy2=+??ZYp2|h(R9#0vAPv?0Z<~l<(ByXP$Ph;Q{RX;KC$$b`qPe%LTV+fyM z_95^IENK)zt!JIj44-%fL%^qBK^t87^ax2&_(W4j4?e}7F)|i8W8_R0e7dqswh4I0 zicGZk92_G0be0!L;&CLPyea3tFi*9u*vNTiG;bhlmS9t*Qr6A7Vpa8m4!bq0uqa%r zn~JKbRjq8+G#^?z`y2^cItgx$1}$9>s!2>v1TCEhg?@L?(t@$TwoObT187MwiEF-O z19TP64mnzq5E2;1dn{iUWrqab1_OSIMjaFff@fb z9&tVegnr4}E8wZ)PN&jdnSy5zi}Hu(gg1_n1t_l1FU$P71o2MCm}l=L@3D_b%>7E% z-OT2mS1^RR{{*zbHTRz+DQfO%>gbvK3&V`kEUP_fMr{3h=|Yq0<{rx4Z)P8jyVSDw z9GdRz%w1_7-nTW!J{`9k)}VNkB0-alp`!khP|z*MbVn8_P;IL9Qn6ImO7%*)1g~(^ zigox{f?hNX*eqr>eNfKNg-`kZd#Ie4m{jq}^@1SA z=X0{U`vp!&Zqg)#;`fOBdWC0SmNE|eI=Xay5G#c`D&Hcq2nvk~;W(#ou?xsfe@-7e z>nw34yKj$y6deJLwhjKm`y+duq-h!eK@vuKk(}0D92M;J@vDIIOCH9NkcpL-*8Pm^ zBEkV^gPfYZi3bYZjuRSz z-nmzFafxe6eEobLPF^ldcS502shv6a?Z#o`=~-kUlsOT*edGLAe4IxoPanVurIsg8 z{l&gW_X(U*>MjW??RH7Sf@w0=WXFkW;eidEYJ(v3}t4NCaEi^Uv{g!j(F-pPV z><4eD%=>U(V&OOvabM&y%%ZfK02~#rjIW9;4vlISD`uftt~N_$vtn6FrJ|{&vaZ#u zrDD0}-$=I|I300lHp0z7Y%`@pQx26A6BTi21Tj9plO38%aYAxKAR#3Bg&o>@4Ngt& zr%9+K;-#nJgi?1a7I)jYpEiNhm)jc~3We>BU$+dh?QvfEX;jxoeY8ZC6aexPaq&=! z+)29|XOwqm!r8aYCu($y0x^PTEGC zQtB=Z=cHBfR>%do1ckx^j5}#j%{>YyEm~_b_}YheI5mUQfv+Y`EiL#8xo#tm(G2(;Pg{?yo?RsOLX}dW*ig%88<-o}oSGWX1*(nR zJ#$`ck)b!y7_iY;FK9)zR#DYT0k+MQ6}@SiaI`|*unKkG%GrB>rx8ckqYB95jY#wT;KuKNT|NUrOmgo1CWEF#R~@2I#xM9lAtC`B9FVi~2I+`)fF$;Ir1 zkPs3!bX7nq-EMmEPDl2%5WXu$2u zVUdlqaB6bn8tqm#?}#T#xGXA#CnXp~XDp zdxi-42Bw2#$I9#3Fl08pyn-Q2?;el?*YrM#q^RkosiS9lBO6rBiRs?qhBiJPF}oY& zX1DH@7|Psh(sGVNc%(bhsI_oO;Uwc;s&XSjxKP+gP(P zR8Y)d#P|woeBvkT#S%_Pt{0<(1~9&tq7+f%8>O4v!D~=*F~(OyNEqLxOoGFvH+a9` zc)x|&)$qp1&F-yGXfU%IZGO<~o-CU)v^&95H`Ya`D9x1*vYQ{a!FMyUGZRF&??Aha zvivaZd@`F~jFO09Gpk(0C{E}#JSF0?x8MZsi9WpsC5XOD>XMB&?y>KZ&d|XK=>p$o z9vaZ5hf$CZ=dM`_8YX8)g&}z~KZtfNW;7*)(gpfIiBprKB?+~}1@Ln}ERJW0e?m>!m(!4p}hGowLX!4PP0+4&p|E+;9925IW(p}|OGMISe{jx@4z z9>asdH-GD1fuRB`Cmx(?8#%8oh^V;ARv^8#!5l0@76=FDpTLqtwOlM~MzL5^n+2_E zSO$Q&O10K3`NJn$fKQR|$p*OThj2mDw}`ZpTMGAwnD>QHQ8Dodh(pbupvq@$veMp- zl8aH=5<&v$EcaOCc2OA0@Dm6#h`eG1uEm=q$2(U+p~3J@v=c$RlkN4=Xsy{a@Op0$ zI4^}Dv3lF z%PSZ{{k|C5;5y?DNm2DnQ%6tz4)S@ef>i&~&o@-BYEP0EDX%D#J;bW}^2?qf4rI8P zRp>hnRD5cSJ&V4zDL*BYH!io4zYGjtbZ|FN^O{0CpMCWp`n{@;lh0DXF%%7@p|GkN zidNK{mSQPtu~>muHk(RGYZ|qJ)vVQPrDjd3_&oG?gB(QE`&*c(a!Erz!gcjR;jyy@ z_&oLxg(?zroO?*2OxL_+${`pFx5NNyFp&v z0K^kWiUuHPYJLPD_)Cnz05Fvk8h02X-jHXaB8@i?@yTuU1qE6nD!kDv7zr*!ie-o; zSW2^0RZ11rDy#LPUMtqhS^*aSjcP$Dn^ph8kQ%Tw5=(eWNJC|gCA32oiFuF25-ce6 zyBkYL6xRR(7o6g%HQC>K8O{{B{ge<&wxzGfDamcAgwjYt2k*rjBM%+ClgeT+bnqvn zB3bC*uTctU=)k2DQqE}TAUaIJ(7{P8bP&-e!AQZ0Zlu7MYoNfuH_$G}1P1<*4r;QX zK8#l`7gSbxY+xYPar^~NP3{l;jCLiY)_fZo28nylHOJ9`z6t05CGabtdeU<7%#9rV z?QNY4N56#z3*}<6ipk@(%T)|(dOEmXK`Eec-K7(p)v4h6mlDKE3fH3=A)Yb@*Y^SO zc({HIJoVlfjm1>n8>8_#BImA4!8lP&M+TW3 zAK*J5zxt;XZwzAq1QM_Nk{fYA@YU$zUn{YyMdmtecYvG-h{xNkod=x@A#mZ`bPg4hCI=8O(g&{tW{d=>w^C7~0)eh#`VXS;5Tyud&n%=zd*#CS00 zLZLKEn+3dbx%jfmWAz(V7>ubwRVTFCr8r@^R@+T`6;k}ij#m3R%mv}kd<%XB)KglX zn)uM7JWWEKDlqp&!gb@R@l(I{Qx|T+3<*Yi7^`<(ISxzkL2T) zKY|xT0K4Rxvl?waZluYkE4kuA>xCxbD&k&gxWf{kJgK zmhfbZ9W^ts^sbtFZ>H%-kC@GajPMa3YrDxCduj!7FH1tj+`DTg=I_+Cd!*zo8< zb*wrBwWAvzn`*6AZ^D;1D#fy{78OHR%0;tUuj}vu`>I~^LHCb=Kt!PXUxc((>J5*d z3KbM{oPU&0B=?SX_)tc6drA?SN}Bjm>ZJ5UJI%7eV!Fb}plh8&ah zQ#k+=B%Di(1~1=&qRP}Fk_;bC!zsz(gQQC%@lf)3W8_ot0w@$-++0E`l6fcyIc*irVB6Tc_diuPJ7t~$9JJbP)Eik z6`cI39GT03CT23Fj!aZ>#8bu`nfG}{o}&{X<$3#^@HA$FqYR(MY;crjjcjm~x;B3J zIFb#H8C;xqvmwgt;_wQFaB&_68F5{le<3OA;?UF_ba6IEH#puPeWz>Usy%ye=qV-G zduX(K?Wsv^ywSUY+^WFw##*P{YfYH&#lgnGEBHx|dsxEQGt8lnx69ww%JJ8=NDsO_ zW5a=W*()Ycq3I(~Pq*XZinxYmg*ZXA%eKr}!`UrOGk9w8p4 zoz>UUN~T)XR9!2>cFST#t7vM?C=`umQ!|ZPV3}muR*A3mXh@-^_O(_)ZT`KQLM1vSE|S#58MYqAwdmWl=5$ zi=oiSz{fE>(YNA*n~j;ynvfU5r+VbRnCv_8hRC^GA0d~WvoRZXEKcMmKIGYWPq##~ zi5xwmwu6(Db9rinT%LnFwg*(ocHEBbSK?!fvQt2Up9@H^V5<)i+&4t+iEhbz@yg|H zNfO+^CGitDNx39`3<{0Rs*qP3<~Mwdla+_@u|*{@QC9vNuN;$=;0K}-zm0g@HVk;6 zABl<}?YK$18l}-1Zm7<}E60Ya<*iAOqZiyTA-CeO03%##SbN?L`iGEKm3xdHWae)Nw;V;iDIZ3@fu*!>2S1TdN*E&|zX`Jo;Wm z)E(L(15G>F8Pn{n>1}SndB+G2oQ9YS^8UqU+4~p&%NUh;eS}vq#QI1RW{0~zqLUO| zAEBu^xIVHy?fQsu;~ZTdAw7sn>f^XRvVE6~zHFxKe2mves%lLw(FKumty0sfwR#y& z&$dcMqh74*W&gR^F96Am>_vN4NUf({ANiwDL7^Ox^$|gh>(u1+kyqh_GXbmVQ^Mp#aQP*ik*TFg_*0K8^Ws_yHv0Uj z@8Fc=z)#X8$@&P4^nmLl|AjY3zCQ9}D!;+?kTpcK&c5tmL7rQz!% z(P279*GG`3>6zOx=Ot!&0 zlymvtN66(lxC}BNFJqTM))r9UgR)b=_PEgYIYZQ*=zVO)E0=p8iLe5d#EWr~a!IT~ zp^?GFxwi~5s3gY8N&_ETR1y@la&FNL7st9LYF}zh&pZ=WEQ0nvkby&PaLYd z@yfBG63Za=7U9~;7C`PpiJ%K0Za;z!ZmI>4H3=3$x&RV&j^im~3m}I)kDdqXM2s(Q zcj0Nw0?3dto|pxYVQY;nfEewAb8rC!f-1-Y2n3#^2T;v0MrB?A;S~(A0P<~^9qt0i zgCs>4KxpddEr6UKUh(R-pJC?mmu=aSvt}lB^1{cazH<(HHRQ_RXP?R>^PYo4eBjiiTEeYW@SKehVy&tQ7n_r2l*?1viT=B}?2s_yU6q6%?+?Lyv+O*FDJ# z1#59aaw`xe6f~a8IQzV{aqotReXd6-qXsleKe?k@QF5(p9bE|G$@@stqI)|~dL!@N zf&rRVwa~2S@V$yEyi{3L;rvNMua|1YQng?e3jUL8z6xxMV1NhUrvI%G z-*iVYz&AqW#DqgO3kYI-o+hiYhjBu3H5Mfl!~ly3!?|=CXoA3Yt(GDHld$Z)Du84qD1 zPk|xhCh|mKBB^joY~-g{Co|hfUcnGHvJFjkZKO?7)JD?O(X)~HFk4z$x6z(7%tH}7 zxmj)}>t2aH*I%h#L5l7h!iz5X4WU;x|6Y_^JvkbhBQsRea~eIl%acmAwmYX0fs_3zZYo7O}E|7@zIQ%J5#C zkX#u?2@POn--%L0t!$KTatA+(l8bRcC4__vy4;i9u%!(@DLB46!s31oZ<5^Neg+B+ zW^tpP2wL3JVx|r4Rq!qHQ>fRM3r#SZ(f?*YW(WTb@3hugm3v_fs%(NhvtHL$g%Q$c0cS%*enB!t#!38B-Hld$MnzOy4_#8@)XqqvbnXhV-qyd1xEH(NZMZj*4Sf^Is*228~oin)7 zHk>u6M2MB;xDBB@@!I99g{RB#`}CY&bGQ zc3!~{ko|Qa4=!ZChomTEr>Ua{**AnCJLvcbSie9H)=Q9gBrsiZZ9O}RY-5hLL2Cb% z7?8d_SOZibM;d|hSrNKbw<_gQT`TFuVy#%Tv}RpVluET+P^$1*7XMn<$AQlgg#MwB zTJXieFgWwKp<-e>BLH2{;#weCNq!k8BsXLdLa{IhfA#wNIC(k5`7RV18N``;dyYa7 z$5{vx-j8CObQ3jzZX|q5+%dDFjDpbA0+Nh+PRA+9QIDic!j+;UM_0u>RAetDRNTF{ z^sxX#n{fJaS-cPmg=G<6$&0o)=r^4nr_K6z&pvP*{YTm#^q@|aYtVsQs3+q6mm`=< zX#bP-%yoF>axr3+$Lkj2pD<=}Z%Xj9iIbG`vqAe4Qnx;II?zdlbI*NR4BhkGBzqbB z3Mh!Q+2WV@#BXx!wSVg zZG6Uz9K@{hdgS;3ttPAYQ&ufQt=5fFsS4WwYkEm7R@GvyS*#bWN=;XM>l3F{B;LHM#u-xsOut^KO zdj&Yp6rPLz?!+4)M=Lcb6gDL|`iwR?h(5Pvk***X9YHkzDfnQ>ZOJ}57|EnBe?cLDbsFypKmJWc~wDNEd&Ky)8lELgd@Y>~I zmNnf|9QKvM(UFAlKZ4RgQLIZT9(2W`*lU3%z>d#DP@iv9aoEh~u{~zV2695bgmxw7 zQ$C-gZAqT_|BP2I=QOK4e&(Yu)%_<P7FPaRE&ET72bS-J->?9hm z5)-}~JE?AnZ}?DCCh_5bjKqgq%7!De563GQ!iO_K23;S{A}Q*_(bUoN;Vuj_sbfw| z9gMz}wNdKEscvrJ$qnJaZDyOosQ<-VA$8>0&M=7H2XOwPo2S0?8i*Y|CgoOLK#Ff;r2O78yn~qp6VU9k7w?qzD{uT-i z=7&bx9`r*W-`!(B#5*nbHy@&%PUh`T@yg}G%PNmYo#@iX@l_NW$(i`5go($nzxe=k zH|lSuH75bYnpP4v;cP)AAsMk&@!I8xl{MW%tO=gx6Hyu{Sam7IL&jK7^T7nUl!Dc$ zeu<}yEi63Ko4njw2_u)c55iN&6`3$tjUo`1F$_~B8FO;%BQR?A_XCO4b7;CwEHAib zK!Q#WvHoX9r@Vq8(CITl=v;LAERv$=l%|dzI*sgk)5lG%6WL6~j|>Q|F;r;gpD;!L$rYF4$HQZThL92#6P>U15zEE|TZ0RZ*k%zJ@T5uAB< zNPDEknfHati7ANSOhJs#++LEr)^WsA!ro0 z9==!SXsr_C@h7Z@nT-dpUcwz5lccEepsAy0JRlLeFnB@Ybi+a;%a&`iLBPOQ=H~lNnX-&?hp>kqsA|^)=<1;#0Bk#ot$xTj_&;Taq zsVGI%uG z-rfvP9oGhiy=$KhWI4iawLeGXd^e^*8Vx?R#@g9k>SseUIVd{G?^08vE`dc`S+6t0 zB3{7|uxMGG!=mLRMPU(59X(hS@u{2U{`O>ApPFVK%BMb^ftq&D>}b8IPL9!!pr6yE z8He?)^^($5U=63NR1LjcD=T`fTvg3#sjO8@&3_cY7T{O}=xl(SS%6LUzG(z4!1D?i3CAciaMJ2rFk*I_#beW?Pgs0p9`=S!G zR*CsNi}f(G`Q;T1VSYaeZE&L!pCT!0eramXo8P!Y?>Ki`OZN8q8rk)873}r-)RK@@ zx{YrZY%Osk(K^53T)@mK-CEJ$3f!~8@{@4SM+%MPAUw0CsYSI4TPv#7rlo6jrCh9O z<)+cBG)r~UZE zH>Pt}2bt@$&dYWLB_-5fx$<2Mg+^wbNi*lPb+(D3i!NCw&B%almM|{SHgCsSlUhQC zvCWs_ZIFw{E{S;HwmCXHqp;1cZFq-M4|=+n_r`H*@(nQ2Ze@cU-|#dL*IHuo z=k2e;)7WDKxz&k1M$pR;IYy8^8RA@$0a3@-SSK^14qgE_B*C%HI}7#c>Atg!A6O6Z z4Bu0xI4cnyzU<#m7SB#5_Yl zg&@YKXR`MC2b_>xdr1hzgNg)a|3SO~a(nSjC^RxSG54MQg&^+|S09~i0Wcw9SR$BM zbTNwaQcH#a6SNy4H-7=4!cO@hy%bLVsW^SPV61~eVZp$GM099I0VJZe2CaZ!Q^%EpaNM2gT=p~^bLUS_3h!SdEXeHM6JB!n-uFg4)G2Z9-^O~D z+060^hA^|&LW5m1dmTwpGfPu*+{~WM%xvge21DD~4RRkH7?=yV=)P0!`6qFL?qZJe z+!qMQx~ssjng)E^rdlm)Y7>sOHw*B2o4N_cw_@p~vfuu8frSzKYs1Yf!S+L;a$?pY z_E!+&lQr4?z5pjA*Rm2q@%A^BQ~yf58FFR&3Mdp-wtmGnP{@7mJM~1pMV)$lE(WZy zgl&md_^)xsq?V7YR``oJeYs%#gG4ZJD;yn~QCQ(L_iMS zn~?AS5<EAZ6YO&Du`yxoNHIZg}14|h@xfk24F@(73Tr95tg`eZe|+1lXt z3RcyttfQGh2(MrW5b`T%gB#>{grq14p{b(>LL%EdbsAzw`59l5c_;u9vlYQ@L=60h z35}34BLN?!LWRUO;Pk$xS~lU;3AJR^iWYpxx2owyrR;ls;_O`#@Np8{%mO~n3zZWS z5dj~97@xn%>TMfNNUq)_goXqkPr#cYH!C}#(C-lVSVW{+0zLTF!jQ%-vk4gh9um$a z0+0PTZ&Hhh03L2nLa@UiWL((cJ{O?lFx~>Wbj(Pk0|y<^!5IbUh}N1sD_@CsIQ5XH z108S1smVb{v|HIg#~P0~S6V{X(|r?OtnY2447?nzY8- zdi47$yQO;>ibZ*GIKWCN-Y~6oy5^0h4lgAP@yh3={(5p7b8?FOgNeb+aEzU)M|MU$ zA(%;CAv^FYnAKNb=D3PpsWw%!P*!0Ng;h~>cr~k&UfUhVv{c)9_g3v_bD*wjh znu}#C9s>NuMo+b`^!LNJto*A`Z9)l9z#~`jzkos`0|2Cvb9(!tbE;fGB#>a(NfN*e zg3(+3j+8FcwL=by6V3$UQd+;?YN>F~uZc<1H#;ty%(lO?T% zS1y+{R{2mG>o87O&eDUlSE1S9+h;h?+U(rZSZ71`#L2Yh!mofPNz2oF@S#O{nyfM2 zf!8kA7_8~ui%`yDF%MdBLW}!LO!$wWM9^1}T~hIAI`&oM8-Qk5U-%dPrLQ7KRYp8z zY)jM+Jp<0Igpl&Q{atwKxK=5=B`Q61V-bE$psAsqhhSsukHO1MnqOckRp*51 znI^abV`OJG@vdy0yr+6zYav8(pGJ}!_O{N2&(_)o{NQgxvDc&Qw(p*E`n9yC+zmag z*Vc2F_IjOmbEao@`LP1=8N|$f6b8W`(i39tY-@H*t=BTgy5MWHrzXdG?cTUK#@gSd zRL3+yRU_EeJ_t<=ber_CMLL$Vf8!COvkInn>*`<^TWjxt^T^iS+NU_#Z%US$lh8lt z967M;Cg;4c?B8s5rrZVQ33H-pb~g3dw#4$@;CV=8l5~3CCrF&2^Wmmn7z846mbfkF zqQ!p-K~h3xg&-j@UO|wn*<^_H1e}oEoJt7A!=mV}2MJZjy=7`9-ik5z|pR>`rEgiNfc zwC-nQ7ZFzYC?CNo%Z22HBNUR>{c}qkdeAq4rJoMJQuEgSIUF{}*}K&@$nU}jIW>C| z*9<<26B>caLBAUE4>)>naTYkM^_dPduh(F8?R8f2JLBz1v%l9_1|MGPwI}y?`_75R zls?mIk9W6OovFzl*^uHaq2H_P_FvI=y>@2_EZ|Ph^!j^SoAx@(fidoRa8T27LxX5b zPn(#AA18FCrh3p+(`p~;I}5h=ofF(9G=S~_$gqO_oav0iuT{M%z0uV41LP?*WibhF z9PT^oEU0F3s%QEh&N{0|2xf9-qH)NY>P+-!oz-0khD^h{^27ub>_UZSxp&NQlis0A z&kY(UfS3u;V+BayfZkZyF{h_Gy~enC(1hVU-dWMo#=W15ofFMNZ5Ty}^2~I3rp3-; z!)(s%hx%4OUF%H3C_)a15>3FJ<-iWzBwZryYfr+MH9$_L49L}Yme2I8vD#R-4e7Ik z4;yBuGu3Idv`J&!>;MNyQ}tfoS>ukpua?EMmcDaN=t-yw``aLn&T6+_(FR`n?BIh? zVP`Gr1IS*t1w%9red;@_#liE0`a1Fgfg`IF; z+?wv1GsaZo&;${vwJ`Ihx+Z+(T$H3z0(16YyW1wa1)#2m(e7%^ancdi%B6g&z_eQl zo$12lpz{v0uVUF6R(l*ecWd7{m85_OoMuVqra4J!Gl1nMbhM`ftK6SgE^tmH^9>|t za(}M{b6}#~>tDV0B4_oqIW3e3>C8%Ur>Q~P$<%O8Z}oc9-5uMv!|m?2>BF#tVshJ5 zXFtrSQ%FwQ0La+#kEJP=@hb-Ldpg_2iDIej~3QCa*?B_JG;h);4<< zr2z_Id#g7w4#bxCv?k0Vqu1(Rxy(5SWOAb6O-@e>Ho9;qw%I@8tnD72>}iJ@t@i%b zIQ$3sT{J#LM1N&>LW7BR`wYzLE)3L3^tb!7F+QbhY-rEXTN<}*gt)nqmrUs6H^i1jPNeg6v>4kMfQGk{WWou6m*&UzK+{w6zsw5B@2$UKygAYRs zS|)se_y~No6LKABm=juiyrCHe(Yv(OC$cCo$m+P|>a-)yLUZz9AA;4+GFO|x^aV+5 zPa18Q8@)zPgH14?oj`6*ghqj6^+4T%MmJ20Xme*>;4U#H^fuIHc|YKzR94#{_gm+H z@mr~Nou%ZVdoS;ro^$NC5ySjea(N@U+)FM$gAlxXc^Q0|)TS3}8Kme%TMj9D`S1!z z(aWlpkfN76RzZqhv^69jxu_@d%bV9hie46-3@Lg!;}l5IOYT%i(Tj5$r0C`Qr$dTf zPCOG*^m55rkfN7uXG4l!&OQfH^zuWJqL=OGLW*AAlY(v4ogyvFU{bv2A*JHQ+j%UOrBawxO5TP=E%P8D}{WnBL)ODqgP0%u%$}DBbEM>+lWyCCH0#JdmpQVF8O9y_I4*Dz|aA+rt^DG_cSvttG zbbz5w7~xr)j4pi6a~)Z)Ij6OePCfWT<{iM=TUv&F9l_d$eZBkVdt@&D3%T4x<|0kq z?4@q;QgqJ#C&_mwx%Yf>*+%9pO>Os51usRXwL|jlBlm71mrZ1D)6`}!wZ%)h)1TzK zhTPjnE_V_gKvU20QqT2LR82gU7BYKNI zrE2V{B;N((-X?MxC%TNLCcM<7m!djPA^BcT?!Ag!K6esNecnrb!AnuK_zsbE{ zlFRpqmZYigd#N9IDXKmnCHa;T9lDZS{>@AMyO;Wrm!fL+Wb$)0(X}U$%MC==($qdL z^<*za)$v&*-!sU)JIUp3L?_eK+r88~ycAX2FCzKAMDBf!T)uGzPkqx%ealNx_5RN! z-=pN-BBJP*5*<%d%e>TbFGbD3N|J9IxmO~WpL?lac&T4{DQYe*CO^+6Hsd^U`GJ@E zp_h8tOHs43iTqqaEXo>kd54#Jr_^`d=^gD=$UO)OSg~ zbBL|lKrT-wwu+_>d8xx*ikh>{B;P&c-kZp!Kx`UKDPF4RrKs6^JIQw=xpxb>{JWR> zk(c_hm!jrTCqLH^8+kIh{LD-JkC*znm!f9$Z1VFAVnNrF%Rw*obT4(tOHp&Xk^Foe zxxA5F^2FxS)Fv;r*-KHg{5F#B8gg$Rx%?rq%{28CFLjfbqUQUlB;T{iy}QWezKeM3 z&0gv)UW%Ie7n6Jskb7Swmm4?n)E|1Or+6s}2fj}7-9hd>k6d1`nWtXprC#KvC~Wv6 zlJA}5-uuYqi(7c=OJ3^BUW&qt`$@iEkbA!-m#YZIpsB09)Lt(|VaP%PNV??SA#(XU zf<O)mS2JoRKRb)%P} z@aGF8-!sU)JIUomC7zn~Qb)WLg-I_W`QAnDy`NmZTjr^Uywvx+6opeCCHcrVu<2*A z?Q2z@y3R{o@1-d0T1PUI4-wkrTZOh&<*EH%s^z69JiCkJBj1;@$tS4nMKzvU?4_1? zDGK9WL-LW&G1%mb4ffBx)c<&?pL;0^_p0P4IW5{I2TI%T@>1{iQt$Cn6c%nIKgnT_ zHaQQ{elEd=H1#|$b(fc-@bMv%j~rHIlk=?Xi!bJ>onC5}m!dH9gCw6u?vX<(>@_=i zYOR+#(MwS{I!W@8S4VB~cB%bCFZHmO`WG)nVe9XapX9v{o4gug-|wY9>ZShDOHp`x z8u>|fnAv0#n*HtFJoTWL`e!diVen5#J`(x1NpReryo9HwywtRpqHy^llJA8CGryQz zp1qi-?(|X=OuvFWeHXd+esX!!5}vxxOHru(QSy}H?f&ruZ?Ez@%G9M>1z(PGqj})Y zxpzoBgy(a8ME@P)#M8UrSWh%zr%NE~$)THG?&X1O%Q;nA)4D+Y5ZdbW`Vgo%C0rMK z0ue@t*633+B%%W0Jbh|>9K2faUm;$%^fGq;72ue@pnp9?9_V`+4RB$*;B31Dy`YW% zcD}V7;&+F;5WnEJy=Y@=vAfj^vMh)CwEZ1zx)ps|aEh0MH`5`0e9rZR z`>R3KDf@dHZD0J*MEYyr0wpB9U7n%0&4k|i_i>W#UbxFt*hp)UVMWbL^ z6|Gt~m6DDR$}`gs%At8QC?&I6Rg0Qo)he|@wV)a>Di-`SYw*)*7V$y3JN=-%{Ado! zZ3&XX=LJYftzIlPwW3l`bww%as$MOcMzK_`7OSdNHZ*)d-jjYn-Z@VOL{Um*wb+Dz zm8w!NDN0Q>3PshjD&-oSzMCK+pG`j?pPnZJQYym9hni7W3RbfKBT-VVlGaozrIKQp zMXiiW$PdyF$V2mFKniB5S*jIb2d$zNDz#D(KE_n8!i$A<1%4D02IT+J56C0)WI(F$ zmFIFn(ZJ?_xzS7Yf}-d~)lgKuUMm|VTtZI!z0~ISWXL)Y+!&?#9YCp;V8$qhPQH4r z7j&)ARLX{0DVGZ6dbLt0H}L^c(htbCc`_h1MJ<(TN~K!S!RQu@nh6`u&3d6^!C50# zGr`JSnSMYnpCyDO-jGTD1s7V3 zS*bJ&^-3MQU$tDU8%=mk5SNfj`T;4&egt`2fto zw8G@5mWyQ#Jeiu>ENE3Ys{w|jQmr*h2@-N{`T;rnXb#A&2@6$Mxrb=LI#p3`T8gEp z#bO1lN>hO)2yp(bX02W;H6gNy&zO4p@lfZ-c)-yerK(b@z#^SmFX}b$|Fr_lAER1O z%4RhIh1`&SJgz;O<1yfpHz-s1c7|Rq7Yv9sgW**y7$vI?OEV>K^AeEAMEXIokLIAH zpER0kmJCC$6q_YtUbH6690(CXBtX+Du-J=Fnir)XkLS;i@u<|wWgU(+*T9#l!^APv zdc`!05LSd~qm~Q!c)T(Fc-(t5$78@r1Fl`I-UL`yDV8BB1nXAt)q1m9heLrZaB^z+ zp!{X}LHWo$8WgQ$f;*=|C=q522?1zo4YmP5h*dLE^n>z~c{C^rtkaY<9U?^Vk;sAppKmf$h%0Iud^e%i z)Dm>c@;#}M>k`O%)R60-It3h=W(8I=wJOXa*hvI(qt{{61c|;D3JE&p{Pcs8n@59U zR27Jq!A>hhgVCs1HCWrLfgx6F5KpSt5+LlZ^n? zG$@MN1Y=xKD)mymWGMhwU=Kx8g%wXtHL9hA#jF>nAC%d7G$?AJ)U0Z-|H{--ac1IM7MYXIpje?;Yu&4zeGpZOSxP{FE1QKwZ^6~V8 z@>la{P*feZDJn31U>VrZ%Qc9=*2-1Ytd`1J1vXXSgYwPvgYr-FXiy*$trpcPsFZ58 zX+f|NTptKdH;rZmPDM2n2IXhz2j&0Gqe0QCC0OXxVb>8rTiEgppB}APrJ7l@;G5@) zo-in@o|GEVu7Irb1<@vb1s+HACybe56bR&G$=`*(ZdJjmh^-2 zlzB8LX2J(}@IjeLKPa7}IVkBPvq@)h{1o1%X4mj@V?m-L9M3fUnk)EIASdMMll42{# z|J7Ap)z#fKJu{$5$aoL4)zww?fBpJ*Rd+u)@y<_ta}D|DZR>WdMr(OaGmKW-FuQ$k zqtVuTOJ>XMKiuE{)BOkfS#R3W&UM>8M>qT48fc+gji%w4t^O&vIfL!pMzcFd2bgp< z=d{VYTNB>)xw%YL>oltOnoFIdu5-9=O`Ym{n>5#T8nvDaa1qY>hS7yFy(zt^b-Pdr z<%yQI;3RjbChX3S{)m}0WIlWfPbPkYBRSXtx4tS`*eJ&OQq_C)|eHG=*E<6diyN z2wH5o*IY(Y@*8jMlSQ#I)&c7pYrS>taqH^iy_#li2NGI4PxY}#6DQ6V zju)^^nKn7rwy+5l3ZN6^Z`of*7S?KXg^+@2F!wyhy7e6p?a zc7;1s2@f)<0UMm!@{=4+ZxbE-4X_%PK@$QA8gBMBgvVZPwce z{54C!gC+)kBSllBt~b5B)I99d&)e8>%&zI2HHnzNH#&JUQJ}2fwf=**6%>E9V>(M3 zFz1>6DoTarZTGDLVc4p>(g8W!WSGDpj^?(VK0q=2*|MeO43V|oK;>>hmOENMAE}q5 z$3&I}YXFo0xJZw7%?2&n50l{~OTDJs@NopC4vOA29k>L|d*0j9=vK*nB6F+WrmEZ4 ztI*5^6So0{sBb;`wm#SZtS3aa9>vMmtZV&A!6d6VNy4{V2xsVRQ1^miB@J0k4plUqlO%S39BRnULz$GY9=+u6DQ!t<}gzIr=aL3HL(Ov?o z_d!TpbbO%3T<$a*dc*CndJ}Mo{?N{l#qhzC-qb_0r`E1ngADUmu-e}RM$dV#fBqI# zn0c6X;3PF0AiG*qAe*-y*3uV|zh=xEkdoXBM8n<%(-@YP_B!Y!lG5IQ6$zBw9-<^- z7NXdFNPf*gR!^dwJpp%$sSRYmQzU|AqLTT*QHp-)I?nOvLlSsvB*jF=G3Hu zxlkG8IIcS=IK>0jaox=v1t@Y9-Z>Tu6NHI{;ndu;?g+;MiX4j%j)lbysbok1r^a%M zN?Vep3GQ?JKbabTZn?+dd4^$#=br*37|;JMmWSl|D^%(wHT5NCpSfU{&39vdftRnHA98nf%=Tn=-8Fd?st& z-)o%Jnh*t`U(0Uf_s0!FjYJmgvOnNK9PVJ|PEh!FJIC(tY0drnZz80_WY8pp2kq8r z(Fd9i05AdzHJrjf7>dGwi>)*EUlFbWmv7x+QMF*T=qdnWTd8+etu@>F84d22VR?{AY9NZndYA=q)y4y5c4gu?D!^o`f9jL<1;1maL()E7Z* zK)zEzOXhow>QRn1A&LD}#)y^}x)4?5g|@#BD<3$M0iVrBIB#CS>sDzYlkGp^By-*s zDtQv1L{QxfU;|VuQ6?Np@*>>%T4_?a^dfi0+@A?^r+|B;aVo#cl2Ayd>!>!S9ExZt z!K!(!Qp_zFrDEOC>*YeOX5>rrra50K8Wpp&P%?_)z-I;UWM&9wO4w}D*LW%-07V(w zXMsy2M1uRGgvQ-x{b_e1q3c!-ri3c?LSY-F-;AWlxk8rl9YI`^yCA)z86L<$(Nv7- z2rAkSnTdIEdNrpZX12ZUCweu=8Dwtlwa6Ytm&tnc2A|u<5?RyRSHnDyWzNz)k6E(4 zG20|%Os zf96O=Y@^sE7+J1^jRgA}KxTO_!G0#7J)PS70yKlTki?C@#Okd_+3pdYh9H{Xkw%mB z+hdXKghycczYU#aKR0Xrw)H!qyf8I@7UaSOq*&sXn&8>hz0WwMg>%Klnx=4w{d;g1(GQ6t_THSVt;&Dxq1a=erURc1n~8u+hOapJGuB^sNyh!>&~f zk&|^X;f3G#cTKD(tv`V7PY0~cc#bb^)_w}^Ql%p8j|fVIHjp+-#0Gof)feoL;MR%t zIqUObnfT&)>r1QFm#wdWP(J$hzV)92^%JN*V0*MI!v2T-B{~(*vtMOoX9k7uDC~Zv zuf1qqzo$dqE7;tKzsXnVHR=_Twz0wN+4o94guRX1j*@)_NYJ%1u{4}$T z(1~NV4ra#3l95X0a_VtJNU!ek$FNw8gV-sBa1Yqy(>onFP{ItZw8J+^cRB2zgBf^J zunS1GLF|8tmt=QTyl%DOI0hamIPXoh+N?Oks%OywSi!A9dXru6fEMUF!F4xiw5`=< zb*vqZgz&ni>q5%6j~2i>MPg;@n$V*d&%0AnQaU9kPnPd&v@nHy`@*X==UAC0;*Bw! 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/mixed-integer/modeling/Var.doctree b/.doctrees/api/mixed-integer/modeling/Var.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d19e90c0d5880e5c11184d3e1313583760c4c6bd GIT binary patch literal 106507 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/robust/index.doctree b/.doctrees/api/robust/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..14008bb5c5efd1923f518d5b3b7e35c07689115b GIT binary patch literal 3052 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/types/index.doctree b/.doctrees/api/types/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cf3eee6eafdca1c1a42c665e7261f249069ed50f GIT binary patch literal 3536 zcmb7HTW?!861HPYmTXJDG)a?fy;YN5k`|Wo(1%3}>`Q@Si?rGcioOL0)H#&MnCI}6 zmsoxXkUX@A0lt;{NBST7zxE@~MY6gZU=7F?hr{7;=9_QEuR8z!eXtdO+>tIBFP3AH zWrfVB_O6%7)aJA>{#XC_wSVa!xxONoT3VG-@3x?kGA=Sj3;zt8!=P`t(Bs-b*ATU! ztK+QW_Q&H@ogvp#vlr0LX zCYMrOOn4?m^$RETgp_;|FPZQnqsy_<#@iX|yFE=)!)4Kii*;BxJn|7XJBAxU*S1{$ z2ZUkt9mnyY1fAU<=rTlWed}i*BhNI{{ z!_~Ge_zS8u5$7opA|Ojw`Srhe;tqL{3Y!69A|7Q4alM=@Gg=zvpWXsoNf~oLb-N28 zXa0@rGM;59jcYfkPq%_zVe=VPH1kil+u3&Uch+aKKiCRlg^N3=R(kz)>C9&FHdiI(fYWMDc zRRKdl;S37vt~IVSm$q!c9=h8`kwOa+lAFYrQ(ZAt$4Em&mBCskCe((cZM$J=Rp6SW zW|pZtY$TD5rmm-{F(@)n?MX|Wb0v`rlz{90NQ4F2TJr5mYf5YUls%rh{(^#_h>^-; zkrD8xA$f_#fs)d|Re*Kr-S))0gUW>j_g+9@zg}7;uo?hBNx*y9g)5zazANue=P*-9 zL)SLnxIy4Jpf_30rOJWwp+-5C2`V>q3JrtrRT3&_lq8qju%uyg+*co{=^bHFw3Nyu zg1(>#=PkF-h-jA`cS4sOQ8dI@-6(ZjC!;gFz;(k*q6$P28j6w}l0H(F((t6f&5ezd?l^J~qQnp%fd_dv5TsaGvY-fehV?D5i+e}WRH`fi6#+K5CXn0I zbyHc)@kWG$XAK%y*A0m^GFge-tLW*Mk_t)>+C3{6XTYVndW;2yyztmbfB} zd9h{H9Dx1?2`}crKurp#fh9n(8)`fc*cFmgl^CY73lGSk7iK8mD|o;t=EZAwCxzBU zLUY1Jf{9dtbfecN^^66qig`t7*KUUvFFg91>s3^O+659ZopIELNvbI{KJElg0a*rP zD(D>jJW#niy&pFUgBffSJn;IlNr4kq#Te4{^80>5^A>5tKP9Lsq~OKBtM@? z(c&Yj-rf+l+Wi|A`^~NK(CH2P;9h0I_P9jM;JpSKOAWGesw literal 0 HcmV?d00001 diff --git a/.doctrees/api/types/universal-callbacks/CallbackEvent.doctree b/.doctrees/api/types/universal-callbacks/CallbackEvent.doctree new file mode 100644 index 0000000000000000000000000000000000000000..abfc69b722ec640773a3400c13fed055b2c5fb51 GIT binary patch literal 14241 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 literal 0 HcmV?d00001 diff --git a/.doctrees/api/types/universal-callbacks/index.doctree b/.doctrees/api/types/universal-callbacks/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..678a1e0f96369dc47e129012b49c56ecef367b9b GIT binary patch literal 2888 zcma)8U27aS6m@Lxde`0$f5fGbxJ?LY5)yk$=|d?L3ZYO4^+Ra`c?d!~qg@GWq^Uma z^+Tb3NQgmiQU7m`W@g806G{UUudc4HuFgH@N`H0!`C(_R`WMEw_Y$9?k>;I6PozPND+-1q^#4k^N zoGnj25h`bk6Jv3lFJ7(tDNyKTx+t|*`3h_`qI?Zm=*$_m3TZR?-A9^-q0 z?-{;(;nDxd0f+!pBPtwD!}I@MvMk+C=cy9!BMk$gGU;Isb+q z@fW~v6NQx}Yfzc*EKd;ouWxLx=|DmFWjBak3OT_G=b2%0CSQ!%A%& zk?foS&h@a(sceUxu*VhxC_3uAT{?9_CudVX$9AI&Y7|g}hhemUrH_(jEFCH3CloLv zOl3NUR}6jcX2;(hTY=yAZ%z_sj5dT*l}k_*G{D(17sI$lekDq$iW0-ot(jXP`1>%b zgI*`FTzdcJ#I2QKx9ZA3i31;r1H~|uRLwn|Gr*l=ybjrh1H&?HasrKmHrOV0kJHf2 zw3^|JfJ5XL?2)difD!>NGGNs5p z=^}j2oh$A4lL^fBq`Y)os}pVJkkeuEtP+4HajZaj9Lmvy{rK_M-vZB(nPs=aC(CvC zua@DVT$=cL#>|OeZdUDqZZP4lkl3v6=oAvlQ~&OTBM`D6tuosK5L+gOT!meGsT^Gp zF6La~19>;4PP`x3fIgplJ&GsY_Ttz2zo~#9gUrt;F;|IE$bRE}0ziy+j6_F^4@4GkBd5 zR!|`co=K_cR$1>g4;^q-&gzDC6*ibUPY;dIt6K@Q3nt=L7tn?yj+!|`Yr^67kQA8Z z@OVNy$3>Z1dDy>Ut)Ct+BigJTbW=aYs|EJ0WUPPlH~h5?{bZ<~7ntU6t}K6uzpweg zhT&?hs@20xpyFwJM64}Il1slj%~eb7hvZS)Vyb0Z{>t_4Eo1B5zY(#&+_hS?eWcpE}Sc+FYVyWX(v g8#l~5t+^`MPV)c(Mdqnm+j(kjO&3U)x1XN;3jol6^#A|> literal 0 HcmV?d00001 diff --git a/.doctrees/benchmark/index.doctree b/.doctrees/benchmark/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0936bb07f310b558c2900b39d3a24bb0ac43b2ff GIT binary patch literal 4042 zcmbVP+io1k5hX?LlFQ5TV##(A(H={&BiY_v1~8z2Nnl70VjDylBQONyK^XMT^iDT9 zGd<~xLuh!{^}NptrIFNa=V z^Hhy%1AR?oLg(9A&ko1qAe_=XVi}Pq2ac^ga(0bqE&0@Foa#?m;<187yAq{DDG2f0 z%Sl!}t;VL9FQz0qk#tt+;DN`^4%!2pu`8M+Ufr=ZyPWczy2C}=F9^KWjxE_i*oKK! zzlrXn2@@HeNR#JOPM!#PGU2gEtN*Y=P1-{yJdf$=SSszzlnv~PqLJnzZ((CS*7t$l z!ONcJI;EXgcJQEqqeKHb%U{w{k6QQDx30_p3)lzj9k#@79kI8M%#^TgAjWndId&bt z*YSH3zn?yGhP}n^LjAo;o!w?{A1+t^Js~pZdD3+v_>yrI6eOVm{u%@%gGl5`OH;-& zZhRX6Ig&_Hu+Db&u@8^!+pEpYeiJ-`ez&UMc_Q9# z1oqwoNl=a>lEI-;$z^ROb(%Jth|H9>#cc0Q=UFLy zRz}Fm2w52=^Q?@(4s}*WMV%GW^udcJ+QfED1alL?+(f5^e%@43?JfYHyLpH0d9wPY zqwT33?jgPvyJSR~zVt?yI$2z{YoIO)N{VRgp4*?$(*hh4&V}LhEG${2bKq9HCSh%N!CaF7IuxpJDoI6}Fo>>;{ zFf!6}Xjn7mk=T^YXdf^xU1BEIdWMWk|&k6v&G(5}9v)1%p4UBorLrCE*jUS=iiEIIrGN zUtNGj(n3fbrt~odoY(9cBWb(r*&TYyfg&2zs79%0doi7w1jh|)wuXkJB!gstbVSsL z zxnzR<%ML4}a|fEOH!r@pw9{_;08n^}0iP5BIlGyXJTYK0z#U_K4TFV!P0~onIE-n5 zvcWMNHFIS9xSeK*5peLhsRq`!Lt?ZD=OTN}PXwE>$%?S8N1$2?I7(51uDrpmQc_mB zPyJj}C~9I6o@Tz9w$XM%(XhL-ED?0;W3G5ruUlcv6~QfmKx!{nnm$3#Z6Fwh&M2D> zMmKA;}kraa@?{bBnTc39A2 zP9Hv)4KJAz`0o3{zR9#M)WKu|u^Ja=nu&ZYWP*0O;WbMKpc!hKAw3%DScQD_?*2!> zb0}xgCG%b~H~(H^9-T{ky`E4x=2XwhGr$HDrn3}>4K$geg<{Rz;i}z3L1tmwnJxc? zs_+$ZZnxE0uE}Z0c*0WrP`t~j@O8hTFj4C8F9t2G0Mu*cx>|;*h)50XUc@lLL`Zzq zY(Tk$(9ff$z!83oEr+z41I|%BBI5ZBHBghnu4f5Q>?O7G!o^vn>O?~aF$fm5g~jWHZ_9{aiYDX8v(w3?kEhP7F{=zBiJ*zKUl}{_QhipyT|aq#_nduwZrHAW-ovo@4Srv-hsJJpvsk*Z8F4>_z%iUvNqn<5 zdQ|{jNu`H76j{%vB5ez!RK0#l*lG_hSR6E`mYa4j*azuK?Y{?ZT((ue!QBTciG=Y) zfr};*X$r^@18$O)Pip!19<~1*E~;>FZx^?kQ!mwmOMPd`8U{U80MQ++>z2kXzVWegO@H@y=t ze60|>+cI*4ok#R|59$qK)yLHw!Fs)KC!gV9>ASE2umhd{&cXE`v>X#Rm>|H9VP0MF zapi&d%@shrfWq-T?05+Viwy>V)vmWOmz}=O^C&ejSY9OlQ+O@*H)4Hx_{5p%_`eF? B4*~!H literal 0 HcmV?d00001 diff --git a/.doctrees/developer_guide/build-the-doc.doctree b/.doctrees/developer_guide/build-the-doc.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f0e64886b0f13422d98d30c726f08acb084b0e7c GIT binary patch literal 13481 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 Re^Iv~x8yKPby(VM{};h{T@(NS literal 0 HcmV?d00001 diff --git a/.doctrees/developer_guide/tests.doctree b/.doctrees/developer_guide/tests.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a91c47bfa17fdfb8f8f9b340617d6ceb443ddc77 GIT binary patch literal 13105 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 W=#ZSHMVmGCdkmBv_)P`i^8XFTDqDX5 literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..53f312b8a94e6341d4ed81186b4b90d2f006c67e GIT binary patch literal 4290048 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Ν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 WGD)R%g9%3265^(t;M5u)t&NWBV0 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 z zaZ0Yjj&FvC)A23%S#nE=?1v_5!80|3gS-~rVg{-()7Eyltp(NdskOcb`w6S*vyD0n z^tjZ8`k2n>Xdz$goRL=Zm=Tn4U%GZH^3}NS!uu2Y?%Q_^`YIMJ?4xT0wQBKTYPv8` zf2K4z+_!$R@odzz^)0Y5Qp9u6c|7(hWtycIz<#=o{_XAbc?W&c4S5W-Z|(jBmxS(MddvIAK z2T}=90yh|MBZxw%p8Jas(BQiuI^zmvRw@rq)hoGVm{mC`Vz1-z726&V~J>RS#q zAlDW1lh(wl0#qB>m>IPi_fpXQIifuKqp-eGq7+^0eLc3o5#!lEQYPX|O z#LdMgGxltFZ7W7br=rs)bB#4Frhl+2|o;?m#U~{k(_rs?u zS&PHRL%Glm%1hMyS&6b=>D@mk*OuD7rZ8s~xY%Es*V8jJhis*NUJp-*vEjn~X}g>( zU7o7D%CCf<>>0f$O@W_Wx=|z^cvZbC#p+z!v|Qe9tIpMw8EMtGifdq(*A;JPPiCBm zt!gGLUTXsW%7KMBAV8#X{p+J13<&7Y!*mG_gEab=qW*P5Ea_9vQQ(LB+oFxbBb5sJ zSD24<8>#VL2y3|U9?VHo$ZrSxORGMXS>Uit%~|Tu%xE68vVqmbtd*bE!@>xM;~Uxo z$2U)6zfyV;>0x`Y1x^q99Xp?Chehac@25Hia&!GBZU(`O>6e(^55jorxG9}kYl*X) zj;M9IU$hcuJkwE~IR6(#KAfmM5EVe2ZUVP35UMsGg#O5GT6;+l2=y-;g(Aw3a<^E@ zrD@*62}t?mn1_R|Csn%BWA5)G&++I*3ESUBF(%&ybB8LR-iv}-_jiy57@(;7Ttn*n z`xLvW`@027#xk6N>m0F<3EJNSqxoXNYQaWMC3qtnqE75aR<|+ADjPW|Ck*ln0Yd+Z z&a^_pNJgC((U=LUfGFQ)n*gd~p+;hc|9r z(jGYL@t4>;vpvcFy zE)8jMCP}+Viz~&t=wq5`>(F73p&Uta07v2Qx|s*m;RkO)0bD<0VV*6;>d;o-0OhT6 zZnKrn=Qiico*H(cE{IRpjnrOp&1^WZqaAVV^;TFBHTHTrw!pF1srapHhP9Br7J5ZO z%FD(#8ZNHlq@9WNjmGnxsI%8uDDsgoD8M&r*ehx5)oahK6iT^G1uHvc&jj!9ltt#R zt;IQ9gG>E4@UT?kiv2d&q!+m&2~yI??42y?+r0sCBz?8wtmQHAuxA}QBaItlv@4Fz zK7#|0g1*QYD`N{BoqdU&SPSXQ_6mh`W`@oTooT9NcPol~Bos1qhVFuIgT9@LD}BxP zAd2YhMO^Ba;Gvby9`_Gi8A0zFJqp%!~K??LDqiiL%z)@I*om&fyvW!|bDkwNltlFH}X6oTOP{TUeO4 zPYSTY`j%5Gj8a%}gv2H=+80M)|BfS&!n}yUZo?Kh0{b~TvlbHA!(OS7ⅆ)Auvr| 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

m71=UBTov4RuaLUZu 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

  • CHkPnBL2nNfnrTU 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 DHMl`G literal 0 HcmV?d00001 diff --git a/.doctrees/examples/bilevel-kkt.doctree b/.doctrees/examples/bilevel-kkt.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1ff1a9cd3f7f04cde33c8f395035df53463a25d0 GIT binary patch literal 11225 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 J3Ywy3{XaN*ApHOU literal 0 HcmV?d00001 diff --git a/.doctrees/examples/bilevel-mibs.doctree b/.doctrees/examples/bilevel-mibs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e99aea5be2bf7557eb70b50bdbaef9fe422306bd GIT binary patch literal 9672 zcmeHN-H#l_5kKSm@U4Ak`@n<*9GW9`_73mv`D`oUFi3nP!m{tMfFMN98D?ktw#PR+ zGxYSFcR8IzA|d&teq)088xjc#2`Nu`i4^5e$RiRjNbpbOS3RG%UJg6TLzH->9nExC zS65e6S5;T_M^k_N>$wT@(WFKy~sY2S&% zL^?dx6M%4p=ev>z=`D256TI^LxSb=IR<`W%YPguvr`v62@qyisd~Wrc3zsW_@vpb#=%n7}q70S-K*L};d6Sybe<^$sVe*)#l zsgb^5;yLk*I4Tx5#M2u|*A}NBDzR`Y6_4TnIQ~!I|C3v3B7Q2C0De9L7te~PuTO#> z=Q1^_c(7bF=!Kj4ie7^N1JCe`_#{@wc2y+3^k5{tP$Ox^h-emCVE3dQiMk~I_O|e1 zmP?o6RoUA-U|TZmvo*(4eC_@9FqHh_^Utrm4{^B!W8W(u!6j!(aF#?7m(1u$2HN)q z+--S*;yvnsPTG>>3R3#4Nzz_2cxkX7-g)4`ZKDcJF!0Gk){<77+^BO>Oz0C44_qjt zHNd8-^XBwD3@Eg2+6&C)DhviB{a!A`*^*tgDSua=@}NF7^`x0sPZGCNKB`}v(64vv zN=P>2Vrq}-qMioz*s7^MGj^}0Flq$Qx4j_EC(|=%Qo{&V?nspCNlF6?d6UUp^E%H~nDDeL`1s-u-^H8C8>l&f^e6LFcS)^lc@qt{*zvHN}4S zpGPJpHoLs%1-rKI^@68n8_-z<5m7?Xvf*-OV0nD{SvVKIS|d0>BJ66XjD&X%F{)t8VQ|Kcj#;>9^^6 zapc>>SPgy7Hj}{RGUjS`xVO7$riZ^}pmwh!p`oL#JKO{}pXSzYuCgkXxzr1}p`twl~h1JZirL}AJy zk<@8W&aQf4tN`7AscKs^QFb5a5QG!GwpbkP z%H!Zp79@WNGuR=aA;gMJ7;GMgj4M!gUgNPNJ%rj}K;VrertsSwE=cf<2zjB=K$ylT zLTJ*9vS4SO3y8aeSTRS~a(Ovx+*x9~4P%Nr%b7(wB=lM&C%H~hAiI`Ffj6=!@RjT= z!4MNuGzg2{qj!q<7ZDm#+-YKoS8VBCU=)HbwXyk^?T`>WkzM4)kaES1}Hq@C64tGb0ZgvfeA>dW{Qs31dfkhYXD?S*Vn8 zrLygnHyn(C%1Bu5WJ~;2u)}z;1KH7XppoWa!P)CxPq3RfF)8*Y_w9k%GzMm!)Qt)B zTM_kJvg~gH(^8JgPE-iyzBnF|&d=74Et_y&*Mcp2m;nC*L~?;G4iCf*v6-l$Ky&eX&|LaKG^>Ur ziX2Fru8gPV@_nK);RUVCXjj1~XuwU$>BL_i(vamS_P*g|zU|i5YDNK8x&+F#fW%j8 zZ6gA+%mK|Zr#ma`-fj-_CDh^iI6>9{?+>Vw#>M-=S%I%U82F_J1HTM#!!+>qH!(ku zgP<56!7!JB?Xwse4K5An*sax0V%{{}#Mk0iih^<)%^DY%?g6DCZOVgyx4pQjWWqC` z8ij9|T*`-;)r=%XglatWnh(8Zo*N-o{?Kchp!}iN92b!OKYPvc znE#JMkNIU0=f%T{IHNh?4i${rd28E=qE!4z{8>*SgNZc2zCPyLK`*g;NC_OJUOi8~ zA1NkbPK8vx(#I(W9^h1KONBa9OzGgi=NW@%iW7Cxtz``6y@O}?DqC=G&moxt9M3DH zP5m;(UN}3pY?Oz}Y7#0`ew01(Q*^7yS5Oqy%BxAHkd=zFyhx~5_;5I@SEovRWni7- zJ6N4EmAJAnXNrHw>W{4EXf4?=seg>DJL+dRh;5;a5;)woxY7E(L{B5Y zj1rY@h@}lZ+v6xb+A5?R)vSx03e>6};p4arLj_WiV;Z1N(ShD&Bv_bt8vu>`Gm(_m znp2@;QK^)ALCO?pmcvvpYynLWDqicntLLb0iQJeqpwxYOSI;9y<3*Me_9@d81L2cd z3(s;-v1LN=qFjsl@&S4M7Hq-kE0j1YQJFNo{)lb}+b=&+8s-BJTtpTti3^}9J>~Ll z(!+G~RB{0q0YS+kw9G;r4yPp%eO>^bSx}OYYF4P~BxIOgY_v|19UGIV3BXq zjdO*W0mog~nnzG$*N;l>gwnNKPL(-K<3VkZutXke3(EvYJhxB?F|Fq*$6!@W`Vp#( z&$&rIvPzW%V@(5&MCQCk2v3?8qwFO8sws+j;)WK|qJTPuofpR3s*f~Uf(^Ul#a^be zCoR-0Y-FymketeyVyj@=oxoyH;tsOZCA207v$l`|GZp>E=?#-0`D*qi4+xtJksrrp z1c)m8L^=O7?Kfyn(4(^;YUe6lKlO7xAMvQNAhZ}1HX~>|Xs4~ApAbq#@mi;Y=C~aV zl|U{qls)XIGX!Y}0HmcjtTc8YWrKOtI=6Be{G69t&Io#HsnDM<&|~x3q_W#wwmq)4 z%p5QX9ijR@CYx1u7rV$+BE5c0pM_5Lt#WggCeX?f();>UJVeTOV3qy{)k{Al)jtvU z;d!hN671?2jC$03XP-DEJ9f_6vy{5D9SAW`qG)tL7KC}$? zL*SYh4z!vyFEs<(R{22%W4eAq9^_UkPS~-Yq0X$W3BPkzd@H^YUx?4e*W#;0&r&ay zi;cq&-`y48?u#$>#n=0ZSfDEsXOYkU2LI1df(*sG;w$lGqUY+eHN?%KzMMHAP>{9I z7B1kjWz}0q?@TLnq2CStQe8~rVbvRJ<-Kf?&*%`$?Pt{S6oE`&f6bl`1J9T c5k|R>=XDawZqY5MhD%N$x0e(xCEfPF0D}DRHvj+t literal 0 HcmV?d00001 diff --git a/.doctrees/examples/bilevel-pessimistic.doctree b/.doctrees/examples/bilevel-pessimistic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2e9f870adb98547d2640e3cdd5b47807b5c3e652 GIT binary patch literal 15258 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 E0n(a*F#rGn literal 0 HcmV?d00001 diff --git a/.doctrees/examples/facility-location-problem.doctree b/.doctrees/examples/facility-location-problem.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ac58219926f7a11c217bc7c703de639fefd3b357 GIT binary patch literal 19221 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 Glm7=~o44Hn literal 0 HcmV?d00001 diff --git a/.doctrees/examples/generalized-assignment-problem-bap.doctree b/.doctrees/examples/generalized-assignment-problem-bap.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cc8721e8debb0a7edba7bf14a97e077cbadda61f GIT binary patch literal 17928 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..93c170c182f32515db39ea0f6108999d3a5fab5d GIT binary patch literal 16558 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 ed8TMqyFZf`L11ki`betk&?%W8CWv7M! literal 0 HcmV?d00001 diff --git a/.doctrees/examples/robust-adr.doctree b/.doctrees/examples/robust-adr.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9fe69054a619e9282e643cb85d991dad53e10160 GIT binary patch literal 19145 zcmeHPTaO&abtbvo+mKvdBoRU=DkTb*X34p589&HFine$$MN?c5v@Fx`(9NFin(3bH z=^piEIg`~Uau5S1&_EtMc?kTRM?VBc{OGqJK!E&!yajnN5W|4~fRlWus;j$ZX78ko zz}N+Lv0Ytt>eQ)o>vK-km$QHW>+c*9Kk4bH@3{V;X4>vx#hZo58bHn-degISn(JYsRcqQG0{%w+NNpc=(yhqJb6xt<#j znHN|l&BXd)(DHbXJ$GZLcx}5;nDhlIG(BcN{wW{Ovi>-e{$wPnH`g~ot9ay`O&5)v zxXw&Em(g@JJ?>%gqt&EkrX@3uL${U0*bAcljB7_k=XuLBqX>=of7Um9^1lT;=@$&#+sZfVl7qK-KhYjS)jC-E`r2nCp7zx##&E)eDuhX z?{j7ae&pIb1QYF_b!w%1?mG7|HsUc0+N>YM*i6^-rh!GQ(KBPG@$55Wrc4$=6%BGvbI4VIXOi0+e8FS|PEC^|BBq=;3N%1_E z&-Ok9ss}_W>^Vf1vmUmk=l&%L98DbuG3K^{D6W-0b%4V! zXmHTyKDQMWTu5urT+1N$SmGy<38Acwr0Abd{Xgzjj0*Ppmd;+J256TwMoCX-`zG*p z&ZjfjL=DDwbQn9c=*QsbZ-Fh(r*Ce@1RCIR&nTFFfZD{i#IQ{0U=eqy; z@*n;m@ZC21&v#TWH=T<@tt?;b;VOh5%x}gd0U^XMg1kkLN1tVCleGf~ zBgCTtMcjC1^O%Puby4hExp-v~^zBa`u|!zE+kuz#e0C2K6-twKBZFtOz5dN-g%n-c z2MQXi#5$`uN79oJUK_${41lIC3J+f?-jZ<_(>d1{7EXB-upVCun|wa~;GiVZR`<91 z>c)k$oE{fTOlP9lh84x%DlM5$8kWDoj{nt8)+e3AI9SM0`q~yIas(%dUiVDbA31-Q z&f_T__Tezi&~)hu{N;nb=UQ$&`l)#R+zfsEOXFfQ?C==9v|ShG?u(2cPXW7F=#-;1 zZQ*0vx;M@yNK>5sfY*Hr(!JHj!F`pY&QVt&r9X1Q|IY{T2w(g10I?Ojtoc z@}V1S1+RI}?Db4dZkNWXtL@=0bmnym18`;%U1bFp)ShTS{#geyE&-E_PUh(sf|cHo z1fSSb4eEBNDceN*uCSWHgEsVE4}y@gmudrYCei@!h7&PbjuRfVq5p9ZoX$*gtp;#A zT-4U(jHnP=P%Rpe-yQ_3rEyu&z-@<<+B1?Th0Y8fw4r}E2qxvd3a2*Fb~x^bZr#&R zSqDM*G#l3n`@l;HUQWO*M6vtM0r5IcN@NenERCxywU={Jg%tq0e{n!WZpj^0LU<4@ zSYY97x7TVJnWoH_A)gBX-Ma@|#+acT!(wlSlD?X (7C;BB%*MJz&oBP;u`MMxsE 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7260872f503ca45a4502b4ef545276e5342c79fd GIT binary patch literal 11508 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 literal 0 HcmV?d00001 diff --git a/.doctrees/faq/gap.doctree b/.doctrees/faq/gap.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4f40791d08cb2065988c5f3a6c8b891ec921a994 GIT binary patch literal 4713 zcmcIo?Qi5p8BZ?R-R$P&a_L<;prIxQM~>d^rV<}e+EVF?peT?^?G*{g)t$9xcjjVy ze4cS$lm@|vN*8H9RH~5>LWuAEPb#(l68vVy_BtyFIjKb2$TNQCndjyAy!lV9zkIYY zXaDp~nKGW73`iIzBBZj=OQ8tzm?odSx*1d?t?l2}ySg)_GFs9#Jaeqg>%mbH@S?CHU!15D_V{ ziRV^AV)wKZ=IL}XBEexs$BqUMJj6M$?}L4j>y9E5LtL<)UW|A`i@kZ>P6;Gd1zXTv zzg7{ecBR?FArmnjW_gm(Yiv?W-a8^rVTYaN_kd`wS_4X=0T z)53a+dF(azeYU{1_SviZ`G~M}*p_WPDcEiNUdHb(e&2agU` z>cUWDl97}(MSt{Ic-Ak{n?zznB2Ux`JoJvKmrLrYW8sB-Jf_Cd4FV5FlLM#Oj{YWC zP4#{2`ue`Xwyd7*N^j`lJlO2zk>;hW8$A3DB$S~`kkM9yKi|1V-{VXLmH!~GK(Ov0 zCT*DOP8pbmZYOy>qFJ%8TM-%22oLQ<90Se8h3=lj(XLF1Nn=ZCMkURTsEvf*mB{Ed z>^y@EGLj-fguVbWu6bmNjP%8kvEGpQ_cfM(ehnxC%pwuIg6y7e%#O}wBMMN`_1XOx&l9c6H}0!IO!90?y4a-1^^FRXM)R6I-6DLW}D0cT+teLvJc-Lx_Jig}9vD zxAmfxL@!8X$|3&ujbwB->;D6m`rB2dLAP-Zu~onYUHcdlo)qj0-N8zorU;(}!&)!n zKRrn!9&lAWx37;$mf+ExE876QcG=Q4;Qm?$++7Is8Pf2Mo*y*yyku;8Wf7~Ay5VGt zSw5N`*w$O7E#R_`lG~qFEYm3TtAt*#OZFQ;At!S~oB3 zp1!SsY-!4uNc=Pt6C^m-TD6o=Br5jibg!bJA(pubpn1I(y>K9qH|v_ zNvagEj_&Z5X`O7hH_k+&5CcfMza>$QKCObWZi`%@n<@6$gMHndQ1nwo36qt(Awk2Z zNStD^oC%>IDjK+xLeCEYC?|rCdk;a-E0=j@68WkUfp1zr^A@7CAaizF=#4ShBtp@~ z%jbI4v}ULV{>fNmF(A1n(Ql?cyl$FX35MTwJ2awp$3NyMt5y4n`^p1lKMJ#CG!>ch zBYK3&vUfxG7>Vj-OW&d=99C3B<+37b=~hTb`2^Rknb;V z^8pfJ@=Bq*xf=I>+Ls*9uUvlV(<~F2&qxv?p}_-2)Ib&brn7v5OUrU8^ybW)85Znc zdd)GN3Q!$=m)>cll1 zm_dCGL^6hsFb5ASG_W?(My`ZE-O@Kqo4*?7aq8E2gjMYZ2NbgenI3Fz+8v8@b))96>Qoni9LIlxz#3grlz3GQsl2K$7DW&XGae|mzfie=2VS^4#S4%Q~ z%p*6rylkFu33?41m^3lmLil?bLlykwmKacOnP3BKk_k{4@fa!fH|syrYbi~q>BA_4 z%98@>klnJ4EHG8{Lr-j!=0bNo@?1S zm|<^rrtI%m>=C)d;PsGZ15VZ0-hpf|WGaquSyzz}LMT+M*jv(@0A%dfky+z`Ga;gZmX36GYjw93d@XsF&>8Eqye-q%`ejz%Z!_gBP$q>9lO>R1XUH&_0lSePE)vZUc~}54=q*Ep?^?Xcu~cCPxM4GQH$diS1O^IT{JXhVos- zv}5fp2nA#*?`(V zuDfQ}lyh4p*w@e5R~I?kFazTzO6iyEey&%W9<(B?qSm__gL~YL3DkOZQy>jZXhv zm^?Fx@|?dt+oPbF*fMi}y?sai4gQ*Q&23;Q2Ig{Pc2d1B=>ao&-@Inkbo=Z#BKpWcM-=njR=04gL)% C(-1BI literal 0 HcmV?d00001 diff --git a/.doctrees/faq/index.doctree b/.doctrees/faq/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ceaedce12ae3fdee768daba5a24a524b884270dd GIT binary patch literal 3506 zcma)9TaR2v5#IIg+;(?nFSbJ{X50T76B3tUWG;iSZ|ISSDnB8W4KfP^T#$9 zGFwepl4LsJHu!#`<09pm3txsOe+{37$9`bgwbg}*dGI^Xh=o*%;aPZr%@OH4sqCaS z&~?l#`TDr%`2J)vju!0GXF>E{1b@JsGjd)y+(-8JWMW~<_hQAYg%IC68B42g{iMj( zi#dz03|~|__#%_w_h32{zUSDI6oWYM`$}d!Jm2-*oWWBU#GW5SZD?3^n}{Y;p;JCJ zMV4_hz1HSxDif`$|8T-iVSXyJgs&#Xx=_r;!1pYVozz(ilIVyo1@{=69VeaQ8(V(w z{onn$j2*lCpYRo-Qwcv0CB|YbelC6__QZpkcyCtBnK%J5;_O8b_wacOpSSV(!HZCc zABrbXe^jZ9hvL2G`=w9)Sf{xzvSj1t$|9)P859|@-4iU%b; zUBLC5ZA|@fjmX8dVR_C?VB0YN`Zml+3vbi%Sez4Ye-U_-po)f!^3;5-)AeK6+1pGP zeB}#7k;Mq)wf{a}<)Blv7Dn@%sHE~|K}d0A{rA361>}dqITSWsYaD7A(^6eL^!J=$ znN^Gsk8-1zhTEzLJ5D>MDp+fs66J!B-1VclFjPoUT{bg+)JV!woB6)w&dF?v9&+0D zgoV+W1aSqjMjDT_IUME=PPm_=ZYPM{V1pm2+eUtL&<@9*B; zjJPq{L;^LbKyT0hvBfU<;|lo=E1l9x@aJ1QTPDO;epDGuh>Tth8q=DV@Z7KjmW$fRL|==u>WoQ~Ea ze}^7~VN#@d)bbIimI4VXnv5wjcw9=#YM|7wMY-igqN7zxY&t>Np|3@oCrgT;T3<>l zE505_iL`94D3IFAUQ;Kixg!K)Q5j{?!RWA7i<-9R-=c50#Bx&>CeO$kwT449HRP#U zqFbI)v4J+(5-e0Ql`j18}E3@r?kX;-Lj89YaERk_qT1;JD4KS zJz|Vapa|ZUSStmT5d$8N-tTMqmxRDSpYPhw!^bEG%#I%pj$E4jqHs@@ifx* zoofa|s0?t9Eir9~ja~of4@ItIjG7xu)Sg5%<0{8vO2D)61B_P>Ce`@()c@?;)W3f9 z6%Ks;>hF`#4wsjm-JPB9JYQb!k@om<2YMxM=F|JnLlgWaD!fn>A$O=9}R$)`*7#BNIdmVKESPpO0NN}gljDA z7_a@fZ7E5E2I6`ML-zlV*bM~ZZ-L;y;=gTM3BVTi8e8?6q`NMHPb!p z=^pimIEySj9%WiT?jtlH1$UTPuIpiP69v0Xfc7Z+aVy}z+z3Q&+>LEEC zjje1VnB(s1s#mYx_p5sKN#&>C`>R9ppEw>4Y{wfmP0R9pi-(CgYWeNB&%G#lmR$Nl zvXd-{YG7`KejK!UA`YQP+jd+l;9l|o9~Y^AzT>-(IQ!_vM<0f4%ZY4ukLdV;Bp+ZM zxzC40>uEszFp>PVnSI%Q&7QF@tlD2%ja#OD0<5r4JxJ^`_J(WSU z%=8cG^Jd!VA-ZqwtUKs7G&b3q%UR2Cnrg+LA;fg~SjKudMy$jf6iVu-IK78fC1Tc# z`z;dE}6GUI&NIP zT$T{2U3IjD5jQP7Xu@)#?R#ZOxlj_7d(RE=kDvT(7tB9?^79mGAv@vo%g%9a%@6W5 zzp*qlR_bgmg3)Mo9^V@7Tw-gE$JR);+NR4sTKDQo4kqiIv-k&-vDog9WvBhn4#>q;1z{N}8?RIib+dz@QP1V8Id z($8d|!XBA!%pouY#t$6|RhqT?HuM4inQ`O;q635AZZnG@wGf_=?~Fs5awCmX-m{}< z5MEnePJ^E)9(K&W<8C+opu6mN79TbT_TU2N+2!wV7{yduhufq40#CtM}`MJVk76Zgl$7_T#M<|w$Hm2IN?Bfjp(6bK;|Hot>$8Yk;bX>Uf zuX*7XBFHSL-_@S4s`nPCJDGrG*--Dze1weJzX+6yNaeK~NGKc%Kgg!Fgh>mYMpg(& zN(dHV$@NdQ=E4j1h9lCY#TN(1%e_xVMjsev$oXJ1R>Uj&QhPG&RDyB0NHFedBY!eI zW);b04b~VMDJ*UlSlrY`{&IRO<~8ZkAdbQ1Tp`M3Ayk&;#He^`aDP2LrWGmV8muum z9zd_(O^?MpQz_SESWln{|1v%1dj7aeAB*@#g>?EZs`AM7{cPjr?G8l@*yO-YHS7EM zfxSY;xaA{H>LNSCuCQ)#>N3E9NeZI?MkykyVj~2pAF|G&)C|i0hRCr7lrUWa4- zE)ODh3obUGC*#WcmBRV1vf)M%ZmV25g<~KI01}-)|Ey~Tm&jY`%yR6mJkgPY49T|DBTcNq6TiIp2C%|I0Fy5;g{;y7tMKu=&4c-_`u4e3dZkbW0edT#aYIxPB zU+1g)%d9rRn1!DoE81#xXK(E#`PvNcPrrn@On)?JWAIg;fYeN3H-i^#^oP^qa)hj@ z25JlqS?tHENzkdO*6Fcc;dO}p*-GK%j+mI!*>sKQ7SuR4LTvzvdG-` ze<~Px4*3sQ*bB+fua?(d7f$9rtLPS@M1G5ou@cYKrW zChU?IwzejRtvQ_z#x6DAsnglImlpBv7)Ym-*W7fLTR@=U7g*928fts{BGf}n>$U^~u z8U$2-C@YG%hp5ZOQ3qLS(ujQ2BBO}6@v!}H5H@IAuOSPE6ZA~+&%=r&!;Wi<+8;fQ882{Jm$*=WTo*S3-*9fT5Y)e5sG5(yd-M2>E^E$agq-m zP!V<}4ppa$s93xecQM^!W~k63;AS5!Rj{MYX-R~ivu*N3EV!oEjZuIGid(1^ehC*C#OVMfaDio5d;rP8G!DcD)y0UjJ6I+t z;#f)`>{+o$rEx~lBwnIR2MZRWZX*{-5LPzG%5xkS6TsuLMG8A{zi1kSJhprTHO%OB z0-A^FenTHArKBAhj~tZgNs&EnSWalRTv|wm<(yI#sNFFvCdBE3)H?uO$hsLF6vD{M z5--yeCPAgN)J^UYGz%=B$4w8gDt*O0iIb#nkQ}cIL3EwI6D9XfyeSq3d{7t>TFfzO zp{ja=R70FoC01w-n}hAhMtvbw1t#Jw^^^#prxEc!PB9``y3GfTFRy%sE^!2%_6T@t zDZpP;;Gw*z+y$$7&~$jzk#oQxEZb4v#bnjUY(a}G)a2edD$YYD`$n#uxfL|h>hY)I zM7WI;{h?vQQA=l?;L33j9j^l!$n3%?G8C|~Bi)=n$*$|0sWQ@CmdykrgUWbZ zsfo6Mfz5I6=BYT_Mz2kS_fh&};ARimU5WKcf=t#p^fr%_o0C8ak`QO!A~rzG&tHG$f?rdPvq#Qa^zDv z>WLijG`3ICb(Zt?MF|@JBe?dvDbP8BOh9E}R4f*B@sJByXgg`3Mk1NEkQGq26y)%Ihm9)=TZ z`>vaE9$sqhM%Mle?D%2wZRi_r&p>m*xDX6!Ki@56=gnjHH=-5@k@S7>jH&6bXJ{fq@^me5yLf)j86tAX1I%fm(g$B zLTbjmmtM!xu^YkT-Fy5DyV)9zF>UAG-w_}yq+ zcj{qV*g^Nr?uk!#KiQp)COmD!cS5f&y3rogs2irGd&2JC#K$SBADEV3i96Vb+G$&3 zjsqHGAWX#|V%V=tVxV>4(38U0-g zG%p~?*D+Q|#+gEI7qavqLH5L+Rd{?u#gJ*%~#nq|*B~39r(O8}d!ocxN z&GM_Jt&2{@2-?<+QnxhUU!G}imTMufZOWu{e0hbINr`$yZmJp{WbPq@RtoRHYeX_DfaJ%DJvFcC%|t zMEkFc4pHJR741^dJy6kSyTrkwQC9=I3cAKYzotbcEeJdl8v^W(*xNo+_rc1dG2SgG z#P1OsEQ5cI>!F*y)U^5<_8Wg01vhDHK{wh@o2?s7blTP;sF>K~xa$dDc^q*?zHJ*sl?nYMts6JW$ZI% zSB;aaVNEkW2$UH|u{j^Y|HttENAUk6H@l(nxG|6F6G_7DIBh{kNX(Zi-so&;_UfrnYwtRB{R@}#2Kx>9%At|dB(F6yR_>6hEu8gbc# zu~tf#d72PwX44kB5;%$>ELYidLZuc$hAFn#P&BIv&KVfs#3UXPUY+#5Ezho$t{XyW zYo@J0ep-(2xW=YZ6Og4kqm|KX2f}k);b}F~GJ{P9T4=sdoQ4wmqEdQ6*mW_7a(qjm zQ0id(HKF)IYg@witxcL}4FsSo8vv7QJHU*WYlE59J)s2xsH8bT3ROy%FdOE(JP1vi zx{f)90$>hs^bK)idjWBAHEv$!pe_ zjvgMg*xiiWF6PM%^gHSYo?|z2q!S$*NE-=3AMHy&xzSegqYWnRDwLDFFbq5-eqCpK)YP_*jY%JB~ z?Xa9Ls_|Ysg^fs?OKql`>ujkF72K+THOv;fIFWpe*^!t%aW*0JpT^JW>BF0Gc zab_b3}=2`+B@(^za-ky2mRJl%&;)W<4ln;oH-O^Bo>tSX2|2;_Df;xezi zXKMcvYvU{2=(227Fr1{iPNUHu8F*Q1E-~9p#rNvVGe!`&{$jNnx|XBql?`*vYzy7g zDvsBz(wj?fRS2dw_E7b7_4F@RFJDz%$Jz`aK2;J%>Wf!ZPgq)q#ZbjxZ^l#Qq1a@| zY!tT_5`y1rKrNHoW_iQ08e-5w6$Nl&O%ZnJ zZH3qns+uqf3=Xj!n%WH}j*(8#K08@sj&8}j%Q=jTsX=1-q~>iEJX z|Mcl6&pcT^J-<+X=E;Tm@-x*HTHBXuEoi8I72nhad{pV9ddY0gt1nz%d9l(o8^bT> za~;r;881Yv>%o5Y!a6|=#fo&m+~PD5&)FInQSXuAQv^liFTSSD&s|uZ6B_ZI*SY*Uk=(sp?Y;)fKIylI>c9|IgHUYwTe8t_iY(V7WqGq|6>r zXY=X7Ti)+Ay(`+~lEXjPqgWKT$gXJL745MlzAM_RyP|zpw3AV@E7}Lymp?Vpp88B~ z5A>N7!V2UkA>Vo_c8ffgxdJi|R&;O!KK-)km&rZS)e`4?G)d)|uV2f1>*vtZzJj;D zoH!Sf0K!625FJIFFd*CNS{y56HIc{TVBPef8kzUwPlxw@P&nZ$IRIaU4=(it-S`^3 zu&eNO!{b9hJgZ!Q)0`|o6c`$;I!&=0XHCKUNd;SkZLxSORm7B~^yj%-73Fe+qXHW+ zxT!rNq-fsI;L$UnKl^3JE|Q7@DTQaQS+q z%GY5`mEg{YyD&t+B0z*;4PLB81r{(l8{_y0>;xT7339N&2ZsJ&LQ!|*=|E_N{9c44 ziZviWA!D})00lr1phjy%GBlvCR&F>J;_lRdJslTUG;kCELKZwlR37&gL>j1x1{WJV zD^wK$D2Lo@HL~9Xqmp6`jI!7wr{S|`z^NUqT+Utp^*r$yd!mD`uql~9?O=8D?%0P1 zEw}XbA+%uH99T;d9gGp<+c7Cmq|}ic{crN4_j)~Nqx}p*w9gN8gc9*A6G);MBKr<# z`dfqIXwfLzA;O0kB->1gD{=t^o4Uq#qcOY%n=W}wX@KYeo&qirvu+06+x&S$^KAU2 zcA#0%GWy8oL(JqGF*CUdXueJ{jp*5Txd(D+>RqI7rVQk1xh6Z`Cvv_1I_b#xLA*#0 z59%rh&<_W!oAD1rE!lq#wPeQkdKT+P!!MTc{pe7B>q{2F{_w49^<%8n`;T$F{l*`@ zE7p;TkRAfdgkU1{@-i-QpcA39DB&tKHVZNH8~=?=rORMb;PDh&fVasjHxOU2 zb!L#M7uhiDhT&FG6{ROATS5#?kaRYXc0){_ zeLXbx67&dN_Rh85azyqp|9wu*=sLgUNI8JPtn>*!7huwK1MlA!@H zvaEbUdGd5+PB}vlc!TkL<_sQB(63K!+jN7|sJQ6@)vU}viKdljo<=YHzHLJUu>m%P z)0Z($C5HStdtDLsdi=IRaWsXaX|pIr@Qj@<5_AsHbB8ueCe#~qy&7Yf% zCwyW~;h6xC3#P4koAQ08Gn4d|HLnNWEQvSuTG*a#%_*-Ss3me8$%($&x~ZI0I{4>= zvb3B|qqjR>1gcYOso>~?`=k&K5TENbo}>heVu+GXW>55v5R+pXK%6x)6>sdhjz)ow zBp8;yr+csUAhfRj?6fHD=3_ZiGmf+#K+C)W7yaYU)m~$qQKG}2{OnIFlZ~yJ!g?a( zg7gN8nIdqTX-3hbL-3u1Zbl{P<%XFn4AZMU<;f=6&$&`j(g*89p=WlZ5B6brBqduX zX@Da<9cJ;PvF4MT!7ub@nG*0MwJ92v>@;UbWhHUCQwmmVndll2oWs9SDaD=My|On0 zXgV5Cm~sv)MdS}B%k*qBH4>fZ#`g&d4t;Im?04hp_sG!;&4%OV`9>)VOgVYR#aFg+ zaM|>|;NI^c=ayZ)JFdMw$CjlZeUjrbQawu!N%wyuf}zI z@@kqX`{-pi(V zFKM8QiabCATvUfIlk?slmBD>4&2a7WHPdZ=o#wWaWY^Ya+JckCKGmb&{4wc- zq}|&Nd6Nht*6%4R6RsCuSPd9*Hrz~g_?4hU!>p%VR~Q?%5ah=}RwqRekpfQ%8CFR) zhkZaM0y%3CJq4~gp|nko7o=-&N^F{n;-eaj6*MTOh)7=y^p&4=Fthdf?G)R?BqJxL z-={(E$vX9{&%a)WHHDK18m$p<%_l_2-AC)g|1wpI4y7`{mfH}PRTef5stBk@dXHg; zrD+84yRi3B*k}#Q3f7wGDXxQb2+jb8gRi1oAWt22=R0%gQqjydxhQFAsgzSuklG6< zdR7$bzC0}wpl>Dd>efS#lG{KrauiFX%ldOVyNnwC;GU@AGkvJxhL7&9;T#iuq`YtA zG;A1BoH))~Pr5`K+BzJ{FpIIJU%ZOkvCA*xiS!iwxcKr_EW1o`!Sa_ljV#%}@%CrG zD{O0-l;(4~MWu8ehjoO8mDktdghp}|`BkMx$MAqaB@E~mX)q~05bd&$A8zg>D>Agr zh6%Wdiey?HNIG#}pd;ibd2wP15@@a)p+A@UY&Upj?E59p0o)Rl&y9}QpA0U=nug)%Ngu3$-CS|f1IBGlSY5GpT2re`{}oO z_tQjlpoVlocrh$+&7A$1#FJoN(iiqBt6%Pg+d=o#@m7BT6 ziMYLndYf`{6W8Vz8u$@)wUq`Qxob~}vtopY%wghxW8m(7<|!e7xC^=dNAhlp4EDU2 z;>Q@Fxco=^PP*Wn7~wv%^^ekmEv|_%IJA3~pIs7i^y2zc>CV^xcd?lN!?Wq{(J8Dy zHR-qh_TxOSp(%x$^rMsy-;%ldX%vJGnD`Z4tZz#ize+G~^?&wjAM4x#dm^wygJSG)7)9FlUe> z7uTCgcfQ`A$Kw48&!j(g3Y>wO^jq)sTXk4XWyh<&zf#C00wV_QVzz^991iRywNg z5W0l24&;E&(bw-6Fy0@734Qf+B&qDf36*V+qddjE$?MchagW>;$pv1MfKYaPGe?6- zaa9&?p~SD!*jp%3LIg^D{=HhrOwpyjcTUe=0C9ef@zj4c3iM1(`qA?fDaG(%hLnwM zvshFC6kRDvgs19nw6OC&xQl|iJip^^67oHmkS~Flqu=iqFx($w3H|o=BnkK<0|=N0 zBy`7dpTFmo>80SAffUSGEs$^mMY(O({2UD@<<+=+3laZ24ZnqmB~ZjpD>>v)>CVaT z_drX3$CK=j%mVpQlZ^cOOX+A-nrz)@?@8tge@UufrmSbqv#gKkLF5{etF^2FS#DYK z%N)uMvtI%aWQmz>%uk<1g&22$)hH$)lKXUkcX#?apLu~><1Y z*Ng9g_@gTfTBWoFdv(7EuqJTp4Wt7dR>@hd(x^oq+F0Nq2|(lnrt!B#I2Vm5eO&Lc+@a;9rp>{i6-Mg(t>e2 zY}d%$+P#A4D&J+{JGQlnx+PpRlp&CaU%_ZG;eHA0cnq&a!xY$*OI6;$jTD$SNV4}9 zi`GNbOOXn2_eGBSr}_9**=gY9QcQ|j&aM1N?z`N_0b~#Q%DOJnNqS=lNO3-TjC^KD z;=IeXM&0Pa0H;%Zd5#W;&~e%q`VZfBG7>nrxJP0$uEWR;X-DpjrebHE8edeh8XZhZ zI9GBt8b`E~{NcDOYC669sewBhuqBcDIQq+)g+pfPE{R4Fqj1BZyK2m@MicP?GRMR6 zPw1Saij)()9Pk_`0H~m^4meR2nT-+zc#`ZjRDg?}uAovw&%)azmQke>Wb_rFj1VPk zcB4ZLbc2A4$bGyWP0|f1pd__J=L@^HqbVFbG+mXPqs&NFqlaXPkjH#|dFnX15eDPM z4d_B8%noSr1i3O*KJ3}Oa$i(3G%I}_iKY=Z2>1YC=qHs%q7hxx!X}zeQIaOGh#E+z zZKGrYOI8;&C4$eifio35)}j1XByfg7qx>{(x5Dp-dq1ke^Bhm5h=m1u<{LB2I+8x` zmzdA>GQz!dqhp0Hg)UmZfh`bC$$m2!lGYFReke4K9-ujZ_I%t-<>C+@QdK9DbN;}% zj`#bp*`p75$Qt%^6`TQ-gJFmhu12HSH4RJ?7%}Mr1tth%G@7E&znT?A_n9EKNj+@4 zYD$toEEll58zD35@P01g4MD4)6}i3$bw|auJ*f2nQm)`=Qu8gDO6q~Sj{9YBy%zPQ z>ZVU(2os5+980!}aUwd1$xyI}PpPB&WL!;6m}Yc@eqj*g77`Q0+E8ygmiz$NS^5e- zIZgWwlw&t>{N2KV+Mv7gz~j-BD_k6fk27?b5~-wygUY-$q7Nl%6N>$cyBWaFVFyY# zI!rYg0Bj-^d3{)(0Lw9s^78T1PXeD)UZY;LNz|^jk?|C{Pwu0iqg6VdCb| zp`KFC{Gnp>)<|C{pPX*ELirdK%HOlbTgI1L>(KOC6!~ghrpG0EjA8G$_S0h;`etj2 z9+&8GkshC*M~5C?qsL#+;|KJ3haT6d*~@r@(FBb}iRvtNjJNLaV0U<++dRk}9^f{2 zew#bK&7I!n4sUa3cS7SRT{!h+qrz|+Uy(rm5<$v9l6KnqH+uXFJs8|^f`!3dre6%M zN52@{Kcim^?tjoP0+&_3Fq+KMCu3|9nWns%X-~)!Vnazixit9_Sr60*dT!(3a7yxA z^}#}6T6?0W$BATAZgi-pe?C(|deq@!U-1{HNnnyVEnajg=rFLUJWT2PVTVTL>F{{Z<{uCxFE literal 0 HcmV?d00001 diff --git a/.doctrees/installation/global-installation/index.doctree b/.doctrees/installation/global-installation/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cf86187b33f4b816256787b2a1a39a9939116563 GIT binary patch literal 16106 zcmeHO+m9VbS|8hUJI9`}J$4cs;!WGxIOEHlGYh*~cCfv&oryhiG7k1+ady}0>C;{3 zbf4+debSe?M2gn?u*f4y@IWJkl!f<&m3T%=!~+5(5CR_H4MgA%KwPw12?>5*RabZQ z@yy9goWy7$%Ct{cSAF%>SKqz9dNlT%|9EXg{Kt>Reb);%8gPdcHU_E?Z) zzmZ+|ZuWjQ%WILf5r=7Hvy6|RhwXa46R{wBh>z3MKk@vykpmb{tf<4v;qDke)o2)I z%ZfcaHoYKDEZ?^hFANqkcj95j>sFFPUMo#7Kh1Z@b7H{e6Si-~F&goEEUOK1uVOBfRFbrtR%_YL%e1dOUK)| zTJfEx8}?W;N`rt!&5bZxYkE%T%LhipO?{qb#}8YUUzr;n9Jbkr;v`F3ZjDdG%%BI?TYo4s$%)N|<9Lp^>=E@I%}34V^+p*fxlO4Pz;xA&DEN9XB!BVPy2e zh#8i%ZUr_#q%n(PW5W%N4J$|pVh*QH;|)n^f6E91n#zj|JM8trMUgSf8lA>vbT<}k zu=T=fGmWFB@3mGhH0n!jV=GLJ*z5H%Sb;v5M1Yhg=LB+>jSYc_7c@Lq*j1N1!jJS>;CMmD+{A9{Yi{h1@sy4j_X45qls<>HF-hBC zIWtc(v4)tvJK1LWsKAaNiW6wu2|VWrTc*>INN0g`4~MB7K8|rvqZvQ1%gF9}G=n{& z5k1QbGB@B8cuThWuuX>u1AZ7!w%PYR+e@;?;`4?T1^7wha^u8j^vR^C3hnnT_ngpr zwPMS^^Q;AU7r|gdwfHY;>k!%;?0ZGpa~Nc{t4eBzz8`LoR%V7UzfkACp{pgOymA4w z!=UYT(uiG_YKye4u<)y;>bdzTOsDZB*ZIO zzE3;a_TbVOFj9SC$3w%87;L`*3keU*U04-%Y}IhQ2o6seZIL9w=HdShGG&6vV3Z>Z zrdL?F7MKn;-1EsIN>kTjP=&B@G^#XnvtEP2z}sQpW6p)b>g6U=(12{-7lxy$ZOw-| zWi+0esw_njcTB8I8~&&I@G7s&y7zd^^*XMPza-BG z@*GKE97cWu3v7?YMx5HNVa1mX>G&cjU{L_Y4X4%XdGCp6%ZNjN9UgU~euGB0t<+C0 z8x+@&gh>^@;gLI@h;d;6IVHc-w%~~imxg?B$SAD>NalU5V9O{blyfwUkq8Y0zU+p2Le8$NzI-XfD}3 zicscWyYkN6x9^!Z-@JZj(Y*WC%F^BCYgc94H?F_&_Tn|8A?-i3@V>?<`R-0YwuXtg z`)}^QyZ^E6{%5W--5*ya_N<0~A+fx3-S9nFEd-$#FOs14!#MU@K2t1z@gn#=ATDo* zX&?eBk~`^olW~GzLOOF8IddCV1X;}d6+vHNg6idjrM>9BfW_%s0xdZnCs7!5boF>@ zHxvsMxzh@?Y0eHzQ?*P3JKueYdK&^aVRoL|krEpCCsy(8f=`aEU z%BkI`u3_@kp$naLdwU5~x<3yndx}-u_w*p7dmZEU9*4M(_*8{mDuKr<`VQ#c;}bly zH&YCFnklYZPA?3+f$Ya+K80c7?@L$5n;i)2LYqhrm=2Co<%~R zdv_A1dHe30i>rnUtJGpF05TCdu1FH81u&;R8#89Cin+pe8$l+ltXzRif?aWwq#rLd zn;RP&4a7yXG|;T6a*M(gH@`IBm~XzDdiEM(r6@5Gpr@P7IBX|~RaqrTYIai3X}C$x zzqV>3{h;z!Dsd&PsZ1aBt;AKCw;U-w&Lv~(ut<6#8OO{l=B!6-BUhkw-AZw27cNMatKnZsnRO{`CP)(Sqp{JE&W==Z7^NtU>#&0cceZ2C=pKH}2n7 zvW{A4=l*>jM|TM+;nRF^FX~;J|B2Pqgyn~=#1Vz=t8G0qo1iFodRL>Qt>^cL(o@%y zd{i8k@gZPE?lz6QjDPd9vwGwmb$>u;8)_R5D>sopG(JmvD=DiE%OoY{l+~Y;7Hy7> zzHok!pQH_vOLh{j0XpT!Yz5uAe?)wVG((-&DQzvd%E7s0xz>4p@Pd{@6eQ3ihrM}$ z&7HJeFFy(Ud_0Ll)!hFKrqww7?*=$r(?2s+{X>3^5}tbLvuLpXVF1=A)INlg&_0vO ztp@^Irx>lqizE8!y88&c#Fh`IC~Zc>^PHF z*+GIKGj$ZhQxVFa zP+3H=U!Uic<+d$;qHVje8{M{ZGXh5pi8?G#W=*3Ak)z6}Be?G1U=q0uE5^T0Xar$m zxGeS(I;fKA`NXmlM8b54M3ob(x4h(b+8T)FJ6__ZEfLAPJ}h->JrWf_h{?-b-!Feg zC~4N>{s0lXzXz38xI zXX)a-T)KF>jlU*WQ8;RcWye9+EN|Y`8C#>N$rVkaBGw6qxSEL@Z&4)EX-$;&_}wcSz-1rRxq~3X|~z zAn`ON<4zSFRQsV;Q!lK1umV1%Y?aLDiK?(T?X!p~=ZuKXn~?z>*cMebhx$8N2&dft z+>Xf2L+PBQ4(e=`H>^|LT+iAvEI$qhlZWysXleQW%JnziFyFej`1;a=)%;jdo{I>5 z>!P$uCLK|3ns|Xcnv{vjy<{7An&xV=x7D=MI6_TYX{P3n2Siqj+g{A$ww?CAh~Q4{^i_lZ=L7Jo zrfkodBtjFqVV*bl$=ez#gG()K!7%&rOHc>J1zdH#o`H(z_LHT2@5^? zPgwNR=+Tvea6<{*{X^mq86DoOsNQlIpUCx#79MI%L+mvf%OUodlq5TGl|4oY$#oxkaf3sq<|7r!tW3QsHDmk00{TLqdhE`}bXvAeXG6jm%Pt=8= zh9xgLrf>zdEnOU%#SH`g0E}iFO5-E~oV;$ij^nO1c`BE8H>?iIIdLvefu;z3^0232 z+{bwvwMGn=22e9X`8Ij1D5}N100DnbSdk*W`Dp7_HLZRAJ4xnh54ANc;J|EJ=BfKtdi^O5zZ=r7;7j;Th;k9?K5Q(HpYk^{4!|Pyy z13#J*Wo`r4JK#KG)2p?h-LDdqL3-mNiN;4$xp<10E7q7veUNfHoT0FTCCFKRVh7@8 z?ir@`sOX{emCypk{h!JyItnfaIQfvK6({& zX*)$tLXepG?WARXM74nH7&vG$W(nMC6fpARRC6G%X0=iHkf2&H;0jgl+&5R#tqRw8TK&1<7=uppJ z)5yo$6nF|ZzU(#n3RK33Ew?g0(*_viV3_vtF`uFfQDAFxlXN-Qe;Tz=Uf-lVBL>C* z__MNw`AoE!RD5Wv`(c(%tuv7GAg{ZYU%Za-<80Fd6_Ex?W7TPl zk2$QBb}-#ET^Rrs(F3Wr9$ISHGMmwo2tO|X%}h!?(M=6pNl26S+%L?<9)7=A{b({u zNtuXy93R3Z>byJ~g}_H89RVfaC49)1F~FJa`EdYvigFfKFXL=n$X4B?LRX)8@avuxrA=_=lo zllJ;%!IB`XXh0Y%>QiZFkBSx{5VZScQ$J>ix=j@FqSrA`~M4Vk+#xLMXG1ffGtpAa+Nvm?GxHx2e3FskAeHo_>+yU=h_wVQ&bUgDpP{-CDdt zX&)zf1Lp)CFrtql+a!DQ*sFZH&-$ejp~c`jPoFM7GLuAupHj&%G{=qp7V2$-Mi_M< zQO{9NfdG1%xci0eNksiJ>(9M1|7Fl~I%?Yk;Hjkqe_nxy@LI&OYsmY0ENP25pb(l= zNrcI2iPeG>Ib?z+`5DMt&n$$q(1NBcq2A`l;;kUDHqD|)8injWl`HZiagQpP-c2FZ zF$i@+yvtX4u|^m^e#Uljh0wNbDQMz1xK;qs7g;?gVWU4ixS{7xo# z)o)9kw#^TrW-No9~7<8mI-%N}z7RH8A(2&G}5FRbE;} zGoZDL7rOpL_g%??;7-;NE9MjQQMS!W({rZVg~)e1^f&>BzI%)we}?Q&_fP2Ym|nj} zkCYw}J^qUxKcUCVG|Zq!iykH(DX-BabZ<)79Wl*gG0V1?VOv0dEFf&bz}qIazVv8HAfgJvr5Mb#epZqE(E z%D=!hgD%WZCSWXWl(~ado+Q zr{ygd)moTxb&I%6Tjjp(JpbBlY;;6oVMwMm&Ov41I(FrrGOoT-_(!KpsuV$09>Dt> z8yy~n%T%|~J&1mTKBn$a^0C||AK;_%-rnfa^6PiWFv>gTP}J&rHo34P5*|NX&_jsf Z;oL8V*mp<*>kgSK=>aa2YlqXC{{gz2qa^?U literal 0 HcmV?d00001 diff --git a/.doctrees/installation/global-installation/linking.doctree b/.doctrees/installation/global-installation/linking.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f98c837c18bc4ece498c4a490cd9c8d575d7f5c3 GIT binary patch literal 7405 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 literal 0 HcmV?d00001 diff --git a/.doctrees/installation/local_installation.doctree b/.doctrees/installation/local_installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5bf8b76ca738a620c3a5923ade1039f4c1c77492 GIT binary patch literal 11782 zcmeHN&5s;M6}PkAud#P+Z*0d2c3jwCX3g&G=0hafIFUB~%F6cI*z3eTnBJc5nyH@c z>7Mk*eh3AEM5I_LBt)8H4jcl10YZTIkT`JTLnufb5NB>6apS`8Rd@B&jCY46icko# zH0$o_s#mXGz4v>sUcEPmzx&VGJ?fu47 zRpoeOZ^U65IXshl(8Cd)??ybx?&ISm^-nxMt`!7E5<6=0?rm#ik&2pS5Fg6Pty%~ZVb|L)bZ^&MkAhw1G}9+jk#&3`%<@^wTL(J zK6volOir0I&8nHQRE{Qglg4GDBKP@Tz_Y7+Dvrk?9=jRY9bqtb_t@S&dsc)OvyR>54F9{_^&C6l zE=xj|2+ougm?;<*HWFS{J!73HY(Z9x#O(!5w&5kB zLc`Tlm?oMwee@F6^usz-Ym0?JPQVG<9q3b3t1LCB1v3N*O;PZqcqxa?u#OK_IE%RL zGGbr>slN+$Nm105c? z*cWRPGBngie(A#rRqOnS7bvUMs08C#BIALyAK!7K3_h=$eD)ecRqj*F%Aq&`evIPp zEHTgft>h}Kztv+wqQGiDpS3s%RF(!g)m3}_tv>p=6VsK z@j8#YR{On={bGzQTsQTZyo>Jv@NC~SxntWeJ~yd(IoT@|gZP^!@rR7XL8Jiv6<$;L z_$8U#M?&tk7dhtJK{LhX>d)k7z6O01NvQ3`U+i<7vPY$gVLKe6*rLrCwLLK0suZ9+@Ek9;Zh-gblF`zFCY zsf%}n6yNGWBtydDJ6gE!J#6efeC|%7hYX31%ZWm@tU4U~nxSBKzyHXdJx&`&Z7I>F zZ7brhr!XzI`s$@yx0h}#vuA2gKQpb(wc6gY3d^0YRAQb~FI-=|dda$Q_pWt&WpVl9 z;;oD9sps&`3miXndDT==G@oG?5#+(rRh*zgg51o*4uw{++G$1j&h1Oql{>d?yu8Hj zUAjHZ&alg2lw(Zb@EO%{hHY>bcevv<5P%3fVOP>9ta}JEd>@DgFhNiQP@#!v@)eHu ze8LUkIfAY8D8{@cT$!;323Jh>t&1EHZN#e;R{T?B^~;r|73TJRt=zbEkBKDd z#0ztCO~gKFy@rTpPWbQ%_4P;vpEZ0a3DMY<#VeXr7X98Gnlxs( zdFSP8OBdAm>B9Ox)!0up7IyqUp|QD71QP!;9&mb-AEeP)#=nt?&If0q&H=Ne;MiBt>D!6G7OJ5?9@+YGzt<>mViQ0 z7Y_Jzr0Y|&8ha(&;Aost$1%r7Sm(zfFe49fVbWb3Cj5xWiD)X7;`B&R45yLk2(R$t z1^TVBbs&JkA4HAB%XZ;U0m7@Skp}8Gt`DvG{GL-OSf63M)~wBFBJ16yvB!?f`9b=lEI6X0F2Q}MA zwsW!u@xOg!Yna}((iqe4w6-I~+IkdAujzo<+9lQ+f)##b%jr21_OQ9TD6wV$1(H%Y z|Cw38yH6lET#QS5k2xLjlwI2Oa2?s7O}mZ6%M6Q=VPiUgYo|aDgkG?7WtrWGiw==t zxW)i%7>mPBfS@A|eX>{J3qpK~=PF$s863~m*gYhMfJ8GCy*W5k#vp)jg@wS5NK?k) z6LB8GkLzK~*BIu$a_#2TTBV{BS?b`a0u=*t!2N0gks4=eeE}$zqt*zV%Ga)u=K4MB z#?2MP&Z`A9Rn~1kEzu00UtPR*=hAAvfLMg7kFzxRUZ8{7!YZg%OBzgfpH|dV*jy-H z?>Pj3==mJ$T4X+sL?n}Q=MZbLP8i1?1$D&^ojXTDqb+KLDS}5tziQz~ODwEX;teN# zxPgL(-q!Q^F`;fe6)~QPbI_X9a6LiIF`g_&e%zdi%*=lg_dIPv|36%*2E1slSPG5Yzw(I3u#w}=Vl!k_w&5zSy`z)}tu zODRFCT+n#gWKg>L5ie`97iNu_2Jn2S%X5y#dJo1l;2Lzk@)2`<_#x;wCL6%?sej`k z^co)9!G##JygqPA;vL(xbmI&nMv6>TSFOfL{>m{K^arfs!{*mo-yFzub(bl&F5@G) z%N)S*;#7PteO(PE|kM9&JXpK6uT_j;l^Mk%= zdZEhHC8$s9ed^6x#G3-9quWL#2Kk3pakf<(xrA!{Sgm|#A(i(~!Zq)iTEE7)-Cs3{mYnDb+j_2+7R((mj}mHM%tOlV ztbpj{A;7@?trH}{{C4YU;{ehPB+sn~j-X!U{Bie$bS4soDrZn&w$3~n$N0y09AoU= zU;FmX@W$F5l%%!dkLebJ&foj!^zP%XafsMa>fa;$ekKPBQ|S2XydlY7Xx*0oI8&tI z*?BL7)pNW3QpIRP0(h>CGY2xT&6;?Lvi6C}>sIL@q2!V?gQFEn7?>mM2uBCixIWFk zT2aaC{I*Wjb5I6L z;j+;vU-=wn8_FRkFJF<5BeRGLUff4DkQl&?k89PpEL8yXM%H3joH!86$F}W-A|hzP zNpwhYtG!d%Oj#o&&d4K4WCw9k+k^|QCepBZG1G7oqUtHTx<^)YAMWBcr7&o(oOIHN zDv+$A-e_4K&@HOkVOfqL79;RNY1ZMg)T#jojGJr}D~!BKxq-NJ#&QJZF{pjXmc{h4 z9B*=zE!jyJWq5H_Y8FWsyzGy{Fu`3ME^0P2xpxi~2RRGsIt3jn#cLY*c$-K<$D(2@ zx@-X}!{9mE!p<~6CI}O5e0*C@P^D9V+rUlaYTBq-m;`uu9Si=ED$8OJ{7l}$eXd$8 zN}yP};0yB=1BwbTh$Z5kFiI>RNo0ug5m^zoU%n2@!+g_&6cam1W8G<34!gXbHZk2K z6;D8l=s_rkmT_!{!)ZyxpBF%87W5>f+7(=Gr%7Y>`PtaR^NHS%7LTGZvIH*9d>&y3 zh*bxd;0JTb8&rlBl}w)O`_f0E^<}7|oXqKVdC;Rz^nU0YEDzBdpnI`^h(%1IvU&JXb4(7?G0%s#dp2K0>v16K>k> zSfxrru&M!YuhMZu@Sti@%1*oAZR*54bwdl+73g&cmWPBIDyX_6m6pI}*S*-wRra9e zdNF16v5uJG|2c5n2oioI22U@J^;7kL!zCG{?2hRwBZn7Di22 z)KTiG7(h=e;Yf|a0_m29cV<67|19J=88w_f^3>8Le^!%+@!F)aYp81Tc+yaF01)Ox z()KagIBs5HMQ$Rpt7Gycbh2%g##y4Em0uJ+kcZ-}Ah9>C@+JsX8a_q!@<7~1xMaPa z!m48k>QVKczvkGRi}oaWblbu9<@N?CD-mM!TH3+I6IF()s>T8a9zc6S#|s+JfdUt% z2q=KEece!`(ZpV$Mo1YWm20kLP?>feFdipc*j&Mp>UbcJI_R}#aYR|Z1;0idIK zOi|6|NpV(n6=zd9VeYA7YQpiL8N?=L&RfWIb-#Q$W=q}=MYYg@c0Kesi&HsUG?&-lp=}qy4msFK~tc7Np$C_~Ch+(D$JTSOZ+k=!K&FUC8jQ>=uj! zWvDPW6adH2i+sWoU(9A4PAB877?!46OTVaVZM(H=dF?IIaL>O2*+-;ftSCD;ZN?{g z1@UPrbcLfsq^JW5T~LQ}%TKV8gMuY;_Aj8{k7&aOUFHrK{%x<^msbPsTUx$+gPaWR sCvcq$(9^}sbP)bwPEYPH#i3Mse-XCBgql=6U2zHe3zVcV2?Ztp0zLwey#N3J literal 0 HcmV?d00001 diff --git a/.doctrees/installation/options.doctree b/.doctrees/installation/options.doctree new file mode 100644 index 0000000000000000000000000000000000000000..19c810e720fb343613e47b90b5252eb8f70cd917 GIT binary patch literal 45848 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/bilevel-optimization/files.doctree b/.doctrees/tutorials/bilevel-optimization/files.doctree new file mode 100644 index 0000000000000000000000000000000000000000..adee2a9de2e723491bde6c0c749c0dc67017d255 GIT binary patch literal 11882 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/bilevel-optimization/kkt.doctree b/.doctrees/tutorials/bilevel-optimization/kkt.doctree new file mode 100644 index 0000000000000000000000000000000000000000..64c1438b21636c8aebbb94f1c1b4b0f0a734432e GIT binary patch literal 27136 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/bilevel-optimization/mibs.doctree b/.doctrees/tutorials/bilevel-optimization/mibs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..735b4cedeed0ec52ea90c4232f58b29d4b7152c6 GIT binary patch literal 13210 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 J8@OcH`!6hI({lg- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c723a7819a0c046cfdda8119ae009ffe27ceadd9 GIT binary patch literal 2959 zcmbtWTWcIQ6i#gKuGe?xMj>%Jp`>wWcDGGiD1|<>=~GM`2&Pbq8MGtqO6-g@l{EIc z5NM%+81xqP|Mt_|yk01U)_CmEnWJ<4z9aqK`RmWk8|9DNH8~e@J|vV%MVaw#ovNhB zn6&knODlXIgAoiOiiKqKKIrJ6~9>fKIIw<0yedVkNb#0n+b?YzUgym#sk zdEa%cuqj*kUjO*|)CX%Y zwsykiA*fTRSkL!eKW8z9Yqb~`7L^K>SrycT zD)f?+7y}{RJCbD8+d3`stHqckGtDMJr*J(>rs0$4yZk=i;t%*LKX7WqRmMiTkdo=q zxze+dpen8YAUHF!g;iRR)QmDQXLKN>WmBdHxmHt6vJ6!ljm!ECh@^wDDkL2xp~P%Z z$)PdOsOwN0Wc~1Hr5K}@y>p@^J}tK9yAv)6U8MXb1LVu#eW-D+XHlJemLKYhcXtheZ%m#h@=d@ci^Jngk1wKp)(kU4? z4K2~!vC5LvAKh>pjSiz&7NKf4-A+>Iz?HaV##SS#7~<9qvw_PPBm3=Km}mu%O6pzr zCz2MRMmt!#s<3%s{W0G?cKs;>>Iv}ev7kUKu$1LkY-*(}LS+*%_wMG%yUi+u7=C9^ z*r=COWH^q7dhl;zcS)w$JDa!#HxDmk2vFj#EPLLzYA!vgJ-gP?!GcmprxfKDdZPOyl z;}(yoYAFcwQcKKFnAt5QCDKFduSB_F1y%7p3uxM7^IRDgFYYWMlGyl67*XMMH>Sdn zaT*e-qwF<20q3@mi~%!B(!uC5RYkJjA*0GY)tGus4WlLv%cx;=9tEt$t$OnHh2;9W~q!2OoV2w3)O0ZJPb z>UO!VmT{^QQkV81;W&a4G`=Dms$7;3yJtlX7vT<5UQFs4a0&FNM92v+P!EM$VM>@{ zyrd?wfZbG)iizQ-F!O*+Hf9v`y+8z3#aoQJYtrft0x_&j z+C?|aQ(Rvl?*(D?&R_AD#`S~1UgU`It>>>U4S$6HFZq^n+l##_cW);G9S`ndv62Kz zHhNWkRr`Ic(>~HSuOEE?c%KWRey%Kx7)a QwL!yZtEWIXyo>ShZw*V31^@s6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e5350ac958243f7e78a873413070ea75139d8dc3 GIT binary patch literal 3440 zcmbtX-)|hZ5whX5A9Jcao~g8+T*$Ni;~U^ERX=%nTBa5$X#zL~l220ydiYxR%6X-h8D za!T`D>73c%H*=j;1ye5k6z+W=UW6k*GW68y%496~YtYEJkhx(hJj2Uz)OSMKX=`BU zs9CU!?R?;q=`K!G;6dcUzttT%X^xzv>7+X{RDQ$JMKlojmS2}bvGC}+ zAC?q1bAhk<5$QvL)v$|zm~maOnW>awW_GI0$xP&0Hh-|g&bnjmtPo3ZkGKzP>lyS4(gwDg*$?32+G=L~n`~JExddcn zpcHUN(lb&M?nU6=@*V5{@Jba>7Yc_^SiNp{gYM9tko ztC29tY6&?Nj+3s;;=Fc4TXzu_!%A%&k?c7`IB)nZPG!Fw_tOshHWh;WF!LjxcBF-5N=7b1TnwzJ*5DoWDh z5mBuLvAY;WWi)uRmefd(slO1FmQ}eX%Oav_546*kk=30wM8MYP!iom3H%TrmO=Y}D z>*Yqr6L4+^m$6_*O*$CeZPmzJ$fiNR9-nZCWu_)3Q_)(Ed~ai*K%SZ%aHhnY>09lLhL@NN*ocVvU)UVYrr|sqcfrAz(89R4q}x+iM^sGiilmQ zX~V=g7@Y(_rbto1tviDUoMF5>_qQ`>oe)+~AqfUZgWgOLxwcd1a$vz6MadB+DebrX` z27M1@B*TOWtf0wcT1tc)cR&}}c-YE+LKJ=o{{$s4FM(W`uq{x~9N1TrRWYWDT`@VfjJZ&93|Phy}3lAID!jjxDA6vV$tueJ_aP!Y?r9xBGC^0NxfVlT{uG Uvxr|$w(?l$+nN~1p(>sJ2jfXW$N&HU literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..91718540ffd7af389e438e2959ba9e939aa86c75 GIT binary patch literal 2984 zcmbtWTWcIQ6i#gKuGe?xMj>%Jp`>wWcDE%hDTO|i^eHAANJF6%GiXQJmDm|+DrxL> zA<#YqV$fUE$NtxTnw!_ArO+CWJvwuAuHSd0-#UN%xp}Spal0nxLN11cQmH62-mO!W z6d9A&fAEig_iz27>uYjqRG|~*-8E<=T%=Sp>5skJ3F=m)W?1j<8J1X~WV@Yrc$fE% z{UPtWjukd#OP}1c=b8~K#LG8!Y0=m(ZocB0os%A&*X=n0VtqmQGX-@N+% z)v*sIVR7vZTZB;myPeOgHGXkmdwH@&v*G?h^vf^ zbRi|vqf@2lBSBSK{XuYMWDBdbAgLK;V!`M@NXuqS4|1($nq(PDI+|$Ij1P#UgNZ66 z9VMaIY!F&CFinLA8WkRDgVgUItrQbfwRcLigoWi!efx$B6XBOcA)ZLcsPx5*8Afk7 zk@M(G7131b@Lxyp$6yrBVQAR&tB)!Z1eo(B+x&~Nn|Iv*^ij7Gb^NNTH(>-Jg|x?Pnw|Ivu1l$Kx~gfr=qq~QRq~3*z5-vf`wz4SjuMup{-WwmwBP1|6G6; z-292VWdRqHf{jYXO>0YVcdW7`^+(s-Mx(vn9@$1t}1L^SU={wW7nTCkbnU09t#Qp165g$#imxuB2+dN z3-7LvyxXioh~ak*g^hYy=oG7MtCBd7FMLHP9mK59yt^@l8L2E=`uN^$he0NbEM5T8 znSbwg3>crsiORxwG%$F#l7L91Bt8|E$ISqMzj{MG5yoyyvs`H#r|g8GoGWgFleArS z+&)_fRM8S!m`17NI+RU{8QksEtb_)5oI%n@I}#RB3h@bvn#D{eDp1b5eqpDBuLnlp z{odt|G1FS<7_6l!)9645HL>39R+V3}(kZQYcW~v)6%+hdw^JFt2%y<|@A8K$JKbJL z0KhXG^+}PCciSnEvx3YR%1yCe!D-`eYL+NXW6E;C25tl}Gj`oX$tiL~IRtIcz`JgT zU_{0jBDW%dwQX8tdEDX=RV@W!d}@ht3NyQtute`4hWC2ZkY>_L&;^mzs zL=qdH2qP-I?#5IYGD$-sb(Fn^C*a%`k}+ULNjezauGQkHNUNjcPI!Y8!*oeZCWAGK zesAJfMxUzX(RH^U$OhQR8BmytOj!SN?~&WdSssHT3=~buf^7xKgdq073-=MXHaFjl zMi84}erCCnL#1b+)9s*H1^~_2vJCC9XvaF_gNL7giF)qnX>!GUkX)Gmv@s9nl7QDa z(?h}RwDf^#Fyb~#;jC}T1Qeo{`=fPt06=DO%gi=`*yI5r=WfrONlO+n7c-vX0eII^ z6>z_0G6I(UQh?G1g}Pa;t7V+3gw&-yNH`9o1dXrAhANjO#O`^K!$r8^vgmF&8 zb>l5Y-6d&tC4m^$rtP8|<|%G7koSVHdgm|s3*-7hV9#SETBvEO755;-WdtS>wAo+LxHNcPC3}}Q~o~&Owxh|h|EH_HfR`a^%Mw)cQG0M1sf-sasU7T literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..871b3d51bab858f1076820807681ab3d8328d27a GIT binary patch literal 2933 zcmbtWTWcIQ6i#gKuGg2fog0P3>6DVjX|ua6ZJ`wUP|~NEY@nDzDQ3`)v@3OIq^YE_ z*M&g)5Qsr&I=%eBE{HOebz56_WW$F(qz`SgXafu&7X|$hx2= zWZz3dm=NN&Cs?zEYf-_@VSfvF?%{UWFMu$RLHfMU6Yc|l zP;dSj|B@f_=g7PZv+=(v4{PO(ra8rwwcg#QWkHedFjQcu&ShEKVF`jEsi8WwiYiZ< zSlpi+X(6WD~6(A|8cio>z zT7U@c_~@#_=7seWzBh6GIRnNC(Co3Gz$Y-2Z|qka)P$e79nEs3ZJe?*hH|dCEl$#Q*>MMKDNsdAY+)Luj_Xi1 zE#}y6P;(F(plJq4AMHq3NGZf8Bx)8jnW#W8@A`$E4Zj&0f%iw(KgLXJrDJfErc9#) zA=Jcrw^vnu#Y?C3;@#nmFE?E9-`${cdKExp`sn(H8M%MZdRk#-dNv^7ytp2xJ3n zVx`L1gxgBYM@=Z zbtcck{laZlqXgUq5(Q3FaKpxy=sCk^!rkHkK>=B~1%z=n~--e&Eh z8|Eo4E0FhsuzKgO_)FvZL0~U(MEJ(@SC@u=g#R!3j&ZxIy(+DD6M>G0?cuSK1WGn~ zRhX-iN)N%Kx7k#sZTm~rdpCrwcK@2kezR+7bmy9Xj8<(uxN`rdulfs4I1G#gcOjqx z$4R2n6oo|&I4^oHYWaI4|JMHq@Z;_R8sQRW(C=!)c5Yk~Z@1#IW!pj~X+Z--=Am0# PG>o=-3WUSEn2!DiGRTET literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..02230f4a7d33f029c4da51103846f7246dddbc3d GIT binary patch literal 3297 zcmbtW%WfMt6m??jWlQoS4-`q9Dk#z;Q#$~1Iw`xw<=_fY;%@Z87q0M8?2ntjH;WXJ3=B5z{b_`j5g zmGaK2EJeE7u}ZU$%k`KFl(H?;TwtMp7l?2>?Sj`KNP29-`Svp0_ z(BURj{O_K)E|;;$6FTFfID-8`TstMpgl3lclPf?w$%>XmZ_I_7`nRshc#@#Q&t0$D zT?^VWPp4GV#Gh=r-J+q5lHv@yyC8~-P(rPqRq1ad{XcHj%I#N~9-abU8P%R_*7}E4 z*-AUW2Cb{$Zf%A;BsF)C6>|QmHCWeL!__X%+Ad*O;0vAgejwI-!XCTp79DB?2|0{b zEmrVJ!zxQenW##q$XgzAbH(-JTnDy_YHsSTBqc|=wxQOd9YM^8HPg6jLl}0G?nRiDsn32lTwU2LIFWdkCNwfsDqySUj0Nq)Ho(uPifx+9Q zgbG?nqEqmFwBlTxS8b?Bc;dR6W=h*g&{q`cyy|ut5%sd+4(XC3i82&LS#f6{yd78z$JFu3s9xaA39d&gBmqJKaGD0KhX0`4I@nyPhC&o|8F6 zx)ZFgqKVx#O=G2#2ptdD;F!QQ6W5HDoFPV}gC{FAu%_!1+)B}f$X(^YS})1dEUNK{ ztQLZBV`+&S3}*HVNzo0V^cSMc&^%GmG7V@tpvz1d8m;dvAQIc?6*s)Z>wc7QL#84G zQhC{0^$B{ei(m{oqi8x9?Nw^gisjtR@PZH%O)gzK6bWA2Dk)^JF}R*o?9>%aj}`Jx4p;2%3ch z(2OiiQ67tOv>_kf|NJZDv#)3IhWQ}5F#qYwJUW*Iye_C7acXD98DN7kv#G#g9ZRNY zp(L<*+Z_XtX;gP+9YAEVfRJ-{V9ul^%ZTwg6L%(dS1y;qZB(!t4P35aF z^SO3OCFors5t9^0Z`jBZJ*S{1%zKA$3dq7O9OxX^W*80K(Isg)1wssKvwG1Ce2M`Q z@>UR*@6587#&v?go@MaxwP*I+uzUFbl68&it=Fp9-HSOY9*&2_QW9EnrB}MSE-Cfk zJZhUxm8i>Ks9xU?*4mv*7CWm`i%mzD?1Ngh4YR_HOr* literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ed0e6f7f2d38b5a221ab597d74c86d97c927115c GIT binary patch literal 2942 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bc6046af825c978dbec8f6cc96e6f52f78cee115 GIT binary patch literal 37499 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 UWBB$o+;jnD1j8N_+^bjr59f6SzyJUM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..8066e1469119b731048483e4101920cc25350e1c GIT binary patch literal 2889 zcmbtWTWcFf6i#eQvV4&*xll-)$doh*jii>gPzvo!`_h;=(7JsIW*O~{G=pYmwsVQ) zK%jjH#4vA}{@;GHyIRXGrG*-=y>s@=xqjc7`Mve$cbhlLAHQP?#^roSvP`Osn&8(n zmAaft8$N`me}uQ;iSKH1W|Y$@4gLl+QpQE5sSKyV_oBMx!VK&E9Ya&gm29@N7HhN4 zX?ViAzGb-;bm@~n{KarN?f)nTFP-iGY{{4l{)R*g{Z}V1e|UKs;%4k!JE8L!)PLFX zE>w}X3xYUpV0*rsG>NfQ->&mH_G^Mm8jjtV_zhyM=3{43hnV*&&rHm*lL}%Cgm`aB zl2>o*nJX?AW0KA^okShyJC;o2r@(gDJ+{T}vsHHBXCtO^I?_%`sz+x^&qh2`qWXj2 z%*Z;cG$+E0az3ZofJ;lKR1XTRrkdnADmBW8v~T!yaHhnBj<_5sX9s4vZbNO5@q?ok zH%8eyXGBYETrT>zCybjuen~%u(dV*Xx}e4k`zMUZS^r$Q{zU2cU-zBND2x)B!O(Eg zkS>Z#5LdyLY_reHcHQ;=(?{Jwl<%vme8=oTY!Z8j&aguu;$u9I@I1!z6jf)RvM<;H zdxp&0*f#n%!DoF}Q&9HQ_DmQ&Ebvp7O zX;8nlkW}dR>xNp3gfRg28b(jF0sv(eeEU}-9AMv!gf>zwoDIip=h%0r6o@9kZoncV z;EyGFfyJg)$|6)c;q%~cj)LE;LP+3u28E4!>9oLV+p08)Op0F-N((XT^WgU6yxI(HA|>W zRU}gIU1ukQuLp+X{r=UD3DsKZ1YFDn)#yMBHMPO-RFz+{(kiV4e{k)~H52TO?^Q-G z16XXmfAzz)oqjha0N@#h`UoTx{I(!+>d2I$+!@v@I1c`b$w^sLNC` z&m)?4>AX;eCd)fZh@>`o%?+>cx|3wwkgVZIrSAU4C|+%hGHN>4$jJ5jR?0Gf%VIoe~yYX#B46$tcz0y6v`|MN9+CofXtJInN0$TDI!8H{H{5d zmdq2zr%d1hc-MrAxZg540n2`KptM1uZk6k5nFy7Vy0ix=!x59B@fF!n<+6m>J#z(I z#M?)CrKo4X1<<2XE+@c1JrwrilrV05O^xRfyF!tQiSZUN3xG^MrWxpajtCf~7C!Ez z(3&MQCtM`BCuy9LWz>81O$S&NlWL${_*E)j$J>NouSN;D3nX%!oZyB{EYVYn(S)1C z9)be0aOOwUWby9s7NhQpw7OqF3~Q5S(T?*JR};uPQCPjR7woz5-6*i<1tNSK*ozCp z4)Omv+cJK8xmV@x?UbYA(LF3yl1RygUKQrDq|!t1=xsh$qG^Ardi$EN(e7Tc*j;!n zH|<}skI|}a09Wo@w^e_^35S7^Di_BAj+0agfx;pOoEM$%YxxHx|1SIl@Z*jG8sW-j n(C^A&GdHe?Hyd%;vP~{i;j##kY3$ZU7Drn>1>)iD#>2k=oB?<+ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..af24de0285ffaa8f2652d4f75a5bc2dccfd6af59 GIT binary patch literal 9350 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 OEfdiKJ{`$>oqqv}B)4q< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5dbd6544df92b6e80520661ed0b245d26da7cd9e GIT binary patch literal 2891 zcmbtWTWcIQ6i#gKuGe?xMj>&!A*4xYcDJQ1ltQ7gaHJ+W((b3VleBY7&==}A==8f{t@0x;fxfqcwlPaSo`1MSs zE~nClkKy^B;azy<`u2gTHI==P5$&A7%kr@n)nqu^kRsxR- zwq%=qS(fUa|DSu*wL{{*sS(&pPf-*02xxeW=Lw#tc%CEQ>~r=NJ76ymc^AvZ z|E4^wmDif$xCw2o`$v}1HuF_phpa*6(5g%Y(zxIsLm5e|AY3UATIIp(sC^3cB~Lf7 z>1q{N=`m{c&!M$AWiR|4tBEv%M1mzv(Mp_ltg=Le!yA61(V-cJE@tMY-$|X0EJ#|+ zZ#9w%`+nU}Yf)gdfc=)!Q>_q}%!2R!MuY?C+osS}&KAywW43$j`!fnW6CgKWkP)!Q zlDxoRQ!8cRDxLC0@HfZ7Z&ofO*mn+vje6*`z-Zg5G>JTlvv8#YpY?h0x27;7m8DCQ zAN+RgHPYqD0$|O<2ft%L-Xcj=9y^$U!TXhj3R+5%Gj3VZa2fm63uP?@So zrr`U|PKVzP4afI`tCI=UTImFQ%mme_Ky)>=!S7a?U$W9EtptB?ZRVN@_SWxIMlT&` zmOi*Tac!mFiva+5h9N%!0R_J;h@3exqeyp#@d^$Ee_PX3=`6`;0oY(04$K_;ZmQ%I zF(Ms2YtX>DeutpjC6^+C5@A^^m@O(>j0}_S~au_ze?qsc$e_&RVx8^fkcke6Wp+gC3;5DnsATU zhf_cnPW;%;vv_lOhgNq*THP)nhP7!s=*E7EiwWetD6GEO5qoKTKML%50T15=c64Fb zBfMX-E#tSBYgMk^PB|(bw}-__5-Hi}Rc@58SEKkg}@5iV>7 m^{zH-`^FXVW-BgBw#j8GToxfRi`Cl5Vr#3rKs>zNWb`+Ftay?D literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..da8b10995269555109aadeef3f46e8b5bff189bf GIT binary patch literal 41597 zcmeHQX^b4lb*4z}E_ZmY4%#wBsV!Ub>}q#NQAebeC0L|nnIc8Y6m2oiO0zvPJ=;C( znI2Dfb9Z$l$`8XL+_8gbgv3bf#Bmb9L7W=~au~UTAU|>-&h03P|2PTae*uDAM!xr| zs=K;prnh%zDcJx8X|&T*UG?hKyX)1fS0-NX{p1e*CpzeNZKtzVF&mAJ*RcG4w5Q?K z!?x84`mgn8zrX)-zZ^~X%vIkDdv&WH?LdpV?YNDe)#*Rij}B1tz;XSGe1FQf>Ve~R z;@9m7d(xhIu3xsNqlv%?Tub{YI{abZ>8u#f1U(P`JJ~Zk=)JSjr#JAz?hDo$K{B%4 z$NK`t$*u{Ag1$WyO;_V7*t?=h3HiBbx9fDQ{<*MbMkO-{dQL42Fk_nGE~nwsY^Lh2 z>HBzyzb86oTl}@B5q6U=HM4%HXEmu!7)=G{3jNf#586lUefBN(F8gS-a?JMH*0EmL z=~%sEt6uNYF{k0V;se0>$AU2MdXDM($J)-C)mU&kfwf}w7P>uerDwL=K*6zw*$G~7 zRu)!0w`m>o8AA&-g`rB%$82vsvoov#Pt%ybi8s5pj@&4VR>ScP(+I4(-Elq^T1H@- zfzdQw*EaxxhwqkAHvx**TQ|I>F?ZPnlr`5fe9INwNF=)m|ff$?+ptyov!VUN}B+NSUL zIvU2lcT``!*1c{Z3HnyYSx~`0qXVZx%#h-(`Onfd+sMM<=#` zs1eh%a)(^7kJ|H~huw+}F?>ZZusw0{f$Mhcc*^Tx9kEnS)2U<4*XMb?1Jl1mbb;k> z;J1cltlCc9He!t62SIg)*D*jZmWf}9+lfMmVg^<{=vmgh;Z&^olG!G{HbFl`AhILk z_&SKhX@J&zjOY0l#&bcD?a&X5nnmPD3^9)}#lzBY;8sCgMzd$K%mFQmUYw2~<*-LW z!SFp7G78X3fP0o}u9^G|I2;Fu2~B^fI2$RN zo*GKiKM0z>0P<^lAep+?2BooZVq(T~-&-Iuw;IOWQ)seqy3@2E8X(Q)xZS)YbRpVE zFvcV=C^8|d62xmj{nlNO3WfvOEFZ7jw_Gtk+yUVPVF#2fI0~&uL>gVIhhN&hQ8OFv zItbe6GMUz`ib3!gPP>aYA>`>jr%6qF(fC8q5to5ODjKIMM#;QXdHbZ)e$(#BmR*h$Igt)D6u#)4RaHKi;pdm@@(a#Azf1=`X&da?Ly*1;+~ zn~R6Q9@oe-L!OBkN-a(?)w)j;LoiKYrzS=+bnF}ue#*7X9`W-q8>izz2X?@cp$`^P zI?98lTVv%|7woi>u#<6`rH*NcXKvPXgA#?ZEUEs?4%l7x2fmf;nvy9bC{r@UT7&TL zoy(9)7wpg{n}7s?v`smrmXco#f>{+}r>Qk4~Q1K9s{c#pYe_-oP(pV4GRY=%bx zX+@aWCRw7xLXC6unh=E2*&CU$|l7Ra=#la=t z|0{CgkFX!Qw+7qG3aYLHFFjH7NhD;NeyKWv)gJP5OfaH7`S-(&2KnpZXy*MeG~xU_ zW;LCT!_k*y9&Zev2gN+@>6=;aHJZRkPNN^qknw7|3yq{t@@&6`ss8OoOt64Pe+4}J znOXxi@4rkxNW{OK%0Fa&$JCywBY*(w_5ERoeLP>Yi~eu))b7ojnlJiXXvTf2sr`46 zsr~0hjlPQc{|Dy3`RVTY2nAd~$H^>Px52I$J<$f;diwK0e3c8($AQyiO;Eg&9S{v|PvxTR{v5O&fM=%nsgU<%0i+P} zp5S)dLH#$qA7W%cQD~ENb0_&-Ig`AJyu$@Q6IF}}#VI(~W`TBC-d0`UWb+(xLECGG{fWhKNt)BI1D@L>%eG1B^z;CksrImj2ZO?Z!gKwQiH68GMk8{! z)42P14knM*8QWSE82Rb)xQyf9m3eN@5p&sXYYC43spa{S{JvIgEt8iG*I359 z6Wd;f2w(t#eqrBXcL+tz4mf)v5oh1UkRx>`jOrd&EqfwVZaEjPh zN?8$VK(=C5qx}xE+jZB8d*YoZT78IQ6X5z91jZ7Ao=a}i^?)JF>iIcismI>{N~fXC z*H~JimUYW<Awt{C33m6w}TG{I&@M^lVSUcLq z5c>?J%pkM^2(#+DAXs=ACx&{1W0x!_Ld)bV-af(u)EeH-ky{GWLXiOq(v-Dz89Wxj zACgGeks){+YK$ccJH1Hq(0aMtnq3A?p$&8>Uce#_&K}P&dxowvppi=|m`*s3gUw8< zOyCV`O^pu%SvLF-dr7$~oh*2SHfE^@v5*1M_okrs^$(Q!CBx4j}lgDX3=)*TpA$PD7r z8ELBxu{72!n{STT*5J)Y$sGwwas<4>%~9ZHbTe(x&R9sAV1=S}mp_Mh>2nyNdejV# z@C=4G(gu8GEcnlFzoOG%%ST3G(eXoLO>u6%R8-d%2K}I1N2Qh3noY?ET1P)M7Vu18 zd5R`2jZ<(zH>TlQu{5~8JQiFZzA83{23|ht6cF)$G}inKVe@?bl^+{n^=v1oe>WDW zC%*p5XE$kg6$buolFqXhnxd}iwa6`B|p$Q`qo&` zrMOaBVSa5CD+)6;4NQs^55e8jUE|GJeh-ad0Bab@N3CKwGL_X#cHxWG!R=$s;?9Bw zcoJ>O0-OXCvfelO+-mF0(0p$g&eKte%=Bsv(S=L8v3@Umjc|Jfg`2&Vwz>B5(u?wY z?5r4zhA?%FrI+LVt*yN*rUv-l3rzYsyL-_TGB-KbGdiiZ$G4uo*^eeWVY_Da`sWa2 zF>98KKPEfgDsnjcSEA{)w!7$eO-i}l(?x{R>Rq-dj?`MD1sAD)vuUg*k&G(hM~}C= z4#K7)&u_r%hu?V#gCR}MBR{JV){)v1)_h7wLP{rc6nwa|uGJf!+=oOcq!Az=s6idT zr?z^fBtF0yq64WXBJqIy(GlV;$v!fA*2h8zvo=h_rKAbu86vLZ~9-%4Yr1Z(~Gja^gc7Igu8dV`!Z3&U9Qzj1n~LKqKU%QqHcA+0s&FetM@q$&M61N(FcT7h(sQb(d_v5qbE#pOp&ec;05=TAO<{)rRE zkKcFiiRFY}Z{N5R4J#BAPT_w?w2zW4A;zj}7*$tZZyzUr(&_LKgd`uJ^?B-_ zjyfEU4rPJX!1(D57-=ReN4pu8XgAGX1naf9eCrGJ_L0_)$lF}1}JpcoZVe;O6#?L&}RL3$}kF;M#ugTExi{pSQbpZ5^K z$Ml-$CjweWVE48rX;Vk;L;OknF7HF!nvT&`R(i*n*?~aAb{#0XasDspIBo&uizkm)mkSlx9MOLny*o<6h zeT4>zrAq6!=<7(a()wNcIWwV*Fu5PhFHl@eSWtV#lVPp(5Jrg6eM$HtKp?nB^FSUp z%6A(J#!@?+#fQ@=FFj_tfhnBcc_aC@V$B+NQ9Jx+uH`kGS0whPjv0GE$FY#bJRqSO z@;sQ<2Z6)Z)A*pJ(VUhCQm9V0U!$98H;%TA=7d8M#FC1!LNaNOYN8SF$qWH&oI4%& zr0_Z=yVl-+GV^|}lwsbb5n06SQM{{lmj$O7{k=DZlr;T)RM6kk?4<=M0vtw9*mSeH zzTFLk6tC z)GyH9BoW&{OY97&miSY))c4}~Ro)sVlLGWy8ooK4+2np2=QrCHGH=u4SFbD2|_00b%X=YTi0**Oeb>>+a) z(oCDfr^cGYq)7D8`pch$3K`g#I3=RKam?0>uGGDCbU=M z4Xwjp9&2JLYJnIb@Ur3MI8Kt`K?T@BO}r9wYQX*eSis#hl*_g5^N~4|AXCZ%1@Sc5 zB`hMe&i-mFSc@R?r~*hsWFm?ba5w4bjDOYu{g<%-O?jDF1Qt`=CsX<+d8f4x`X)}U zk7fq^IM~P9dGQjuQO>ILhsh_*aaxl^ap|ij4-yx(G?8cA54xyj%|)Gx-(?r|34jv^ zn4{Ad_;eX*9u17@$8*@oMJLBxZC0Gd zVyM|;)}s$GT$}>F=H`axXwS{by;|hf!KS6adIP6-2NI^lSz%$8h}<^ROmLO{KJn72 zmzLG(TY2(6j;_OZ3d%Rc5$4Pxqtb{&Mlpq4Lk*qQ*3Ms1^^-|tO`;lt9y7doB>5=D z*zgFzJ)0r&*4@t#nhu7NJ!g<`=q>Qf>u-8P2aRG9?x`9$l8l% z^3&fLe3D3~EXES;k++q42CFyAtCx!&`>RrqQ2RS2VzJ`!0gQ_`A}BeRyYDe4Gwx6< z2W3^b=mB>8XseJ!TIwJ%Qj&XcdPw#R6^BAZ@ySP$Mjjm?_VKkR4n&)%Xt3tA!!~sw zN#zXkuT`-dy;_K>K$84Ol|e`jB7xcuEE6fLqAm%lIKcIw$|JJNQ_Gc-IOH5Zpee#( zcCph+S+kIfYU5LT@B9+&jlw(on1QVDBxhCj^3wU2U_t?2-4DdqCYAP~5s}8595NX; zD+2O%1?73p2j@~G0wxG-X>O|~+&KyW#VNK_41x;u@C))j2NR`E4T_m^D6G?uJPWUXqH98qaC*{@&$d))(dfNs9MM?gmJE@ye z2vW7Juy91Q@bX(DzBGkKpp4duDl`2|?5JONMtk|?%*(mrUd2A*$v>&Fefp3JpNmLj z!p6c=gQ?hrMx@$*daMcUQKEah!1?@G;M|(8I0^%KqtqcO6{FZ>pZ-+q@>j+JeXpj$ zv`+KaR%Q7qU8g{tk`J_w{$MQV1_NICfNj7Po07r<@%Z5p;?Cb=KS=r}cHPv@-qM{QWFh!$Y6e4Kr9P0nMKq8W)A)e5O8I;kN|^77j*1l+4gw->MDyeWw+Lf2v1OvH;_2L5Bl>Hn9@UYA-)K7V!3)C8ITn zi>=j&={jRg_e0ySArey~JFjA<#xpP-ZpNgFni|x8sHySYIi`k8VHXiS3f zJju~0twb~x3$7TCHX2;GN}N}qYJo2D?71+3*qP9(4pRw5-rPXQkjt)?YN)sXukWWHzh};cK#&usjLM}3K~Vwukq3*c}dd*giqa)DJC(Wg#`S>CL|`c zPbB8(F``LPwGVmib6m6MPqjUiDe3EmwWNbq1yUf{ zYFx=L+n2g!Ag*AOlO>R?jwW*jvX2uL_J^4T8Ex{3r1p;h0kn5c#dUr!ewRU8f*G6a zBK!ava+PU$Jp}5&V$%g1Hiqr3(*83Qi6sRx;3{)5Z72^)Y(s_{7sQP#mCzfa{Im-% zw_!Z$)1faa2WKE*l8fcYg0sR=ruK_CmVl6cwsy7gUUjOkDhlydlR~_YVB=^=`TSK` z;1+jA;K~eukG-jNFBFH+k{X?*#X2g#EH1b4i6S?&JB8B|$iL^OPl=~O)1n|3WC~)k zI9})Z;^u__*DO#Pzbe9uX~Nm3nV228!a|M9&dQI*kKP+%hm8-wp-|5wvvH@aX0>d; zPkfs!izXJn8dH)yQjp4jzi&$m$oe6jAO8joBM#rp43L8c&Oc?qNi&7ak>BM9sG2#2 z&jrxe$U`_^LtlB8UNrLbP3zzAYLX=%?V@4QY4Wcor*B>rY4YzFP1AguR6Bt4JXn|z zFVX_WqIV5<*`-7p#FRLh;_7)2`%^5Ubom5xjMm%EskFXGuLRC1fR~V2rQOC6?Qv24 zEi`fT+n%IU^c~cNHq+^tAGL9^P`9qbTk$TJ0#M$-W;g!ljiuA zg@guN{tSNT-Q3I~|`bhKYemVv?o7xx2gT(-_IQQ01oqKhju1#diD zGVsr1;>x9G>BgnUq!MO*Syn2Uzs+)EdZ9w$ziQh=-bt^@Mc`nD^vX|!Fg~2c#ZxGx z=yXCa^v}mv&Xi}fufy0gLpP`*$)qY%?y6L9zZ?&fg>7;1nXo1eoO03~HKTv%IwdF*PTH7(taFtvZM@_c+u993K>DxDp+(QAE(CLV{Hsccm-ElH*UB0*ZFk zyIoehCegb%_iCq!IJTIhZ=Lg2aYcf^-Zn{j!+}A}hO}_QUspG6DHf0nb%1)OWLck$p3&h1TZpeW(Oa?u>FertH zVX|O73oy)%sEtWETe$QMc}dv*La9m0YQ=z1*Rag!(AVd_z44$avdbAMmbMz+HUeWx zbso&1QtSA8GaaYRp5m4S0m$av>FrylM2KgnUrf{XQuN=d0mRtQI-!Z|n1-tC5DIyn zL0LJLYtdF-jXD2^0mS&6-wM#pP@cb>nseeMM_&|PAm5rIw(j8#cC6LhebXoD$~4!Z zq;A~*!byJ_juX4Ld{>OPdj|d^83&}_VHzm^RB-X5od(N-#YNU_X}m8R*y*)BxiL!Y zdHJmYS>ui`0?m35Db03wNwzC8ImL?aD$rO1;FmH0Y?VD}BFvt9Vk{@zm7QfV?s_pr zX=(0yZGgL~*dDLexQKw@uQVPsOGDT_Y1$~Kzb0mhXiS>`)%Y68s*ei7xZ-cUd=gb_ znc$#@m01#fTf!F0hd;(bT}}D$y{T2x2)ohwd^V1LF}K9 z9+t)>-NYme{N!?&tI%^oyI;#?5Z%eq&*6MLg@rWj2E%E$%Z|;%Qv7M;eAl4K|4^yK z;e`q;8cDkR0{1Z+|Ei37O}D%?gU8hOZ&#W6K9Rz^Mtwhb(n4hy8Rw(}U`&a8qgi}o z27;5rb9`7$V6z!}iil*IFl}L%awbpaLNcr@YN$I1;Z`b@5-L8whmzYZW&G+RLpsD^&(v0WTSzv|3Fd{U%MO&?!i-u zDhMLI6^b$B1VeK3x@AZtw@otp8~3EOdRnRKGD8GLepm~P%*5||x(plk-!1}Tp?9a$(N*uS(*q+i{!a0^|r^<&RvHRf1_7YBkXs%dR z0Fxp0zH#BwERx$}1jqn-Dt@^z+!Glw17#H5QE0*%5OWzI(kocpYoW=oS@ce27L7(` zLO)p)B%ClTk5k3{UI+Im>OmoxlsB?8pmRVgx;H|hmkg3LlZgW}GF+6Rk@9`V6T|1~ z4if8-Q^4ufv|xTDg-4D1p8kN+8+5*k;*#p*SCXbdc&4*q&?PY=8K?+Jl^#*zjY@|u zE}y}XtNV^?`&f^T-Lpo!AI{KjIwMQf(3UVL4w)3+wQiovbdzQQU5L@vge+l2V>7*{ z;@DY;iqZ4uQtObs)B0>m8)$bRZC)pkc+JrX>c%1|{?*rnQ@^h;l7yuHHBHjL6u--o z{`0z|zxc0ch>9oyNnW|_oW!vjj$aQEsgg0ZL?ehxk;GX(qR*_3l-bHDc@BSC+=#4s z(-}#yxJW@+?mSisB0eWPYCe_?MI$n>dMnsa#{DXbFz@*t-ZBRCd^J1f1EZB|uky7t zaHL8!k0eJ5;ldCXn&1K(w*GNzv`CNQY*oG}I?jbc=%DQcu*`;VV#0o4JjIqGZkHT| zC}lAuQwrn$kR%o$&rpGk8)sHnBrnr(Nuu14#ya1+AdiEN9ZX9nbxWlJH_ct$d@Q*g4lmPlNAFPIPVh07cpbd8eIyZ3;t zZ!!-t4Lawwb3nsF_NS%xZLH>J-?Lzmw}m8=l05E7217Ws#CV-gE3 zx;}^tTH=p`gblKG=~293`38$Jb*DJE7$?WVY4LeNR&pQFiUI5Rl#iO9OEitBNP^- z1PG_;STJ3O2Ncn>&_|7mAzVM0z~TTQaMz|HM?Pgua#kkU%X7q|atN^Ji?t&gQtAK81Zvwfv9%_*Hb$IIW~ zmR;%mZ_p~i-SyL(i~fEC6H|HU2jh1+Ch+UJvCR2S7s#v66jrB%6mplvxnj<+)^^BM zu6D*$kP%baS5*~hAL`$isO%agcMpsVfrqh?IK(c$sFXC&h@>6YWE1%{Fny(BAQR;o zy2MjeuNP*tn2y@n7sacQdXBTwBI_K7A!+9{nEeg;n$v#>~=5|AxivDK7Ok{dq z$ly1jOO!O!rC=1E)Xg;5oFrFkjRe7ioo&!7yFBg zf<5#+nKymh*im{FINUx*>8`u7d9lBn!gfOMt#77mn4?UR6i^~^%o6Rues;>Ffn|{N z8y)5d{({e2;tTqgxI8ByTMWe21_#+C($U!b*qMLY$46cca)|Bu=td+&b$pkPb5R=j z3fwnJB`!x30Zw_j{WCivgt|o=tAVc}Sv=Q82jns9s_g4rv`;-D_Qbt%d$8ArJal9x zM>DwDCk$|RQU!%$IsvXS!cBA^p-apC_&iQD>4iZz4EpEngXf}Yc?`~@tLmm3*lR$- zZo7*wdwZT2092e+T*H~kV>pc@KtN=qa|sPf@@v?m+wJxTUcE{cYUx*iGJy?_-g-Z} zzKL$&@>$xCuSWZ6#|GYNbq!u)yZ>r*04w8kaW=2bJ0s}uhh-){71FeUJNB>w z1Zo}EBpno(*Ls=YUi#6|%rBWPT7Ln4j1Gu?6ByLnx1@i_yc`{(Ie_+j>^^ZV%s$Ri z$a7P`I1W`sJ1txQbwdw6bgxkr$Nn)4>iPf=laPK*OcNM!u*W3`!k&x{&|!;e@+jKr zfZX;s!gd##fRZGESbl(0idGN71?uo1KVf30)lVLEeJgBuRosqzU20?6w zDkflUsJ8}|d@o8a$6wD}7tIjAfpR)4FlsqE*njHKd!hqft6K$95T-|Ho+g7k#JZq% zz)q|Yz1zx4kF7fFH+z^I)M?miTP(&4s_OTFL?E_Ia@OSaGic3FDiCU80fQJsx zFc$*Lj6%G9DWrQa4*P#R(dYvGxK8F#Zt z0?FXc%?3Dl9T3y$#&k0Spg>tTfk{+@=om@!==#)Cx=)lJqqk=Kh0cIF4SqgF z55?c**3W>)TVJ4$DY{W?Cw=@j9ZvmbYd4OkbJ6+Mui*h7OmFR@mgMrc4j{V231F>t z`inOITNCsv1r=JKqrXV4hS4+)N2iln^YDOIc(5xx&=nr%3XgGx`@h0{U*UeQaGzJW zzbm2rPUtR%*51dU+Ft>jROP<)o%0~Z|$WII#kaE*ahsAfhJ(5 zvt9yrO3@Lp(~cO!E)3mo*l+MfYxe)O%GAwm^g)NzTTjskot|sC^g-!jtxwShr4zJ% zkv=Gh(0T(OVYFW-dtQkBbw?bvCRP(qNV=(ZV#W0*q8;Q1*rZ+a+?bQN>5Z9(aqH<+ zkJD;Ye(CyD|4>xDpbxQgQ?@Vp3+x5R-a7KR!C+9%IQ2#~fI~pr9Kh6A04>3yFbaQJi|bH-5}qu-EC--4I#cuD3#hlaBIu$nwU3FePxw ISXit4KmCD9>;M1& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..35e2aa58ab0511011f8b30ebc997e1143267f73b GIT binary patch literal 2973 zcmbtWTWcIQ6i#gKuGg2fog0P3>4uUfq1oMrv``9tNYkg7IHj2OA(%lsqg{#BNK;+n zbs*3_1Y*!rqyFE1nwcH14WZB)&(7%R=;&O&??`{N{{Cz8O8Mt^Ou@LE4@s6ul~EJ? zdZtpBQ)$D;@aWI*E$TXGVIQU*vw_KQEy}n~;YPpila@JyP z);SIjS=YBLw}LKB`KP~WZn>QHpY?y#M5b&&WHxy2Z2A6K^OW|ViK&7X%log7Uj6jy zI7D->wsu74(ary6weCXE%moyx@G4UJ3TFuAKB3Cgt zt2{F?51mvHV<5zLOOm|$TF+c@J{Xg9rs*W=INz~k8m9u=VYk^9yTex5zCRf;mD7=S zQc^uSQF=DwnG)3xoHHZqERsQl8RdLVvjLZuPN^OgT1_>{bL4WA5ozD@>EJ|(2_2nO z86J$!^NW&|`7L68huR?ey9X<7jHGr>h?X$2T%;e47&m?VlYVrm&t<>djv6!UA2A|l z{Zr-o6Q$!@_npirjG~e-G+dOci$oLnSg`7V7TmFCUQCAbG{I*KvA-fw3#y&@t z*gfFo3q1GnJizk^6<}Ynr)-}+M&xZQ8~vN|pjKX6l*^52W8FVlWSM+2&jYf+@xZD~ z1+s9-Kdl!dzn>~nzggUW9akS?`BEesaB8&*yo?C7{B-CIve{#Q!vYmXkVx5NQPdLI zEvqaM;oyqjSm@9ULl-l5)%Q}TBX5$1C0h$g#TLJAsEyP{Q`u{}#6&9qR%XGseAlFvtk_W=URPu&I@@aFtH@Jou}l;5RE566`yJ!bUxG zT41zoRhmTR#aX!0g3tOi_-hlGk;>Ag$q#-zb}#AjWDYRr;e+oP(7i}fmB*fFVDNS& zp@No@MBx#Bk%5zVmW_voA>isQRBNRZ@HG=uqXN;@ z)CRv(Wq!#@tF#jQ{-v2qCfHlwtBjsIuvmKM;>4wuem4dH;2DPe2m}=Twjgrq$dn@8 z8OAF(V*GVYQ>C*cqXl4tZ8$J<=-a816U2yg@N9tw*7iMu{+OJL{0axwwlkL(NrOjZ zwG_nOsU>Oryd7%tVmRFV#Np13m8(!gcC&{=WV-W+X zz3eP_0?utA7z1XMq=V7zS}mDyQJovN;ukhCRF}l0GFr<}?@gS=s8cmOxa#*J*#H|k z1qubvxeYIOANXEDiv$#*plDhqY%5B}1inXJ_|KTNh53Fog4hg;Q_GYbDm?|AZbr@0 z0ca+c<|vOvIo2T`-2eI;Uue@ zhKW!qsZ+b3G8{uG3SW^8SuRtE)iYOMi+H0cuPJp8I0JfA%H;$YsGGvI*d>e`UsB_F z#I8`JVq&~C%mN^jk7)+_p27o0sl^^QQ)tZ+niDP(+`TkT($ed_`t}5@ib>Vb&ipEs zZ{qF4uUD-E+yxRjPFHZlCYIr??hqs&0ew>#&@H@o)+-%U0^TI47-Q-3$|ta_HwPt)!QjY#pCv{SVMjruZ#N$P1E!>vM*si- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d1e35248774c08ff710d09307894148429110d34 GIT binary patch literal 13491 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 qOW2`tSTe@MRB^J>cBirw7QUi|Y*Myo0S literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3d2e106476977990f641ff34a27c98ce120e3766 GIT binary patch literal 29330 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�wBoTg&2cA`N zD*>jVyhWS}){YjYPETPwS|>iDf2>+TfRqd^{cl(SBtWRvB3uB)Ij=w&U{E^o(ae_& z2)7P(jK?`#iG!$pME{Vf9Pc9}hMoVrj5doUiSbEB&ARlI{Px!O~2H(S+ICBazsg6^LRJlsbG zFnie>rtBnr`KlFK?YdvZd21-O50>YL7E)ERCesqw>@x0U;wrnhT6aQPWJjjYu^bYn z0<#+fF(HhDZ4Cj?JxQ_Zf`jXv=mM|9^b3vPR5w~~2iXv`Iz&E-tHshsT+6ke> zAu7obKuNY`7aoEgGiSA??mzhu_&FXd)H2}djRgNX0UpL{lFBYw!L(yV3#<(|gc&<( zHqh8G4hDx6)g!xeX?J`SI@v_(Ffq>53s(6_ckA)KaLtR%)oOYmUI#an(QQBRSlBdS zXgAxi>JW@Nz@GVIl^rb3S$ni*<9e>{zm4Xi_Za1bfB ztfYQnf*b|BY^Ipg#Nn}M%jCvLSEns?pfb&Qs}2iZgK%vN7rm{=hiWLbRK@jQPNRyW z&FJnghV}mBelzH5V}bj$^>`-^Z0z7NvUoT5CNN)UBG#$0lT@qxXkMl_`+*cRD`JZ@ zp=G%04QB;TXm9y-aCi-93+V$LF-$kfQ4fMs(Z|d%9-@!@9pZKBdXBnpz(4K`{rMWY zRQD_N=VvK&`nEf^6Tj(HF!ztJqMvR3a-Tq&nyoW%ucHu4LAf8HUo_HpPY@jHn%nU( zwM9_}>wZ{kA7qWKvxe4LBkQbPtc8RNA1@!Jn;`9iG%6C z%}yWV7}BY=97Ec+#xbNd5*$NHpK%N+OTjSYk<&NrZ`d!}-(!b`u?s-hhA?&&23vjL z(xnhAHRaO%2rdoV*#ZCUc#o>oOe%YD&NA}=WJvrC`7Tk8%Ts;B%fUOq2%7VLBefG& z^kC*?T6$Q6I4oLal_oU!=!Sxb?)p2Fg_V3kGyu<9^V{V8(Dl}E6fP_Q9twTy(1qmv zN1;S+0NGv|3g6#(65awA;=%9WO2QBZ!W&Kb&I0T~;%LDNl¬G)H@N5QI>)ZL`fYAjv`Nk(ysv3q7CFcb!E7JfpUez(1E0v z-yZKGRfcPN+trItP*=n(bQ+whli=OC^p} z;a?Yg(FCjd6@v}75eIG%FN_xJuHV{v=5FP(diBax*IAl&2@Mw0y$#Nu||9v!amYWKpD~I+q{hETETSV*Cn91dx?nJ1oO2VgGK~^d z8mk%XFb^ZRGAdZfCOnPCGt5VCt*Gi4^wx0eXEu^1vWQ$qjxn>O)oPW8*_1PjlW|xs zGajid@}>m4%rFXi;1h+-TGbQrYNh1LtzcfOSY{cg=tsDbANd{t7O9Re0ChE zG6(p}RX`e{>Ku6HQEdXQeW(+#Y#4pQ?QtYMkV|EwOzE*qQ(i_^1-KXvY_YrxaS+FP z{1_yF2u$PA5p8Dag~SOD=ji#LG;JAyAOGhO*nDLKe*0vZr{Ejpke1p+D@qTKkv1QH zidE5%SS4e8{N&TfXWZkEgOF$tof?!L;fK>dO1%hK14dHq8H`%TCSZXGx1ocFu#d8<%9a<}}UZr#`v zWd?sw$OwKNXs zmx;8^3qO6ybcs*eXPKUGi#t#VIUGRL{AEkcEtr1_THbf>e9OT8n{e@Ol?muLUvqsm z+|8vWj>h9$CFk7$zekvZtsh3CQS_0A7r+yh{BpHMV9C7mSdjNS?G3krb$>SBkks5@ zTI7#S#i*6qtTZ=VU*NNc^aIhA+ss)xsZoXzn&i65kJ2Cu6R) z(y>5WmvfB>kf{ms!+!95M@!FZY24wpnQJP<-`!qNx-?+E^}*`IwVm!ZT>!u{0{+Q8 zt#;=Wg1b}j=q4U2?lsL5rPDa&R1$EE1ZK`$AMI*}JHj0@oufhY-5x`?9xp}irUce@ z)4HhQ1s>s5FQ86dm*`@lX5ULZ(kb*yQDu0Ysu=Xgs@q7m%J8_m(?cY&F**qu@VXzT z(onySi?mj5%y|ON?cg#7%ojim5h$qKS7HDryC&!*=3@`<}42GLJ_ih|RE?S)t0I z(i70>9}si_7C5OKlgN&TvJbyrTTZ~>cLz_cs=KOD7nr28OR1B zVT&Ax4J;djLa7za>83jbAd7gx%*6%bka(}$Z8Iw^o5qXW+Tf|E2=_atU|`uFYEat1 zQLp)N7{(|vtaa^SBJdDP5cohgc-gxUyU*(iiJacW{;}KUfGeO!C9=$bfi@}Jp)6tQ z@wH{LK>Ej7EHIJYu;&dRQ;c~E`p#g1;Hbw}?p}gb=P^fF&ttscQBLS3`@$WxZ*X8W z&q6}Ga_guF^cHrTA(eo;K%zv01a8VGc)8eZuBi_WnFU5{=yWLp%-Mi>SLN$TLAR$W5*99}X z62g&}BDTd?<%{rp;oWP(#p=O|#=-nlzv<43exz1y8*t^`bzSWYDjX69yG%La4?8>IB=0SR>a#2u@Bj{ER(!W2_h3>`BqA) Mt<3^dyzBAspXm+hP5=M^ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..707cb185578f52ed5eb8d08744870327037138f9 GIT binary patch literal 14619 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ff2934942e4e4f90dd3df057c0bd44db3f3ec28a GIT binary patch literal 6190 zcmeHL&u<(_6}A)4*kgOfiSq-q#B7r+Sx4ZRXhCS@U05Nc6|0Z|L14K=?V9eIsj|Df zny%`2j1*}(EJ{$_wmER%gpfG$Z}1l&q?M33B7{~e{s6wJ>h9?oB~C0woQULTy6V-d zSFgVJ)qC%w)^Bg^EZKj0OQwt`(>@8qM1)ipdMy+|9@9h>pA>g~RXi^CbSEPxQsh}c z3%vx1fbl5IXi_}HWY5Se9?5>Gpsh$Yp|jbSA^CA(FOqreYwRoRBD*?bl?O~C#FS9!kzwN}?E%y4oRcn0*-Xl0;${I%gd}n!S=>g-? zOUZ9uZs*w8^iVjit&6jB?XrbYw2z5%tD- zVs8Rw3Rp^%Gi&a!4dSwsYvk49*ra(opPywfKr>gr@R06 z(OEv4A@tiXkI;A6O^eJ6rPof2rGvhP^}1XZOp!P^C(dE-pPpfx;BQ;4q9M>IQi zkaRR&?qM_^931w&_W?@|wj!X)d5cO(`xY1@q@pA=R63`^P0#T5#>*VE;bGCdIQF0p zrR&djMum#ryptLVPnrtnk-!dL3<6<6FnqO6Zv$i`2j>_1U1w&)`?_Y(jn@#LBlt0h5D|4Q7_^d44aPC~R^Utrs&N-^= z!UlD_ypb&-(G`KpXftsv=bo40F;BmB{wx-$ITD?W+k|{?sNX)93Yt9PnMiDL@#|u! zzj3bBvB`sFVHSStTnp=5(5^kF$y3m`lt@qA&gWa*NImV|@14u;I#J!P5>+Undb7+l z#vHGXDZ$u3*}vGo*=Ou?_8+R(VloYpXfspmtOf)bHfoKbUYSH`nSbeLT{CT+&@97kkV}a z#W(B!TA|zNK{+yu%ssthZyS&1KG`=#ovC{E4PO*&msZtELkz_c#2Uqstp)3Pv!Kn& z<_&Cp(Z!>yZ1flDG(}P1+5$WXg|_ za>1P!^g1I^{fUMIYBYFJ5tYkIsHIyW9pw{j*E=Cu0xv=WrDlwg4z4Vq=19gqp1@~5 za3V|zQ0Pvs#`|yYOOD?+<|locWg_z#DvStW02ttGfhzQt^L#@~%W5g~?!wH1ilg@c zN8NLJXEs!;Z_H0DEY_FI8Gt>>;Gzg;Ds;C>zu|G@=K2EIL0`#eAhOU0l>j-|#&G^n zw?S!R91|YlVFd`*);)rbh(8c>G!D_5&fLD+5LFs3lKaR;T{Qp~TI zR9`p0u!*FZVNKkP(H7#$H^6`OCy4d3i8ml8nE;3pdKjv>f9Xx#OKCbI5p$SLGlC8X z^-XB#9i~(&4+aAa%YJ&Qm`M5}n;@dD8A)pZBz;9uRUiVSVoiyToc;ixP2+kN_x2#9;6^lre=I0|s_F5ci}>q4wP z&Qok*`iS<)DQN)j6GnJ41_nxA*fvA~mR%6zF-k}5MO-kNM&EG($lxst5y7XhfKfCg zpXzG?q>geF3cg(apO<^~hcUItuoqw9MZPU)%Ww)&;yPfN9^G>Z%-GBob#!T$&Moj2da_%_I z5hsU6EHDs{L{!7Xie6n9tff118avglcG32new#^~WaZkTu5t#s2#6&>?hEwb9J3cOcj37aW65)oXu>>yMhBd!5htUq{$x~F)aWz`Mi&aZ@)=nzZ z>AU)^@5A?*!IL5am;K~5z9sLPcC|}TbeFt)XG*^9woNkpb z+p=CUSU@;_Fns@q=6P{_deB|f@J8xz^arO;Z`6*kVBRP*Km^ak^xD@$L;58@ngl5y G_5TZ%LM`V2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..086ebbdfe4f3fcbefb604b7fd013788fe618bb7b GIT binary patch literal 15501 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..91c65e92e73878987c350165696f120ca8b3c06a GIT binary patch literal 11561 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..36049dac10355c846f438e0cf5c0b4fb594d7918 GIT binary patch literal 40159 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 TjEv_xp-FR9MlgGMKIr`oCX=gc literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2deebd2e6633a5d0da2163f55b7f190212a38acc GIT binary patch literal 2928 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 Z@b1^09g=0{lX5ThBwzEPZ-vUq@ZXtGlequ@ literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/mixed-integer-programming/optimizers/optimizers.doctree b/.doctrees/tutorials/mixed-integer-programming/optimizers/optimizers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f3212df24b0871f27fb7b09e40b9f404040aebe GIT binary patch literal 18793 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

    j zUdsmg{7m96WaNOq>Q`3a$s`a8h^q4)fYg;004^X>qF7C1dI4wvYt!v0VDW11aO?s~_IR-7hu3lmgX4ivUVrf7uZWAHPw zeiw7@hg#?)2=BtF%voRBah^;fA}=so<pp}1s9YbcY> zU(1M+Cgn22n)V@Z4%=W(PVi|Ur4Spnb%+aUa$Yb5tVl{zbvP8kXJurEAYTMQBk6IL zQkSI@lf(tcT^Av8AR-(MVa4I!;7kjIf{7}S*HB6!%;-~E9e`GfThAAKmt7QiNJgZL z*}b80tj?+FpXh!egi9Wt#8yC7LQPpB+y19n;!nwolo3!(c*~jKS3V6z-_Ji1eZN|w zZwV0G|1Pw%!UQz~|1DpVt~++ExWK)c!$ZQ=J=DCk%&p2NtNKEXOSAr7Csz#Jsi8iY z;+#KDMi83{4@=@B+anaNHQ@MS(H8A9dz$G9gth=!WPmaonZ}SXhDK2CQ;y57uHGyL zxL5R#Xl-eJ-^eq$I3^Ye7Y75_X{eFR7eY3_@XYA5>-)$BcDxRPo_s0@6C4fpOiU6D zotX5#eiw~y7j3GOS;H#8zJMLYM2evSP%xf!%8VY0X&@USw@Z$91C7{AR2^zPfgZ&9 z#r3<<-dR&=Jq{C5CKl;p#S|Rm!yOj6FQuajcJ8GwuB`0sSc98XVSx#{P%9$nPq~t% z@F`b5AzUdHFtq3u=-U~bS*1-=^a6H zLT2PYDAyUOk1I-;d>`yxCuP&9U3Y<+kOfkX7a_j`mmrH+7QwB)nIZrG7Ot%Q%}28K-Tipz&)0!=2q5KQyluoW$goL3jcCU}?Ux=% z!P&TP?a3p1Cq@Bz)R_3LK$12WffhNYL9>iXrcjxYc>7W zgY4XdU)hwP19eMrCjh+){$h9+)<>>OuUwvYz5J+G95Lnkh%&v2hFsL_s;C1iRmiux zP=!UF?w17D`z7htJV>7?50bh!r*vvG-i-t=jp{31g2ATiY;;M3 zZnhPcl*6*cQd)M91P|1NNKg zIox>hBAFa&;;7bz#+P3Pz|~ZwjSlY|No#o>(Z*v!zN(|?TuWYoF^dlu%;qJW3B8t{ z$TCduIfwb;`wX3s@AVTdCGJ;qoNtBaE;uQZuXwna1PVz@a&;K7Lu}0 zOUi4#OmZ*7^kU^rrHkH2kl1ui_N(TQw|>6-qS81$Lu&xqicVrDoT&h{ohmVq#u|C zOMNJip?#!LM6+dHt}r+ zx?_fgWV4*kMFnCvi^W91aO^Zer>C-NW(T<<{9%m?^b3O^bV_%lv1TMJJH(}BfQky`0!HEv;s!%B0l(#FGZ{{&6a29TQ z5ZAQnGcCAmdA3w4KjngA^wudJ=$Z(94F=`YR49Mfd*6hN_ueHq{WJTgy`%Kw!(KxF ze3GOyRFkfOu+iYUyY|m^x!Nw*+D+`s_!^7sVb=aBE`xuFlz~rVtmB9F2lmJIkCXJ2 zzU4fLQ@BXN@zS>vz2DTD4-Srjt|oWzX)H-YaIxS77(Q)`o^%#;ejfuz~^AAMUKGynhq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a2689149c4bb24e12b95e22c0d1373ddaedd2486 GIT binary patch literal 34575 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 NjVu#66y3%7{{aYYN*MqE literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..671fc32b44ff8047dec0e4277fb277746ffe4e21 GIT binary patch literal 45029 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 E19=8l1^@s6 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/index.doctree b/.doctrees/tutorials/robust-optimization/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c30647ed4cfcadbbc0575959fc64bb6218e323e0 GIT binary patch literal 3643 zcma)9ZEqVl61HPYmi!{WB~J_UeCC0=E9{mbbFb^zw%rswqwev#?dAmj8pk$lKWYNRs$0kPXv}0v$EwIO zs>T;mosW4UMfisudTa_K6(>TE!&#>?H$3J4BZkXt%(H|pMoJr3Oj+M@O$TpE7*JNA=DoPb#|ZKeY_cbz91^&*}U!8{qGsq!z!2|9t*^& zhOx}FQAHWzsCKlEB$K%!Icr&9pZTcSnSCuw%V@rQ{b)XC_sS@Gi0a>e7y7>{Q%OzhdK_h{UWpr;xD zrvY#7S2wYzuij-Y?#aQ{~7ie1E9#F4zIwX>%1P_U22<)3IY(7eb>kY!~p7LTI~E-p5fJ?Mkt4(?yQj zjzBz!H;ZW!O)sO8aej8}Ios9t&6lcxrl4>Pg|@%7SM{L{BeDDTmQf_rq9m9oS8}eX z4s_Wu(hw1HUFnpmFMN8}?I13c=eww4w~5`YB_$(HY)?~TfF}_CVME|EB{M@&1h)GF z5e1;pw1BQGOkNl_VGk#^Kc^r`0y+dZ`UwGv8?kP>Tm`Zg&aRK0-3cy4IQJY1 z+tspA0;@e-b>!*XzlAFukCRJhk7h8FNkdyNU)ViQL%>*tF~X5+36>zn&bJ-^_LM<>E#MwbrMTkl+dv9i-1_y7Pr&5$2~fSlbEB%2pt z9;7?L`UZFarAA|^k_e;$*x(pXWfR*)dzc|cq=P3l8d%p32wG^g6xkcTb?+rbnnw*D zk=0Vb0Y#Oe-NMX%DJiSLU;R>)Yg!~STBIIL2PiwKY1H0XLIl^?7Y9N~w}vbj_ofKCJn&t||tMG8lrB|xz&YCQGW6_SKX z^poMa17y&(5|r;HJYW=4>y^D7L+d=EDd8f*T7z5uk_MotP?Hepz*o!%E;GM!b zLE;Ow)(g(JB|#4pI&M6jO3{F#RK2w#Y_$8=EcWYD%S}hu?1ONX@pJp_Ra?~?%ow1N z7!w=A7%ITD?*w~xr%6Ex+MQ~qLy^q= R=ht@P$-Ux1KLQog(Vw2!li~mX literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/single-stage/index.doctree b/.doctrees/tutorials/robust-optimization/single-stage/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..59e427aa2639ad7d643cb1755eb7fcc4842e6a1c GIT binary patch literal 3636 zcmb7HZHpYa5#IIg%+Bn~?917Xle^8$*@x2WX;qg>Ri&q%s(#)3_tVi<_2-UF!9~8B z&@|0e%8Yk|R3&A`a_fKaPv7`g{)roEdSz6p6Xx9(G!iaks#)$|;N>XjTOrM)Hqf_J zFWGuK@42(dWK6W0m&Ot!@}*=Sd%pL=yM1b{7W2~L@ZVXTBQY*W?CPq3M(@4FKUI#r}6v?gVWhmf}Wl%L=d_}L53@8WkKzX$mJ;)O5yFZolbKaT4B5&!V{ zZj9!N>Kq<+U4Ha67iL_CImTm&4Cry9a$|K_1wU!L9^x+OQqzKWEbu>ueDG)Poh+@R z`TX6Z`HVlTq8K2mPk$=(Pip0UlY%PrL87ukA-1mP)lKp(08b@Wv+h;KTmGLp=41El z|3wul1whs!*2kg96IrGx1z8tNMpr2-EcefMP*W7B0q$mQcPZ7}zjb{s(iC-k&X`sZ72ze1%^xx9w%KImY5YJkQ+>ip~@KY!m$raP`vadCxfE|~Uo6I$Ok zd5v}eMb@V2i5qvT>EcJq&GU2CAa+B29M#9&>TGGE<|5C!F#i>N+3CXE{hX}|lq>`<%*l*>k6CC6Gl+ZD|^%p6jJ-UM_Lm zsHQt;Xht(ghPbkXg^+@OB1g^$K%&w>if&li#l;`ckMR7#?U#gUtu)~@PbG>1FhFdH z_3k)kzGJ0VS@G_CQ}2>}3jh9f@`0ij4F&6gz_7}A|$ zeFsG0-qS2mIwfEgzy`+z>Y2GdxP5^bkq(hIXyAP}qG*$3Epm6NE}fQHL0UW_tCc_i ziaJM2g_+|@QdL8^`n9MqtV|VIWdThmC_7~s>F%r`f@*y!jEHzWCaExVE<+%-mwQc} zpymz{j6r2oMF*otwHj$@^nQ54A%^KdptzV|EyaBwfC}3sCX3ThY=BL^1PUeQ0qg&E z@*6iQSh1#$5X@na%qe^ib>SXxYYX%7bPBPV6xWuke4_Lc<#aD-Rt`XuSeD^>EUse! z`NglF{T{VD(u-une2}coKW@yUa%sTpCDRkZ?4mjYY%t|ElQ?W>=^Q1LhK@0C=Ky3z z+RAMCkC-AL)g^6;bO@pegN;TQ~~#gCZnjbf0ig|gG9Yot>cnNmC(9FohKaq zKf%SvVnddz6k_*fS>T8;URK?w<^Z%RNJPE>25M3`3oHSO-B1%*z^+s@R$`d`EE*vESI0#PRoG1x}+UP~+ zyOOAfVH`J}&6R9HQK{bD5VqRGTNa1Ssnw>lTlPV?+J@Qu-lnbk4TccVNP=+-SV5CX zl$1y}Vn7$!`@EL_fGm9PzeGu3tVD6)!@&Rr@xYc%x?&8@BXey~SB=bwKEYt_H7Z%Z!J{DkJY(mAs+ z^m3i~f+-h2#3z5oxAAf48+vB7HyMjz4H_92GB-@c*D>rRbtj}fY0ht1mN}tSdz^Q8 zmv6m}k9j|IoN$t@Y=ws}tx&Uj&$RS~8d8-HpJ`>Cp+dRgPfRgGD{ILD3~c_w=E<{< zKKCxxF?34`k6q-4p-MpU|*Poik$M9Ws(Kupx4rqTR|QwH8AB z?kHN+zk0bZmx~F_P7RwT9UrzFou#eF_xT+@;CJ~3KMr=pb-_l)E5tWC)8=#}axLrs z;G7*f@3awA+L6%{Z{1LrP88zzDj6epriT`m*(h7)EnDVo*5+*_RLLBN6;Qs_+HA2lyW0dxGyy7+U~~3OdhO>3Dp81GuHY51JAvpGiH5??ac1JVy^-gx$tOE9fa-OqgML ze7+X8tCqD|$#dv#g9?_l@%&5vH9zK0fvrv8dxYNMt2hb!4V;E&hL$BWk*-1~ogXgy zBH2OvvDQR*=o32({}1J`+JLe-aqlBeH1JJ6Y{Q3*x;Lv>&?lGUSarH(4E{9S0#PX| ztF9!a(KEwr%@`f09hG$g8=WejKHYaC>}B30J|Zpq3>K1_g+k9V=MX$7`LN~KsnN5ar{7xg2F(b6tl>7?SH$8a=-8KoUt*?b>%6ZZo=WIolV0Lb>hx;kQF8@cZuNO~Q=PhH%U% z2_ORoh%Iw5?AMuJvC^rm#Bh9N=ZXpbci5|qE*)4Ly?c4%%E@q$0s!zVM}8y%ieXn$ zHS-t>NOz9)I+{D&G%V95Ctw1=2G=A~9fvN4#S}3j9U@<#fp^0m#oQrFQCJti+HUTP zlC*e4Rx1G}G&2e_3TE~zN!1Oh^h;4`na?$u7YR)VY+h>1$m+=oBAFv^gcX>1$rj0l zr4yL~X}sK8^a*-yfM6^-qkb0vGL0HpP+<5Z{lX=dnM8UhOtO}v-aDYLb_rfQOw9(^ zs2NZwF<@Q%`QTC5D_Kd4k3W>}5 zmr2)c=$H**B6%G$KO|cV8iZet*XBu zBC&`8^J42+BmaQl-^CXIKOW*}BRrig>Rn&h^2R0cPAjfTw$nUQ0Fha$)^?t#tzm&Q Iy#3_lKg3iaqq)?r%@4>qz-=es@m5zAb#!Pr4o$(8{NBb&4KW_M?AW;Hvr z+L_heA}a(ZCKgOm0hSatuPUIDKvJnxC4@?fgb+fd2#`t<9!V%jsNx?Wl}bVa2^3ZN zecjVNJ+rg3vv((9sJP0Kb{=1U@9*oczwY^^k$3seZ(#ogJH4i9IV(lIT6Ns2;dO&; zRkzY^7>?h4XZOgPyO+9C!B|UQ_S|->VswKIc%oujcC}?V-6y-j4tm_TY_Ax;ztuA; zzU4adb#ufVHMc(5oifLQ5#RD{L%9`fKjHW-x7z0K&~tcf%V}eU#!uXRrpxgeZR!}^ z@0z=Vv64jB+#HOCSe^>D*p_2-PqoW>P|$t9WtH1Ls3U4NTUC!R-&(PC&%;Ihd&JQj z{9oIu?Pm0&tXIypj2b=D4z~LG65Z;WJI(#(cJqL_**qA$an5ub#$2oII7Vx3*=?Ph zv#PGm{{V8{oZt4{mZjU?T+1!DJ%841`c}hwqfTs^^OxOO50H(yifgwU&aCcKXDhDb z`7PaY{MjV~aQUP7DOpu)d0@bylbhOQFl-DQ(U)3!(^Pr;2d7O#yFY?@zl5qCmr%8- z`|m$~MAPjhAnBV8&GIx|W4y5{x~(+~-*l^5&24F(YhSROB~7BNae_3JAgzguw$bp4 zg%iHEta}>ZE?JIl+Z|0%U{tkoN1Lx$zA?Y}gyAgRe)P6G7K>f3CzHVkUf`H_Lsf(x z%yB(9WgddInHz%bO~a{zOQjVkjw+2^Npcyr5ZgEm5Y4gP}o10)_!4@`Zu!T6=HO#}fehdCT0{t~_HSYnwFNICWm&h1y>+1Bb`fM-? z+@ZVO;B{9-dAo2aG(ZCy-VKorw&IfCX~M^BY<7cj{4!RWwgpPMm)Xr_z2)Ga^s2A7 zmJA=RNb-lsJ7yjWU#TQFfJx3L-HU=JVBaOATdJ+v?BM0=1B0>6OKkU zKBM_CFsspoy2BqaBh}oR27`hG4DXt214pvw&|`D+1J{0L>5Ht^>Tg7< zA*i~rRXBa-aYuZ&X;oDF-g{by-(&K39UuDO6$+t4+a*FBu=%L>Lq+bIc-!5b*vKi?QLe4xFe*nCgpeS~q2&@X_pXg8dof(u*z}?Ks zK+QZl(fKEXNSMV#e+&|WIEGV6ntFuYOH$#Lx@T3i6IDZ3==oZIdVVg0o64j?L&>#+i&Go}Mo(uVt%|zmKMpY#9DX z+3U-MUy`LX4;c#z4c#|OW$4v8B~AzLUnm=xja}4{b2^s_8va{oSWan0Tfksd?Pjeu zwQ@vTSm3vOOvEpGMZb6{ypIP~7LY-nnGw(2tSx}|nBHj%D;91ooUw3ETQF9TRd`y5 zo_>64Wd?VT(2e8xcZdDb7LYF;Efy9qV+s)x5`3Yf$yEfbe+Clplo?h1XS@Q(`Dw>IN@Ly^HMXQkM}>?+{t4Wu7^|X~PCc zl22OZNx9}1Yx4{Ak8)Xi?b(aap-T&x>YGsZmb)zPEb@xNl6Apwv|8I?m7bYG2;$5F zhVcyFI4@t|pklA#ff)@B(#G_KjD5Ohq5i?^CR)uv8bPTyo|=|`p@!+8p@)~UfdfaQ z4>oy31SLH)fBRrkO|zP7FnVkUXr%7 z7$+QaH5UaURxwIYPOl5L9#2T-R;Sd#|3rJ5jLt3?wjE>21t<@YgmV=l^Je%Al2w2p z1J9ieB{D67F~zH}ZskpDWy4=KAafF!!csnK<^p6C)BPA(Rik2gm^gS*L1;{>UX+#9 z-%q;Fs&HZT1(ieMz3T5~hf-DHeh%l-Yz39yNuZJ$DC)mOPw!{=!^S3q$#fG@;3r9~ z|29B~kRQBwpfL%;uIp=W%3y!GCSne##3T(@86`;)V%9dJ(KKPqo+`oX`y0EU>e_zp zKpF0Dha&3p2?=eQDJZa#sK=#oSeS682NJj+%yd-Bp#L%y0ZA3hBb87ky>k5v7)xr` z?rFt(nL`w~?@ZiKu>H@WuuZaiADl$5%T>Twt-13FsNEJR;31kvGo}&M{;ChMTTPG_2IZxOjBr? zl4t;HbdP3HnqKpb7F}lRuOb5mk19r!RleX-MA>j!WUWyJ=Fn@6CA~$ff~bt8l*qyY z%%I02&3I}UJw?@pPY`c}W~|`N*u3ul)gW5?z9MQc8GQVw)XWse_|}BN#WTb;dfj&< zfM;h@q1Pph*yQP{pQPRAX3=)lLx^xxh`fdZ=)-Gbhq~llPl_#H1bK<{6Y=MRBT*!o zZ3&l_UW(V%awe53FA!Cc9}-ny7NNGF2T5I;JhKZA-;V+SmWC)W8QQ~^GyAZ!w9rGg3e^IWaI?PJxqD(vaC6qcZ#!8axa?`V9RkBzp+>a>IvO83% zKn$QTpivw^4-Z0~$JTgxGKNYX3T*R>DdoGxFi=_usys|CqrV30!iXuosP`0QWnuQ> zO6lm#iYULL`dT_FDzEIBvFr@_w+kwxSoszs6*>2# zB5tAZAQp&Ood=l%*ylQk-mYV$r56bKq7OpM9nuDo%|X#x0b6Ct(hy;0gCC3{>t}~C zK3VafhQ)jaZ??u>Axf|-~_p1Llf!SaG5B!z294gzr z%*WKmELNse+OlZf0^Tm8H_Lo7oiJJ)6U|vife^8n#qRwXPBKFz@vxMLG}0((q%@=a z^FB*p8J>1w)n0a;JZ#Dm*-twe(g7XZe5D=G?NSpI2Xy)h2C2#5uGK+Tlzt9uQEQCx zBJ;t_U@5}IzSMxN400?nNZipREK96g5N6DLW4UG$-+V?oFGZ92eErkp%6R%Xg;%2V zQF-kna@|!niK$fxYD1GvVzGvbf@q`&N1&dBjE0ItUsveT6IUZ=Udqj5w(M_yhTJ7} zN-W41S*OIk*;uKqSs_a5r3jy<1Usmyf#dTnfloue$nd!j_(a**Kb=OJPOV(21s2Kz zQB$F+63f_hjdcfN;g7BU(mRckQ);@H2zaHki&_)PEn8nt5y<(7#wvm*oDim3E6P+WY{JcMsJdQlsA}l&0j;!lDlr6)256^>PwGCOnLo~S z;FdzK)H!=Hnz(28Ri(65u|}!0KDA1n^)Z>JW+`-Gu{N!9_sBs`!uj!Tt(&#ZSzl?l zVsG_6pW1NsvqhB5Ex!SCP$#$buj7JD6GT&G>J<0nCNakicB8(NP?sFj-d8EwT7Mq8 zisq{K^1ld+`j-f|SPcC*Pa1X2F_yIpIyQ|_TT|%vA=^a_-4R%EK@mx;MPS8+nu!b@ zTS>wPedtE9Se!YBm}xk;Tj2{9I(n!qr)n70nF7KhN;6@LUNk^lc~HV?11wvH37<*R zNm-hi4ECiGpxFKQKy&}3Rzx@=RYZ=>_@My!Q361JPY1^#5>^_OMYu!R3{=L+MpP_w zN30g;j>$_3u!${ks)s}RmYiZ#2F%9(y1oJzRP63?Bnt2w)W?Nsh>dl znl$B9hPZ7_c*o{CNo@0luU9J$LACoc+u#+jK_*=B6gy}*%}R+m?t;R0y_R9?D{|{u z-*=PUrD1s*$#N%ZBV_4!zNDB{#cj`xUM4p*5alU)%EN|P;jH4(a`A{*Je>^o^m0TI z=81$bm4s~|7EEE{>Dr?Nj;CuW&OVwuy)H3q+>(b))?Nc>SF13WLKdY~qAd3)bdz|> z++^4+maba)gpjvX8W+QIB!<+M=tvNqbrnSWDheW%u)d-=$Sb6M?DR^?;yt-#@xFDH z#d9xMS@1U99;cU22&?f*pNvG1V!n|vd}>_<@Ml+104ZekHHC34iXIs}j~7iQWv(M9 zOqi9)>~cpu{wQF-naR^Wl~L(IHzANk@<|4(eCYzYWHA+ur3)ufXgK9A&uDy4g-)d| zoWX&ewjr?#)Ho$J6|hz&YT!bifZ2j5fei}PGX+|(bue4tl{?d@oWoKrPJ_Ubd~6(+ zh{$#>3h?=}kYeGq*~ZQS8VfC7=h#wv#c(k9apfqO|4!3VHtJqc@`$9^QgL~Fic`%? zfzwAAR_G`9v5YS>lf~oWDYgUY?DP@sUhU{2n?fo3F~SCc1V9{UQ9}Wlqu>c7`5cNZ zb|?7X%a{+RAw2!7R%u5JZ@5E0G39Qe#)=!_MR1jB zq9}zz`W3@tJq<0RX;8;rlyOa_E0vmy+9Jh$KaKu01jq)i3};k6-V^4a~+Y+ zd6fTFz#PluY9FU8vAvEaEvb%586rbpR+rPBj5H=S^^3y9!g!Aqm2bqDP5=d9)7(Yw6=2{~ATqae+I>x^Sw5t_NhjWaFveUl|VZ?pS zgh<3#q9_!8gcg#f6(HZuWa}Vrc!HGx*ChdsLSWJi^39Yex}?pN0`o)_2QgW-4y}Ob zTEp_Ndj$txiR2xAQS4z3Td^^Vnr0ibMAvSWrY1P7P9A=j)=&_&2pq{hq9TaRqwy>_ z-d!(S#|bwfOwl@yYYL$81fY0%GAYrplb%Lr>GU0|Av}^@l8St?dqYfi!>{QcQrC1N zA+BOwx5ay|qo#2UGfv($&aPpLe7Lgq5U$!dg^rpU`0*JR#W@$@oDrsWM5A|)muPE! zY}SdTTy{*t!X-ZSLObYBVrVWnaDNu^SJz0Vf_*q|B!!jr89Zr-{$P4)KIJLdS(U!3 zx>>HO_IW?Y%IcGf&Lmb=3B~$NL{Y3{vJopRn7z{!n4KbnPW}tJ-Da))bTOhs7D(V5 z92`5;bUmCgc7adF*JFlXNX+nM@kUPL*-kPl=ZIPj)p@8gLd(L^cg1`>O@y%%568In z)C0r|%4rI}ur91n{LTYlc>iVH+}X=R2{762E8Ja5V>9=anY|=2TyyraNVw+8UdowN z4V%53W#snf%vEjhDZ>yY|4$UxOSN-rR?bA{=}ZYE!(vje4(BtjC=e!fEngrcUZy57 zwP+y}yJOqfe?%S&Wj-9J6RY}SzY~sKqLL?-0`JjgQ8dMos_}DWaM)Aqp;r=i2pt9>HHNNxsskB!_ zIem?`()@WUnCFwXexwf3gU?2 zu-_Ixx)hO`ovq|z+j}?*(Y0usD5fENXB-=xK}|_hiiOBp$t^Tok9P4lu;U+xZ+F<* z4FkZOMns~_EogJUZnw}4jpMn+R(YTXt)?@Mi-pJO>@BONb=)?#=6mP|bE608Do%-7 z#u0r&<}>U`&ve^%6{}9zg->tHvwf0mKczTQT6>xJSBbVp8l_5QsU*SNtF)DAgJh`~ z+qa}%goi>!+qYhlN90Un<6Q~=Mj&~p?~}7eD*f+?;p1Lv*kJ#!fOfS?6@5rktGIR8 z9r2fW)YjEEjtnu!r_AGu83`9OCRIxTvukTSagB>BnHhu=X32st{7jjs!j=ppx?>fV z%tdgoY>s~kah)3!&NL>E8Ga%`LE+|1$&ev!_Iw-%y%m3AGkUFO_amKlU%wGhR%1X% z@t(5vaWf4NKa>91=uG-&vG4JKAR*0{v4d$vr&Y{|V!=JhbtO<|G{qA<5e(HJ7~J)! z>9*)t`DPm)T$$yv7CaoN>WLsA4@E)Hl830S_VvgYK9niKgmK9xe>XqKihClotH-Ab?)B;SKiR)7M5hT1Q~8+@&S+g>a*l&-RWMww+F!r6j8PJkkY4{;HVIe1J7BiOD5TmJP>i<8UeXC-f}Eos@2~ z3^vSvb>Xd|10%#*K9<_}z6Q!#*$EweJCJ%k!D4|``h4vij@!j)rD*U$JGEEqFl=zt z6eY#LxrLKg+bzt#@ztO77iZhXgEuYPEe(OAcd!DO%Zff z)SfPJa%|XxLGzes_Xjhs=)78q_##2a1R}AK1XSV3XQdRrSS-8>v8e5!;fT&v;rzlU zk=)o6i5;@S7$53F7V|lCXiH0|5KQny?Qo0;rO&5$Q5D3A=2cfiQ56IJ-Gl)vrOMUL zU_M45bIxEso)|vv>V}=c{2`#NCIKTCsw7~!&Ys9IgIR%VBK|VBd@$4UGb9q9Y#hq= z5yER9$Wmryu&-wFKan-n!zqcRNgL#nl#!B(7BAktTm+(3Ixj)@F>yTnkls&0^xH$R zB#ge2C5@}?TmkNot6w`g{j)Xsdl9XU`jUy9{+o8Yh?!m@+# z8t65-NO|g|MV!Hb%!sdAAjLbZQInLQ$||2?dM$+C9Bo6IND$7KfZv zz`Z;HE|-}R4lMA^4Ji_3;3OSNa&qesl4I1xtE`U_Njyi%o`FUx{JKmo44bOFhOwtV zC)aajHJd`U=K3ZWoD|#yZ-xvtK0_>V^%Cwe#WsYRWzQ+wnT+n^)g{(@Qw%US?$;zu zgG^Omy@=N}sV(5pAxxVMpG5@O z>UEJH{)R7(VvYI|?*~h-`?0U6^lkeJ@7}8|;A95_XI$DYKFGojmZJ%4)C~55!ih5< z9Q-uYMXfE0Hn7a9;!wv#J{^;ja6 zP{RYd3nDn?=OQ5VNzUl}@E$ngE8%(0Z_D{P#ZY;2J{|G$+OfP7Gu~@)CzvIAE%wQG z86lU|#6S2Ej?PEr6ipFcrH!qH#1a0TMp1q2{SrXxX9mJRe|!<1UqDHGS(#ub4(^w& z0o14Mmg%!ywB1p|Dv*U1PqawMx-qpOumhu&=-jgdlX|`7hX!c8zFz`CAy~SS2iJ=U ziU+t^ay{)dxG~8t?qcw<>*LDH#l*{T_t7U~qY;@|zTparKtVD|q2h2?x25EjL^b!W zsXH$sb9f+=Kf~ryuV9Sp&*Sx+I;0Y&W>feWXU|EOAu53Q@>oHy^ z`OG28ZsBIcPHozfLY^jU_ZId%=&?vvPh~1|!r0|P`#WOz#q;9d>~qH5mHkYpR1jt9 zDD||u7b<#EyWV=mwW}MGo}yhdCn$QNmPPAfvAz#=`LB%COneVO=-O~EMVj~CRcYRP zW4OmPk3L+P{@DiZD$;a>?X)>6UBp^INC|%Qic9eQF)k<)yg_~uA-<>^`UkmdXy9{^ zoIbHCIeoAXhU~zy)9CPAqSFCU*Ycb%{8cKCOm z%C2w9k2aw|tJH@F=W1+Wywm6VFSOj&_Swm3*zMCaT3E+I_b!gVC~Ehy0~E1xjUzy* zNmZxsjL_$!M87Id7bz}bVSm1Y#?<-6`_SfEzWwNJckz;Q`gBsi;v7*@r@u)Ebj_*L zmk404)afgUq2p=Ku&L7*0c|xi)YU8y4@{jt4237ovLv{C<<%>nKzH|OA$QwRRpEak z;f+aMRe=9+u*gW!(|ahtpO8?n*{a^ozhSSY7JYJD^GsAnFrSF`P+pFDC@-UjQbAqK zXJbOiE*K=OB45%<14Kz{^iF*~RxmgmO-prr6OJ9V)BCl&>>2>3&Jp}zyEw&_nu#Kg z_FTUuwj0CT%p2O+Tzpfu?RaQe!bii+ncy0~r8}O@{9y^MdI`?Y!}q?Yf)U^K@u8BF z8-jv(#;D?Fn}o12*imV>T9`(cLRhDQ?c$1UIY#$Xunjd+A4#m&4R+%@=UCuFm95rt z9enKw9lE2B(N4?go4&!Q+xFp_yQj>Zr-HF1!@-AA@Udw?8mpqNhi_Xqn)or^a$O&& z8Z~RB8*H3I11?9QgmKT|fkODR-Lmm(!gnjBvR*kycY(?XaBg+F!JZnx&;q1#^Vwhm z(|R9ufYJ(uh3>P#4t%)UYL*Z+8hFtI!2SG+!D|p+Y1#74QpHC57l^@l;S2J@c2srI z132l4iS_>IKN!7ic!y62f-k{``Q6-QH{7VlIn#_3T^lxiRo9I>iGAU21wpyXux!8l+IW@aaj{GfL{4OiL<$=>k4b z&Q*423572@rx}EVSZ)=j0<+r=VmufJvpWEt2p=oeEE~i<*$pP?Ul;`Yg2)X(HUzB- zk&n0ZW%={u#$Y$u8#KpRf+E^h!}7Zi@46+}(KMPRmbidpjA7g9N*U>YiA*E7*7W_R zH$OLr%U-eB@lDq$x~(Nx)INHWA%G`KJ~j`+LqHtcaDDdh(L2G<9j#g=0iLcz;BOY- zVZ1u2>^Y-Vv<$z-#(+bZGyR5*!Nz>O3@fVQ3+*Sj1qY#%jgmA@NkGYKl7?Ikc6lAg z$6Ua)mP{M}Lw~nm%>?Sc-D~JDwDWCPwFgG+Wxx5)lI>zM6=&_iim3x12%g&;xXf6H zx6iek7-9#o^DQ6z=WgIKw8zD9*)`}u=oj{oqd>QE;xVg1x@)^SH^wc@B|&8xWupoU z?f?VRFno-$uY#w}m5c@!A4=#iAivA7-c686;+|pGxKFzrY&M(=-Bayyu#I~Ym@hOD z$97w=4Zq}L8Onfng5K-~QqU~yJ0KV+S&}yo_Qb9_I?eHL8PIC-$0)hfDs%qzrxD_w z?AALJ>Db}u_(2Dg>uj?>e$ZZeoi&o<2X$`i?O-c`5)f{MXQ)rnAEyDN{s{f?I3SoG zsqdk*<8$@DqdigIsn6rD`Z4-r9M@SjzJ3$EM`5-dj1f?L^_w9)RVT2Q8OX~F++_ys zG6Qy*!Fra#xy)c(ZksPgEMs_}=>BT+r3?|X11#uUF^taoGx!(qVc%8x4%=+YNUqZ< z@fK8K(@srF+{=#cL85<Nv$pK|JE3g#8u)T@tM^RzweTJ| z%m97}YUsgW_`uTfs+XtCF~r~wCS(n9S^0Ka_<0BUxtZ|yWbn!dp)oD8K8@RkcB8ug zBU#?Rk(TzUPaFKi^bh_L=O4;B|6c*|tePMtM6*a1KZWNq^RAIF2iO>FA&rLPI&tb% zk5C{M`4~XeKgqz<{{nxBtxT|GL_Ao*Y0Y(!12XH`(Ow8qcS^6L@YYLPV)N?jU literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.doctree b/.doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d3747c950e4e189166563cbc2b6a269808937732 GIT binary patch literal 19961 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.doctree b/.doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.doctree new file mode 100644 index 0000000000000000000000000000000000000000..075c54008ea7704e82a9ccc5cebacb05363cd519 GIT binary patch literal 11615 zcmeHNTaO$^6}G+J+jw_<4}sXE;v~*2-kFV%CD6ox9HTgv<&ET6-~^lAp6;6I+U@Bc zx~g|~kODy>l8uTyK*KYCfrmWshy-u^i##HP5E74w?^N||#`f+yH%G{k)|sxZK6UEU zcdm8bpZ?vg)&cXMJ}QTSh<4hp??dIQrT~_pad*At4SI~JXzh2lg(A($D#cPU&z&B z9l4ss-BhYpJXB&Je(EX_N2_W(Zb>Z7SG_n)2T{w7{FWC-QYEg4RIATH*G}C|gyO_) zJCQ0&yTQDkmE0pTrTl~GV1~ri#LHjuYgn!$;?S#Sz}&*1M_{C(|i zmIhxBmNEUjogTaxJb(SL+4Ve5#qB5VFsN@XxfU@M2+0b8udr>-wnZ2+$vF$+ZKh&o zgoyp`C2g83<8X^(Zh1z`o**0I{~;f=t!Q4=Ph#mxp5NKOJYNgW89B}ra)mrESkjN+RcWLRpN$qX+5_Ka|Ogs zK17sRb=Vt^K5TuM&LVT`MoZ6yZq!d<&$D2LELeb(_n~F4YX6HkpBm?WopZjcnJvu1 z5iq;Hmree0ZbNADk7y0-&M9rkyAKt42`)8qBv%tqt-S^2Q~}coWBUN~-uc{?%0VT{ zUA?@or3y%$9fwqHd$jr55&foqL=&Dc-5XaQ8eCl*$5m~$U4&U<;=?)<`@_j1j{aBs z#R*M*5GSK?iQY7!QK$1Zg+kxw(n|!Qq&Qk;CODD>VkF{1ZVep#lITYieM&;imWzN9 zURg3kP{ys;2nv&9#$6ajL+L>aw)3Poc>rarkI6}aw^wq!?Ipz8q5r9V=#P)Qj|}pz z<;eT=hf?G0qdI5%gX2*k?2r3}BTdfX_-N{Sj$E`F4Uxsn!25NDhaW>q9d=;Y5&ow= z`l%1LO`Q4;h}PrOBalz!BY%IbXCfy*W>KuzW`t05o5CIVU5NlQ;VWzyau>g`0>wfU zhau$3vmh2ntb;e5^*o3*@zpMYDZ6B5AkudbyE+E=jy0!F?)<;IZll*GJkyoWfWO)a zeq2An;DBBjBAz5(cCd%Kd%pSEZ_28~yq*z}$>C~|)jugO!fs#Lrx0s9`geUt6^vDe|9NjhQyqx4-nvG!GHBE zo-Dklh+BOG|MHz-C_JIEd*=1Fn?(3Y-{o1leqm2o8EyD`9w8jZmOnO@0%}r)RAcyf zv<{Nciok>@8T}g5tKqGHM=M6PJU7bIHJbt!S@lH5#!_k1-#ybmw@7~}0Pe+M7;j5k zi2#JY_=QX9ZJarH;J~BdIElJKfG2ALoY#watn75d*xRhBLUt#whw!9%HHDE9&E-dZAUUNX z2mzWUKUc24T@1=j=XDYCEgn9aLKydDQza>1ZY;mnXc#=V3kI4r1O@KE52uP0Y6sJ1#*w52Fw$|_A!f+Ef$?r|yIWMm>=Q}F7du;PYPg4u?N#0>6pzs=s{6l$RA z0^K(3S%s^XDk@q}#eo7XPikIk<1!&=--XM-96(;Zu z5QGw8VtJ%=_CxN89!?keTyFo`46d(wG~Y3qc3TMy7i!l<3Vr3uRS?VzxeZ(FF;KE8 zR89|hR)HsQ(dKQ#OHV|;orbD5%GMsmr_$pQ60I06F#$t;u?2X6B31>FTs6ia+HRog zXS_1saR-QV#}JrX?Al%|mjqwC`VG;2n{};WFOX^q;#MiZhO+scss9ikC5oTQxzzN} zN6uAP^42F(kCz{&9(w%^5#jiu62{-K0JAZ zqN~LRWj?1Kwo(vv$3fE%`R2UYCbD=dG$vm-EY=eEEI z-$6ZGvJuUAr@6C&cgyRzm*@d&HtEKN1PVuq0Uw#;a(&z&g}z*Az)VxNK`u5P4AMw= zRLCzrH`X;_-H`z&B^wW7*aW}DR-Iz2HY^1*uaB4?+b;#yqwmM;xU`pAMt0_gie~gs zJ`k{yLX8SrS~KfaiEuz}Cls4Jgv4XWS*9WU4(j}@XTotRoo#X4%HlpCH>6dR^z?lH z56_njp?m^bTeFY9oUo5%TS%vCsj2?nr_}PoK7Z>Inu!{_A5O44Va~@du{Si$W*f9e zW5LB2W^ZaNKOo`Clf9ICvR%zmA-yxZ&8n^UhuuZA506*M>(^f{lUTXXNty1?g|>i& z_YD?yht1DOf;MHnP=!g=8cltXni=3IS}r<9c5fbOm03U*oaIHUMMVPUe=ibMB9T?i zGt{7iT4$|g<0bGqWfLXavZ23Cb!}{-H~H@ZQjc^{z}_ikoqeRorO-F z_rNhGq}^)k1^>mmWjjvrqCN%h9m&vS2vqFu!^PQ-p=lK>+z($rpc};;?&C3~O5;Jj zj^vHbr{iTOQ!hclfMO8t2Y%p&DcX;UnzNokGB!+A zwiYa}>G`~qCr&av;EtW61~3@n;Ybq43apyT1$}T8)mX~{nggOuOlahfX%gaTQN^A^ z9ZmEWtW1OFWR&R>J&-|Az-uq>=|$=g!d-^5gWzb8-P23xED}S9Vi&qP1HtF)2s$>* zh+{Q8@2bLj`3L2|Lc%F)bxf%(yM9PF0yiul(ZPiv3sO|BN@X!=T2K4DoA$BX5*3yq zMa)2V$N(erI1Z1~mWV$QL1qqc64RvtsywOcwZ7fLWnZSxjK6evlEjG&rZCVAhGcuz)>$*x)l$_*Js9GOnj`5(H?+389+p#sY@*u#VAM| z%>w!mTH*9biun@X@i|?MU>O0}tmzqqUOj9R5)pm@2;4R;xwr^&sv&)d8rT+n1jcls zY#|B3ngPmi5~NQ=@TeIvV5ifshK7=-e(a!rhFQm;d9mb9{Y!%q=d%!^()zW^l7K1lqwnsfKb1CV06Xa>6B7eRhPYp5z*-cc41Xn$?1`NV# zpavlpn^$fZTI3^sxjv`Q0+R!$RL;^0I<|6oUmugBNVz*sS>VjjfEW|>7vuolQqE6O zXtji(PMT-?=%94(=Au381*nUAR7^KY2`L*9;_JC6qpb}6e|pYZ6R0nch?0|lZYamzI2qg=2U9>6?!*W+KDBY8_IqM% z)V6wJ7}R>@16`<5mneAUM$QqR&$JJz(W=j_H`pz<4k#y_c^r`L2ZW;}+OaL>HI zp9UwWPw{MU-b@Y7r+Tq|riQ6S+@4v-gO%+FsctdPZl^v%cr&BGz@Qt4B}~lVsfodI z_WT&d`C?V`(TOqou)>L=PS(?twDLD_hA=Ehw#jV3^B@WcaR3lCT+8g0eEheN;Ro4G zCoXz3S=F1PB2-1e*@4f*DqkbOcJV-^AI zTyYmljj!jZ_Ca|s#FmE=MTr(cm2+tKy99fo$Tsd^-mVw1)469ms1Msa(!2Bd&OHUsu1!2H^L_}Vg`lLL4l2gMcqo3PH3Xsxn`+u(zru+Z^ literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.doctree b/.doctrees/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d535971714fd42321b58f39d7480c7e96e5c5f7c GIT binary patch literal 3474 zcmbtX-EUk+6;ERC+Uu{_Zc+-w?QIIdQMroH=uTzjO94gMa*O_eT8_Zre&o zbv|Kvu5`|A44b*me94uI-^7Q1jj!Ty7#VhEwKo}$;RZA^A&cB_6<^@x9_c$-*hy<( z=$KjX<#sU$?@uO4>b%oNvLZb*((yFQ7OCYGGYsO7qu6*6!xnSS$eDKtgdDHQ+`>uN z$O>jHgm@k(RyI$Yxv!Rs8Ou%$pEo*qka-OEI-ld(=NLZ6z0c^whGPq|5XDwlFQnq} z$;~iCOmuv)7Dj2G46KG-4*on9y5v*imEvZ4rp@V8=DKM9V27P{e(lugnYV7ND<@0& zC+4J9Q+KAv7Owd;(}ge9n5lf6X=R;ZQn~Sh!)~KWaZ9xl^~6{g{Y;F)hUFQV>+eYn z#E{Z>jF$r^UBOpgg^&Kwm`eVLn@pabspNNE_LJks`AeoUo75uRUE?n9em!#=N){0@FIHgu6PLb2aUS; zK)m;4y*cF>GYT14J<2D~gtQ5MSwhKAq)IBI7lvCqNuCL&PLm7mlesqZ-y~k;9BD(A zVQA8wZA7)VFsu?Qw#6?fgW^&6KYc7S@Y#Q#fyd&0eez9Y;*;-6*Uww!VV5>P<9&XQ z!*N$Rl!386Q_I31v-Y;fPUkv`Bi>!darmg+)+7$wk{&O~akmduLOTJ*9$;?*b>yqp z`y<4;wtBtc`~18@38w%n2jWnE>Fgq{@%So=FU5`x-+QA9pbdp1D6F2jJ4ENS$E)}t z+ySzbEow}qU9HpdADdy{o*7C*t8r7`0H>CSs8@5T9dZg~hhf+96aB*?9~% zr!j0dA*Aqo3Wcq9=}m#vuG3jc6i9Co$^bE&ix>{)Frzg1cKPyk*d^*vzD&=7kutsx zd!Qa!rI{{?`7I3ou#xbB*OK&1I+1oX41ev0mY0zh!z*oETJV<~>AV%T1S|UGARO>> zi7YziyzP_*VUY8gU%=g73v*}~&Pqr|xQ>id)D)jo$XSXa(S+d`M&8ZGKO0+#=X+OQ zrra29QqVwNaDyA5P%{_9?I!apRtB||7>=&Jxn@HAJ?u3`mjQHJ?_GUyZD-i01EBD% zKz<4wD2CmFsf7poBi%XHx6nw#TZU)a z=~5JKQM=pCeOaNYw)Kdt)&jH?ZWJrX;O$ycS2|t&QdC*)bDf@-R89MUowht(-C36i z(E3tZiH=RS(p*|LE9f9?lp7sRfVmwU#sV2N=%Bvas-<&T;Ba7%x9JH^EH~81a4}>p z$9->O;^>#?$p-{Bl#N=T3JY{n7eC+sN!Y7+wWJR^%nnIr46zd~!aKsb%6>eZLTo41 zg%es$v{?X7cS*Aj0Gg@eC9cQeIyNC6|M<~QkSe@~5H=es0d`S|5=|S}aA`AD)^&4$pio&DvZ!iu8v0&=>aIwe z!4P6toA-+$@hN6XY9DCxJIsa+dfCX1(R7Z)bMb`_Ba*s{3gObo^5tvs{L+g5_Ld9!A~P0pmusq@T-zW4^Y63mor`TMNzBXxhCwjM^`M4I^`d-uAn_6_#xMwdcaMels7TC?H;?w5)MZbO&KK(UPZm6P?=Dw5r-6;L05&k|6f#_~Y z521X5IBEFAwDE8I9TVqcDE;f(=BzMi+u6;qPQ?Hi{^sOYPpPLgUxz?*-S-BX7yb!j fVY|;qUBTN@WrfcPF$*HSt(=&?B}JNt{A}_c@Yhp; literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/two-stage/index.doctree b/.doctrees/tutorials/robust-optimization/two-stage/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..32e29ec27bfa19723af62ca79d09d70d587ecb2a GIT binary patch literal 3577 zcmb7H-)|$g5w_2kEcu7dcJ9(7jT`lnT;&v!4rm{W1OXZpC|Vq<1c#t+hXu7uiL|-P zEy+F01p>4WDbB#Wg?-BZn13PtxW6Q;X^|YDvp5{ikTc(WGx|s8-`}0=l>g|V&4tWX z6P6^IPPp~dOLSbMJahgVfB8@Ul^;>xup6rj6LU{H(1?XpiQ$=liOoUKcT(9&ZJ_Iz zS@QL9(V_FnWEdGeFRY8K%$ACO?8U)LPlwDoBj<&K=iq5iCKgudAXdy;2=Tp>v9$Wu zONxBGn6voW@I|GAFEa6TQaKq{PJBTJjxECxFAiy6$&CBwyVT7YZtuLTb-zOh9geU@AyXl$(m6Lg@y~bYutbm5 znYxAUA!>FVhmfw{izj88dPv)++qtEOb!NslhUGaoo^7Z5ll$ogJa`L_5sg@j)bS5g z#JH^pFD`h4rV)L#J~ph54L1vEIBL&bw$)uzi07MN`~bJx+XN%M%~v^!Edn(lL|M#} zXnq@&Wbl<2SK`>x&wfw^L;{5iC~Q8lxpU*RB@6LBJwnglMuLIl6pP&llYg;7|Y03A^v z+^~zQbON+)J)JLLCew~@Y`&(GKyrX)v|4DB0>T5-h0G%`Luf1(27g{jxZkBkT-@U)Fb&^iQ0{}cL5FdpHp-2?VmIYc5!ku9K0MtQm z7#?erMBo{~25tg9&ZrB@THuWchfEqYh%OBnx?8js(Sx$NCPkV@EglioQUJc=CPOEL znTMsMtcH;KwJ5i|NOZJH1DZ}zcG~i2^JEDTRO>5gB|2-c6(!P!&WDH8w>)U-1T}Yz z$5>QGS#(f8snw!}Ug^#74NfdKfl`r}U@bwuk3f#?5(B|mC^o<*TLOg&ZQS|4oc@Xi zInUSh5gv0KBy)zlhq|D*gmbz5cshmHPV!qPbT-juiE?@zG|LM>GjcpddK}WxgM9qq zv)`h22WAm(nGce+`KOI}R4xm6z2;^jxm%Pzzy?#{QUzyyOb95UB=nFTT>y}2)K+H8 zf04}tLhk6)-e!)iA|aPT;REpQD;;ouY*U6R`&)sMwg}W4<+@r%O2@3~Tyzl&hWjA# zRk0z;We9Qly2#-oOoe4XsyP773lfxidJst5yYAl>rTXZ4T;tg1ytXm_;7vsWHXi+UB6pmu>obZ3d$ za8Wh1mc!&3E(K&^0tl!z1ZS<kgYje7yPTkgaX+MAh<@o2>A3qPhrTWzcx@&&Cgt_5+7^9;$E+vwW>e&#LvkbqQ Q4wJz6H93a4sF+Xw1BWGmf&c&j literal 0 HcmV?d00001 diff --git a/.doctrees/tutorials/robust-optimization/two-stage/modeling.doctree b/.doctrees/tutorials/robust-optimization/two-stage/modeling.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d85c7f7955d9850c99e7d04eb4da357f44b4280a GIT binary patch literal 36321 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%0A$D4>zo;#4FYf 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 literal 0 HcmV?d00001 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/_images/ecdf-gap.png b/_images/ecdf-gap.png new file mode 100644 index 0000000000000000000000000000000000000000..17675c0ea255c188d12712f3204643e69477b554 GIT binary patch literal 71638 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%0D&BFpmcy~fW|Z5 zAW?)`7w*Jbm1dk=gvNmiB8q+4Q-g(|*rHVoDy1nK^0m7#y)wSkL zH?F^EOG#0v2ss7P1vKSR&j=;D5~TJXg}8Fz4HhtsCT0A&Wf?i3_hm&i$iEP#&xfBFk!-x-va6v`csIJ5A7yv` z)j|}ZFk{SayC+_sW|oO!H<5d_c}Wr5c(e4TH9Fe2a^c6rak4|!iopi;}XAu|EV4w1?BC^d+TG=9~v3?MLdJt;sS#`aTX`G zme?rZ4Q^~`?iayX3*9zI(uDoev+Y&pB8vRH3(~t;(V_Yi#s!|u`JU@*aI=iLqyh`3 zB|3qV#!#S3+>7FuGl0q(T1{LH(QU#VfK5gojiCe$K7z*OBhL-Jg|gL>4Y|%ZVHW&TQJ|8Q~orYDV{B!MlJH$rkigg|@M(>LMQ1 zeb)J12iw52Ucm`DO=PRZ1ko$t>gBi+F^6u|%gCXSEkg$(sCoEvCQ{WKEboCufjNvl z@r1E)d0F3AaSU*%Kw zVJ_Hx0HE|;bGyXM{1IoguqCx~J%C{YRmyX4YYZ`&_0py#-ai;(NvNot+ z7&y`YMuqwmzHTx+yu9S=4jw-I36GJGK_Q6MvnmpS$U}kN&$sNLt?ekxS5P;Gab-3v zP>7TPwfJd>7F?jyf!&{o>H_!K6SSG#f)GLr-6n3X;Lr^$z=K^#mRK~WtGO^(TBJOV zx2jT~Hl8`rRA*~rv5YqX`eV4yn1hUmNE2kuX}g@srpLXc!78)?B{2A!?KV+UtA?gp z50V0~F^b_E0UL`lFV-2Uxxsw}78>|T@P2vO^LBc%!QXcbmW?4d$L<`soG8@zs*|oa zC$w)>LMYvzL)fo5E+7^W0xkzQ$=4$Q+~VQkd1Usyz4IvzJf_`D>rW8w-&IXn?_kl*AAT0A^=zt)J@SMR~MIUpueK5c};- zMt=bvt!@WM`01W?Y@J^fjuj6%Cn4m*QBVvWEFeaHHQGG{?aq1p11wh15hU6WH_7P+ zL-dSAylVMm2jbKQBaq7*8H=>&@N(Ch9OSB!3gf%iQok{w4!L| zz>1Um;z zJPV}gXZsk8w6wyFA3$gf>XItJqlZB zSYr+i4S_D?5M{abMavi!$akEI6Gb}ys)4EvtSfQk{cuFO9u~rfDj3a zVF`9(Y66w%@aijnMTL!$g}Z4GE*+A%{-#X3***&wZ5=i;>mYQ^#I}a*BL=3gN-l>jk5L@?<3Hma(w>=~;=qLWqM9avTn)GK{%oC^8;VHM=g#P^D|D#aP z^&qjMN|Y4_&yK9taTM>Dw@&y#vcf^;7*z1<(k<%IA13hPZXD7^)RLy)s z-&VcAq((9`O(gIwBCwnuLP`$`QZw6M+c+>WSb#YQOI}R^&3D^2Epc)hXOjpkqPP_uXljm zU3>OiTi`l-5GfbjAHgy;`2|AA8L(?P-5`mr4EM#>gn4uz@y~SPM9XPZuhA$eW=% z!ajj5R1YLuK|w*xR}hASaZ?6C2nj(zO~Wb;2nfKu+XJ#TX0m!yCMd)UP~LR5%D?FVgSQ$FQ*%N zP!Kb2!?FV`IuNd%az2OHj884r9)zm@r?qqcY4VQ3I7?%!aX_xu}a56vbJMP&P4wPBtuo(TNU6 zux7wMr?@|0$@(+A{q}vo-*cXG-sgFam^?t?KDB6&#t^PJkN5%@&7X31R=cDK{%g{L z6~QZ|rNwwXQePmHRMdsTP@4jJ%ttgzQN*y*WWE@Ry5COb4m#k4%_TtE6@$>DqNYT1 zpw~bA7^BdH7g>ly z7?xQ~eW<0P%k{JJa-f^Bd-fjeox|$$R<%M4*`3OOTQmxvH_V`#UU

    am~-uy=qM@ z`Y7MHlJ9Pv=4O+S@>MywaP0lQDU4AYoA?bO%DC+Q78L&3ww*F7Pn{29_Z^6dssT5t zG$gtirH!WgF>ix-MTjnxz!nePynezFNhs=gw8@qZ4L>iSs(*~z^hu;pN~DGv)(w6m z=%8d&I@{YB57@I#;FM74yQ?3h-CwJp>y4o2WUe5zl~KDDd)C%NXcW+l|XY)6JXE$eA6-(<2o>;n;H%8Ki^^^74aP?6|k`yXs8Vi{?+O6jZ)?h4ulcd8STvLbQ#ZO1$Eb}CUuqqHjK zRmi{_I<+!RD*oCQ`_{>{T;QFa!}I|_>;z7Dozf@oO{p4LB)O+22EV=#C81~Q7h$@f z8@iplPK!yO#bTq7xW$>^z%ln^P!b|Q5(yfm%JJB+`cyQnK8#c}uXmy_1*gOg1xnW(u(UB+39 zE!Ue&roL>KM)+u+tgsc$0{|4M7V4L!wJAhbG|%BWT^-~|&o(_ppGFBXJ+X{gX?57G zb#`?{`Ee_ZecI&e4cgA-zL`Y9yih0~hYl{Ma*=4NHl+WODqdX;han4#+>;wY__p8J zIr?!A$Jt#i6*JLkcM&y`mj-pl6;h3%yxTMPc}QPFOk%0NycUp{U|Gid=A8$=g42A-iOkc$GC`-}+4K*&Xa9f<9Ts-EA4UOL%UDPmAK&Rh$V zWAq7!;+x5t;LnR#WFXdfx#vXDNfIRn{c*5IjybGun^0sHJ}c*^{;K+Dv%>AonIHu!rR}(dl`M{6A`~eM+&Bf^tJplz znP?l3iMp!#S9TO1#8VG+oq-4>%Msh2gf|+ck%-|5f728WFw~NYIs^!)W4i2igYn9! zRHraXBNzVL)mdV}?*!RH`>D@DaL*=_Ieu!v5mDCokN^RSGiJMc@;^y(SUy}O?gt25 zG)meU-i~`MJdAc84brCC!0V&chc|!X132F57hA*1#Os>ER%*G!2FrQf%2c4NG^QK#ww}mXbBaNs|uU52o$1R xfQxK+q7a}nQLf7;*yoRz9L@i=sr4T^Wy7A@wFCPVI$e*fCrleLzf!Ye^FKWBIj#Tz literal 0 HcmV?d00001 diff --git a/_sources/api/bilevel/external-solvers/MibS.rst.txt b/_sources/api/bilevel/external-solvers/MibS.rst.txt new file mode 100644 index 000000000..64ba6044a --- /dev/null +++ b/_sources/api/bilevel/external-solvers/MibS.rst.txt @@ -0,0 +1,7 @@ +Bilevel::MibS +============= + +Doxygen +------- + +.. doxygenclass:: idol::Bilevel::MibS diff --git a/_sources/api/bilevel/external-solvers/Optimizers_MibS.rst.txt b/_sources/api/bilevel/external-solvers/Optimizers_MibS.rst.txt new file mode 100644 index 000000000..7850d3ba3 --- /dev/null +++ b/_sources/api/bilevel/external-solvers/Optimizers_MibS.rst.txt @@ -0,0 +1,7 @@ +Optimizers::Bilevel::MibS +========================= + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::Bilevel::MibS diff --git a/_sources/api/bilevel/index.rst.txt b/_sources/api/bilevel/index.rst.txt new file mode 100644 index 000000000..476f15970 --- /dev/null +++ b/_sources/api/bilevel/index.rst.txt @@ -0,0 +1,29 @@ +Bilevel Optimization +==================== + +Modeling +^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + modeling/* + +External Solvers +^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + external-solvers/* + +Single-level Reformulations +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + single-level/* diff --git a/_sources/api/bilevel/modeling/Description.rst.txt b/_sources/api/bilevel/modeling/Description.rst.txt new file mode 100644 index 000000000..dcae7b4e8 --- /dev/null +++ b/_sources/api/bilevel/modeling/Description.rst.txt @@ -0,0 +1,7 @@ +Bilevel::Description +==================== + +Doxygen +------- + +.. doxygenclass:: idol::Bilevel::Description diff --git a/_sources/api/bilevel/single-level/KKT.rst.txt b/_sources/api/bilevel/single-level/KKT.rst.txt new file mode 100644 index 000000000..d6c9b29a3 --- /dev/null +++ b/_sources/api/bilevel/single-level/KKT.rst.txt @@ -0,0 +1,7 @@ +Bilevel::KKT +============ + +Doxygen +------- + +.. doxygenclass:: idol::Bilevel::KKT diff --git a/_sources/api/bilevel/single-level/Optimizers_KKT.rst.txt b/_sources/api/bilevel/single-level/Optimizers_KKT.rst.txt new file mode 100644 index 000000000..c54671562 --- /dev/null +++ b/_sources/api/bilevel/single-level/Optimizers_KKT.rst.txt @@ -0,0 +1,7 @@ +Optimizers::Bilevel::KKT +======================== + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::Bilevel::KKT diff --git a/_sources/api/bilevel/single-level/Optimizers_StrongDuality.rst.txt b/_sources/api/bilevel/single-level/Optimizers_StrongDuality.rst.txt new file mode 100644 index 000000000..1b454d906 --- /dev/null +++ b/_sources/api/bilevel/single-level/Optimizers_StrongDuality.rst.txt @@ -0,0 +1,7 @@ +Optimizers::Bilevel::StrongDuality +================================== + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::Bilevel::StrongDuality diff --git a/_sources/api/bilevel/single-level/StrongDuality.rst.txt b/_sources/api/bilevel/single-level/StrongDuality.rst.txt new file mode 100644 index 000000000..b77e55744 --- /dev/null +++ b/_sources/api/bilevel/single-level/StrongDuality.rst.txt @@ -0,0 +1,7 @@ +Bilevel::StrongDuality +============ + +Doxygen +------- + +.. doxygenclass:: idol::Bilevel::StrongDuality 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 000000000..8e17661db --- /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 000000000..0a1017ce3 --- /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 000000000..b2e2114fd --- /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/index.rst.txt b/_sources/api/classes/index.rst.txt new file mode 100644 index 000000000..45ca55f1d --- /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 000000000..c25b37cef --- /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 m_n_points_bound 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 000000000..e795fb1dd --- /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 000000000..ab4842756 --- /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 000000000..cf10e6e11 --- /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 000000000..e97ddd7ed --- /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/index.rst.txt b/_sources/api/index.rst.txt new file mode 100644 index 000000000..e4e958365 --- /dev/null +++ b/_sources/api/index.rst.txt @@ -0,0 +1,31 @@ +.. _api: + +API +=== + +Mixed-Integer Optimization +-------------------------- + +.. toctree:: + :maxdepth: 3 + :glob: + + mixed-integer/index + +Bilevel Optimization +-------------------- + +.. toctree:: + :maxdepth: 3 + :glob: + + bilevel/index + +Robust Optimization +------------------- + +.. toctree:: + :maxdepth: 3 + :glob: + + robust/index diff --git a/_sources/api/mixed-integer/branch-and-bound/BranchAndBound.rst.txt b/_sources/api/mixed-integer/branch-and-bound/BranchAndBound.rst.txt new file mode 100644 index 000000000..8bb0a6d5e --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/BranchAndBound.rst.txt @@ -0,0 +1,34 @@ +.. _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) + ); + +Doxygen +------- + +.. doxygenclass:: idol::BranchAndBound diff --git a/_sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.rst.txt b/_sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.rst.txt new file mode 100644 index 000000000..d1681de2b --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.rst.txt @@ -0,0 +1,77 @@ +.. _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``. + +Doxygen +------- + +.. doxygenclass:: idol::BranchAndBoundCallback + :protected-members: diff --git a/_sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt b/_sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt new file mode 100644 index 000000000..e103318ee --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.rst.txt @@ -0,0 +1,8 @@ +BranchAndBoundCallbackFactory +============================= + +Doxygen +------- + +.. doxygenclass:: idol::BranchAndBoundCallbackFactory + :protected-members: diff --git a/_sources/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.rst.txt b/_sources/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.rst.txt new file mode 100644 index 000000000..37c445a63 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.rst.txt @@ -0,0 +1,7 @@ +Cuts::KnapsackCover +=================== + +Doxygen +------- + +.. doxygenclass:: idol::Cuts::KnapsackCover diff --git a/_sources/api/mixed-integer/branch-and-bound/cuts/index.rst.txt b/_sources/api/mixed-integer/branch-and-bound/cuts/index.rst.txt new file mode 100644 index 000000000..8b8d02276 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/cuts/index.rst.txt @@ -0,0 +1,10 @@ +More on Cutting Planes... +========================= + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.rst.txt b/_sources/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.rst.txt new file mode 100644 index 000000000..a4eae3aa2 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.rst.txt @@ -0,0 +1,7 @@ +Heuristics::LocalBranching +========================== + +Doxygen +------- + +.. doxygenclass:: idol::Heuristics::LocalBranching diff --git a/_sources/api/mixed-integer/branch-and-bound/heuristics/RENS.rst.txt b/_sources/api/mixed-integer/branch-and-bound/heuristics/RENS.rst.txt new file mode 100644 index 000000000..95663f024 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/heuristics/RENS.rst.txt @@ -0,0 +1,7 @@ +Heuristics::RENS +================ + +Doxygen +------- + +.. doxygenclass:: idol::Heuristics::RENS diff --git a/_sources/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.rst.txt b/_sources/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.rst.txt new file mode 100644 index 000000000..15707b903 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.rst.txt @@ -0,0 +1,7 @@ +Heuristics::SimpleRounding +========================== + +Doxygen +------- + +.. doxygenclass:: idol::Heuristics::SimpleRounding diff --git a/_sources/api/mixed-integer/branch-and-bound/heuristics/index.rst.txt b/_sources/api/mixed-integer/branch-and-bound/heuristics/index.rst.txt new file mode 100644 index 000000000..8fa6d695b --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/heuristics/index.rst.txt @@ -0,0 +1,10 @@ +More on Heuristics... +===================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/mixed-integer/branch-and-bound/node-selection/BestBound.rst.txt b/_sources/api/mixed-integer/branch-and-bound/node-selection/BestBound.rst.txt new file mode 100644 index 000000000..3f55812a9 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/node-selection/BestBound.rst.txt @@ -0,0 +1,7 @@ +BestBound +========= + +Doxygen +------- + +.. doxygenclass:: idol::BestBound diff --git a/_sources/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.rst.txt b/_sources/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.rst.txt new file mode 100644 index 000000000..343f55803 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.rst.txt @@ -0,0 +1,9 @@ +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*. + +Doxygen +------- + +.. doxygenclass:: idol::BestEstimate diff --git a/_sources/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.rst.txt b/_sources/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.rst.txt new file mode 100644 index 000000000..a9bf2e7c0 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.rst.txt @@ -0,0 +1,7 @@ +BreadthFirst +============ + +Doxygen +------- + +.. doxygenclass:: idol::BreadthFirst diff --git a/_sources/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.rst.txt b/_sources/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.rst.txt new file mode 100644 index 000000000..d7245e902 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.rst.txt @@ -0,0 +1,7 @@ +DepthFirst +========== + +Doxygen +------- + +.. doxygenclass:: idol::DepthFirst diff --git a/_sources/api/mixed-integer/branch-and-bound/node-selection/WorstBound.rst.txt b/_sources/api/mixed-integer/branch-and-bound/node-selection/WorstBound.rst.txt new file mode 100644 index 000000000..c70a55e5f --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/node-selection/WorstBound.rst.txt @@ -0,0 +1,7 @@ +WorstBound +========== + +Doxygen +------- + +.. doxygenclass:: idol::WorstBound diff --git a/_sources/api/mixed-integer/branch-and-bound/node-selection/index.rst.txt b/_sources/api/mixed-integer/branch-and-bound/node-selection/index.rst.txt new file mode 100644 index 000000000..a167dcd80 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/node-selection/index.rst.txt @@ -0,0 +1,10 @@ +More on Node Selection Rules... +=============================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt new file mode 100644 index 000000000..bb0a56053 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.rst.txt @@ -0,0 +1,7 @@ +FirstInfeasibleFound +==================== + +Doxygen +------- + +.. doxygenclass:: idol::FirstInfeasibleFound diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.rst.txt new file mode 100644 index 000000000..daa2410d6 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.rst.txt @@ -0,0 +1,7 @@ +LeastInfeasible +=============== + +Doxygen +------- + +.. doxygenclass:: idol::LeastInfeasible diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.rst.txt new file mode 100644 index 000000000..45a18ebdf --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.rst.txt @@ -0,0 +1,7 @@ +MostInfeasible +============== + +Doxygen +------- + +.. doxygenclass:: idol::MostInfeasible diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.rst.txt new file mode 100644 index 000000000..0b3b06970 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.rst.txt @@ -0,0 +1,7 @@ +PseudoCost +========== + +Doxygen +------- + +.. doxygenclass:: idol::PseudoCost diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.rst.txt new file mode 100644 index 000000000..6fdcdc1bb --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.rst.txt @@ -0,0 +1,7 @@ +StrongBranching +=============== + +Doxygen +------- + +.. doxygenclass:: idol::StrongBranching diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.rst.txt new file mode 100644 index 000000000..3cb5d3fd7 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.rst.txt @@ -0,0 +1,7 @@ +UniformlyRandom +=============== + +Doxygen +------- + +.. doxygenclass:: idol::UniformlyRandom diff --git a/_sources/api/mixed-integer/branch-and-bound/variable-selection/index.rst.txt b/_sources/api/mixed-integer/branch-and-bound/variable-selection/index.rst.txt new file mode 100644 index 000000000..837c226a5 --- /dev/null +++ b/_sources/api/mixed-integer/branch-and-bound/variable-selection/index.rst.txt @@ -0,0 +1,10 @@ +More on Branching Rules... +========================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * + + diff --git a/_sources/api/mixed-integer/column-generation/ArtificialCosts.rst.txt b/_sources/api/mixed-integer/column-generation/ArtificialCosts.rst.txt new file mode 100644 index 000000000..a4e84bc7a --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/ArtificialCosts.rst.txt @@ -0,0 +1,7 @@ +DantzigWolfe::ArtificialCosts +============================= + +Doxygen +------- + +.. doxygenclass:: idol::DantzigWolfe::ArtificialCosts diff --git a/_sources/api/mixed-integer/column-generation/DantzigWolfeDecomposition.rst.txt b/_sources/api/mixed-integer/column-generation/DantzigWolfeDecomposition.rst.txt new file mode 100644 index 000000000..4391c9085 --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/DantzigWolfeDecomposition.rst.txt @@ -0,0 +1,12 @@ +DantzigWolfeDecomposition +========================= + +.. hint:: + + This page documents on the `DantzigWolfeDecomposition` optimizer factory. Note that there are also + :ref:`Dantzig-Wolfe Decomposition tutorials `. + +Doxygen +------- + +.. doxygenclass:: idol::DantzigWolfeDecomposition diff --git a/_sources/api/mixed-integer/column-generation/FarkasPricing.rst.txt b/_sources/api/mixed-integer/column-generation/FarkasPricing.rst.txt new file mode 100644 index 000000000..e4df87e79 --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/FarkasPricing.rst.txt @@ -0,0 +1,7 @@ +DantzigWolfe::FarkasPricing +=========================== + +Doxygen +------- + +.. doxygenclass:: idol::DantzigWolfe::FarkasPricing diff --git a/_sources/api/mixed-integer/column-generation/IntegerMaster.rst.txt b/_sources/api/mixed-integer/column-generation/IntegerMaster.rst.txt new file mode 100644 index 000000000..963dfb760 --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/IntegerMaster.rst.txt @@ -0,0 +1,12 @@ +Heuristics::IntegerMaster +========================= + +.. warning:: + + This heuristic can only be used with a :code:`BranchAndBound` optimizer in which nodes are solved by + :code:`DantzigWolfeDecomposition`. + +Doxygen +------- + +.. doxygenclass:: idol::Heuristics::IntegerMaster diff --git a/_sources/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt b/_sources/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt new file mode 100644 index 000000000..bbeb2cabc --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.rst.txt @@ -0,0 +1,7 @@ +Optimizers::DantzigWolfeDecomposition +===================================== + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::DantzigWolfeDecomposition diff --git a/_sources/api/mixed-integer/column-generation/stabilization/Neame.rst.txt b/_sources/api/mixed-integer/column-generation/stabilization/Neame.rst.txt new file mode 100644 index 000000000..7bc717ccd --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/stabilization/Neame.rst.txt @@ -0,0 +1,7 @@ +DantzigWolfe::Neame +=================== + +Doxygen +------- + +.. doxygenclass:: idol::DantzigWolfe::Neame diff --git a/_sources/api/mixed-integer/column-generation/stabilization/Wentges.rst.txt b/_sources/api/mixed-integer/column-generation/stabilization/Wentges.rst.txt new file mode 100644 index 000000000..ce08f5a4e --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/stabilization/Wentges.rst.txt @@ -0,0 +1,7 @@ +DantzigWolfe::Wentges +===================== + +Doxygen +------- + +.. doxygenclass:: idol::DantzigWolfe::Wentges diff --git a/_sources/api/mixed-integer/column-generation/stabilization/index.rst.txt b/_sources/api/mixed-integer/column-generation/stabilization/index.rst.txt new file mode 100644 index 000000000..623ba3536 --- /dev/null +++ b/_sources/api/mixed-integer/column-generation/stabilization/index.rst.txt @@ -0,0 +1,8 @@ +More on Stabilization... +======================== + +.. toctree:: + :maxdepth: 1 + :glob: + + * diff --git a/_sources/api/mixed-integer/external-solvers/GLPK.rst.txt b/_sources/api/mixed-integer/external-solvers/GLPK.rst.txt new file mode 100644 index 000000000..292cddc18 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/GLPK.rst.txt @@ -0,0 +1,9 @@ +.. _api_GLPK: + +GLPK +==== + +Doxygen +------- + +.. doxygenclass:: idol::GLPK diff --git a/_sources/api/mixed-integer/external-solvers/Gurobi.rst.txt b/_sources/api/mixed-integer/external-solvers/Gurobi.rst.txt new file mode 100644 index 000000000..08da5ca28 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Gurobi.rst.txt @@ -0,0 +1,9 @@ +.. _api_Gurobi: + +Gurobi +====== + +Doxygen +------- + +.. doxygenclass:: idol::Gurobi diff --git a/_sources/api/mixed-integer/external-solvers/HiGHS.rst.txt b/_sources/api/mixed-integer/external-solvers/HiGHS.rst.txt new file mode 100644 index 000000000..29a1db733 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/HiGHS.rst.txt @@ -0,0 +1,7 @@ +HiGHS +===== + +Doxygen +------- + +.. doxygenclass:: idol::HiGHS diff --git a/_sources/api/mixed-integer/external-solvers/Mosek.rst.txt b/_sources/api/mixed-integer/external-solvers/Mosek.rst.txt new file mode 100644 index 000000000..67c74ca45 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Mosek.rst.txt @@ -0,0 +1,7 @@ +Mosek +===== + +Doxygen +------- + +.. doxygenclass:: idol::Mosek diff --git a/_sources/api/mixed-integer/external-solvers/Optimizers_GLPK.rst.txt b/_sources/api/mixed-integer/external-solvers/Optimizers_GLPK.rst.txt new file mode 100644 index 000000000..bafb40213 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Optimizers_GLPK.rst.txt @@ -0,0 +1,9 @@ +.. _api_Optimizers_GLPK: + +Optimizers::GLPK +================ + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::GLPK diff --git a/_sources/api/mixed-integer/external-solvers/Optimizers_Gurobi.rst.txt b/_sources/api/mixed-integer/external-solvers/Optimizers_Gurobi.rst.txt new file mode 100644 index 000000000..cbd72d1c6 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Optimizers_Gurobi.rst.txt @@ -0,0 +1,7 @@ +Optimizers::Gurobi +================== + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::Gurobi diff --git a/_sources/api/mixed-integer/external-solvers/Optimizers_HiGHS.rst.txt b/_sources/api/mixed-integer/external-solvers/Optimizers_HiGHS.rst.txt new file mode 100644 index 000000000..450932770 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Optimizers_HiGHS.rst.txt @@ -0,0 +1,7 @@ +Optimizers::HiGHS +================= + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::HiGHS diff --git a/_sources/api/mixed-integer/external-solvers/Optimizers_Mosek.rst.txt b/_sources/api/mixed-integer/external-solvers/Optimizers_Mosek.rst.txt new file mode 100644 index 000000000..a9fa22b54 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Optimizers_Mosek.rst.txt @@ -0,0 +1,7 @@ +Optimizers::Mosek +================= + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::Mosek diff --git a/_sources/api/mixed-integer/external-solvers/Osi.rst.txt b/_sources/api/mixed-integer/external-solvers/Osi.rst.txt new file mode 100644 index 000000000..b46006e02 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Osi.rst.txt @@ -0,0 +1,40 @@ +More on 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. + +Related Classes +--------------- + +.. toctree:: + :maxdepth: 1 + :glob: + + Osi/* + +Doxygen +------- + +.. doxygenclass:: idol::Osi + diff --git a/_sources/api/mixed-integer/external-solvers/Osi/OsiCbc.rst.txt b/_sources/api/mixed-integer/external-solvers/Osi/OsiCbc.rst.txt new file mode 100644 index 000000000..294265d15 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Osi/OsiCbc.rst.txt @@ -0,0 +1,7 @@ +OsiCbc +====== + +Doxygen +------- + +.. doxygenclass:: idol::OsiCbc diff --git a/_sources/api/mixed-integer/external-solvers/Osi/OsiClp.rst.txt b/_sources/api/mixed-integer/external-solvers/Osi/OsiClp.rst.txt new file mode 100644 index 000000000..c16077c24 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Osi/OsiClp.rst.txt @@ -0,0 +1,7 @@ +OsiClp +====== + +Doxygen +------- + +.. doxygenclass:: idol::OsiClp diff --git a/_sources/api/mixed-integer/external-solvers/Osi/OsiCplex.rst.txt b/_sources/api/mixed-integer/external-solvers/Osi/OsiCplex.rst.txt new file mode 100644 index 000000000..8e35077b8 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Osi/OsiCplex.rst.txt @@ -0,0 +1,7 @@ +OsiCplex +======== + +Doxygen +------- + +.. doxygenclass:: idol::OsiCplex diff --git a/_sources/api/mixed-integer/external-solvers/Osi/OsiSymphony.rst.txt b/_sources/api/mixed-integer/external-solvers/Osi/OsiSymphony.rst.txt new file mode 100644 index 000000000..7c92f8d35 --- /dev/null +++ b/_sources/api/mixed-integer/external-solvers/Osi/OsiSymphony.rst.txt @@ -0,0 +1,7 @@ +OsiSymphony +=========== + +Doxygen +------- + +.. doxygenclass:: idol::OsiSymphony diff --git a/_sources/api/mixed-integer/index.rst.txt b/_sources/api/mixed-integer/index.rst.txt new file mode 100644 index 000000000..d40ce1a90 --- /dev/null +++ b/_sources/api/mixed-integer/index.rst.txt @@ -0,0 +1,64 @@ +.. _classes: + +Mixed-integer Optimization +========================== + +Modeling +^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + modeling/* + +External Solvers +^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + external-solvers/* + +Branch-and-Bound +^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + branch-and-bound/* + branch-and-bound/variable-selection/index + branch-and-bound/node-selection/index + branch-and-bound/heuristics/index + branch-and-bound/cuts/index + +Branch-and-Price +^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + column-generation/* + column-generation/stabilization/index + +Penalty Alternating Direction Method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + padm/* + +Miscellaneous +^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + misc/* + diff --git a/_sources/api/mixed-integer/misc/CtrType.rst.txt b/_sources/api/mixed-integer/misc/CtrType.rst.txt new file mode 100644 index 000000000..ab331e899 --- /dev/null +++ b/_sources/api/mixed-integer/misc/CtrType.rst.txt @@ -0,0 +1,6 @@ +.. _api_CtrType: + +CtrType +======= + +.. doxygenenum:: idol::CtrType diff --git a/_sources/api/mixed-integer/misc/VarType.rst.txt b/_sources/api/mixed-integer/misc/VarType.rst.txt new file mode 100644 index 000000000..75c7d75e8 --- /dev/null +++ b/_sources/api/mixed-integer/misc/VarType.rst.txt @@ -0,0 +1,6 @@ +.. _api_variables_VarType: + +VarType +======= + +.. doxygenenum:: idol::VarType diff --git a/_sources/api/mixed-integer/misc/tolerances.rst.txt b/_sources/api/mixed-integer/misc/tolerances.rst.txt new file mode 100644 index 000000000..ae604d5a3 --- /dev/null +++ b/_sources/api/mixed-integer/misc/tolerances.rst.txt @@ -0,0 +1,6 @@ +.. _api_tolerances: + +Tolerances +========== + +.. doxygenfile:: numericals.h \ No newline at end of file diff --git a/_sources/api/mixed-integer/modeling/Annotation.rst.txt b/_sources/api/mixed-integer/modeling/Annotation.rst.txt new file mode 100644 index 000000000..3eccbd59b --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Annotation.rst.txt @@ -0,0 +1,30 @@ +Annotation +========== + +Annotations are additional information associated to an optimization object (e.g., a constraint or a variable). +The Annotation class takes one template arguments which is the value type. For instance, we +can create an annotation of type :code:`unsigned int` as follows. + +.. code:: cpp + + Env env; + + const unsigned int default_value = 0; + + Annotation annotation(env, "my_annotation", default_value); + +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 `_. + +Doxygen +------- + +.. doxygenclass:: idol::Annotation diff --git a/_sources/api/mixed-integer/modeling/Ctr.rst.txt b/_sources/api/mixed-integer/modeling/Ctr.rst.txt new file mode 100644 index 000000000..92aacde21 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Ctr.rst.txt @@ -0,0 +1,9 @@ +.. _api_Ctr: + +Ctr +=== + +Doxygen +------- + +.. doxygenclass:: idol::Ctr diff --git a/_sources/api/mixed-integer/modeling/Dim.rst.txt b/_sources/api/mixed-integer/modeling/Dim.rst.txt new file mode 100644 index 000000000..cf6c45f8d --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Dim.rst.txt @@ -0,0 +1,9 @@ +.. _api_Dim: + +Dim +=== + +Doxygen +------- + +.. doxygenclass:: idol::Dim diff --git a/_sources/api/mixed-integer/modeling/Env.rst.txt b/_sources/api/mixed-integer/modeling/Env.rst.txt new file mode 100644 index 000000000..ff6860cee --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Env.rst.txt @@ -0,0 +1,9 @@ +.. _api_Env: + +Env +=== + +Doxygen +------- + +.. doxygenclass:: idol::Env diff --git a/_sources/api/mixed-integer/modeling/Expr.rst.txt b/_sources/api/mixed-integer/modeling/Expr.rst.txt new file mode 100644 index 000000000..1761afc42 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Expr.rst.txt @@ -0,0 +1,9 @@ +.. _api_Expr: + +AffExpr +======= + +Doxygen +------- + +.. doxygenclass:: idol::AffExpr diff --git a/_sources/api/mixed-integer/modeling/LinExpr.rst.txt b/_sources/api/mixed-integer/modeling/LinExpr.rst.txt new file mode 100644 index 000000000..305434c44 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/LinExpr.rst.txt @@ -0,0 +1,27 @@ +.. _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]; + +Doxygen +------- + +.. doxygenclass:: idol::LinExpr diff --git a/_sources/api/mixed-integer/modeling/Model.rst.txt b/_sources/api/mixed-integer/modeling/Model.rst.txt new file mode 100644 index 000000000..f165bfdce --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Model.rst.txt @@ -0,0 +1,9 @@ +.. _api_Model: + +Model +===== + +Doxygen +------- + +.. doxygenclass:: idol::Model diff --git a/_sources/api/mixed-integer/modeling/Point.rst.txt b/_sources/api/mixed-integer/modeling/Point.rst.txt new file mode 100644 index 000000000..9856d9ac3 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Point.rst.txt @@ -0,0 +1,6 @@ +.. _api_Point: + +Point +===== + +.. doxygenclass:: idol::Point diff --git a/_sources/api/mixed-integer/modeling/QCtr.rst.txt b/_sources/api/mixed-integer/modeling/QCtr.rst.txt new file mode 100644 index 000000000..94c6c8de4 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/QCtr.rst.txt @@ -0,0 +1,9 @@ +.. _api_QCtr: + +QCtr +==== + +Doxygen +------- + +.. doxygenclass:: idol::QCtr diff --git a/_sources/api/mixed-integer/modeling/QuadExpr.rst.txt b/_sources/api/mixed-integer/modeling/QuadExpr.rst.txt new file mode 100644 index 000000000..fa0818bb4 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/QuadExpr.rst.txt @@ -0,0 +1,9 @@ +.. _api_QuadExpr: + +QuadExpr +======== + +Doxygen +------- + +.. doxygenclass:: idol::QuadExpr diff --git a/_sources/api/mixed-integer/modeling/TempCtr.rst.txt b/_sources/api/mixed-integer/modeling/TempCtr.rst.txt new file mode 100644 index 000000000..c895ea82e --- /dev/null +++ b/_sources/api/mixed-integer/modeling/TempCtr.rst.txt @@ -0,0 +1,9 @@ +.. _api_TempCtr: + +TempCtr +======= + +Doxygen +------- + +.. doxygenclass:: idol::TempCtr diff --git a/_sources/api/mixed-integer/modeling/TempQCtr.rst.txt b/_sources/api/mixed-integer/modeling/TempQCtr.rst.txt new file mode 100644 index 000000000..4501b7342 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/TempQCtr.rst.txt @@ -0,0 +1,9 @@ +.. _api_TempCtr: + +TempQCtr +======== + +Doxygen +------- + +.. doxygenclass:: idol::TempQCtr diff --git a/_sources/api/mixed-integer/modeling/TempVar.rst.txt b/_sources/api/mixed-integer/modeling/TempVar.rst.txt new file mode 100644 index 000000000..05310beb7 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/TempVar.rst.txt @@ -0,0 +1,9 @@ +.. _api_mip_variables_TempVar: + +TempVar +======= + +Doxygen +------- + +.. doxygenclass:: idol::TempVar diff --git a/_sources/api/mixed-integer/modeling/Var.rst.txt b/_sources/api/mixed-integer/modeling/Var.rst.txt new file mode 100644 index 000000000..e5e0fa7b0 --- /dev/null +++ b/_sources/api/mixed-integer/modeling/Var.rst.txt @@ -0,0 +1,9 @@ +.. _api_Var: + +Var +=== + +Doxygen +------- + +.. doxygenclass:: idol::Var diff --git a/_sources/api/mixed-integer/padm/Optimizers_PADM.rst.txt b/_sources/api/mixed-integer/padm/Optimizers_PADM.rst.txt new file mode 100644 index 000000000..cd9653869 --- /dev/null +++ b/_sources/api/mixed-integer/padm/Optimizers_PADM.rst.txt @@ -0,0 +1,9 @@ +.. _api_Optimizers_PADM: + +Optimizers::PADM +================ + +Doxygen +------- + +.. doxygenclass:: idol::Optimizers::PADM diff --git a/_sources/api/mixed-integer/padm/PADM.rst.txt b/_sources/api/mixed-integer/padm/PADM.rst.txt new file mode 100644 index 000000000..dea027a77 --- /dev/null +++ b/_sources/api/mixed-integer/padm/PADM.rst.txt @@ -0,0 +1,9 @@ +.. _api_PADM: + +PADM +==== + +Doxygen +------- + +.. doxygenclass:: idol::PADM diff --git a/_sources/api/robust/index.rst.txt b/_sources/api/robust/index.rst.txt new file mode 100644 index 000000000..e75f38004 --- /dev/null +++ b/_sources/api/robust/index.rst.txt @@ -0,0 +1,11 @@ +Robust Optimization +=================== + +Modeling +^^^^^^^^ + +.. toctree:: + :maxdepth: 1 + :glob: + + modeling/* diff --git a/_sources/api/robust/modeling/Description.rst.txt b/_sources/api/robust/modeling/Description.rst.txt new file mode 100644 index 000000000..832fd192e --- /dev/null +++ b/_sources/api/robust/modeling/Description.rst.txt @@ -0,0 +1,7 @@ +Robust::Description +=================== + +Doxygen +------- + +.. doxygenclass:: idol::Robust::Description diff --git a/_sources/api/types/index.rst.txt b/_sources/api/types/index.rst.txt new file mode 100644 index 000000000..64cc0da19 --- /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 000000000..823233be2 --- /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 000000000..f04d73b46 --- /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 000000000..8dddf3132 --- /dev/null +++ b/_sources/benchmark/index.rst.txt @@ -0,0 +1,14 @@ +.. _benchmark: + +Benchmark +========= + +.. warning:: + + This page is under construction. + +Branch-and-Price for the Generalized Assignment Problem +------------------------------------------------------- + +.. image:: ../_static/ecdf-gap.png + 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 000000000..6a425388d --- /dev/null +++ b/_sources/developer_guide/build-the-doc.rst.txt @@ -0,0 +1,61 @@ +.. highlight:: sh +.. _dev_build_the_doc: + +Build the Documentation +======================== + +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 000000000..02af0cc17 --- /dev/null +++ b/_sources/developer_guide/index.rst.txt @@ -0,0 +1,33 @@ +.. _dev: + +Developers +========== + +Unit Tests and Integration +-------------------------- + +idol is tested using :code:`Catch2`. Currently, the level of testing is not sufficient, but we are working on it. + +Here is a grid plot of the code coverage: + +.. image:: https://codecov.io/gh/hlefebvr/idol/graphs/tree.svg?token=BWMH5522QP + :align: center + +*Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively.* (`see codecov `_) + +For more information on how to run the tests, please refer to the :ref:`tests` page. + +Building the Documentation +-------------------------- + +The documentation is built using `doxygen `_ and a bunch of other tools. For more information, please refer to the :ref:`dev_build_the_doc` page. + +Related Pages +------------- + +.. 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 000000000..aed0c370f --- /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 000000000..8404fe2df --- /dev/null +++ b/_sources/examples/bilevel-kkt.rst.txt @@ -0,0 +1,37 @@ +.. _example_bilevel_kkt: + +Solving an optimistic LP-LP bilevel problem with 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} \quad & x + 6 y \\ + \text{s.t.} \quad & -x + 5y \le 12.5, \\ + & x \ge 0, \\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \quad & -y \\ + \text{s.t.} \quad & 2 x - y \ge 0, \\ + & -x - y \ge -6, \\ + & -x + 6 y \ge -3, \\ + & x + 3 y \ge 3. + \end{array} + \end{align} + +In this example, we will reformulate the bilevel problem as a single-level problem using the KKT conditions. +The resulting problem will be solved by Gurobi as an NLP. Note that it is also possible to provide valid big-Ms to +reformulate this problem as an MILP. Check out our tutorials to learn more. + +Implementation +-------------- + +.. literalinclude:: ../../examples/bilevel/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 000000000..cdec56c34 --- /dev/null +++ b/_sources/examples/bilevel-mibs.rst.txt @@ -0,0 +1,34 @@ +.. _example_mibs: + +Solving an optimistic MILP-MILP bilevel problem with coin-or/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} \quad & -x + -10 y \\ + \text{s.t.} \quad & x \in \mathbb Z_{\ge 0 },\\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \quad & y \\ + \text{s.t.} \quad & -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_{\ge 0}. + \end{array} + \end{align} + +Implementation +-------------- + +.. literalinclude:: ../../examples/bilevel/mibs.example.cpp + :language: cpp diff --git a/_sources/examples/bilevel-pessimistic.rst.txt b/_sources/examples/bilevel-pessimistic.rst.txt new file mode 100644 index 000000000..840cd2eb1 --- /dev/null +++ b/_sources/examples/bilevel-pessimistic.rst.txt @@ -0,0 +1,67 @@ +.. _example_bilevel_pessimistic: + +Solving a pessimistic bilevel problem using an optimistic reformulation +======================================================================= + +Problem Definition +------------------ + +This example is taken from :cite:`Zeng2020` (example 1) and is an LP-LP bilevel problem. + +.. math:: + + \begin{align} + \min_{x} \quad & -8 x_1 - 6x_2 + \max_{ y\in S(x) } - 25 y_1 - 30 y_2 + 2 y_3 + 16 y_4 \\ + \text{s.t.} \quad & x_1 + x_2 \le 10, \\ + & x_1, x_2 \ge 0, + \end{align} + +where :math:`S(x)` is defined as + +.. math:: + \begin{align} + S(x) := \underset{y}{\text{arg min}} \ & -10 y_1 - 10 y_2 - 10 y_3 - 10 y_4 \\ + \text{s.t.} \ & y_1 + y_2 + y_3 + y_4 \le 10 - x_1 - x_2, \\ + & -y_1 + y_4 \le 0.8 x_1 + 0.8 x_2, \\ + & y_2 + y_4 \le 4 x_2, \\ + & y_1, y_2, y_3, y_4 \ge 0. + \end{align} + + +In this example, we will reformulate this pessimistic bilevel problem as an optimistic one. Then, we will solve it +using its KKT reformulation. The resulting problem will be solved by Gurobi as an MILP. + +.. hint:: + + Here, the optimistic reformulation reads as follows. + + .. math:: + + \begin{align} + \min_{x, \bar y, y} \quad & -8 x_1 - 6x_2 - 25 y_1 - 30 y_2 + 2 y_3 + 16 y_4 \\ + \text{s.t.} \quad & x_1 + x_2 \le 10, \\ + & x_1, x_2 \ge 0, \\ + & \bar y_1 + \bar y_2 + \bar y_3 + \bar y_4 \le 10 - x_1 - x_2, \\ + & -\bar y_1 + \bar y_4 \le 0.8 x_1 + 0.8 x_2, \\ + & \bar y_2 + \bar y_4 \le 4 x_2, \\ + & \bar y_1, \bar y_2, \bar y_3, \bar y_4 \ge 0, \\ + & y \in \tilde S(x, \bar y), + \end{align} + + in which :math:`\tilde S(x)` is defined as + + .. math:: + \begin{align} + S(x) := \underset{y}{\text{arg min}} \quad & 25 y_1 + 30 y_2 - 2 y_3 - 16 y_4 \\ + \text{s.t.} \quad & y_1 + y_2 + y_3 + y_4 \le 10 - x_1 - x_2, \\ + & -y_1 + y_4 \le 0.8 x_1 + 0.8 x_2, \\ + & y_2 + y_4 \le 4 x_2, \\ + & -10 y_1 - 10 y_2 - 10 y_3 - 10 y_4 \le -10 \bar y_1 - 10 \bar y_2 - 10 \bar y_3 - 10 \bar y_4, \\ + & y_1, y_2, y_3, y_4 \ge 0. + \end{align} + +Implementation +-------------- + +.. literalinclude:: ../../examples/bilevel/pessimistic.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 000000000..5150d706d --- /dev/null +++ b/_sources/examples/facility-location-problem.rst.txt @@ -0,0 +1,47 @@ +.. _example_flp: + +Solving a facility location problem with a custom 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} \quad & \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.} \quad & \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*} + +Instance +-------- + +We will use an instance stored in a file called `facility.data.txt`. This file reads + +.. literalinclude:: ../../examples/mixed-integer/facility.data.txt + +On the first line, the number of facilities and the numbers of customers are specified. +Then, for each facility, the opening cost and the capacity are given. +For each customer, the demand is given. +Finally, the cost of serving each customer from each facility is given. + + +Implementation +-------------- + +.. literalinclude:: ../../examples/mixed-integer/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 000000000..b3ff048ee --- /dev/null +++ b/_sources/examples/generalized-assignment-problem-bap.rst.txt @@ -0,0 +1,40 @@ +.. _example_gap_bap: + +Solving a generalized assignment problem by column generation and branch-and-price +================================================================================== + +Problem Definition +------------------ + +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} \quad & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} \quad & \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 a Dantzig-Wolfe decomposition to break down the problem into a master problem and as many subproblems as agents. +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 +-------------- + +.. literalinclude:: ../../examples/mixed-integer/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 000000000..b11799aa0 --- /dev/null +++ b/_sources/examples/generalized-assignment-problem-penalty-bap.rst.txt @@ -0,0 +1,43 @@ +Combining branch-and-price, column generation, and a penalty method for the generalized assignment problem +========================================================================================================== + +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. +Then possibly branch on the integer variables to solve the mixed-integer problem. + +First, we consider the continuous relaxation of the GAP: + +.. math:: + + \begin{align*} + \min_{x} \quad & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} \quad & \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 +------------------------ + +.. literalinclude:: ../../examples/mixed-integer/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 000000000..f9172cc34 --- /dev/null +++ b/_sources/examples/index.rst.txt @@ -0,0 +1,38 @@ +.. _examples: + +Examples +======== + +Mixed-Integer Optimization +-------------------------- + +.. toctree:: + :maxdepth: 1 + + knapsack-problem + facility-location-problem + generalized-assignment-problem-bap + generalized-assignment-problem-penalty-bap + +Bilevel Optimization +-------------------- + + +.. toctree:: + :maxdepth: 1 + + bilevel-kkt + bilevel-mibs + bilevel-pessimistic + + +Robust Optimization +------------------- + + +.. toctree:: + :maxdepth: 1 + + robust-determistic + robust-adr + diff --git a/_sources/examples/knapsack-problem.rst.txt b/_sources/examples/knapsack-problem.rst.txt new file mode 100644 index 000000000..9fae0d1cc --- /dev/null +++ b/_sources/examples/knapsack-problem.rst.txt @@ -0,0 +1,40 @@ +Solving a knapsack problem with HiGHS +===================================== + +Problem Definition +------------------ + +Given a set of :math:`n` items, the goal is to select of subset of items to be put in a knapsack of limited capacity. +Each item has a weight (the amount of space it takes in the knapsack) and a profit (the value of the item). +The goal is to maximize the total profit of the items in the knapsack, while not exceeding the capacity. + +For each item :math:`j\in\{1,\dotsc,n\}`, we let :math:`w_j` denote its weight and :math:`p_j` be its profit. +The capacity of the knapsack is noted :math:`C`. + +The knapsack problem can be formulated as the following binary linear problem: + +.. math:: + + \begin{align*} + \max_{x} \quad & \sum_{j=1}^n p_j x_j \\ + \text{s.t.} \quad & \sum_{j=1}^n w_j x_j \le C, \\ + & x \in \{0,1\}^n. + \end{align*} + +Instance +-------- + +We will use an instance stored in a file called `knapsack.data.txt`. This file reads + +.. literalinclude:: ../../examples/mixed-integer/knapsack.data.txt + +The first line contains the number of items :math:`n`. +Then, the following line contains the profits of each item, :math:`p_j`. +The third line contains the weights of each item, :math:`w_j`. +Finally, the last line contains the capacity of the knapsack, :math:`C`. + +Implementation +-------------- + +.. literalinclude:: ../../examples/mixed-integer/knapsack.example.cpp + :language: cpp diff --git a/_sources/examples/robust-adr.rst.txt b/_sources/examples/robust-adr.rst.txt new file mode 100644 index 000000000..f32290201 --- /dev/null +++ b/_sources/examples/robust-adr.rst.txt @@ -0,0 +1,47 @@ +Using affine decision rules to solve a two-stage facility location problem with facility disruption +=================================================================================================== + +Problem Definition +------------------ + + +We consider a facility location problem with facility disruption. +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 considers random disruptions of the opened facilities making them unusable. + +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 maximum number of facilities that can be disrupted is noted :math:`\Gamma`. + +The two-stage robust facility location problem can be formulated as + +.. math:: + + \begin{align} + \min_{ x\in \{0,1\}^{|V_1|} } \quad & \left\{ \sum_{i\in V_1} f_i x_i + \max_{\xi\in \Xi} \min_{y\in Y(x,\xi)} \quad \sum_{i\in V_1} \sum_{j\in V_2} t_{ij} y_{ij} \right\}, + \end{align} +in which :math:`\Xi := \left\{ \xi\in\{0,1\}^{|V_1|} : e^\top\xi \le \Gamma \right\}` and :math:`Y(x,\xi)` is the feasible set of the second-stage problem defined as + +.. math:: + + \begin{align} + & \sum_{j\in V_2} d_j y_{ij} \le q_i, && i\in V_1,\\ + & \sum_{i\in V_1} y_{ij} \ge 1, && j\in V_2, \\ + & y_{ij} \le x_i && i\in V_1, j\in V_2, \\ + & y_{ij} \le 1 - \xi_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} + +In this example, we will approximate the robust problem using affine decision rules and solve it using Gurobi. +To this end, we will restrict the adjustable decisions to be affine functions of the uncertain parameters, i.e., :math:`y(\xi) = \bar y + Y\xi`. + +Implementation +-------------- + +.. literalinclude:: ../../examples/robust/adr-facility-location.example.cpp + :language: cpp diff --git a/_sources/examples/robust-determistic.rst.txt b/_sources/examples/robust-determistic.rst.txt new file mode 100644 index 000000000..68745f683 --- /dev/null +++ b/_sources/examples/robust-determistic.rst.txt @@ -0,0 +1,65 @@ +Solving a robust facility location problem by its deterministic equivalent +=========================================================================== + +Problem Definition +------------------ + +We consider a facility location problem with uncertain demand. +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 + 0.2 \xi_j)` +with :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\}. + +The goal is to minimize the total cost of opening facilities and serving customers, considering the worst-case demand scenario. + +The robust version can be formulated as + +.. math:: + + \begin{align*} + \min_{x,y} \quad & \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.} \quad & \sum_{j\in V_2} d_j(\xi) y_{ij} \le q_i, && i\in V_1, \quad \text{for all }\xi\in\Xi, \\ + & \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*} + +In this example, we will reformulate this robust facility location problem as a deterministic one. Then, we will solve it using Gurobi. + +.. hint:: + + Here, the deterministic reformulation reads as follows. + + .. math:: + + \begin{align*} + \min_{x,y,u.v} \quad & \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.} \quad & \sum_{j\in V_2} d_j y_{ij} + \Gamma u + \sum_{j\in V_2} v_j \le q_i, && i\in V_1, \\ + & u + v_j \ge 0.2 d_j y_j, && j\in V_2, \\ + & \sum_{i\in V_1} y_{ij} = 1, && j\in V_2, \\ + & u, v_j \ge 0, && 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 +-------------- + +.. literalinclude:: ../../examples/robust/robust-facility-location.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 000000000..35c809909 --- /dev/null +++ b/_sources/examples/two-stage-robust-facility-location-problem.rst.txt @@ -0,0 +1,49 @@ +.. _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 +-------------- + +.. literalinclude:: ../../examples/robust/robust_ccg.example.cpp + :language: cpp diff --git a/_sources/faq/gap.rst.txt b/_sources/faq/gap.rst.txt new file mode 100644 index 000000000..ee0bdd421 --- /dev/null +++ b/_sources/faq/gap.rst.txt @@ -0,0 +1,24 @@ +.. _how_gap: + +How is the Optimality Gap Computed? +=================================== + +To assess global optimality, we use two different optimality gaps. + +The relative optimality gap is computed as + +.. math:: + + \begin{equation} + \gamma_{\text{rel}} := \frac{ UB - LB }{ 10^{-10} + |UB| }. + \end{equation} + +The absolute optimality gap is computed as + +.. math:: + + \begin{equation} + \gamma_{\text{abs}} := UB - LB. + \end{equation} + +See also :ref:`Tolerances `. \ No newline at end of file diff --git a/_sources/faq/index.rst.txt b/_sources/faq/index.rst.txt new file mode 100644 index 000000000..2c92ff373 --- /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 000000000..58bd45b1b --- /dev/null +++ b/_sources/faq/mosek-and-eigen.rst.txt @@ -0,0 +1,83 @@ +.. _mosek_and_socp: + +Why is Eigen Necessary to Solve 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 000000000..7d6f219d4 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,161 @@ +.. title:: idol, a C++ Framework for Optimization + +.. raw:: html + +

    + +What is idol? +------------- + +idol is a C++ framework for **mathematical optimization** and complex decision-making problems. +It is designed to help you build new algorithms for solving complex optimization problems. +The main philosophy behind idol is interoperability and ease of use. +Hence, any algorithm can be seamlessly combined with any other algorithm to create a new one. +For instance, you can combine a Branch-and-Bound algorithm with a Column Generation algorithm to create a Branch-and-Price algorithm. + +.. code:: + + const auto branch_and_price = branch_and_bound + column_generation; + model.use(branch_and_price); + model.optimize(); + +idol offers a variety of tools to tackle many different kinds of optimization problems: + +.. raw:: html + + + +Getting Started with idol +------------------------- + +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: it automatically downloads the latest version of idol, and installs it locally in a sub-folder of your CMake project. +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, 0., "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? +--------------------- + +idol is not a MIP solver in itself. In fact, it typically needs to call external +solvers as a sub-routine of more complex algorithms such as Branch-and-Price. + +The idea is to work hand in hand with existing 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. + +Still, idol can be used to solve your favourite MILP, MIQP, or MIQCQP 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 gives access to Cplex, Symphony, or any Osi compatible solver), +* `coin-or/MibS `_. + +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 000000000..6f9c065af --- /dev/null +++ b/_sources/installation/global-installation/index.rst.txt @@ -0,0 +1,102 @@ +.. _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 :code:`/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 :code:`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 the :ref:`complete list of options `. + +.. 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 in 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 + +And Then? +--------- + +That's it! idol is now installed on your computer. You can now use it in your C++ projects. To do so, you will need to +link your project against the idol library. See the related pages for more information. + +Related Pages +----------------- + +.. 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 000000000..fffca91f4 --- /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 000000000..619b8b2e8 --- /dev/null +++ b/_sources/installation/index.rst.txt @@ -0,0 +1,41 @@ +.. _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: a local installation (easy to use) and a global installation (for more advanced users). + +Local Installation +------------------ + +:ref:`A local installation ` lets CMake automatically download and install idol in a sub-folder of your CMake project. This is the easiest way to get started. + +Global Installation +------------------- + +:ref:`A global installation ` installs idol globally on your computer (e.g., in :code:`/usr/lib`). + +.. toctree:: + :hidden: + :maxdepth: 1 + :glob: + + local_installation + global-installation/index + cmake_options + +Options (External Solvers, etc.) +-------------------------------- + +No matter which installation method you choose, you can customize the installation by setting a set of parameters accordingly. +This is particularly useful if you want to install idol with some external solver such as Gurobi. +Please refer to the :ref:`complete list of options ` for more information. + +.. toctree:: + :hidden: + :maxdepth: 1 + :glob: + + options diff --git a/_sources/installation/local_installation.rst.txt b/_sources/installation/local_installation.rst.txt new file mode 100644 index 000000000..d560c0c67 --- /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 want to use + 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 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 the :ref:`complete list of options `. + +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, 0., "x"); + + // ... + + return 0; + } + diff --git a/_sources/installation/options.rst.txt b/_sources/installation/options.rst.txt new file mode 100644 index 000000000..fa5719bbf --- /dev/null +++ b/_sources/installation/options.rst.txt @@ -0,0 +1,232 @@ +.. _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=~/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) + +coin-or (Open-Source Solvers) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +idol can be linked with some of the coin-or libraries. +Hereafter, we give a list of such libraries. For all the :code:`USE_*` options, you will need to define the environment +variable :code:`COIN_OR_HOME` or to set the CMake option :code:`COIN_OR_DIR`. It must point to the :code:`dist` directory +of coin-or. + +.. admonition:: Example + + The following will prepare CMake for linking against coin-or libraries. + + .. code-block:: + + cmake -DCOIN_OR_DIR=/path/to/coin_or/dist .. + + If you are doing a *local installation*, then the same can be achieved as follows. + + .. code-block:: + + set(COIN_OR_DIR /path/to/coin_or/dist) + +We now give the list of options which can be used in relation with coin-or libraries. + +- :code:`USE_OSI=YES`: use the Osi solver. +- :code:`USE_SYMPHONY=YES`: use the Symphony solver (can only be used through Osi). +- :code:`USE_CBC=YES`: use the Cbc solver (can only be used through Osi). +- :code:`USE_CLP=YES`: use the Clp solver (can only be used through Osi). +- :code:`USE_CPLEX=YES`: use the Cplex solver (can only be used through Osi). +- :code:`USE_MIBS=YES`: use the MibS solver (will automatically search for Alps, Bcps, Blis, and Cgl). + +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 000000000..d193b70b6 --- /dev/null +++ b/_sources/references.rst.txt @@ -0,0 +1,7 @@ +References +========== + +This page contains references to the literature used in the documentation. + +.. bibliography:: + :all: diff --git a/_sources/tutorials/bilevel-optimization/files.rst.txt b/_sources/tutorials/bilevel-optimization/files.rst.txt new file mode 100644 index 000000000..145d02f04 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/files.rst.txt @@ -0,0 +1,57 @@ +Reading and Writing Bilevel Instances (BOBILib) +=============================================== + +`BOBILib `_ is a library of instances for bilevel optimization problems. +In this tutorial, we will show how to read and write bilevel instances in the format which is used by BOBILib. +The advantage is twofold. First, we can easily access a large number of bilevel instances. +Second, we can easily share our bilevel instances with others. + +Let's get started! + +.. contents:: Table of Contents + :local: + :depth: 2 + +The Format +---------- + +The instances in BOBILib are stored in two files: + +- An :code:`.mps` or :code:`.lp` file containing the high-point relaxation of the bilevel problem, +- An :code:`.aux` file containing the description of the lower-level problem. + +For more details, we refer to the report :cite:`BOBILib`. + +Implementation +-------------- + +Reading Instances +^^^^^^^^^^^^^^^^ + +Reading a BOBILib instance is straightforward. We can use the :code:`Bilevel::read_from_file` function. +However, it requires an underlying solver to parse the :code:`.mps` file. Here, we will use Gurobi. + +.. code:: + + Env env; + auto [model, description] = + Bilevel::read_from_file(env, aux_filename); + +The function returns a pair made by the high-point relaxation model and the description of the lower-level problem. + +Writing Instances +^^^^^^^^^^^^^^^^^ + +Assume that you have a bilevel model :code:`model` and a description :code:`description` for the lower-level problem. +Writing this problem to file can be done by a single call to :code:`Bilevel::write_to_file`. +Here, no external solver is necessary. + +.. code:: + + /* + the following creates two files: + - instance-filename.mps + - instance-filename.aux + */ + Bilevel::write_to_file(model, description, "instance-filename"); + diff --git a/_sources/tutorials/bilevel-optimization/index.rst.txt b/_sources/tutorials/bilevel-optimization/index.rst.txt new file mode 100644 index 000000000..98b1640ea --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/index.rst.txt @@ -0,0 +1,72 @@ +.. _bilevel: + +Bilevel Optimization +==================== + +Bilevel optimization is a field of mathematical optimization in which two optimization problems are intertwined: the +upper-level and the lower-level problem. The upper-level problem minimizes a given objective function taking into account +the solution to the lower-level problem, which is parameterized by the upper-level’s decision. Such problems have many +applications in, e.g., economics where it is used to model non-cooperative games. + +A classic model for a bilevel problem is as follows. + +.. math:: + :label: bilevel + + \begin{align} + \text{''}\min_{x}\text{''} \quad & F(x,y) \\ + \text{s.t.} \quad & G(x,y) \ge 0, \\ + & x\in X, \\ + & y\in S(x), + \end{align} + +in which :math:`S(x)` denotes the solution set of the lower-level problem, which is parameterized by the upper-level decision +:math:`x`. The lower-level problem is defined as + +.. math:: + + \begin{align} + \min_{y} \quad & f(x,y) \\ + \text{s.t.} \quad & g(x,y) \ge 0, \\ + & y\in Y. + \end{align} + +Note that the quotes around the :math:`\min` operator in :math:numref:`bilevel` is here to highlight that the problem is +ill-defined in its current form. Indeed, in case multiple solutions to the lower-level problem exist, the upper-level problem +has to somehow "choose" one of them. To circumvent this, we typically consider the optimistic setting, where the lower-level +is assumed to pick the solution in favor of the upper-level problem, in order to break ties. + +Optimistic bilevel problems can be modeled as: + +.. math:: + + \begin{align} + \min_{x,y} \quad & F(x,y) \\ + \text{s.t.} \quad & G(x,y) \ge 0, \\ + & x\in X, \\ + & y\in S(x), + \end{align} + +Note that there exists other notions such as pessimistic bilevel problems. There, the lower-level problem is assumed to pick +the worst solution for the upper-level problem. This can be modeled as follows. + +.. math:: + + \begin{align} + \min_{x} \quad & \max_{ y\in S(x) } \ F(x,y) \\ + \text{s.t.} \quad & G(x,\bar y) \ge 0, \quad \text{for all } \bar y\in S(x), \\ + & x\in X, \\ + & S(x) \neq \emptyset. + \end{align} + +Pessimisitc bilevel problems are less studied in the literature. + +.. toctree:: + :maxdepth: 1 + :glob: + + modeling + files + kkt + mibs + pessimistic diff --git a/_sources/tutorials/bilevel-optimization/kkt.rst.txt b/_sources/tutorials/bilevel-optimization/kkt.rst.txt new file mode 100644 index 000000000..c20385166 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/kkt.rst.txt @@ -0,0 +1,198 @@ +.. _tutorial_bilevel_kkt: + +Deriving Single-level Reformulations +==================================== + +A standard technique for solving LP-LP bilevel problems is to reformulate the problem as a single-level problem. +This can be done in several ways. In this tutorial, we will show how we can use idol to derive the +Karush-Kuhn-Tucker (KKT) reformulation and the strong-duality reformulation of a bilevel problem. + +Let's get started! + +.. contents:: Table of Contents + :local: + :depth: 2 + +Problem Formulation +------------------- + +Consider the following bilevel optimization problem: + +.. math:: + + \begin{align} + \min_{x,y} \quad & c^\top x + d^\top y \\ + \text{s.t.} \quad & Ax + By \ge a, \\ + & y \in \text{arg min} \{ f^\top y : Dy \ge b - Cx \}. + \end{align} + +In order to solve problem :math:numref:`bilevel` with a standard optimization solver, we need to reformulate it as a single-level optimization problem. +This can be automatically done by idol using the KKT reformulation or the strong-duality reformulation. + +For this tutorial, we will work on the following code snippet: + +.. code:: + + Env env; + + Model high_point_relaxation(env); + + auto x = high_point_relaxation.add_var(0, Inf, Continuous, 0., "x"); + auto y = high_point_relaxation.add_var(-Inf, Inf, Continuous, 0., "y"); + + high_point_relaxation.set_obj_expr(x + 6 * y); + auto lower_c1 = high_point_relaxation.add_ctr(2 * x - y >= 0); + auto lower_c2 = high_point_relaxation.add_ctr(-x - y >= -6); + auto lower_c3 = high_point_relaxation.add_ctr(-x + 6 * y >= -3); + auto lower_c4 = high_point_relaxation.add_ctr(x + 3 * y >= 3); + high_point_relaxation.add_ctr(-x + 5 * y <= 12.5); + + Bilevel::Description description(env); + description.set_lower_level_obj(-y); + description.make_lower_level(y); + description.make_lower_level(lower_c1); + description.make_lower_level(lower_c2); + description.make_lower_level(lower_c3); + description.make_lower_level(lower_c4); + +Here, a bilevel problem is modeled with idol. The high point relaxation is stored in :code:`high_point_relaxation`, while +the lower-level problem is described using the :code:`Bilevel::Description` object :code:`description`. + +The KKT Reformulation +--------------------- + +The KKT reformulation of a bilevel problem is obtained by replacing the lower-level problem with its KKT optimality conditions. +The KKT reformulation of the bilevel problem is as follows: + +.. math:: + :label: kkt + + \begin{align} + \min_{x,y,\lambda} \quad & c^\top x + d^\top y \\ + \text{s.t.} \quad & Ax + By \ge a, \\ + & Dy \ge b - Cx, \\ + & D^\top \lambda = f, \; \lambda \ge 0, \\ + & \lambda^\top (b - Cx - Dy) = 0. + \end{align} + +Getting the Reformulated Model +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +With idol, it is possible to generate the KKT reformulation of the bilevel problem using the :code:`Bilevel::KKT::make_model` function. + +For instance, one could do the following. + +.. code:: + + auto single_level_model = Bilevel::KKT::make_model( + high_point_relaxation, description + ); + +Then, one can solve the single-level model using a standard optimization solver. Here, we use Gurobi. + +.. code:: + + single_level.use(Gurobi()); + single_level.optimize(); + +Note that the KKT reformulation :math:numref:`kkt`, and thus :code:`single_level`, is a nonlinear problem because of the complementarity constraint. +Hence, we use the nonlinear solving features of Gurobi here. + +A common approach to handle the complementarity constraints is to linearize them by introducing binary variables. +This can also be done in idol. To do this, we will need to provide some valid bounds on the dual variables. +This is done by annotating the lower-level problem constraints. The constraints associated with the variables +bounds can also have their big-M values by annotating the corresponding variable. + +In the following code, we will simply use a default value for the big-M values of :math:`10^{4}`. + +.. code:: + + Annotation big_M(env, "big_M", 1e4); + auto single_level_model = Bilevel::KKT::make_model( + high_point_relaxation, description, big_M + ); + +The returned model is now a mixed-integer linear program that can be solved using a standard optimization solver. + +Now, say that constraint :code:`lower_c1` is known to have a dual variable bounded by, say, 10. One could do the following. + +.. code:: + + Annotation big_M(env, "big_M", 1e4); + lower_c1.set(big_M, 10); + + auto single_level_model = Bilevel::KKT::make_model( + high_point_relaxation, description, big_M + ); + +Solving the KKT Reformulation directly +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In the previous section, we showed how to generate the KKT reformulation of a bilevel problem. +However, idol also provides a function to solve the KKT reformulation directly. +This can be done by using the :code:`Bilevel::KKT` optimizer. + +Here is a code snippet that shows how to solve the KKT reformulation directly. + +.. code:: + + high_point_relaxation.use(Bilevel::KKT(description) + Gurobi()); + +Note that big-M values can also be provided to the :code:`Bilevel::KKT` optimizer. Here is an example. + +.. code:: + + high_point_relaxation.use( + Bilevel::KKT(description) + .with_single_level_optimizer(Gurobi()) + .with_big_M(big_M) + ); + +Calling the :code:`optimize` method on the model will solve the KKT reformulation of the bilevel problem. + +The Strong-duality Reformulation +-------------------------------- + +Another single-level reformulation is the so-called strong-duality reformulation which reads + +.. math:: + + \begin{align} + \min_{x,y,\lambda} \quad & c^\top x + d^\top y \\ + \text{s.t.} \quad & Ax + By \ge a, \\ + & Dy \ge b - Cx, \\ + & D^\top \lambda = f, \; \lambda \ge 0, \\ + & f^\top y \le (b - Cx)^\top \lambda. + \end{align} + + +Getting the Reformulated Model +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The strong-duality reformulation can be obtained using the :code:`Bilevel::StrongDuality::make_model` function. +This function works similarly to the :code:`Bilevel::KKT::make_model` function. +Here is an example. + +.. code:: + + auto single_level_model = Bilevel::StrongDuality::make_model( + high_point_relaxation, description + ); + single_level_model.use(Gurobi()); + single_level_model.optimize(); + +Note that here, the strong-duality reformulation is a nonlinear problem because of the dual objective function. +Hence, we use the nonlinear solving features of Gurobi here. + +Solving the Strong-duality Reformulation directly +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Similarly to the KKT reformulation, idol also provides a function to solve the strong-duality reformulation directly. +This can be done by using the :code:`Bilevel::StrongDuality` optimizer as follows. + +.. code:: + + high_point_relaxation.use( + Bilevel::StrongDuality(description) + Gurobi() + ); + high_point_relaxation.optimize(); diff --git a/_sources/tutorials/bilevel-optimization/mibs.rst.txt b/_sources/tutorials/bilevel-optimization/mibs.rst.txt new file mode 100644 index 000000000..d870ac159 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/mibs.rst.txt @@ -0,0 +1,66 @@ +Solving Mixed-Integer Bilevel Problems with coin-or/MibS +======================================================== + +MibS is an optimization solver for mixed-integer bilevel problems; for more information, please refer to the `MibS website `_. +Idol seamlessly interfaces with MibS to solve bilevel problems. + +We will see that solving bilevel problems with MibS is very similar to solving any optimization problem in idol. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Setup +----- + +We will assume that you have your bilevel problem already modeled 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:Description` 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 `. + +Using MibS +---------- + +To solve your bilevel problem, you can use the :code:`MibS` optimizer factory 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 optimizer factory is attached to the high-point relaxation model and that the bilevel description +is passed as an argument. + +The rest of the code is the same as with any other solver. + +.. hint:: + + To use MibS, you need to have the MibS library installed on your system and idol linked against it. + You can download MibS from `here `_. + + Then, idol should be compiled with the options :code:`USE_MIBS=YES`, :code:`USE_CLP=YES`. + +Using CPLEX for Feasibility Check +--------------------------------- + +Note that it is also possible to use MibS in combination with CPLEX for the feasibility check. This can be done as follows: + +.. code:: + + const auto mibs = Bilevel::MibS(description) + .with_cplex_for_feasibility(true) + .with_time_limit(3600) + .with_logs(true); + + high_point_relaxation.use(mibs); + + high_point_relaxation.optimize(); + + std::cout << save_primal(high_point_relaxation) << std::endl; + +Off course, MibS must have been installed with CPLEX for this to work. diff --git a/_sources/tutorials/bilevel-optimization/modeling.rst.txt b/_sources/tutorials/bilevel-optimization/modeling.rst.txt new file mode 100644 index 000000000..f96432c08 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/modeling.rst.txt @@ -0,0 +1,136 @@ +.. _tutorial_optimistic_bilevel: + +Modeling a Bilevel Problem +========================== + +In this tutorial, we will see how to model a 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} \quad & -x + -10 y \\ + \text{s.t.} \quad & x \in \mathbb Z_{\ge 0} \\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \quad & y \\ + \text{s.t.} \quad & -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_{\ge 0}. + \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, + +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 `. + +In our example, the HPR reads + +.. 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} + +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, 0, "x"); + auto y = high_point_relaxation.add_var(0, Inf, Integer, 0, "y"); + + high_point_relaxation.set_obj_expr(-x - 10 * y); + auto lower_c1 = high_point_relaxation.add_ctr(-25*x + 20*y <= 30); + auto lower_c2 = high_point_relaxation.add_ctr(x + 2 * y <= 10); + auto lower_c3 = high_point_relaxation.add_ctr(2 * x - y <= 15); + auto lower_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 it. +This is done by creating an object of type :code:`Bilevel::Description` and calling the methods :code:`make_lower_level`. + +.. code:: + + Bilevel::Description description(env); + description.make_lower_level(y); + description.make_lower_level(lower_c1); + description.make_lower_level(lower_c2); + description.make_lower_level(lower_c3); + description.make_lower_level(lower_c4); + +Note that this does nothing more but to create a new :code:`Annotation` to indicate variables and constraints that are part of the lower-level problem. +These annotations are used by the bilevel solvers to identify the lower-level problem. +In particular, all variables and constraints that are not annotated as lower-level variables or constraints are considered as upper-level variables or constraints, respectively. +Upper-level variables and constraints have an annotation which is set to :code:`MasterId` by default. + +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 lower_level(env, MasterId, "lower_level"); + + y.set(lower_level, 0); + lower_c1.set(lower_level, 0); + lower_c2.set(lower_level, 0); + lower_c3.set(lower_level, 0); + lower_c4.set(lower_level, 0); + + + Bilevel::Description description(lower_level); + + +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_lower_level_obj` on the object of type :code:`Bilevel::Description`. +A :code:`QuadExpr` object is passed as argument to this method. + +.. code:: + + description.set_lower_level_obj(y); + +Complete Example +---------------- + +A complete example is available :ref:`here ` and uses the MibS solver. diff --git a/_sources/tutorials/bilevel-optimization/pessimistic.rst.txt b/_sources/tutorials/bilevel-optimization/pessimistic.rst.txt new file mode 100644 index 000000000..f1fd6cbf6 --- /dev/null +++ b/_sources/tutorials/bilevel-optimization/pessimistic.rst.txt @@ -0,0 +1,104 @@ +.. _tutorial_pessimistic_bilevel: + +From Pessimistic Bilevel Optimization to Optimistic Bilevel Optimization +======================================================================== + +Most of the litereature on bilevel optimization focuses on the optimistic setting, where the lower-level problem is assumed to +pick the solution in favor of the upper-level problem. +However, there exists other notions such as pessimistic bilevel problems. + +A pessimistic problem reads as follows: + +.. math:: + :label: pessimistic + + \begin{align} + \min_{x} \quad & \max_{ y\in S(x) } \ F(x,y) \\ + \text{s.t.} \quad & x\in X, \\ + & S(x) \neq \emptyset, + \end{align} + +with :math:`S(x)` the solution set of + +.. math:: + + \begin{align} + \min_{y} \quad & f(x,y) \\ + \text{s.t.} \quad & g(x,y) \ge 0, \\ + & y\in Y. + \end{align} + + +In this tutorial, we will show how a pessimistic bilevel problem can be automatically transformed into an optimistic bilevel problem. +This transformation is due to :cite:`Zeng2020`. + +.. hint:: + + Here, :math:numref:`pessimistic` does not have coupling constraints for simplicity. + However, the transformation can be extended to bilevel problems with coupling constraints. + +.. contents:: Table of Contents + :local: + :depth: 2 + +The Equivalent Optimistic Problem +--------------------------------- + +In :cite:`Zeng2020`, the authors show that the pessimistic bilevel problem :math:numref:`pessimistic` is equivalent to the following optimistic bilevel problem: + +.. math:: + :label: optimistic + + \begin{align} + \min_{x,\bar y} \quad & F(x,y) \\ + \text{s.t.} \quad & x\in X, \ \bar y\in Y, \\ + & g(x,\bar y) \ge 0, \\ + & y\in \tilde S(x, \bar y), + \end{align} + +in which :math:`\tilde S(x, \bar y)` is the solution set of + +.. math:: + + \begin{align} + \min_y \quad & -F(x,y) \\ + \text{s.t.} \quad & g(x,y) \ge 0, \\ + & y\in Y, \\ + & f(x,y) \le f(x, \bar y). + \end{align} + +Note that :math:numref:`optimistic` is an optimistic bilevel problem. + +Implementation +-------------- + +Deriving the equivalent optimistic bilevel problem from a pessimistic bilevel problem can be done easily in idol. + +To this end, let us assume that you have your bilevel problem already modeled in idol. In particular, let us 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:Description` 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 derive the equivalent optimistic bilevel problem as follows: + +.. code:: + + auto [opt_model, opt_description] = + Bilevel::PessimisticAsOptimistic::make_model( + high_point_relaxation, + description + ); + +Here, :code:`opt_model` is the high-point relaxation of :math:numref:`optimistic` and :code:`opt_description` is the bilevel description of :math:numref:`optimistic`. + +The rest of the code is the same as with any other solver. For instance, you can solve the optimistic bilevel problem with MibS as follows: + +.. code:: + + opt_model.use(Bilevel::MibS(opt_description)); + + opt_model.optimize(); + + std::cout << save_primal(opt_model) << std::endl; diff --git a/_sources/tutorials/index.rst.txt b/_sources/tutorials/index.rst.txt new file mode 100644 index 000000000..9ac7e0374 --- /dev/null +++ b/_sources/tutorials/index.rst.txt @@ -0,0 +1,38 @@ +.. _tutorials: + +Tutorials +========= + +On this page, you will find a collection of tutorials that demonstrate how to use idol to solve various optimization problems. +The tutorials are organized by topic. + +Mixed-Integer Optimization +-------------------------- + +.. 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 000000000..c05735358 --- /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 000000000..aec7ac3de --- /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 000000000..e0c4c8531 --- /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 000000000..2a76e7d3a --- /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 000000000..1e28154f6 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/branch-and-bound/index.rst.txt @@ -0,0 +1,12 @@ +Branch-and-Bound Algorithm +========================== + +.. warning:: + + This is a work in progress. Thank you for your understanding. + +.. toctree:: + :maxdepth: 1 + :glob: + + write-branch-and-bound 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 000000000..8bca15398 --- /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 000000000..c031523be --- /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 000000000..3c5d38b7e --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.rst.txt @@ -0,0 +1,217 @@ +.. _tutorial_column_generation: + +Solving A Dantzig-Wolfe Reformulation +===================================== + +In this tutorial, we will see how to implement a column generation algorithm to solve a continuous relaxation of the Generalized Assignment Problem (GAP). +This relaxation is obtained by relaxing the Dantzig-Wolfe reformulation of the GAP. + +.. hint:: + + This tutorial regards the `advanced topic` of Column Generation and Dantzig-Wolfe decomposition. + Rudimentary notions in the following subjects are recommended: + + - `Column Generation algorithms `_ + - `Dantzig-Wolfe decomposition `_ + - `Generalized Assignment Problem `_. + +A complete example which includes branching is available :ref:`here `. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Problem Definition +------------------ + +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`. + +The Natural Formulation +^^^^^^^^^^^^^^^^^^^^^^^ + +We model the GAP with the following binary linear program: + +.. math:: + + \begin{align*} + \min_{x} \quad & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} \quad & \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*} + +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`. + +The 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 r_{ij}x_{ij} \le C_i \quad i=1,...,m \right\}, + +in which :math:`E` denotes a list for their indices. + +The Dantzig-Wolfe reformulation of GAP reads + +.. math:: + :label: eq-dantzig-wolfe-reformulation + + \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 \quad j=1,...,n, \\ + & \sum_{e\in E} \lambda_e = 1, \\ + & \lambda_e \in \{ 0, 1 \} & \text{for all } e\in E. + +Though this model contains an exponential number of variables, it can be solved efficiently using +Column Generation and Branch-and-price. In such a case, the pricing problem is a Knapsack Problem. + +In this tutorial, we focus on the continuous relaxation of :math:numref:`eq-dantzig-wolfe-reformulation`. + +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). + +We will start by modeling the problem in its natural form and then indicate which constraints should be moved to the pricing problem. + +The Natural Formulation +^^^^^^^^^^^^^^^^^^^^^^^ + +Before we start, we will use a GAP instance stored in a file. This file reads as follows. + +.. literalinclude:: ../../../../examples/mixed-integer/assignment-bap.data.txt + +To read an instance of the GAP, we need to include the header file located in :code:`idol/mixed-integer/problems/generalized-assignment-problem/GAP_Instance.h`. + +Then, we can use the :code:`Problems::GAP::read_instance` function to read the instance file. + +.. code-block:: cpp + + const auto instance = + Problems::GAP::read_instance("assignment-bap.data.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 a template argument which is the value type of the annotation. Here, the Dantzig-Wolfe +decomposition expects an annotation with a value of type :code:`unsigned int` and which corresponds +to the sub-problem index to which the constraint will be moved to. + +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 is given to the annotation: here, "decomposition". +Finally, a default value is given and is set to :code:`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) { + auto 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 Column Generation Algorithm +---------------------------------------- + +Now that the desired decomposition has been specified, we can set the desired optimizer to solve our model. +Here, we want to solve our the continuous relaxation of the Dantzig-Wolfe reformulation using column generation. + +To begin with, we need to give some instructions 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 the 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); + +We can now tell idol to use this algorithm for solving our model by using the :code:`Model::use` method. + +.. code:: cpp + + model.use(column_generation); + +Solving +------- + +As usual, one can simply call the :code:`Model::optimize` method to solve the problem. + +.. code:: cpp + + model.optimize(); + + +That's it! The problem is being solved by column generation, and possibly branching on fractional variables. + +The rest remains unchanged and one can retrieve the solution +through the usual methods such as :code:`Model::get_status` and :code:`Model::get_var_primal`. 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 000000000..0c900febc --- /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 000000000..752cf2b03 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/index.rst.txt @@ -0,0 +1,31 @@ +.. _tutorial_DantzigWolfe: + +Column Generation and Branch-and-Price Algorithm +================================================ + +**Column generation** is an algorithm used to solve large scale optimization problems which involve a large number of variables. +Instead of solving the problem in its entirety, column generation begins with a restricted version of the problem containing only a subset of variables. It then iteratively introduces new variables (or columns) that have the potential to improve the solution, based on the problem's structure and constraints. + +In practice, column generation is particularly effective for problems with block-angular structures, such as cutting stock, vehicle routing, and generalized assignment problems. The method splits the problem into a master problem, which handles the selection of variables, and a pricing problem, which identifies the most promising variables to add to the master problem. These subproblems are solved iteratively until no further improvements are possible. + +.. figure:: https://upload.wikimedia.org/wikipedia/commons/e/ec/DW_Block_Angular_Matrix.jpg + :align: center + :target: https://en.wikipedia.org/wiki/Dantzig%E2%80%93Wolfe_decomposition + + Block-angular matrix structure particularly suited for column generation. + +The **Branch-and-Price** algorithm extends column generation to integer programming. While column generation operates on the linear relaxation of the problem, Branch-and-Price integrates it into a Branch-and-Bound framework to handle integer constraints. This combination allows efficient exploration of the solution space while exploiting the power of decomposition techniques. Each node of the Branch-and-Bound tree employs column generation to solve the relaxed problem, providing tight bounds for pruning and accelerating convergence. + +In this series of tutorials, we will see how column generation and, more precisely, **Dantzig-Wolfe decomposition** can be implemented in idol. + +.. hint:: + + For more details on column generation, we refer to the book :cite:`uchoa2024optimizing`. + +.. toctree:: + :maxdepth: 1 + :glob: + + dantzig-wolfe + writing-branch-and-price + strong-branching 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 000000000..d0fbaf722 --- /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/strong-branching.rst.txt b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst.txt new file mode 100644 index 000000000..76cfacbe7 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.rst.txt @@ -0,0 +1,198 @@ +Using Strong Branching +====================== + +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. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Formal Definition +----------------- + +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 000000000..8d6500ff4 --- /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 000000000..4c8fe1392 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.rst.txt @@ -0,0 +1,81 @@ +Writing A Branch-and-Price Algorithm +==================================== + +This tutorial is a follow-up to the `Dantzig-Wolfe decomposition tutorial `_. +In this tutorial, we will see how to implement a Branch-and-Price algorithm in idol to, not only solve +the continuous relaxation of the Generalized Assignment Problem (GAP), but also handle the integrality constraints. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Prerequisites +------------- + +We will assume that you have already defined your model as well as the column generation optimizer factory. +If you haven't done so, we recommend you to read the `Dantzig-Wolfe decomposition tutorial `_. + +Hence, you should already have something like this: + +.. code:: + + + const auto sub_problem_specifications = DantzigWolfe::SubProblem() + .add_optimizer(Gurobi()); + + const auto column_generation = DantzigWolfeDecomposition(decomposition) + .with_master_optimizer(Gurobi::ContinuousRelaxation()) + .with_default_sub_problem_spec(sub_problem_specifications); + +Moreover, we will assume that your model is called :code:`model` and that the decomposition annotation is called :code:`decomposition`. + +Creating the Branch-and-Price Algorithm +--------------------------------------- + +Our remaining task is to embed our column generation routine inside of a Branch-and-Bound algorithm. + +Hence, we create a branch-and-bound algorithm as follows. + +.. code:: cpp + + const auto branch_and_bound = BranchAndBound() + + /* 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) + + ); + +Here, variables are selected for branching using the most-infeasible rule, and nodes are selected using the best-bound rule. +We also set a time limit of one hour. + +The column generation algorithm can easily be combined with the branch-and-bound algorithm using the :code:`BranchAndBound::with_node_optimizer` +method, or by simply adding the two algorithms together. + +For instance, the following line creates a branch-and-price algorithm. + +.. code:: cpp + + model.use(branch_and_bound + column_generation); + +Solving +------- + +As usual, one can simply call the :code:`Model::optimize` method to solve the problem. + +.. code:: cpp + + model.optimize(); + + +That's it! The problem is being now solved by a branch-and-price and the integrality constraints are handled automatically! + +The rest remains unchanged and one can retrieve the solution +through the usual methods such as :code:`Model::get_status` and :code:`Model::get_var_primal`. + 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 000000000..559c49ef7 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/index.rst.txt @@ -0,0 +1,41 @@ +.. _mip: + +Mixed-Integer Optimization +========================== + +Mixed-integer optimization deals with problems of the following form: + +.. math:: + :label: eq:mip + + \begin{align} + \min_{x} \quad & c^\top x + x^\top D x + c_0 \\ + \text{s.t.} \quad & a_{i\cdot}^\top x + x^\top Q^i x \le b_i, \quad i = 1, \ldots, m, \\ + & x_j \in \mathbb{Z}, \quad j \in I \subseteq \{ 1, \dotsc, n \}. + \end{align} + +Here, :math:`x` are the decision variables, while :math:`c`, :math:`D`, :math:`c_0`, :math:`a_i`, :math:`Q^i`, and :math:`b_i` are given data. +Some of the decision variables are required to be integer-valued and are indexed by :math:`I`. + +We say that :math:numref:`eq:mip` is an integer problem if :math:`I = \{ 1, \dotsc, n \}`, i.e., if all variables are required to +be integer. It is said to be mixed-integer if :math:`I \neq \emptyset`. Otherwise, we say that :math:numref:`eq:mip` is a continuous problem. + +An important class of problems is when :math:`D = 0` and :math:`Q^i = 0` for all :math:`i`, i.e., when the objective function and the constraints are linear. +In such a case, we say that :math:numref:`eq:mip` is a mixed-integer linear problem (MILP), or a linear problem (LP) if all variables are continuous. + +.. figure:: https://upload.wikimedia.org/wikipedia/commons/0/06/IP_polytope_with_LP_relaxation.svg + :align: center + :target: https://en.wikipedia.org/wiki/Integer_programming + + The feasible region of an integer problem and its linear relaxation. + +**Table of Contents** + +.. 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 000000000..34436259a --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/constraints.rst.txt @@ -0,0 +1,141 @@ +.. _api_constraints: + +Constraints +=========== + +Constraints are mathematical expressions that must be satisfied by the decision variables of an optimization problem. +They are used to model relationships between variables, and to restrict the feasible region of the problem. + +There are mainly two types of constraints: + +- **Linear Constraints**: constraints that are linear in the decision variables. +- **Quadratic Constraints**: constraints that are non-linear in the decision variables. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Linear Constraints +------------------ + +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 +:code:`Model::add` or by calling the :code:`Model::add_ctr` method. + +Using the :code:`Ctr` class directly creates a variable that is not associated to any model. We will then need to add it +explicitly to a model. This is done by calling the :code:`Model::add` method. See for instance the following code. + +.. 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, 0, "x"); + const auto constraint = model.add_ctr(x[0] + x[1] >= 1); + +Temporary Constraints +^^^^^^^^^^^^^^^^^^^^^ + +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:`AffExpr`. + +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(x[0] + x[1], GreaterOrEqual, 1); + + model.add_ctr(temporary_constraint); + +Here, the sign of the constraint is +specified by the second argument of the constructor of the :ref:`TempCtr ` class, and can take values +:code:`LessOrEqual`, :code:`GreaterOrEqual` and :code:`EqualTo`. + +Accessing Constraints +^^^^^^^^^^^^^^^^^^^^^ + +Information about a given constraint in a model can be accessed by calling the corresponding methods of the model. +For instance, one can access the right-hand side of a constraint by calling the :code:`Model::get_ctr_rhs` method. +Here is a list of the most common methods to access information about a constraint. + +- :code:`Model::get_ctr_rhs`: get the right-hand side of a constraint, +- :code:`Model::get_ctr_type`: get the type of a constraint, +- :code:`Model::get_ctr_row`: get the row of a constraint, +- :code:`Model::get_ctr_index`: get the index of a constraint. + +When available, the values associated to the constraint in a given solution can be accessed in a similar way. +Here is a list of the most common methods to access information about a constraint in a solution. + +- :code:`Model::get_ctr_dual`: get the dual value of a constraint, +- :code:`Model::get_ctr_farkas`: get the Farkas certificate of a constraint (for infeasible systems). + +The :code:`Model::has` method can be used to check if a given constraint is in the model. + +For more details, see the :ref:`Model ` class. + +Modifying Constraints +^^^^^^^^^^^^^^^^^^^^^ + +Similarly to accessing constraints, the attributes of a constraint can be modified by calling the corresponding methods of the model. +Here is a list of the most common methods to modify a constraint. + +- :code:`Model::set_ctr_rhs`: set the right-hand side of a constraint, +- :code:`Model::set_ctr_type`: set the type of a constraint, +- :code:`Model::set_ctr_row`: set the row of a constraint. + +The row of a constraint in the model can be modified by calling the :code:`Ctr::set_row` method. +For instance. + +.. code:: cpp + + LinExpr row; + row.set(x, coefficient_for_x_in_constraint); + row.set(y, coefficient_for_y_in_constraint); + + model.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 :code:`Model::remove` method. + +Quadratic Constraints +--------------------- + +Creating, accessing and modifying quadratic constraints is similar to linear constraints. The main difference is that +quadratic constraints are created using the :ref:`QCtr ` class. Moreover, the corresponding methods in :code:`Model` +use :code:`qctr` instead of :code:`ctr`. For instance, the following code accesses the type of a quadratic constraint. + +.. code:: + + model.get_qctr_type(quadratic_constraint); + 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 000000000..7017cfbf6 --- /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 000000000..739209d6c --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/expressions.rst.txt @@ -0,0 +1,79 @@ +Expressions +=========== + +An expression generically refers to any mathematical expression involving variables or constraints. In idol, expressions +are represented by the :code:`QuadExpr`, :code:`AffExpr` and :code:`LinExpr` classes. These classes are used to represent +quadratic, affine and linear expressions, respectively. + +An expression can be created by adding, subtracting or multiplying variables together. 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 AffExpr expr = 1 + 3 * x[0] + x[1] + x[0] + 2 * x[0] * x[1]; + + std::cout << expr << std::endl; + + +.. contents:: Table of Contents + :local: + :depth: 2 + +:code:`LinExpr`: Linear Expressions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The :code:`LinExpr` class is used to represent linear expressions. A linear expression is a mathematical expression +that is linear in the variables. For instance, the following code creates the mathematical expression :math:`1 + 3 x_0 + x_1`. + +.. code:: cpp + + const LinExpr expr = 1 + 3 * x[0] + x[1]; + + std::cout << expr << std::endl; // "1 + 3 * x[0] + 1 * x[1]" + +.. admonition:: Linear in What? + + Actually, :code:`LinExpr` is a template class with one parameter, which is the type of the "variables" in the linear expression. + For instance, it is possible de create a linear expression of :code:`Ctr` objects, which are constraints. The following code + creates the mathematical expression :math:`1 + 3 c_0 + c_1`. + + .. code:: cpp + + const LinExpr expr = 1 + 3 * c[0] + c[1]; + + std::cout << expr << std::endl; // "1 + 3 * c[0] + 1 * c[1]" + +It is possible to iterate over the terms in the expression as follows. + +.. code:: + + for (const auto& [var, constant] : expr) { + std::cout << constant << " multiplied by " << var << std::endl; + } + +:code:`AffExpr`: Affine Expressions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The :code:`AffExpr` class is used to represent affine expressions. An affine expression is a mathematical expression +that is linear in the variables and has a constant term. + +The linear part of the expression is accessed by the :code:`AffExpr::linear()` method, and the constant term is accessed +by the :code:`AffExpr::constant()` method. + +:code:`QuadExpr`: Quadratic Expressions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The :code:`QuadExpr` class is used to represent quadratic expressions. A quadratic expression is a mathematical expression +which contains an affine part and a quadratic part. The affine part can be accessed by the :code:`QuadExpr::affine()` method. + +It is possible to iterate over the terms in the quadratic part of the expression as follows. + +.. code:: + + for (const auto& [pair, constant] : expr) { + std::cout << constant << " multiplied by " << pair.first << " and " << pair.second << std::endl; + } + + for (const auto& [var, constant] : expr.affine().linear()) { + std::cout << constant << " multiplied by " << var << std::endl; + } 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 000000000..51f30a647 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/index.rst.txt @@ -0,0 +1,29 @@ +.. _mip_modeling: + +.. role:: cpp(code) + :language: cpp + +Modeling a MIP with idol +======================== + +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 000000000..8779fadb9 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/models.rst.txt @@ -0,0 +1,90 @@ +Models +====== + +The :ref:`Model ` class is used to represent a (standard) optimization model of the form + +.. math:: + + \begin{align} + \min_{x} \quad & c^\top x + x^\top D x + c_0 \\ + \text{s.t.} \quad & a_{i\cdot}^\top x + x^\top Q^i x \le b_i, \quad i = 1, \ldots, m, \\ + & x_j \in \mathbb{Z}, \quad j \in I \subseteq \{ 1, \dotsc, n \}. + \end{align} + +Here, :math:`x` are the decision variables, while :math:`c`, :math:`D`, :math:`c_0`, :math:`a_i`, :math:`Q^i`, and :math:`b_i` are given data. +Some of the decision variables are required to be integer-valued and are indexed by :math:`I`. + +In what follows, we will dive into the :cpp:`Model` class and see how to create, read, and write models to files. + + +.. 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, respectively. + +Reading a Model from a File +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A Model can also be created by reading a model from a file (typically, a :code:`.mps` or an :code:`.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(env); + + // Add variables and constraints HERE... + + model.use(Gurobi()); // Set the optimizer as Gurobi + + 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 000000000..bee489ea9 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/objective-function.rst.txt @@ -0,0 +1,57 @@ +.. _api_objective_functions: + +Objective Functions +=================== + +The objective function of an optimization model is a quadratic expression of the decision variables. +It is used to guide the optimization process by defining the quantity to be minimized or maximized. + +.. 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 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Here is a list of methods to access the objective function of a given model: + +- ``Model::get_obj_expr``: Returns the objective function of the model. +- ``Model::get_obj_sense``: Returns the optimization sense of the model. + +If a given model has been solved, one can also query the best objective function value and the best bound. + +- ``Model::get_best_obj``: Returns the best objective function value. +- ``Model::get_best_bound``: Returns the best bound. + +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 + +.. warning:: + + idol offers minimal support for maximization problems. + We recommend to use minimization problems whenever possible. 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 000000000..b7c547cb5 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/modeling/variables.rst.txt @@ -0,0 +1,201 @@ +.. _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 :code:`Var` class and :code:`Model::add` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Using the :cpp:`Var` class directly creates a variable that is not associated to any model. We will then 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, 0, "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. + +Also, it is possible to add a variable to a model and set its attributes (bounds and type) at the same time. For instance, +the following code is equivalent to the previous one. + +.. code:: cpp + + Var x(env, 0., Inf, Continuous, "x"); + + model.add(x); + + Model model2(env); + model2.add(x, TempVar(0, 10, Continuous, 0)); + +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, type an objective coefficient. Here, we therefore +add the variable :math:`x` to the second model and directly set its attributes (bounds and type) accordingly. + +Using :code:`Model::add_var` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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, 0, "x"); + +Here, we do not need to repeat the environment since the model's environment is automatically used. Moreover, we do not need to +explicitly add the variable to the model since it is done 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, 0)); + +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. + +Using :code:`Var::make_vector` and :code:`Model::add_vector` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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" + +Here, we use the :ref:`Dim ` class to specify the dimension of the new variable. The :ref:`Dim ` class is a template class +that takes an integer as a template parameter. The integer specifies the dimension of the new variable. In this case, we use +2 to specify that we want to create a two-dimensional variable. Then, we specify the size of each dimension by passing the +appropriate arguments to the constructor of the :ref:`Dim ` class. Here, we specify that the first dimension has size :math:`K` and the +second dimension has size :math:`T`. + +Once the variables are created, we add them to the model by calling the :cpp:`Model::add_vector` method. + +Using :code:`Model::add_vars` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +One alternative is to 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" + +Note that the :ref:`Dim ` class is used in the same way as in the previous example. + +Variables Types +--------------- + +Variables can be of different types. In idol, three types of variables are available: + +- :code:`Continuous`: continuous variables, +- :code:`Binary` binary variables, +- :code:`Integer`: integer variables. + +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. Here is a list of the most common +methods to access information about a variable. + +- :code:`Model::get_var_lb`: returns the lower bound of a variable, +- :code:`Model::get_var_ub`: returns the upper bound of a variable, +- :code:`Model::get_var_type`: returns the type of a variable, +- :code:`Model::get_var_column`: returns the column of a variable, +- :code:`Model::get_var_obj`: returns the objective coefficient of a variable, +- :code:`Model::get_var_index`: returns the index of a variable. + +When available, the value of the variable in a given solution can be accessed in a similar way. +Here is a list of the most common methods to access information about a variable in a solution. + +- :code:`Model::get_var_primal`: returns the value of a variable in a solution, +- :code:`Model::get_var_reduced_cost`: returns the reduced cost of a variable in a solution, +- :code:`Model::get_var_ray`: returns the primal ray of a variable in a solution. + +The :cpp:`Model::has` method can be used to check if a given variable is in the model. + +For more details, see the :ref:`Model ` class. + +Modifying Variables +------------------- + +Similarly to accessing variables, the attributes of a variable can be modified by calling the corresponding methods of the model. +Here is a list of the most common methods to modify a variable. + +- :code:`Model::set_var_lb`: sets the lower bound of a variable, +- :code:`Model::set_var_ub`: sets the upper bound of a variable, +- :code:`Model::set_var_type`: sets the type of a variable, +- :code:`Model::set_var_obj`: sets the objective coefficient of a variable, +- :code:`Model::set_var_column`: sets the column of a variable. + +For instance, the following code updates the column of a given variable. + +.. code:: cpp + + LinExpr column(objective_coefficient_for_x); + column.set(constraint1, constraint1_coefficient_for_x); + column.set(constraint2, constraint2_coefficient_for_x); + + model.set_var_column(x, column); + +Here, we use the :cpp:`LinExpr` class to represent the column of the variable :math:`x`. + +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 000000000..e7c4b274e --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/access-optimizer.rst.txt @@ -0,0 +1,37 @@ +Getting Access to The Underlying Optimizer +========================================== + +In some advanced situations, you may want to access the underlying optimizer of an optimization model. +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); + auto x = model.add_var(0.0, 1.0, Continuous, -1, "x"); + + model.use(Gurobi()); + model.optimize(); + + if (!model.optimizer().is()) { + throw Exception("The optimizer is not Gurobi"); + } + + auto& gurobi_optimizer = model.optimizer().as(); + + // Access the optimizer-specific routines + GRBVar& var = gurobi_optimizer[x]; + +.. 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`). + If so, 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 000000000..f5f2e67ba --- /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 000000000..5fa76129a --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/create-universal-callback.rst.txt @@ -0,0 +1,238 @@ +.. _tutorial_create_callback: + +Creating Your Own Callback +========================== + +In this page, we see how to create your own universal callback. +Universal callbacks are callbacks which are not specific to a particular optimizer. +In that sense, they are generic and can be used with different optimizers without any modification. + +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 `. + +.. hint:: + + Note that there are also callbacks specific to the :code:`BranchAndBound` optimizer. + If you are looking for this, you can refer to :ref:`this page `. + +.. contents:: Table of Contents + :local: + :depth: 2 + +The 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 whenever an incumbent is found. + +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 + + /* Callback factory implementation */ + class MyCallback : public CallbackFactory { + public: + + /* Actual callback implementation */ + class Strategy { + protected: + + /* This method is called whenever an event occurs + during the solution process */ + void operator()(CallbackEvent t_event) { + + if (t_event != IncumbentSolution) { + return; + } + + std::cout << primal_solution() << std::endl; + } + + } + + /* This method creates a new callback object */ + Callback* operator()() { + return new Strategy(); + } + + /* This method creates a copy of the callback factory */ + CallbackFactory* clone() const { + 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(); + +List of Optimizers Supporting Universal Callbacks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The following solvers support universal callbacks: + +- :code:`Gurobi` +- :code:`BranchAndBound` +- :code:`Mosek` + +Hence, for these solvers, you can create your own callback and add it to the optimizer without having to +worry about the underlying solver. + +An 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} \quad & (1 - \hat x)^\top z \qquad \ge 1 \\ + \text{s.t.} \quad & 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, 0, "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()() { + return new Strategy(m_x, m_weights, m_profits, m_capacity); + } + + CallbackFactory* clone() const { + return new MyCallback(*this); + } + + } + +The actual 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 { + 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 000000000..6866d4a24 --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/index.rst.txt @@ -0,0 +1,23 @@ +.. _mip_optimizers: + +.. role:: cpp(code) + :language: cpp + +Solving a MIPs +============== + +This series of tutorials covers the basics of solving mixed-integer problems (MIPs) in idol. +We assume that you already know how to create a model and add variables, constraints, and objectives to it. + +Let's get started! + +.. toctree:: + :maxdepth: 1 + :glob: + + optimizers + solving + access-optimizer + universal-callbacks + create-universal-callback + #create-optimizer diff --git a/_sources/tutorials/mixed-integer-programming/optimizers/optimizers.rst.txt b/_sources/tutorials/mixed-integer-programming/optimizers/optimizers.rst.txt new file mode 100644 index 000000000..22248b08e --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/optimizers.rst.txt @@ -0,0 +1,122 @@ +.. role:: cpp(code) + :language: cpp + +The Concept of :code:`Optimizer` and :code:`OptimizerFactory` +============================================================= + +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. + +.. contents:: Table of Contents + :local: + :depth: 2 + +A First Example +--------------- + +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, 0, "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 this example, let us use the :code:`GLPK` optimizer factory, which creates an optimizer using GLPK to solve our model; see :ref:`GLPK `. + +.. code:: cpp + + model.use(GLPK()); + +Here, we assume that idol was linked with the GLPK library during installation. If this is not the case, please, refer to +the installation guidelines. + +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 :code:`Optimizers::GLPJ` +will be created and used to solve the model; see :ref:`Optimizers::GLPK `. + +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(); // Re-optimize + +idol provides several optimizer factories, each of which creating an optimizer using 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 showing how to pass a time limit to the :code:`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_*` methods of the optimizer factory, followed by the name of the argument. + +Combining Optimizers +-------------------- + +In some cases, it can useful to combine optimizers together. For instance, this is useful if one wants to use an optimizer +to solve a sub-problem arising in another optimizer. +The process of combining optimizers is straightforward and follows the same pattern as what we have seen so far. + +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_optimizer(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(); + 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); 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 000000000..fd507db1d --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/solving.rst.txt @@ -0,0 +1,189 @@ +Using an External Solver and Accessing the Solution +=================================================== + +This page shows 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 `. + +.. contents:: Table of Contents + :local: + :depth: 2 + +Modeling and Solving with an External Solver (e.g., GLPK) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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); + + auto x = model.add_vars(Dim<1>(n_items), 0., 1., Binary, 0, "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 will now set up an optimizer and solve the model. For this example, we use GLPK. + +.. code:: cpp + + model.use(GLPK()); + +Solving the model is then done by calling the :code:`optimize` method. + +.. code:: cpp + + model.optimize(); + +Accessing the Solution +^^^^^^^^^^^^^^^^^^^^^^ + +idol provides several methods to access the solution. + +First, the status of the solution can be accessed using the :code:`get_status` method. +Here is a detailed list of possible statuses and reasons: + ++-------------------+-------------------------------------------+ +| Status | Description | ++===================+===========================================+ +| Loaded | The model has been loaded but not solved. | ++-------------------+-------------------------------------------+ +| Optimal | An optimal solution has been found. | ++-------------------+-------------------------------------------+ +| Feasible | A feasible solution has been found. | ++-------------------+-------------------------------------------+ +| Infeasible | No feasible solution could be found. | ++-------------------+-------------------------------------------+ +| InfOrUnbnd | The model is infeasible or unbounded. | ++-------------------+-------------------------------------------+ +| Unbounded | The model is unbounded. | ++-------------------+-------------------------------------------+ +| Fail | The solver failed to solve the model. | ++-------------------+-------------------------------------------+ +| SubOptimal | A suboptimal solution has been found. | ++-------------------+-------------------------------------------+ + +Related to a status, the reason for the status can be accessed using the :code:`get_reason` method. + ++-----------------+--------------------------------------------------------------------+ +| Reason | Description | ++=================+====================================================================+ +| NotSpecified | No specific reason is available. | ++-----------------+--------------------------------------------------------------------+ +| Proved | The solver proved optimality. | ++-----------------+--------------------------------------------------------------------+ +| TimeLimit | The solver reached the time limit. | ++-----------------+--------------------------------------------------------------------+ +| IterLimit | The solver reached the iteration limit. | ++-----------------+--------------------------------------------------------------------+ +| ObjLimit | The solver reached the objective limit. | ++-----------------+--------------------------------------------------------------------+ +| Numerical | A numerical issue occurred during the solution process. | ++-----------------+--------------------------------------------------------------------+ +| MemoryLimit | The solver ran out of memory. | ++-----------------+--------------------------------------------------------------------+ +| Cycling | The solver encountered cycling (e.g., in simplex method). | ++-----------------+--------------------------------------------------------------------+ +| SolutionLimit | The solver reached the solution limit (e.g., number of solutions). | ++-----------------+--------------------------------------------------------------------+ + +Then, the following methods can be used to access the solution: + +- :code:`get_best_obj` returns the best known objective value (this always refers to feasible solutions), +- :code:`get_best_bound` returns the best known objective value bound, +- :code:`get_relative_gap` returns the relative optimality gap, +- :code:`get_absolute_gap` returns the absolute optimality gap; see :ref:`this page ` for more details about gaps and tolerances. + +Accessing the primal and dual values can be done with the following methods: + +- :code:`get_var_primal` returns the primal value of a given variable (Feasible and Optimal status only), +- :code:`get_var_ray` returns the primal ray value of a given variable (Unbounded status only), +- :code:`get_ctr_dual` returns the dual value of a given constraint (Continuous models only), +- :code:`get_ctr_farkas` returns the Farkas certificate value of a given constraint (Continuous models and Infeasible status only). + +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:`Point ` with template parameter :code:`Var` or :code:`Ctr` 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:`Point ` 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 000000000..af0552e8f --- /dev/null +++ b/_sources/tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst.txt @@ -0,0 +1,257 @@ +.. _tutorial_user_lazy_cuts: + +Adding User Cuts and Lazy Constraints +===================================== + +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. + +.. hint:: + + 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 `. + +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 + +Introduction +------------ + +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. + + +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 knapsack problem: + +.. math:: + + \begin{align} + \max_{x} \quad p^\top x \quad + \text{s.t.} \quad 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 +by solving the following separation problem. + +.. math:: + + \begin{align} + \max_{z} \quad & (1 - \hat x)^\top z \qquad \ge 1 \\ + \text{s.t.} \quad & 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); + + auto x = knapsack.add_vars(Dim<1>(n), 0, 1, Binary, 0, "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} \quad & 2 x_0 + 3x_1 + 2y \\ + \text{s.t.} \quad & 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} \quad & 2y + z \\ + \text{s.t.} \quad & z \ge \lambda_1 ( 3 - y ) + \lambda_2(4 - 3y) \qquad \text{for all } \lambda \in \Lambda, \\ + & z \ge 0, \ y\in\mathbb N, + \end{align} + +with :math:`\Lambda` defined as the set of all dual feasible m_n_points_bound, 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, 0, "y"); + const auto z = master.add_var(0, Inf, Continuous, 0, "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/index.rst.txt b/_sources/tutorials/robust-optimization/index.rst.txt new file mode 100644 index 000000000..6a71c0de4 --- /dev/null +++ b/_sources/tutorials/robust-optimization/index.rst.txt @@ -0,0 +1,15 @@ +.. _robust: + +Robust Optimization +=================== + +.. warning:: + + This section is under construction. + +.. toctree:: + :maxdepth: 3 + :glob: + + single-stage/index + two-stage/index diff --git a/_sources/tutorials/robust-optimization/single-stage/index.rst.txt b/_sources/tutorials/robust-optimization/single-stage/index.rst.txt new file mode 100644 index 000000000..d8695ac5b --- /dev/null +++ b/_sources/tutorials/robust-optimization/single-stage/index.rst.txt @@ -0,0 +1,14 @@ +.. _robust_single: + +Single-stage Robust Optimization +================================ + +.. warning:: + + This section is under construction. + +.. toctree:: + :maxdepth: 3 + :glob: + + diff --git a/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.rst.txt b/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.rst.txt new file mode 100644 index 000000000..dc4ccbd9a --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.rst.txt @@ -0,0 +1,10 @@ +Using Column-and-Constraint-Generation +====================================== + +.. toctree:: + :maxdepth: 1 + :glob: + + introduction + write-ccg + trust-region-stabilization diff --git a/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.rst.txt b/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.rst.txt new file mode 100644 index 000000000..5977afb80 --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/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 m_n_points_bound 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/two-stage/column-and-constraint-generation/trust-region-stabilization.rst.txt b/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.rst.txt new file mode 100644 index 000000000..d38ce8039 --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/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/two-stage/column-and-constraint-generation/write-ccg.rst.txt b/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.rst.txt new file mode 100644 index 000000000..23fdd1be9 --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/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. + +.. hint:: + + 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/two-stage/column-and-constraint-generation/writing-separator.rst.txt b/_sources/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.rst.txt new file mode 100644 index 000000000..5cc62d579 --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/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/two-stage/index.rst.txt b/_sources/tutorials/robust-optimization/two-stage/index.rst.txt new file mode 100644 index 000000000..e0cf41831 --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/index.rst.txt @@ -0,0 +1,13 @@ +.. _robust_single: + +Adjustable Robust Optimization (Two-stage) +========================================== + + + +.. toctree:: + :maxdepth: 3 + :glob: + + modeling + column-and-constraint-generation/index diff --git a/_sources/tutorials/robust-optimization/two-stage/modeling.rst.txt b/_sources/tutorials/robust-optimization/two-stage/modeling.rst.txt new file mode 100644 index 000000000..83c44e54f --- /dev/null +++ b/_sources/tutorials/robust-optimization/two-stage/modeling.rst.txt @@ -0,0 +1,219 @@ +.. _modeling_two_stage_robust_problem: + +Modeling Adjustable Robust Problems +=================================== + +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/basic.css b/_static/basic.css new file mode 100644 index 000000000..7ebbd6d07 --- /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 000000000..92fad4b5c --- /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 000000000..54b3c4638 --- /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 000000000..f1916ec7d --- /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 000000000..2ea7ff3e2 --- /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 000000000..dbe1aaad7 --- /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/design.css b/_static/design.css new file mode 100644 index 000000000..ec3e9b4fe --- /dev/null +++ b/_static/design.css @@ -0,0 +1,273 @@ + +html { + scroll-behavior: smooth; +} + +body { + font-size: 20px; +} + +#doxygen { + + .k, .n, .kt { + margin-right: 10px; + } + + .cpp > dd { + margin-bottom: 30px; + } + +} + +.content:not(.custom) { + max-width: 900px; + text-align: justify; +} + +.content img { + max-width: 100%; +} + +#cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); + /* grid-template-columns: auto auto auto; */ +} + +.content .toctree-l1 { + + > ul { + margin-top: 20px; + } + + ul { + margin-bottom: 20px; + } + +} + +#cards > a { + display: block; + width: 270px; + padding:10px; + color: white; + margin-bottom: 10px; + + background-color: #1f5c88; + border: 1px solid lightgray; + 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; + + span { + font-weight: 400; + } + + > div { + margin: 5px; + margin-top: 10px; + background: white; + text-align: center; + height: 160px; + padding: 20px; + border: 1px solid lightgray; + + img { + max-height: 160px; + max-width: 100%; + } + } + + > p { + font-size : 16px ; + text-align: justify; + } +} + +.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; + text-align: left; + 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; +} + +@media (max-width: 767px) { + + body { + font-size: 16px; + } + + #cards > a { + width: 95%; + } + + .body-header { + display: none; + } + +} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 000000000..0398ebb9f --- /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 000000000..7e4c114f2 --- /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/ecdf-gap.png b/_static/ecdf-gap.png new file mode 100644 index 0000000000000000000000000000000000000000..17675c0ea255c188d12712f3204643e69477b554 GIT binary patch literal 71638 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%0D&BFpmcy~fW|Z5 zAW?)`7w*Jbm1dk=gvNmiB8q+4Q-g(|*rHVoDy1nK^0m7#y)wSkL zH?F^EOG#0v2ss7P1vKSR&j=;D5~TJXg}8Fz4HhtsCT0A&Wf?i3_hm&i$iEP#&xfBFk!-x-va6v`csIJ5A7yv` z)j|}ZFk{SayC+_sW|oO!H<5d_c}Wr5c(e4TH9Fe2a^c6rak4|!iopi;}XAu|EV4w1?BC^d+TG=9~v3?MLdJt;sS#`aTX`G zme?rZ4Q^~`?iayX3*9zI(uDoev+Y&pB8vRH3(~t;(V_Yi#s!|u`JU@*aI=iLqyh`3 zB|3qV#!#S3+>7FuGl0q(T1{LH(QU#VfK5gojiCe$K7z*OBhL-Jg|gL>4Y|%ZVHW&TQJ|8Q~orYDV{B!MlJH$rkigg|@M(>LMQ1 zeb)J12iw52Ucm`DO=PRZ1ko$t>gBi+F^6u|%gCXSEkg$(sCoEvCQ{WKEboCufjNvl z@r1E)d0F3AaSU*%Kw zVJ_Hx0HE|;bGyXM{1IoguqCx~J%C{YRmyX4YYZ`&_0py#-ai;(NvNot+ z7&y`YMuqwmzHTx+yu9S=4jw-I36GJGK_Q6MvnmpS$U}kN&$sNLt?ekxS5P;Gab-3v zP>7TPwfJd>7F?jyf!&{o>H_!K6SSG#f)GLr-6n3X;Lr^$z=K^#mRK~WtGO^(TBJOV zx2jT~Hl8`rRA*~rv5YqX`eV4yn1hUmNE2kuX}g@srpLXc!78)?B{2A!?KV+UtA?gp z50V0~F^b_E0UL`lFV-2Uxxsw}78>|T@P2vO^LBc%!QXcbmW?4d$L<`soG8@zs*|oa zC$w)>LMYvzL)fo5E+7^W0xkzQ$=4$Q+~VQkd1Usyz4IvzJf_`D>rW8w-&IXn?_kl*AAT0A^=zt)J@SMR~MIUpueK5c};- zMt=bvt!@WM`01W?Y@J^fjuj6%Cn4m*QBVvWEFeaHHQGG{?aq1p11wh15hU6WH_7P+ zL-dSAylVMm2jbKQBaq7*8H=>&@N(Ch9OSB!3gf%iQok{w4!L| zz>1Um;z zJPV}gXZsk8w6wyFA3$gf>XItJqlZB zSYr+i4S_D?5M{abMavi!$akEI6Gb}ys)4EvtSfQk{cuFO9u~rfDj3a zVF`9(Y66w%@aijnMTL!$g}Z4GE*+A%{-#X3***&wZ5=i;>mYQ^#I}a*BL=3gN-l>jk5L@?<3Hma(w>=~;=qLWqM9avTn)GK{%oC^8;VHM=g#P^D|D#aP z^&qjMN|Y4_&yK9taTM>Dw@&y#vcf^;7*z1<(k<%IA13hPZXD7^)RLy)s z-&VcAq((9`O(gIwBCwnuLP`$`QZw6M+c+>WSb#YQOI}R^&3D^2Epc)hXOjpkqPP_uXljm zU3>OiTi`l-5GfbjAHgy;`2|AA8L(?P-5`mr4EM#>gn4uz@y~SPM9XPZuhA$eW=% z!ajj5R1YLuK|w*xR}hASaZ?6C2nj(zO~Wb;2nfKu+XJ#TX0m!yCMd)UP~LR5%D?FVgSQ$FQ*%N zP!Kb2!?FV`IuNd%az2OHj884r9)zm@r?qqcY4VQ3I7?%!aX_xu}a56vbJMP&P4wPBtuo(TNU6 zux7wMr?@|0$@(+A{q}vo-*cXG-sgFam^?t?KDB6&#t^PJkN5%@&7X31R=cDK{%g{L z6~QZ|rNwwXQePmHRMdsTP@4jJ%ttgzQN*y*WWE@Ry5COb4m#k4%_TtE6@$>DqNYT1 zpw~bA7^BdH7g>ly z7?xQ~eW<0P%k{JJa-f^Bd-fjeox|$$R<%M4*`3OOTQmxvH_V`#UU

    am~-uy=qM@ z`Y7MHlJ9Pv=4O+S@>MywaP0lQDU4AYoA?bO%DC+Q78L&3ww*F7Pn{29_Z^6dssT5t zG$gtirH!WgF>ix-MTjnxz!nePynezFNhs=gw8@qZ4L>iSs(*~z^hu;pN~DGv)(w6m z=%8d&I@{YB57@I#;FM74yQ?3h-CwJp>y4o2WUe5zl~KDDd)C%NXcW+l|XY)6JXE$eA6-(<2o>;n;H%8Ki^^^74aP?6|k`yXs8Vi{?+O6jZ)?h4ulcd8STvLbQ#ZO1$Eb}CUuqqHjK zRmi{_I<+!RD*oCQ`_{>{T;QFa!}I|_>;z7Dozf@oO{p4LB)O+22EV=#C81~Q7h$@f z8@iplPK!yO#bTq7xW$>^z%ln^P!b|Q5(yfm%JJB+`cyQnK8#c}uXmy_1*gOg1xnW(u(UB+39 zE!Ue&roL>KM)+u+tgsc$0{|4M7V4L!wJAhbG|%BWT^-~|&o(_ppGFBXJ+X{gX?57G zb#`?{`Ee_ZecI&e4cgA-zL`Y9yih0~hYl{Ma*=4NHl+WODqdX;han4#+>;wY__p8J zIr?!A$Jt#i6*JLkcM&y`mj-pl6;h3%yxTMPc}QPFOk%0NycUp{U|Gid=A8$=g42A-iOkc$GC`-}+4K*&Xa9f<9Ts-EA4UOL%UDPmAK&Rh$V zWAq7!;+x5t;LnR#WFXdfx#vXDNfIRn{c*5IjybGun^0sHJ}c*^{;K+Dv%>AonIHu!rR}(dl`M{6A`~eM+&Bf^tJplz znP?l3iMp!#S9TO1#8VG+oq-4>%Msh2gf|+ck%-|5f728WFw~NYIs^!)W4i2igYn9! zRHraXBNzVL)mdV}?*!RH`>D@DaL*=_Ieu!v5mDCokN^RSGiJMc@;^y(SUy}O?gt25 zG)meU-i~`MJdAc84brCC!0V&chc|!X132F57hA*1#Os>ER%*G!2FrQf%2c4NG^QK#ww}mXbBaNs|uU52o$1R xfQxK+q7a}nQLf7;*yoRz9L@i=sr4T^Wy7A@wFCPVI$e*fCrleLzf!Ye^FKWBIj#Tz literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 000000000..30f3837b6 --- /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/language_data.js b/_static/language_data.js new file mode 100644 index 000000000..c7fe6c6fa --- /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 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pseudocode-js/pseudocode.min.css b/_static/pseudocode-js/pseudocode.min.css new file mode 100644 index 000000000..c28ebfe43 --- /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 000000000..e19fe9e03 --- /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;tG}LqN1Rnq_jwHN=iBe5$Oi$l1@qK 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

    4m|N|Q@LkDBcp*Pf93>{beA`5<^a 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 { + 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 000000000..8a96c69a1 --- /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/_static/theme.css b/_static/theme.css new file mode 100644 index 000000000..16c9136ba --- /dev/null +++ b/_static/theme.css @@ -0,0 +1 @@ +.theme-default-content code{color:var(--text-color-l20);padding:.25rem .5rem;margin:0;font-size:.85em;border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:var(--code-bg-color);border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:var(--grey3);padding:0;background-color:transparent!important;border-radius:0}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:#000000a8}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;background-color:var(--code-bg-color)}div[class~="language-$codeLang"]:before{content:"$codeLang"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.theme-light .theme-default-content code{background-color:var(--grey14)}.theme-light code[class*=language-],.theme-light pre[class*=language-]{color:#000;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.theme-light pre[class*=language-]::-moz-selection,.theme-light pre[class*=language-] ::-moz-selection,.theme-light code[class*=language-]::-moz-selection,.theme-light code[class*=language-] ::-moz-selection{background:#b3d4fc}.theme-light pre[class*=language-]::selection,.theme-light pre[class*=language-] ::selection,.theme-light code[class*=language-]::selection,.theme-light code[class*=language-] ::selection{background:#b3d4fc}.theme-light pre[class*=language-]{margin:.5em 0;overflow:auto}.theme-light :not(pre)>code[class*=language-],.theme-light pre[class*=language-]{background:#f5f2f0}.theme-light :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-light .token.comment,.theme-light .token.prolog,.theme-light .token.doctype,.theme-light .token.cdata{color:#708090}.theme-light .token.punctuation{color:#5f6364}.theme-light .token.property,.theme-light .token.tag,.theme-light .token.boolean,.theme-light .token.number,.theme-light .token.function-name,.theme-light .token.constant,.theme-light .token.symbol,.theme-light .token.deleted{color:#c92c2c}.theme-light .token.selector,.theme-light .token.attr-name,.theme-light .token.string,.theme-light .token.char,.theme-light .token.function,.theme-light .token.builtin,.theme-light .token.inserted{color:#2f9c0a}.theme-light .token.operator,.theme-light .token.entity,.theme-light .token.url,.theme-light .token.variable{color:#a67f59;background:#ffffff80}.theme-light .token.atrule,.theme-light .token.attr-value,.theme-light .token.keyword,.theme-light .token.class-name{color:#1990b8}.theme-light .token.regex,.theme-light .token.important{color:#e90}.theme-light .language-css .token.string,.theme-light .style .token.string{color:#a67f59;background:#ffffff80}.theme-light .token.important{font-weight:400}.theme-light .token.bold{font-weight:700}.theme-light .token.italic{font-style:italic}.theme-light .token.entity{cursor:help}.theme-light .token.namespace{opacity:.7}.theme-light div[class*=language-] .highlight-lines .highlighted{background-color:#d7e9f7}.theme-light div[class*=language-] pre,.theme-light div[class*=language-] pre[class*=language-]{background:transparent}.theme-light div[class*=language-]:before{color:#0006}.theme-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{background-color:#d7e9f7}.theme-light div[class*=language-].line-numbers-mode .line-numbers-wrapper{color:#0000004d}.theme-light div[class*=language-].line-numbers-mode:after{border-right:1px solid #c2def3}.theme-dark .theme-default-content code{background-color:var(--grey12)}.theme-dark code[class*=language-],.theme-dark pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.theme-dark pre[class*=language-]{margin:.5em 0;overflow:auto}.theme-dark :not(pre)>code[class*=language-],.theme-dark pre[class*=language-]{background:#2d2d2d}.theme-dark :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-dark .token.comment,.theme-dark .token.block-comment,.theme-dark .token.prolog,.theme-dark .token.doctype,.theme-dark .token.cdata{color:#999}.theme-dark .token.punctuation{color:#ccc}.theme-dark .token.tag,.theme-dark .token.attr-name,.theme-dark .token.namespace,.theme-dark .token.deleted{color:#e2777a}.theme-dark .token.function-name{color:#6196cc}.theme-dark .token.boolean,.theme-dark .token.number,.theme-dark .token.function{color:#f08d49}.theme-dark .token.property,.theme-dark .token.class-name,.theme-dark .token.constant,.theme-dark .token.symbol{color:#f8c555}.theme-dark .token.selector,.theme-dark .token.important,.theme-dark .token.atrule,.theme-dark .token.keyword,.theme-dark .token.builtin{color:#cc99cd}.theme-dark .token.string,.theme-dark .token.char,.theme-dark .token.attr-value,.theme-dark .token.regex,.theme-dark .token.variable{color:#7ec699}.theme-dark .token.operator,.theme-dark .token.entity,.theme-dark .token.url{color:#67cdcc}.theme-dark .token.important,.theme-dark .token.bold{font-weight:700}.theme-dark .token.italic{font-style:italic}.theme-dark .token.entity{cursor:help}.theme-dark .token.inserted{color:green}.theme-dark div[class*=language-] .highlight-lines .highlighted{background-color:#1d2128}.theme-dark div[class*=language-] pre,.theme-dark div[class*=language-] pre[class*=language-]{background:transparent}.theme-dark div[class*=language-]:before{color:#fff6}.theme-dark div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{background-color:#1d2128}.theme-dark div[class*=language-].line-numbers-mode .line-numbers-wrapper{color:#ffffff4d}.theme-dark div[class*=language-].line-numbers-mode:after{border-right:1px solid #191d22}.theme-light{--text-color: #2c3e50;--background-color: #fff;--border-color: #eaecef;--code-bg-color: #ecf4fa;--arrow-bg-color: #ccc;--box-shadow-color: #f0f1f2;--card-shadow-color: $cardShadowColor;--text-color-l10: #3a5169;--text-color-l20: #476582;--text-color-l25: #4e6e8e;--text-color-l40: #6a8bad;--black: #000;--dark-grey: #666;--light-grey: #999;--white: #fff;--grey3: #333;--grey12: #bbb;--grey14: #eee}.theme-dark{--text-color: #9e9e9e;--background-color: #1e1e1e;--border-color: #302d28;--code-bg-color: #282c34;--arrow-bg-color: #333;--box-shadow-color: #0f0e0d;--card-shadow-color: $nightCardShadowColor;--text-color-l10: #a8a8a8;--text-color-l20: #b1b1b1;--text-color-l25: #b6b6b6;--text-color-l40: #c5c5c5;--black: #fff;--dark-grey: #999;--light-grey: #666;--white: #000;--grey3: #ccc;--grey12: #333;--grey14: #111}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.tip,.custom-block.warning,.custom-block.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{border-color:#42b983}.custom-block.warning{border-color:#e7c000}.custom-block.danger{border-color:#c00}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.theme-light .custom-block.tip{background-color:#f3f5f7}.theme-light .custom-block.warning{background-color:#ffe5644d;color:#6b5900}.theme-light .custom-block.warning .custom-block-title{color:#b29400}.theme-light .custom-block.warning a{color:var(--text-color)}.theme-light .custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.theme-light .custom-block.danger .custom-block-title{color:#900}.theme-light .custom-block.danger a{color:var(--text-color)}.theme-light .custom-block.details{background-color:#eee}.theme-dark .custom-block.tip,.theme-dark .custom-block.warning,.theme-dark .custom-block.danger,.theme-dark .custom-block.details{background-color:#404040}.theme-dark .custom-block.tip a,.theme-dark .custom-block.warning a,.theme-dark .custom-block.danger a,.theme-dark .custom-block.details a{color:#3eaf7c}.theme-dark .custom-block.warning{color:#b29400}.theme-dark .custom-block.warning .custom-block-title{color:#d5b100}.theme-dark .custom-block.danger{color:#b30000}.theme-dark .custom-block.danger .custom-block-title{color:#c00}.theme-dark .custom-block.details{color:var(--text-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--arrow-bg-color)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--arrow-bg-color)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--arrow-bg-color)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--arrow-bg-color)}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width: 419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}html,body{padding:0;margin:0;background-color:var(--background-color)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:var(--text-color);-webkit-tap-highlight-color:transparent}.page{padding-left:20rem}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:3.6rem;background-color:var(--background-color);box-sizing:border-box;border-bottom:1px solid var(--box-shadow-color)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.vp-sidebar{font-size:16px;background-color:var(--background-color);width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--border-color);overflow-y:auto}.theme-default-content:not(.custom)>*:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;color:#3eaf7c;text-decoration:none}p a code{font-weight:400;color:#3eaf7c}kbd{background:#eee;border:solid .15rem #ddd;border-bottom:solid .25rem #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+pre,.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+.custom-block{margin-top:2rem}h1:focus .header-anchor,h2:focus .header-anchor,h3:focus .header-anchor,h4:focus .header-anchor,h5:focus .header-anchor,h6:focus .header-anchor,h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--border-color)}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}code,kbd,.line-number{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}p,ul,ol{line-height:1.7}hr{border:0;border-top:1px solid var(--border-color)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}th,td{border:1px solid var(--grey14);padding:.6em 1em}.theme-dark tr:nth-child(2n){background-color:#252322}.theme-dark th,.theme-dark td{border:1px solid var(--grey12)}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .vp-sidebar{top:0}@media (min-width: 720px){.theme-container.no-sidebar .vp-sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}::-webkit-scrollbar,Mister-Hope marked this conversation as resolved.{width:6px;height:6px}::-webkit-scrollbar-track-piece{background-color:#0000001a;-webkit-border-radius:6px}::-webkit-scrollbar-thumb:vertical{height:6px;background-color:#3eaf7c;-webkit-border-radius:6px}::-webkit-scrollbar-thumb:horizontal{width:6px;background-color:#3eaf7c;-webkit-border-radius:6px}@media (max-width: 959px){.vp-sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width: 719px){.vp-sidebar{top:0;padding-top:3.6rem;transform:translate(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .vp-sidebar{transform:translate(0)}.theme-container.no-navbar .vp-sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.page{margin-left:10px;margin-right:10px}table p,dd p,li p{margin:0}.content{max-width:840px;margin:0 auto}.content pre{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:#1b1f230d;border-radius:3px}.content .footnote-reference,.content .label,.content .reference{scroll-margin-top:3.6rem}.content a:focus{outline:none}.content:not(.custom){max-width:840px}.content section{scroll-margin-top:4.1rem;margin-bottom:0}.content section:hover .headerlink{opacity:1}h1:hover a.headerlink:after,h2:hover a.headerlink:after,h3:hover a.headerlink:after,h4:hover a.headerlink:after,h5:hover a.headerlink:after,h6:hover a.headerlink:after{visibility:visible;content:"#"}a.headerlink{font-size:.85em;visibility:hidden}a.headerlink:hover{text-decoration:none}ul.page-nav{list-style:none}ul.page-nav li{display:inline-block}.body-header{display:flex}.body-header ul.page-nav{flex-grow:1;list-style:none;list-style-position:inside;text-align:right;margin-right:30px}.body-header ul.page-nav li+li:before{content:"|";padding:0 1em}ul.breadcrumbs{list-style:none}ul.breadcrumbs li{display:inline-block;margin-right:5px}.toc-backref{color:inherit}.contents.topic p.topic-title{display:none}.contents.topic{margin-bottom:3em}aside.sidebar{margin: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:700}div.admonition,div.topic,blockquote{clear:left}pre,div[class*=highlight-]{clear:both}.toctree-wrapper .caption{font-weight:600;line-height:1.25;font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}.footer{clear:both;min-height:2rem;padding-top:1rem;overflow:auto;color:gray;font-size:small;line-height:1.5rem}.content .highlight{border-radius:6px}.content .highlight pre{background-color:inherit}.content .highlighted{background-color:#fbe54e;font-weight:700;padding:0 4px}.admonition{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0;background-color:#e2e2e2;border-color:#787878}.admonition .admonition-title{font-weight:600;margin-bottom:-.4rem}.admonition.tip,.admonition.hint{background-color:#f3f5f7;border-color:#42b983}.admonition.important,.admonition.note{background-color:#e5f1fb;border-color:#5faaea}.admonition.warning,.admonition.caution{background-color:#ffe5644d;border-color:#e7c000;color:#6b5900}.admonition.warning .custom-block-title,.admonition.caution .custom-block-title{color:#b29400}.admonition.warning a,.admonition.caution a{color:var(--text-color)}.admonition.danger,.admonition.error{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.admonition.danger .custom-block-title,.admonition.error .custom-block-title{color:#900}.admonition.danger a,.admonition.error a{color:var(--text-color)}.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:.5em;content:":"}abbr,acronym{border-bottom:dotted 1px;cursor:help}div.topic{border:1px solid #ccc;padding:7px;margin:10px 0;background-color:var(--bg-color)}p.topic-title{font-size:1.1em;font-weight:700;margin-top:10px}a.brackets:before,span.brackets>a:before{content:"["}a.brackets:after,span.brackets>a:after{content:"]"}p.rubric{margin-top:30px;font-weight:700}code,pre,kbd,samp,.pre{font-family:SFMono-Regular,Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace}@media (max-width: 1200px){pre{font-size:.95em}}blockquote{font-size:inherit}blockquote h2{margin-left:1em}.sig .property{color:#4d6a86;padding-right:.25rem}.sig-name.descname{font-size:1.2em;font-weight:700;padding:0 0 3px}.sig-param,.sig-paren{margin-left:.3em}dt{line-height:1.5em;margin-top:1em;font-weight:700}dt.field-odd,dt.field-even,p.rubric{font-size:1.2em;font-weight:700;color:#4d6a86}dd{margin-inline-start:10px}dd.field-odd p strong{margin-left:1em}dl.method,dl.function{margin-top:1em;margin-bottom:2em}.viewcode-link{margin-left:1em;color:#9ad8bc}dl.field-list{display:grid;grid-template-columns:fit-content(30%) auto}dl.field-list dt{margin-top:0}dl.field-list dd{margin-bottom:1em}dl.field-list>dt{font-weight:700;word-break:break-word;padding-left:.5em;padding-right:5px}dl.field-list>dt:after{content:":"}dl.field-list>dd{padding-left:.5em;margin-top:0;margin-left:0;margin-bottom:0}dl{margin-bottom:15px}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,.align-default{text-align:center}.align-right{text-align:right}.content .section,.section{opacity:1!important}.icon.outbound{color:#aaa;display:inline-block}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width: $MQMobile){.sidebar-button{display:block}}.darkmode-switch{position:fixed;bottom:3rem;right:2rem;height:24px;display:flex}.darkmode-switch:hover{cursor:pointer}.darkmode-switch .item{padding:4px;line-height:1;border:1px solid #3eaf7c;border-left:none}.darkmode-switch .item:first-child{border-left:1px solid #3eaf7c}.darkmode-switch .item.day{border-top-left-radius:4px;border-bottom-left-radius:4px}.darkmode-switch .item.night{border-top-right-radius:4px;border-bottom-right-radius:4px}.darkmode-switch .item .icon{width:16px;height:16px;fill:#3eaf7c}.darkmode-switch .item.active{background-color:#3eaf7c}.darkmode-switch .item.active:hover{cursor:default}.darkmode-switch .item.active .icon{fill:var(--white)}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;position:fixed}.navbar a,.navbar span,.navbar img{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--text-color);position:relative}.navbar .links{font-size:.9rem;position:absolute;right:1.5rem;top:.7rem}@media (max-width: 719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.sidebar-button{display:block}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a:hover,.nav-links a.router-link-active{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .repo-link{margin-left:1.5rem}@media (max-width: 719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width: 719px){.nav-links a:hover,.nav-links a.router-link-active{color:var(--text-color)}.nav-item>a:not(.external):hover,.nav-item>a:not(.external).router-link-active{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.vp-sidebar ul{padding:0;margin:0;list-style-type:none}.vp-sidebar a{display:inline-block}.vp-sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.vp-sidebar .nav-links a{font-weight:600}.vp-sidebar .nav-links .nav-item,.vp-sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.vp-sidebar .searchbox{font-weight:600;font-size:1.1em;line-height:1.5rem;padding:1rem 0 1.5rem .75rem;border-bottom:1px solid #eaecef}.vp-sidebar .sidebar-links{padding:1.5rem 0}@media (max-width: 719px){.vp-sidebar .nav-links{display:block}.vp-sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.vp-sidebar .sidebar-links{padding:1rem 0}}.sidebar-group:not(.first){margin-top:1em}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .caption{cursor:auto;color:inherit}.sidebar-group .caption{color:#999;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:0 1.5rem;margin-top:0;margin-bottom:.5rem}.sidebar-group .caption.open,.sidebar-group .caption:hover{color:inherit}.sidebar-group .caption .arrow{position:relative;top:-.12em;left:.5em}.sidebar-group .caption:.open .arrow{top:-.18em}.sidebar-group-items{transition:height .1s ease-out;overflow:hidden}.vp-sidebar .toctree-l1 ul{font-size:.95em}.vp-sidebar .toctree-l1 a,.vp-sidebar .toctree-l2 a{font-weight:400;display:inline-block;color:var(--text-color);line-height:1.4;width:100%;box-sizing:border-box;border-left:.5rem solid transparent}.vp-sidebar .toctree-l1 a.current,.vp-sidebar .toctree-l2 a.current{color:#3eaf7c;font-weight:600}.vp-sidebar .toctree-l1 a:hover,.vp-sidebar .toctree-l2 a:hover{color:#3eaf7c}.vp-sidebar .toctree-l1.current a{border-left:.5rem solid #86d4b1}.vp-sidebar .toctree-l1 a{padding:.35rem 1rem .35rem 1.25rem}.vp-sidebar .toctree-l1 a.current{border-left-color:#3eaf7c}.vp-sidebar .toctree-l2 a{padding:.25rem 1rem .25rem 1.75rem}.page-edit,.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width: 959px){.page-edit,.page-nav{padding:2rem}}@media (max-width: 419px){.page-edit,.page-nav{padding:1.5rem}}.page{padding-top:3.6rem;padding-bottom:2rem}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:var(--text-color, #2c3e50);margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:var(--text-color, #2c3e50)}.page-edit .last-updated .time{font-weight:400;color:#aaa}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}@media (max-width: 719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}} diff --git a/_static/theme.js b/_static/theme.js new file mode 100644 index 000000000..e3b3ce319 --- /dev/null +++ b/_static/theme.js @@ -0,0 +1,38 @@ +(function(){"use strict";/** +* @vue/shared v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function $e(e,t){const n=new Set(e.split(","));return t?s=>n.has(s.toLowerCase()):s=>n.has(s)}const ie={},hn=[],ge=()=>{},ys=()=>!1,Dt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ki=e=>e.startsWith("onUpdate:"),ne=Object.assign,Ri=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},mf=Object.prototype.hasOwnProperty,se=(e,t)=>mf.call(e,t),V=Array.isArray,dn=e=>pn(e)==="[object Map]",Vt=e=>pn(e)==="[object Set]",bo=e=>pn(e)==="[object Date]",gf=e=>pn(e)==="[object RegExp]",W=e=>typeof e=="function",J=e=>typeof e=="string",Ye=e=>typeof e=="symbol",oe=e=>e!==null&&typeof e=="object",Mi=e=>(oe(e)||W(e))&&W(e.then)&&W(e.catch),So=Object.prototype.toString,pn=e=>So.call(e),yf=e=>pn(e).slice(8,-1),vo=e=>pn(e)==="[object Object]",Pi=e=>J(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,yt=$e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_f=$e("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),_s=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},bf=/-(\w)/g,ue=_s(e=>e.replace(bf,(t,n)=>n?n.toUpperCase():"")),Sf=/\B([A-Z])/g,De=_s(e=>e.replace(Sf,"-$1").toLowerCase()),Bt=_s(e=>e.charAt(0).toUpperCase()+e.slice(1)),mn=_s(e=>e?`on${Bt(e)}`:""),Xe=(e,t)=>!Object.is(e,t),gn=(e,t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:n})},Pn=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Ss=e=>{const t=J(e)?Number(e):NaN;return isNaN(t)?e:t};let Eo;const Co=()=>Eo||(Eo=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),vf=$e("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error");function Ln(e){if(V(e)){const t={};for(let n=0;n{if(n){const s=n.split(Cf);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function _t(e){let t="";if(J(e))t=e;else if(V(e))for(let n=0;nbt(n,t))}const Ff=e=>J(e)?e:e==null?"":V(e)||oe(e)&&(e.toString===So||!W(e.toString))?JSON.stringify(e,wo,2):String(e),wo=(e,t)=>t&&t.__v_isRef?wo(e,t.value):dn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,i],r)=>(n[Li(s,r)+" =>"]=i,n),{})}:Vt(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Li(n))}:Ye(t)?Li(t):oe(t)&&!V(t)&&!vo(t)?String(t):t,Li=(e,t="")=>{var n;return Ye(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let Ve;class Fi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Ve,!t&&Ve&&(this.index=(Ve.scopes||(Ve.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=Ve;try{return Ve=this,t()}finally{Ve=n}}}on(){Ve=this}off(){Ve=this.parent}stop(t){if(this._active){let n,s;for(n=0,s=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),Et()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=St,n=Ht;try{return St=!0,Ht=this,this._runnings++,xo(this),this.fn()}finally{Oo(this),this._runnings--,Ht=n,St=t}}stop(){var t;this.active&&(xo(this),Oo(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function Vf(e){return e.value}function xo(e){e._trackId++,e._depsLength=0}function Oo(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{n.dirty&&n.run()});t&&(ne(n,t),t.scope&&No(n,t.scope)),(!t||!t.lazy)&&n.run();const s=n.run.bind(n);return s.effect=n,s}function Hf(e){e.effect.stop()}let St=!0,$i=0;const Ro=[];function vt(){Ro.push(St),St=!1}function Et(){const e=Ro.pop();St=e===void 0?!0:e}function Di(){$i++}function Vi(){for($i--;!$i&&Bi.length;)Bi.shift()()}function Mo(e,t,n){if(t.get(e)!==e._trackId){t.set(e,e._trackId);const s=e.deps[e._depsLength];s!==t?(s&&ko(s,e),e.deps[e._depsLength++]=t):e._depsLength++}}const Bi=[];function Po(e,t,n){Di();for(const s of e.keys()){let i;s._dirtyLevel{const n=new Map;return n.cleanup=e,n.computed=t,n},Es=new WeakMap,Ut=Symbol(""),Hi=Symbol("");function Re(e,t,n){if(St&&Ht){let s=Es.get(e);s||Es.set(e,s=new Map);let i=s.get(n);i||s.set(n,i=Lo(()=>s.delete(n))),Mo(Ht,i)}}function at(e,t,n,s,i,r){const o=Es.get(e);if(!o)return;let l=[];if(t==="clear")l=[...o.values()];else if(n==="length"&&V(e)){const c=Number(s);o.forEach((a,u)=>{(u==="length"||!Ye(u)&&u>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(o.get(n)),t){case"add":V(e)?Pi(n)&&l.push(o.get("length")):(l.push(o.get(Ut)),dn(e)&&l.push(o.get(Hi)));break;case"delete":V(e)||(l.push(o.get(Ut)),dn(e)&&l.push(o.get(Hi)));break;case"set":dn(e)&&l.push(o.get(Ut));break}Di();for(const c of l)c&&Po(c,4);Vi()}function Uf(e,t){var n;return(n=Es.get(e))==null?void 0:n.get(t)}const Kf=$e("__proto__,__v_isRef,__isVue"),Fo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ye)),$o=jf();function jf(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const s=Z(this);for(let r=0,o=this.length;r{e[t]=function(...n){vt(),Di();const s=Z(this)[t].apply(this,n);return Vi(),Et(),s}}),e}function qf(e){const t=Z(this);return Re(t,"has",e),t.hasOwnProperty(e)}class Do{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){const i=this._isReadonly,r=this._isShallow;if(n==="__v_isReactive")return!i;if(n==="__v_isReadonly")return i;if(n==="__v_isShallow")return r;if(n==="__v_raw")return s===(i?r?zo:Go:r?Wo:qo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=V(t);if(!i){if(o&&se($o,n))return Reflect.get($o,n,s);if(n==="hasOwnProperty")return qf}const l=Reflect.get(t,n,s);return(Ye(n)?Fo.has(n):Kf(n))||(i||Re(t,"get",n),r)?l:Se(l)?o&&Pi(n)?l:l.value:oe(l)?i?Ki(l):Os(l):l}}class Vo extends Do{constructor(t=!1){super(!1,t)}set(t,n,s,i){let r=t[n];if(!this._isShallow){const c=jt(r);if(!Fn(s)&&!jt(s)&&(r=Z(r),s=Z(s)),!V(t)&&Se(r)&&!Se(s))return c?!1:(r.value=s,!0)}const o=V(t)&&Pi(n)?Number(n)e,Cs=e=>Reflect.getPrototypeOf(e);function Ts(e,t,n=!1,s=!1){e=e.__v_raw;const i=Z(e),r=Z(t);n||(Xe(t,r)&&Re(i,"get",t),Re(i,"get",r));const{has:o}=Cs(i),l=s?Ui:n?Wi:$n;if(o.call(i,t))return l(e.get(t));if(o.call(i,r))return l(e.get(r));e!==i&&e.get(t)}function As(e,t=!1){const n=this.__v_raw,s=Z(n),i=Z(e);return t||(Xe(e,i)&&Re(s,"has",e),Re(s,"has",i)),e===i?n.has(e):n.has(e)||n.has(i)}function ws(e,t=!1){return e=e.__v_raw,!t&&Re(Z(e),"iterate",Ut),Reflect.get(e,"size",e)}function Ho(e){e=Z(e);const t=Z(this);return Cs(t).has.call(t,e)||(t.add(e),at(t,"add",e,e)),this}function Uo(e,t){t=Z(t);const n=Z(this),{has:s,get:i}=Cs(n);let r=s.call(n,e);r||(e=Z(e),r=s.call(n,e));const o=i.call(n,e);return n.set(e,t),r?Xe(t,o)&&at(n,"set",e,t):at(n,"add",e,t),this}function Ko(e){const t=Z(this),{has:n,get:s}=Cs(t);let i=n.call(t,e);i||(e=Z(e),i=n.call(t,e)),s&&s.call(t,e);const r=t.delete(e);return i&&at(t,"delete",e,void 0),r}function jo(){const e=Z(this),t=e.size!==0,n=e.clear();return t&&at(e,"clear",void 0,void 0),n}function Ns(e,t){return function(s,i){const r=this,o=r.__v_raw,l=Z(o),c=t?Ui:e?Wi:$n;return!e&&Re(l,"iterate",Ut),o.forEach((a,u)=>s.call(i,c(a),c(u),r))}}function Is(e,t,n){return function(...s){const i=this.__v_raw,r=Z(i),o=dn(r),l=e==="entries"||e===Symbol.iterator&&o,c=e==="keys"&&o,a=i[e](...s),u=n?Ui:t?Wi:$n;return!t&&Re(r,"iterate",c?Hi:Ut),{next(){const{value:f,done:d}=a.next();return d?{value:f,done:d}:{value:l?[u(f[0]),u(f[1])]:u(f),done:d}},[Symbol.iterator](){return this}}}}function Ct(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Yf(){const e={get(r){return Ts(this,r)},get size(){return ws(this)},has:As,add:Ho,set:Uo,delete:Ko,clear:jo,forEach:Ns(!1,!1)},t={get(r){return Ts(this,r,!1,!0)},get size(){return ws(this)},has:As,add:Ho,set:Uo,delete:Ko,clear:jo,forEach:Ns(!1,!0)},n={get(r){return Ts(this,r,!0)},get size(){return ws(this,!0)},has(r){return As.call(this,r,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Ns(!0,!1)},s={get(r){return Ts(this,r,!0,!0)},get size(){return ws(this,!0)},has(r){return As.call(this,r,!0)},add:Ct("add"),set:Ct("set"),delete:Ct("delete"),clear:Ct("clear"),forEach:Ns(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(r=>{e[r]=Is(r,!1,!1),n[r]=Is(r,!0,!1),t[r]=Is(r,!1,!0),s[r]=Is(r,!0,!0)}),[e,n,t,s]}const[Xf,Zf,Qf,eu]=Yf();function xs(e,t){const n=t?e?eu:Qf:e?Zf:Xf;return(s,i,r)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?s:Reflect.get(se(n,i)&&i in s?n:s,i,r)}const tu={get:xs(!1,!1)},nu={get:xs(!1,!0)},su={get:xs(!0,!1)},iu={get:xs(!0,!0)},qo=new WeakMap,Wo=new WeakMap,Go=new WeakMap,zo=new WeakMap;function ru(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ou(e){return e.__v_skip||!Object.isExtensible(e)?0:ru(yf(e))}function Os(e){return jt(e)?e:ks(e,!1,Wf,tu,qo)}function Jo(e){return ks(e,!1,zf,nu,Wo)}function Ki(e){return ks(e,!0,Gf,su,Go)}function lu(e){return ks(e,!0,Jf,iu,zo)}function ks(e,t,n,s,i){if(!oe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const r=i.get(e);if(r)return r;const o=ou(e);if(o===0)return e;const l=new Proxy(e,o===2?s:n);return i.set(e,l),l}function Kt(e){return jt(e)?Kt(e.__v_raw):!!(e&&e.__v_isReactive)}function jt(e){return!!(e&&e.__v_isReadonly)}function Fn(e){return!!(e&&e.__v_isShallow)}function ji(e){return Kt(e)||jt(e)}function Z(e){const t=e&&e.__v_raw;return t?Z(t):e}function qi(e){return Object.isExtensible(e)&&bs(e,"__v_skip",!0),e}const $n=e=>oe(e)?Os(e):e,Wi=e=>oe(e)?Ki(e):e;class Yo{constructor(t,n,s,i){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new yn(()=>t(this._value),()=>_n(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=s}get value(){const t=Z(this);return(!t._cacheable||t.effect.dirty)&&Xe(t._value,t._value=t.effect.run())&&_n(t,4),Gi(t),t.effect._dirtyLevel>=2&&_n(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function cu(e,t,n=!1){let s,i;const r=W(e);return r?(s=e,i=ge):(s=e.get,i=e.set),new Yo(s,i,r||!i,n)}function Gi(e){var t;St&&Ht&&(e=Z(e),Mo(Ht,(t=e.dep)!=null?t:e.dep=Lo(()=>e.dep=void 0,e instanceof Yo?e:void 0)))}function _n(e,t=4,n){e=Z(e);const s=e.dep;s&&Po(s,t)}function Se(e){return!!(e&&e.__v_isRef===!0)}function Dn(e){return Xo(e,!1)}function au(e){return Xo(e,!0)}function Xo(e,t){return Se(e)?e:new fu(e,t)}class fu{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:Z(t),this._value=n?t:$n(t)}get value(){return Gi(this),this._value}set value(t){const n=this.__v_isShallow||Fn(t)||jt(t);t=n?t:Z(t),Xe(t,this._rawValue)&&(this._rawValue=t,this._value=n?t:$n(t),_n(this,4))}}function uu(e){_n(e,4)}function zi(e){return Se(e)?e.value:e}function hu(e){return W(e)?e():zi(e)}const du={get:(e,t,n)=>zi(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const i=e[t];return Se(i)&&!Se(n)?(i.value=n,!0):Reflect.set(e,t,n,s)}};function Ji(e){return Kt(e)?e:new Proxy(e,du)}class pu{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:s}=t(()=>Gi(this),()=>_n(this));this._get=n,this._set=s}get value(){return this._get()}set value(t){this._set(t)}}function Zo(e){return new pu(e)}function mu(e){const t=V(e)?new Array(e.length):{};for(const n in e)t[n]=Qo(e,n);return t}class gu{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Uf(Z(this._object),this._key)}}class yu{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function _u(e,t,n){return Se(e)?e:W(e)?new yu(e):oe(e)&&arguments.length>1?Qo(e,t,n):Dn(e)}function Qo(e,t,n){const s=e[t];return Se(s)?s:new gu(e,t,n)}const bu={GET:"get",HAS:"has",ITERATE:"iterate"},Su={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"};/** +* @vue/runtime-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Vn=[];function vg(e,...t){vt();const n=Vn.length?Vn[Vn.length-1].component:null,s=n&&n.appContext.config.warnHandler,i=vu();if(s)st(s,n,11,[e+t.map(r=>{var o,l;return(l=(o=r.toString)==null?void 0:o.call(r))!=null?l:JSON.stringify(r)}).join(""),n&&n.proxy,i.map(({vnode:r})=>`at <${hc(n,r.type)}>`).join(` +`),i]);else{const r=[`[Vue warn]: ${e}`,...t];i.length&&r.push(` +`,...Eu(i)),console.warn(...r)}Et()}function vu(){let e=Vn[Vn.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const s=e.component&&e.component.parent;e=s&&s.vnode}return t}function Eu(e){const t=[];return e.forEach((n,s)=>{t.push(...s===0?[]:[` +`],...Cu(n))}),t}function Cu({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",s=e.component?e.component.parent==null:!1,i=` at <${hc(e.component,e.type,s)}`,r=">"+n;return e.props?[i,...Tu(e.props),r]:[i+r]}function Tu(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...el(s,e[s]))}),n.length>3&&t.push(" ..."),t}function el(e,t,n){return J(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:Se(t)?(t=el(e,Z(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):W(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=Z(t),n?t:[`${e}=`,t])}function Au(e,t){}const wu={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",WATCH_GETTER:2,2:"WATCH_GETTER",WATCH_CALLBACK:3,3:"WATCH_CALLBACK",WATCH_CLEANUP:4,4:"WATCH_CLEANUP",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER"},Nu={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."};function st(e,t,n,s){try{return s?e(...s):e()}catch(i){qt(i,t,n)}}function Be(e,t,n,s){if(W(e)){const r=st(e,t,n,s);return r&&Mi(r)&&r.catch(o=>{qt(o,t,n)}),r}const i=[];for(let r=0;r>>1,i=Ae[s],r=Hn(i);rit&&Ae.splice(t,1)}function Ps(e){V(e)?bn.push(...e):(!Tt||!Tt.includes(e,e.allowRecurse?Wt+1:Wt))&&bn.push(e),nl()}function sl(e,t,n=Bn?it+1:0){for(;nHn(n)-Hn(s));if(bn.length=0,Tt){Tt.push(...t);return}for(Tt=t,Wt=0;Wte.id==null?1/0:e.id,ku=(e,t)=>{const n=Hn(e)-Hn(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function il(e){Yi=!1,Bn=!0,Ae.sort(ku);try{for(it=0;itSn.emit(i,...r)),Fs=[]):typeof window<"u"&&window.HTMLElement&&!((s=(n=window.navigator)==null?void 0:n.userAgent)!=null&&s.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(r=>{rl(r,t)}),setTimeout(()=>{Sn||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Fs=[])},3e3)):Fs=[]}function Ru(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ie;let i=n;const r=t.startsWith("update:"),o=r&&t.slice(7);if(o&&o in s){const u=`${o==="modelValue"?"model":o}Modifiers`,{number:f,trim:d}=s[u]||ie;d&&(i=n.map(g=>J(g)?g.trim():g)),f&&(i=n.map(Pn))}let l,c=s[l=mn(t)]||s[l=mn(ue(t))];!c&&r&&(c=s[l=mn(De(t))]),c&&Be(c,e,6,i);const a=s[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Be(a,e,6,i)}}function ol(e,t,n=!1){const s=t.emitsCache,i=s.get(e);if(i!==void 0)return i;const r=e.emits;let o={},l=!1;if(!W(e)){const c=a=>{const u=ol(a,t,!0);u&&(l=!0,ne(o,u))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!r&&!l?(oe(e)&&s.set(e,null),null):(V(r)?r.forEach(c=>o[c]=null):ne(o,r),oe(e)&&s.set(e,o),o)}function $s(e,t){return!e||!Dt(t)?!1:(t=t.slice(2).replace(/Once$/,""),se(e,t[0].toLowerCase()+t.slice(1))||se(e,De(t))||se(e,t))}let me=null,Ds=null;function Un(e){const t=me;return me=e,Ds=e&&e.type.__scopeId||null,t}function Mu(e){Ds=e}function Pu(){Ds=null}const Lu=e=>Zi;function Zi(e,t=me,n){if(!t||e._n)return e;const s=(...i)=>{s._d&&Cr(-1);const r=Un(t);let o;try{o=e(...i)}finally{Un(r),s._d&&Cr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Eg(){}function Vs(e){const{type:t,vnode:n,proxy:s,withProxy:i,props:r,propsOptions:[o],slots:l,attrs:c,emit:a,render:u,renderCache:f,data:d,setupState:g,ctx:_,inheritAttrs:x}=e;let M,P;const A=Un(e);try{if(n.shapeFlag&4){const y=i||s,S=y;M=He(u.call(S,y,f,r,g,d,_)),P=c}else{const y=t;M=He(y.length>1?y(r,{attrs:c,slots:l,emit:a}):y(r,null)),P=t.props?c:$u(c)}}catch(y){es.length=0,qt(y,e,1),M=ce(we)}let m=M;if(P&&x!==!1){const y=Object.keys(P),{shapeFlag:S}=m;y.length&&S&7&&(o&&y.some(ki)&&(P=Du(P,o)),m=ot(m,P))}return n.dirs&&(m=ot(m),m.dirs=m.dirs?m.dirs.concat(n.dirs):n.dirs),n.transition&&(m.transition=n.transition),M=m,Un(A),M}function Fu(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||Dt(n))&&((t||(t={}))[n]=e[n]);return t},Du=(e,t)=>{const n={};for(const s in e)(!ki(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Vu(e,t,n){const{props:s,children:i,component:r}=e,{props:o,children:l,patchFlag:c}=t,a=r.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?ll(s,o,a):!!o;if(c&8){const u=t.dynamicProps;for(let f=0;fe.__isSuspense;let sr=0;const Ku={name:"Suspense",__isSuspense:!0,process(e,t,n,s,i,r,o,l,c,a){if(e==null)ju(t,n,s,i,r,o,l,c,a);else{if(r&&r.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}qu(e,t,n,s,i,o,l,c,a)}},hydrate:Wu,create:ir,normalize:Gu};function Kn(e,t){const n=e.props&&e.props[t];W(n)&&n()}function ju(e,t,n,s,i,r,o,l,c){const{p:a,o:{createElement:u}}=c,f=u("div"),d=e.suspense=ir(e,i,s,t,f,n,r,o,l,c);a(null,d.pendingBranch=e.ssContent,f,null,s,d,r,o),d.deps>0?(Kn(e,"onPending"),Kn(e,"onFallback"),a(null,e.ssFallback,t,n,s,null,r,o),vn(d,e.ssFallback)):d.resolve(!1,!0)}function qu(e,t,n,s,i,r,o,l,{p:c,um:a,o:{createElement:u}}){const f=t.suspense=e.suspense;f.vnode=t,t.el=e.el;const d=t.ssContent,g=t.ssFallback,{activeBranch:_,pendingBranch:x,isInFallback:M,isHydrating:P}=f;if(x)f.pendingBranch=d,Qe(d,x)?(c(x,d,f.hiddenContainer,null,i,f,r,o,l),f.deps<=0?f.resolve():M&&(P||(c(_,g,n,s,i,null,r,o,l),vn(f,g)))):(f.pendingId=sr++,P?(f.isHydrating=!1,f.activeBranch=x):a(x,i,f),f.deps=0,f.effects.length=0,f.hiddenContainer=u("div"),M?(c(null,d,f.hiddenContainer,null,i,f,r,o,l),f.deps<=0?f.resolve():(c(_,g,n,s,i,null,r,o,l),vn(f,g))):_&&Qe(d,_)?(c(_,d,n,s,i,f,r,o,l),f.resolve(!0)):(c(null,d,f.hiddenContainer,null,i,f,r,o,l),f.deps<=0&&f.resolve()));else if(_&&Qe(d,_))c(_,d,n,s,i,f,r,o,l),vn(f,d);else if(Kn(t,"onPending"),f.pendingBranch=d,d.shapeFlag&512?f.pendingId=d.component.suspenseId:f.pendingId=sr++,c(null,d,f.hiddenContainer,null,i,f,r,o,l),f.deps<=0)f.resolve();else{const{timeout:A,pendingId:m}=f;A>0?setTimeout(()=>{f.pendingId===m&&f.fallback(g)},A):A===0&&f.fallback(g)}}function ir(e,t,n,s,i,r,o,l,c,a,u=!1){const{p:f,m:d,um:g,n:_,o:{parentNode:x,remove:M}}=a;let P;const A=zu(e);A&&t!=null&&t.pendingBranch&&(P=t.pendingId,t.deps++);const m=e.props?Ss(e.props.timeout):void 0,y=r,S={vnode:e,parent:t,parentComponent:n,namespace:o,container:s,hiddenContainer:i,deps:0,pendingId:sr++,timeout:typeof m=="number"?m:-1,activeBranch:null,pendingBranch:null,isInFallback:!u,isHydrating:u,isUnmounted:!1,effects:[],resolve(C=!1,F=!1){const{vnode:b,activeBranch:E,pendingBranch:T,pendingId:k,effects:w,parentComponent:B,container:G}=S;let Q=!1;S.isHydrating?S.isHydrating=!1:C||(Q=E&&T.transition&&T.transition.mode==="out-in",Q&&(E.transition.afterLeave=()=>{k===S.pendingId&&(d(T,G,r===y?_(E):r,0),Ps(w))}),E&&(x(E.el)!==S.hiddenContainer&&(r=_(E)),g(E,B,S,!0)),Q||d(T,G,r,0)),vn(S,T),S.pendingBranch=null,S.isInFallback=!1;let H=S.parent,Y=!1;for(;H;){if(H.pendingBranch){H.effects.push(...w),Y=!0;break}H=H.parent}!Y&&!Q&&Ps(w),S.effects=[],A&&t&&t.pendingBranch&&P===t.pendingId&&(t.deps--,t.deps===0&&!F&&t.resolve()),Kn(b,"onResolve")},fallback(C){if(!S.pendingBranch)return;const{vnode:F,activeBranch:b,parentComponent:E,container:T,namespace:k}=S;Kn(F,"onFallback");const w=_(b),B=()=>{S.isInFallback&&(f(null,C,T,w,E,null,k,l,c),vn(S,C))},G=C.transition&&C.transition.mode==="out-in";G&&(b.transition.afterLeave=B),S.isInFallback=!0,g(b,E,null,!0),G||B()},move(C,F,b){S.activeBranch&&d(S.activeBranch,C,F,b),S.container=C},next(){return S.activeBranch&&_(S.activeBranch)},registerDep(C,F){const b=!!S.pendingBranch;b&&S.deps++;const E=C.vnode.el;C.asyncDep.catch(T=>{qt(T,C,0)}).then(T=>{if(C.isUnmounted||S.isUnmounted||S.pendingId!==C.suspenseId)return;C.asyncResolved=!0;const{vnode:k}=C;xr(C,T,!1),E&&(k.el=E);const w=!E&&C.subTree.el;F(C,k,x(E||C.subTree.el),E?null:_(C.subTree),S,o,c),w&&M(w),Qi(C,k.el),b&&--S.deps===0&&S.resolve()})},unmount(C,F){S.isUnmounted=!0,S.activeBranch&&g(S.activeBranch,n,C,F),S.pendingBranch&&g(S.pendingBranch,n,C,F)}};return S}function Wu(e,t,n,s,i,r,o,l,c){const a=t.suspense=ir(t,s,n,e.parentNode,document.createElement("div"),null,i,r,o,l,!0),u=c(e,a.pendingBranch=t.ssContent,n,a,r,o);return a.deps===0&&a.resolve(!1,!0),u}function Gu(e){const{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=ul(s?n.default:n),e.ssFallback=s?ul(n.fallback):ce(we)}function ul(e){let t;if(W(e)){const n=Qt&&e._c;n&&(e._d=!1,Ze()),e=e(),n&&(e._d=!0,t=Me,tc())}return V(e)&&(e=Fu(e)),e=He(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function hl(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):Ps(e)}function vn(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e;let i=t.el;for(;!i&&t.component;)t=t.component.subTree,i=t.el;n.el=i,s&&s.subTree===n&&(s.vnode.el=i,Qi(s,i))}function zu(e){var t;return((t=e.props)==null?void 0:t.suspensible)!=null&&e.props.suspensible!==!1}const dl=Symbol.for("v-scx"),pl=()=>Zn(dl);function Ju(e,t){return qn(e,null,t)}function ml(e,t){return qn(e,null,{flush:"post"})}function gl(e,t){return qn(e,null,{flush:"sync"})}const Bs={};function jn(e,t,n){return qn(e,t,n)}function qn(e,t,{immediate:n,deep:s,flush:i,once:r,onTrack:o,onTrigger:l}=ie){if(t&&r){const C=t;t=(...F)=>{C(...F),S()}}const c=ye,a=C=>s===!0?C:Gt(C,s===!1?1:void 0);let u,f=!1,d=!1;if(Se(e)?(u=()=>e.value,f=Fn(e)):Kt(e)?(u=()=>a(e),f=!0):V(e)?(d=!0,f=e.some(C=>Kt(C)||Fn(C)),u=()=>e.map(C=>{if(Se(C))return C.value;if(Kt(C))return a(C);if(W(C))return st(C,c,2)})):W(e)?t?u=()=>st(e,c,2):u=()=>(g&&g(),Be(e,c,3,[_])):u=ge,t&&s){const C=u;u=()=>Gt(C())}let g,_=C=>{g=m.onStop=()=>{st(C,c,4),g=m.onStop=void 0}},x;if(ts)if(_=ge,t?n&&Be(t,c,3,[u(),d?[]:void 0,_]):u(),i==="sync"){const C=pl();x=C.__watcherHandles||(C.__watcherHandles=[])}else return ge;let M=d?new Array(e.length).fill(Bs):Bs;const P=()=>{if(!(!m.active||!m.dirty))if(t){const C=m.run();(s||f||(d?C.some((F,b)=>Xe(F,M[b])):Xe(C,M)))&&(g&&g(),Be(t,c,3,[C,M===Bs?void 0:d&&M[0]===Bs?[]:M,_]),M=C)}else m.run()};P.allowRecurse=!!t;let A;i==="sync"?A=P:i==="post"?A=()=>Ee(P,c&&c.suspense):(P.pre=!0,c&&(P.id=c.uid),A=()=>Ms(P));const m=new yn(u,ge,A),y=Io(),S=()=>{m.stop(),y&&Ri(y.effects,m)};return t?n?P():M=m.run():i==="post"?Ee(m.run.bind(m),c&&c.suspense):m.run(),x&&x.push(S),S}function Yu(e,t,n){const s=this.proxy,i=J(e)?e.includes(".")?yl(s,e):()=>s[e]:e.bind(s,s);let r;W(t)?r=t:(r=t.handler,n=t);const o=en(this),l=qn(i,r.bind(s),n);return o(),l}function yl(e,t){const n=t.split(".");return()=>{let s=e;for(let i=0;i0){if(n>=t)return e;n++}if(s=s||new Set,s.has(e))return e;if(s.add(e),Se(e))Gt(e.value,t,n,s);else if(V(e))for(let i=0;i{Gt(i,t,n,s)});else if(vo(e))for(const i in e)Gt(e[i],t,n,s);return e}function Xu(e,t){if(me===null)return e;const n=ni(me)||me.proxy,s=e.dirs||(e.dirs=[]);for(let i=0;i{e.isMounted=!0}),qs(()=>{e.isUnmounting=!0}),e}const We=[Function,Array],or={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:We,onEnter:We,onAfterEnter:We,onEnterCancelled:We,onBeforeLeave:We,onLeave:We,onAfterLeave:We,onLeaveCancelled:We,onBeforeAppear:We,onAppear:We,onAfterAppear:We,onAppearCancelled:We},_l={name:"BaseTransition",props:or,setup(e,{slots:t}){const n=ut(),s=rr();return()=>{const i=t.default&&Us(t.default(),!0);if(!i||!i.length)return;let r=i[0];if(i.length>1){for(const d of i)if(d.type!==we){r=d;break}}const o=Z(e),{mode:l}=o;if(s.isLeaving)return lr(r);const c=Sl(r);if(!c)return lr(r);const a=En(c,o,s,n);zt(c,a);const u=n.subTree,f=u&&Sl(u);if(f&&f.type!==we&&!Qe(c,f)){const d=En(f,o,s,n);if(zt(f,d),l==="out-in")return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},lr(r);l==="in-out"&&c.type!==we&&(d.delayLeave=(g,_,x)=>{const M=bl(s,f);M[String(f.key)]=f,g[At]=()=>{_(),g[At]=void 0,delete a.delayedLeave},a.delayedLeave=x})}return r}}};function bl(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function En(e,t,n,s){const{appear:i,mode:r,persisted:o=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:a,onEnterCancelled:u,onBeforeLeave:f,onLeave:d,onAfterLeave:g,onLeaveCancelled:_,onBeforeAppear:x,onAppear:M,onAfterAppear:P,onAppearCancelled:A}=t,m=String(e.key),y=bl(n,e),S=(b,E)=>{b&&Be(b,s,9,E)},C=(b,E)=>{const T=E[1];S(b,E),V(b)?b.every(k=>k.length<=1)&&T():b.length<=1&&T()},F={mode:r,persisted:o,beforeEnter(b){let E=l;if(!n.isMounted)if(i)E=x||l;else return;b[At]&&b[At](!0);const T=y[m];T&&Qe(e,T)&&T.el[At]&&T.el[At](),S(E,[b])},enter(b){let E=c,T=a,k=u;if(!n.isMounted)if(i)E=M||c,T=P||a,k=A||u;else return;let w=!1;const B=b[Hs]=G=>{w||(w=!0,G?S(k,[b]):S(T,[b]),F.delayedLeave&&F.delayedLeave(),b[Hs]=void 0)};E?C(E,[b,B]):B()},leave(b,E){const T=String(e.key);if(b[Hs]&&b[Hs](!0),n.isUnmounting)return E();S(f,[b]);let k=!1;const w=b[At]=B=>{k||(k=!0,E(),B?S(_,[b]):S(g,[b]),b[At]=void 0,y[T]===e&&delete y[T])};y[T]=e,d?C(d,[b,w]):w()},clone(b){return En(b,t,n,s)}};return F}function lr(e){if(Wn(e))return e=ot(e),e.children=null,e}function Sl(e){return Wn(e)?e.children?e.children[0]:void 0:e}function zt(e,t){e.shapeFlag&6&&e.component?zt(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Us(e,t=!1,n){let s=[],i=0;for(let r=0;r1)for(let r=0;r!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function Zu(e){W(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:i=200,timeout:r,suspensible:o=!0,onError:l}=e;let c=null,a,u=0;const f=()=>(u++,c=null,d()),d=()=>{let g;return c||(g=c=t().catch(_=>{if(_=_ instanceof Error?_:new Error(String(_)),l)return new Promise((x,M)=>{l(_,()=>x(f()),()=>M(_),u+1)});throw _}).then(_=>g!==c&&c?c:(_&&(_.__esModule||_[Symbol.toStringTag]==="Module")&&(_=_.default),a=_,_)))};return cr({name:"AsyncComponentWrapper",__asyncLoader:d,get __asyncResolved(){return a},setup(){const g=ye;if(a)return()=>ar(a,g);const _=A=>{c=null,qt(A,g,13,!s)};if(o&&g.suspense||ts)return d().then(A=>()=>ar(A,g)).catch(A=>(_(A),()=>s?ce(s,{error:A}):null));const x=Dn(!1),M=Dn(),P=Dn(!!i);return i&&setTimeout(()=>{P.value=!1},i),r!=null&&setTimeout(()=>{if(!x.value&&!M.value){const A=new Error(`Async component timed out after ${r}ms.`);_(A),M.value=A}},r),d().then(()=>{x.value=!0,g.parent&&Wn(g.parent.vnode)&&(g.parent.effect.dirty=!0,Ms(g.parent.update))}).catch(A=>{_(A),M.value=A}),()=>{if(x.value&&a)return ar(a,g);if(M.value&&s)return ce(s,{error:M.value});if(n&&!P.value)return ce(n)}}})}function ar(e,t){const{ref:n,props:s,children:i,ce:r}=t.vnode,o=ce(e,s,i);return o.ref=n,o.ce=r,delete t.vnode.ce,o}const Wn=e=>e.type.__isKeepAlive,Qu={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=ut(),s=n.ctx;if(!s.renderer)return()=>{const A=t.default&&t.default();return A&&A.length===1?A[0]:A};const i=new Map,r=new Set;let o=null;const l=n.suspense,{renderer:{p:c,m:a,um:u,o:{createElement:f}}}=s,d=f("div");s.activate=(A,m,y,S,C)=>{const F=A.component;a(A,m,y,0,l),c(F.vnode,A,m,y,F,l,S,A.slotScopeIds,C),Ee(()=>{F.isDeactivated=!1,F.a&&gn(F.a);const b=A.props&&A.props.onVnodeMounted;b&&Pe(b,F.parent,A)},l)},s.deactivate=A=>{const m=A.component;a(A,d,null,1,l),Ee(()=>{m.da&&gn(m.da);const y=A.props&&A.props.onVnodeUnmounted;y&&Pe(y,m.parent,A),m.isDeactivated=!0},l)};function g(A){fr(A),u(A,n,l,!0)}function _(A){i.forEach((m,y)=>{const S=si(m.type);S&&(!A||!A(S))&&x(y)})}function x(A){const m=i.get(A);!o||!Qe(m,o)?g(m):o&&fr(o),i.delete(A),r.delete(A)}jn(()=>[e.include,e.exclude],([A,m])=>{A&&_(y=>Gn(A,y)),m&&_(y=>!Gn(m,y))},{flush:"post",deep:!0});let M=null;const P=()=>{M!=null&&i.set(M,ur(n.subTree))};return zn(P),js(P),qs(()=>{i.forEach(A=>{const{subTree:m,suspense:y}=n,S=ur(m);if(A.type===S.type&&A.key===S.key){fr(S);const C=S.component.da;C&&Ee(C,y);return}g(A)})}),()=>{if(M=null,!t.default)return null;const A=t.default(),m=A[0];if(A.length>1)return o=null,A;if(!It(m)||!(m.shapeFlag&4)&&!(m.shapeFlag&128))return o=null,m;let y=ur(m);const S=y.type,C=si(Jt(y)?y.type.__asyncResolved||{}:S),{include:F,exclude:b,max:E}=e;if(F&&(!C||!Gn(F,C))||b&&C&&Gn(b,C))return o=y,m;const T=y.key==null?S:y.key,k=i.get(T);return y.el&&(y=ot(y),m.shapeFlag&128&&(m.ssContent=y)),M=T,k?(y.el=k.el,y.component=k.component,y.transition&&zt(y,y.transition),y.shapeFlag|=512,r.delete(T),r.add(T)):(r.add(T),E&&r.size>parseInt(E,10)&&x(r.values().next().value)),y.shapeFlag|=256,o=y,fl(m.type)?m:y}}};function Gn(e,t){return V(e)?e.some(n=>Gn(n,t)):J(e)?e.split(",").includes(t):gf(e)?e.test(t):!1}function vl(e,t){Cl(e,"a",t)}function El(e,t){Cl(e,"da",t)}function Cl(e,t,n=ye){const s=e.__wdc||(e.__wdc=()=>{let i=n;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Ks(t,s,n),n){let i=n.parent;for(;i&&i.parent;)Wn(i.parent.vnode)&&eh(s,t,n,i),i=i.parent}}function eh(e,t,n,s){const i=Ks(t,e,s,!0);Ws(()=>{Ri(s[t],i)},n)}function fr(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ur(e){return e.shapeFlag&128?e.ssContent:e}function Ks(e,t,n=ye,s=!1){if(n){const i=n[e]||(n[e]=[]),r=t.__weh||(t.__weh=(...o)=>{if(n.isUnmounted)return;vt();const l=en(n),c=Be(t,n,e,o);return l(),Et(),c});return s?i.unshift(r):i.push(r),r}}const ft=e=>(t,n=ye)=>(!ts||e==="sp")&&Ks(e,(...s)=>t(...s),n),Tl=ft("bm"),zn=ft("m"),Al=ft("bu"),js=ft("u"),qs=ft("bum"),Ws=ft("um"),wl=ft("sp"),Nl=ft("rtg"),Il=ft("rtc");function xl(e,t=ye){Ks("ec",e,t)}function th(e,t,n,s){let i;const r=n&&n[s];if(V(e)||J(e)){i=new Array(e.length);for(let o=0,l=e.length;ot(o,l,void 0,r&&r[l]));else{const o=Object.keys(e);i=new Array(o.length);for(let l=0,c=o.length;l{const r=s.fn(...i);return r&&(r.key=s.key),r}:s.fn)}return e}function Cn(e,t,n={},s,i){if(me.isCE||me.parent&&Jt(me.parent)&&me.parent.isCE)return t!=="default"&&(n.name=t),ce("slot",n,s&&s());let r=e[t];r&&r._c&&(r._d=!1),Ze();const o=r&&Ol(r(n)),l=Tr(Ce,{key:n.key||o&&o.key||`_${t}`},o||(s?s():[]),o&&e._===1?64:-2);return!i&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),r&&r._c&&(r._d=!0),l}function Ol(e){return e.some(t=>It(t)?!(t.type===we||t.type===Ce&&!Ol(t.children)):!0)?e:null}function sh(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:mn(s)]=e[s];return n}const hr=e=>e?lc(e)?ni(e)||e.proxy:hr(e.parent):null,Jn=ne(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>hr(e.parent),$root:e=>hr(e.root),$emit:e=>e.emit,$options:e=>gr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Ms(e.update)}),$nextTick:e=>e.n||(e.n=Rs.bind(e.proxy)),$watch:e=>Yu.bind(e)}),dr=(e,t)=>e!==ie&&!e.__isScriptSetup&&se(e,t),pr={get({_:e},t){const{ctx:n,setupState:s,data:i,props:r,accessCache:o,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const g=o[t];if(g!==void 0)switch(g){case 1:return s[t];case 2:return i[t];case 4:return n[t];case 3:return r[t]}else{if(dr(s,t))return o[t]=1,s[t];if(i!==ie&&se(i,t))return o[t]=2,i[t];if((a=e.propsOptions[0])&&se(a,t))return o[t]=3,r[t];if(n!==ie&&se(n,t))return o[t]=4,n[t];mr&&(o[t]=0)}}const u=Jn[t];let f,d;if(u)return t==="$attrs"&&Re(e,"get",t),u(e);if((f=l.__cssModules)&&(f=f[t]))return f;if(n!==ie&&se(n,t))return o[t]=4,n[t];if(d=c.config.globalProperties,se(d,t))return d[t]},set({_:e},t,n){const{data:s,setupState:i,ctx:r}=e;return dr(i,t)?(i[t]=n,!0):s!==ie&&se(s,t)?(s[t]=n,!0):se(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(r[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:i,propsOptions:r}},o){let l;return!!n[o]||e!==ie&&se(e,o)||dr(t,o)||(l=r[0])&&se(l,o)||se(s,o)||se(Jn,o)||se(i.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:se(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},ih=ne({},pr,{get(e,t){if(t!==Symbol.unscopables)return pr.get(e,t,e)},has(e,t){return t[0]!=="_"&&!vf(t)}});function rh(){return null}function oh(){return null}function lh(e){}function ch(e){}function ah(){return null}function fh(){}function uh(e,t){return null}function hh(){return kl().slots}function dh(){return kl().attrs}function kl(){const e=ut();return e.setupContext||(e.setupContext=uc(e))}function Yn(e){return V(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function ph(e,t){const n=Yn(e);for(const s in t){if(s.startsWith("__skip"))continue;let i=n[s];i?V(i)||W(i)?i=n[s]={type:i,default:t[s]}:i.default=t[s]:i===null&&(i=n[s]={default:t[s]}),i&&t[`__skip_${s}`]&&(i.skipFactory=!0)}return n}function mh(e,t){return!e||!t?e||t:V(e)&&V(t)?e.concat(t):ne({},Yn(e),Yn(t))}function gh(e,t){const n={};for(const s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n}function yh(e){const t=ut();let n=e();return Ir(),Mi(n)&&(n=n.catch(s=>{throw en(t),s})),[n,()=>en(t)]}let mr=!0;function _h(e){const t=gr(e),n=e.proxy,s=e.ctx;mr=!1,t.beforeCreate&&Rl(t.beforeCreate,e,"bc");const{data:i,computed:r,methods:o,watch:l,provide:c,inject:a,created:u,beforeMount:f,mounted:d,beforeUpdate:g,updated:_,activated:x,deactivated:M,beforeDestroy:P,beforeUnmount:A,destroyed:m,unmounted:y,render:S,renderTracked:C,renderTriggered:F,errorCaptured:b,serverPrefetch:E,expose:T,inheritAttrs:k,components:w,directives:B,filters:G}=t;if(a&&bh(a,s,null),o)for(const Y in o){const K=o[Y];W(K)&&(s[Y]=K.bind(n))}if(i){const Y=i.call(n,n);oe(Y)&&(e.data=Os(Y))}if(mr=!0,r)for(const Y in r){const K=r[Y],je=W(K)?K.bind(n,n):W(K.get)?K.get.bind(n,n):ge,$t=!W(K)&&W(K.set)?K.set.bind(n):ge,un=dc({get:je,set:$t});Object.defineProperty(s,Y,{enumerable:!0,configurable:!0,get:()=>un.value,set:lt=>un.value=lt})}if(l)for(const Y in l)Ml(l[Y],s,n,Y);if(c){const Y=W(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(K=>{$l(K,Y[K])})}u&&Rl(u,e,"c");function H(Y,K){V(K)?K.forEach(je=>Y(je.bind(n))):K&&Y(K.bind(n))}if(H(Tl,f),H(zn,d),H(Al,g),H(js,_),H(vl,x),H(El,M),H(xl,b),H(Il,C),H(Nl,F),H(qs,A),H(Ws,y),H(wl,E),V(T))if(T.length){const Y=e.exposed||(e.exposed={});T.forEach(K=>{Object.defineProperty(Y,K,{get:()=>n[K],set:je=>n[K]=je})})}else e.exposed||(e.exposed={});S&&e.render===ge&&(e.render=S),k!=null&&(e.inheritAttrs=k),w&&(e.components=w),B&&(e.directives=B)}function bh(e,t,n=ge){V(e)&&(e=yr(e));for(const s in e){const i=e[s];let r;oe(i)?"default"in i?r=Zn(i.from||s,i.default,!0):r=Zn(i.from||s):r=Zn(i),Se(r)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>r.value,set:o=>r.value=o}):t[s]=r}}function Rl(e,t,n){Be(V(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Ml(e,t,n,s){const i=s.includes(".")?yl(n,s):()=>n[s];if(J(e)){const r=t[e];W(r)&&jn(i,r)}else if(W(e))jn(i,e.bind(n));else if(oe(e))if(V(e))e.forEach(r=>Ml(r,t,n,s));else{const r=W(e.handler)?e.handler.bind(n):t[e.handler];W(r)&&jn(i,r,e)}}function gr(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:i,optionsCache:r,config:{optionMergeStrategies:o}}=e.appContext,l=r.get(t);let c;return l?c=l:!i.length&&!n&&!s?c=t:(c={},i.length&&i.forEach(a=>Gs(c,a,o,!0)),Gs(c,t,o)),oe(t)&&r.set(t,c),c}function Gs(e,t,n,s=!1){const{mixins:i,extends:r}=t;r&&Gs(e,r,n,!0),i&&i.forEach(o=>Gs(e,o,n,!0));for(const o in t)if(!(s&&o==="expose")){const l=Sh[o]||n&&n[o];e[o]=l?l(e[o],t[o]):t[o]}return e}const Sh={data:Pl,props:Ll,emits:Ll,methods:Xn,computed:Xn,beforeCreate:ke,created:ke,beforeMount:ke,mounted:ke,beforeUpdate:ke,updated:ke,beforeDestroy:ke,beforeUnmount:ke,destroyed:ke,unmounted:ke,activated:ke,deactivated:ke,errorCaptured:ke,serverPrefetch:ke,components:Xn,directives:Xn,watch:Eh,provide:Pl,inject:vh};function Pl(e,t){return t?e?function(){return ne(W(e)?e.call(this,this):e,W(t)?t.call(this,this):t)}:t:e}function vh(e,t){return Xn(yr(e),yr(t))}function yr(e){if(V(e)){const t={};for(let n=0;n1)return n&&W(t)?t.call(s&&s.proxy):t}}function Ah(){return!!(ye||me||Tn)}function wh(e,t,n,s=!1){const i={},r={};bs(r,Zs,1),e.propsDefaults=Object.create(null),Dl(e,t,i,r);for(const o in e.propsOptions[0])o in i||(i[o]=void 0);n?e.props=s?i:Jo(i):e.type.props?e.props=i:e.props=r,e.attrs=r}function Nh(e,t,n,s){const{props:i,attrs:r,vnode:{patchFlag:o}}=e,l=Z(i),[c]=e.propsOptions;let a=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let f=0;f{c=!0;const[d,g]=Vl(f,t,!0);ne(o,d),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!r&&!c)return oe(e)&&s.set(e,hn),hn;if(V(r))for(let u=0;u-1,g[1]=x<0||_-1||se(g,"default"))&&l.push(f)}}}const a=[o,l];return oe(e)&&s.set(e,a),a}function Bl(e){return e[0]!=="$"&&!yt(e)}function Hl(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function Ul(e,t){return Hl(e)===Hl(t)}function Kl(e,t){return V(t)?t.findIndex(n=>Ul(n,e)):W(t)&&Ul(t,e)?0:-1}const jl=e=>e[0]==="_"||e==="$stable",br=e=>V(e)?e.map(He):[He(e)],Ih=(e,t,n)=>{if(t._n)return t;const s=Zi((...i)=>br(t(...i)),n);return s._c=!1,s},ql=(e,t,n)=>{const s=e._ctx;for(const i in e){if(jl(i))continue;const r=e[i];if(W(r))t[i]=Ih(i,r,s);else if(r!=null){const o=br(r);t[i]=()=>o}}},Wl=(e,t)=>{const n=br(t);e.slots.default=()=>n},xh=(e,t)=>{if(e.vnode.shapeFlag&32){const n=t._;n?(e.slots=Z(t),bs(t,"_",n)):ql(t,e.slots={})}else e.slots={},t&&Wl(e,t);bs(e.slots,Zs,1)},Oh=(e,t,n)=>{const{vnode:s,slots:i}=e;let r=!0,o=ie;if(s.shapeFlag&32){const l=t._;l?n&&l===1?r=!1:(ne(i,t),!n&&l===1&&delete i._):(r=!t.$stable,ql(t,i)),o=t}else t&&(Wl(e,t),o={default:1});if(r)for(const l in i)!jl(l)&&o[l]==null&&delete i[l]};function zs(e,t,n,s,i=!1){if(V(e)){e.forEach((d,g)=>zs(d,t&&(V(t)?t[g]:t),n,s,i));return}if(Jt(s)&&!i)return;const r=s.shapeFlag&4?ni(s.component)||s.component.proxy:s.el,o=i?null:r,{i:l,r:c}=e,a=t&&t.r,u=l.refs===ie?l.refs={}:l.refs,f=l.setupState;if(a!=null&&a!==c&&(J(a)?(u[a]=null,se(f,a)&&(f[a]=null)):Se(a)&&(a.value=null)),W(c))st(c,l,12,[o,u]);else{const d=J(c),g=Se(c);if(d||g){const _=()=>{if(e.f){const x=d?se(f,c)?f[c]:u[c]:c.value;i?V(x)&&Ri(x,r):V(x)?x.includes(r)||x.push(r):d?(u[c]=[r],se(f,c)&&(f[c]=u[c])):(c.value=[r],e.k&&(u[e.k]=c.value))}else d?(u[c]=o,se(f,c)&&(f[c]=o)):g&&(c.value=o,e.k&&(u[e.k]=o))};o?(_.id=-1,Ee(_,n)):_()}}}let wt=!1;const kh=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Rh=e=>e.namespaceURI.includes("MathML"),Js=e=>{if(kh(e))return"svg";if(Rh(e))return"mathml"},Ys=e=>e.nodeType===8;function Mh(e){const{mt:t,p:n,o:{patchProp:s,createText:i,nextSibling:r,parentNode:o,remove:l,insert:c,createComment:a}}=e,u=(m,y)=>{if(!y.hasChildNodes()){n(null,m,y),Ls(),y._vnode=m;return}wt=!1,f(y.firstChild,m,null,null,null),Ls(),y._vnode=m,wt&&console.error("Hydration completed but contains mismatches.")},f=(m,y,S,C,F,b=!1)=>{const E=Ys(m)&&m.data==="[",T=()=>x(m,y,S,C,F,E),{type:k,ref:w,shapeFlag:B,patchFlag:G}=y;let Q=m.nodeType;y.el=m,G===-2&&(b=!1,y.dynamicChildren=null);let H=null;switch(k){case Xt:Q!==3?y.children===""?(c(y.el=i(""),o(m),m),H=m):H=T():(m.data!==y.children&&(wt=!0,m.data=y.children),H=r(m));break;case we:A(m)?(H=r(m),P(y.el=m.content.firstChild,m,S)):Q!==8||E?H=T():H=r(m);break;case Zt:if(E&&(m=r(m),Q=m.nodeType),Q===1||Q===3){H=m;const Y=!y.children.length;for(let K=0;K{b=b||!!y.dynamicChildren;const{type:E,props:T,patchFlag:k,shapeFlag:w,dirs:B,transition:G}=y,Q=E==="input"||E==="option";if(Q||k!==-1){B&&rt(y,null,S,"created");let H=!1;if(A(m)){H=Yl(C,G)&&S&&S.vnode.props&&S.vnode.props.appear;const K=m.content.firstChild;H&&G.beforeEnter(K),P(K,m,S),y.el=m=K}if(w&16&&!(T&&(T.innerHTML||T.textContent))){let K=g(m.firstChild,y,m,S,C,F,b);for(;K;){wt=!0;const je=K;K=K.nextSibling,l(je)}}else w&8&&m.textContent!==y.children&&(wt=!0,m.textContent=y.children);if(T)if(Q||!b||k&48)for(const K in T)(Q&&(K.endsWith("value")||K==="indeterminate")||Dt(K)&&!yt(K)||K[0]===".")&&s(m,K,null,T[K],void 0,void 0,S);else T.onClick&&s(m,"onClick",null,T.onClick,void 0,void 0,S);let Y;(Y=T&&T.onVnodeBeforeMount)&&Pe(Y,S,y),B&&rt(y,null,S,"beforeMount"),((Y=T&&T.onVnodeMounted)||B||H)&&hl(()=>{Y&&Pe(Y,S,y),H&&G.enter(m),B&&rt(y,null,S,"mounted")},C)}return m.nextSibling},g=(m,y,S,C,F,b,E)=>{E=E||!!y.dynamicChildren;const T=y.children,k=T.length;for(let w=0;w{const{slotScopeIds:E}=y;E&&(F=F?F.concat(E):E);const T=o(m),k=g(r(m),y,T,S,C,F,b);return k&&Ys(k)&&k.data==="]"?r(y.anchor=k):(wt=!0,c(y.anchor=a("]"),T,k),k)},x=(m,y,S,C,F,b)=>{if(wt=!0,y.el=null,b){const k=M(m);for(;;){const w=r(m);if(w&&w!==k)l(w);else break}}const E=r(m),T=o(m);return l(m),n(null,y,T,E,S,C,Js(T),F),E},M=(m,y="[",S="]")=>{let C=0;for(;m;)if(m=r(m),m&&Ys(m)&&(m.data===y&&C++,m.data===S)){if(C===0)return r(m);C--}return m},P=(m,y,S)=>{const C=y.parentNode;C&&C.replaceChild(m,y);let F=S;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=m),F=F.parent},A=m=>m.nodeType===1&&m.tagName.toLowerCase()==="template";return[u,f]}const Ee=hl;function Gl(e){return Jl(e)}function zl(e){return Jl(e,Mh)}function Jl(e,t){const n=Co();n.__VUE__=!0;const{insert:s,remove:i,patchProp:r,createElement:o,createText:l,createComment:c,setText:a,setElementText:u,parentNode:f,nextSibling:d,setScopeId:g=ge,insertStaticContent:_}=e,x=(h,p,v,N=null,I=null,L=null,D=void 0,R=null,$=!!p.dynamicChildren)=>{if(h===p)return;h&&!Qe(h,p)&&(N=Oi(h),lt(h,I,L,!0),h=null),p.patchFlag===-2&&($=!1,p.dynamicChildren=null);const{type:O,ref:U,shapeFlag:q}=p;switch(O){case Xt:M(h,p,v,N);break;case we:P(h,p,v,N);break;case Zt:h==null&&A(p,v,N,D);break;case Ce:w(h,p,v,N,I,L,D,R,$);break;default:q&1?S(h,p,v,N,I,L,D,R,$):q&6?B(h,p,v,N,I,L,D,R,$):(q&64||q&128)&&O.process(h,p,v,N,I,L,D,R,$,Rn)}U!=null&&I&&zs(U,h&&h.ref,L,p||h,!p)},M=(h,p,v,N)=>{if(h==null)s(p.el=l(p.children),v,N);else{const I=p.el=h.el;p.children!==h.children&&a(I,p.children)}},P=(h,p,v,N)=>{h==null?s(p.el=c(p.children||""),v,N):p.el=h.el},A=(h,p,v,N)=>{[h.el,h.anchor]=_(h.children,p,v,N,h.el,h.anchor)},m=({el:h,anchor:p},v,N)=>{let I;for(;h&&h!==p;)I=d(h),s(h,v,N),h=I;s(p,v,N)},y=({el:h,anchor:p})=>{let v;for(;h&&h!==p;)v=d(h),i(h),h=v;i(p)},S=(h,p,v,N,I,L,D,R,$)=>{p.type==="svg"?D="svg":p.type==="math"&&(D="mathml"),h==null?C(p,v,N,I,L,D,R,$):E(h,p,I,L,D,R,$)},C=(h,p,v,N,I,L,D,R)=>{let $,O;const{props:U,shapeFlag:q,transition:j,dirs:z}=h;if($=h.el=o(h.type,L,U&&U.is,U),q&8?u($,h.children):q&16&&b(h.children,$,null,N,I,Sr(h,L),D,R),z&&rt(h,null,N,"created"),F($,h,h.scopeId,D,N),U){for(const le in U)le!=="value"&&!yt(le)&&r($,le,null,U[le],L,h.children,N,I,gt);"value"in U&&r($,"value",null,U.value,L),(O=U.onVnodeBeforeMount)&&Pe(O,N,h)}z&&rt(h,null,N,"beforeMount");const ee=Yl(I,j);ee&&j.beforeEnter($),s($,p,v),((O=U&&U.onVnodeMounted)||ee||z)&&Ee(()=>{O&&Pe(O,N,h),ee&&j.enter($),z&&rt(h,null,N,"mounted")},I)},F=(h,p,v,N,I)=>{if(v&&g(h,v),N)for(let L=0;L{for(let O=$;O{const R=p.el=h.el;let{patchFlag:$,dynamicChildren:O,dirs:U}=p;$|=h.patchFlag&16;const q=h.props||ie,j=p.props||ie;let z;if(v&&Yt(v,!1),(z=j.onVnodeBeforeUpdate)&&Pe(z,v,p,h),U&&rt(p,h,v,"beforeUpdate"),v&&Yt(v,!0),O?T(h.dynamicChildren,O,R,v,N,Sr(p,I),L):D||K(h,p,R,null,v,N,Sr(p,I),L,!1),$>0){if($&16)k(R,p,q,j,v,N,I);else if($&2&&q.class!==j.class&&r(R,"class",null,j.class,I),$&4&&r(R,"style",q.style,j.style,I),$&8){const ee=p.dynamicProps;for(let le=0;le{z&&Pe(z,v,p,h),U&&rt(p,h,v,"updated")},N)},T=(h,p,v,N,I,L,D)=>{for(let R=0;R{if(v!==N){if(v!==ie)for(const R in v)!yt(R)&&!(R in N)&&r(h,R,v[R],null,D,p.children,I,L,gt);for(const R in N){if(yt(R))continue;const $=N[R],O=v[R];$!==O&&R!=="value"&&r(h,R,O,$,D,p.children,I,L,gt)}"value"in N&&r(h,"value",v.value,N.value,D)}},w=(h,p,v,N,I,L,D,R,$)=>{const O=p.el=h?h.el:l(""),U=p.anchor=h?h.anchor:l("");let{patchFlag:q,dynamicChildren:j,slotScopeIds:z}=p;z&&(R=R?R.concat(z):z),h==null?(s(O,v,N),s(U,v,N),b(p.children||[],v,U,I,L,D,R,$)):q>0&&q&64&&j&&h.dynamicChildren?(T(h.dynamicChildren,j,v,I,L,D,R),(p.key!=null||I&&p===I.subTree)&&vr(h,p,!0)):K(h,p,v,U,I,L,D,R,$)},B=(h,p,v,N,I,L,D,R,$)=>{p.slotScopeIds=R,h==null?p.shapeFlag&512?I.ctx.activate(p,v,N,D,$):G(p,v,N,I,L,D,$):Q(h,p,$)},G=(h,p,v,N,I,L,D)=>{const R=h.component=oc(h,N,I);if(Wn(h)&&(R.ctx.renderer=Rn),cc(R),R.asyncDep){if(I&&I.registerDep(R,H),!h.el){const $=R.subTree=ce(we);P(null,$,p,v)}}else H(R,h,p,v,I,L,D)},Q=(h,p,v)=>{const N=p.component=h.component;if(Vu(h,p,v))if(N.asyncDep&&!N.asyncResolved){Y(N,p,v);return}else N.next=p,Ou(N.update),N.effect.dirty=!0,N.update();else p.el=h.el,N.vnode=p},H=(h,p,v,N,I,L,D)=>{const R=()=>{if(h.isMounted){let{next:U,bu:q,u:j,parent:z,vnode:ee}=h;{const Mn=Xl(h);if(Mn){U&&(U.el=ee.el,Y(h,U,D)),Mn.asyncDep.then(()=>{h.isUnmounted||R()});return}}let le=U,fe;Yt(h,!1),U?(U.el=ee.el,Y(h,U,D)):U=ee,q&&gn(q),(fe=U.props&&U.props.onVnodeBeforeUpdate)&&Pe(fe,z,U,ee),Yt(h,!0);const ve=Vs(h),nt=h.subTree;h.subTree=ve,x(nt,ve,f(nt.el),Oi(nt),h,I,L),U.el=ve.el,le===null&&Qi(h,ve.el),j&&Ee(j,I),(fe=U.props&&U.props.onVnodeUpdated)&&Ee(()=>Pe(fe,z,U,ee),I)}else{let U;const{el:q,props:j}=p,{bm:z,m:ee,parent:le}=h,fe=Jt(p);if(Yt(h,!1),z&&gn(z),!fe&&(U=j&&j.onVnodeBeforeMount)&&Pe(U,le,p),Yt(h,!0),q&&_o){const ve=()=>{h.subTree=Vs(h),_o(q,h.subTree,h,I,null)};fe?p.type.__asyncLoader().then(()=>!h.isUnmounted&&ve()):ve()}else{const ve=h.subTree=Vs(h);x(null,ve,v,N,h,I,L),p.el=ve.el}if(ee&&Ee(ee,I),!fe&&(U=j&&j.onVnodeMounted)){const ve=p;Ee(()=>Pe(U,le,ve),I)}(p.shapeFlag&256||le&&Jt(le.vnode)&&le.vnode.shapeFlag&256)&&h.a&&Ee(h.a,I),h.isMounted=!0,p=v=N=null}},$=h.effect=new yn(R,ge,()=>Ms(O),h.scope),O=h.update=()=>{$.dirty&&$.run()};O.id=h.uid,Yt(h,!0),O()},Y=(h,p,v)=>{p.component=h;const N=h.vnode.props;h.vnode=p,h.next=null,Nh(h,p.props,N,v),Oh(h,p.children,v),vt(),sl(h),Et()},K=(h,p,v,N,I,L,D,R,$=!1)=>{const O=h&&h.children,U=h?h.shapeFlag:0,q=p.children,{patchFlag:j,shapeFlag:z}=p;if(j>0){if(j&128){$t(O,q,v,N,I,L,D,R,$);return}else if(j&256){je(O,q,v,N,I,L,D,R,$);return}}z&8?(U&16&>(O,I,L),q!==O&&u(v,q)):U&16?z&16?$t(O,q,v,N,I,L,D,R,$):gt(O,I,L,!0):(U&8&&u(v,""),z&16&&b(q,v,N,I,L,D,R,$))},je=(h,p,v,N,I,L,D,R,$)=>{h=h||hn,p=p||hn;const O=h.length,U=p.length,q=Math.min(O,U);let j;for(j=0;jU?gt(h,I,L,!0,!1,q):b(p,v,N,I,L,D,R,$,q)},$t=(h,p,v,N,I,L,D,R,$)=>{let O=0;const U=p.length;let q=h.length-1,j=U-1;for(;O<=q&&O<=j;){const z=h[O],ee=p[O]=$?xt(p[O]):He(p[O]);if(Qe(z,ee))x(z,ee,v,null,I,L,D,R,$);else break;O++}for(;O<=q&&O<=j;){const z=h[q],ee=p[j]=$?xt(p[j]):He(p[j]);if(Qe(z,ee))x(z,ee,v,null,I,L,D,R,$);else break;q--,j--}if(O>q){if(O<=j){const z=j+1,ee=zj)for(;O<=q;)lt(h[O],I,L,!0),O++;else{const z=O,ee=O,le=new Map;for(O=ee;O<=j;O++){const qe=p[O]=$?xt(p[O]):He(p[O]);qe.key!=null&&le.set(qe.key,O)}let fe,ve=0;const nt=j-ee+1;let Mn=!1,hf=0;const gs=new Array(nt);for(O=0;O=nt){lt(qe,I,L,!0);continue}let ct;if(qe.key!=null)ct=le.get(qe.key);else for(fe=ee;fe<=j;fe++)if(gs[fe-ee]===0&&Qe(qe,p[fe])){ct=fe;break}ct===void 0?lt(qe,I,L,!0):(gs[ct-ee]=O+1,ct>=hf?hf=ct:Mn=!0,x(qe,p[ct],v,null,I,L,D,R,$),ve++)}const df=Mn?Ph(gs):hn;for(fe=df.length-1,O=nt-1;O>=0;O--){const qe=ee+O,ct=p[qe],pf=qe+1{const{el:L,type:D,transition:R,children:$,shapeFlag:O}=h;if(O&6){un(h.component.subTree,p,v,N);return}if(O&128){h.suspense.move(p,v,N);return}if(O&64){D.move(h,p,v,Rn);return}if(D===Ce){s(L,p,v);for(let q=0;q<$.length;q++)un($[q],p,v,N);s(h.anchor,p,v);return}if(D===Zt){m(h,p,v);return}if(N!==2&&O&1&&R)if(N===0)R.beforeEnter(L),s(L,p,v),Ee(()=>R.enter(L),I);else{const{leave:q,delayLeave:j,afterLeave:z}=R,ee=()=>s(L,p,v),le=()=>{q(L,()=>{ee(),z&&z()})};j?j(L,ee,le):le()}else s(L,p,v)},lt=(h,p,v,N=!1,I=!1)=>{const{type:L,props:D,ref:R,children:$,dynamicChildren:O,shapeFlag:U,patchFlag:q,dirs:j}=h;if(R!=null&&zs(R,null,v,h,!0),U&256){p.ctx.deactivate(h);return}const z=U&1&&j,ee=!Jt(h);let le;if(ee&&(le=D&&D.onVnodeBeforeUnmount)&&Pe(le,p,h),U&6)_g(h.component,v,N);else{if(U&128){h.suspense.unmount(v,N);return}z&&rt(h,null,p,"beforeUnmount"),U&64?h.type.remove(h,p,v,I,Rn,N):O&&(L!==Ce||q>0&&q&64)?gt(O,p,v,!1,!0):(L===Ce&&q&384||!I&&U&16)&>($,p,v),N&&ff(h)}(ee&&(le=D&&D.onVnodeUnmounted)||z)&&Ee(()=>{le&&Pe(le,p,h),z&&rt(h,null,p,"unmounted")},v)},ff=h=>{const{type:p,el:v,anchor:N,transition:I}=h;if(p===Ce){yg(v,N);return}if(p===Zt){y(h);return}const L=()=>{i(v),I&&!I.persisted&&I.afterLeave&&I.afterLeave()};if(h.shapeFlag&1&&I&&!I.persisted){const{leave:D,delayLeave:R}=I,$=()=>D(v,L);R?R(h.el,L,$):$()}else L()},yg=(h,p)=>{let v;for(;h!==p;)v=d(h),i(h),h=v;i(p)},_g=(h,p,v)=>{const{bum:N,scope:I,update:L,subTree:D,um:R}=h;N&&gn(N),I.stop(),L&&(L.active=!1,lt(D,h,p,v)),R&&Ee(R,p),Ee(()=>{h.isUnmounted=!0},p),p&&p.pendingBranch&&!p.isUnmounted&&h.asyncDep&&!h.asyncResolved&&h.suspenseId===p.pendingId&&(p.deps--,p.deps===0&&p.resolve())},gt=(h,p,v,N=!1,I=!1,L=0)=>{for(let D=L;Dh.shapeFlag&6?Oi(h.component.subTree):h.shapeFlag&128?h.suspense.next():d(h.anchor||h.el);let go=!1;const uf=(h,p,v)=>{h==null?p._vnode&<(p._vnode,null,null,!0):x(p._vnode||null,h,p,null,null,null,v),go||(go=!0,sl(),Ls(),go=!1),p._vnode=h},Rn={p:x,um:lt,m:un,r:ff,mt:G,mc:b,pc:K,pbc:T,n:Oi,o:e};let yo,_o;return t&&([yo,_o]=t(Rn)),{render:uf,hydrate:yo,createApp:Th(uf,yo)}}function Sr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Yt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Yl(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function vr(e,t,n=!1){const s=e.children,i=t.children;if(V(s)&&V(i))for(let r=0;r>1,e[n[l]]0&&(t[s]=n[r-1]),n[r]=s)}}for(r=n.length,o=n[r-1];r-- >0;)n[r]=o,o=t[o];return n}function Xl(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Xl(t)}const Lh=e=>e.__isTeleport,Qn=e=>e&&(e.disabled||e.disabled===""),Zl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Ql=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Er=(e,t)=>{const n=e&&e.to;return J(n)?t?t(n):null:n},Fh={name:"Teleport",__isTeleport:!0,process(e,t,n,s,i,r,o,l,c,a){const{mc:u,pc:f,pbc:d,o:{insert:g,querySelector:_,createText:x,createComment:M}}=a,P=Qn(t.props);let{shapeFlag:A,children:m,dynamicChildren:y}=t;if(e==null){const S=t.el=x(""),C=t.anchor=x("");g(S,n,s),g(C,n,s);const F=t.target=Er(t.props,_),b=t.targetAnchor=x("");F&&(g(b,F),o==="svg"||Zl(F)?o="svg":(o==="mathml"||Ql(F))&&(o="mathml"));const E=(T,k)=>{A&16&&u(m,T,k,i,r,o,l,c)};P?E(n,C):F&&E(F,b)}else{t.el=e.el;const S=t.anchor=e.anchor,C=t.target=e.target,F=t.targetAnchor=e.targetAnchor,b=Qn(e.props),E=b?n:C,T=b?S:F;if(o==="svg"||Zl(C)?o="svg":(o==="mathml"||Ql(C))&&(o="mathml"),y?(d(e.dynamicChildren,y,E,i,r,o,l),vr(e,t,!0)):c||f(e,t,E,T,i,r,o,l,!1),P)b?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Xs(t,n,S,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const k=t.target=Er(t.props,_);k&&Xs(t,k,null,a,0)}else b&&Xs(t,C,F,a,1)}ec(t)},remove(e,t,n,s,{um:i,o:{remove:r}},o){const{shapeFlag:l,children:c,anchor:a,targetAnchor:u,target:f,props:d}=e;if(f&&r(u),o&&r(a),l&16){const g=o||!Qn(d);for(let _=0;_0?Me||hn:null,tc(),Qt>0&&Me&&Me.push(e),e}function Nt(e,t,n,s,i,r){return nc(Ne(e,t,n,s,i,r,!0))}function Tr(e,t,n,s,i){return nc(ce(e,t,n,s,i,!0))}function It(e){return e?e.__v_isVNode===!0:!1}function Qe(e,t){return e.type===t.type&&e.key===t.key}function Vh(e){}const Zs="__vInternal",sc=({key:e})=>e??null,Qs=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?J(e)||Se(e)||W(e)?{i:me,r:e,k:t,f:!!n}:e:null);function Ne(e,t=null,n=null,s=0,i=null,r=e===Ce?0:1,o=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&sc(t),ref:t&&Qs(t),scopeId:Ds,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:s,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:me};return l?(wr(c,n),r&128&&e.normalize(c)):n&&(c.shapeFlag|=J(n)?8:16),Qt>0&&!o&&Me&&(c.patchFlag>0||r&6)&&c.patchFlag!==32&&Me.push(c),c}const ce=Bh;function Bh(e,t=null,n=null,s=0,i=null,r=!1){if((!e||e===cl)&&(e=we),It(e)){const l=ot(e,t,!0);return n&&wr(l,n),Qt>0&&!r&&Me&&(l.shapeFlag&6?Me[Me.indexOf(e)]=l:Me.push(l)),l.patchFlag|=-2,l}if(Yh(e)&&(e=e.__vccOpts),t){t=ic(t);let{class:l,style:c}=t;l&&!J(l)&&(t.class=_t(l)),oe(c)&&(ji(c)&&!V(c)&&(c=ne({},c)),t.style=Ln(c))}const o=J(e)?1:fl(e)?128:Lh(e)?64:oe(e)?4:W(e)?2:0;return Ne(e,t,n,s,i,o,r,!0)}function ic(e){return e?ji(e)||Zs in e?ne({},e):e:null}function ot(e,t,n=!1){const{props:s,ref:i,patchFlag:r,children:o}=e,l=t?rc(s||{},t):s;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:l,key:l&&sc(l),ref:t&&t.ref?n&&i?V(i)?i.concat(Qs(t)):[i,Qs(t)]:Qs(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Ce?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&ot(e.ssContent),ssFallback:e.ssFallback&&ot(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function Ar(e=" ",t=0){return ce(Xt,null,e,t)}function Hh(e,t){const n=ce(Zt,null,e);return n.staticCount=t,n}function Uh(e="",t=!1){return t?(Ze(),Tr(we,null,e)):ce(we,null,e)}function He(e){return e==null||typeof e=="boolean"?ce(we):V(e)?ce(Ce,null,e.slice()):typeof e=="object"?xt(e):ce(Xt,null,String(e))}function xt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:ot(e)}function wr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(V(t))n=16;else if(typeof t=="object")if(s&65){const i=t.default;i&&(i._c&&(i._d=!1),wr(e,i()),i._c&&(i._d=!0));return}else{n=32;const i=t._;!i&&!(Zs in t)?t._ctx=me:i===3&&me&&(me.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:me},n=32):(t=String(t),s&64?(n=16,t=[Ar(t)]):n=8);e.children=t,e.shapeFlag|=n}function rc(...e){const t={};for(let n=0;nye||me;let ei,Nr;{const e=Co(),t=(n,s)=>{let i;return(i=e[n])||(i=e[n]=[]),i.push(s),r=>{i.length>1?i.forEach(o=>o(r)):i[0](r)}};ei=t("__VUE_INSTANCE_SETTERS__",n=>ye=n),Nr=t("__VUE_SSR_SETTERS__",n=>ts=n)}const en=e=>{const t=ye;return ei(e),e.scope.on(),()=>{e.scope.off(),ei(t)}},Ir=()=>{ye&&ye.scope.off(),ei(null)};function lc(e){return e.vnode.shapeFlag&4}let ts=!1;function cc(e,t=!1){t&&Nr(t);const{props:n,children:s}=e.vnode,i=lc(e);wh(e,n,i,t),xh(e,s);const r=i?qh(e,t):void 0;return t&&Nr(!1),r}function qh(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=qi(new Proxy(e.ctx,pr));const{setup:s}=n;if(s){const i=e.setupContext=s.length>1?uc(e):null,r=en(e);vt();const o=st(s,e,0,[e.props,i]);if(Et(),r(),Mi(o)){if(o.then(Ir,Ir),t)return o.then(l=>{xr(e,l,t)}).catch(l=>{qt(l,e,0)});e.asyncDep=o}else xr(e,o,t)}else fc(e,t)}function xr(e,t,n){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:oe(t)&&(e.setupState=Ji(t)),fc(e,n)}let ti,Or;function ac(e){ti=e,Or=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,ih))}}const Wh=()=>!ti;function fc(e,t,n){const s=e.type;if(!e.render){if(!t&&ti&&!s.render){const i=s.template||gr(e).template;if(i){const{isCustomElement:r,compilerOptions:o}=e.appContext.config,{delimiters:l,compilerOptions:c}=s,a=ne(ne({isCustomElement:r,delimiters:l},o),c);s.render=ti(i,a)}}e.render=s.render||ge,Or&&Or(e)}{const i=en(e);vt();try{_h(e)}finally{Et(),i()}}}function Gh(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,n){return Re(e,"get","$attrs"),t[n]}}))}function uc(e){const t=n=>{e.exposed=n||{}};return{get attrs(){return Gh(e)},slots:e.slots,emit:e.emit,expose:t}}function ni(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Ji(qi(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jn)return Jn[n](e)},has(t,n){return n in t||n in Jn}}))}const zh=/(?:^|[-_])(\w)/g,Jh=e=>e.replace(zh,t=>t.toUpperCase()).replace(/[-_]/g,"");function si(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function hc(e,t,n=!1){let s=si(t);if(!s&&t.__file){const i=t.__file.match(/([^/\\]+)\.\w+$/);i&&(s=i[1])}if(!s&&e&&e.parent){const i=r=>{for(const o in r)if(r[o]===t)return o};s=i(e.components||e.parent.type.components)||i(e.appContext.components)}return s?Jh(s):n?"App":"Anonymous"}function Yh(e){return W(e)&&"__vccOpts"in e}const dc=(e,t)=>cu(e,t,ts);function Xh(e,t,n=ie){const s=ut(),i=ue(t),r=De(t),o=Zo((c,a)=>{let u;return gl(()=>{const f=e[t];Xe(u,f)&&(u=f,a())}),{get(){return c(),n.get?n.get(u):u},set(f){const d=s.vnode.props;!(d&&(t in d||i in d||r in d)&&(`onUpdate:${t}`in d||`onUpdate:${i}`in d||`onUpdate:${r}`in d))&&Xe(f,u)&&(u=f,a()),s.emit(`update:${t}`,n.set?n.set(f):f)}}}),l=t==="modelValue"?"modelModifiers":`${t}Modifiers`;return o[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?e[l]||{}:o,done:!1}:{done:!0}}}},o}function pc(e,t,n){const s=arguments.length;return s===2?oe(t)&&!V(t)?It(t)?ce(e,null,[t]):ce(e,t):ce(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&It(n)&&(n=[n]),ce(e,t,n))}function Zh(){}function Qh(e,t,n,s){const i=n[s];if(i&&mc(i,e))return i;const r=t();return r.memo=e.slice(),n[s]=r}function mc(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&Me&&Me.push(e),!0}const gc="3.4.21",ed=ge,td=Nu,nd=Sn,sd=rl,id={createComponentInstance:oc,setupComponent:cc,renderComponentRoot:Vs,setCurrentRenderingInstance:Un,isVNode:It,normalizeVNode:He},rd=null,od=null,ld=null;/** +* @vue/runtime-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const cd="http://www.w3.org/2000/svg",ad="http://www.w3.org/1998/Math/MathML",Ot=typeof document<"u"?document:null,yc=Ot&&Ot.createElement("template"),fd={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const i=t==="svg"?Ot.createElementNS(cd,e):t==="mathml"?Ot.createElementNS(ad,e):Ot.createElement(e,n?{is:n}:void 0);return e==="select"&&s&&s.multiple!=null&&i.setAttribute("multiple",s.multiple),i},createText:e=>Ot.createTextNode(e),createComment:e=>Ot.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ot.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,i,r){const o=n?n.previousSibling:t.lastChild;if(i&&(i===r||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),n),!(i===r||!(i=i.nextSibling)););else{yc.innerHTML=s==="svg"?`${e}`:s==="mathml"?`${e}`:e;const l=yc.content;if(s==="svg"||s==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},kt="transition",ns="animation",An=Symbol("_vtc"),kr=(e,{slots:t})=>pc(_l,Sc(e),t);kr.displayName="Transition";const _c={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},ud=kr.props=ne({},or,_c),tn=(e,t=[])=>{V(e)?e.forEach(n=>n(...t)):e&&e(...t)},bc=e=>e?V(e)?e.some(t=>t.length>1):e.length>1:!1;function Sc(e){const t={};for(const w in e)w in _c||(t[w]=e[w]);if(e.css===!1)return t;const{name:n="v",type:s,duration:i,enterFromClass:r=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=r,appearActiveClass:a=o,appearToClass:u=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,_=hd(i),x=_&&_[0],M=_&&_[1],{onBeforeEnter:P,onEnter:A,onEnterCancelled:m,onLeave:y,onLeaveCancelled:S,onBeforeAppear:C=P,onAppear:F=A,onAppearCancelled:b=m}=t,E=(w,B,G)=>{Rt(w,B?u:l),Rt(w,B?a:o),G&&G()},T=(w,B)=>{w._isLeaving=!1,Rt(w,f),Rt(w,g),Rt(w,d),B&&B()},k=w=>(B,G)=>{const Q=w?F:A,H=()=>E(B,w,G);tn(Q,[B,H]),vc(()=>{Rt(B,w?c:r),ht(B,w?u:l),bc(Q)||Ec(B,s,x,H)})};return ne(t,{onBeforeEnter(w){tn(P,[w]),ht(w,r),ht(w,o)},onBeforeAppear(w){tn(C,[w]),ht(w,c),ht(w,a)},onEnter:k(!1),onAppear:k(!0),onLeave(w,B){w._isLeaving=!0;const G=()=>T(w,B);ht(w,f),wc(),ht(w,d),vc(()=>{w._isLeaving&&(Rt(w,f),ht(w,g),bc(y)||Ec(w,s,M,G))}),tn(y,[w,G])},onEnterCancelled(w){E(w,!1),tn(m,[w])},onAppearCancelled(w){E(w,!0),tn(b,[w])},onLeaveCancelled(w){T(w),tn(S,[w])}})}function hd(e){if(e==null)return null;if(oe(e))return[Rr(e.enter),Rr(e.leave)];{const t=Rr(e);return[t,t]}}function Rr(e){return Ss(e)}function ht(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[An]||(e[An]=new Set)).add(t)}function Rt(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[An];n&&(n.delete(t),n.size||(e[An]=void 0))}function vc(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let dd=0;function Ec(e,t,n,s){const i=e._endId=++dd,r=()=>{i===e._endId&&s()};if(n)return setTimeout(r,n);const{type:o,timeout:l,propCount:c}=Cc(e,t);if(!o)return s();const a=o+"end";let u=0;const f=()=>{e.removeEventListener(a,d),r()},d=g=>{g.target===e&&++u>=c&&f()};setTimeout(()=>{u(n[_]||"").split(", "),i=s(`${kt}Delay`),r=s(`${kt}Duration`),o=Tc(i,r),l=s(`${ns}Delay`),c=s(`${ns}Duration`),a=Tc(l,c);let u=null,f=0,d=0;t===kt?o>0&&(u=kt,f=o,d=r.length):t===ns?a>0&&(u=ns,f=a,d=c.length):(f=Math.max(o,a),u=f>0?o>a?kt:ns:null,d=u?u===kt?r.length:c.length:0);const g=u===kt&&/\b(transform|all)(,|$)/.test(s(`${kt}Property`).toString());return{type:u,timeout:f,propCount:d,hasTransform:g}}function Tc(e,t){for(;e.lengthAc(n)+Ac(e[s])))}function Ac(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function wc(){return document.body.offsetHeight}function pd(e,t,n){const s=e[An];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const ii=Symbol("_vod"),Nc=Symbol("_vsh"),Ic={beforeMount(e,{value:t},{transition:n}){e[ii]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):ss(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),ss(e,!0),s.enter(e)):s.leave(e,()=>{ss(e,!1)}):ss(e,t))},beforeUnmount(e,{value:t}){ss(e,t)}};function ss(e,t){e.style.display=t?e[ii]:"none",e[Nc]=!t}function md(){Ic.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const xc=Symbol("");function gd(e){const t=ut();if(!t)return;const n=t.ut=(i=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(r=>Pr(r,i))},s=()=>{const i=e(t.proxy);Mr(t.subTree,i),n(i)};ml(s),zn(()=>{const i=new MutationObserver(s);i.observe(t.subTree.el.parentNode,{childList:!0}),Ws(()=>i.disconnect())})}function Mr(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Mr(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Pr(e.el,t);else if(e.type===Ce)e.children.forEach(n=>Mr(n,t));else if(e.type===Zt){let{el:n,anchor:s}=e;for(;n&&(Pr(n,t),n!==s);)n=n.nextSibling}}function Pr(e,t){if(e.nodeType===1){const n=e.style;let s="";for(const i in t)n.setProperty(`--${i}`,t[i]),s+=`--${i}: ${t[i]};`;n[xc]=s}}const yd=/(^|;)\s*display\s*:/;function _d(e,t,n){const s=e.style,i=J(n);let r=!1;if(n&&!i){if(t)if(J(t))for(const o of t.split(";")){const l=o.slice(0,o.indexOf(":")).trim();n[l]==null&&ri(s,l,"")}else for(const o in t)n[o]==null&&ri(s,o,"");for(const o in n)o==="display"&&(r=!0),ri(s,o,n[o])}else if(i){if(t!==n){const o=s[xc];o&&(n+=";"+o),s.cssText=n,r=yd.test(n)}}else t&&e.removeAttribute("style");ii in e&&(e[ii]=r?s.display:"",e[Nc]&&(s.display="none"))}const Oc=/\s*!important$/;function ri(e,t,n){if(V(n))n.forEach(s=>ri(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=bd(e,t);Oc.test(n)?e.setProperty(De(s),n.replace(Oc,""),"important"):e[s]=n}}const kc=["Webkit","Moz","ms"],Lr={};function bd(e,t){const n=Lr[t];if(n)return n;let s=ue(t);if(s!=="filter"&&s in e)return Lr[t]=s;s=Bt(s);for(let i=0;iFr||(Ad.then(()=>Fr=0),Fr=Date.now());function Nd(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;Be(Id(s,n.value),t,5,[s])};return n.value=e,n.attached=wd(),n}function Id(e,t){if(V(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>i=>!i._stopped&&s&&s(i))}else return t}const Lc=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,xd=(e,t,n,s,i,r,o,l,c)=>{const a=i==="svg";t==="class"?pd(e,s,a):t==="style"?_d(e,n,s):Dt(t)?ki(t)||Cd(e,t,n,s,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Od(e,t,s,a))?vd(e,t,s,r,o,l,c):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Sd(e,t,s,a))};function Od(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&Lc(t)&&W(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return Lc(t)&&J(n)?!1:t in e}/*! #__NO_SIDE_EFFECTS__ */function Fc(e,t){const n=cr(e);class s extends oi{constructor(r){super(n,r,t)}}return s.def=n,s}/*! #__NO_SIDE_EFFECTS__ */const kd=e=>Fc(e,Zc),Rd=typeof HTMLElement<"u"?HTMLElement:class{};class oi extends Rd{constructor(t,n={},s){super(),this._def=t,this._props=n,this._instance=null,this._connected=!1,this._resolved=!1,this._numberProps=null,this._ob=null,this.shadowRoot&&s?s(this._createVNode(),this.shadowRoot):(this.attachShadow({mode:"open"}),this._def.__asyncLoader||this._resolveProps(this._def))}connectedCallback(){this._connected=!0,this._instance||(this._resolved?this._update():this._resolveDef())}disconnectedCallback(){this._connected=!1,this._ob&&(this._ob.disconnect(),this._ob=null),Rs(()=>{this._connected||(Vr(null,this.shadowRoot),this._instance=null)})}_resolveDef(){this._resolved=!0;for(let s=0;s{for(const i of s)this._setAttr(i.attributeName)}),this._ob.observe(this,{attributes:!0});const t=(s,i=!1)=>{const{props:r,styles:o}=s;let l;if(r&&!V(r))for(const c in r){const a=r[c];(a===Number||a&&a.type===Number)&&(c in this._props&&(this._props[c]=Ss(this._props[c])),(l||(l=Object.create(null)))[ue(c)]=!0)}this._numberProps=l,i&&this._resolveProps(s),this._applyStyles(o),this._update()},n=this._def.__asyncLoader;n?n().then(s=>t(s,!0)):t(this._def)}_resolveProps(t){const{props:n}=t,s=V(n)?n:Object.keys(n||{});for(const i of Object.keys(this))i[0]!=="_"&&s.includes(i)&&this._setProp(i,this[i],!0,!1);for(const i of s.map(ue))Object.defineProperty(this,i,{get(){return this._getProp(i)},set(r){this._setProp(i,r)}})}_setAttr(t){let n=this.getAttribute(t);const s=ue(t);this._numberProps&&this._numberProps[s]&&(n=Ss(n)),this._setProp(s,n,!1)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,i=!0){n!==this._props[t]&&(this._props[t]=n,i&&this._instance&&this._update(),s&&(n===!0?this.setAttribute(De(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(De(t),n+""):n||this.removeAttribute(De(t))))}_update(){Vr(this._createVNode(),this.shadowRoot)}_createVNode(){const t=ce(this._def,ne({},this._props));return this._instance||(t.ce=n=>{this._instance=n,n.isCE=!0;const s=(r,o)=>{this.dispatchEvent(new CustomEvent(r,{detail:o}))};n.emit=(r,...o)=>{s(r,o),De(r)!==r&&s(De(r),o)};let i=this;for(;i=i&&(i.parentNode||i.host);)if(i instanceof oi){n.parent=i._instance,n.provides=i._instance.provides;break}}),t}_applyStyles(t){t&&t.forEach(n=>{const s=document.createElement("style");s.textContent=n,this.shadowRoot.appendChild(s)})}}function Md(e="$style"){{const t=ut();if(!t)return ie;const n=t.type.__cssModules;if(!n)return ie;const s=n[e];return s||ie}}const $c=new WeakMap,Dc=new WeakMap,li=Symbol("_moveCb"),Vc=Symbol("_enterCb"),Bc={name:"TransitionGroup",props:ne({},ud,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=ut(),s=rr();let i,r;return js(()=>{if(!i.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!Vd(i[0].el,n.vnode.el,o))return;i.forEach(Fd),i.forEach($d);const l=i.filter(Dd);wc(),l.forEach(c=>{const a=c.el,u=a.style;ht(a,o),u.transform=u.webkitTransform=u.transitionDuration="";const f=a[li]=d=>{d&&d.target!==a||(!d||/transform$/.test(d.propertyName))&&(a.removeEventListener("transitionend",f),a[li]=null,Rt(a,o))};a.addEventListener("transitionend",f)})}),()=>{const o=Z(e),l=Sc(o);let c=o.tag||Ce;i=r,r=t.default?Us(t.default()):[];for(let a=0;adelete e.mode;Bc.props;const Ld=Bc;function Fd(e){const t=e.el;t[li]&&t[li](),t[Vc]&&t[Vc]()}function $d(e){Dc.set(e,e.el.getBoundingClientRect())}function Dd(e){const t=$c.get(e),n=Dc.get(e),s=t.left-n.left,i=t.top-n.top;if(s||i){const r=e.el.style;return r.transform=r.webkitTransform=`translate(${s}px,${i}px)`,r.transitionDuration="0s",e}}function Vd(e,t,n){const s=e.cloneNode(),i=e[An];i&&i.forEach(l=>{l.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(l=>l&&s.classList.add(l)),s.style.display="none";const r=t.nodeType===1?t:t.parentNode;r.appendChild(s);const{hasTransform:o}=Cc(s);return r.removeChild(s),o}const Mt=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?n=>gn(t,n):t};function Bd(e){e.target.composing=!0}function Hc(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Ge=Symbol("_assign"),ci={created(e,{modifiers:{lazy:t,trim:n,number:s}},i){e[Ge]=Mt(i);const r=s||i.props&&i.props.type==="number";dt(e,t?"change":"input",o=>{if(o.target.composing)return;let l=e.value;n&&(l=l.trim()),r&&(l=Pn(l)),e[Ge](l)}),n&&dt(e,"change",()=>{e.value=e.value.trim()}),t||(dt(e,"compositionstart",Bd),dt(e,"compositionend",Hc),dt(e,"change",Hc))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,modifiers:{lazy:n,trim:s,number:i}},r){if(e[Ge]=Mt(r),e.composing)return;const o=i||e.type==="number"?Pn(e.value):e.value,l=t??"";o!==l&&(document.activeElement===e&&e.type!=="range"&&(n||s&&e.value.trim()===l)||(e.value=l))}},$r={deep:!0,created(e,t,n){e[Ge]=Mt(n),dt(e,"change",()=>{const s=e._modelValue,i=wn(e),r=e.checked,o=e[Ge];if(V(s)){const l=vs(s,i),c=l!==-1;if(r&&!c)o(s.concat(i));else if(!r&&c){const a=[...s];a.splice(l,1),o(a)}}else if(Vt(s)){const l=new Set(s);r?l.add(i):l.delete(i),o(l)}else o(qc(e,r))})},mounted:Uc,beforeUpdate(e,t,n){e[Ge]=Mt(n),Uc(e,t,n)}};function Uc(e,{value:t,oldValue:n},s){e._modelValue=t,V(t)?e.checked=vs(t,s.props.value)>-1:Vt(t)?e.checked=t.has(s.props.value):t!==n&&(e.checked=bt(t,qc(e,!0)))}const Dr={created(e,{value:t},n){e.checked=bt(t,n.props.value),e[Ge]=Mt(n),dt(e,"change",()=>{e[Ge](wn(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[Ge]=Mt(s),t!==n&&(e.checked=bt(t,s.props.value))}},Kc={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const i=Vt(t);dt(e,"change",()=>{const r=Array.prototype.filter.call(e.options,o=>o.selected).map(o=>n?Pn(wn(o)):wn(o));e[Ge](e.multiple?i?new Set(r):r:r[0]),e._assigning=!0,Rs(()=>{e._assigning=!1})}),e[Ge]=Mt(s)},mounted(e,{value:t,modifiers:{number:n}}){jc(e,t,n)},beforeUpdate(e,t,n){e[Ge]=Mt(n)},updated(e,{value:t,modifiers:{number:n}}){e._assigning||jc(e,t,n)}};function jc(e,t,n){const s=e.multiple,i=V(t);if(!(s&&!i&&!Vt(t))){for(let r=0,o=e.options.length;r-1}else l.selected=t.has(c);else if(bt(wn(l),t)){e.selectedIndex!==r&&(e.selectedIndex=r);return}}!s&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function wn(e){return"_value"in e?e._value:e.value}function qc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Wc={created(e,t,n){ai(e,t,n,null,"created")},mounted(e,t,n){ai(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){ai(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){ai(e,t,n,s,"updated")}};function Gc(e,t){switch(e){case"SELECT":return Kc;case"TEXTAREA":return ci;default:switch(t){case"checkbox":return $r;case"radio":return Dr;default:return ci}}}function ai(e,t,n,s,i){const o=Gc(e.tagName,n.props&&n.props.type)[i];o&&o(e,t,n,s)}function Hd(){ci.getSSRProps=({value:e})=>({value:e}),Dr.getSSRProps=({value:e},t)=>{if(t.props&&bt(t.props.value,e))return{checked:!0}},$r.getSSRProps=({value:e},t)=>{if(V(e)){if(t.props&&vs(e,t.props.value)>-1)return{checked:!0}}else if(Vt(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Wc.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=Gc(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const Ud=["ctrl","shift","alt","meta"],Kd={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ud.some(n=>e[`${n}Key`]&&!t.includes(n))},jd=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(i,...r)=>{for(let o=0;o{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=i=>{if(!("key"in i))return;const r=De(i.key);if(t.some(o=>o===r||qd[o]===r))return e(i)})},zc=ne({patchProp:xd},fd);let is,Jc=!1;function Yc(){return is||(is=Gl(zc))}function Xc(){return is=Jc?is:zl(zc),Jc=!0,is}const Vr=(...e)=>{Yc().render(...e)},Zc=(...e)=>{Xc().hydrate(...e)},Qc=(...e)=>{const t=Yc().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=ta(s);if(!i)return;const r=t._component;!W(r)&&!r.render&&!r.template&&(r.template=i.innerHTML),i.innerHTML="";const o=n(i,!1,ea(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),o},t},Gd=(...e)=>{const t=Xc().createApp(...e),{mount:n}=t;return t.mount=s=>{const i=ta(s);if(i)return n(i,!0,ea(i))},t};function ea(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function ta(e){return J(e)?document.querySelector(e):e}let na=!1;const zd=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:_l,BaseTransitionPropsValidators:or,Comment:we,DeprecationTypes:ld,EffectScope:Fi,ErrorCodes:wu,ErrorTypeStrings:td,Fragment:Ce,KeepAlive:Qu,ReactiveEffect:yn,Static:Zt,Suspense:Ku,Teleport:Dh,Text:Xt,TrackOpTypes:bu,Transition:kr,TransitionGroup:Ld,TriggerOpTypes:Su,VueElement:oi,assertNumber:Au,callWithAsyncErrorHandling:Be,callWithErrorHandling:st,camelize:ue,capitalize:Bt,cloneVNode:ot,compatUtils:od,computed:dc,createApp:Qc,createBlock:Tr,createCommentVNode:Uh,createElementBlock:Nt,createElementVNode:Ne,createHydrationRenderer:zl,createPropsRestProxy:gh,createRenderer:Gl,createSSRApp:Gd,createSlots:nh,createStaticVNode:Hh,createTextVNode:Ar,createVNode:ce,customRef:Zo,defineAsyncComponent:Zu,defineComponent:cr,defineCustomElement:Fc,defineEmits:oh,defineExpose:lh,defineModel:fh,defineOptions:ch,defineProps:rh,defineSSRCustomElement:kd,defineSlots:ah,devtools:nd,effect:Bf,effectScope:$f,getCurrentInstance:ut,getCurrentScope:Io,getTransitionRawChildren:Us,guardReactiveProps:ic,h:pc,handleError:qt,hasInjectionContext:Ah,hydrate:Zc,initCustomFormatter:Zh,initDirectivesForSSR:()=>{na||(na=!0,Hd(),md())},inject:Zn,isMemoSame:mc,isProxy:ji,isReactive:Kt,isReadonly:jt,isRef:Se,isRuntimeOnly:Wh,isShallow:Fn,isVNode:It,markRaw:qi,mergeDefaults:ph,mergeModels:mh,mergeProps:rc,nextTick:Rs,normalizeClass:_t,normalizeProps:Af,normalizeStyle:Ln,onActivated:vl,onBeforeMount:Tl,onBeforeUnmount:qs,onBeforeUpdate:Al,onDeactivated:El,onErrorCaptured:xl,onMounted:zn,onRenderTracked:Il,onRenderTriggered:Nl,onScopeDispose:Df,onServerPrefetch:wl,onUnmounted:Ws,onUpdated:js,openBlock:Ze,popScopeId:Pu,provide:$l,proxyRefs:Ji,pushScopeId:Mu,queuePostFlushCb:Ps,reactive:Os,readonly:Ki,ref:Dn,registerRuntimeCompiler:ac,render:Vr,renderList:th,renderSlot:Cn,resolveComponent:tr,resolveDirective:Uu,resolveDynamicComponent:Hu,resolveFilter:rd,resolveTransitionHooks:En,setBlockTracking:Cr,setDevtoolsHook:sd,setTransitionHooks:zt,shallowReactive:Jo,shallowReadonly:lu,shallowRef:au,ssrContextKey:dl,ssrUtils:id,stop:Hf,toDisplayString:Ff,toHandlerKey:mn,toHandlers:sh,toRaw:Z,toRef:_u,toRefs:mu,toValue:hu,transformVNodeArgs:Vh,triggerRef:uu,unref:zi,useAttrs:dh,useCssModule:Md,useCssVars:gd,useModel:Xh,useSSRContext:pl,useSlots:hh,useTransitionState:rr,vModelCheckbox:$r,vModelDynamic:Wc,vModelRadio:Dr,vModelSelect:Kc,vModelText:ci,vShow:Ic,version:gc,warn:ed,watch:jn,watchEffect:Ju,watchPostEffect:ml,watchSyncEffect:gl,withAsyncContext:yh,withCtx:Zi,withDefaults:uh,withDirectives:Xu,withKeys:Wd,withMemo:Qh,withModifiers:jd,withScopeId:Lu},Symbol.toStringTag,{value:"Module"}));/** +* @vue/compiler-core v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const rs=Symbol(""),os=Symbol(""),Br=Symbol(""),fi=Symbol(""),sa=Symbol(""),nn=Symbol(""),ia=Symbol(""),ra=Symbol(""),Hr=Symbol(""),Ur=Symbol(""),ls=Symbol(""),Kr=Symbol(""),oa=Symbol(""),jr=Symbol(""),qr=Symbol(""),Wr=Symbol(""),Gr=Symbol(""),zr=Symbol(""),Jr=Symbol(""),la=Symbol(""),ca=Symbol(""),ui=Symbol(""),hi=Symbol(""),Yr=Symbol(""),Xr=Symbol(""),cs=Symbol(""),as=Symbol(""),Zr=Symbol(""),Qr=Symbol(""),Jd=Symbol(""),eo=Symbol(""),di=Symbol(""),Yd=Symbol(""),Xd=Symbol(""),to=Symbol(""),Zd=Symbol(""),Qd=Symbol(""),no=Symbol(""),aa=Symbol(""),Nn={[rs]:"Fragment",[os]:"Teleport",[Br]:"Suspense",[fi]:"KeepAlive",[sa]:"BaseTransition",[nn]:"openBlock",[ia]:"createBlock",[ra]:"createElementBlock",[Hr]:"createVNode",[Ur]:"createElementVNode",[ls]:"createCommentVNode",[Kr]:"createTextVNode",[oa]:"createStaticVNode",[jr]:"resolveComponent",[qr]:"resolveDynamicComponent",[Wr]:"resolveDirective",[Gr]:"resolveFilter",[zr]:"withDirectives",[Jr]:"renderList",[la]:"renderSlot",[ca]:"createSlots",[ui]:"toDisplayString",[hi]:"mergeProps",[Yr]:"normalizeClass",[Xr]:"normalizeStyle",[cs]:"normalizeProps",[as]:"guardReactiveProps",[Zr]:"toHandlers",[Qr]:"camelize",[Jd]:"capitalize",[eo]:"toHandlerKey",[di]:"setBlockTracking",[Yd]:"pushScopeId",[Xd]:"popScopeId",[to]:"withCtx",[Zd]:"unref",[Qd]:"isRef",[no]:"withMemo",[aa]:"isMemoSame"};function ep(e){Object.getOwnPropertySymbols(e).forEach(t=>{Nn[t]=e[t]})}const Ue={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function tp(e,t=""){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:0,temps:0,codegenNode:void 0,loc:Ue}}function fs(e,t,n,s,i,r,o,l=!1,c=!1,a=!1,u=Ue){return e&&(l?(e.helper(nn),e.helper(On(e.inSSR,a))):e.helper(xn(e.inSSR,a)),o&&e.helper(zr)),{type:13,tag:t,props:n,children:s,patchFlag:i,dynamicProps:r,directives:o,isBlock:l,disableTracking:c,isComponent:a,loc:u}}function us(e,t=Ue){return{type:17,loc:t,elements:e}}function ze(e,t=Ue){return{type:15,loc:t,properties:e}}function he(e,t){return{type:16,loc:Ue,key:J(e)?X(e,!0):e,value:t}}function X(e,t=!1,n=Ue,s=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:s}}function et(e,t=Ue){return{type:8,loc:t,children:e}}function _e(e,t=[],n=Ue){return{type:14,loc:n,callee:e,arguments:t}}function In(e,t=void 0,n=!1,s=!1,i=Ue){return{type:18,params:e,returns:t,newline:n,isSlot:s,loc:i}}function so(e,t,n,s=!0){return{type:19,test:e,consequent:t,alternate:n,newline:s,loc:Ue}}function np(e,t,n=!1){return{type:20,index:e,value:t,isVNode:n,loc:Ue}}function sp(e){return{type:21,body:e,loc:Ue}}function xn(e,t){return e||t?Hr:Ur}function On(e,t){return e||t?ia:ra}function io(e,{helper:t,removeHelper:n,inSSR:s}){e.isBlock||(e.isBlock=!0,n(xn(s,e.isComponent)),t(nn),t(On(s,e.isComponent)))}const fa=new Uint8Array([123,123]),ua=new Uint8Array([125,125]);function ha(e){return e>=97&&e<=122||e>=65&&e<=90}function Ke(e){return e===32||e===10||e===9||e===12||e===13}function Pt(e){return e===47||e===62||Ke(e)}function pi(e){const t=new Uint8Array(e.length);for(let n=0;n=0;i--){const r=this.newlines[i];if(t>r){n=i+2,s=t-r;break}}return{column:s,line:n,offset:t}}peek(){return this.buffer.charCodeAt(this.index+1)}stateText(t){t===60?(this.index>this.sectionStart&&this.cbs.ontext(this.sectionStart,this.index),this.state=5,this.sectionStart=this.index):!this.inVPre&&t===this.delimiterOpen[0]&&(this.state=2,this.delimiterIndex=0,this.stateInterpolationOpen(t))}stateInterpolationOpen(t){if(t===this.delimiterOpen[this.delimiterIndex])if(this.delimiterIndex===this.delimiterOpen.length-1){const n=this.index+1-this.delimiterOpen.length;n>this.sectionStart&&this.cbs.ontext(this.sectionStart,n),this.state=3,this.sectionStart=n}else this.delimiterIndex++;else this.inRCDATA?(this.state=32,this.stateInRCDATA(t)):(this.state=1,this.stateText(t))}stateInterpolation(t){t===this.delimiterClose[0]&&(this.state=4,this.delimiterIndex=0,this.stateInterpolationClose(t))}stateInterpolationClose(t){t===this.delimiterClose[this.delimiterIndex]?this.delimiterIndex===this.delimiterClose.length-1?(this.cbs.oninterpolation(this.sectionStart,this.index+1),this.inRCDATA?this.state=32:this.state=1,this.sectionStart=this.index+1):this.delimiterIndex++:(this.state=3,this.stateInterpolation(t))}stateSpecialStartSequence(t){const n=this.sequenceIndex===this.currentSequence.length;if(!(n?Pt(t):(t|32)===this.currentSequence[this.sequenceIndex]))this.inRCDATA=!1;else if(!n){this.sequenceIndex++;return}this.sequenceIndex=0,this.state=6,this.stateInTagName(t)}stateInRCDATA(t){if(this.sequenceIndex===this.currentSequence.length){if(t===62||Ke(t)){const n=this.index-this.currentSequence.length;if(this.sectionStart=t||(this.state===28?this.currentSequence===Ie.CdataEnd?this.cbs.oncdata(this.sectionStart,t):this.cbs.oncomment(this.sectionStart,t):this.state===6||this.state===11||this.state===18||this.state===17||this.state===12||this.state===13||this.state===14||this.state===15||this.state===16||this.state===20||this.state===19||this.state===21||this.state===9||this.cbs.ontext(this.sectionStart,t))}emitCodePoint(t,n){}}function da(e,{compatConfig:t}){const n=t&&t[e];return e==="MODE"?n||3:n}function sn(e,t){const n=da("MODE",t),s=da(e,t);return n===3?s===!0:s!==!1}function hs(e,t,n,...s){return sn(e,t)}function ro(e){throw e}function pa(e){}function ae(e,t,n,s){const i=`https://vuejs.org/error-reference/#compiler-${e}`,r=new SyntaxError(String(i));return r.code=e,r.loc=t,r}const Le=e=>e.type===4&&e.isStatic;function ma(e){switch(e){case"Teleport":case"teleport":return os;case"Suspense":case"suspense":return Br;case"KeepAlive":case"keep-alive":return fi;case"BaseTransition":case"base-transition":return sa}}const rp=/^\d|[^\$\w]/,oo=e=>!rp.test(e),op=/[A-Za-z_$\xA0-\uFFFF]/,lp=/[\.\?\w$\xA0-\uFFFF]/,cp=/\s+[.[]\s*|\s*[.[]\s+/g,ga=e=>{e=e.trim().replace(cp,o=>o.trim());let t=0,n=[],s=0,i=0,r=null;for(let o=0;ot.type===7&&t.name==="bind"&&(!t.arg||t.arg.type!==4||!t.arg.isStatic))}function lo(e){return e.type===5||e.type===2}function fp(e){return e.type===7&&e.name==="slot"}function gi(e){return e.type===1&&e.tagType===3}function yi(e){return e.type===1&&e.tagType===2}const up=new Set([cs,as]);function ya(e,t=[]){if(e&&!J(e)&&e.type===14){const n=e.callee;if(!J(n)&&up.has(n))return ya(e.arguments[0],t.concat(e))}return[e,t]}function _i(e,t,n){let s,i=e.type===13?e.props:e.arguments[2],r=[],o;if(i&&!J(i)&&i.type===14){const l=ya(i);i=l[0],r=l[1],o=r[r.length-1]}if(i==null||J(i))s=ze([t]);else if(i.type===14){const l=i.arguments[0];!J(l)&&l.type===15?_a(t,l)||l.properties.unshift(t):i.callee===Zr?s=_e(n.helper(hi),[ze([t]),i]):i.arguments.unshift(ze([t])),!s&&(s=i)}else i.type===15?(_a(t,i)||i.properties.unshift(t),s=i):(s=_e(n.helper(hi),[ze([t]),i]),o&&o.callee===as&&(o=r[r.length-2]));e.type===13?o?o.arguments[0]=s:e.props=s:o?o.arguments[0]=s:e.arguments[2]=s}function _a(e,t){let n=!1;if(e.key.type===4){const s=e.key.content;n=t.properties.some(i=>i.key.type===4&&i.key.content===s)}return n}function ds(e,t){return`_${t}_${e.replace(/[^\w]/g,(n,s)=>n==="-"?"_":e.charCodeAt(s).toString())}`}function hp(e){return e.type===14&&e.callee===no?e.arguments[1].returns:e}const dp=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ba={parseMode:"base",ns:0,delimiters:["{{","}}"],getNamespace:()=>0,isVoidTag:ys,isPreTag:ys,isCustomElement:ys,onError:ro,onWarn:pa,comments:!1,prefixIdentifiers:!1};let re=ba,ps=null,on="",xe=null,te=null,Fe="",pt=-1,ln=-1,bi=0,Lt=!1,co=null;const de=[],pe=new ip(de,{onerr:mt,ontext(e,t){Si(Te(e,t),e,t)},ontextentity(e,t,n){Si(e,t,n)},oninterpolation(e,t){if(Lt)return Si(Te(e,t),e,t);let n=e+pe.delimiterOpen.length,s=t-pe.delimiterClose.length;for(;Ke(on.charCodeAt(n));)n++;for(;Ke(on.charCodeAt(s-1));)s--;let i=Te(n,s);i.includes("&")&&(i=re.decodeEntities(i,!1)),ao({type:5,content:Ei(i,!1,be(n,s)),loc:be(e,t)})},onopentagname(e,t){const n=Te(e,t);xe={type:1,tag:n,ns:re.getNamespace(n,de[0],re.ns),tagType:0,props:[],children:[],loc:be(e-1,t),codegenNode:void 0}},onopentagend(e){va(e)},onclosetag(e,t){const n=Te(e,t);if(!re.isVoidTag(n)){let s=!1;for(let i=0;i0&&mt(24,de[0].loc.start.offset);for(let o=0;o<=i;o++){const l=de.shift();vi(l,t,o(s.type===7?s.rawName:s.name)===n)&&mt(2,t)},onattribend(e,t){if(xe&&te){if(cn(te.loc,t),e!==0)if(Fe.includes("&")&&(Fe=re.decodeEntities(Fe,!0)),te.type===6)te.name==="class"&&(Fe=Aa(Fe).trim()),e===1&&!Fe&&mt(13,t),te.value={type:2,content:Fe,loc:e===1?be(pt,ln):be(pt-1,ln+1)},pe.inSFCRoot&&xe.tag==="template"&&te.name==="lang"&&Fe&&Fe!=="html"&&pe.enterRCDATA(pi("-1&&hs("COMPILER_V_BIND_SYNC",re,te.loc,te.rawName)&&(te.name="model",te.modifiers.splice(s,1))}(te.type!==7||te.name!=="pre")&&xe.props.push(te)}Fe="",pt=ln=-1},oncomment(e,t){re.comments&&ao({type:3,content:Te(e,t),loc:be(e-4,t+3)})},onend(){const e=on.length;for(let t=0;t{const _=t.start.offset+d,x=_+f.length;return Ei(f,!1,be(_,x),0,g?1:0)},l={source:o(r.trim(),n.indexOf(r,i.length)),value:void 0,key:void 0,index:void 0,finalized:!1};let c=i.trim().replace(pp,"").trim();const a=i.indexOf(c),u=c.match(Sa);if(u){c=c.replace(Sa,"").trim();const f=u[1].trim();let d;if(f&&(d=n.indexOf(f,a+c.length),l.key=o(f,d,!0)),u[2]){const g=u[2].trim();g&&(l.index=o(g,n.indexOf(g,l.key?d+f.length:a+c.length),!0))}}return c&&(l.value=o(c,a,!0)),l}function Te(e,t){return on.slice(e,t)}function va(e){pe.inSFCRoot&&(xe.innerLoc=be(e+1,e+1)),ao(xe);const{tag:t,ns:n}=xe;n===0&&re.isPreTag(t)&&bi++,re.isVoidTag(t)?vi(xe,e):(de.unshift(xe),(n===1||n===2)&&(pe.inXML=!0)),xe=null}function Si(e,t,n){var s;{const o=(s=de[0])==null?void 0:s.tag;o!=="script"&&o!=="style"&&e.includes("&")&&(e=re.decodeEntities(e,!1))}const i=de[0]||ps,r=i.children[i.children.length-1];(r==null?void 0:r.type)===2?(r.content+=e,cn(r.loc,n)):i.children.push({type:2,content:e,loc:be(t,n)})}function vi(e,t,n=!1){n?cn(e.loc,Ea(t,60)):cn(e.loc,t+1),pe.inSFCRoot&&(e.children.length?e.innerLoc.end=ne({},e.children[e.children.length-1].loc.end):e.innerLoc.end=ne({},e.innerLoc.start),e.innerLoc.source=Te(e.innerLoc.start.offset,e.innerLoc.end.offset));const{tag:s,ns:i}=e;Lt||(s==="slot"?e.tagType=2:Ca(e)?e.tagType=3:yp(e)&&(e.tagType=1)),pe.inRCDATA||(e.children=Ta(e.children,e.tag)),i===0&&re.isPreTag(s)&&bi--,co===e&&(Lt=pe.inVPre=!1,co=null),pe.inXML&&(de[0]?de[0].ns:re.ns)===0&&(pe.inXML=!1);{const r=e.props;if(!pe.inSFCRoot&&sn("COMPILER_NATIVE_TEMPLATE",re)&&e.tag==="template"&&!Ca(e)){const l=de[0]||ps,c=l.children.indexOf(e);l.children.splice(c,1,...e.children)}const o=r.find(l=>l.type===6&&l.name==="inline-template");o&&hs("COMPILER_INLINE_TEMPLATE",re,o.loc)&&e.children.length&&(o.value={type:2,content:Te(e.children[0].loc.start.offset,e.children[e.children.length-1].loc.end.offset),loc:o.loc})}}function Ea(e,t){let n=e;for(;on.charCodeAt(n)!==t&&n>=0;)n--;return n}const gp=new Set(["if","else","else-if","for","slot"]);function Ca({tag:e,props:t}){if(e==="template"){for(let n=0;n64&&e<91}const bp=/\r\n/g;function Ta(e,t){var n,s;const i=re.whitespace!=="preserve";let r=!1;for(let o=0;o0){if(c>=2){l.codegenNode.patchFlag="-1",l.codegenNode=t.hoist(l.codegenNode),r++;continue}}else{const a=l.codegenNode;if(a.type===13){const u=Oa(a);if((!u||u===512||u===1)&&Ia(l,t)>=2){const f=xa(l);f&&(a.props=t.hoist(f))}a.dynamicProps&&(a.dynamicProps=t.hoist(a.dynamicProps))}}}if(l.type===1){const c=l.tagType===1;c&&t.scopes.vSlot++,Ci(l,t),c&&t.scopes.vSlot--}else if(l.type===11)Ci(l,t,l.children.length===1);else if(l.type===9)for(let c=0;c1)for(let a=0;ak&&(b.childIndex--,b.onNodeRemoved()),b.parent.children.splice(k,1)},onNodeRemoved:ge,addIdentifiers(E){},removeIdentifiers(E){},hoist(E){J(E)&&(E=X(E)),b.hoists.push(E);const T=X(`_hoisted_${b.hoists.length}`,!1,E.loc,2);return T.hoisted=E,T},cache(E,T=!1){return np(b.cached++,E,T)}};return b.filters=new Set,b}function Ip(e,t){const n=Np(e,t);Ti(e,n),t.hoistStatic&&Ap(e,n),t.ssr||xp(e,n),e.helpers=new Set([...n.helpers.keys()]),e.components=[...n.components],e.directives=[...n.directives],e.imports=n.imports,e.hoists=n.hoists,e.temps=n.temps,e.cached=n.cached,e.transformed=!0,e.filters=[...n.filters]}function xp(e,t){const{helper:n}=t,{children:s}=e;if(s.length===1){const i=s[0];if(wa(e,i)&&i.codegenNode){const r=i.codegenNode;r.type===13&&io(r,t),e.codegenNode=r}else e.codegenNode=i}else if(s.length>1){let i=64;e.codegenNode=fs(t,n(rs),void 0,e.children,i+"",void 0,void 0,!0,void 0,!1)}}function Op(e,t){let n=0;const s=()=>{n--};for(;ns===e:s=>e.test(s);return(s,i)=>{if(s.type===1){const{props:r}=s;if(s.tagType===3&&r.some(fp))return;const o=[];for(let l=0;l`${Nn[e]}: _${Nn[e]}`;function kp(e,{mode:t="function",prefixIdentifiers:n=t==="module",sourceMap:s=!1,filename:i="template.vue.html",scopeId:r=null,optimizeImports:o=!1,runtimeGlobalName:l="Vue",runtimeModuleName:c="vue",ssrRuntimeModuleName:a="vue/server-renderer",ssr:u=!1,isTS:f=!1,inSSR:d=!1}){const g={mode:t,prefixIdentifiers:n,sourceMap:s,filename:i,scopeId:r,optimizeImports:o,runtimeGlobalName:l,runtimeModuleName:c,ssrRuntimeModuleName:a,ssr:u,isTS:f,inSSR:d,source:e.source,code:"",column:1,line:1,offset:0,indentLevel:0,pure:!1,map:void 0,helper(x){return`_${Nn[x]}`},push(x,M=-2,P){g.code+=x},indent(){_(++g.indentLevel)},deindent(x=!1){x?--g.indentLevel:_(--g.indentLevel)},newline(){_(g.indentLevel)}};function _(x){g.push(` +`+" ".repeat(x),0)}return g}function Rp(e,t={}){const n=kp(e,t);t.onContextCreated&&t.onContextCreated(n);const{mode:s,push:i,prefixIdentifiers:r,indent:o,deindent:l,newline:c,scopeId:a,ssr:u}=n,f=Array.from(e.helpers),d=f.length>0,g=!r&&s!=="module";Mp(e,n);const x=u?"ssrRender":"render",P=(u?["_ctx","_push","_parent","_attrs"]:["_ctx","_cache"]).join(", ");if(i(`function ${x}(${P}) {`),o(),g&&(i("with (_ctx) {"),o(),d&&(i(`const { ${f.map(Ra).join(", ")} } = _Vue +`,-1),c())),e.components.length&&(fo(e.components,"component",n),(e.directives.length||e.temps>0)&&c()),e.directives.length&&(fo(e.directives,"directive",n),e.temps>0&&c()),e.filters&&e.filters.length&&(c(),fo(e.filters,"filter",n),c()),e.temps>0){i("let ");for(let A=0;A0?", ":""}_temp${A}`)}return(e.components.length||e.directives.length||e.temps)&&(i(` +`,0),c()),u||i("return "),e.codegenNode?Oe(e.codegenNode,n):i("null"),g&&(l(),i("}")),l(),i("}"),{ast:e,code:n.code,preamble:"",map:n.map?n.map.toJSON():void 0}}function Mp(e,t){const{ssr:n,prefixIdentifiers:s,push:i,newline:r,runtimeModuleName:o,runtimeGlobalName:l,ssrRuntimeModuleName:c}=t,a=l,u=Array.from(e.helpers);if(u.length>0&&(i(`const _Vue = ${a} +`,-1),e.hoists.length)){const f=[Hr,Ur,ls,Kr,oa].filter(d=>u.includes(d)).map(Ra).join(", ");i(`const { ${f} } = _Vue +`,-1)}Pp(e.hoists,t),r(),i("return ")}function fo(e,t,{helper:n,push:s,newline:i,isTS:r}){const o=n(t==="filter"?Gr:t==="component"?jr:Wr);for(let l=0;l3||!1;t.push("["),n&&t.indent(),ms(e,t,n),n&&t.deindent(),t.push("]")}function ms(e,t,n=!1,s=!0){const{push:i,newline:r}=t;for(let o=0;on||"null")}function Hp(e,t){const{push:n,helper:s,pure:i}=t,r=J(e.callee)?e.callee:s(e.callee);i&&n(Ai),n(r+"(",-2,e),ms(e.arguments,t),n(")")}function Up(e,t){const{push:n,indent:s,deindent:i,newline:r}=t,{properties:o}=e;if(!o.length){n("{}",-2,e);return}const l=o.length>1||!1;n(l?"{":"{ "),l&&s();for(let c=0;c "),(c||l)&&(n("{"),s()),o?(c&&n("return "),V(o)?uo(o,t):Oe(o,t)):l&&Oe(l,t),(c||l)&&(i(),n("}")),a&&(e.isNonScopedSlot&&n(", undefined, true"),n(")"))}function qp(e,t){const{test:n,consequent:s,alternate:i,newline:r}=e,{push:o,indent:l,deindent:c,newline:a}=t;if(n.type===4){const f=!oo(n.content);f&&o("("),Ma(n,t),f&&o(")")}else o("("),Oe(n,t),o(")");r&&l(),t.indentLevel++,r||o(" "),o("? "),Oe(s,t),t.indentLevel--,r&&a(),r||o(" "),o(": ");const u=i.type===19;u||t.indentLevel++,Oe(i,t),u||t.indentLevel--,r&&c(!0)}function Wp(e,t){const{push:n,helper:s,indent:i,deindent:r,newline:o}=t;n(`_cache[${e.index}] || (`),e.isVNode&&(i(),n(`${s(di)}(-1),`),o()),n(`_cache[${e.index}] = `),Oe(e.value,t),e.isVNode&&(n(","),o(),n(`${s(di)}(1),`),o(),n(`_cache[${e.index}]`),r()),n(")")}new RegExp("\\b"+"arguments,await,break,case,catch,class,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,let,new,return,super,switch,throw,try,var,void,while,with,yield".split(",").join("\\b|\\b")+"\\b");const Gp=ka(/^(if|else|else-if)$/,(e,t,n)=>zp(e,t,n,(s,i,r)=>{const o=n.parent.children;let l=o.indexOf(s),c=0;for(;l-->=0;){const a=o[l];a&&a.type===9&&(c+=a.branches.length)}return()=>{if(r)s.codegenNode=Fa(i,c,n);else{const a=Jp(s.codegenNode);a.alternate=Fa(i,c+s.branches.length-1,n)}}}));function zp(e,t,n,s){if(t.name!=="else"&&(!t.exp||!t.exp.content.trim())){const i=t.exp?t.exp.loc:e.loc;n.onError(ae(28,t.loc)),t.exp=X("true",!1,i)}if(t.name==="if"){const i=La(e,t),r={type:9,loc:e.loc,branches:[i]};if(n.replaceNode(r),s)return s(r,i,!0)}else{const i=n.parent.children;let r=i.indexOf(e);for(;r-->=-1;){const o=i[r];if(o&&o.type===3){n.removeNode(o);continue}if(o&&o.type===2&&!o.content.trim().length){n.removeNode(o);continue}if(o&&o.type===9){t.name==="else-if"&&o.branches[o.branches.length-1].condition===void 0&&n.onError(ae(30,e.loc)),n.removeNode();const l=La(e,t);o.branches.push(l);const c=s&&s(o,l,!1);Ti(l,n),c&&c(),n.currentNode=null}else n.onError(ae(30,e.loc));break}}}function La(e,t){const n=e.tagType===3;return{type:10,loc:e.loc,condition:t.name==="else"?void 0:t.exp,children:n&&!tt(e,"for")?e.children:[e],userKey:mi(e,"key"),isTemplateIf:n}}function Fa(e,t,n){return e.condition?so(e.condition,$a(e,t,n),_e(n.helper(ls),['""',"true"])):$a(e,t,n)}function $a(e,t,n){const{helper:s}=n,i=he("key",X(`${t}`,!1,Ue,2)),{children:r}=e,o=r[0];if(r.length!==1||o.type!==1)if(r.length===1&&o.type===11){const c=o.codegenNode;return _i(c,i,n),c}else return fs(n,s(rs),ze([i]),r,64+"",void 0,void 0,!0,!1,!1,e.loc);else{const c=o.codegenNode,a=hp(c);return a.type===13&&io(a,n),_i(a,i,n),c}}function Jp(e){for(;;)if(e.type===19)if(e.alternate.type===19)e=e.alternate;else return e;else e.type===20&&(e=e.value)}const Yp=ka("for",(e,t,n)=>{const{helper:s,removeHelper:i}=n;return Xp(e,t,n,r=>{const o=_e(s(Jr),[r.source]),l=gi(e),c=tt(e,"memo"),a=mi(e,"key"),u=a&&(a.type===6?X(a.value.content,!0):a.exp),f=a?he("key",u):null,d=r.source.type===4&&r.source.constType>0,g=d?64:a?128:256;return r.codegenNode=fs(n,s(rs),void 0,o,g+"",void 0,void 0,!0,!d,!1,e.loc),()=>{let _;const{children:x}=r,M=x.length!==1||x[0].type!==1,P=yi(e)?e:l&&e.children.length===1&&yi(e.children[0])?e.children[0]:null;if(P?(_=P.codegenNode,l&&f&&_i(_,f,n)):M?_=fs(n,s(rs),f?ze([f]):void 0,e.children,"64",void 0,void 0,!0,void 0,!1):(_=x[0].codegenNode,l&&f&&_i(_,f,n),_.isBlock!==!d&&(_.isBlock?(i(nn),i(On(n.inSSR,_.isComponent))):i(xn(n.inSSR,_.isComponent))),_.isBlock=!d,_.isBlock?(s(nn),s(On(n.inSSR,_.isComponent))):s(xn(n.inSSR,_.isComponent))),c){const A=In(ho(r.parseResult,[X("_cached")]));A.body=sp([et(["const _memo = (",c.exp,")"]),et(["if (_cached",...u?[" && _cached.key === ",u]:[],` && ${n.helperString(aa)}(_cached, _memo)) return _cached`]),et(["const _item = ",_]),X("_item.memo = _memo"),X("return _item")]),o.arguments.push(A,X("_cache"),X(String(n.cached++)))}else o.arguments.push(In(ho(r.parseResult),_,!0))}})});function Xp(e,t,n,s){if(!t.exp){n.onError(ae(31,t.loc));return}const i=t.forParseResult;if(!i){n.onError(ae(32,t.loc));return}Da(i);const{addIdentifiers:r,removeIdentifiers:o,scopes:l}=n,{source:c,value:a,key:u,index:f}=i,d={type:11,loc:t.loc,source:c,valueAlias:a,keyAlias:u,objectIndexAlias:f,parseResult:i,children:gi(e)?e.children:[e]};n.replaceNode(d),l.vFor++;const g=s&&s(d);return()=>{l.vFor--,g&&g()}}function Da(e,t){e.finalized||(e.finalized=!0)}function ho({value:e,key:t,index:n},s=[]){return Zp([e,t,n,...s])}function Zp(e){let t=e.length;for(;t--&&!e[t];);return e.slice(0,t+1).map((n,s)=>n||X("_".repeat(s+1),!1))}const Va=X("undefined",!1),Qp=(e,t)=>{if(e.type===1&&(e.tagType===1||e.tagType===3)){const n=tt(e,"slot");if(n)return n.exp,t.scopes.vSlot++,()=>{t.scopes.vSlot--}}},em=(e,t,n,s)=>In(e,n,!1,!0,n.length?n[0].loc:s);function tm(e,t,n=em){t.helper(to);const{children:s,loc:i}=e,r=[],o=[];let l=t.scopes.vSlot>0||t.scopes.vFor>0;const c=tt(e,"slot",!0);if(c){const{arg:M,exp:P}=c;M&&!Le(M)&&(l=!0),r.push(he(M||X("default",!0),n(P,void 0,s,i)))}let a=!1,u=!1;const f=[],d=new Set;let g=0;for(let M=0;M{const m=n(P,void 0,A,i);return t.compatConfig&&(m.isNonScopedSlot=!0),he("default",m)};a?f.length&&f.some(P=>Ba(P))&&(u?t.onError(ae(39,f[0].loc)):r.push(M(void 0,f))):r.push(M(void 0,s))}const _=l?2:Ni(e.children)?3:1;let x=ze(r.concat(he("_",X(_+"",!1))),i);return o.length&&(x=_e(t.helper(ca),[x,us(o)])),{slots:x,hasDynamicSlots:l}}function wi(e,t,n){const s=[he("name",e),he("fn",t)];return n!=null&&s.push(he("key",X(String(n),!0))),ze(s)}function Ni(e){for(let t=0;tfunction(){if(e=t.currentNode,!(e.type===1&&(e.tagType===0||e.tagType===1)))return;const{tag:s,props:i}=e,r=e.tagType===1;let o=r?sm(e,t):`"${s}"`;const l=oe(o)&&o.callee===qr;let c,a,u,f=0,d,g,_,x=l||o===os||o===Br||!r&&(s==="svg"||s==="foreignObject");if(i.length>0){const M=Ua(e,t,void 0,r,l);c=M.props,f=M.patchFlag,g=M.dynamicPropNames;const P=M.directives;_=P&&P.length?us(P.map(A=>rm(A,t))):void 0,M.shouldUseBlock&&(x=!0)}if(e.children.length>0)if(o===fi&&(x=!0,f|=1024),r&&o!==os&&o!==fi){const{slots:P,hasDynamicSlots:A}=tm(e,t);a=P,A&&(f|=1024)}else if(e.children.length===1&&o!==os){const P=e.children[0],A=P.type,m=A===5||A===8;m&&Je(P,t)===0&&(f|=1),m||A===2?a=P:a=e.children}else a=e.children;f!==0&&(u=String(f),g&&g.length&&(d=om(g))),e.codegenNode=fs(t,o,c,a,u,d,_,!!x,!1,r,e.loc)};function sm(e,t,n=!1){let{tag:s}=e;const i=po(s),r=mi(e,"is");if(r)if(i||sn("COMPILER_IS_ON_ELEMENT",t)){const l=r.type===6?r.value&&X(r.value.content,!0):r.exp;if(l)return _e(t.helper(qr),[l])}else r.type===6&&r.value.content.startsWith("vue:")&&(s=r.value.content.slice(4));const o=ma(s)||t.isBuiltInComponent(s);return o?(n||t.helper(o),o):(t.helper(jr),t.components.add(s),ds(s,"component"))}function Ua(e,t,n=e.props,s,i,r=!1){const{tag:o,loc:l,children:c}=e;let a=[];const u=[],f=[],d=c.length>0;let g=!1,_=0,x=!1,M=!1,P=!1,A=!1,m=!1,y=!1;const S=[],C=E=>{a.length&&(u.push(ze(Ka(a),l)),a=[]),E&&u.push(E)},F=({key:E,value:T})=>{if(Le(E)){const k=E.content,w=Dt(k);if(w&&(!s||i)&&k.toLowerCase()!=="onclick"&&k!=="onUpdate:modelValue"&&!yt(k)&&(A=!0),w&&yt(k)&&(y=!0),w&&T.type===14&&(T=T.arguments[0]),T.type===20||(T.type===4||T.type===8)&&Je(T,t)>0)return;k==="ref"?x=!0:k==="class"?M=!0:k==="style"?P=!0:k!=="key"&&!S.includes(k)&&S.push(k),s&&(k==="class"||k==="style")&&!S.includes(k)&&S.push(k)}else m=!0};for(let E=0;E0&&a.push(he(X("ref_for",!0),X("true")))),w==="is"&&(po(o)||G&&G.content.startsWith("vue:")||sn("COMPILER_IS_ON_ELEMENT",t)))continue;a.push(he(X(w,!0,B),X(G?G.content:"",Q,G?G.loc:k)))}else{const{name:k,arg:w,exp:B,loc:G,modifiers:Q}=T,H=k==="bind",Y=k==="on";if(k==="slot"){s||t.onError(ae(40,G));continue}if(k==="once"||k==="memo"||k==="is"||H&&rn(w,"is")&&(po(o)||sn("COMPILER_IS_ON_ELEMENT",t))||Y&&r)continue;if((H&&rn(w,"key")||Y&&d&&rn(w,"vue:before-update"))&&(g=!0),H&&rn(w,"ref")&&t.scopes.vFor>0&&a.push(he(X("ref_for",!0),X("true"))),!w&&(H||Y)){if(m=!0,B)if(H){if(C(),sn("COMPILER_V_BIND_OBJECT_ORDER",t)){u.unshift(B);continue}u.push(B)}else C({type:14,loc:G,callee:t.helper(Zr),arguments:s?[B]:[B,"true"]});else t.onError(ae(H?34:35,G));continue}H&&Q.includes("prop")&&(_|=32);const K=t.directiveTransforms[k];if(K){const{props:je,needRuntime:$t}=K(T,e,t);!r&&je.forEach(F),Y&&w&&!Le(w)?C(ze(je,l)):a.push(...je),$t&&(f.push(T),Ye($t)&&Ha.set(T,$t))}else _f(k)||(f.push(T),d&&(g=!0))}}let b;if(u.length?(C(),u.length>1?b=_e(t.helper(hi),u,l):b=u[0]):a.length&&(b=ze(Ka(a),l)),m?_|=16:(M&&!s&&(_|=2),P&&!s&&(_|=4),S.length&&(_|=8),A&&(_|=32)),!g&&(_===0||_===32)&&(x||y||f.length>0)&&(_|=512),!t.inSSR&&b)switch(b.type){case 15:let E=-1,T=-1,k=!1;for(let G=0;Ghe(o,r)),i))}return us(n,e.loc)}function om(e){let t="[";for(let n=0,s=e.length;n{if(yi(e)){const{children:n,loc:s}=e,{slotName:i,slotProps:r}=cm(e,t),o=[t.prefixIdentifiers?"_ctx.$slots":"$slots",i,"{}","undefined","true"];let l=2;r&&(o[2]=r,l=3),n.length&&(o[3]=In([],n,!1,!1,s),l=4),t.scopeId&&!t.slotted&&(l=5),o.splice(l),e.codegenNode=_e(t.helper(la),o,s)}};function cm(e,t){let n='"default"',s;const i=[];for(let r=0;r0){const{props:r,directives:o}=Ua(e,t,i,!1,!1);s=r,o.length&&t.onError(ae(36,o[0].loc))}return{slotName:n,slotProps:s}}const am=/^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*(:[^=]+)?=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/,ja=(e,t,n,s)=>{const{loc:i,modifiers:r,arg:o}=e;!e.exp&&!r.length&&n.onError(ae(35,i));let l;if(o.type===4)if(o.isStatic){let f=o.content;f.startsWith("vue:")&&(f=`vnode-${f.slice(4)}`);const d=t.tagType!==0||f.startsWith("vnode")||!/[A-Z]/.test(f)?mn(ue(f)):`on:${f}`;l=X(d,!0,o.loc)}else l=et([`${n.helperString(eo)}(`,o,")"]);else l=o,l.children.unshift(`${n.helperString(eo)}(`),l.children.push(")");let c=e.exp;c&&!c.content.trim()&&(c=void 0);let a=n.cacheHandlers&&!c&&!n.inVOnce;if(c){const f=ga(c.content),d=!(f||am.test(c.content)),g=c.content.includes(";");(d||a&&f)&&(c=et([`${d?"$event":"(...args)"} => ${g?"{":"("}`,c,g?"}":")"]))}let u={props:[he(l,c||X("() => {}",!1,i))]};return s&&(u=s(u)),a&&(u.props[0].value=n.cache(u.props[0].value)),u.props.forEach(f=>f.key.isHandlerKey=!0),u},fm=(e,t,n)=>{const{modifiers:s,loc:i}=e,r=e.arg;let{exp:o}=e;if(o&&o.type===4&&!o.content.trim()&&(o=void 0),!o){if(r.type!==4||!r.isStatic)return n.onError(ae(52,r.loc)),{props:[he(r,X("",!0,i))]};const l=ue(r.content);o=e.exp=X(l,!1,r.loc)}return r.type!==4?(r.children.unshift("("),r.children.push(') || ""')):r.isStatic||(r.content=`${r.content} || ""`),s.includes("camel")&&(r.type===4?r.isStatic?r.content=ue(r.content):r.content=`${n.helperString(Qr)}(${r.content})`:(r.children.unshift(`${n.helperString(Qr)}(`),r.children.push(")"))),n.inSSR||(s.includes("prop")&&qa(r,"."),s.includes("attr")&&qa(r,"^")),{props:[he(r,o)]}},qa=(e,t)=>{e.type===4?e.isStatic?e.content=t+e.content:e.content=`\`${t}\${${e.content}}\``:(e.children.unshift(`'${t}' + (`),e.children.push(")"))},um=(e,t)=>{if(e.type===0||e.type===1||e.type===11||e.type===10)return()=>{const n=e.children;let s,i=!1;for(let r=0;rr.type===7&&!t.directiveTransforms[r.name])&&e.tag!=="template")))for(let r=0;r{if(e.type===1&&tt(e,"once",!0))return Wa.has(e)||t.inVOnce||t.inSSR?void 0:(Wa.add(e),t.inVOnce=!0,t.helper(di),()=>{t.inVOnce=!1;const n=t.currentNode;n.codegenNode&&(n.codegenNode=t.cache(n.codegenNode,!0))})},Ga=(e,t,n)=>{const{exp:s,arg:i}=e;if(!s)return n.onError(ae(41,e.loc)),Ii();const r=s.loc.source,o=s.type===4?s.content:r,l=n.bindingMetadata[r];if(l==="props"||l==="props-aliased")return n.onError(ae(44,s.loc)),Ii();if(!o.trim()||!ga(o)&&!!1)return n.onError(ae(42,s.loc)),Ii();const a=i||X("modelValue",!0),u=i?Le(i)?`onUpdate:${ue(i.content)}`:et(['"onUpdate:" + ',i]):"onUpdate:modelValue";let f;const d=n.isTS?"($event: any)":"$event";f=et([`${d} => ((`,s,") = $event)"]);const g=[he(a,e.exp),he(u,f)];if(e.modifiers.length&&t.tagType===1){const _=e.modifiers.map(M=>(oo(M)?M:JSON.stringify(M))+": true").join(", "),x=i?Le(i)?`${i.content}Modifiers`:et([i,' + "Modifiers"']):"modelModifiers";g.push(he(x,X(`{ ${_} }`,!1,e.loc,2)))}return Ii(g)};function Ii(e=[]){return{props:e}}const dm=/[\w).+\-_$\]]/,pm=(e,t)=>{sn("COMPILER_FILTERS",t)&&(e.type===5&&xi(e.content,t),e.type===1&&e.props.forEach(n=>{n.type===7&&n.name!=="for"&&n.exp&&xi(n.exp,t)}))};function xi(e,t){if(e.type===4)za(e,t);else for(let n=0;n=0&&(A=n.charAt(P),A===" ");P--);(!A||!dm.test(A))&&(o=!0)}}_===void 0?_=n.slice(0,g).trim():u!==0&&M();function M(){x.push(n.slice(u,g).trim()),u=g+1}if(x.length){for(g=0;g{if(e.type===1){const n=tt(e,"memo");return!n||Ja.has(e)?void 0:(Ja.add(e),()=>{const s=e.codegenNode||t.currentNode.codegenNode;s&&s.type===13&&(e.tagType!==1&&io(s,t),e.codegenNode=_e(t.helper(no),[n.exp,In(void 0,s),"_cache",String(t.cached++)]))})}};function ym(e){return[[hm,Gp,gm,Yp,pm,lm,nm,Qp,um],{on:ja,bind:fm,model:Ga}]}function _m(e,t={}){const n=t.onError||ro,s=t.mode==="module";t.prefixIdentifiers===!0?n(ae(47)):s&&n(ae(48));const i=!1;t.cacheHandlers&&n(ae(49)),t.scopeId&&!s&&n(ae(50));const r=ne({},t,{prefixIdentifiers:i}),o=J(e)?Tp(e,r):e,[l,c]=ym();return Ip(o,ne({},r,{nodeTransforms:[...l,...t.nodeTransforms||[]],directiveTransforms:ne({},c,t.directiveTransforms||{})})),Rp(o,r)}const bm=()=>({props:[]});/** +* @vue/compiler-dom v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Ya=Symbol(""),Xa=Symbol(""),Za=Symbol(""),Qa=Symbol(""),mo=Symbol(""),ef=Symbol(""),tf=Symbol(""),nf=Symbol(""),sf=Symbol(""),rf=Symbol("");ep({[Ya]:"vModelRadio",[Xa]:"vModelCheckbox",[Za]:"vModelText",[Qa]:"vModelSelect",[mo]:"vModelDynamic",[ef]:"withModifiers",[tf]:"withKeys",[nf]:"vShow",[sf]:"Transition",[rf]:"TransitionGroup"});let kn;function Sm(e,t=!1){return kn||(kn=document.createElement("div")),t?(kn.innerHTML=`
    `,kn.children[0].getAttribute("foo")):(kn.innerHTML=e,kn.textContent)}const vm={parseMode:"html",isVoidTag:Mf,isNativeTag:e=>Of(e)||kf(e)||Rf(e),isPreTag:e=>e==="pre",decodeEntities:Sm,isBuiltInComponent:e=>{if(e==="Transition"||e==="transition")return sf;if(e==="TransitionGroup"||e==="transition-group")return rf},getNamespace(e,t,n){let s=t?t.ns:n;if(t&&s===2)if(t.tag==="annotation-xml"){if(e==="svg")return 1;t.props.some(i=>i.type===6&&i.name==="encoding"&&i.value!=null&&(i.value.content==="text/html"||i.value.content==="application/xhtml+xml"))&&(s=0)}else/^m(?:[ions]|text)$/.test(t.tag)&&e!=="mglyph"&&e!=="malignmark"&&(s=0);else t&&s===1&&(t.tag==="foreignObject"||t.tag==="desc"||t.tag==="title")&&(s=0);if(s===0){if(e==="svg")return 1;if(e==="math")return 2}return s}},Em=e=>{e.type===1&&e.props.forEach((t,n)=>{t.type===6&&t.name==="style"&&t.value&&(e.props[n]={type:7,name:"bind",arg:X("style",!0,t.loc),exp:Cm(t.value.content,t.loc),modifiers:[],loc:t.loc})})},Cm=(e,t)=>{const n=To(e);return X(JSON.stringify(n),!1,t,3)};function Ft(e,t){return ae(e,t)}const Tm=(e,t,n)=>{const{exp:s,loc:i}=e;return s||n.onError(Ft(53,i)),t.children.length&&(n.onError(Ft(54,i)),t.children.length=0),{props:[he(X("innerHTML",!0,i),s||X("",!0))]}},Am=(e,t,n)=>{const{exp:s,loc:i}=e;return s||n.onError(Ft(55,i)),t.children.length&&(n.onError(Ft(56,i)),t.children.length=0),{props:[he(X("textContent",!0),s?Je(s,n)>0?s:_e(n.helperString(ui),[s],i):X("",!0))]}},wm=(e,t,n)=>{const s=Ga(e,t,n);if(!s.props.length||t.tagType===1)return s;e.arg&&n.onError(Ft(58,e.arg.loc));const{tag:i}=t,r=n.isCustomElement(i);if(i==="input"||i==="textarea"||i==="select"||r){let o=Za,l=!1;if(i==="input"||r){const c=mi(t,"type");if(c){if(c.type===7)o=mo;else if(c.value)switch(c.value.content){case"radio":o=Ya;break;case"checkbox":o=Xa;break;case"file":l=!0,n.onError(Ft(59,e.loc));break}}else ap(t)&&(o=mo)}else i==="select"&&(o=Qa);l||(s.needRuntime=n.helper(o))}else n.onError(Ft(57,e.loc));return s.props=s.props.filter(o=>!(o.key.type===4&&o.key.content==="modelValue")),s},Nm=$e("passive,once,capture"),Im=$e("stop,prevent,self,ctrl,shift,alt,meta,exact,middle"),xm=$e("left,right"),of=$e("onkeyup,onkeydown,onkeypress",!0),Om=(e,t,n,s)=>{const i=[],r=[],o=[];for(let l=0;lLe(e)&&e.content.toLowerCase()==="onclick"?X(t,!0):e.type!==4?et(["(",e,`) === "onClick" ? "${t}" : (`,e,")"]):e,km=(e,t,n)=>ja(e,t,n,s=>{const{modifiers:i}=e;if(!i.length)return s;let{key:r,value:o}=s.props[0];const{keyModifiers:l,nonKeyModifiers:c,eventOptionModifiers:a}=Om(r,i,n,e.loc);if(c.includes("right")&&(r=lf(r,"onContextmenu")),c.includes("middle")&&(r=lf(r,"onMouseup")),c.length&&(o=_e(n.helper(ef),[o,JSON.stringify(c)])),l.length&&(!Le(r)||of(r.content))&&(o=_e(n.helper(tf),[o,JSON.stringify(l)])),a.length){const u=a.map(Bt).join("");r=Le(r)?X(`${r.content}${u}`,!0):et(["(",r,`) + "${u}"`])}return{props:[he(r,o)]}}),Rm=(e,t,n)=>{const{exp:s,loc:i}=e;return s||n.onError(Ft(61,i)),{props:[],needRuntime:n.helper(nf)}},Mm=(e,t)=>{e.type===1&&e.tagType===0&&(e.tag==="script"||e.tag==="style")&&t.removeNode()},Pm=[Em],Lm={cloak:bm,html:Tm,text:Am,model:wm,on:km,show:Rm};function Fm(e,t={}){return _m(e,ne({},vm,t,{nodeTransforms:[Mm,...Pm,...t.nodeTransforms||[]],directiveTransforms:ne({},Lm,t.directiveTransforms||{}),transformHoist:null}))}/** +* vue v3.4.21 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const cf=new WeakMap;function $m(e){let t=cf.get(e??ie);return t||(t=Object.create(null),cf.set(e??ie,t)),t}function Dm(e,t){if(!J(e))if(e.nodeType)e=e.innerHTML;else return ge;const n=e,s=$m(t),i=s[n];if(i)return i;if(e[0]==="#"){const c=document.querySelector(e);e=c?c.innerHTML:""}const r=ne({hoistStatic:!0,onError:void 0,onWarn:ge},t);!r.isCustomElement&&typeof customElements<"u"&&(r.isCustomElement=c=>!!customElements.get(c));const{code:o}=Fm(e,r),l=new Function("Vue",o)(zd);return l._rc=!0,s[n]=l}ac(Dm);const Vm={name:"App",data(){return{isSidebarOpen:!1,swUpdateEvent:null}},computed:{pageClasses(){return[{"sidebar-open":this.isSidebarOpen}]}},methods:{toggleSidebar(e){this.isSidebarOpen=typeof e=="boolean"?e:!this.isSidebarOpen}}},an=(e,t)=>{const n=e.__vccOpts||e;for(const[s,i]of t)n[s]=i;return n},Bm={},Hm={class:"icon outbound",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},Um=[Ne("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"},null,-1),Ne("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"},null,-1)];function Km(e,t){return Ze(),Nt("svg",Hm,Um)}const jm=an(Bm,[["render",Km]]),qm={},Wm=[Ne("svg",{class:"icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"},[Ne("path",{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z",class:""})],-1)];function Gm(e,t){return Ze(),Nt("div",{class:"sidebar-button",onClick:t[0]||(t[0]=n=>e.$emit("toggle-sidebar"))},Wm)}const zm=an(qm,[["render",Gm]]);function af(e,t,n){e.remove(...n);const s=[...e];e.value="",e.add(...t,...s)}const Jm={data(){return{darkmode:"auto"}},mounted(){const e=localStorage.getItem("darkmode");this.setDarkmode(e||"auto")},methods:{setDarkmode(e){if(console.log(e),e==="on")this.toggleDarkmode(!0);else if(e==="off")this.toggleDarkmode(!1);else{const t=window.matchMedia("(prefers-color-scheme: dark)").matches,n=window.matchMedia("(prefers-color-scheme: light)").matches;if(window.matchMedia("(prefers-color-scheme: dark)").addListener(s=>s.matches&&this.toggleDarkmode(!0)),window.matchMedia("(prefers-color-scheme: light)").addListener(s=>s.matches&&this.toggleDarkmode(!1)),t)this.toggleDarkmode(!0);else if(n)this.toggleDarkmode(!1);else{const s=new Date().getHours();this.toggleDarkmode(s<6||s>=18)}}this.darkmode=e,localStorage.setItem("darkmode",e)},toggleDarkmode(e){const t=document.body.classList;e?af(t,["theme-dark"],["theme-light"]):af(t,["theme-light"],["theme-dark"])}}},Ym={class:"darkmode-switch"},Xm=[Ne("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[Ne("path",{d:"M512 256a42.666667 42.666667 0 0 0 42.666667-42.666667V128a42.666667 42.666667 0 0 0-85.333334 0v85.333333a42.666667 42.666667 0 0 0 42.666667 42.666667zM896 469.333333h-85.333333a42.666667 42.666667 0 0 0 0 85.333334h85.333333a42.666667 42.666667 0 0 0 0-85.333334zM256 512a42.666667 42.666667 0 0 0-42.666667-42.666667H128a42.666667 42.666667 0 0 0 0 85.333334h85.333333a42.666667 42.666667 0 0 0 42.666667-42.666667zM265.386667 213.333333a42.666667 42.666667 0 0 0-59.306667 62.72l61.44 59.306667a42.666667 42.666667 0 0 0 31.146667 11.946667 42.666667 42.666667 0 0 0 30.72-13.226667 42.666667 42.666667 0 0 0 0-60.16zM725.333333 347.306667a42.666667 42.666667 0 0 0 29.44-11.946667l61.44-59.306667A42.666667 42.666667 0 0 0 758.613333 213.333333l-61.44 60.586667a42.666667 42.666667 0 0 0 0 60.16 42.666667 42.666667 0 0 0 28.16 13.226667zM512 768a42.666667 42.666667 0 0 0-42.666667 42.666667v85.333333a42.666667 42.666667 0 0 0 85.333334 0v-85.333333a42.666667 42.666667 0 0 0-42.666667-42.666667zM756.48 688.64a42.666667 42.666667 0 0 0-59.306667 61.44L758.613333 810.666667a42.666667 42.666667 0 0 0 29.44 11.946666 42.666667 42.666667 0 0 0 30.72-12.8 42.666667 42.666667 0 0 0 0-60.586666zM267.52 688.64l-61.44 59.306667a42.666667 42.666667 0 0 0 0 60.586666 42.666667 42.666667 0 0 0 30.72 12.8 42.666667 42.666667 0 0 0 28.586667-10.666666l61.44-59.306667a42.666667 42.666667 0 0 0-59.306667-61.44zM512 341.333333a170.666667 170.666667 0 1 0 170.666667 170.666667 170.666667 170.666667 0 0 0-170.666667-170.666667z"})],-1)],Zm=[Ne("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[Ne("path",{d:"M460.864 539.072h103.936l-54.208-163.072-49.728 163.072z m411.136-176.704V149.504h-212.352L510.528 0l-149.12 149.504H149.12v212.928L0 511.872l149.12 149.504v212.928h212.352l149.12 149.504 149.12-149.504h212.352v-212.928l149.12-149.504-149.184-149.504zM614.464 693.12l-31.616-90.624H438.272l-31.616 90.624H320.768l144.576-407.68h90.368l144.576 407.68H614.464z m0 0"})],-1)],Qm=[Ne("svg",{class:"icon",viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[Ne("path",{d:"M935.538601 630.40178c-11.43005-11.432249-28.673759-14.738607-43.531086-8.353536-46.733115 20.10317-96.362866 30.296859-147.50719 30.296859-99.589478 0-193.221796-38.783705-263.640252-109.20316-108.636744-108.636744-139.609745-270.022125-78.9083-411.148441 6.388069-14.85233 3.078713-32.098837-8.353536-43.532285-11.432249-11.432249-28.675758-14.743604-43.532285-8.354536-52.637312 22.64025-100.017388 54.809439-140.82552 95.616372-85.346135 85.346135-132.346869 198.821199-132.346869 319.519766 0 120.699566 47.001733 234.172631 132.347868 319.518766s198.821199 132.349067 319.517567 132.349067c120.699566 0 234.172431-47.002932 319.520765-132.351066 40.808132-40.810131 72.977122-88.190207 95.615373-140.82552C950.282205 659.081735 946.971849 641.834029 935.538601 630.40178z","p-id":"3638"})],-1)];function eg(e,t,n,s,i,r){return Ze(),Nt("div",Ym,[Ne("div",{class:_t(["item day",{active:i.darkmode==="off"}]),onClick:t[0]||(t[0]=o=>r.setDarkmode("off"))},Xm,2),Ne("div",{class:_t(["item auto",{active:i.darkmode==="auto"}]),onClick:t[1]||(t[1]=o=>r.setDarkmode("auto"))},Zm,2),Ne("div",{class:_t(["item night",{active:i.darkmode==="on"}]),onClick:t[2]||(t[2]=o=>r.setDarkmode("on"))},Qm,2)])}const tg={components:{SidebarButton:zm,DarkmodeSwitch:an(Jm,[["render",eg]])}},ng={class:"navbar"};function sg(e,t,n,s,i,r){const o=tr("SidebarButton"),l=tr("DarkmodeSwitch");return Ze(),Nt("header",ng,[ce(o,{onToggleSidebar:t[0]||(t[0]=c=>e.$emit("toggle-sidebar"))}),Cn(e.$slots,"default"),ce(l)])}const ig=an(tg,[["render",sg]]),rg={},og={class:"nav-links"};function lg(e,t,n,s,i,r){return Ze(),Nt("nav",og,[Cn(e.$slots,"default")])}const cg=an(rg,[["render",lg]]),ag={},fg={class:"vp-sidebar"};function ug(e,t,n,s,i,r){return Ze(),Nt("div",fg,[Cn(e.$slots,"default")])}const hg=an(ag,[["render",ug]]),dg={},pg={class:"page"};function mg(e,t,n,s,i,r){return Ze(),Nt("div",pg,[Cn(e.$slots,"default"),Cn(e.$slots,"bottom")])}const gg=an(dg,[["render",mg]]),fn=Qc(Vm);fn.component("outboundlink",jm),fn.component("navbar",ig),fn.component("navlinks",cg),fn.component("sidebar",hg),fn.component("page",gg),fn.component("router-link",{props:["to"],template:''}),fn.mount("#app",!0)})(); diff --git a/api/bilevel/external-solvers/MibS.html b/api/bilevel/external-solvers/MibS.html new file mode 100644 index 000000000..1164a23cb --- /dev/null +++ b/api/bilevel/external-solvers/MibS.html @@ -0,0 +1,580 @@ + + + + + + + Bilevel::MibS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel::MibS

    +
    +

    Doxygen

    +
    +
    +class MibS : public idol::OptimizerFactoryWithDefaultParameters<MibS>
    +
    +

    Public Functions

    +
    +
    +explicit MibS(Bilevel::Description t_description)
    +
    + +
    +
    +MibS(const MibS &t_src)
    +
    + +
    +
    +MibS(MibS&&) noexcept = delete
    +
    + +
    +
    +MibS &operator=(const MibS&) = delete
    +
    + +
    +
    +MibS &operator=(MibS&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +MibS &with_cplex_for_feasibility(bool t_value)
    +
    + +
    +
    +MibS &with_file_interface(bool t_value)
    +
    + +
    +
    +MibS &add_callback(const CallbackFactory &t_cb)
    +
    + +
    +
    +virtual MibS *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +MibS &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &conditional(bool t_conditional_value, const std::function<void(MibS&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &conditional(bool t_conditional_value, const std::function<void(MibS&)> &t_if, const std::function<void(MibS&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/external-solvers/Optimizers_MibS.html b/api/bilevel/external-solvers/Optimizers_MibS.html new file mode 100644 index 000000000..b853f441b --- /dev/null +++ b/api/bilevel/external-solvers/Optimizers_MibS.html @@ -0,0 +1,246 @@ + + + + + + + Optimizers::Bilevel::MibS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::Bilevel::MibS

    +
    +

    Doxygen

    +
    +

    Warning

    +

    doxygenclass: Cannot find class “idol::Optimizers::Bilevel::MibS” in doxygen xml output for project “idol” from directory: _build/xml/

    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/index.html b/api/bilevel/index.html new file mode 100644 index 000000000..bb1a419ba --- /dev/null +++ b/api/bilevel/index.html @@ -0,0 +1,265 @@ + + + + + + + Bilevel Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel Optimization

    +
    +

    Modeling

    + +
    +
    +

    External Solvers

    + +
    +
    +

    Single-level Reformulations

    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/modeling/Description.html b/api/bilevel/modeling/Description.html new file mode 100644 index 000000000..2fa58a26b --- /dev/null +++ b/api/bilevel/modeling/Description.html @@ -0,0 +1,350 @@ + + + + + + + Bilevel::Description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel::Description

    +
    +

    Doxygen

    +
    +
    +class Description
    +
    +

    Public Functions

    +
    +
    +inline Description(Env &t_env, const std::string &t_name)
    +
    + +
    +
    +inline explicit Description(Env &t_env)
    +
    + +
    +
    +inline explicit Description(const Annotation<unsigned int> &t_lower_level)
    +
    + +
    +
    +inline Description(const Annotation<unsigned int> &t_lower_level, AffExpr<Var> t_follower_objective)
    +
    + +
    +
    +inline const Annotation<unsigned int> &lower_level() const
    +
    + +
    +
    +inline const QuadExpr<Var> &follower_obj() const
    +
    + +
    +
    +inline void make_upper_level(const Var &t_var)
    +
    + +
    +
    +inline void make_upper_level(const Ctr &t_ctr)
    +
    + +
    +
    +inline void make_upper_level(const QCtr &t_ctr)
    +
    + +
    +
    +inline void make_lower_level(const Var &t_var)
    +
    + +
    +
    +template<unsigned int N>
    inline void make_lower_level(const Vector<Var, N> &t_vars)
    +
    + +
    +
    +inline void make_lower_level(const Ctr &t_ctr)
    +
    + +
    +
    +inline void make_lower_level(const QCtr &t_ctr)
    +
    + +
    +
    +inline void set_lower_level_obj(QuadExpr<Var> t_objective)
    +
    + +
    +
    +inline bool is_upper(const Var &t_var) const
    +
    + +
    +
    +inline bool is_upper(const Ctr &t_ctr) const
    +
    + +
    +
    +inline bool is_upper(const QCtr &t_ctr) const
    +
    + +
    +
    +inline bool is_lower(const Var &t_var) const
    +
    + +
    +
    +inline bool is_lower(const Ctr &t_ctr) const
    +
    + +
    +
    +inline bool is_lower(const QCtr &t_ctr) const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/single-level/KKT.html b/api/bilevel/single-level/KKT.html new file mode 100644 index 000000000..d7c895133 --- /dev/null +++ b/api/bilevel/single-level/KKT.html @@ -0,0 +1,578 @@ + + + + + + + Bilevel::KKT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel::KKT

    +
    +

    Doxygen

    +
    +
    +class KKT : public idol::OptimizerFactoryWithDefaultParameters<KKT>
    +
    +

    Public Functions

    +
    +
    +explicit KKT(const Bilevel::Description &t_description)
    +
    + +
    +
    +KKT(const KKT &t_src)
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual OptimizerFactory *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +KKT &with_single_level_optimizer(const OptimizerFactory &t_deterministic_optimizer)
    +
    + +
    +
    +KKT &with_big_M(const Annotation<double> &t_big_M)
    +
    + +
    +
    +inline KKT &operator+=(const OptimizerFactory &t_optimizer)
    +
    + +
    +
    +KKT &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &conditional(bool t_conditional_value, const std::function<void(KKT&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +KKT &conditional(bool t_conditional_value, const std::function<void(KKT&)> &t_if, const std::function<void(KKT&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Model make_model(const Model &t_model, const Bilevel::Description &t_description)
    +
    + +
    +
    +static Model make_model(const Model &t_model, const Bilevel::Description &t_description, const Annotation<double> &t_big_M)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/single-level/Optimizers_KKT.html b/api/bilevel/single-level/Optimizers_KKT.html new file mode 100644 index 000000000..49f6ea0e3 --- /dev/null +++ b/api/bilevel/single-level/Optimizers_KKT.html @@ -0,0 +1,495 @@ + + + + + + + Optimizers::Bilevel::KKT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::Bilevel::KKT

    +
    +

    Doxygen

    +
    +
    +class KKT : public idol::Algorithm
    +
    +

    Public Functions

    +
    +
    +KKT(const Model &t_parent, const idol::Bilevel::Description &t_description, const OptimizerFactory &t_deterministic_optimizer, const std::optional<Annotation<double>> &t_big_M)
    +
    + +
    +
    +virtual std::string name() const override
    +
    + +
    +
    +virtual SolutionStatus get_status() const override
    +
    + +
    +
    +virtual SolutionReason get_reason() const override
    +
    + +
    +
    +virtual double get_best_obj() const override
    +
    + +
    +
    +virtual double get_best_bound() const override
    +
    + +
    +
    +virtual double get_var_primal(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_var_reduced_cost(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_var_ray(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_ctr_dual(const Ctr &t_ctr) const override
    +
    + +
    +
    +virtual double get_ctr_farkas(const Ctr &t_ctr) const override
    +
    + +
    +
    +virtual unsigned int get_n_solutions() const override
    +
    + +
    +
    +virtual unsigned int get_solution_index() const override
    +
    + +
    +
    +virtual double get_relative_gap() const override
    +
    + +
    +
    +virtual double get_absolute_gap() const override
    +
    + +
    +
    +inline virtual const ::idol::Model &parent() const
    +
    + +
    +
    +inline bool get_param_logs() const
    +
    + +
    +
    +inline virtual void set_param_logs(bool t_value)
    +
    + +
    +
    +inline double get_param_time_limit() const
    +
    + +
    +
    +inline virtual void set_param_time_limit(double t_time_limit)
    +
    + +
    +
    +inline unsigned int get_param_thread_limit() const
    +
    + +
    +
    +inline virtual void set_param_threads(unsigned int t_threads)
    +
    + +
    +
    +double get_param_best_obj_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_obj_stop(double t_best_obj_stop)
    +
    + +
    +
    +double get_param_best_bound_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_bound_stop(double t_best_bound_stop)
    +
    + +
    +
    +inline double get_tol_mip_relative_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_relative_gap(double t_tol_mip_relative_gap)
    +
    + +
    +
    +inline double get_tol_mip_absolute_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_absolute_gap(double t_mip_tol_absolute_gap)
    +
    + +
    +
    +inline double get_tol_feasibility() const
    +
    + +
    +
    +inline virtual void set_tol_feasibility(double t_tol_feasibility)
    +
    + +
    +
    +inline double get_tol_optimality() const
    +
    + +
    +
    +inline virtual void set_tol_optimality(double t_tol_optimality)
    +
    + +
    +
    +inline double get_tol_integer() const
    +
    + +
    +
    +inline virtual void set_tol_integer(double t_tol_integer)
    +
    + +
    +
    +inline unsigned int get_param_iteration_limit() const
    +
    + +
    +
    +inline void set_param_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline bool get_param_presolve() const
    +
    + +
    +
    +inline virtual void set_param_presolve(bool t_value)
    +
    + +
    +
    +inline bool get_param_infeasible_or_unbounded_info() const
    +
    + +
    +
    +inline virtual void set_param_infeasible_or_unbounded_info(bool t_value)
    +
    + +
    +
    +inline const Timer &time() const
    +
    + +
    +
    +double get_remaining_time() const
    +
    + +
    +
    +inline bool is_terminated() const
    +
    + +
    +
    +virtual void terminate()
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/single-level/Optimizers_StrongDuality.html b/api/bilevel/single-level/Optimizers_StrongDuality.html new file mode 100644 index 000000000..1857fe38a --- /dev/null +++ b/api/bilevel/single-level/Optimizers_StrongDuality.html @@ -0,0 +1,495 @@ + + + + + + + Optimizers::Bilevel::StrongDuality + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::Bilevel::StrongDuality

    +
    +

    Doxygen

    +
    +
    +class StrongDuality : public idol::Algorithm
    +
    +

    Public Functions

    +
    +
    +StrongDuality(const Model &t_parent, const idol::Bilevel::Description &t_description, const OptimizerFactory &t_deterministic_optimizer)
    +
    + +
    +
    +virtual std::string name() const override
    +
    + +
    +
    +virtual SolutionStatus get_status() const override
    +
    + +
    +
    +virtual SolutionReason get_reason() const override
    +
    + +
    +
    +virtual double get_best_obj() const override
    +
    + +
    +
    +virtual double get_best_bound() const override
    +
    + +
    +
    +virtual double get_var_primal(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_var_reduced_cost(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_var_ray(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_ctr_dual(const Ctr &t_ctr) const override
    +
    + +
    +
    +virtual double get_ctr_farkas(const Ctr &t_ctr) const override
    +
    + +
    +
    +virtual unsigned int get_n_solutions() const override
    +
    + +
    +
    +virtual unsigned int get_solution_index() const override
    +
    + +
    +
    +virtual double get_relative_gap() const override
    +
    + +
    +
    +virtual double get_absolute_gap() const override
    +
    + +
    +
    +inline virtual const ::idol::Model &parent() const
    +
    + +
    +
    +inline bool get_param_logs() const
    +
    + +
    +
    +inline virtual void set_param_logs(bool t_value)
    +
    + +
    +
    +inline double get_param_time_limit() const
    +
    + +
    +
    +inline virtual void set_param_time_limit(double t_time_limit)
    +
    + +
    +
    +inline unsigned int get_param_thread_limit() const
    +
    + +
    +
    +inline virtual void set_param_threads(unsigned int t_threads)
    +
    + +
    +
    +double get_param_best_obj_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_obj_stop(double t_best_obj_stop)
    +
    + +
    +
    +double get_param_best_bound_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_bound_stop(double t_best_bound_stop)
    +
    + +
    +
    +inline double get_tol_mip_relative_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_relative_gap(double t_tol_mip_relative_gap)
    +
    + +
    +
    +inline double get_tol_mip_absolute_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_absolute_gap(double t_mip_tol_absolute_gap)
    +
    + +
    +
    +inline double get_tol_feasibility() const
    +
    + +
    +
    +inline virtual void set_tol_feasibility(double t_tol_feasibility)
    +
    + +
    +
    +inline double get_tol_optimality() const
    +
    + +
    +
    +inline virtual void set_tol_optimality(double t_tol_optimality)
    +
    + +
    +
    +inline double get_tol_integer() const
    +
    + +
    +
    +inline virtual void set_tol_integer(double t_tol_integer)
    +
    + +
    +
    +inline unsigned int get_param_iteration_limit() const
    +
    + +
    +
    +inline void set_param_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline bool get_param_presolve() const
    +
    + +
    +
    +inline virtual void set_param_presolve(bool t_value)
    +
    + +
    +
    +inline bool get_param_infeasible_or_unbounded_info() const
    +
    + +
    +
    +inline virtual void set_param_infeasible_or_unbounded_info(bool t_value)
    +
    + +
    +
    +inline const Timer &time() const
    +
    + +
    +
    +double get_remaining_time() const
    +
    + +
    +
    +inline bool is_terminated() const
    +
    + +
    +
    +virtual void terminate()
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/bilevel/single-level/StrongDuality.html b/api/bilevel/single-level/StrongDuality.html new file mode 100644 index 000000000..b1a52bb03 --- /dev/null +++ b/api/bilevel/single-level/StrongDuality.html @@ -0,0 +1,568 @@ + + + + + + + Bilevel::StrongDuality + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel::StrongDuality

    +
    +

    Doxygen

    +
    +
    +class StrongDuality : public idol::OptimizerFactoryWithDefaultParameters<StrongDuality>
    +
    +

    Public Functions

    +
    +
    +explicit StrongDuality(const Bilevel::Description &t_description)
    +
    + +
    +
    +StrongDuality(const StrongDuality &t_src)
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual OptimizerFactory *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +StrongDuality &with_single_level_optimizer(const OptimizerFactory &t_deterministic_optimizer)
    +
    + +
    +
    +inline StrongDuality &operator+=(const OptimizerFactory &t_optimizer)
    +
    + +
    +
    +StrongDuality &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &conditional(bool t_conditional_value, const std::function<void(StrongDuality&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +StrongDuality &conditional(bool t_conditional_value, const std::function<void(StrongDuality&)> &t_if, const std::function<void(StrongDuality&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Model make_model(const Model &t_model, const Bilevel::Description &t_description)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..7e44046cb --- /dev/null +++ b/api/classes/external-bilevel/MibS.html @@ -0,0 +1,555 @@ + + + + + + + Bilevel::Mibs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel::Mibs

    +
    +
    +class MibS : public idol::OptimizerFactoryWithDefaultParameters<MibS>
    +
    +

    Public Functions

    +
    +
    +explicit MibS(Bilevel::Description t_description)
    +
    + +
    +
    +MibS(const MibS &t_src)
    +
    + +
    +
    +MibS(MibS&&) noexcept = delete
    +
    + +
    +
    +MibS &operator=(const MibS&) = delete
    +
    + +
    +
    +MibS &operator=(MibS&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +MibS &with_cplex_for_feasibility(bool t_value)
    +
    + +
    +
    +MibS &with_file_interface(bool t_value)
    +
    + +
    +
    +MibS &add_callback(const CallbackFactory &t_cb)
    +
    + +
    +
    +virtual MibS *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +MibS &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &conditional(bool t_conditional_value, const std::function<void(MibS&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +MibS &conditional(bool t_conditional_value, const std::function<void(MibS&)> &t_if, const std::function<void(MibS&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..471ecb21c --- /dev/null +++ b/api/classes/external-bilevel/Optimizers_MibS.html @@ -0,0 +1,221 @@ + + + + + + + Optimizers::Bilevel::MibS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::Bilevel::MibS

    +
    +

    Warning

    +

    doxygenclass: Cannot find class “idol::Optimizers::Bilevel::MibS” in doxygen xml output for project “idol” from directory: _build/xml/

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..d9c5b2eb5 --- /dev/null +++ b/api/classes/external-bilevel/index.html @@ -0,0 +1,223 @@ + + + + + + + External Bilevel Solvers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    External Bilevel Solvers

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/classes/index.html b/api/classes/index.html new file mode 100644 index 000000000..a3539392a --- /dev/null +++ b/api/classes/index.html @@ -0,0 +1,249 @@ + + + + + + + Class List + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Class List

    +
    +

    Mixed-Integer Programming

    + +
    +
    +

    Bilevel Optimization

    + +
    +
    +

    Robust Optimization

    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..f235ce0c5 --- /dev/null +++ b/api/classes/universal-callbacks/Callback.html @@ -0,0 +1,406 @@ + + + + + + + Callback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 m_n_points_bound are called 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, UserCutCallback +and 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, 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. UserCutCallback callbacks are called when +a non-valid solution has been found.

    +

    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. +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.

    +
    +

    Example

    +

    We now give an example of callback which prints out every valid solution found.

    +
    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 Gurobi or BranchAndBound.

    +
    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 BranchAndBoundCallback.

    +
    +
    +
    +class Callback
    +

    Subclassed by idol::Heuristics::LocalBranching::Strategy, idol::Heuristics::RENS::Strategy, idol::Heuristics::SimpleRounding::Strategy, idol::Plots::OptimalityGap::Strategy, idol::impl::CutSeparation

    +
    +

    Public Functions

    +
    +
    +virtual ~Callback() = default
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +virtual const Model &original_model() const
    +

    Accesses the original model given to the solver

    +
    + +
    +
    +virtual void submit_heuristic_solution(const PrimalPoint &t_solution)
    +

    Submits a new heuristic solution

    +
    + +
    +
    +virtual void add_user_cut(const TempCtr &t_cut)
    +

    Adds a user cut to the relaxation

    +
    +
    Parameters:
    +

    t_cut – the cut to be added

    +
    +
    +
    + +
    +
    +virtual void add_lazy_cut(const TempCtr &t_cut)
    +

    Adds a lazy cut to the relaxation

    +
    +
    Parameters:
    +

    t_cut – the cut to be added

    +
    +
    +
    + +
    +
    +virtual PrimalPoint primal_solution() const
    +

    Returns the solution of the node which is currently being explored (when available)

    +
    +
    Returns:
    +

    the solution of the current node

    +
    +
    +
    + +
    +
    +const Timer &time() const
    +

    Returns the current time

    +
    +
    Returns:
    +

    the optimizer’s time

    +
    +
    +
    + +
    +
    +double best_obj() const
    +

    Returns the best objective value found so far

    +
    +
    Returns:
    +

    the best objective value

    +
    +
    +
    + +
    +
    +double best_bound() const
    +

    Returns the best bound found so far

    +
    +
    Returns:
    +

    the best bound

    +
    +
    +
    + +
    +
    +void terminate()
    +

    Asks the optimizer to terminate the optimization process as soon as possible

    +
    + +
    +
    +virtual void operator()(CallbackEvent t_event) = 0
    +

    This method is left for the user to write and consists in the main execution block of the callback.

    +
    +
    Parameters:
    +

    t_event – the event which triggered the call

    +
    +
    +
    + +
    +
    +

    Friends

    +
    +
    +friend class ::idol::CallbackI
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..ef710c0a4 --- /dev/null +++ b/api/classes/universal-callbacks/CallbackFactory.html @@ -0,0 +1,241 @@ + + + + + + + CallbackFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    CallbackFactory

    +
    +
    +class CallbackFactory
    +

    Subclassed by idol::Heuristics::LocalBranching, idol::Heuristics::RENS, idol::Heuristics::SimpleRounding, idol::LazyCutCallback, idol::Plots::OptimalityGap, idol::UserCutCallback

    +
    +

    Public Functions

    +
    +
    +virtual ~CallbackFactory() = default
    +
    + +
    +
    +virtual Callback *operator()() = 0
    +
    + +
    +
    +virtual CallbackFactory *clone() const = 0
    +
    + +
    +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..fce586540 --- /dev/null +++ b/api/classes/universal-callbacks/LazyCutCallback.html @@ -0,0 +1,297 @@ + + + + + + + LazyCutCallback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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:

    +
    +\[\begin{split}\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}\end{split}\]
    +

    in which assume that \(|\Xi|\) is large (potentially infinite). The idea is to start by solving the following +relaxed master problem in which constraints associated to \((\xi_0,\xi)\) have been omitted.

    +
    +\[\begin{split}\begin{align} + \min_x \ & c^\top x \\ + \text{s.t.} \ & x\in X. +\end{align}\end{split}\]
    +

    If we assume that this problem is feasible and bounded, we can denote by \(x^*\) a solution of this problem. Then, +we search for a violated constraint “\(\xi^\top x \le \xi_0\)” for some \((\xi_0,\xi)\in\Xi\). Observe that +a constraint is violated if, and only if, the following holds:

    +
    +\[\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,

    +
    +\[\max_{\xi\in\Xi} \xi_0 - \xi^\top x^* < -\varepsilon,\]
    +

    with \(\varepsilon\) a given tolerance (by default, Tolerance::Feasibility).

    +
    +

    Hint

    +

    You may also be interested by a tutorial showing how you can implement a simple Benders Decomposition using lazy +cuts. See Benders Decomposition tutorial.

    +
    +
    +
    +class LazyCutCallback : public idol::CallbackFactory
    +
    +

    Public Functions

    +
    +
    +inline LazyCutCallback(const Model &t_model, TempCtr t_cut)
    +
    + +
    +
    +inline virtual Callback *operator()() override
    +
    + +
    +
    +inline virtual CallbackFactory *clone() const override
    +
    + +
    +
    +inline LazyCutCallback &with_separation_optimizer(const OptimizerFactory &t_optimizer_factory)
    +
    + +
    +
    +
    +class Strategy : public idol::impl::CutSeparation
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(Model *t_separation_problem, TempCtr t_cut)
    +
    + +
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..649996035 --- /dev/null +++ b/api/classes/universal-callbacks/UserCutCallback.html @@ -0,0 +1,258 @@ + + + + + + + UserCutCallback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    UserCutCallback

    +
    +
    +class UserCutCallback : public idol::CallbackFactory
    +
    +

    Public Functions

    +
    +
    +inline UserCutCallback(const Model &t_model, TempCtr t_cut)
    +
    + +
    +
    +inline virtual Callback *operator()() override
    +
    + +
    +
    +inline virtual CallbackFactory *clone() const override
    +
    + +
    +
    +inline UserCutCallback &with_separation_optimizer(const OptimizerFactory &t_optimizer_factory)
    +
    + +
    +
    +
    +class Strategy : public idol::impl::CutSeparation
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(Model *t_separation_problem, TempCtr t_cut)
    +
    + +
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..b4847efe5 --- /dev/null +++ b/api/classes/universal-callbacks/index.html @@ -0,0 +1,226 @@ + + + + + + + Universal Callbacks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Universal Callbacks

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/index.html b/api/index.html new file mode 100644 index 000000000..ed67f76a2 --- /dev/null +++ b/api/index.html @@ -0,0 +1,355 @@ + + + + + + + API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/BranchAndBound.html b/api/mixed-integer/branch-and-bound/BranchAndBound.html new file mode 100644 index 000000000..a7538b4d4 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/BranchAndBound.html @@ -0,0 +1,803 @@ + + + + + + + BranchAndBound + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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.

    +
    +

    See also

    +

    If you are not familiar with optimizers and optimizer factories, please refer to this page.

    +
    +
    +

    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.

    +
    model.use(
    +    BranchAndBound()
    +        .with_node_optimizer( GLPK::ContinuousRelaxation() )
    +        .with_branching_rule( MostInfeasible() )
    +        .with_node_selection_rule( BestBound() )
    +        .with_subtree_depth(2)
    +);
    +
    +
    +
    +
    +

    Doxygen

    +
    +
    +template<class NodeT = idol::DefaultNodeInfo>
    class BranchAndBound : public idol::OptimizerFactoryWithDefaultParameters<BranchAndBound<idol::DefaultNodeInfo>>
    +
    +
    Template Parameters:
    +

    NodeT – the class used to store nodes information. It is strongly advised to inherit from NodeVarInfo in order to create your own node type.

    +
    +
    +
    +

    Public Types

    +
    +
    +template<class ReturnT, class T>
    using only_if_has_Strategy = typename std::pair<typename T::template Strategy<NodeT>, ReturnT>::second_type
    +

    This type is used to exploit SFINAE in order to identify classes having a sub-class named Strategy<NodeInfoT>. This is used to make calls like .with_node_selection_rule(DepthFirst()); which will actually call .with_node_selection_rule(DepthFirst::Strategy<NodeInfoT>()).

    +
    + +
    +
    +

    Public Functions

    +
    +
    +BranchAndBound() = default
    +

    Creates a new branch-and-bound algorithm.

    +

    Example:

    model.use( BranchAndBound() );
    +
    +
    +

    +
    + +
    +
    +BranchAndBound(const BranchAndBound &t_rhs)
    +

    Copy constructor

    +
    +
    Parameters:
    +

    t_rhs – the object to copy

    +
    +
    +
    + +
    +
    +BranchAndBound<NodeT> &with_node_optimizer(const OptimizerFactory &t_node_optimizer)
    +

    Sets the optimizer for solving each of the branch-and-bound tree nodes

    +

    Example:

    auto algorithm = BranchAndBound()
    +                     .with_node_optimizer(GLPK::ContinuousRelaxation());
    +
    +
    +

    +
    +
    Parameters:
    +

    t_node_optimizer – the optimizer factory the node problems

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +void set_node_optimizer(const OptimizerFactory &t_node_optimizer)
    +
    + +
    +
    +BranchAndBound<NodeT> &operator+=(const OptimizerFactory &t_node_optimizer)
    +
    + +
    +
    +BranchAndBound<NodeT> &with_branching_rule(const BranchingRuleFactory<NodeT> &t_branching_rule)
    +

    Sets the branching rule used to create child nodes

    +

    Example:

    auto algorithm = BranchAndBound<NodeVarInfo>()
    +                     .with_branching_rule(MostInfeasible::Strategy<NodeVarInfo>());
    +
    +
    +

    +
    +
    Parameters:
    +

    t_branching_rule – the branching rule

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class BranchingRuleFactoryT>
    only_if_has_Strategy<BranchAndBound<NodeT>&, BranchingRuleFactoryT> with_branching_rule(const BranchingRuleFactoryT &t_branching_rule)
    +

    Sets the branching rule used to create child nodes.

    +

    Here, the function is called only when BranchingRuleFactoryT has a nested template class named Strategy<NodeInfoT>. In such a case, the branching rule is created by calling BranchingRuleFactoryT::Strategy<NodeInfoT>(t_branching_rule). This is used to avoid the user repeating the node type NodeInfoT being used.

    +

    Example:

    auto algorithm = BranchAndBound<NodeVarInfo>()
    +                     .with_branching_rule(MostInfeasible());
    +
    +
    +

    +
    +
    Template Parameters:
    +

    BranchingRuleFactoryT – the class containing a nested template class named Strategy

    +
    +
    Parameters:
    +

    t_branching_rule – the branching rule

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +BranchAndBound<NodeT> &with_node_selection_rule(const NodeSelectionRuleFactory<NodeT> &t_node_selection)
    +

    Sets the node selection rule to explore the branch and bound tree.

    +

    auto algorithm = BranchAndBound<NodeVarInfo>()
    +                     .with_node_selection(BestBound::Strategy<NodeVarInfo>());
    +
    +
    +

    +
    +
    Parameters:
    +

    t_node_selection – the node selection rule

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class NodeSelectionRuleFactoryT>
    only_if_has_Strategy<BranchAndBound<NodeT>&, NodeSelectionRuleFactoryT> with_node_selection_rule(const NodeSelectionRuleFactoryT &t_node_selection_rule)
    +

    Sets the node selection rule to explore the branch and bound tree.

    +

    Here, the function is called only when NodeSelectionRuleFactoryT has a nested template class named Strategy<NodeInfoT>. In such a case, the node selection rule is created by calling NodeSelectionRuleFactoryT::Strategy<NodeInfoT>(t_node_selection_rule). This is used to avoid the user repeating the node type NodeInfoT being used.

    +

    Example:

    auto algorithm = BranchAndBound<NodeVarInfo>()
    +                     .with_node_selection_rule(BestBound());
    +
    +
    +

    +
    +
    Template Parameters:
    +

    NodeSelectionRuleFactoryT – the class containing a nested template class named Strategy

    +
    +
    Parameters:
    +

    t_node_selection_rule – the node selection rule

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +BranchAndBound(BranchAndBound&&) noexcept = default
    +
    + +
    +
    +BranchAndBound &operator=(const BranchAndBound&) = delete
    +
    + +
    +
    +BranchAndBound &operator=(BranchAndBound&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual OptimizerFactory *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +BranchAndBound<NodeT> &with_subtree_depth(unsigned int t_depth)
    +

    Sets the depth for sub-tree exploration.

    +

    When a node is selected for branching, each of its children is explored. This exploration takes the form of a sub-tree exploration. When this parameter is set to 0, only the root node of this sub-tree is solved. Thus every child node are solved and the branch-and-bound algorithm is continued.

    +

    For strictly greater values of this parameter, the sub-tree is explored with a maximum depth equal to the value of this parameter.

    +

    For example, with a value of 1, each child node is solved along with its child nodes.

    +

    Example:

    auto algorithm = BranchAndBound()
    +                     .with_subtree_depth(1);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_depth – the maximum sub-tree exploration depth

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +BranchAndBound<NodeT> &with_logger(const Logs::BranchAndBound::Factory<NodeT> &t_log_factory)
    +
    + +
    +
    +BranchAndBound<NodeT> &add_callback(const BranchAndBoundCallbackFactory<NodeT> &t_callback)
    +

    Adds a callback which will be called by the optimizer.

    +

    Note that this method can be called multiple times so that multiple callbacks can be added.

    +

    auto algorithm = BranchAndBound()
    +                     .with_callback(IntegerMaster.rst());
    +
    +
    +

    +
    +
    Parameters:
    +

    t_callback – the callback factory

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +BranchAndBound<NodeT> &add_callback(const CallbackFactory &t_callback)
    +

    Adds a (solver independent) callback which will be called by the optimizer.

    +

    Note that this method can be called multiple times so that multiple callbacks can be added.

    +

    Here, the Callback is automatically converted into a BranchAndBoundCallback<NodeInfoT>.

    +

    auto algorithm = BranchAndBound()
    +                     .with_callback(UserCutCallback(separation_model, my_cut));
    +
    +
    +

    +
    +
    Parameters:
    +

    t_callback – the callback factory

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class NodeSelectionRuleFactoryT>
    idol::BranchAndBound<NodeT>::template only_if_has_Strategy<idol::BranchAndBound<NodeT>&, NodeSelectionRuleFactoryT> with_node_selection_rule(const NodeSelectionRuleFactoryT &t_node_selection_rule)
    +
    + +
    +
    +template<class BranchingRuleFactoryT>
    idol::BranchAndBound<NodeT>::template only_if_has_Strategy<idol::BranchAndBound<NodeT>&, BranchingRuleFactoryT> with_branching_rule(const BranchingRuleFactoryT &t_branching_rule)
    +
    + +
    +
    +CRTP &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &conditional(bool t_conditional_value, const std::function<void(CRTP&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +CRTP &conditional(bool t_conditional_value, const std::function<void(CRTP&)> &t_if, const std::function<void(CRTP&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.html b/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.html new file mode 100644 index 000000000..bb4c1ca3e --- /dev/null +++ b/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.html @@ -0,0 +1,457 @@ + + + + + + + BranchAndBoundCallback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    BranchAndBoundCallback

    +

    This class can be used to create callbacks to run on idol’s 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 solver-independent callback first, or with pre-existing callbacks, e.g., +UserCutCallback or LazyCutCallback.

    +

    The advantage of using a BranchAndBoundCallback instead of a standard +solver-independent 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.

    +
    +
    +

    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.

    +
    class MyCallback : public BranchAndBoundCallbackFactory<NodeInfo> {
    +public:
    +    class Strategy : public BranchAndBoundCallback<NodeInfo> {
    +    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<NodeInfo> *operator()() override {
    +        return new Strategy();
    +    }
    +
    +    [[nodiscard]] BranchAndBoundCallbackFactory<NodeInfo> *clone() const override {
    +        return new MyCallback(*this);
    +    }
    +};
    +
    +
    +

    Then, this callback can be used as follows.

    +
    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.

    +
    +
    +

    Doxygen

    +
    +
    +template<class NodeInfoT>
    class BranchAndBoundCallback
    +

    Subclassed by idol::CallbackAsBranchAndBoundCallback< NodeInfoT >::Strategy, idol::Cuts::KnapsackCover< NodeInfoT >::Strategy, idol::Heuristics::IntegerMaster< NodeInfoT >::Strategy, idol::ReducedCostFixing< NodeInfoT >::Strategy, idol::Utils::ExportBranchAndBoundTreeToCSV< NodeInfoT >::Strategy

    +
    +

    Public Functions

    +
    +
    +virtual ~BranchAndBoundCallback() = default
    +
    + +
    +
    +

    Protected Functions

    +
    +
    +inline virtual void initialize()
    +

    This method is called at the very beginning of the Branch-and-Bound algorithm

    +
    + +
    +
    +virtual void operator()(CallbackEvent t_event) = 0
    +

    This method is left for the user to write and consists in the main execution block of the callback.

    +
    +
    Parameters:
    +

    t_event – The event triggering the callback

    +
    +
    +
    + +
    +
    +inline virtual void log_after_termination()
    +
    + +
    +
    +void add_user_cut(const TempCtr &t_cut)
    +

    Adds a user cut to the relaxation

    +
    +
    Parameters:
    +

    t_cut – the cut to be added

    +
    +
    +
    + +
    +
    +void add_lazy_cut(const TempCtr &t_cut)
    +

    Adds a lazy cut to the relaxation

    +
    +
    Parameters:
    +

    t_cut – the cut to be added

    +
    +
    +
    + +
    +
    +void add_local_variable_branching(const Var &t_var, CtrType t_type, double t_rhs)
    +
    + +
    +
    +const Node<NodeInfoT> &node() const
    +

    Returns the node which is currently explored

    +
    +
    Returns:
    +

    the node which is currently explored

    +
    +
    +
    + +
    +
    +const Model &relaxation() const
    +

    Returns the current node’s model being solved

    +
    +
    Returns:
    +

    the current node’s model being solved

    +
    +
    +
    + +
    +
    +const Model &original_model() const
    +

    Returns the original model from which the branch-and-bound algorithm started (i.e., the original non-relaxed model)

    +
    +
    Returns:
    +

    the original model

    +
    +
    +
    + +
    +
    +void submit_heuristic_solution(NodeInfoT *t_info)
    +

    Submits a new solution to the branch-and-bound tree algorithm.

    +

    The solution is checked for validity according to the branch-and-bound tree branching rule and is set as incumbent if and only if it is valid and improves the current best objective.

    +
    +
    Parameters:
    +

    t_info – a node information storing the solution

    +
    +
    +
    + +
    +
    +void submit_bound(double t_bound)
    +

    Submits a new proven bound.

    +

    The given bound is set as best bound if and only if it improves the current best bound.

    +
    +
    Parameters:
    +

    t_bound – a proven bound

    +
    +
    +
    + +
    +
    +const SideEffectRegistry &side_effect_registry() const
    +

    Returns the side effect registry

    +
    +
    Returns:
    +

    the side effect registry

    +
    +
    +
    + +
    +
    +const Timer &time() const
    +
    + +
    +
    +double best_bound() const
    +
    + +
    +
    +double best_obj() const
    +
    + +
    +
    +void terminate()
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.html b/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.html new file mode 100644 index 000000000..6243cd18a --- /dev/null +++ b/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.html @@ -0,0 +1,266 @@ + + + + + + + BranchAndBoundCallbackFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    BranchAndBoundCallbackFactory

    +
    +

    Doxygen

    +
    +
    +template<class NodeInfoT>
    class BranchAndBoundCallbackFactory
    +

    Subclassed by idol::CallbackAsBranchAndBoundCallback< NodeInfoT >, idol::Cuts::KnapsackCover< NodeInfoT >, idol::Heuristics::IntegerMaster< NodeInfoT >, idol::ReducedCostFixing< NodeInfoT >, idol::Utils::ExportBranchAndBoundTreeToCSV< NodeInfoT >

    +
    +

    Public Functions

    +
    +
    +virtual ~BranchAndBoundCallbackFactory() = default
    +
    + +
    +
    +virtual BranchAndBoundCallback<NodeInfoT> *operator()() = 0
    +
    + +
    +
    +virtual BranchAndBoundCallbackFactory<NodeInfoT> *clone() const = 0
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.html b/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.html new file mode 100644 index 000000000..bee6c5432 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.html @@ -0,0 +1,295 @@ + + + + + + + Cuts::KnapsackCover + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Cuts::KnapsackCover

    +
    +

    Doxygen

    +
    +
    +template<class NodeInfoT = idol::DefaultNodeInfo>
    class KnapsackCover : public idol::BranchAndBoundCallbackFactory<idol::DefaultNodeInfo>
    +
    +

    Public Functions

    +
    +
    +virtual BranchAndBoundCallback<NodeInfoT> *operator()() override
    +
    + +
    +
    +virtual BranchAndBoundCallbackFactory<NodeInfoT> *clone() const override
    +
    + +
    +
    +KnapsackCover &with_lifting(bool t_value)
    +
    + +
    +
    +KnapsackCover &with_tree_node_cuts(bool t_value)
    +
    + +
    +
    +KnapsackCover &with_max_pass_root_node(unsigned int t_value)
    +
    + +
    +
    +KnapsackCover &with_max_cuts_factor(double t_value)
    +
    + +
    +
    +
    +class Strategy : public idol::BranchAndBoundCallback<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy(bool t_use_lifting, bool t_apply_to_tree_nodes, unsigned int t_max_pass_root_node, double t_max_cuts_factor)
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/cuts/index.html b/api/mixed-integer/branch-and-bound/cuts/index.html new file mode 100644 index 000000000..6a3325e59 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/cuts/index.html @@ -0,0 +1,244 @@ + + + + + + + More on Cutting Planes… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    More on Cutting Planes…

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.html b/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.html new file mode 100644 index 000000000..1298abd58 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.html @@ -0,0 +1,285 @@ + + + + + + + Heuristics::LocalBranching + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Heuristics::LocalBranching

    +
    +

    Doxygen

    +
    +
    +class LocalBranching : public idol::CallbackFactory
    +
    +

    Public Functions

    +
    +
    +LocalBranching() = default
    +
    + +
    +
    +inline virtual Callback *operator()() override
    +
    + +
    +
    +inline virtual CallbackFactory *clone() const override
    +
    + +
    +
    +LocalBranching &with_optimizer(const OptimizerFactory &t_optimizer_factory)
    +
    + +
    +
    +
    +class Strategy : public idol::Callback
    +
    +

    Public Functions

    +
    +
    +Strategy(unsigned int t_neighbourhood_size, OptimizerFactory *t_optimizer_factory)
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/heuristics/RENS.html b/api/mixed-integer/branch-and-bound/heuristics/RENS.html new file mode 100644 index 000000000..c49eb064a --- /dev/null +++ b/api/mixed-integer/branch-and-bound/heuristics/RENS.html @@ -0,0 +1,285 @@ + + + + + + + Heuristics::RENS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Heuristics::RENS

    +
    +

    Doxygen

    +
    +
    +class RENS : public idol::CallbackFactory
    +
    +

    Public Functions

    +
    +
    +RENS() = default
    +
    + +
    +
    +inline virtual Callback *operator()() override
    +
    + +
    +
    +inline virtual CallbackFactory *clone() const override
    +
    + +
    +
    +RENS &with_optimizer(const OptimizerFactory &t_optimizer_factory)
    +
    + +
    +
    +
    +class Strategy : public idol::Callback
    +
    +

    Public Functions

    +
    +
    +Strategy(double t_minimum_ratio_of_integer_variables_to_fix, double t_minimum_ratio_of_variables_to_fix, OptimizerFactory *t_optimizer_factory)
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.html b/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.html new file mode 100644 index 000000000..2e587029c --- /dev/null +++ b/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.html @@ -0,0 +1,272 @@ + + + + + + + Heuristics::SimpleRounding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Heuristics::SimpleRounding

    +
    +

    Doxygen

    +
    +
    +class SimpleRounding : public idol::CallbackFactory
    +
    +

    Public Functions

    +
    +
    +SimpleRounding() = default
    +
    + +
    +
    +inline virtual Callback *operator()() override
    +
    + +
    +
    +inline virtual CallbackFactory *clone() const override
    +
    + +
    +
    +
    +class Strategy : public idol::Callback
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/heuristics/index.html b/api/mixed-integer/branch-and-bound/heuristics/index.html new file mode 100644 index 000000000..40a571296 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/heuristics/index.html @@ -0,0 +1,246 @@ + + + + + + + More on Heuristics… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    More on Heuristics…

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/node-selection/BestBound.html b/api/mixed-integer/branch-and-bound/node-selection/BestBound.html new file mode 100644 index 000000000..8c47a79fa --- /dev/null +++ b/api/mixed-integer/branch-and-bound/node-selection/BestBound.html @@ -0,0 +1,272 @@ + + + + + + + BestBound + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    BestBound

    +
    +

    Doxygen

    +
    +
    +class BestBound
    +
    +
    +template<class NodeT>
    class Strategy : public idol::NodeSelectionRuleFactory<NodeT>
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(const BestBound &t_parent)
    +
    + +
    +
    +inline virtual NodeSelectionRules::BestBound<NodeT> *operator()(Optimizers::BranchAndBound<NodeT> &t_parent) const override
    +
    + +
    +
    +inline virtual Strategy *clone() const override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.html b/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.html new file mode 100644 index 000000000..7957ce45a --- /dev/null +++ b/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.html @@ -0,0 +1,273 @@ + + + + + + + BestEstimate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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.

    +
    +

    Doxygen

    +
    +
    +class BestEstimate
    +
    +
    +template<class NodeT>
    class Strategy : public idol::NodeSelectionRuleFactory<NodeT>
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(const BestEstimate &t_parent)
    +
    + +
    +
    +inline virtual NodeSelectionRules::BestEstimate<NodeT> *operator()(Optimizers::BranchAndBound<NodeT> &t_parent) const override
    +
    + +
    +
    +inline virtual Strategy *clone() const override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.html b/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.html new file mode 100644 index 000000000..7f29ed0e2 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.html @@ -0,0 +1,272 @@ + + + + + + + BreadthFirst + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    BreadthFirst

    +
    +

    Doxygen

    +
    +
    +class BreadthFirst
    +
    +
    +template<class NodeT>
    class Strategy : public idol::NodeSelectionRuleFactory<NodeT>
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(const BreadthFirst &t_parent)
    +
    + +
    +
    +inline virtual NodeSelectionRules::BreadthFirst<NodeT> *operator()(Optimizers::BranchAndBound<NodeT> &t_parent) const override
    +
    + +
    +
    +inline virtual Strategy *clone() const override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.html b/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.html new file mode 100644 index 000000000..11aeb2bb6 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.html @@ -0,0 +1,272 @@ + + + + + + + DepthFirst + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    DepthFirst

    +
    +

    Doxygen

    +
    +
    +class DepthFirst
    +
    +
    +template<class NodeT>
    class Strategy : public idol::NodeSelectionRuleFactory<NodeT>
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(const DepthFirst &t_parent)
    +
    + +
    +
    +inline virtual NodeSelectionRules::DepthFirst<NodeT> *operator()(Optimizers::BranchAndBound<NodeT> &t_parent) const override
    +
    + +
    +
    +inline virtual Strategy *clone() const override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/node-selection/WorstBound.html b/api/mixed-integer/branch-and-bound/node-selection/WorstBound.html new file mode 100644 index 000000000..dc5d25d38 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/node-selection/WorstBound.html @@ -0,0 +1,272 @@ + + + + + + + WorstBound + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    WorstBound

    +
    +

    Doxygen

    +
    +
    +class WorstBound
    +
    +
    +template<class NodeT>
    class Strategy : public idol::NodeSelectionRuleFactory<NodeT>
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(const WorstBound &t_parent)
    +
    + +
    +
    +inline virtual NodeSelectionRules::WorstBound<NodeT> *operator()(Optimizers::BranchAndBound<NodeT> &t_parent) const override
    +
    + +
    +
    +inline virtual Strategy *clone() const override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/node-selection/index.html b/api/mixed-integer/branch-and-bound/node-selection/index.html new file mode 100644 index 000000000..1cd221528 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/node-selection/index.html @@ -0,0 +1,248 @@ + + + + + + + More on Node Selection Rules… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    More on Node Selection Rules…

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.html b/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.html new file mode 100644 index 000000000..5dc5a3af2 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.html @@ -0,0 +1,295 @@ + + + + + + + FirstInfeasibleFound + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    FirstInfeasibleFound

    +
    +

    Doxygen

    +
    +
    +class FirstInfeasibleFound : public idol::VariableBranching
    +
    +

    Public Functions

    +
    +
    +FirstInfeasibleFound() = default
    +
    + +
    +
    +template<class IteratorT>
    inline FirstInfeasibleFound(IteratorT t_begin, IteratorT t_end)
    +
    + +
    +
    +
    +template<class NodeInfoT>
    class Strategy : public idol::VariableBranching::Strategy<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy() = default
    +
    + +
    +
    +inline explicit Strategy(const FirstInfeasibleFound &t_parent)
    +
    + +
    +
    +inline BranchingRules::VariableBranching<NodeInfoT> *operator()(const Optimizers::BranchAndBound<NodeInfoT> &t_parent) const override
    +
    + +
    +
    +inline virtual VariableBranching::Strategy<NodeInfoT> *clone() const override
    +
    + +
    +
    +virtual BranchingRule<NodeT> *operator()(const Optimizers::BranchAndBound<NodeT> &t_parent) const = 0
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.html b/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.html new file mode 100644 index 000000000..4fe271cf0 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.html @@ -0,0 +1,295 @@ + + + + + + + LeastInfeasible + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    LeastInfeasible

    +
    +

    Doxygen

    +
    +
    +class LeastInfeasible : public idol::VariableBranching
    +
    +

    Public Functions

    +
    +
    +LeastInfeasible() = default
    +
    + +
    +
    +template<class IteratorT>
    inline LeastInfeasible(IteratorT t_begin, IteratorT t_end)
    +
    + +
    +
    +
    +template<class NodeInfoT>
    class Strategy : public idol::VariableBranching::Strategy<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy() = default
    +
    + +
    +
    +inline explicit Strategy(const LeastInfeasible &t_parent)
    +
    + +
    +
    +inline BranchingRules::VariableBranching<NodeInfoT> *operator()(const Optimizers::BranchAndBound<NodeInfoT> &t_parent) const override
    +
    + +
    +
    +inline virtual VariableBranching::Strategy<NodeInfoT> *clone() const override
    +
    + +
    +
    +virtual BranchingRule<NodeT> *operator()(const Optimizers::BranchAndBound<NodeT> &t_parent) const = 0
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.html b/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.html new file mode 100644 index 000000000..e7af25c49 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.html @@ -0,0 +1,295 @@ + + + + + + + MostInfeasible + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    MostInfeasible

    +
    +

    Doxygen

    +
    +
    +class MostInfeasible : public idol::VariableBranching
    +
    +

    Public Functions

    +
    +
    +MostInfeasible() = default
    +
    + +
    +
    +template<class IteratorT>
    inline MostInfeasible(IteratorT t_begin, IteratorT t_end)
    +
    + +
    +
    +
    +template<class NodeInfoT>
    class Strategy : public idol::VariableBranching::Strategy<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy() = default
    +
    + +
    +
    +inline explicit Strategy(const MostInfeasible &t_parent)
    +
    + +
    +
    +inline BranchingRules::VariableBranching<NodeInfoT> *operator()(const Optimizers::BranchAndBound<NodeInfoT> &t_parent) const override
    +
    + +
    +
    +inline virtual VariableBranching::Strategy<NodeInfoT> *clone() const override
    +
    + +
    +
    +virtual BranchingRule<NodeT> *operator()(const Optimizers::BranchAndBound<NodeT> &t_parent) const = 0
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.html b/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.html new file mode 100644 index 000000000..3b39ade23 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.html @@ -0,0 +1,295 @@ + + + + + + + PseudoCost + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    PseudoCost

    +
    +

    Doxygen

    +
    +
    +class PseudoCost : public idol::VariableBranching
    +
    +

    Public Functions

    +
    +
    +PseudoCost() = default
    +
    + +
    +
    +template<class IteratorT>
    inline PseudoCost(IteratorT t_begin, IteratorT t_end)
    +
    + +
    +
    +
    +template<class NodeInfoT>
    class Strategy : public idol::VariableBranching::Strategy<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy() = default
    +
    + +
    +
    +inline explicit Strategy(const PseudoCost &t_parent)
    +
    + +
    +
    +inline BranchingRules::VariableBranching<NodeInfoT> *operator()(const Optimizers::BranchAndBound<NodeInfoT> &t_parent) const override
    +
    + +
    +
    +inline virtual VariableBranching::Strategy<NodeInfoT> *clone() const override
    +
    + +
    +
    +virtual BranchingRule<NodeT> *operator()(const Optimizers::BranchAndBound<NodeT> &t_parent) const = 0
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.html b/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.html new file mode 100644 index 000000000..603983ed8 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.html @@ -0,0 +1,315 @@ + + + + + + + StrongBranching + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    StrongBranching

    +
    +

    Doxygen

    +
    +
    +class StrongBranching : public idol::VariableBranching
    +
    +

    Public Functions

    +
    +
    +StrongBranching() = default
    +
    + +
    +
    +template<class IteratorT>
    inline StrongBranching(IteratorT t_begin, IteratorT t_end)
    +
    + +
    +
    +StrongBranching &with_max_n_variables(unsigned int t_n_variables)
    +
    + +
    +
    +StrongBranching &with_node_scoring_function(const NodeScoreFunction &t_score_function)
    +
    + +
    +
    +StrongBranching &add_phase(const StrongBranchingPhaseType &t_phase, unsigned int t_max_n_variables, unsigned int t_max_depth)
    +
    + +
    +
    +
    +template<class NodeInfoT>
    class Strategy : public idol::VariableBranching::Strategy<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy() = default
    +
    + +
    +
    +Strategy(const Strategy<NodeInfoT> &t_src)
    +
    + +
    +
    +explicit Strategy(const StrongBranching &t_parent)
    +
    + +
    +
    +inline BranchingRules::VariableBranching<NodeInfoT> *operator()(const Optimizers::BranchAndBound<NodeInfoT> &t_parent) const override
    +
    + +
    +
    +inline virtual VariableBranching::Strategy<NodeInfoT> *clone() const override
    +
    + +
    +
    +virtual BranchingRule<NodeT> *operator()(const Optimizers::BranchAndBound<NodeT> &t_parent) const = 0
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.html b/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.html new file mode 100644 index 000000000..805fe20c4 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.html @@ -0,0 +1,300 @@ + + + + + + + UniformlyRandom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    UniformlyRandom

    +
    +

    Doxygen

    +
    +
    +class UniformlyRandom : public idol::VariableBranching
    +
    +

    Public Functions

    +
    +
    +UniformlyRandom() = default
    +
    + +
    +
    +template<class IteratorT>
    inline UniformlyRandom(IteratorT t_begin, IteratorT t_end)
    +
    + +
    +
    +inline UniformlyRandom &with_seed(unsigned int t_seed)
    +
    + +
    +
    +
    +template<class NodeInfoT>
    class Strategy : public idol::VariableBranching::Strategy<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +Strategy() = default
    +
    + +
    +
    +inline explicit Strategy(const UniformlyRandom &t_parent)
    +
    + +
    +
    +inline BranchingRules::VariableBranching<NodeInfoT> *operator()(const Optimizers::BranchAndBound<NodeInfoT> &t_parent) const override
    +
    + +
    +
    +inline virtual VariableBranching::Strategy<NodeInfoT> *clone() const override
    +
    + +
    +
    +virtual BranchingRule<NodeT> *operator()(const Optimizers::BranchAndBound<NodeT> &t_parent) const = 0
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/branch-and-bound/variable-selection/index.html b/api/mixed-integer/branch-and-bound/variable-selection/index.html new file mode 100644 index 000000000..e86fccea0 --- /dev/null +++ b/api/mixed-integer/branch-and-bound/variable-selection/index.html @@ -0,0 +1,249 @@ + + + + + + + More on Branching Rules… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    More on Branching Rules…

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/ArtificialCosts.html b/api/mixed-integer/column-generation/ArtificialCosts.html new file mode 100644 index 000000000..4af8733a7 --- /dev/null +++ b/api/mixed-integer/column-generation/ArtificialCosts.html @@ -0,0 +1,318 @@ + + + + + + + DantzigWolfe::ArtificialCosts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    DantzigWolfe::ArtificialCosts

    +
    +

    Doxygen

    +
    +
    +class ArtificialCosts : public idol::DantzigWolfe::InfeasibilityStrategyFactory
    +
    +

    Public Functions

    +
    +
    +inline virtual InfeasibilityStrategyFactory::Strategy *operator()() const override
    +
    + +
    +
    +inline virtual ArtificialCosts *clone() const override
    +
    + +
    +
    +ArtificialCosts &with_max_updates_before_phase_I(unsigned int t_value)
    +
    + +
    +
    +ArtificialCosts &with_update_factor(double t_value)
    +
    + +
    +
    +ArtificialCosts &with_initial_costs(double t_value)
    +
    + +
    +
    +
    +class Strategy : public idol::DantzigWolfe::InfeasibilityStrategyFactory::Strategy
    +
    +

    Public Functions

    +
    +
    +Strategy(double t_initial_costs, double t_update_factor, unsigned int t_max_updates_before_phase_I)
    +
    + +
    +
    +virtual void execute(Optimizers::DantzigWolfeDecomposition &t_parent) override
    +
    + +
    +
    +inline SolutionStatus status() const
    +
    + +
    +
    +inline SolutionReason reason() const
    +
    + +
    +
    +inline double best_obj() const
    +
    + +
    +
    +inline double best_bound() const
    +
    + +
    +
    +const PrimalPoint &primal_solution() const
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/DantzigWolfeDecomposition.html b/api/mixed-integer/column-generation/DantzigWolfeDecomposition.html new file mode 100644 index 000000000..3160b3f94 --- /dev/null +++ b/api/mixed-integer/column-generation/DantzigWolfeDecomposition.html @@ -0,0 +1,610 @@ + + + + + + + DantzigWolfeDecomposition + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    DantzigWolfeDecomposition

    +
    +

    Hint

    +

    This page documents on the DantzigWolfeDecomposition optimizer factory. Note that there are also +Dantzig-Wolfe Decomposition tutorials.

    +
    +
    +

    Doxygen

    +
    +
    +class DantzigWolfeDecomposition : public idol::OptimizerFactoryWithDefaultParameters<DantzigWolfeDecomposition>
    +
    +

    Public Functions

    +
    +
    +DantzigWolfeDecomposition() = default
    +
    + +
    +
    +explicit DantzigWolfeDecomposition(Annotation<unsigned int> t_decomposition)
    +
    + +
    +
    +DantzigWolfeDecomposition(const DantzigWolfeDecomposition &t_src)
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual DantzigWolfeDecomposition *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_master_optimizer(const OptimizerFactory &t_optimizer_factory)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_default_sub_problem_spec(DantzigWolfe::SubProblem t_sub_problem)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_sub_problem_spec(unsigned int t_id, DantzigWolfe::SubProblem t_sub_problem)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_infeasibility_strategy(const DantzigWolfe::InfeasibilityStrategyFactory &t_strategy)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_hard_branching(bool t_value)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_infeasible_columns_removal(bool t_value)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_max_parallel_sub_problems(unsigned int t_n_sub_problems)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_logger(const Logs::DantzigWolfe::Factory &t_logger)
    +
    + +
    +
    +DantzigWolfeDecomposition &with_dual_price_smoothing_stabilization(const DantzigWolfe::DualPriceSmoothingStabilization &t_stabilization)
    +
    + +
    +
    +const DantzigWolfe::SubProblem &get_sub_problem_spec(unsigned int t_id) const
    +
    + +
    +
    +DantzigWolfeDecomposition &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &conditional(bool t_conditional_value, const std::function<void(DantzigWolfeDecomposition&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +DantzigWolfeDecomposition &conditional(bool t_conditional_value, const std::function<void(DantzigWolfeDecomposition&)> &t_if, const std::function<void(DantzigWolfeDecomposition&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/FarkasPricing.html b/api/mixed-integer/column-generation/FarkasPricing.html new file mode 100644 index 000000000..07742ec2c --- /dev/null +++ b/api/mixed-integer/column-generation/FarkasPricing.html @@ -0,0 +1,298 @@ + + + + + + + DantzigWolfe::FarkasPricing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    DantzigWolfe::FarkasPricing

    +
    +

    Doxygen

    +
    +
    +class FarkasPricing : public idol::DantzigWolfe::InfeasibilityStrategyFactory
    +
    +

    Public Functions

    +
    +
    +inline virtual InfeasibilityStrategyFactory::Strategy *operator()() const override
    +
    + +
    +
    +inline virtual FarkasPricing *clone() const override
    +
    + +
    +
    +
    +class Strategy : public idol::DantzigWolfe::InfeasibilityStrategyFactory::Strategy
    +
    +

    Public Functions

    +
    +
    +virtual void execute(Optimizers::DantzigWolfeDecomposition &t_parent) override
    +
    + +
    +
    +inline SolutionStatus status() const
    +
    + +
    +
    +inline SolutionReason reason() const
    +
    + +
    +
    +inline double best_obj() const
    +
    + +
    +
    +inline double best_bound() const
    +
    + +
    +
    +const PrimalPoint &primal_solution() const
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/IntegerMaster.html b/api/mixed-integer/column-generation/IntegerMaster.html new file mode 100644 index 000000000..9c41e9bf3 --- /dev/null +++ b/api/mixed-integer/column-generation/IntegerMaster.html @@ -0,0 +1,358 @@ + + + + + + + Heuristics::IntegerMaster + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Heuristics::IntegerMaster

    +
    +

    Warning

    +

    This heuristic can only be used with a BranchAndBound<NodeVarInfo> optimizer in which nodes are solved by +DantzigWolfeDecomposition.

    +
    +
    +

    Doxygen

    +
    +
    +template<class NodeInfoT = idol::DefaultNodeInfo>
    class IntegerMaster : public idol::BranchAndBoundCallbackFactory<idol::DefaultNodeInfo>
    +
    +

    Public Functions

    +
    +
    +IntegerMaster() = default
    +
    + +
    +
    +IntegerMaster(IntegerMaster&&) noexcept = default
    +
    + +
    +
    +IntegerMaster &operator=(const IntegerMaster&) = delete
    +
    + +
    +
    +IntegerMaster &operator=(IntegerMaster&&) noexcept = default
    +
    + +
    +
    +virtual BranchAndBoundCallback<NodeInfoT> *operator()() override
    +
    + +
    +
    +virtual BranchAndBoundCallbackFactory<NodeInfoT> *clone() const override
    +
    + +
    +
    +IntegerMaster &with_optimizer(const OptimizerFactory &t_optimizer)
    +
    + +
    +
    +IntegerMaster &with_integer_columns(bool t_value)
    +
    + +
    +
    +IntegerMaster &with_time_limit(double t_time_limit)
    +
    + +
    +
    +IntegerMaster &with_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +IntegerMaster &with_max_depth(unsigned int t_max_depth)
    +
    + +
    +
    +IntegerMaster &with_frequency(unsigned int t_frequency)
    +
    + +
    +
    +
    +class Strategy : public idol::BranchAndBoundCallback<NodeInfoT>
    +
    +

    Public Functions

    +
    +
    +explicit Strategy(const OptimizerFactory &t_optimizer)
    +
    + +
    +
    +inline bool with_integer_columns() const
    +
    + +
    +
    +inline void set_integer_columns(bool t_value)
    +
    + +
    +
    +inline void set_time_limit(double t_time_limit)
    +
    + +
    +
    +inline void set_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline void set_max_depth(unsigned int t_max_depth)
    +
    + +
    +
    +inline void set_frequency(unsigned int t_frequency)
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.html b/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.html new file mode 100644 index 000000000..8e85b1e87 --- /dev/null +++ b/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.html @@ -0,0 +1,528 @@ + + + + + + + Optimizers::DantzigWolfeDecomposition + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::DantzigWolfeDecomposition

    +
    +

    Doxygen

    +
    +
    +class DantzigWolfeDecomposition : public idol::Algorithm
    +
    +

    Public Functions

    +
    +
    +DantzigWolfeDecomposition(const Model &t_model, idol::DantzigWolfe::Formulation &&t_formulation, const OptimizerFactory &t_master_optimizer_factory, const DantzigWolfe::DualPriceSmoothingStabilization &t_stabilization, unsigned int t_max_parallel_pricing, bool t_use_hard_branching, bool t_remove_infeasible_columns, std::vector<DantzigWolfe::SubProblem> &&t_sub_problem_specifications, std::optional<DantzigWolfe::SubProblem> t_default_sub_problem_spec, const DantzigWolfe::InfeasibilityStrategyFactory &t_strategy, const Logs::DantzigWolfe::Factory &t_logger_factory)
    +
    + +
    +
    +virtual std::string name() const override
    +
    + +
    +
    +inline const DantzigWolfe::Formulation &formulation() const
    +
    + +
    +
    +inline DantzigWolfe::Formulation &formulation()
    +
    + +
    +
    +virtual SolutionStatus get_status() const override
    +
    + +
    +
    +virtual SolutionReason get_reason() const override
    +
    + +
    +
    +virtual double get_best_obj() const override
    +
    + +
    +
    +virtual double get_best_bound() const override
    +
    + +
    +
    +virtual double get_relative_gap() const override
    +
    + +
    +
    +virtual double get_absolute_gap() const override
    +
    + +
    +
    +inline virtual const ::idol::Model &parent() const
    +
    + +
    +
    +inline bool get_param_logs() const
    +
    + +
    +
    +inline virtual void set_param_logs(bool t_value)
    +
    + +
    +
    +inline double get_param_time_limit() const
    +
    + +
    +
    +inline virtual void set_param_time_limit(double t_time_limit)
    +
    + +
    +
    +inline unsigned int get_param_thread_limit() const
    +
    + +
    +
    +inline virtual void set_param_threads(unsigned int t_threads)
    +
    + +
    +
    +double get_param_best_obj_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_obj_stop(double t_best_obj_stop)
    +
    + +
    +
    +double get_param_best_bound_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_bound_stop(double t_best_bound_stop)
    +
    + +
    +
    +inline double get_tol_mip_relative_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_relative_gap(double t_tol_mip_relative_gap)
    +
    + +
    +
    +inline double get_tol_mip_absolute_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_absolute_gap(double t_mip_tol_absolute_gap)
    +
    + +
    +
    +inline double get_tol_feasibility() const
    +
    + +
    +
    +inline virtual void set_tol_feasibility(double t_tol_feasibility)
    +
    + +
    +
    +inline double get_tol_optimality() const
    +
    + +
    +
    +inline virtual void set_tol_optimality(double t_tol_optimality)
    +
    + +
    +
    +inline double get_tol_integer() const
    +
    + +
    +
    +inline virtual void set_tol_integer(double t_tol_integer)
    +
    + +
    +
    +inline unsigned int get_param_iteration_limit() const
    +
    + +
    +
    +inline void set_param_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline bool get_param_presolve() const
    +
    + +
    +
    +inline virtual void set_param_presolve(bool t_value)
    +
    + +
    +
    +inline bool get_param_infeasible_or_unbounded_info() const
    +
    + +
    +
    +inline virtual void set_param_infeasible_or_unbounded_info(bool t_value)
    +
    + +
    +
    +inline const Timer &time() const
    +
    + +
    +
    +double get_remaining_time() const
    +
    + +
    +
    +inline bool is_terminated() const
    +
    + +
    +
    +virtual void terminate()
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +
    +class ColumnGeneration
    +
    +

    Public Functions

    +
    +
    +ColumnGeneration(DantzigWolfeDecomposition &t_parent, bool t_use_farkas_for_infeasibility, double t_best_bound_stop)
    +
    + +
    +
    +inline const DantzigWolfeDecomposition &parent() const
    +
    + +
    +
    +inline DantzigWolfeDecomposition &parent()
    +
    + +
    +
    +inline SolutionStatus status() const
    +
    + +
    +
    +inline SolutionReason reason() const
    +
    + +
    +
    +inline double best_obj() const
    +
    + +
    +
    +inline double best_bound() const
    +
    + +
    +
    +inline const PrimalPoint &primal_solution() const
    +
    + +
    +
    +inline void set_best_bound_stop(double t_best_bound_stop)
    +
    + +
    +
    +void execute()
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/stabilization/Neame.html b/api/mixed-integer/column-generation/stabilization/Neame.html new file mode 100644 index 000000000..e76f3eb80 --- /dev/null +++ b/api/mixed-integer/column-generation/stabilization/Neame.html @@ -0,0 +1,295 @@ + + + + + + + DantzigWolfe::Neame + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    DantzigWolfe::Neame

    +
    +

    Doxygen

    +
    +
    +class Neame : public idol::DantzigWolfe::DualPriceSmoothingStabilization
    +
    +

    Public Functions

    +
    +
    +inline explicit Neame(double t_initial_factor)
    +
    + +
    +
    +inline virtual DualPriceSmoothingStabilization::Strategy *operator()() const override
    +
    + +
    +
    +inline virtual DualPriceSmoothingStabilization *clone() const override
    +
    + +
    +
    +
    +class Strategy : public idol::DantzigWolfe::DualPriceSmoothingStabilization::Strategy
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(double t_initial_factor)
    +
    + +
    +
    +inline virtual void initialize() override
    +
    + +
    +
    +inline virtual void update_stability_center(const DualPoint &t_master_dual) override
    +
    + +
    +
    +inline virtual DualPoint compute_smoothed_dual_solution(const DualPoint &t_master_dual) override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/stabilization/Wentges.html b/api/mixed-integer/column-generation/stabilization/Wentges.html new file mode 100644 index 000000000..266c361ec --- /dev/null +++ b/api/mixed-integer/column-generation/stabilization/Wentges.html @@ -0,0 +1,295 @@ + + + + + + + DantzigWolfe::Wentges + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    DantzigWolfe::Wentges

    +
    +

    Doxygen

    +
    +
    +class Wentges : public idol::DantzigWolfe::DualPriceSmoothingStabilization
    +
    +

    Public Functions

    +
    +
    +inline explicit Wentges(double t_initial_factor)
    +
    + +
    +
    +inline virtual DualPriceSmoothingStabilization::Strategy *operator()() const override
    +
    + +
    +
    +inline virtual DualPriceSmoothingStabilization *clone() const override
    +
    + +
    +
    +
    +class Strategy : public idol::DantzigWolfe::DualPriceSmoothingStabilization::Strategy
    +
    +

    Public Functions

    +
    +
    +inline explicit Strategy(double t_initial_factor)
    +
    + +
    +
    +inline virtual void initialize() override
    +
    + +
    +
    +inline virtual void update_stability_center(const DualPoint &t_master_dual) override
    +
    + +
    +
    +inline virtual DualPoint compute_smoothed_dual_solution(const DualPoint &t_master_dual) override
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/column-generation/stabilization/index.html b/api/mixed-integer/column-generation/stabilization/index.html new file mode 100644 index 000000000..ce4e7d321 --- /dev/null +++ b/api/mixed-integer/column-generation/stabilization/index.html @@ -0,0 +1,245 @@ + + + + + + + More on Stabilization… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    More on Stabilization…

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/GLPK.html b/api/mixed-integer/external-solvers/GLPK.html new file mode 100644 index 000000000..729f78ed4 --- /dev/null +++ b/api/mixed-integer/external-solvers/GLPK.html @@ -0,0 +1,578 @@ + + + + + + + GLPK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    GLPK

    +
    +

    Doxygen

    +
    +
    +class GLPK : public idol::OptimizerFactoryWithDefaultParameters<GLPK>
    +
    +

    Public Functions

    +
    +
    +GLPK() = default
    +
    + +
    +
    +GLPK(const GLPK&) = default
    +
    + +
    +
    +GLPK(GLPK&&) noexcept = default
    +
    + +
    +
    +GLPK &operator=(const GLPK&) = delete
    +
    + +
    +
    +GLPK &operator=(GLPK&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual GLPK *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +GLPK &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &conditional(bool t_conditional_value, const std::function<void(GLPK&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +GLPK &conditional(bool t_conditional_value, const std::function<void(GLPK&)> &t_if, const std::function<void(GLPK&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static GLPK ContinuousRelaxation()
    +
    + +
    +
    +static Model read_from_file(Env &t_env, const std::string &t_filename)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Gurobi.html b/api/mixed-integer/external-solvers/Gurobi.html new file mode 100644 index 000000000..4dfcd616a --- /dev/null +++ b/api/mixed-integer/external-solvers/Gurobi.html @@ -0,0 +1,608 @@ + + + + + + + Gurobi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Gurobi

    +
    +

    Doxygen

    +
    +
    +class Gurobi : public idol::OptimizerFactoryWithDefaultParameters<Gurobi>
    +
    +

    Public Functions

    +
    +
    +Gurobi() = default
    +
    + +
    +
    +Gurobi(const Gurobi &t_src)
    +
    + +
    +
    +Gurobi(Gurobi&&) noexcept = default
    +
    + +
    +
    +Gurobi &operator=(const Gurobi&) = delete
    +
    + +
    +
    +Gurobi &operator=(Gurobi&&) noexcept = default
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +Gurobi &add_callback(const CallbackFactory &t_cb)
    +
    + +
    +
    +Gurobi &with_lazy_cut(bool t_value)
    +
    + +
    +
    +Gurobi &with_max_n_solution_in_pool(unsigned int t_value)
    +
    + +
    +
    +Gurobi &with_continuous_relaxation_only(bool t_value)
    +
    + +
    +
    +Gurobi &with_external_param(GRB_IntParam t_param, int t_value)
    +
    + +
    +
    +Gurobi &with_external_param(GRB_DoubleParam t_param, double t_value)
    +
    + +
    +
    +virtual Gurobi *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Gurobi &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &conditional(bool t_conditional_value, const std::function<void(Gurobi&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Gurobi &conditional(bool t_conditional_value, const std::function<void(Gurobi&)> &t_if, const std::function<void(Gurobi&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Gurobi ContinuousRelaxation()
    +
    + +
    +
    +static Model read_from_file(Env &t_env, const std::string &t_filename)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/HiGHS.html b/api/mixed-integer/external-solvers/HiGHS.html new file mode 100644 index 000000000..d0c87b6f8 --- /dev/null +++ b/api/mixed-integer/external-solvers/HiGHS.html @@ -0,0 +1,578 @@ + + + + + + + HiGHS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    HiGHS

    +
    +

    Doxygen

    +
    +
    +class HiGHS : public idol::OptimizerFactoryWithDefaultParameters<HiGHS>
    +
    +

    Public Functions

    +
    +
    +HiGHS() = default
    +
    + +
    +
    +HiGHS(const HiGHS&) = default
    +
    + +
    +
    +HiGHS(HiGHS&&) noexcept = default
    +
    + +
    +
    +HiGHS &operator=(const HiGHS&) = delete
    +
    + +
    +
    +HiGHS &operator=(HiGHS&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual HiGHS *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +HiGHS &with_continuous_relaxation_only(bool t_value)
    +
    + +
    +
    +HiGHS &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &conditional(bool t_conditional_value, const std::function<void(HiGHS&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +HiGHS &conditional(bool t_conditional_value, const std::function<void(HiGHS&)> &t_if, const std::function<void(HiGHS&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static HiGHS ContinuousRelaxation()
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Mosek.html b/api/mixed-integer/external-solvers/Mosek.html new file mode 100644 index 000000000..dacacaf70 --- /dev/null +++ b/api/mixed-integer/external-solvers/Mosek.html @@ -0,0 +1,598 @@ + + + + + + + Mosek + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Mosek

    +
    +

    Doxygen

    +
    +
    +class Mosek : public idol::OptimizerFactoryWithDefaultParameters<Mosek>
    +
    +

    Public Functions

    +
    +
    +Mosek() = default
    +
    + +
    +
    +Mosek(const Mosek&)
    +
    + +
    +
    +Mosek(Mosek&&) noexcept = default
    +
    + +
    +
    +Mosek &operator=(const Mosek&) = delete
    +
    + +
    +
    +Mosek &operator=(Mosek&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual Mosek *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Mosek &add_callback(const CallbackFactory &t_cb)
    +
    + +
    +
    +Mosek &with_continuous_relaxation_only(bool t_value)
    +
    + +
    +
    +Mosek &with_external_parameter(const std::string &t_param, double t_value)
    +
    + +
    +
    +Mosek &with_external_parameter(const std::string &t_param, int t_value)
    +
    + +
    +
    +Mosek &with_external_parameter(const std::string &t_param, std::string t_value)
    +
    + +
    +
    +Mosek &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &conditional(bool t_conditional_value, const std::function<void(Mosek&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Mosek &conditional(bool t_conditional_value, const std::function<void(Mosek&)> &t_if, const std::function<void(Mosek&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Mosek ContinuousRelaxation()
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Optimizers_GLPK.html b/api/mixed-integer/external-solvers/Optimizers_GLPK.html new file mode 100644 index 000000000..532974ecc --- /dev/null +++ b/api/mixed-integer/external-solvers/Optimizers_GLPK.html @@ -0,0 +1,458 @@ + + + + + + + Optimizers::GLPK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::GLPK

    +
    +

    Doxygen

    +
    +
    +class GLPK : public idol::OptimizerWithLazyUpdates<int, int, int>
    +
    +

    Public Functions

    +
    +
    +explicit GLPK(const Model &t_model, bool t_continuous_relaxation)
    +
    + +
    +
    +inline virtual std::string name() const override
    +
    + +
    +
    +virtual void set_param_time_limit(double t_time_limit) override
    +
    + +
    +
    +virtual void set_param_best_obj_stop(double t_best_obj_stop) override
    +
    + +
    +
    +virtual void set_param_best_bound_stop(double t_best_bound_stop) override
    +
    + +
    +
    +virtual void set_param_presolve(bool t_value) override
    +
    + +
    +
    +virtual void set_param_logs(bool t_value) override
    +
    + +
    +
    +inline int &operator[](const Var &t_var)
    +
    + +
    +
    +inline const int &operator[](const Var &t_var) const
    +
    + +
    +
    +inline int &operator[](const Ctr &t_ctr)
    +
    + +
    +
    +inline const int &operator[](const Ctr &t_ctr) const
    +
    + +
    +
    +inline virtual const ::idol::Model &parent() const
    +
    + +
    +
    +inline bool get_param_logs() const
    +
    + +
    +
    +inline double get_param_time_limit() const
    +
    + +
    +
    +inline unsigned int get_param_thread_limit() const
    +
    + +
    +
    +inline virtual void set_param_threads(unsigned int t_threads)
    +
    + +
    +
    +double get_param_best_obj_stop() const
    +
    + +
    +
    +double get_param_best_bound_stop() const
    +
    + +
    +
    +inline double get_tol_mip_relative_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_relative_gap(double t_tol_mip_relative_gap)
    +
    + +
    +
    +inline double get_tol_mip_absolute_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_absolute_gap(double t_mip_tol_absolute_gap)
    +
    + +
    +
    +inline double get_tol_feasibility() const
    +
    + +
    +
    +inline virtual void set_tol_feasibility(double t_tol_feasibility)
    +
    + +
    +
    +inline double get_tol_optimality() const
    +
    + +
    +
    +inline virtual void set_tol_optimality(double t_tol_optimality)
    +
    + +
    +
    +inline double get_tol_integer() const
    +
    + +
    +
    +inline virtual void set_tol_integer(double t_tol_integer)
    +
    + +
    +
    +inline unsigned int get_param_iteration_limit() const
    +
    + +
    +
    +inline void set_param_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline bool get_param_presolve() const
    +
    + +
    +
    +inline bool get_param_infeasible_or_unbounded_info() const
    +
    + +
    +
    +inline virtual void set_param_infeasible_or_unbounded_info(bool t_value)
    +
    + +
    +
    +inline const Timer &time() const
    +
    + +
    +
    +double get_remaining_time() const
    +
    + +
    +
    +inline bool is_terminated() const
    +
    + +
    +
    +virtual void terminate()
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Model read_from_file(Env &t_env, const std::string &t_filename)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Optimizers_Gurobi.html b/api/mixed-integer/external-solvers/Optimizers_Gurobi.html new file mode 100644 index 000000000..635cd5e25 --- /dev/null +++ b/api/mixed-integer/external-solvers/Optimizers_Gurobi.html @@ -0,0 +1,516 @@ + + + + + + + Optimizers::Gurobi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::Gurobi

    +
    +

    Doxygen

    +
    +
    +class Gurobi : public idol::OptimizerWithLazyUpdates<GRBVar, GRBConstr, GRBQConstr>
    +
    +

    Public Functions

    +
    +
    +Gurobi(const Model &t_model, bool t_continuous_relaxation, GRBEnv &t_env)
    +
    + +
    +
    +inline explicit Gurobi(const Model &t_model, bool t_continuous_relaxation)
    +
    + +
    +
    +inline GRBEnv &env()
    +
    + +
    +
    +inline const GRBEnv &env() const
    +
    + +
    +
    +inline GRBModel &model()
    +
    + +
    +
    +inline const GRBModel &model() const
    +
    + +
    +
    +inline virtual std::string name() const override
    +
    + +
    +
    +virtual void set_param_time_limit(double t_time_limit) override
    +
    + +
    +
    +virtual void set_param_threads(unsigned int t_thread_limit) override
    +
    + +
    +
    +virtual void set_param_best_obj_stop(double t_best_obj_stop) override
    +
    + +
    +
    +virtual void set_param_best_bound_stop(double t_best_bound_stop) override
    +
    + +
    +
    +virtual void set_param_presolve(bool t_value) override
    +
    + +
    +
    +virtual void set_param_infeasible_or_unbounded_info(bool t_value) override
    +
    + +
    +
    +void add_callback(Callback *t_ptr_to_callback)
    +
    + +
    +
    +void set_lazy_cut(bool t_value)
    +
    + +
    +
    +void set_max_n_solution_in_pool(unsigned int t_value)
    +
    + +
    +
    +virtual void set_param_logs(bool t_value) override
    +
    + +
    +
    +void set_param(GRB_IntParam t_param, int t_value)
    +
    + +
    +
    +void set_param(GRB_DoubleParam t_param, double t_value)
    +
    + +
    +
    +virtual void set_tol_mip_relative_gap(double t_relative_gap_tolerance) override
    +
    + +
    +
    +virtual void set_tol_mip_absolute_gap(double t_absolute_gap_tolerance) override
    +
    + +
    +
    +virtual void set_tol_feasibility(double t_tol_feasibility) override
    +
    + +
    +
    +virtual void set_tol_optimality(double t_tol_optimality) override
    +
    + +
    +
    +virtual void set_tol_integer(double t_tol_integer) override
    +
    + +
    +
    +inline GRBVar &operator[](const Var &t_var)
    +
    + +
    +
    +inline const GRBVar &operator[](const Var &t_var) const
    +
    + +
    +
    +inline GRBConstr &operator[](const Ctr &t_ctr)
    +
    + +
    +
    +inline const GRBConstr &operator[](const Ctr &t_ctr) const
    +
    + +
    +
    +inline virtual const ::idol::Model &parent() const
    +
    + +
    +
    +inline bool get_param_logs() const
    +
    + +
    +
    +inline double get_param_time_limit() const
    +
    + +
    +
    +inline unsigned int get_param_thread_limit() const
    +
    + +
    +
    +double get_param_best_obj_stop() const
    +
    + +
    +
    +double get_param_best_bound_stop() const
    +
    + +
    +
    +inline double get_tol_mip_relative_gap() const
    +
    + +
    +
    +inline double get_tol_mip_absolute_gap() const
    +
    + +
    +
    +inline double get_tol_feasibility() const
    +
    + +
    +
    +inline double get_tol_optimality() const
    +
    + +
    +
    +inline double get_tol_integer() const
    +
    + +
    +
    +inline unsigned int get_param_iteration_limit() const
    +
    + +
    +
    +inline void set_param_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline bool get_param_presolve() const
    +
    + +
    +
    +inline bool get_param_infeasible_or_unbounded_info() const
    +
    + +
    +
    +inline const Timer &time() const
    +
    + +
    +
    +double get_remaining_time() const
    +
    + +
    +
    +inline bool is_terminated() const
    +
    + +
    +
    +virtual void terminate()
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Model read_from_file(Env &t_env, const std::string &t_filename)
    +
    + +
    +
    +

    Friends

    +
    +
    +friend class ::idol::GurobiCallbackI
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Optimizers_HiGHS.html b/api/mixed-integer/external-solvers/Optimizers_HiGHS.html new file mode 100644 index 000000000..b4b48ebd2 --- /dev/null +++ b/api/mixed-integer/external-solvers/Optimizers_HiGHS.html @@ -0,0 +1,246 @@ + + + + + + + Optimizers::HiGHS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::HiGHS

    +
    +

    Doxygen

    +
    +

    Warning

    +

    doxygenclass: Cannot find class “idol::Optimizers::HiGHS” in doxygen xml output for project “idol” from directory: _build/xml/

    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Optimizers_Mosek.html b/api/mixed-integer/external-solvers/Optimizers_Mosek.html new file mode 100644 index 000000000..44422447c --- /dev/null +++ b/api/mixed-integer/external-solvers/Optimizers_Mosek.html @@ -0,0 +1,246 @@ + + + + + + + Optimizers::Mosek + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::Mosek

    +
    +

    Doxygen

    +
    +

    Warning

    +

    doxygenclass: Cannot find class “idol::Optimizers::Mosek” in doxygen xml output for project “idol” from directory: _build/xml/

    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Osi.html b/api/mixed-integer/external-solvers/Osi.html new file mode 100644 index 000000000..a8dc2a424 --- /dev/null +++ b/api/mixed-integer/external-solvers/Osi.html @@ -0,0 +1,610 @@ + + + + + + + More on coin-or/Osi (Cplex, Xpress, Cbc, …)… + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    More on 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.

    +
    model.use(OsiCplex());
    +
    +
    +
    +
    +

    Hint

    +

    Note that Osi can also be used with any Osi object by directly passing the interface as an argument.

    +
    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.

    +
    + +
    +

    Doxygen

    +
    +
    +class Osi : public idol::OptimizerFactoryWithDefaultParameters<Osi>
    +

    Subclassed by idol::OsiCbc, idol::OsiClp, idol::OsiCplex, idol::OsiSymphony

    +
    +

    Public Functions

    +
    +
    +Osi(const OsiSolverInterface &t_solver_interface)
    +
    + +
    +
    +Osi(const Osi &t_src)
    +
    + +
    +
    +Osi(Osi&&) noexcept = default
    +
    + +
    +
    +Osi &operator=(const Osi&) = delete
    +
    + +
    +
    +Osi &operator=(Osi&&) noexcept = delete
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +OsiSolverInterface *create_osi_solver_interface() const
    +
    + +
    +
    +virtual Osi *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Osi &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if, const std::function<void(Osi&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Osi ContinuousRelaxation(const OsiSolverInterface &t_solver_interface)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Osi/OsiCbc.html b/api/mixed-integer/external-solvers/Osi/OsiCbc.html new file mode 100644 index 000000000..bc7b048e3 --- /dev/null +++ b/api/mixed-integer/external-solvers/Osi/OsiCbc.html @@ -0,0 +1,555 @@ + + + + + + + OsiCbc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    OsiCbc

    +
    +

    Doxygen

    +
    +
    +class OsiCbc : public idol::Osi
    +
    +

    Public Functions

    +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +OsiSolverInterface *create_osi_solver_interface() const
    +
    + +
    +
    +virtual Osi *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Osi &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if, const std::function<void(Osi&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Osi ContinuousRelaxation(const OsiSolverInterface &t_solver_interface)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Osi/OsiClp.html b/api/mixed-integer/external-solvers/Osi/OsiClp.html new file mode 100644 index 000000000..561fdd094 --- /dev/null +++ b/api/mixed-integer/external-solvers/Osi/OsiClp.html @@ -0,0 +1,555 @@ + + + + + + + OsiClp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    OsiClp

    +
    +

    Doxygen

    +
    +
    +class OsiClp : public idol::Osi
    +
    +

    Public Functions

    +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +OsiSolverInterface *create_osi_solver_interface() const
    +
    + +
    +
    +virtual Osi *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Osi &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if, const std::function<void(Osi&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Osi ContinuousRelaxation(const OsiSolverInterface &t_solver_interface)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Osi/OsiCplex.html b/api/mixed-integer/external-solvers/Osi/OsiCplex.html new file mode 100644 index 000000000..1ae21cc52 --- /dev/null +++ b/api/mixed-integer/external-solvers/Osi/OsiCplex.html @@ -0,0 +1,555 @@ + + + + + + + OsiCplex + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    OsiCplex

    +
    +

    Doxygen

    +
    +
    +class OsiCplex : public idol::Osi
    +
    +

    Public Functions

    +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +OsiSolverInterface *create_osi_solver_interface() const
    +
    + +
    +
    +virtual Osi *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Osi &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if, const std::function<void(Osi&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Osi ContinuousRelaxation(const OsiSolverInterface &t_solver_interface)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/external-solvers/Osi/OsiSymphony.html b/api/mixed-integer/external-solvers/Osi/OsiSymphony.html new file mode 100644 index 000000000..1c297555b --- /dev/null +++ b/api/mixed-integer/external-solvers/Osi/OsiSymphony.html @@ -0,0 +1,555 @@ + + + + + + + OsiSymphony + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    OsiSymphony

    +
    +

    Doxygen

    +
    +
    +class OsiSymphony : public idol::Osi
    +
    +

    Public Functions

    +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +OsiSolverInterface *create_osi_solver_interface() const
    +
    + +
    +
    +virtual Osi *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +Osi &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +Osi &conditional(bool t_conditional_value, const std::function<void(Osi&)> &t_if, const std::function<void(Osi&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +static Osi ContinuousRelaxation(const OsiSolverInterface &t_solver_interface)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/index.html b/api/mixed-integer/index.html new file mode 100644 index 000000000..ff4b9c31e --- /dev/null +++ b/api/mixed-integer/index.html @@ -0,0 +1,321 @@ + + + + + + + Mixed-integer Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/misc/CtrType.html b/api/mixed-integer/misc/CtrType.html new file mode 100644 index 000000000..1b31d3d21 --- /dev/null +++ b/api/mixed-integer/misc/CtrType.html @@ -0,0 +1,260 @@ + + + + + + + CtrType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    CtrType

    +
    +
    +enum idol::CtrType
    +

    Values:

    +
    +
    +enumerator LessOrEqual
    +
    + +
    +
    +enumerator GreaterOrEqual
    +
    + +
    +
    +enumerator Equal
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/misc/VarType.html b/api/mixed-integer/misc/VarType.html new file mode 100644 index 000000000..4f3331c3e --- /dev/null +++ b/api/mixed-integer/misc/VarType.html @@ -0,0 +1,260 @@ + + + + + + + VarType + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    VarType

    +
    +
    +enum idol::VarType
    +

    Values:

    +
    +
    +enumerator Continuous
    +
    + +
    +
    +enumerator Integer
    +
    + +
    +
    +enumerator Binary
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/misc/tolerances.html b/api/mixed-integer/misc/tolerances.html new file mode 100644 index 000000000..e828a35d3 --- /dev/null +++ b/api/mixed-integer/misc/tolerances.html @@ -0,0 +1,380 @@ + + + + + + + Tolerances + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Tolerances

    +
    +
    +namespace idol
    +
    +

    Functions

    +
    +
    +static bool is_pos_inf(double t_value)
    +
    + +
    +
    +static bool is_neg_inf(double t_value)
    +
    + +
    +
    +static bool is_inf(double t_value)
    +
    + +
    +
    +static bool equals(double t_a, double t_b, double t_tolerance)
    +
    + +
    +
    +static bool is(double t_a, CtrType t_type, double t_b, double t_tolerance)
    +
    + +
    +
    +static double relative_gap(double t_lb, double t_ub)
    +
    + +
    +
    +static double absolute_gap(double t_lb, double t_ub)
    +
    + +
    +
    +static bool is_zero(double t_value, double t_tolerance)
    +
    + +
    +
    +template<class T>
    decltype(std::declval<T>().is_zero(.1)) is_zero(const T &t_expr, double t_tolerance)
    +
    + +
    +
    +static bool is_integer(double t_value, double t_tolerance)
    +
    + +
    +
    +static double round(double t_value, unsigned int t_n_digits = 0)
    +
    + +
    +
    +

    Variables

    +
    +
    +static constexpr double Inf = 1e20
    +
    + +
    +
    +
    +namespace Tolerance
    +

    Stores the default high-level tolerances used in idol.

    +

    It is possible for external-mip to have additional tolerance parameters, yet, the tolerances defined in this namespace should always be taken into account by the optimizer. Apart from the Sparsity tolerance, users can also change tolerance values at a local level (i.e., at an optimizer level) rather than at a global level.

    +
    +

    Variables

    +
    +
    +static double Sparsity = 1e-8
    +

    Default: \( 10^{-8} \)

    +

    Recommended range: \( [ 10^{-10}, 10^{-5} ] \)

    +

    This tolerance is used when data is saved in a sparse manner. For instance, when a value close to zero should be stored or ignored when saving a primal point.

    +
    + +
    +
    +static unsigned int Digits = 8
    +
    + +
    +
    +static double MIPRelativeGap = 1e-4
    +

    Default: \( 10^{-4} \)

    +

    Recommended range: \( [ 0, +\infty ] \)

    +

    Used to declare optimality of a MIP solution by comparing with the current relative gap.

    +

    The relative gap is computed as follows:

    +\[ \gamma_{\text{rel}} := \frac{ |UB - LB| }{ 10^{-10} + |UB| }. \]
    +

    +
    + +
    +
    +static double MIPAbsoluteGap = 1e-5
    +

    Default: \( 10^{-5} \)

    +

    Recommended range: \( [ 0, \infty ] \)

    +

    Used to declare optimality of a MIP solution by comparing with the current absolute gap.

    +

    The absolute gap is computed as follows:

    +\[ \gamma_{\text{abs}} := |UB - LB| \]
    +

    +
    + +
    +
    +static double Integer = 10e-5
    +

    Default: \( 10^{-5} \)

    +

    Recommended range: \( [ 10^{-9}, 10^{-1} ] \)

    +

    Used to recognized integer values, i.e., a given value is considered integer when the closest integer point is closer than this tolerance.

    +
    + +
    +
    +static double Feasibility = 10e-6
    +

    Default: \( 10^{-6} \)

    +

    Recommended range: \( [ 10^{-9}, 10^{-2} ] \)

    +

    Used to characterized constraint satisfaction, i.e., a constraint is satisfied if it is not violated by a larger amount than this tolerance.

    +
    + +
    +
    +static double Optimality = 10e-6
    +

    Default: \( 10^{-6} \)

    +

    Recommended range: \( [ 10^{-9}, 10^{-2} ] \)

    +

    Used to characterize optimality, i.e., all reduced costs must be smaller than this tolerance.

    +
    + +
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Annotation.html b/api/mixed-integer/modeling/Annotation.html new file mode 100644 index 000000000..97ab8fae9 --- /dev/null +++ b/api/mixed-integer/modeling/Annotation.html @@ -0,0 +1,342 @@ + + + + + + + Annotation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Annotation

    +

    Annotations are additional information associated to an optimization object (e.g., a constraint or a variable). +The Annotation class takes one template arguments which is the value type. For instance, we +can create an annotation of type unsigned int as follows.

    +
    Env env;
    +
    +const unsigned int default_value = 0;
    +
    +Annotation<unsigned int> annotation(env, "my_annotation", default_value);
    +
    +
    +

    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 constraint, the value of the annotation can be accessed +by calling the Ctr::get method.

    +
    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.

    +
    +

    Doxygen

    +
    +
    +template<class ValueT = unsigned int>
    class Annotation : public idol::impl::Annotation
    +
    +

    Public Functions

    +
    +
    +inline Annotation(Env &t_env, std::string t_name)
    +
    + +
    +
    +template<class ...ArgsT>
    inline Annotation(Env &t_env, std::string t_name, ArgsT&&... t_args)
    +
    + +
    +
    +inline const ValueT &default_value() const
    +
    + +
    +
    +inline unsigned int id() const
    +

    Returns the id of the annotation.

    +

    The id is unique within the environment.

    +
    +
    Returns:
    +

    The id of the annotation

    +
    +
    +
    + +
    +
    +inline const std::string &name() const
    +

    Returns the given name of the annotation.

    +
    +
    Returns:
    +

    The given name of the annotation

    +
    +
    +
    + +
    +
    +inline bool has_default() const
    +

    Returns true if the annotation has a default value, false otherwise.

    +
    +
    Returns:
    +

    true if the annotation has a default value, false otherwise

    +
    +
    +
    + +
    +
    +void free()
    +

    Frees the memory kept for the annotation in the environment.

    +
    + +
    +
    +inline Env &env() const
    +

    Returns the underlying environment of the annotation.

    +
    +
    Returns:
    +

    The underlying environment of the annotation.

    +
    +
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +template<class ...ArgsT>
    static inline Annotation<ValueT> make_with_default_value(Env &t_env, std::string t_name, ArgsT&&... t_args)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Ctr.html b/api/mixed-integer/modeling/Ctr.html new file mode 100644 index 000000000..76c2f3b27 --- /dev/null +++ b/api/mixed-integer/modeling/Ctr.html @@ -0,0 +1,427 @@ + + + + + + + Ctr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Ctr

    +
    +

    Doxygen

    +
    +
    +class Ctr : public idol::Object<CtrVersion, Ctr>
    +
    +

    Public Functions

    +
    +
    +Ctr(Env &t_env, TempCtr &&t_temp_ctr, std::string t_name = "")
    +

    Constructor.

    +

    Creates a new constraint in the optimization environment.

    +

    If no name is given, a unique name in the environment is given.

    +
    +
    Parameters:
    +
      +
    • t_env – The optimization environment.

    • +
    • t_temp_ctr – The temporary constraint used to create the default version of the constraint.

    • +
    • t_name – The given name for the constraint.

    • +
    +
    +
    +
    + +
    +
    +Ctr(Env &t_env, const TempCtr &t_temp_ctr, std::string t_name = "")
    +

    Constructor.

    +

    Creates a new constraint in the optimization environment.

    +

    If no name is given, a unique name in the environment is given.

    +
    +
    Parameters:
    +
      +
    • t_env – The optimization environment.

    • +
    • t_temp_ctr – The temporary constraint used to create the default version of the constraint.

    • +
    • t_name – The given name for the constraint.

    • +
    +
    +
    +
    + +
    +
    +Ctr(Env &t_env, CtrType t_type, double t_constant, std::string t_name = "")
    +

    Constructor.

    +

    Creates a new constraint in the optimization environment.

    +

    If no name is given, a unique name in the environment is given.

    +
    +
    Parameters:
    +
      +
    • t_env – The optimization environment.

    • +
    • t_type – The type of the constraint in its default version.

    • +
    • t_constant – The right hand-side of the constraint in its default version.

    • +
    • t_name – The given name for the constraint.

    • +
    +
    +
    +
    + +
    +
    +unsigned int index(const Model &t_index) const
    +
    + +
    +
    +inline const std::string &name() const
    +

    Returns the name of the optimization object.

    +
    +
    Returns:
    +

    The name of the optimization object.

    +
    +
    +
    + +
    +
    +inline unsigned int id() const
    +

    Returns the id of the optimization object.

    +
    +
    Returns:
    +

    The id of the optimization object.

    +
    +
    +
    + +
    +
    +inline bool is_in(const Model &t_model) const
    +

    Returns true if the optimization object is part of the model t_model, false otherwise.

    +
    +
    Parameters:
    +

    t_model – The model.

    +
    +
    Returns:
    +

    True if the optimization object is part of the model t_model, false otherwise.

    +
    +
    +
    + +
    +
    +inline const ValueT &get(const Annotation<ValueT> &t_annotation) const
    +

    Returns the value of the given annotation t_annotation associated to the object.

    +

    If no value is found, the default value of the annotation is returned. If no default value was set, an exception is thrown.

    +
    +
    Template Parameters:
    +

    ValueT – The value type of the annotation.

    +
    +
    Parameters:
    +

    t_annotation – The annotation.

    +
    +
    Returns:
    +

    The value of the annotation.

    +
    +
    +
    + +
    +
    +inline void set(const Annotation<ValueT> &t_annotation, ArgsT&&... t_args) const
    +

    Sets the value of the given annotation t_annotation associated to the object.

    +
    +
    Template Parameters:
    +
      +
    • ValueT – The value type of the annotation.

    • +
    • ArgsT – The parameter pack types for constructing the value of the annotation.

    • +
    +
    +
    Parameters:
    +
      +
    • t_annotation – The annotation.

    • +
    • t_args – The parameter pack arguments used to construct “in place” the value of the annotation.

    • +
    +
    +
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +template<unsigned int N = 1, unsigned int I = 0>
    static inline Vector<Ctr, N - I> make_vector(Env &t_env, const Dim<N> &t_dim, CtrType t_type, double t_constant, const std::string &t_name = "")
    +

    Creates a (nested) vector of constraints.

    +

    Example:

    +

    Env env;
    +
    +auto constraint = Ctr::make_vector(env, Dim<2>(m, n), LessOrEqual, 0., "constraint");
    +
    +std::cout << constraint[1][4].name() << std::endl; // "constraint_1_4"
    +
    +
    +

    +
    +
    Template Parameters:
    +
      +
    • N – The dimension of the (nested) vector.

    • +
    • I – Used for recursion.

    • +
    +
    +
    Parameters:
    +
      +
    • t_env – The environment to store the constraints.

    • +
    • t_dim – The number of elements in each dimension.

    • +
    • t_type – The type of the constraints.

    • +
    • t_constant – The right hand-side of the constraints.

    • +
    • t_name – The given name of the constraints.

    • +
    +
    +
    Returns:
    +

    A (nested) vector of constraints.

    +
    +
    +
    + +
    +
    +

    Friends

    +
    +
    +friend class impl::Env
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Dim.html b/api/mixed-integer/modeling/Dim.html new file mode 100644 index 000000000..726349b00 --- /dev/null +++ b/api/mixed-integer/modeling/Dim.html @@ -0,0 +1,260 @@ + + + + + + + Dim + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Dim

    +
    +

    Doxygen

    +
    +
    +template<unsigned int N>
    class Dim : public std::array<unsigned int, N>
    +
    +

    Public Functions

    +
    +
    +inline explicit Dim(std::array<unsigned int, N> t_dims)
    +
    + +
    +
    +template<class ...ArgsT>
    inline explicit Dim(ArgsT&&... t_args)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Env.html b/api/mixed-integer/modeling/Env.html new file mode 100644 index 000000000..daea36b5b --- /dev/null +++ b/api/mixed-integer/modeling/Env.html @@ -0,0 +1,308 @@ + + + + + + + Env + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Env

    +
    +

    Doxygen

    +
    +
    +class Env : public idol::impl::Env
    +

    Environment class.

    +

    This class stores and manages every optimization objects and annotations in idol.

    +

    Essentially, it is the environment that controls the death and lives of such objects. It is through the environment that idol manages the different versions each optimization object may have during the execution of your program.

    +

    Important: If an optimization environment is destroyed, all of its objects are also destroyed. Trying to access them will lead to undefined behavior and, eventually, segmentation fault.

    +

    Typically, only one environment should be used by your code, though it is possible to instantiate many environment (not advised).

    +

    Environments are objects of the Env class and can be created as follows.

    +
    Env env; // Creates a new optimization environment.
    +
    +
    +
    +

    Public Functions

    +
    +
    +Env() = default
    +

    Constructor.

    +

    Creates a new optimization environment.

    +
    + +
    +
    +template<class T>
    inline const auto &operator[](const T &t_object) const
    +

    Returns the default version of an optimization object.

    +
    +
    Template Parameters:
    +

    T – The type of object queried.

    +
    +
    Parameters:
    +

    t_object – The object. @returnthe The default version of an optimization object.

    +
    +
    +
    + +
    +
    +

    Friends

    +
    +
    +friend class Model
    +
    + +
    +
    +friend class Var
    +
    + +
    +
    +friend class Ctr
    +
    + +
    +
    +friend class QCtr
    +
    + +
    +
    +friend class impl::Annotation
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Expr.html b/api/mixed-integer/modeling/Expr.html new file mode 100644 index 000000000..50689d024 --- /dev/null +++ b/api/mixed-integer/modeling/Expr.html @@ -0,0 +1,358 @@ + + + + + + + AffExpr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    AffExpr

    +
    +

    Doxygen

    +
    +
    +template<class KeyT = idol::Var, class ValueT = double>
    class AffExpr
    +
    +

    Public Functions

    +
    +
    +AffExpr()
    +
    + +
    +
    +AffExpr(ValueT t_constant)
    +
    + +
    +
    +AffExpr(const KeyT &t_key)
    +
    + +
    +
    +AffExpr(LinExpr<KeyT> t_expr)
    +
    + +
    +
    +virtual ~AffExpr() = default
    +
    + +
    +
    +AffExpr(const AffExpr &t_src) = default
    +
    + +
    +
    +AffExpr(AffExpr&&) noexcept = default
    +
    + +
    +
    +AffExpr &operator=(const AffExpr &t_rhs) = default
    +
    + +
    +
    +AffExpr &operator=(AffExpr&&) noexcept = default
    +
    + +
    +
    +AffExpr &operator+=(const AffExpr &t_rhs)
    +
    + +
    +
    +AffExpr &operator-=(const AffExpr &t_rhs)
    +
    + +
    +
    +AffExpr &operator*=(double t_rhs)
    +
    + +
    +
    +AffExpr &operator/=(double t_rhs)
    +
    + +
    +
    +AffExpr operator-() const
    +
    + +
    +
    +inline LinExpr<KeyT, ValueT> &linear()
    +
    + +
    +
    +inline const LinExpr<KeyT, ValueT> &linear() const
    +
    + +
    +
    +inline ValueT &constant()
    +
    + +
    +
    +inline const ValueT &constant() const
    +
    + +
    +
    +inline bool is_zero(double t_tolerance) const
    +
    + +
    +
    +inline void clear()
    +
    + +
    +
    +

    Public Static Attributes

    +
    +
    +static const AffExpr<KeyT, ValueT> Zero = {}
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/LinExpr.html b/api/mixed-integer/modeling/LinExpr.html new file mode 100644 index 000000000..b4f6b6214 --- /dev/null +++ b/api/mixed-integer/modeling/LinExpr.html @@ -0,0 +1,461 @@ + + + + + + + LinExpr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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.

    +
    +

    Example

    +

    In this example, we create a linear expression representing the following linear expression.

    +
    +\[3 x_0 + 2 x_1\]
    +
    auto x = model.add_vars(Dim<1>(2), 0, Inf, Continuous, "x");
    +
    +LinExpr lin_expr = 3 * x[0] + 2 * x[1];
    +
    +
    +
    +
    +

    Doxygen

    +
    +
    +template<class KeyT = idol::Var, class ValueT = double>
    class LinExpr : public idol::SparseVector<idol::Var, double>
    +
    +
    Template Parameters:
    +

    KeyT – the class representing keys

    +
    +
    +

    Subclassed by idol::QuadExpr< idol::Var, idol::QuadExpr< idol::Var > >, idol::QuadExpr< idol::Var >, idol::QuadExpr< idol::Var, double >, idol::QuadExpr< KeyT, ValueT >

    +
    +

    Public Types

    +
    +
    +using iterator = typename map_t::iterator
    +
    + +
    +
    +using const_iterator = typename map_t::const_iterator
    +
    + +
    +
    +

    Public Functions

    +
    +
    +LinExpr() = default
    +
    + +
    +
    +LinExpr(KeyT t_key)
    +
    + +
    +
    +inline LinExpr(SparseVector<KeyT, ValueT> t_vector)
    +
    + +
    +
    +LinExpr(const ValueT &t_factor, const KeyT &t_key)
    +
    + +
    +
    +LinExpr(ValueT &&t_factor, const KeyT &t_key)
    +
    + +
    +
    +LinExpr(const LinExpr<KeyT, ValueT>&) = default
    +
    + +
    +
    +LinExpr(LinExpr<KeyT, ValueT>&&) = default
    +
    + +
    +
    +LinExpr &operator=(const LinExpr<KeyT, ValueT>&) noexcept = default
    +
    + +
    +
    +LinExpr &operator=(LinExpr<KeyT, ValueT>&&) noexcept = default
    +
    + +
    +
    +LinExpr &operator+=(const LinExpr<KeyT, ValueT> &t_rhs)
    +
    + +
    +
    +LinExpr &operator+=(const KeyT &t_rhs)
    +
    + +
    +
    +LinExpr &operator-=(const LinExpr<KeyT, ValueT> &t_rhs)
    +
    + +
    +
    +LinExpr &operator-=(const KeyT &t_rhs)
    +
    + +
    +
    +virtual SparseVector &operator+=(const SparseVector &t_vector)
    +
    + +
    +
    +virtual SparseVector &operator-=(const SparseVector &t_vector)
    +
    + +
    +
    +virtual SparseVector &operator*=(std::conditional_t<std::is_arithmetic_v<ValueT>, ValueT, double> t_scalar)
    +
    + +
    +
    +virtual SparseVector &operator/=(std::conditional_t<std::is_arithmetic_v<ValueT>, ValueT, double> t_scalar)
    +
    + +
    +
    +SparseVector operator-() const
    +
    + +
    +
    +inline unsigned int size() const
    +
    + +
    +
    +inline bool empty() const
    +
    + +
    +
    +inline bool has_index(const IndexT &t_index) const
    +
    + +
    +
    +const ValueT &get(const IndexT &t_index1) const
    +
    + +
    +
    +void set(const IndexT &t_index, const ValueT &t_value)
    +
    + +
    +
    +virtual bool is_zero(double t_tolerance) const
    +
    + +
    +
    +inline void remove(const IndexT &t_index)
    +
    + +
    +
    +inline void clear()
    +
    + +
    +
    +inline void reserve(unsigned int t_capacity)
    +
    + +
    +
    +inline iterator begin()
    +
    + +
    +
    +inline const_iterator begin() const
    +
    + +
    +
    +inline iterator end()
    +
    + +
    +
    +inline const_iterator end() const
    +
    + +
    +
    +inline const_iterator cbegin() const
    +
    + +
    +
    +inline const_iterator cend() const
    +
    + +
    +
    +SparseVector &merge_without_conflict(const SparseVector &t_vec)
    +
    + +
    +
    +

    Public Static Attributes

    +
    +
    +static LinExpr<KeyT, ValueT> Zero = {}
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Model.html b/api/mixed-integer/modeling/Model.html new file mode 100644 index 000000000..326bc1ebc --- /dev/null +++ b/api/mixed-integer/modeling/Model.html @@ -0,0 +1,785 @@ + + + + + + + Model + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Model

    +
    +

    Doxygen

    +
    +
    +class Model
    +

    This class is used to represent a mathematical optimization model.

    +
    +

    Public Types

    +
    +
    +enum Storage
    +

    Values:

    +
    +
    +enumerator ColumnOriented
    +
    + +
    +
    +enumerator RowOriented
    +
    + +
    +
    +enumerator Both
    +
    + +
    + +
    +
    +

    Public Functions

    +
    +
    +explicit Model(Env &t_env, Storage t_storage = Both)
    +
    + +
    +
    +Model(Model&&) noexcept
    +
    + +
    +
    +Model &operator=(const Model&) = delete
    +
    + +
    +
    +Model &operator=(Model&&) noexcept = delete
    +
    + +
    +
    +~Model()
    +
    + +
    +
    +Var add_var(double t_lb, double t_ub, VarType t_type, double t_obj = 0., std::string t_name = "")
    +
    + +
    +
    +Var add_var(double t_lb, double t_ub, VarType t_type, double t_obj, LinExpr<Ctr> t_column, std::string t_name = "")
    +
    + +
    +
    +template<unsigned int N>
    Vector<Var, N> add_vars(Dim<N> t_dim, double t_lb, double t_ub, VarType t_type, double t_obj = 0., const std::string &t_name = "")
    +
    + +
    +
    +void add(const Var &t_var)
    +
    + +
    +
    +void add(const Var &t_var, TempVar t_temp_var)
    +
    + +
    +
    +bool has(const Var &t_var) const
    +
    + +
    +
    +void remove(const Var &t_var)
    +
    + +
    +
    +inline ConstIteratorForward<std::vector<Var>> vars() const
    +
    + +
    +
    +Ctr add_ctr(TempCtr t_temp_ctr, std::string t_name = "")
    +
    + +
    +
    +Ctr add_ctr(LinExpr<Var> &&t_lhs, CtrType t_type, double t_rhs, std::string t_name = "")
    +
    + +
    +
    +template<unsigned int N>
    Vector<Ctr, N> add_ctrs(Dim<N> t_dim, CtrType t_type, double t_rhs, const std::string &t_name = "")
    +
    + +
    +
    +void add(const Ctr &t_ctr)
    +
    + +
    +
    +void add(const Ctr &t_ctr, TempCtr t_temp_ctr)
    +
    + +
    +
    +bool has(const Ctr &t_ctr) const
    +
    + +
    +
    +void remove(const Ctr &t_ctr)
    +
    + +
    +
    +inline ConstIteratorForward<std::vector<Ctr>> ctrs() const
    +
    + +
    +
    +QCtr add_qctr(TempQCtr t_temp_ctr, std::string t_name = "")
    +
    + +
    +
    +QCtr add_qctr(QuadExpr<Var> &&t_expr, CtrType t_type, std::string t_name = "")
    +
    + +
    +
    +template<unsigned int N>
    Vector<QCtr, N> add_qctrs(Dim<N> t_dim, CtrType t_type, const std::string &t_name = "")
    +
    + +
    +
    +void add(const QCtr &t_ctr)
    +
    + +
    +
    +void add(const QCtr &t_ctr, TempQCtr t_temp_ctr)
    +
    + +
    +
    +bool has(const QCtr &t_ctr) const
    +
    + +
    +
    +void remove(const QCtr &t_ctr)
    +
    + +
    +
    +inline ConstIteratorForward<std::vector<QCtr>> qctrs() const
    +
    + +
    +
    +inline unsigned int id() const
    +
    + +
    +
    +Model *clone() const
    +
    + +
    +
    +Model copy() const
    +
    + +
    +
    +void reserve_vars(unsigned int t_size)
    +
    + +
    +
    +void reserve_ctrs(unsigned int t_size)
    +
    + +
    +
    +void reserve_qctrs(unsigned int t_size)
    +
    + +
    +
    +inline Env &env() const
    +
    + +
    +
    +void use(const OptimizerFactory &t_optimizer_factory)
    +
    + +
    +
    +bool has_optimizer() const
    +
    + +
    +
    +inline bool has_optimizer_factory() const
    +
    + +
    +
    +inline const OptimizerFactory &optimizer_factory() const
    +
    + +
    +
    +void unuse()
    +
    + +
    +
    +template<class T, unsigned int N>
    void add_vector(const Vector<T, N> &t_vector)
    +
    + +
    +
    +inline Optimizer &optimizer()
    +
    + +
    +
    +inline const Optimizer &optimizer() const
    +
    + +
    +
    +void optimize()
    +
    + +
    +
    +void write(const std::string &t_name)
    +
    + +
    +
    +void update()
    +
    + +
    +
    +ObjectiveSense get_obj_sense() const
    +
    + +
    +
    +const QuadExpr<Var> &get_obj_expr() const
    +
    + +
    +
    +const LinExpr<Ctr> &get_rhs_expr() const
    +
    + +
    +
    +double get_mat_coeff(const Ctr &t_ctr, const Var &t_var) const
    +
    + +
    +
    +SolutionStatus get_status() const
    +
    + +
    +
    +SolutionReason get_reason() const
    +
    + +
    +
    +double get_best_obj() const
    +
    + +
    +
    +double get_best_bound() const
    +
    + +
    +
    +void set_obj_sense(ObjectiveSense t_value)
    +
    + +
    +
    +void set_obj_expr(const QuadExpr<Var> &t_objective)
    +
    + +
    +
    +void set_obj_expr(QuadExpr<Var> &&t_objective)
    +
    + +
    +
    +void set_rhs_expr(LinExpr<Ctr> &&t_rhs)
    +
    + +
    +
    +void set_rhs_expr(const LinExpr<Ctr> &t_rhs)
    +
    + +
    +
    +void set_obj_const(double t_constant)
    +
    + +
    +
    +void set_mat_coeff(const Ctr &t_ctr, const Var &t_var, double t_coeff)
    +
    + +
    +
    +QCtr get_qctr_by_index(unsigned int t_index) const
    +
    + +
    +
    +Ctr get_ctr_by_index(unsigned int t_index) const
    +
    + +
    +
    +Var get_var_by_index(unsigned int t_index) const
    +
    + +
    +
    +unsigned int get_ctr_index(const Ctr &t_ctr) const
    +
    + +
    +
    +unsigned int get_qctr_index(const QCtr &tctr) const
    +
    + +
    +
    +CtrType get_ctr_type(const Ctr &t_ctr) const
    +
    + +
    +
    +double get_ctr_rhs(const Ctr &t_ctr) const
    +
    + +
    +
    +const LinExpr<Var> &get_ctr_row(const Ctr &t_ctr) const
    +
    + +
    +
    +const QuadExpr<Var> &get_qctr_expr(const QCtr &t_ctr) const
    +
    + +
    +
    +CtrType get_qctr_type(const QCtr &t_ctr) const
    +
    + +
    +
    +double get_ctr_dual(const Ctr &t_ctr) const
    +
    + +
    +
    +double get_ctr_farkas(const Ctr &t_ctr) const
    +
    + +
    +
    +void set_ctr_rhs(const Ctr &t_ctr, double t_rhs)
    +
    + +
    +
    +void set_ctr_type(const Ctr &t_ctr, CtrType t_type)
    +
    + +
    +
    +void set_ctr_row(const Ctr &t_ctr, const LinExpr<Var> &t_row)
    +
    + +
    +
    +void set_ctr_row(const Ctr &t_ctr, LinExpr<Var> &&t_row)
    +
    + +
    +
    +unsigned int get_var_index(const Var &t_var) const
    +
    + +
    +
    +VarType get_var_type(const Var &t_var) const
    +
    + +
    +
    +double get_var_lb(const Var &t_var) const
    +
    + +
    +
    +double get_var_ub(const Var &t_var) const
    +
    + +
    +
    +double get_var_primal(const Var &t_var) const
    +
    + +
    +
    +double get_var_reduced_cost(const Var &t_var) const
    +
    + +
    +
    +double get_var_ray(const Var &t_var) const
    +
    + +
    +
    +const LinExpr<Ctr> &get_var_column(const Var &t_var) const
    +
    + +
    +
    +double get_var_obj(const Var &t_var) const
    +
    + +
    +
    +void set_var_type(const Var &t_var, VarType t_type)
    +
    + +
    +
    +void set_var_lb(const Var &t_var, double t_lb)
    +
    + +
    +
    +void set_var_ub(const Var &t_var, double t_ub)
    +
    + +
    +
    +void set_var_obj(const Var &t_var, double t_obj)
    +
    + +
    +
    +void set_var_column(const Var &t_var, const LinExpr<Ctr> &t_column)
    +
    + +
    +
    +void set_var_column(const Var &t_var, LinExpr<Ctr> &&t_column)
    +
    + +
    +
    +unsigned int get_n_solutions() const
    +
    + +
    +
    +unsigned int get_solution_index() const
    +
    + +
    +
    +void set_solution_index(unsigned int t_index)
    +
    + +
    +
    +void dump(std::ostream &t_os = std::cout) const
    +
    + +
    +
    +inline Storage storage() const
    +
    + +
    +
    +void set_storage(Storage t_storage, bool t_reset_minor_representation = false)
    +
    + +
    +
    +void reset_minor_representation()
    +
    + +
    +
    +template<unsigned int N>
    idol::Vector<idol::Var, N> add_vars(Dim<N> t_dim, double t_lb, double t_ub, VarType t_type, double t_obj, const std::string &t_name)
    +
    + +
    +
    +template<unsigned int N>
    idol::Vector<idol::Ctr, N> add_ctrs(Dim<N> t_dim, CtrType t_type, double t_rhs, const std::string &t_name)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Point.html b/api/mixed-integer/modeling/Point.html new file mode 100644 index 000000000..9daff0ac7 --- /dev/null +++ b/api/mixed-integer/modeling/Point.html @@ -0,0 +1,445 @@ + + + + + + + Point + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Point

    +
    +
    +template<class T>
    class Point : public idol::SparseVector<T, double>
    +
    +

    Public Types

    +
    +
    +using iterator = typename map_t::iterator
    +
    + +
    +
    +using const_iterator = typename map_t::const_iterator
    +
    + +
    +
    +

    Public Functions

    +
    +
    +Point() = default
    +
    + +
    +
    +inline explicit Point(const SparseVector<T, double> &t_vector)
    +
    + +
    +
    +inline explicit Point(SparseVector<T, double> &&t_vector)
    +
    + +
    +
    +inline SolutionStatus status() const
    +
    + +
    +
    +inline void set_status(SolutionStatus t_status)
    +
    + +
    +
    +inline SolutionReason reason() const
    +
    + +
    +
    +inline void set_reason(SolutionReason t_reason)
    +
    + +
    +
    +double objective_value() const
    +
    + +
    +
    +inline void set_objective_value(double t_objective_value)
    +
    + +
    +
    +inline bool has_objective_value() const
    +
    + +
    +
    +inline void reset_objective_value()
    +
    + +
    +
    +inline Point &operator*=(double t_factor) override
    +
    + +
    +
    +inline Point &operator+=(const Point &t_other)
    +
    + +
    +
    +inline Point &operator+=(Point &&t_other)
    +
    + +
    +
    +inline Point &operator-=(const Point &t_other)
    +
    + +
    +
    +inline Point &operator-=(Point &&t_other)
    +
    + +
    +
    +virtual SparseVector &operator+=(const SparseVector &t_vector)
    +
    + +
    +
    +virtual SparseVector &operator-=(const SparseVector &t_vector)
    +
    + +
    +
    +virtual SparseVector &operator*=(std::conditional_t<std::is_arithmetic_v<double>, double, double> t_scalar)
    +
    + +
    +
    +virtual SparseVector &operator/=(std::conditional_t<std::is_arithmetic_v<double>, double, double> t_scalar)
    +
    + +
    +
    +SparseVector operator-() const
    +
    + +
    +
    +inline unsigned int size() const
    +
    + +
    +
    +inline bool empty() const
    +
    + +
    +
    +inline bool has_index(const T &t_index) const
    +
    + +
    +
    +const double &get(const T &t_index1) const
    +
    + +
    +
    +void set(const T &t_index, const double &t_value)
    +
    + +
    +
    +virtual bool is_zero(double t_tolerance) const
    +
    + +
    +
    +inline void remove(const T &t_index)
    +
    + +
    +
    +inline void clear()
    +
    + +
    +
    +inline void reserve(unsigned int t_capacity)
    +
    + +
    +
    +inline iterator begin()
    +
    + +
    +
    +inline const_iterator begin() const
    +
    + +
    +
    +inline iterator end()
    +
    + +
    +
    +inline const_iterator end() const
    +
    + +
    +
    +inline const_iterator cbegin() const
    +
    + +
    +
    +inline const_iterator cend() const
    +
    + +
    +
    +SparseVector &merge_without_conflict(const SparseVector &t_vec)
    +
    + +
    +
    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/QCtr.html b/api/mixed-integer/modeling/QCtr.html new file mode 100644 index 000000000..be6147b06 --- /dev/null +++ b/api/mixed-integer/modeling/QCtr.html @@ -0,0 +1,360 @@ + + + + + + + QCtr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    QCtr

    +
    +

    Doxygen

    +
    +
    +class QCtr : public idol::Object<QCtrVersion, QCtr>
    +
    +

    Public Functions

    +
    +
    +QCtr(Env &t_env, TempQCtr &&t_temp_ctr, std::string t_name = "")
    +
    + +
    +
    +QCtr(Env &t_env, const TempQCtr &t_temp_ctr, std::string t_name = "")
    +
    + +
    +
    +QCtr(Env &t_env, CtrType t_type, std::string t_name = "")
    +
    + +
    +
    +unsigned int index(const Model &t_model) const
    +
    + +
    +
    +inline const std::string &name() const
    +

    Returns the name of the optimization object.

    +
    +
    Returns:
    +

    The name of the optimization object.

    +
    +
    +
    + +
    +
    +inline unsigned int id() const
    +

    Returns the id of the optimization object.

    +
    +
    Returns:
    +

    The id of the optimization object.

    +
    +
    +
    + +
    +
    +inline bool is_in(const Model &t_model) const
    +

    Returns true if the optimization object is part of the model t_model, false otherwise.

    +
    +
    Parameters:
    +

    t_model – The model.

    +
    +
    Returns:
    +

    True if the optimization object is part of the model t_model, false otherwise.

    +
    +
    +
    + +
    +
    +inline const ValueT &get(const Annotation<ValueT> &t_annotation) const
    +

    Returns the value of the given annotation t_annotation associated to the object.

    +

    If no value is found, the default value of the annotation is returned. If no default value was set, an exception is thrown.

    +
    +
    Template Parameters:
    +

    ValueT – The value type of the annotation.

    +
    +
    Parameters:
    +

    t_annotation – The annotation.

    +
    +
    Returns:
    +

    The value of the annotation.

    +
    +
    +
    + +
    +
    +inline void set(const Annotation<ValueT> &t_annotation, ArgsT&&... t_args) const
    +

    Sets the value of the given annotation t_annotation associated to the object.

    +
    +
    Template Parameters:
    +
      +
    • ValueT – The value type of the annotation.

    • +
    • ArgsT – The parameter pack types for constructing the value of the annotation.

    • +
    +
    +
    Parameters:
    +
      +
    • t_annotation – The annotation.

    • +
    • t_args – The parameter pack arguments used to construct “in place” the value of the annotation.

    • +
    +
    +
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +template<unsigned int N = 1, unsigned int I = 0>
    static inline Vector<Ctr, N - I> make_vector(Env &t_env, const Dim<N> &t_dim, CtrType t_type, const std::string &t_name = "")
    +
    + +
    +
    +

    Friends

    +
    +
    +friend class impl::Env
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/QuadExpr.html b/api/mixed-integer/modeling/QuadExpr.html new file mode 100644 index 000000000..1a8daecdc --- /dev/null +++ b/api/mixed-integer/modeling/QuadExpr.html @@ -0,0 +1,511 @@ + + + + + + + QuadExpr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    QuadExpr

    +
    +

    Doxygen

    +
    +
    +template<class KeyT = idol::Var, class ValueT = double>
    class QuadExpr : public idol::LinExpr<CommutativePair<idol::Var>, double>
    +
    +

    Public Types

    +
    +
    +using iterator = typename map_t::iterator
    +
    + +
    +
    +using const_iterator = typename map_t::const_iterator
    +
    + +
    +
    +

    Public Functions

    +
    +
    +QuadExpr() = default
    +
    + +
    +
    +inline QuadExpr(ValueT t_constant)
    +
    + +
    +
    +inline QuadExpr(const KeyT &t_key)
    +
    + +
    +
    +inline QuadExpr(LinExpr<KeyT, ValueT> t_expr)
    +
    + +
    +
    +inline QuadExpr(AffExpr<KeyT, ValueT> t_expr)
    +
    + +
    +
    +inline QuadExpr(const KeyT &t_key1, const KeyT &t_key2)
    +
    + +
    +
    +inline QuadExpr(const ValueT &t_factor, const KeyT &t_key1, const KeyT &t_key2)
    +
    + +
    +
    +inline QuadExpr(ValueT &&t_factor, const KeyT &t_key1, const KeyT &t_key2)
    +
    + +
    +
    +inline QuadExpr(const ValueT &t_factor, const KeyT &t_key)
    +
    + +
    +
    +inline QuadExpr(ValueT &&t_factor, const KeyT &t_key)
    +
    + +
    +
    +QuadExpr(const QuadExpr &t_src) = default
    +
    + +
    +
    +QuadExpr(QuadExpr&&) noexcept = default
    +
    + +
    +
    +QuadExpr &operator=(const QuadExpr &t_rhs) = default
    +
    + +
    +
    +QuadExpr &operator=(QuadExpr&&) noexcept = default
    +
    + +
    +
    +QuadExpr &operator+=(const QuadExpr &t_rhs)
    +
    + +
    +
    +QuadExpr &operator-=(const QuadExpr &t_rhs)
    +
    + +
    +
    +QuadExpr &operator*=(double t_rhs)
    +
    + +
    +
    +QuadExpr &operator/=(double t_rhs)
    +
    + +
    +
    +QuadExpr operator-() const
    +
    + +
    +
    +inline AffExpr<KeyT, ValueT> &affine()
    +
    + +
    +
    +inline const AffExpr<KeyT, ValueT> &affine() const
    +
    + +
    +
    +inline bool has_quadratic() const
    +
    + +
    +
    +inline bool empty_all() const
    +
    + +
    +
    +virtual bool is_zero(double t_tolerance) const override
    +
    + +
    +
    +void clear_all()
    +
    + +
    +
    +LinExpr &operator+=(const LinExpr<KeyT, ValueT> &t_rhs)
    +
    + +
    +
    +LinExpr &operator+=(const KeyT &t_rhs)
    +
    + +
    +
    +virtual SparseVector &operator+=(const SparseVector &t_vector)
    +
    + +
    +
    +LinExpr &operator-=(const LinExpr<KeyT, ValueT> &t_rhs)
    +
    + +
    +
    +LinExpr &operator-=(const KeyT &t_rhs)
    +
    + +
    +
    +virtual SparseVector &operator-=(const SparseVector &t_vector)
    +
    + +
    +
    +virtual SparseVector &operator*=(std::conditional_t<std::is_arithmetic_v<ValueT>, ValueT, double> t_scalar)
    +
    + +
    +
    +virtual SparseVector &operator/=(std::conditional_t<std::is_arithmetic_v<ValueT>, ValueT, double> t_scalar)
    +
    + +
    +
    +inline unsigned int size() const
    +
    + +
    +
    +inline bool empty() const
    +
    + +
    +
    +inline bool has_index(const IndexT &t_index) const
    +
    + +
    +
    +const ValueT &get(const IndexT &t_index1) const
    +
    + +
    +
    +void set(const IndexT &t_index, const ValueT &t_value)
    +
    + +
    +
    +inline void remove(const IndexT &t_index)
    +
    + +
    +
    +inline void clear()
    +
    + +
    +
    +inline void reserve(unsigned int t_capacity)
    +
    + +
    +
    +inline iterator begin()
    +
    + +
    +
    +inline const_iterator begin() const
    +
    + +
    +
    +inline iterator end()
    +
    + +
    +
    +inline const_iterator end() const
    +
    + +
    +
    +inline const_iterator cbegin() const
    +
    + +
    +
    +inline const_iterator cend() const
    +
    + +
    +
    +SparseVector &merge_without_conflict(const SparseVector &t_vec)
    +
    + +
    +
    +

    Public Static Attributes

    +
    +
    +static LinExpr<KeyT, ValueT> Zero = {}
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/TempCtr.html b/api/mixed-integer/modeling/TempCtr.html new file mode 100644 index 000000000..8c2ddd720 --- /dev/null +++ b/api/mixed-integer/modeling/TempCtr.html @@ -0,0 +1,380 @@ + + + + + + + TempCtr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    TempCtr

    +
    +

    Doxygen

    +
    +
    +class TempCtr
    +

    Temporary constraint class.

    +

    This class represents a constraint which has not been built yet by a Model. It contains all the arguments needed to create a real constraint as instantiated by the Ctr class. It is made of a row (see Row) and a type (see CtrType.rst.rst).

    +

    Typically, one creates a TempCtr by using the overloaded operators <=, >= and == between variable expressions (i.e., AffExpr) and constant terms (i.e., Constant).

    +

    Example 1:

    ...
    +model.add_ctr(x + y <= 1.);
    +
    +
    + Example 2 (equivalent to Example 1):
    ...
    +model.add_ctr(TempCtr(Row(x + y, 1.), LessOrEqual));
    +
    +
    +

    +
    +

    Public Functions

    +
    +
    +TempCtr() = default
    +

    Default constructor.

    +

    Creates an empty temporary constraint. The default type is LessOrEqual.

    +
    + +
    +
    +inline TempCtr(LinExpr<Var> &&t_lhs, CtrType t_type, double t_rhs)
    +

    Constructor.

    +

    Creates a new temporary constraint.

    +
    +
    Parameters:
    +
      +
    • t_row – The desired row.

    • +
    • t_type – The desired constraint type.

    • +
    +
    +
    +
    + +
    +
    +TempCtr(const TempCtr &t_src) = default
    +

    Copy constructor.

    +
    +
    Parameters:
    +

    t_src – The object to copy.

    +
    +
    +
    + +
    +
    +TempCtr(TempCtr &&t_src) noexcept = default
    +

    Move constructor.

    +
    +
    Parameters:
    +

    t_src – The object to move.

    +
    +
    +
    + +
    +
    +TempCtr &operator=(const TempCtr &t_src) = default
    +

    Copy-assignment operator.

    +
    +
    Parameters:
    +

    t_src – The object to copy.

    +
    +
    +
    + +
    +
    +TempCtr &operator=(TempCtr &&t_src) noexcept = default
    +

    Move-assignment operator.

    +
    +
    Parameters:
    +

    t_src – The object to move.

    +
    +
    +
    + +
    +
    +inline LinExpr<Var> &lhs()
    +
    + +
    +
    +inline const LinExpr<Var> &lhs() const
    +
    + +
    +
    +inline void set_lhs(LinExpr<Var> &&t_lhs)
    +
    + +
    +
    +inline CtrType type() const
    +

    Returns the temporary constraint type.

    +
    +
    Returns:
    +

    The temporary constraint type.

    +
    +
    +
    + +
    +
    +inline double rhs() const
    +
    + +
    +
    +inline double &rhs()
    +
    + +
    +
    +inline void set_rhs(double t_rhs)
    +
    + +
    +
    +inline void set_type(CtrType t_type)
    +

    Sets the type of the temporary constraint.

    +
    +
    Parameters:
    +

    t_type – the desired type.

    +
    +
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/TempQCtr.html b/api/mixed-integer/modeling/TempQCtr.html new file mode 100644 index 000000000..f4b688122 --- /dev/null +++ b/api/mixed-integer/modeling/TempQCtr.html @@ -0,0 +1,305 @@ + + + + + + + TempQCtr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    TempQCtr

    +
    +

    Doxygen

    +
    +
    +class TempQCtr
    +
    +

    Public Functions

    +
    +
    +TempQCtr() = default
    +
    + +
    +
    +inline TempQCtr(QuadExpr<Var> &&t_expr, CtrType t_type)
    +
    + +
    +
    +TempQCtr(const TempQCtr &t_src) = default
    +
    + +
    +
    +TempQCtr(TempQCtr&&) noexcept = default
    +
    + +
    +
    +TempQCtr &operator=(const TempQCtr &t_rhs) = default
    +
    + +
    +
    +TempQCtr &operator=(TempQCtr&&) noexcept = default
    +
    + +
    +
    +inline QuadExpr<Var> &expr()
    +
    + +
    +
    +inline const QuadExpr<Var> &expr() const
    +
    + +
    +
    +inline CtrType type() const
    +
    + +
    +
    +inline void set_expr(QuadExpr<Var> &&t_expr)
    +
    + +
    +
    +inline void set_type(CtrType t_type)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/TempVar.html b/api/mixed-integer/modeling/TempVar.html new file mode 100644 index 000000000..92080f32d --- /dev/null +++ b/api/mixed-integer/modeling/TempVar.html @@ -0,0 +1,424 @@ + + + + + + + TempVar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    TempVar

    +
    +

    Doxygen

    +
    +
    +class TempVar
    +

    Temporary variable class.

    +

    This class represents a variable which has not been built yet by a Model. It contains all the arguments needed to create a real variable as instantiated by the Var class. It is made of a lower and an upper bound, a type (see VarType), and a column (see Column).

    +

    Example 1:

    model.add_var(0., 1., Binary, 2.);
    +// is the same as
    +model.add_var(TempVar(0., 1., Binary, 2.));
    +
    +
    +

    +
    +

    Public Functions

    +
    +
    +TempVar() = default
    +

    Default constructor.

    +

    Creates a new temporary variable. The default lower and upper bounds are 0 and Inf and the type is Continuous.

    +
    + +
    +
    +inline TempVar(double t_lb, double t_ub, VarType t_type, double t_obj, LinExpr<Ctr> &&t_column)
    +

    Constructor.

    +

    Creates a new temporary variable.

    +
    +
    Parameters:
    +
      +
    • t_lb – The desired lower bound.

    • +
    • t_ub – The desired upper bound.

    • +
    • t_type – The desired variable type.

    • +
    • t_column – The desired column.

    • +
    +
    +
    +
    + +
    +
    +TempVar(TempVar &&t_src) = default
    +

    Copy constructor.

    +
    +
    Parameters:
    +

    t_src – The object to copy.

    +
    +
    +
    + +
    +
    +inline TempVar(const TempVar &t_src)
    +

    Move constructor.

    +
    +
    Parameters:
    +

    t_src – The object to move.

    +
    +
    +
    + +
    +
    +TempVar &operator=(TempVar &&t_src) = default
    +

    Copy-assignment operator.

    +
    +
    Parameters:
    +

    t_src – The object to copy.

    +
    +
    +
    + +
    +
    +TempVar &operator=(const TempVar &t_src) = default
    +

    Move-assignment operator.

    +
    +
    Parameters:
    +

    t_src – The object to move.

    +
    +
    +
    + +
    +
    +inline const LinExpr<Ctr> &column() const
    +

    Returns the column of the temporary variable (see Column).

    +
    +
    Returns:
    +

    The column of the temporary variable.

    +
    +
    +
    + +
    +
    +inline LinExpr<Ctr> &column()
    +

    Returns the column of the temporary variable (see Column).

    +
    +
    Returns:
    +

    The column of the temporary variable.

    +
    +
    +
    + +
    +
    +inline double lb() const
    +

    Returns the lower bound of the temporary variable.

    +
    +
    Returns:
    +

    The lower bound of the temporary variable.

    +
    +
    +
    + +
    +
    +inline void set_lb(double t_lb)
    +

    Sets the lower bound of the temporary variable.

    +
    +
    Parameters:
    +

    t_lb – The desired lower bound of the temporary variable.

    +
    +
    +
    + +
    +
    +inline double ub() const
    +

    Returns the upper bound of the temporary variable.

    +
    +
    Returns:
    +

    The upper bound of the temporary variable.

    +
    +
    +
    + +
    +
    +inline void set_ub(double t_ub)
    +

    Sets the upper bound of the temporary variable.

    +
    +
    Parameters:
    +

    t_ub – The desired upper bound of the temporary variable.

    +
    +
    +
    + +
    +
    +inline VarType type() const
    +

    Returns the type of the temporary variable.

    +
    +
    Returns:
    +

    The type of the temporary variable.

    +
    +
    +
    + +
    +
    +inline void set_type(VarType t_type)
    +

    Sets the type of the temporary variable.

    +
    +
    Parameters:
    +

    t_type – The desired type of the temporary variable.

    +
    +
    +
    + +
    +
    +inline double obj() const
    +
    + +
    +
    +inline void set_obj(double t_obj)
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/modeling/Var.html b/api/mixed-integer/modeling/Var.html new file mode 100644 index 000000000..73ec7b288 --- /dev/null +++ b/api/mixed-integer/modeling/Var.html @@ -0,0 +1,455 @@ + + + + + + + Var + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Var

    +
    +

    Doxygen

    +
    +
    +class Var : public idol::Object<VarVersion, Var>
    +
    +

    Public Functions

    +
    +
    +Var(Env &t_env, double t_lb, double t_ub, VarType t_type, double t_obj = 0., std::string t_name = "")
    +

    Constructor.

    +

    Creates a new variable in the optimization environment.

    +

    If no name is given, a unique name in the environment is given.

    +
    +
    Parameters:
    +
      +
    • t_env – The optimization environment.

    • +
    • t_lb – The lower bound (possibly -Inf) for the default version of the variable.

    • +
    • t_ub – The upper bound (possibly +Inf) for the default version of the variable.

    • +
    • t_type – The type for the default version of the variable.

    • +
    • t_name – The given name of the variable.

    • +
    +
    +
    +
    + +
    +
    +Var(Env &t_env, double t_lb, double t_ub, VarType t_type, double t_obj, LinExpr<Ctr, double> &&t_column, std::string t_name = "")
    +

    Constructor.

    +

    Creates a new variable in the optimization environment.

    +

    If no name is given, a unique name in the environment is given.

    +
    +
    Parameters:
    +
      +
    • t_env – The optimization environment.

    • +
    • t_lb – The lower bound (possibly -Inf) for the default version of the variable.

    • +
    • t_ub – The upper bound (possibly +Inf) for the default version of the variable.

    • +
    • t_type – The type for the default version of the variable.

    • +
    • t_column – The column for the default version of the variable.

    • +
    • t_name – The given name of the variable.

    • +
    +
    +
    +
    + +
    +
    +Var(Env &t_env, double t_lb, double t_ub, VarType t_type, double t_obj, const LinExpr<Ctr, double> &t_column, std::string t_name = "")
    +

    Constructor.

    +

    Creates a new variable in the optimization environment.

    +

    If no name is given, a unique name in the environment is given.

    +
    +
    Parameters:
    +
      +
    • t_env – The optimization environment.

    • +
    • t_lb – The lower bound (possibly -Inf) for the default version of the variable.

    • +
    • t_ub – The upper bound (possibly +Inf) for the default version of the variable.

    • +
    • t_type – The type for the default version of the variable.

    • +
    • t_column – The column for the default version of the variable.

    • +
    • t_name – The given name of the variable.

    • +
    +
    +
    +
    + +
    +
    +Var(const Var&) = default
    +
    + +
    +
    +Var(Var&&) = default
    +
    + +
    +
    +Var &operator=(const Var&) = default
    +
    + +
    +
    +Var &operator=(Var&&) = default
    +
    + +
    +
    +unsigned int index(const Model &t_model) const
    +
    + +
    +
    +inline const std::string &name() const
    +

    Returns the name of the optimization object.

    +
    +
    Returns:
    +

    The name of the optimization object.

    +
    +
    +
    + +
    +
    +inline unsigned int id() const
    +

    Returns the id of the optimization object.

    +
    +
    Returns:
    +

    The id of the optimization object.

    +
    +
    +
    + +
    +
    +inline bool is_in(const Model &t_model) const
    +

    Returns true if the optimization object is part of the model t_model, false otherwise.

    +
    +
    Parameters:
    +

    t_model – The model.

    +
    +
    Returns:
    +

    True if the optimization object is part of the model t_model, false otherwise.

    +
    +
    +
    + +
    +
    +inline const ValueT &get(const Annotation<ValueT> &t_annotation) const
    +

    Returns the value of the given annotation t_annotation associated to the object.

    +

    If no value is found, the default value of the annotation is returned. If no default value was set, an exception is thrown.

    +
    +
    Template Parameters:
    +

    ValueT – The value type of the annotation.

    +
    +
    Parameters:
    +

    t_annotation – The annotation.

    +
    +
    Returns:
    +

    The value of the annotation.

    +
    +
    +
    + +
    +
    +inline void set(const Annotation<ValueT> &t_annotation, ArgsT&&... t_args) const
    +

    Sets the value of the given annotation t_annotation associated to the object.

    +
    +
    Template Parameters:
    +
      +
    • ValueT – The value type of the annotation.

    • +
    • ArgsT – The parameter pack types for constructing the value of the annotation.

    • +
    +
    +
    Parameters:
    +
      +
    • t_annotation – The annotation.

    • +
    • t_args – The parameter pack arguments used to construct “in place” the value of the annotation.

    • +
    +
    +
    +
    + +
    +
    +

    Public Static Functions

    +
    +
    +template<unsigned int N = 1, unsigned int I = 0>
    static inline Vector<Var, N - I> make_vector(Env &t_env, const Dim<N> &t_dim, double t_lb, double t_ub, VarType t_type, double t_obj, const std::string &t_name = "")
    +

    Creates a (nested) vector of variables.

    +

    Example:

    +

    Env env;
    +
    +auto x = Var::make_vector(env, Dim<2>(m, n), 0., 1., Continuous, "x");
    +
    +std::cout << x[1][4].name() << std::endl; // "x_1_4"
    +
    +
    +

    +
    +
    Template Parameters:
    +
      +
    • N – The dimension of the (nested) vector.

    • +
    • I – Used for recursion.

    • +
    +
    +
    Parameters:
    +
      +
    • t_env – The environment to store the variables.

    • +
    • t_dim – The number of elements in each dimension.

    • +
    • t_lb – The lower bound.

    • +
    • t_ub – The upper bound.

    • +
    • t_type – The type of the variables.

    • +
    • t_name – The given name of the variables.

    • +
    +
    +
    Returns:
    +

    A (nested) vector of variables.

    +
    +
    +
    + +
    +
    +

    Friends

    +
    +
    +friend class impl::Env
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/padm/Optimizers_PADM.html b/api/mixed-integer/padm/Optimizers_PADM.html new file mode 100644 index 000000000..6839ca1d0 --- /dev/null +++ b/api/mixed-integer/padm/Optimizers_PADM.html @@ -0,0 +1,528 @@ + + + + + + + Optimizers::PADM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Optimizers::PADM

    +
    +

    Doxygen

    +
    +
    +class PADM : public idol::Algorithm
    +
    +

    Public Functions

    +
    +
    +PADM(const Model &t_model, ADM::Formulation t_formulation, std::vector<idol::ADM::SubProblem> &&t_sub_problem_specs, PenaltyUpdate *t_penalty_update, SolutionStatus t_feasible_solution_status, Plots::Manager *t_plot_manager)
    +
    + +
    +
    +inline virtual std::string name() const override
    +
    + +
    +
    +virtual double get_var_primal(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_var_reduced_cost(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_var_ray(const Var &t_var) const override
    +
    + +
    +
    +virtual double get_ctr_dual(const Ctr &t_ctr) const override
    +
    + +
    +
    +virtual double get_ctr_farkas(const Ctr &t_ctr) const override
    +
    + +
    +
    +virtual unsigned int get_n_solutions() const override
    +
    + +
    +
    +virtual unsigned int get_solution_index() const override
    +
    + +
    +
    +unsigned int get_outer_loop_iteration_count() const
    +
    + +
    +
    +unsigned int get_inner_loop_iteration_count() const
    +
    + +
    +
    +ADM::SubProblem &sub_problem_spec(unsigned int t_sub_problem_id)
    +
    + +
    +
    +virtual SolutionStatus get_status() const override
    +
    + +
    +
    +virtual SolutionReason get_reason() const override
    +
    + +
    +
    +virtual double get_best_obj() const override
    +
    + +
    +
    +virtual double get_best_bound() const override
    +
    + +
    +
    +virtual double get_relative_gap() const override
    +
    + +
    +
    +virtual double get_absolute_gap() const override
    +
    + +
    +
    +inline virtual const ::idol::Model &parent() const
    +
    + +
    +
    +inline bool get_param_logs() const
    +
    + +
    +
    +inline virtual void set_param_logs(bool t_value)
    +
    + +
    +
    +inline double get_param_time_limit() const
    +
    + +
    +
    +inline virtual void set_param_time_limit(double t_time_limit)
    +
    + +
    +
    +inline unsigned int get_param_thread_limit() const
    +
    + +
    +
    +inline virtual void set_param_threads(unsigned int t_threads)
    +
    + +
    +
    +double get_param_best_obj_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_obj_stop(double t_best_obj_stop)
    +
    + +
    +
    +double get_param_best_bound_stop() const
    +
    + +
    +
    +inline virtual void set_param_best_bound_stop(double t_best_bound_stop)
    +
    + +
    +
    +inline double get_tol_mip_relative_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_relative_gap(double t_tol_mip_relative_gap)
    +
    + +
    +
    +inline double get_tol_mip_absolute_gap() const
    +
    + +
    +
    +inline virtual void set_tol_mip_absolute_gap(double t_mip_tol_absolute_gap)
    +
    + +
    +
    +inline double get_tol_feasibility() const
    +
    + +
    +
    +inline virtual void set_tol_feasibility(double t_tol_feasibility)
    +
    + +
    +
    +inline double get_tol_optimality() const
    +
    + +
    +
    +inline virtual void set_tol_optimality(double t_tol_optimality)
    +
    + +
    +
    +inline double get_tol_integer() const
    +
    + +
    +
    +inline virtual void set_tol_integer(double t_tol_integer)
    +
    + +
    +
    +inline unsigned int get_param_iteration_limit() const
    +
    + +
    +
    +inline void set_param_iteration_limit(unsigned int t_iteration_limit)
    +
    + +
    +
    +inline bool get_param_presolve() const
    +
    + +
    +
    +inline virtual void set_param_presolve(bool t_value)
    +
    + +
    +
    +inline bool get_param_infeasible_or_unbounded_info() const
    +
    + +
    +
    +inline virtual void set_param_infeasible_or_unbounded_info(bool t_value)
    +
    + +
    +
    +inline const Timer &time() const
    +
    + +
    +
    +double get_remaining_time() const
    +
    + +
    +
    +inline bool is_terminated() const
    +
    + +
    +
    +virtual void terminate()
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    +
    +class IterationPlot
    +
    +

    Public Functions

    +
    +
    +explicit IterationPlot(Plots::Manager &t_manager)
    +
    + +
    +
    +void update(unsigned int t_outer_loop_iteration, unsigned int t_inner_loop_iteration, const std::vector<double> &t_objective_values, const std::vector<double> &t_infeasibilities)
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/mixed-integer/padm/PADM.html b/api/mixed-integer/padm/PADM.html new file mode 100644 index 000000000..9f3f2c57b --- /dev/null +++ b/api/mixed-integer/padm/PADM.html @@ -0,0 +1,600 @@ + + + + + + + PADM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    PADM

    +
    +

    Doxygen

    +
    +
    +class PADM : public idol::OptimizerFactoryWithDefaultParameters<PADM>
    +
    +

    Public Functions

    +
    +
    +explicit PADM(Annotation<unsigned int> t_decomposition)
    +
    + +
    +
    +PADM(Annotation<unsigned int> t_decomposition, Annotation<double> t_penalized_constraints)
    +
    + +
    +
    +PADM(const PADM &t_src)
    +
    + +
    +
    +PADM(PADM&&) = default
    +
    + +
    +
    +PADM &operator=(const PADM&) = delete
    +
    + +
    +
    +PADM &operator=(PADM&&) = default
    +
    + +
    +
    +PADM &with_default_sub_problem_spec(ADM::SubProblem t_sub_problem)
    +
    + +
    +
    +PADM &with_sub_problem_spec(unsigned int t_id, ADM::SubProblem t_sub_problem)
    +
    + +
    +
    +PADM &with_rescaling_threshold(double t_threshold)
    +
    + +
    +
    +PADM &with_penalty_update(const PenaltyUpdate &t_penalty_update)
    +
    + +
    +
    +PADM &with_feasible_solution_status(SolutionStatus t_status)
    +
    + +
    +
    +PADM &with_iteration_plot(Plots::Manager &t_manager)
    +
    + +
    +
    +virtual Optimizer *operator()(const Model &t_model) const override
    +

    Creates and returns a new optimizer to solve the model given as parameter.

    +
    +
    Parameters:
    +

    t_model – The model which the optimizer will solve

    +
    +
    Returns:
    +

    A new optimizer for the model

    +
    +
    +
    + +
    +
    +virtual OptimizerFactory *clone() const override
    +

    Creates and return a copy of the optimizer factory. This is used for polymorphism.

    +
    +
    Returns:
    +

    A copied object of the current object (i.e., *this)

    +
    +
    +
    + +
    +
    +PADM &with_logs(bool t_value)
    +

    Sets the log_master level and color for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_logs(true);
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_log_level – the log_master level

    • +
    • t_log_color – the output color

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_time_limit(double t_time_limit)
    +

    Sets the time limit for the optimizer

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_time_limit(3600);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_time_limit – the time limit (in seconds)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_thread_limit(unsigned int t_max_n_threads)
    +

    Sets the maximum number of threads which the optimizer can use

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_thread_limit(5);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_max_n_threads – the number of threads which can be used

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_iteration_limit(unsigned int t_iteration_count_limit)
    +

    Sets the maximum number of iterations which the optimizer go through

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_iteration_limit(200);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_iteration_count_limit – the maximum number of iterations

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_best_bound_stop(double t_best_bound_stop)
    +

    Sets a threshold on the best bound for stopping the optimizer. When the optimizer have found a best bound which is greater than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_obj = 0.;
    +auto algorithm = GLPK()
    +                     .with_best_bound_stop(my_known_best_obj);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_best_bound_stop – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_best_obj_stop(double t_user_best_obj)
    +

    Sets a threshold on the best objective value for stopping the optimizer. When the optimizer have found a best objective value which is less than this threshold, the optimizer stops.

    +

    Example:

    const double my_known_best_bound = 0;
    +auto algorithm = GLPK()
    +                     .with_best_obj_stop(my_known_best_bound);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_user_best_obj – the threshold

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_relative_gap_tolerance(double t_relative_gap_tolerance)
    +

    Sets the relative gap tolerance for the optimizer. When the optimizer proves that the relative optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_relative_gap_tolerance(.05); // sets a gap tolerance of 5%
    +
    +
    +

    +
    +
    Parameters:
    +

    t_relative_gap_tolerance – the relative gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_absolute_gap_tolerance(double t_absolute_gap_tolerance)
    +

    Sets the absolute gap tolerance for the optimizer. When the optimizer proves that the absolute optimality gap is less than this threshold, the optimizer stops.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_absolute_gap_tolerance(1e-4);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_absolute_gap_tolerance – the absolute gap tolerance

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_presolve(bool t_value)
    +

    Sets the get_param_presolve activation for the optimizer.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_presolve(false); // turns off get_param_presolve phase
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level for the optimizer’s get_param_presolve (0 for disabling, 1 for enabling)

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &with_infeasible_or_unbounded_info(bool t_value)
    +

    Sets the behaviour of the optimizer when a model is shown to be infeasible or unbounded. When set to true, the optimizer is forced to prove feasibility or unboundedness by providing a certificate.

    +

    Example:

    auto algorithm = GLPK()
    +                     .with_infeasible_or_unbounded_info(true);
    +
    +
    +

    +
    +
    Parameters:
    +

    t_value – the activation level

    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &conditional(bool t_conditional_value, const std::function<void(PADM&)> &t_if)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve, [](auto& x){ x.with_presolve(true); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, nothing happens.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +PADM &conditional(bool t_conditional_value, const std::function<void(PADM&)> &t_if, const std::function<void(PADM&)> &t_else)
    +

    Executes the lambda function given as second parameter if and only if its first argument is true. This function can be used to build different optimizer factories depending on some external variable.

    +

    Example:

    for (const bool use_presolve : {true, false}) {
    +     auto algorithm = GLPK()
    +                         .conditional(use_presolve,
    +                                         [](auto& x){ x.with_presolve(true); },
    +                                         [](auto& x){ x.with_presolve(false); })
    +      model.use(algorithm);
    +      model.optimize();
    +}
    +
    +
    +

    +
    +
    Parameters:
    +
      +
    • t_conditional_value – if true, the t_if lambda function is executed, if false, the t_else lambda function is.

    • +
    • t_if – lambda function to execute in case t_conditional_value is true

    • +
    • t_else – lambda function to execute in case t_conditional_value is false

    • +
    +
    +
    Returns:
    +

    the optimizer factory itself

    +
    +
    +
    + +
    +
    +template<class T>
    inline T &as()
    +
    + +
    +
    +template<class T>
    inline const T &as() const
    +
    + +
    +
    +template<class T>
    inline bool is() const
    +
    + +
    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/robust/index.html b/api/robust/index.html new file mode 100644 index 000000000..295843768 --- /dev/null +++ b/api/robust/index.html @@ -0,0 +1,245 @@ + + + + + + + Robust Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Robust Optimization

    +
    +

    Modeling

    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/robust/modeling/Description.html b/api/robust/modeling/Description.html new file mode 100644 index 000000000..d82a65eda --- /dev/null +++ b/api/robust/modeling/Description.html @@ -0,0 +1,363 @@ + + + + + + + Robust::Description + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Robust::Description

    +
    +

    Doxygen

    +
    +
    +class Description
    +
    +

    Public Functions

    +
    +
    +inline explicit Description(const Model &t_uncertainty_set)
    +
    + +
    +
    +const Annotation<unsigned int> &stage_annotation() const
    +
    + +
    +
    +void set_stage(const Var &t_var, unsigned int t_stage)
    +
    + +
    +
    +unsigned int stage(const Var &t_var) const
    +
    + +
    +
    +unsigned int stage(const Ctr &t_var) const
    +
    + +
    +
    +inline const Model &uncertainty_set() const
    +
    + +
    +
    +inline auto uncertain_mat_coeffs() const
    +
    + +
    +
    +inline auto uncertain_rhs() const
    +
    + +
    +
    +inline auto uncertain_obj() const
    +
    + +
    +
    +const LinExpr<Var> &uncertain_mat_coeff(const Ctr &t_ctr, const Var &t_var) const
    +
    + +
    +
    +const LinExpr<Var, LinExpr<Var>> &uncertain_mat_coeffs(const Ctr &t_ctr) const
    +
    + +
    +
    +const LinExpr<Var> &uncertain_rhs(const Ctr &t_ctr) const
    +
    + +
    +
    +const LinExpr<Var> &uncertain_obj(const Var &t_var) const
    +
    + +
    +
    +inline void set_uncertain_mat_coeff(const Ctr &t_ctr, const Var &t_var, const LinExpr<Var> &t_coeff)
    +
    + +
    +
    +inline void set_uncertain_rhs(const Ctr &t_ctr, const LinExpr<Var> &t_rhs)
    +
    + +
    +
    +inline void set_uncertain_obj(const Var &t_var, const LinExpr<Var> &t_obj)
    +
    + +
    +
    +inline void set_uncertain_obj(LinExpr<Var, LinExpr<Var>> t_obj)
    +
    + +
    +
    +inline void set_uncertain_rhs(LinExpr<Ctr, LinExpr<Var>> t_rhs)
    +
    + +
    +
    +
    +class View
    +
    +

    Public Functions

    +
    +
    +View(const Model &t_deterministic_model, const Description &t_description)
    +
    + +
    +
    +inline const Description &description() const
    +
    + +
    +
    +inline const Model &deterministic_model() const
    +
    + +
    +
    + +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/api/types/index.html b/api/types/index.html new file mode 100644 index 000000000..c4fab616d --- /dev/null +++ b/api/types/index.html @@ -0,0 +1,228 @@ + + + + + + + Type List + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Type List

    +
    +

    Mixed-Integer Programming

    + +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..6a41033a0 --- /dev/null +++ b/api/types/universal-callbacks/CallbackEvent.html @@ -0,0 +1,248 @@ + + + + + + + Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Events

    +
    +
    +enum idol::CallbackEvent
    +

    CallbackEvent is an enumerated type used to indicate events during a branch-and-bound tree execution.

    +

    It is typically used inside of a Callback to influence or modify the behaviour of the algorithm at execution time.

    +

    Values:

    +
    +
    +enumerator NodeLoaded
    +

    Occurs when a node is about to be solved

    +
    + +
    +
    +enumerator IncumbentSolution
    +

    Occurs when an incumbent solution has been found

    +
    + +
    +
    +enumerator InvalidSolution
    +

    Occurs when a solution of the relaxation is not valid (e.g., not integer)

    +
    + +
    +
    +enumerator PrunedSolution
    +
    + +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..4580c9a6d --- /dev/null +++ b/api/types/universal-callbacks/index.html @@ -0,0 +1,222 @@ + + + + + + + Universal Callbacks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Universal Callbacks

    +
    + +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/benchmark/index.html b/benchmark/index.html new file mode 100644 index 000000000..ad1b1d9bd --- /dev/null +++ b/benchmark/index.html @@ -0,0 +1,249 @@ + + + + + + + Benchmark + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Benchmark

    +
    +

    Warning

    +

    This page is under construction.

    +
    +
    +

    Branch-and-Price for the Generalized Assignment Problem

    +../_images/ecdf-gap.png +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..fe62fac26 --- /dev/null +++ b/developer_guide/build-the-doc.html @@ -0,0 +1,282 @@ + + + + + + + Build the Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Build the Documentation

    +

    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
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/developer_guide/index.html b/developer_guide/index.html new file mode 100644 index 000000000..5dac46e5b --- /dev/null +++ b/developer_guide/index.html @@ -0,0 +1,275 @@ + + + + + + + Developers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Developers

    +
    +

    Unit Tests and Integration

    +

    idol is tested using Catch2. Currently, the level of testing is not sufficient, but we are working on it.

    +

    Here is a grid plot of the code coverage:

    +https://codecov.io/gh/hlefebvr/idol/graphs/tree.svg?token=BWMH5522QP +

    Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively. (see codecov)

    +

    For more information on how to run the tests, please refer to the Unit and Integration Tests page.

    +
    +
    +

    Building the Documentation

    +

    The documentation is built using doxygen and a bunch of other tools. For more information, please refer to the Build the Documentation page.

    +
    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/developer_guide/tests.html b/developer_guide/tests.html new file mode 100644 index 000000000..9d2937218 --- /dev/null +++ b/developer_guide/tests.html @@ -0,0 +1,303 @@ + + + + + + + Unit and Integration Tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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)

    +
    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.

    +
    +

    Example

    +

    The following will tell CMake to create targets for tests.

    +
    cmake -DBUILD_TESTS=YES ..
    +
    +
    +

    For instance, we can now build all the existing tests

    +
    make tests
    +
    +
    +

    and run them.

    +
    ./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.

    +
    +

    Example

    +

    The following command will tell CMake to generate targets for tests with code coverage options.

    +
    cmake -DBUILD_TESTS=YES -DWITH_CODE_COVERAGE=YES ..
    +
    +
    +

    Then, you should build and run the tests.

    +
    make tests && ./tests/tests
    +
    +
    +

    Once you are there, you may generate a report to a file called coverage.info by using gcov.

    +
    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.

    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/examples/bilevel-kkt.html b/examples/bilevel-kkt.html new file mode 100644 index 000000000..64c711a05 --- /dev/null +++ b/examples/bilevel-kkt.html @@ -0,0 +1,342 @@ + + + + + + + Solving an optimistic LP-LP bilevel problem with KKT reformulation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving an optimistic LP-LP bilevel problem with KKT reformulation

    +
    +

    Problem Definition

    +

    This example is taken from [8] and is an LP-LP bilevel problem.

    +

    The problem is formulated as follows:

    +
    +\[\begin{split}\begin{align} + \min_{x, y} \quad & x + 6 y \\ + \text{s.t.} \quad & -x + 5y \le 12.5, \\ + & x \ge 0, \\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \quad & -y \\ + \text{s.t.} \quad & 2 x - y \ge 0, \\ + & -x - y \ge -6, \\ + & -x + 6 y \ge -3, \\ + & x + 3 y \ge 3. + \end{array} +\end{align}\end{split}\]
    +

    In this example, we will reformulate the bilevel problem as a single-level problem using the KKT conditions. +The resulting problem will be solved by Gurobi as an NLP. Note that it is also possible to provide valid big-Ms to +reformulate this problem as an MILP. Check out our tutorials to learn more.

    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 30.08.24.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/bilevel/modeling/Description.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Gurobi/Gurobi.h"
    +#include "idol/bilevel/modeling/read_from_file.h"
    +#include "idol/mixed-integer/modeling/models/KKT.h"
    +#include "idol/mixed-integer/optimizers/wrappers/GLPK/GLPK.h"
    +#include "idol/mixed-integer/modeling/models/KKT.h"
    +#include "idol/bilevel/optimizers/KKT/KKT.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    /*
    +        This example is taken from Kleinert, T. (2021). “Algorithms for Mixed-Integer Bilevel Problems with Convex Followers.” PhD thesis.
    +        min x + 6 y
    +        s.t.
    +
    +        -x + 5 y <= 12.5,
    +
    +        y in argmin { -y :
    +            2 x - y >= 0,
    +            -x - y >= -6,
    +            -x + 6 y >= -3,
    +            x + 3 y >= 3.
    +        }
    +
    +        x >= 0.
    +
    +     */
    +
    +    Env env;
    +
    +    // Define High Point Relaxation
    +    Model high_point_relaxation(env);
    +
    +    auto x = high_point_relaxation.add_var(0, Inf, Continuous, 0., "x");
    +    auto y = high_point_relaxation.add_var(-Inf, Inf, Continuous, 0., "y");
    +
    +    high_point_relaxation.set_obj_expr(x + 6 * y);
    +    auto follower_c1 = high_point_relaxation.add_ctr(2 * x - y >= 0, "f1");
    +    auto follower_c2 = high_point_relaxation.add_ctr(-x - y >= -6, "f2");
    +    auto follower_c3 = high_point_relaxation.add_ctr(-x + 6 * y >= -3, "f3");
    +    auto follower_c4 = high_point_relaxation.add_ctr(x + 3 * y >= 3, "f4");
    +    high_point_relaxation.add_ctr(-x + 5 * y <= 12.5);
    +
    +    // Prepare bilevel description
    +    Bilevel::Description description(env);
    +    description.set_lower_level_obj(-y);
    +    description.make_lower_level(y);
    +    description.make_lower_level(follower_c1);
    +    description.make_lower_level(follower_c2);
    +    description.make_lower_level(follower_c3);
    +    description.make_lower_level(follower_c4);
    +    
    +    auto single_level = Bilevel::KKT::make_model(high_point_relaxation, description);
    +    single_level.use(Gurobi());
    +    single_level.optimize();
    +
    +    /**
    +     * Alternatively, you could also do
    +     *  high_point_relaxation.use(Bilevel::KKT().with_single_level_optimizer(Gurobi()));
    +     *  high_point_relaxation.optimize();
    +     * Or even,
    +     *  high_point_relaxation.use(Bilevel::KKT() + Gurobi());
    +     */
    +
    +    single_level.write("kkt.lp");
    +
    +    std::cout << save_primal(single_level) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/examples/bilevel-mibs.html b/examples/bilevel-mibs.html new file mode 100644 index 000000000..cbfa165e4 --- /dev/null +++ b/examples/bilevel-mibs.html @@ -0,0 +1,327 @@ + + + + + + + Solving an optimistic MILP-MILP bilevel problem with coin-or/MibS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving an optimistic MILP-MILP bilevel problem with coin-or/MibS

    +
    +

    Problem Definition

    +

    This example is taken from [10] 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:

    +
    +\[\begin{split}\begin{align} + \min_{x, y} \quad & -x + -10 y \\ + \text{s.t.} \quad & x \in \mathbb Z_{\ge 0 },\\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \quad & y \\ + \text{s.t.} \quad & -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_{\ge 0}. + \end{array} +\end{align}\end{split}\]
    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 07.02.24.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/bilevel/optimizers/wrappers/MibS/MibS.h"
    +#include "idol/bilevel/modeling/Description.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    /*
    +     This example is taken from "The Mixed Integer Linear Bilevel Programming Problem" (Moore and Bard, 1990).
    +
    +        min -1 x + -10 y
    +        s.t.
    +
    +        y in argmin { y :
    +            -25 x + 20 y <= 30,
    +            1 x + 2 y <= 10,
    +            2 x + -1 y <= 15,
    +            2 x + 10 y >= 15,
    +            y >= 0 and integer.
    +        }
    +        x >= 0 and integer.
    +
    +     */
    +
    +    Env env;
    +
    +    // Define High Point Relaxation
    +    Model high_point_relaxation(env);
    +
    +    auto x = high_point_relaxation.add_var(0, Inf, Integer, -1, "x");
    +    auto y = high_point_relaxation.add_var(0, Inf, Integer, -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);
    +
    +    // Prepare bilevel description
    +    Bilevel::Description description(env);
    +    description.set_lower_level_obj(y);
    +    description.make_lower_level(y);
    +    description.make_lower_level(follower_c1);
    +    description.make_lower_level(follower_c2);
    +    description.make_lower_level(follower_c3);
    +    description.make_lower_level(follower_c4);
    +
    +    // Use coin-or/MibS as external solver
    +    high_point_relaxation.use(
    +                Bilevel::MibS(description)
    +                    .with_logs(true)
    +    );
    +
    +    // Optimize and print solution
    +    high_point_relaxation.optimize();
    +
    +    std::cout << save_primal(high_point_relaxation) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/examples/bilevel-pessimistic.html b/examples/bilevel-pessimistic.html new file mode 100644 index 000000000..441d6523c --- /dev/null +++ b/examples/bilevel-pessimistic.html @@ -0,0 +1,357 @@ + + + + + + + Solving a pessimistic bilevel problem using an optimistic reformulation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving a pessimistic bilevel problem using an optimistic reformulation

    +
    +

    Problem Definition

    +

    This example is taken from [16] (example 1) and is an LP-LP bilevel problem.

    +
    +\[\begin{split}\begin{align} + \min_{x} \quad & -8 x_1 - 6x_2 + \max_{ y\in S(x) } - 25 y_1 - 30 y_2 + 2 y_3 + 16 y_4 \\ + \text{s.t.} \quad & x_1 + x_2 \le 10, \\ + & x_1, x_2 \ge 0, +\end{align}\end{split}\]
    +

    where \(S(x)\) is defined as

    +
    +\[\begin{split}\begin{align} + S(x) := \underset{y}{\text{arg min}} \ & -10 y_1 - 10 y_2 - 10 y_3 - 10 y_4 \\ + \text{s.t.} \ & y_1 + y_2 + y_3 + y_4 \le 10 - x_1 - x_2, \\ + & -y_1 + y_4 \le 0.8 x_1 + 0.8 x_2, \\ + & y_2 + y_4 \le 4 x_2, \\ + & y_1, y_2, y_3, y_4 \ge 0. +\end{align}\end{split}\]
    +

    In this example, we will reformulate this pessimistic bilevel problem as an optimistic one. Then, we will solve it +using its KKT reformulation. The resulting problem will be solved by Gurobi as an MILP.

    +
    +

    Hint

    +

    Here, the optimistic reformulation reads as follows.

    +
    +\[\begin{split} \begin{align} + \min_{x, \bar y, y} \quad & -8 x_1 - 6x_2 - 25 y_1 - 30 y_2 + 2 y_3 + 16 y_4 \\ + \text{s.t.} \quad & x_1 + x_2 \le 10, \\ + & x_1, x_2 \ge 0, \\ + & \bar y_1 + \bar y_2 + \bar y_3 + \bar y_4 \le 10 - x_1 - x_2, \\ + & -\bar y_1 + \bar y_4 \le 0.8 x_1 + 0.8 x_2, \\ + & \bar y_2 + \bar y_4 \le 4 x_2, \\ + & \bar y_1, \bar y_2, \bar y_3, \bar y_4 \ge 0, \\ + & y \in \tilde S(x, \bar y), +\end{align}\end{split}\]
    +

    in which \(\tilde S(x)\) is defined as

    +
    +\[\begin{split}\begin{align} + S(x) := \underset{y}{\text{arg min}} \quad & 25 y_1 + 30 y_2 - 2 y_3 - 16 y_4 \\ + \text{s.t.} \quad & y_1 + y_2 + y_3 + y_4 \le 10 - x_1 - x_2, \\ + & -y_1 + y_4 \le 0.8 x_1 + 0.8 x_2, \\ + & y_2 + y_4 \le 4 x_2, \\ + & -10 y_1 - 10 y_2 - 10 y_3 - 10 y_4 \le -10 \bar y_1 - 10 \bar y_2 - 10 \bar y_3 - 10 \bar y_4, \\ + & y_1, y_2, y_3, y_4 \ge 0. +\end{align}\end{split}\]
    +
    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 17.12.24.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/bilevel/modeling/Description.h"
    +#include "idol/bilevel/optimizers/PessimisticAsOptimistic/PessimisticAsOptimistic.h"
    +#include "idol/bilevel/optimizers/KKT/KKT.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Gurobi/Gurobi.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    /*
    +     This example is taken from "A Practical Scheme to Compute Pessimistic Bilevel Optimization Problem" (Bo Zeng, 2025).
    +     See https://optimization-online.org/wp-content/uploads/2015/09/5090.pdf
    +
    +        min -8 x_1 - 6x_2 - 25 y_1 - 30 y_2 + 2 y_3 + 16 y_4
    +        s.t.
    +
    +        x_1 + x_2 <= 10,
    +        x_1, x_2 >= 0,
    +
    +        y in argmin { -10 y_1 - 10 y_2 - 10 y_3 - 10 y_4 :
    +            y_1 + y_2 + y_3 + y_4 <= 10 - x_1 - x_2,
    +            -y_1 + y_4 <= 0.8 x_1 + 0.8 x_2,
    +            y_2 + y_4 <= 4 x_2,
    +            y_1, y_2, y_3, y_4 >= 0
    +        }
    +
    +     */
    +
    +    Env env;
    +
    +    // Define High Point Relaxation
    +    Model high_point_relaxation(env);
    +
    +    auto x = high_point_relaxation.add_vars(Dim<1>(3), 0, Inf, Continuous, 0, "x");
    +    auto y = high_point_relaxation.add_vars(Dim<1>(4), 0, Inf, Continuous, 0, "y");
    +
    +    auto leader_c = high_point_relaxation.add_ctr(x[0] + x[1] <= 10, "leader_c");
    +    auto follower_c1 = high_point_relaxation.add_ctr(y[0] + y[1] + y[2] + y[3] <= 10 - x[0] - x[1], "follower_c1");
    +    auto follower_c2 = high_point_relaxation.add_ctr(-y[0] + y[3] <= 0.8 * x[0] + 0.8 * x[1], "follower_c2");
    +    auto follower_c3 = high_point_relaxation.add_ctr(y[1] + y[3] <= 4 * x[1], "follower_c3");
    +
    +    high_point_relaxation.set_obj_expr(-8 * x[0] - 6 * x[1] - 25 * y[0] - 30 * y[1] + 2 * y[2] + 16 * y[3]);
    +
    +    // Prepare bilevel description
    +    Bilevel::Description description(env);
    +    description.set_lower_level_obj(-10 * y[0] - 10 * y[1] - 10 * y[2] - 10 * y[3]);
    +    description.make_lower_level<1>(y);
    +    description.make_lower_level(follower_c1);
    +    description.make_lower_level(follower_c2);
    +    description.make_lower_level(follower_c3);
    +
    +    auto [opt_model, opt_description] = Bilevel::PessimisticAsOptimistic::make_model(high_point_relaxation, description);
    +    Annotation<double> big_M(env, "big_M", 1e4); // By default, we will set our big-M value to 1e4
    +
    +    opt_model.use(Bilevel::KKT(opt_description).with_big_M(big_M) + Gurobi());
    +
    +    // Optimize and print solution
    +    opt_model.optimize();
    +
    +    std::cout << save_primal(opt_model) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..2c9e59660 --- /dev/null +++ b/examples/facility-location-problem.html @@ -0,0 +1,387 @@ + + + + + + + Solving a facility location problem with a custom branch-and-bound + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving a facility location problem with a custom branch-and-bound

    +
    +

    Problem Definition

    +

    We consider the capacitated Facility Location Problem (FLP). +Given a set of potential facility locations \(V_1\) and a set of customers \(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 \(i\in V_1\) has an opening cost \(f_i\) and a maximum capacity \(q_i\). +Each customer \(j\in V_2\) has a demand \(d_j\). +The unitary cost for serving customer \(j\in V_2\) from facility \(i\in V_1\) is \(t_{ij}\).

    +

    We model the capacitated FLP with the MILP:

    +
    +\[\begin{split}\begin{align*} + \min_{x,y} \quad & \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.} \quad & \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*}\end{split}\]
    +
    +
    +

    Instance

    +

    We will use an instance stored in a file called facility.data.txt. This file reads

    +
    10	20
    +109.6	131.484
    +169.498	103.513
    +24.7946	41.8319
    +150.331	156.535
    +140.651	128.462
    +68.8231	66.0825
    +5.40097	33.6793
    +123.19	113.974
    +118.503	152.262
    +27.5682	125.587
    +36.1992
    +5.60365
    +10.0339
    +20.1965
    +17.4686
    +35.8237
    +14.8866
    +2.75196
    +36.7471
    +2.76135
    +12.0892
    +16.2641
    +11.3815
    +8.96618
    +32.1548
    +13.7501
    +0.631599
    +26.9407
    +36.4762
    +10.0098
    +0.674345	0.377274	0.60077	0.725902	0.347025	0.648906	0.635155	0.607522	0.333549	0.300607	0.416598	0.628605	0.753687	0.644812	0.405533	0.152511	0.424802	0.261078	0.50283	0.403443
    +0.79483	0.0798539	0.347963	0.756363	0.654002	0.484362	0.663717	0.820894	0.220568	0.548021	0.218845	0.779403	0.804299	0.507375	0.592223	0.172742	0.63654	0.0894973	0.819295	0.712606
    +0.988408	0.473435	0.741449	1.02582	0.420089	0.859221	0.932609	0.913111	0.206479	0.606641	0.592807	0.943148	1.05883	0.871605	0.719628	0.296455	0.735305	0.405338	0.70923	0.472351
    +0.801213	0.930165	1.12413	0.970236	0.281743	1.11036	0.911725	0.579372	0.840547	0.467774	0.937797	0.721997	0.961574	1.08599	0.57822	0.70739	0.533045	0.812734	0.148052	0.238144
    +0.033511	0.742563	0.729705	0.21527	0.807152	0.579068	0.209073	0.232984	0.91811	0.384516	0.620859	0.0675881	0.187979	0.528276	0.248045	0.699975	0.263439	0.677736	0.632054	0.831136
    +0.379508	0.394834	0.402656	0.338167	0.703938	0.315728	0.243857	0.475284	0.607753	0.336413	0.270847	0.38184	0.381389	0.285442	0.271919	0.405371	0.331478	0.346229	0.681973	0.748633
    +1.01954	0.586318	0.852622	1.08059	0.340762	0.955962	0.989606	0.914744	0.331927	0.616543	0.693984	0.966318	1.10785	0.963435	0.742256	0.385068	0.74801	0.505968	0.654321	0.385256
    +0.124851	0.647767	0.637432	0.198938	0.766693	0.495492	0.15157	0.278676	0.831333	0.339767	0.525301	0.137635	0.200255	0.446836	0.203461	0.614955	0.238989	0.585824	0.629149	0.796432
    +0.822042	0.611747	0.850139	0.920143	0.113758	0.898665	0.836445	0.683577	0.462689	0.406345	0.66767	0.759121	0.93636	0.891583	0.542633	0.376275	0.534339	0.501362	0.400407	0.172095
    +0.728693	0.27883	0.523355	0.749647	0.439242	0.602651	0.655937	0.692852	0.235195	0.391798	0.348472	0.692708	0.785082	0.607712	0.47688	0.0436219	0.506139	0.16976	0.61561	0.497567
    +
    +
    +

    On the first line, the number of facilities and the numbers of customers are specified. +Then, for each facility, the opening cost and the capacity are given. +For each customer, the demand is given. +Finally, the cost of serving each customer from each facility is given.

    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 06/04/23.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/mixed-integer/problems/facility-location-problem/FLP_Instance.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/BranchAndBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/PseudoCost.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/BestEstimate.h"
    +#include "idol/mixed-integer/optimizers/wrappers/HiGHS/HiGHS.h"
    +#include "idol/mixed-integer/optimizers/wrappers/GLPK/GLPK.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Gurobi/Gurobi.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/BestBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/MostInfeasible.h"
    +#include "idol/mixed-integer/optimizers/callbacks/ReducedCostFixing.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    Env env;
    +
    +    // Read instance
    +    const auto instance = Problems::FLP::read_instance_1991_Cornuejols_et_al("facility.data.txt");
    +    const unsigned int n_customers = instance.n_customers();
    +    const unsigned int n_facilities = instance.n_facilities();
    +
    +    // Make model
    +
    +    Model model(env);
    +
    +    auto x = model.add_vars(Dim<1>(n_facilities), 0., 1., Binary, 0., "x");
    +    auto y = model.add_vars(Dim<2>(n_facilities, n_customers), 0., 1., Binary, 0., "y");
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        model.add_ctr(idol_Sum(j, Range(n_customers), instance.demand(j) * y[i][j]) <= instance.capacity(i));
    +    }
    +
    +    for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +        model.add_ctr(idol_Sum(i, Range(n_facilities), y[i][j]) == 1);
    +    }
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +            model.add_ctr(y[i][j] <= x[i]);
    +        }
    +    }
    +
    +    model.set_obj_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) *
    +                                             instance.demand(j) *
    +                                             y[i][j]
    +                                         )
    +                                 )
    +                         );
    +
    +    // Set backend options
    +    model.use(
    +            BranchAndBound()
    +                    .with_node_optimizer(Gurobi::ContinuousRelaxation())
    +                    .with_branching_rule(PseudoCost())
    +                    .with_node_selection_rule(BestEstimate())
    +                    .add_callback(ReducedCostFixing())
    +                    .with_logs(true)
    +    );
    +
    +    model.optimize();
    +
    +    std::cout << save_primal(model) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..dab46dc6b --- /dev/null +++ b/examples/generalized-assignment-problem-bap.html @@ -0,0 +1,361 @@ + + + + + + + Solving a generalized assignment problem by column generation and branch-and-price + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving a generalized assignment problem by column generation and branch-and-price

    +
    +

    Problem Definition

    +

    Given a set of \(m\) agents and \(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 \(i\in\{1,\dotsc,m\}\) has a capacity \(C_i\). +Each job \(j\in\{1,\dotsc,n\}\) has a resource consumption \(r_{ij}\) and a cost \(c_{ij}\) when assigned to agent \(i\).

    +

    We model the GAP with the following binary linear program:

    +
    +\[\begin{split}\begin{align*} + \min_{x} \quad & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} \quad & \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*}\end{split}\]
    +
    +
    +

    Decomposition

    +

    In this example, we use a Dantzig-Wolfe decomposition to break down the problem into a master problem and as many subproblems as agents. +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. +
    3. 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.

    4. +
    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 13/03/23.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/mixed-integer/problems/generalized-assignment-problem/GAP_Instance.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/WorstBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/BranchAndBound.h"
    +#include "idol/mixed-integer/optimizers/callbacks/heuristics/IntegerMaster.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/MostInfeasible.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/DantzigWolfeDecomposition.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/infeasibility-strategies/FarkasPricing.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/stabilization/Neame.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/logs/Info.h"
    +#include "idol/mixed-integer/optimizers/wrappers/GLPK/GLPK.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Gurobi/Gurobi.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Mosek/Mosek.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/infeasibility-strategies/ArtificialCosts.h"
    +#include "idol/mixed-integer/optimizers/callbacks/ReducedCostFixing.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    const auto instance = Problems::GAP::read_instance("assignment-bap.data.txt");
    +
    +    const unsigned int n_agents = instance.n_agents();
    +    const unsigned int n_jobs = instance.n_jobs();
    +
    +    // Create optimization environment
    +    Env env;
    +
    +    // Create model
    +    Model model(env);
    +
    +    // Create decomposition annotation
    +    Annotation decomposition(env, "decomposition", MasterId);
    +
    +    // Create assignment variables (x_ij binaries)
    +    auto x = model.add_vars(Dim<2>(n_agents, n_jobs), 0., 1., Binary, 0., "x");
    +
    +    // Create knapsack constraints (i.e., capacity constraints)
    +    for (unsigned int i = 0 ; i < n_agents ; ++i) {
    +        auto 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); // Assign constraint to i-th subproblem
    +    }
    +
    +    // Create assignment constraints
    +    for (unsigned int j = 0 ; j < n_jobs ; ++j) {
    +        model.add_ctr(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])));
    +
    +    // Build algorithms
    +    const auto column_generation = DantzigWolfeDecomposition(decomposition)
    +            .with_master_optimizer(Gurobi::ContinuousRelaxation().with_logs(false))
    +            .with_default_sub_problem_spec(
    +                    DantzigWolfe::SubProblem()
    +                            .add_optimizer(Gurobi().with_logs(false))
    +                            .with_column_pool_clean_up(1500, .75)
    +            )
    +            .with_logger(Logs::DantzigWolfe::Info().with_frequency_in_seconds(.00000001))
    +            .with_dual_price_smoothing_stabilization(DantzigWolfe::Neame(.3))
    +            .with_infeasibility_strategy(DantzigWolfe::FarkasPricing())
    +            .with_hard_branching(true)
    +            .with_logs(true);
    +
    +    const auto branch_and_bound = BranchAndBound()
    +            .with_subtree_depth(0)
    +            .with_branching_rule(MostInfeasible())
    +            .with_node_selection_rule(WorstBound())
    +            .add_callback(Heuristics::IntegerMaster().with_optimizer(Gurobi().with_logs(false)))
    +            .with_logger(Logs::BranchAndBound::Info<DefaultNodeInfo>().with_node_logs(true).with_frequency_in_seconds(.00000001))
    +            .with_logs(true);
    +
    +    const auto branch_and_price = branch_and_bound + column_generation;
    +
    +    model.use(branch_and_price);
    +    model.optimize();
    +
    +    // Set optimizer
    +    model.use(branch_and_price);
    +
    +    // Solve
    +    model.optimize();
    +
    +    // Print solution
    +    std::cout << save_primal(model) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..72da10191 --- /dev/null +++ b/examples/generalized-assignment-problem-penalty-bap.html @@ -0,0 +1,362 @@ + + + + + + + Combining branch-and-price, column generation, and a penalty method for the generalized assignment problem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Combining branch-and-price, column generation, and a penalty method for the generalized assignment problem

    +
    +

    Problem Definition

    +

    We consider the Generalized Assignment Problem (GAP) already studied in the branch-and-price example.

    +

    In this example, we solve the continuous relaxation of the GAP using a penalty method and column generation. +Then possibly branch on the integer variables to solve the mixed-integer problem.

    +

    First, we consider the continuous relaxation of the GAP:

    +
    +\[\begin{split}\begin{align*} + \min_{x} \quad & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} \quad & \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*}\end{split}\]
    +

    Then, we introduce penalty parameters \(\rho_j\) to penalize the constraints \(\sum_{i=1}^m x_{ij} = 1\) in the objective function.

    +
    +\[\begin{split}\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*}\end{split}\]
    +

    Throughout the optimization process, we update the penalty parameters \(\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

    +
    //
    +// Created by henri on 13/03/23.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/mixed-integer/problems/generalized-assignment-problem/GAP_Instance.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/WorstBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/BranchAndBound.h"
    +#include "idol/mixed-integer/optimizers/callbacks/heuristics/IntegerMaster.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/MostInfeasible.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/DantzigWolfeDecomposition.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/infeasibility-strategies/FarkasPricing.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/stabilization/Neame.h"
    +#include "idol/mixed-integer/optimizers/dantzig-wolfe/logs/Info.h"
    +#include "idol/mixed-integer/optimizers/padm/PenaltyMethod.h"
    +#include "idol/mixed-integer/optimizers/wrappers/GLPK/GLPK.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    const auto instance = Problems::GAP::read_instance("assignment-penalty-bap.data.txt");
    +
    +    const unsigned int n_agents = instance.n_agents();
    +    const unsigned int n_jobs = instance.n_jobs();
    +
    +    // Create optimization environment
    +    Env env;
    +
    +    // Create model
    +    Model model(env);
    +
    +    // Create decomposition annotation
    +    Annotation decomposition(env, "decomposition", MasterId);
    +
    +    // Create penalized constraints annotation
    +    Annotation<double> initial_penalty_parameters(env, "initial_penalty_parameters", -1); // By default, constraints are not penalized
    +
    +    // Create assignment variables (x_ij binaries)
    +    auto x = model.add_vars(Dim<2>(n_agents, n_jobs), 0., 1., Binary, 0., "x");
    +
    +    // Create knapsack constraints (i.e., capacity constraints)
    +    for (unsigned int i = 0 ; i < n_agents ; ++i) {
    +        auto 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); // Assign constraint to i-th subproblem
    +    }
    +
    +    // Create assignment constraints
    +    for (unsigned int j = 0 ; j < n_jobs ; ++j) {
    +        auto assignment = model.add_ctr(idol_Sum(i, Range(n_agents), x[i][j]) == 1, "assignment_" + std::to_string(j));
    +
    +        assignment.set(initial_penalty_parameters, 1e2); // With an initial penalty value of 1e2
    +    }
    +
    +    // 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])));
    +
    +    const auto column_generation = DantzigWolfeDecomposition(decomposition)
    +            .with_master_optimizer(GLPK::ContinuousRelaxation().with_logs(false))
    +            .with_default_sub_problem_spec(
    +                    DantzigWolfe::SubProblem()
    +                            .add_optimizer(GLPK().with_logs(false))
    +                            .with_column_pool_clean_up(1500, .75)
    +            )
    +            .with_logger(Logs::DantzigWolfe::Info().with_frequency_in_seconds(.00000001))
    +            .with_dual_price_smoothing_stabilization(DantzigWolfe::Neame(.3))
    +            .with_infeasibility_strategy(DantzigWolfe::FarkasPricing())
    +            .with_hard_branching(true)
    +            .with_logs(true);
    +
    +
    +    const auto penalty_method = PenaltyMethod(initial_penalty_parameters)
    +            .with_penalty_update(PenaltyUpdates::Multiplicative(2))
    +            .with_rescaling_threshold(1e3)
    +            .with_feasible_solution_status(Optimal);
    +
    +    const auto branch_and_bound = BranchAndBound()
    +            .with_subtree_depth(0)
    +            .with_branching_rule(MostInfeasible())
    +            .with_node_selection_rule(WorstBound())
    +            //.add_callback(Heuristics::IntegerMaster().with_osi_interface(HiGHS().with_logs(false)))
    +            .with_logs(true);
    +
    +    // Set optimizer
    +    model.use(branch_and_bound + (penalty_method + column_generation));
    +
    +    // Solve
    +    model.optimize();
    +
    +    // Print solution
    +    std::cout << save_primal(model) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/examples/index.html b/examples/index.html new file mode 100644 index 000000000..b7520261f --- /dev/null +++ b/examples/index.html @@ -0,0 +1,276 @@ + + + + + + + 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 000000000..30bdb4a3e --- /dev/null +++ b/examples/knapsack-problem.html @@ -0,0 +1,312 @@ + + + + + + + Solving a knapsack problem with HiGHS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving a knapsack problem with HiGHS

    +
    +

    Problem Definition

    +

    Given a set of \(n\) items, the goal is to select of subset of items to be put in a knapsack of limited capacity. +Each item has a weight (the amount of space it takes in the knapsack) and a profit (the value of the item). +The goal is to maximize the total profit of the items in the knapsack, while not exceeding the capacity.

    +

    For each item \(j\in\{1,\dotsc,n\}\), we let \(w_j\) denote its weight and \(p_j\) be its profit. +The capacity of the knapsack is noted \(C\).

    +

    The knapsack problem can be formulated as the following binary linear problem:

    +
    +\[\begin{split}\begin{align*} + \max_{x} \quad & \sum_{j=1}^n p_j x_j \\ + \text{s.t.} \quad & \sum_{j=1}^n w_j x_j \le C, \\ + & x \in \{0,1\}^n. +\end{align*}\end{split}\]
    +
    +
    +

    Instance

    +

    We will use an instance stored in a file called knapsack.data.txt. This file reads

    +
    5
    +40 50 100 95 30
    +2 3.14 1.98 5 3
    +10
    +
    +
    +

    The first line contains the number of items \(n\). +Then, the following line contains the profits of each item, \(p_j\). +The third line contains the weights of each item, \(w_j\). +Finally, the last line contains the capacity of the knapsack, \(C\).

    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 06/04/23.
    +//
    +#include <iostream>
    +#include "idol/mixed-integer/problems/knapsack-problem/KP_Instance.h"
    +#include "idol/modeling.h"
    +#include "idol/mixed-integer/optimizers/wrappers/HiGHS/HiGHS.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    const auto instance = Problems::KP::read_instance("knapsack.data.txt");
    +
    +    const auto n_items = instance.n_items();
    +
    +    Env env;
    +
    +    // Create model
    +    Model model(env);
    +
    +    auto x = model.add_vars(Dim<1>(n_items), 0, 1, Binary, 0., "x");
    +
    +    model.add_ctr(idol_Sum(j, Range(n_items), instance.weight(j) * x[j]) <= instance.capacity());
    +
    +    model.set_obj_expr(idol_Sum(j, Range(n_items), -instance.profit(j) * x[j]));
    +
    +    // Set optimizer
    +    model.use(HiGHS());
    +
    +    // Solve
    +    model.optimize();
    +
    +    std::cout << "Objective value = " << model.get_best_obj() << std::endl;
    +
    +    std::cout << "Solution:\n";
    +    std::cout << save_primal(model) << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/examples/robust-adr.html b/examples/robust-adr.html new file mode 100644 index 000000000..c93f079f1 --- /dev/null +++ b/examples/robust-adr.html @@ -0,0 +1,373 @@ + + + + + + + Using affine decision rules to solve a two-stage facility location problem with facility disruption + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Using affine decision rules to solve a two-stage facility location problem with facility disruption

    +
    +

    Problem Definition

    +

    We consider a facility location problem with facility disruption. +Given a set of potential facility locations \(V_1\) and a set of customers \(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 considers random disruptions of the opened facilities making them unusable.

    +

    Note that there is also an example for the deterministic version of the FLP using Column Generation.

    +

    Each facility \(i\in V_1\) has an opening cost \(f_i\) and a maximum capacity \(q_i\). +Each customer \(j\in V_2\) has a demand \(d_j\). +The unitary cost for serving customer \(j\in V_2\) from facility \(i\in V_1\) is \(t_{ij}\). +The maximum number of facilities that can be disrupted is noted \(\Gamma\).

    +

    The two-stage robust facility location problem can be formulated as

    +
    +\[\begin{align} + \min_{ x\in \{0,1\}^{|V_1|} } \quad & \left\{ \sum_{i\in V_1} f_i x_i + \max_{\xi\in \Xi} \min_{y\in Y(x,\xi)} \quad \sum_{i\in V_1} \sum_{j\in V_2} t_{ij} y_{ij} \right\}, +\end{align}\]
    +

    in which \(\Xi := \left\{ \xi\in\{0,1\}^{|V_1|} : e^\top\xi \le \Gamma \right\}\) and \(Y(x,\xi)\) is the feasible set of the second-stage problem defined as

    +
    +\[\begin{split}\begin{align} + & \sum_{j\in V_2} d_j y_{ij} \le q_i, && i\in V_1,\\ + & \sum_{i\in V_1} y_{ij} \ge 1, && j\in V_2, \\ + & y_{ij} \le x_i && i\in V_1, j\in V_2, \\ + & y_{ij} \le 1 - \xi_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}\end{split}\]
    +

    In this example, we will approximate the robust problem using affine decision rules and solve it using Gurobi. +To this end, we will restrict the adjustable decisions to be affine functions of the uncertain parameters, i.e., \(y(\xi) = \bar y + Y\xi\).

    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 28.11.24.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/mixed-integer/problems/facility-location-problem/FLP_Instance.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/BranchAndBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/PseudoCost.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/BestEstimate.h"
    +#include "idol/mixed-integer/optimizers/wrappers/HiGHS/HiGHS.h"
    +#include "idol/mixed-integer/optimizers/wrappers/GLPK/GLPK.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Gurobi/Gurobi.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/BestBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/MostInfeasible.h"
    +#include "idol/mixed-integer/optimizers/callbacks/ReducedCostFixing.h"
    +#include "idol/robust/modeling/Description.h"
    +#include "idol/robust/optimizers/deterministic/Deterministic.h"
    +#include "idol/robust/optimizers/affine-decision-rule/AffineDecisionRule.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    Env env;
    +
    +    // Read instance
    +    const auto instance = Problems::FLP::read_instance_1991_Cornuejols_et_al("adr-facility-location.data.txt");
    +    const unsigned int n_customers = instance.n_customers();
    +    const unsigned int n_facilities = instance.n_facilities();
    +
    +    // Uncertainty set
    +    Model uncertainty_set(env);
    +    const double Gamma = .2;
    +    const auto xi = uncertainty_set.add_vars(Dim<2>(n_facilities, n_customers), 0., 1., Continuous, 0., "xi");
    +    uncertainty_set.add_ctr(idol_Sum(i, Range(n_facilities), idol_Sum(j, Range(n_customers), xi[i][j])) <= Gamma);
    +
    +    // Make model
    +    Model model(env);
    +    Robust::Description description(uncertainty_set);
    +
    +    auto x = model.add_vars(Dim<1>(n_facilities), 0., 1., Binary, 0., "x");
    +    auto y = model.add_vars(Dim<2>(n_facilities, n_customers), 0., 1., Continuous, 0., "y");
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        model.add_ctr(idol_Sum(j, Range(n_customers), instance.demand(j) * y[i][j]) <= instance.capacity(i));
    +    }
    +
    +    for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +        model.add_ctr(idol_Sum(i, Range(n_facilities), y[i][j]) >= 1);
    +    }
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +            model.add_ctr(y[i][j] <= x[i]);
    +        }
    +    }
    +
    +    model.set_obj_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) *
    +                                           instance.demand(j) *
    +                                           y[i][j]
    +                                )
    +                       )
    +    );
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        for (unsigned int j = 0; j < n_customers; ++j) {
    +            const auto c = model.add_ctr(y[i][j] <= 1);
    +            description.set_uncertain_rhs(c, -xi[i][j]); // models y_ij <= 1 - xi_j
    +            description.set_stage(y[i][j], 1); // models y_ij as a second-stage variable
    +        }
    +    }
    +
    +    model.use(Gurobi());
    +    model.optimize();
    +    std::cout << "Deterministic Problem has value: " << model.get_best_obj() << std::endl;
    +
    +    /*
    +     * Alternatively, you could also do
    +     * const auto adr_result = Robust::AffineDecisionRule::make_model(model, description);
    +     * std::cout << Robust::Description::View(adr_result.model, description) << std::endl;
    +     */
    +
    +    model.use(
    +            Robust::AffineDecisionRule(description)
    +                    .with_deterministic_optimizer(Gurobi().with_logs(true))
    +    );
    +    model.optimize();
    +    std::cout << "Affine Decision Rule Problem has value: " << model.get_best_obj() << std::endl;
    +
    +    model.use(
    +            Robust::Deterministic(description)
    +                    .with_deterministic_optimizer(Gurobi())
    +    );
    +    model.optimize();
    +    std::cout << "Robust Problem has value: " << model.get_best_obj() << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/examples/robust-determistic.html b/examples/robust-determistic.html new file mode 100644 index 000000000..833687fbd --- /dev/null +++ b/examples/robust-determistic.html @@ -0,0 +1,383 @@ + + + + + + + Solving a robust facility location problem by its deterministic equivalent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving a robust facility location problem by its deterministic equivalent

    +
    +

    Problem Definition

    +

    We consider a facility location problem with uncertain demand. +Given a set of potential facility locations \(V_1\) and a set of customers \(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 deterministic version of the FLP using Column Generation.

    +

    Each facility \(i\in V_1\) has an opening cost \(f_i\) and a maximum capacity \(q_i\). +Each customer \(j\in V_2\) has a demand \(d_j\). +The unitary cost for serving customer \(j\in V_2\) from facility \(i\in V_1\) is \(t_{ij}\). +The uncertainty in customer demands is controlled by a parameter \(\Gamma\).

    +

    In this robust variant, we consider that the demands are uncertain and can be expressed as \(d_j(\xi) = d_j(1 + 0.2 \xi_j)\) +with \(\xi\) being an unknown vector taken in the uncertainty set

    +
    +\[\Xi := \left\{ \xi\in[ 0, 1 ]^{|V_2|} : \sum_{j\in V_2} \xi_j \le \Gamma \right\}.\]
    +

    The goal is to minimize the total cost of opening facilities and serving customers, considering the worst-case demand scenario.

    +

    The robust version can be formulated as

    +
    +\[\begin{split}\begin{align*} + \min_{x,y} \quad & \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.} \quad & \sum_{j\in V_2} d_j(\xi) y_{ij} \le q_i, && i\in V_1, \quad \text{for all }\xi\in\Xi, \\ + & \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*}\end{split}\]
    +

    In this example, we will reformulate this robust facility location problem as a deterministic one. Then, we will solve it using Gurobi.

    +
    +

    Hint

    +

    Here, the deterministic reformulation reads as follows.

    +
    +\[\begin{split}\begin{align*} + \min_{x,y,u.v} \quad & \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.} \quad & \sum_{j\in V_2} d_j y_{ij} + \Gamma u + \sum_{j\in V_2} v_j \le q_i, && i\in V_1, \\ + & u + v_j \ge 0.2 d_j y_j, && j\in V_2, \\ + & \sum_{i\in V_1} y_{ij} = 1, && j\in V_2, \\ + & u, v_j \ge 0, && 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*}\end{split}\]
    +
    +
    +
    +

    Implementation

    +
    //
    +// Created by henri on 06/04/23.
    +//
    +#include <iostream>
    +#include "idol/modeling.h"
    +#include "idol/mixed-integer/problems/facility-location-problem/FLP_Instance.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/BranchAndBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/PseudoCost.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/BestEstimate.h"
    +#include "idol/mixed-integer/optimizers/wrappers/HiGHS/HiGHS.h"
    +#include "idol/mixed-integer/optimizers/wrappers/GLPK/GLPK.h"
    +#include "idol/mixed-integer/optimizers/wrappers/Gurobi/Gurobi.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/node-selection-rules/factories/BestBound.h"
    +#include "idol/mixed-integer/optimizers/branch-and-bound/branching-rules/factories/MostInfeasible.h"
    +#include "idol/mixed-integer/optimizers/callbacks/ReducedCostFixing.h"
    +#include "idol/robust/modeling/Description.h"
    +#include "idol/robust/optimizers/deterministic/Deterministic.h"
    +
    +using namespace idol;
    +
    +int main(int t_argc, const char** t_argv) {
    +
    +    Env env;
    +
    +    // Read instance
    +    const auto instance = Problems::FLP::read_instance_1991_Cornuejols_et_al("robust-facility-location.data.txt");
    +    const unsigned int n_customers = instance.n_customers();
    +    const unsigned int n_facilities = instance.n_facilities();
    +
    +    // Uncertainty set
    +    Model uncertainty_set(env);
    +    const double Gamma = 1;
    +    const auto xi = uncertainty_set.add_vars(Dim<1>(n_customers), 0., 1., Continuous, 0., "xi");
    +    uncertainty_set.add_ctr(idol_Sum(i, Range(n_customers), xi[i]) <= Gamma);
    +
    +    // Make model
    +    Model model(env);
    +    Robust::Description description(uncertainty_set);
    +
    +    auto x = model.add_vars(Dim<1>(n_facilities), 0., 1., Binary, 0., "x");
    +    auto y = model.add_vars(Dim<2>(n_facilities, n_customers), 0., 1., Continuous, 0., "y");
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +
    +        const auto c = model.add_ctr(idol_Sum(j, Range(n_customers), instance.demand(j) * y[i][j]) <= instance.capacity(i));
    +
    +        for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +            description.set_uncertain_mat_coeff(c, y[i][j], 0.2 * instance.demand(j) * xi[j]);
    +        }
    +
    +    }
    +
    +    for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +        model.add_ctr(idol_Sum(i, Range(n_facilities), y[i][j]) == 1);
    +    }
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        for (unsigned int j = 0 ; j < n_customers ; ++j) {
    +            model.add_ctr(y[i][j] <= x[i]);
    +        }
    +    }
    +
    +    model.set_obj_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) *
    +                                           instance.demand(j) *
    +                                           y[i][j]
    +                                )
    +                       )
    +    );
    +
    +    for (unsigned int i = 0 ; i < n_facilities ; ++i) {
    +        for (unsigned int j = 0; j < n_customers; ++j) {
    +            description.set_uncertain_obj(y[i][j], 0.2 * instance.per_unit_transportation_cost(i, j) * instance.demand(j) * xi[j]);
    +        }
    +    }
    +
    +    model.use(Gurobi());
    +    model.optimize();
    +    std::cout << "Deterministic Problem has value: " << model.get_best_obj() << std::endl;
    +
    +    /*
    +     * Alternatively, you could also do
    +     * const auto deterministic_model = Robust::Deterministic::make_model(model, description);
    +     * std::cout << Robust::Description::View(model, description) << std::endl;
    +     */
    +
    +    model.use(
    +                Robust::Deterministic(description)
    +                    .with_deterministic_optimizer(Gurobi().with_logs(false))
    +            );
    +    model.optimize();
    +    std::cout << "Robust Problem has value: " << model.get_best_obj() << std::endl;
    +
    +    return 0;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..4b48300dc --- /dev/null +++ b/examples/two-stage-robust-facility-location-problem.html @@ -0,0 +1,248 @@ + + + + + + + Two-Stage Robust Facility Location Problem (CCG) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 \(V_1\) and a set of customers \(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 deterministic version of the FLP using Column Generation.

    +

    Each facility \(i\in V_1\) has an opening cost \(f_i\) and a maximum capacity \(q_i\). +Each customer \(j\in V_2\) has a demand \(d_j\). +The unitary cost for serving customer \(j\in V_2\) from facility \(i\in V_1\) is \(t_{ij}\). +The uncertainty in customer demands is controlled by a parameter \(\Gamma\).

    +

    In this robust variant, we consider that the demands are uncertain and can be expressed as \(d_j(\xi) = d_j(1 + p\xi_j)\) +with \(p\) being the maximum increase in demand and \(\xi\) being an unknown vector taken in the uncertainty set

    +
    +\[\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

    +
    +\[\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 \(Y(x,\xi)\) is the set of feasible solutions for the second stage problem, given the first stage solution \(x\) and the realization \(\xi\) of the uncertain demand vector. +It is defined as the set of vectors \(y\in \mathbb{R}^{|V_1|\times|V_2|}\) that satisfy the following constraints

    +
    +\[\begin{split}\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*}\end{split}\]
    +
    +
    +

    Implementation

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/faq/gap.html b/faq/gap.html new file mode 100644 index 000000000..5ac561c4f --- /dev/null +++ b/faq/gap.html @@ -0,0 +1,250 @@ + + + + + + + How is the Optimality Gap Computed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    How is the Optimality Gap Computed?

    +

    To assess global optimality, we use two different optimality gaps.

    +

    The relative optimality gap is computed as

    +
    +\[\begin{equation} + \gamma_{\text{rel}} := \frac{ UB - LB }{ 10^{-10} + |UB| }. +\end{equation}\]
    +

    The absolute optimality gap is computed as

    +
    +\[\begin{equation} + \gamma_{\text{abs}} := UB - LB. +\end{equation}\]
    +

    See also Tolerances.

    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/faq/index.html b/faq/index.html new file mode 100644 index 000000000..17619d5f3 --- /dev/null +++ b/faq/index.html @@ -0,0 +1,248 @@ + + + + + + + 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 000000000..7b0249a4a --- /dev/null +++ b/faq/mosek-and-eigen.html @@ -0,0 +1,289 @@ + + + + + + + Why is Eigen Necessary to Solve QCQPs with Mosek? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Why is Eigen Necessary to Solve QCQPs with Mosek?

    +
    +

    In Short

    +

    The interface of idol is based on quadratic expressions like

    +
    +\[\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

    +
    +\[(x_0, \textbf{Fx}) \in \mathcal Q^n,\]
    +

    where \(\mathcal Q^n\) denotes the second-order cone and \(F\) is some matrix related to \(Q^i\).

    +

    In order to make the conversion between the Mosek interface and +the idol interface (for instance, computing the matrix \(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

    +
    +\[\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

    +
    +\[a_{(i)}^\top x + x^\top Q^i x \le b_i.\]
    +

    The first task is to compute an eigen value decomposition of \(Q^i\), i.e., +to find matrices \(L\) and \(D\) such that \(Q^i = L D L^\top\) +and \(D\) is a diagonal matrix containing the eigen values of \(Q^i\).

    +

    If there are more than two negative eigen values, the constraint is not convex and an exeception is thrown.

    +

    Otherwise, we compute \(F\) and \(N\) so that \(x^\top Q^i x = \lVert Fx \rVert_2^2 + x^\top N x\). +This is done by setting \(F = \sqrt{D^+} L^\top\) where \(D^+\) is \(D\) with the negative eigen values replaced by zero, +and \(N = L D^- L^\top\).

    +

    Hence, we have that the constraint is expressed as

    +
    +\[\lVert Fx \rVert_2^2 + x^\top N x \le b_i - a_{(i)}^\top x.\]
    +

    If \(N = 0\), it can be written as

    +
    +\[\begin{split}\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}\end{split}\]
    +

    where \(\mathcal Q^{n+2}_r\) denotes the rotated second-order cone.

    +

    Otherwise, if \(N\) has one non-zero entry, say \(n_{ij}\). +Then, it must be that \(a_{(i)} = 0\) and \(b_i \le 0\) for the constraint to be +converted by idol. Under this assumption, the constraint can be written as

    +
    +\[\begin{split}\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}\end{split}\]
    +

    where it is assumed that \(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/genindex.html b/genindex.html new file mode 100644 index 000000000..6732d9608 --- /dev/null +++ b/genindex.html @@ -0,0 +1,2483 @@ + + + + + + + Index + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +

    Index

    + +
    + I + +
    +

    I

    + + + +
    + + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..4d7360de2 --- /dev/null +++ b/index.html @@ -0,0 +1,369 @@ + + + + + + + idol, a C++ Framework for Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +

    A C++ Framework for Optimization

    + +

    + Start solving optimization problems now. +

    + + + Get started now +   + To installation guidelines + + +
    +

    What is idol?

    +

    idol is a C++ framework for mathematical optimization and complex decision-making problems. +It is designed to help you build new algorithms for solving complex optimization problems. +The main philosophy behind idol is interoperability and ease of use. +Hence, any algorithm can be seamlessly combined with any other algorithm to create a new one. +For instance, you can combine a Branch-and-Bound algorithm with a Column Generation algorithm to create a Branch-and-Price algorithm.

    +
    const auto branch_and_price = branch_and_bound + column_generation;
    +model.use(branch_and_price);
    +model.optimize();
    +
    +
    +

    idol offers a variety of tools to tackle many different kinds of optimization problems:

    +
    +
    +

    Getting Started with idol

    +

    New to idol? Be sure to have a look at our tutorials. If you want to get a fast hands-on +start, have a look at our local installation guideline. It is the easiest installation process +one could think of: it automatically downloads the latest version of idol, and installs it locally in a sub-folder of your CMake project. +It’s really a mater of seconds before you can start using idol.

    +
    +

    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.

    +
    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, 0., "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?

    +

    idol is not a MIP solver in itself. In fact, it typically needs to call external +solvers as a sub-routine of more complex algorithms such as Branch-and-Price.

    +

    The idea is to work hand in hand with existing 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.

    +

    Still, idol can be used to solve your favourite MILP, MIQP, or MIQCQP 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:

    + +
    +
    +

    Table of Contents

    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..e2e67b77c --- /dev/null +++ b/installation/global-installation/index.html @@ -0,0 +1,311 @@ + + + + + + + Global Installation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 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 build directory. +This is where the library will be compiled before being it is installed (i.e., copied) on your system.

    +
    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:

    +
    cmake -D<YOUR_CMAKE_OPTION>=<YOUR_VALUE> ..
    +
    +
    +

    A list of all possible options can be found on the complete list of options.

    +
    +

    Example for Gurobi

    +

    Here is an example of a possible CMake command which will create the necessary targets for configuring idol to interface Gurobi.

    +
    cmake -DUSE_GUROBI=YES ..
    +
    +
    +

    Note that this example assumes that your environment variable 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 GUROBI_DIR option.

    +
    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.

    +
    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.

    +
    sudo make install
    +
    +
    +
    +

    Hint

    +

    Here, you need superuser rights to install idol globally. If you want to install idol in a specific folder, +you may also use the CMAKE_INSTALL_PREFIX CMake option to change the destination folder.

    +
    cmake -CMAKE_INSTALL_PREFIX=/my/custom/installation/folder <YOUR_OTHER_CMAKE_OPTIONS...> ..
    +make install
    +
    +
    +
    +
    +
    +

    And Then?

    +

    That’s it! idol is now installed on your computer. You can now use it in your C++ projects. To do so, you will need to +link your project against the idol library. See the related pages for more information.

    +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..ca8fc24d9 --- /dev/null +++ b/installation/global-installation/linking.html @@ -0,0 +1,277 @@ + + + + + + + Linking Your C++ Project + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 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 Makefile or pure gcc, clang, …).

    +

    Here is a minimal CMakeLists.txt which creates a new executable target linked with idol.

    +
    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 main.cpp is then a minimal example.

    +
    #include <iostream>
    +#include <idol/modeling.h>
    +
    +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;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/installation/index.html b/installation/index.html new file mode 100644 index 000000000..83bf94d69 --- /dev/null +++ b/installation/index.html @@ -0,0 +1,265 @@ + + + + + + + Installation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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: a local installation (easy to use) and a global installation (for more advanced users).

    +
    +

    Local Installation

    +

    A local installation lets CMake automatically download and install idol in a sub-folder of your CMake project. This is the easiest way to get started.

    +
    +
    +

    Global Installation

    +

    A global installation installs idol globally on your computer (e.g., in /usr/lib).

    +
    +
    +
    +
    +

    Options (External Solvers, etc.)

    +

    No matter which installation method you choose, you can customize the installation by setting a set of parameters accordingly. +This is particularly useful if you want to install idol with some external solver such as Gurobi. +Please refer to the complete list of options for more information.

    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/installation/local_installation.html b/installation/local_installation.html new file mode 100644 index 000000000..708cdfd6a --- /dev/null +++ b/installation/local_installation.html @@ -0,0 +1,301 @@ + + + + + + + Local Installation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 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 FetchContent_* directives.

    +

    We provide here a minimal CMakeLists.txt.

    +
    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 want to use
    +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 by setting the GIT_TAG variable in the FetchContent_Declare function to the specific +version, e.g., 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 set CMake function. For instance, to set the option MY_OPTION to the +value MY_VALUE. You should add set(MY_OPTION MY_VALUE) to your CMakeLists.txt file.

    +

    A list of all possible options can be found on the complete list of options.

    +
    +

    Then, here is a starting main.cpp.

    +
    #include <iostream>
    +#include <idol/modeling.h>
    +
    +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, 0., "x");
    +
    +    // ...
    +
    +    return 0;
    +}
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/installation/options.html b/installation/options.html new file mode 100644 index 000000000..3414b2117 --- /dev/null +++ b/installation/options.html @@ -0,0 +1,438 @@ + + + + + + + List of CMake Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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.

    + +
    +

    Linking with External Solvers

    +
    +

    Gurobi (Commercial Solver)

    +

    To link with Gurobi, you will need to pass the USE_GUROBI CMake option with value YES.

    +

    By default, CMake will look for Gurobi inside the folder indicated by the environment variable GUROBI_HOME +(see this official Gurobi page). +Note that it is also possible to pass the CMake option GUROBI_DIR=/path/to/gurobi/install/dir in order to specify +another directory to look for Gurobi.

    +
    +

    Example

    +

    The following will create an install target which will install idol with Gurobi.

    +
    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.

    +
    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 USE_MOSEK CMake option with value YES.

    +

    By default, CMake will look for Mosek inside the folder indicated by the environment variable MOSEK_HOME. +Note that it is also possible to pass the CMake option MOSEK_DIR=/path/to/mosek/install/dir in order to specify +another directory to look for Mosek.

    +

    Note that MOSEK_HOME (or equivalently MOSEK_DIR) should point to the Mosek installation folder where +folders h and bin can be found. For instance, MOSEK_HOME=~/mosek/10.0/tools/platform/linux64x86.

    +
    +

    Example

    +

    The following will create an install target which will install idol with Mosek.

    +
    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.

    +
    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 read this.

    +
    +
    +
    +

    GLPK (Open-Source Solver)

    +

    To link with GLPK, you will need to pass the USE_GLPK CMake option with value YES.

    +

    By default, CMake will look for GLPK inside the folder indicated by the environment variable GLPK_HOME as well +as in the default installation folders /usr/include and /usr/lib. +Note that it is also possible to pass the CMake option GLPK_DIR=/path/to/glpk/install/dir in order to specify +another directory to look for GLPK.

    +
    +

    Example

    +

    The following will create an install target which will install idol with GLPK.

    +
    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.

    +
    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 USE_HIGHS CMake option with value YES.

    +

    By default, CMake will look for HIGHS inside the default installation folders /usr/include and /usr/lib. +Note that it is also possible to pass the CMake option HIGHS_DIR=/path/to/highs/install/dir in order to specify +another directory to look for GLPK.

    +
    +

    Example

    +

    The following will create an install target which will install idol with GLPK.

    +
    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.

    +
    set(USE_HIGHS YES)
    +set(HIGHS_DIR /path/to/glpk/install/dir)
    +
    +
    +
    +
    +
    +

    coin-or (Open-Source Solvers)

    +

    idol can be linked with some of the coin-or libraries. +Hereafter, we give a list of such libraries. For all the USE_* options, you will need to define the environment +variable COIN_OR_HOME or to set the CMake option COIN_OR_DIR. It must point to the dist directory +of coin-or.

    +
    +

    Example

    +

    The following will prepare CMake for linking against coin-or libraries.

    +
    cmake -DCOIN_OR_DIR=/path/to/coin_or/dist <OTHER_OPTIONS_GO_HERE> ..
    +
    +
    +

    If you are doing a local installation, then the same can be achieved as follows.

    +
    set(COIN_OR_DIR /path/to/coin_or/dist)
    +
    +
    +
    +

    We now give the list of options which can be used in relation with coin-or libraries.

    +
      +
    • USE_OSI=YES: use the Osi solver.

    • +
    • USE_SYMPHONY=YES: use the Symphony solver (can only be used through Osi).

    • +
    • USE_CBC=YES: use the Cbc solver (can only be used through Osi).

    • +
    • USE_CLP=YES: use the Clp solver (can only be used through Osi).

    • +
    • USE_CPLEX=YES: use the Cplex solver (can only be used through Osi).

    • +
    • USE_MIBS=YES: use the MibS solver (will automatically search for Alps, Bcps, Blis, and Cgl).

    • +
    +
    +
    +
    +

    Building Examples

    +

    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.

    +
    +

    Example

    +

    The following will tell CMake to create targets for examples.

    +
    cmake -DBUILD_EXAMPLES=YES ..
    +
    +
    +

    For instance, we can now build the Knapsack Problem example,

    +
    make example_knapsack
    +
    +
    +

    and run it.

    +
    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 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 robin_hood.hpp file is. This is done through the CMake option +ROBINHOOD_DIR=/path/to/robin_hood/folder together with USE_ROBINHOOD=YES.

    +

    Note that, if ROBINHOOD_DIR is not specified, robin_hood.hpp is searched for in /usr/include, +/usr/include/robin_hood/, /usr/local/include/, /usr/local/include/robin_hood/ and in the path +stored in the environment variable ROBINHOOD_HOME.

    +
    +

    Example

    +

    The following will create an install target which will install idol with martinus’s robin_hood hash map +implementation.

    +
    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 Eigen folder is. This is done +through the CMake option EIGEN_DIR=/path/to/eigen/folder together with USE_EIGEN=YES.

    +
    +

    Example

    +

    The following will create an install target which will install idol with Eigen.

    +
    cmake -DUSE_EIGEN=YES -DEIGEN_DIR=/path/to/eigen/folder ..
    +
    +
    +
    +
    +
    +
    +

    Building Unit and Integration Tests

    +

    To build tests for idol, please refer to this developer page.

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..e102be9be93bfe242b702e3bfa6b6c27982f49dd GIT binary patch literal 49368 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 literal 0 HcmV?d00001 diff --git a/references.html b/references.html new file mode 100644 index 000000000..f1359641e --- /dev/null +++ b/references.html @@ -0,0 +1,305 @@ + + + + + + + References + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    References

    +

    This page contains references to the literature used in the documentation.

    +
    +
    +
    +[1] +

    Tobias Achterberg, Thorsten Koch, and Alexander Martin. Branching rules revisited. Operations Research Letters, 33(1):42–54, 2005. doi:https://doi.org/10.1016/j.orl.2004.04.002.

    +
    +
    +[2] +

    Josette Ayoub and Michael Poss. Decomposition for adjustable robust linear optimization subject to uncertainty polytope. Computational Management Science, 13(2):219–239, 2016. doi:10.1007/s10287-016-0249-2.

    +
    +
    +[3] +

    Daniel Baena, Jordi Castro, and Antonio Frangioni. Stabilized benders methods for large-scale combinatorial optimization, with application to data privacy. Management Science, 66(7):3051–3068, 2020. doi:10.1287/mnsc.2019.3341.

    +
    +
    +[4] +

    Timo Berthold. Primal heuristics for mixed integer programs. Master's thesis, Technische Universität Berlin, 2006.

    +
    +
    +[5] +

    George B. Dantzig and Philip Wolfe. The decomposition algorithm for linear programs. Econometrica, 29(4):767, 1961. doi:10.2307/1911818.

    +
    +
    +[6] +

    Elizabeth D. Dolan and Jorge J. Moré. Benchmarking optimization software with performance profiles. Mathematical Programming, 91(2):201–213, 2002. doi:10.1007/s101070100263.

    +
    +
    +[7] +

    J. J. H. Forrest, J. P. H. Hirst, and J. A. Tomlin. Practical solution of large mixed integer programming problems with umpire. Management Science, 20(5):736–773, 1974. doi:10.1287/mnsc.20.5.736.

    +
    +
    +[8] +

    Thomas Kleinert. Algorithms for Mixed-Integer Bilevel Problems with Convex Followers. PhD thesis, Universität Trier, 2021. URL: https://opus4.kobv.de/opus4-trr154/frontdoor/index/index/docId/383.

    +
    +
    +[9] +

    J. T. Linderoth and M. W. P. Savelsbergh. A computational study of search strategies for mixed integer programming. INFORMS Journal on Computing, 11(2):173–187, 1999. doi:10.1287/ijoc.11.2.173.

    +
    +
    +[10] +

    James T. Moore and Jonathan F. Bard. The mixed integer linear bilevel programming problem. Operations Research, 38(5):911–921, 1990. doi:10.1287/opre.38.5.911.

    +
    +
    +[11] +

    A. Pessoa, R. Sadykov, E. Uchoa, and F. Vanderbeck. Automation and combination of linear-programming based stabilization techniques in column generation. INFORMS Journal on Computing, 30(2):339–360, 2018. doi:10.1287/ijoc.2017.0784.

    +
    +
    +[12] +

    Johannes Thürauf, Thomas Kleinert, Ivana Ljubić, Ted Ralphs, and Martin Schmidt. Bobilib: bilevel optimization (benchmark) instance library. Technical Report, Universität Trier, Quantagonia, ESSEC Business School, Lehigh University, 2024. URL: https://optimization-online.org/?p=27063.

    +
    +
    +[13] +

    Eduardo Uchoa, Artur Pessoa, and Lorenza Moreno. Optimizing with Column Generation: advanced branch-cut-and-price algorithms. Technical Report L-2024-3, Cadernos do LOGIS-UFF, Universidade Federal Fluminense, Engenharia de Produção, 2024. URL: https://optimizingwithcolumngeneration.github.io.

    +
    +
    +[14] +

    François Vanderbeck. Implementing Mixed Integer Column Generation, pages 331–358. Springer US, Boston, MA, 2005. doi:10.1007/0-387-25486-2_12.

    +
    +
    +[15] +

    Laurence Wolsey. Integer Programming. Wiley, 2020. doi:10.1002/9781119606475.

    +
    +
    +[16] +

    Bo Zeng. A practical scheme to compute the pessimistic bilevel optimization problem. INFORMS Journal on Computing, 2020. doi:10.1287/ijoc.2019.0927.

    +
    +
    +[17] +

    Bo Zeng and Long Zhao. Solving two-stage robust optimization problems using a column-and-constraint generation method. Operations Research Letters, 41(5):457–461, 2013. doi:10.1016/j.orl.2013.05.003.

    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 000000000..5562d3673 --- /dev/null +++ b/search.html @@ -0,0 +1,245 @@ + + + + + + Search + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Search

    +
    +

    + Please activate JavaScript to enable the search + functionality. +

    +
    +

    + From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

    +
    + + + +
    + +
    + +
    + +
    + +
    +
    + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 000000000..b0f542a6a --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"A First Example": [[144, "a-first-example"]], "A Two-Stage Robust Facility Location Problem": [[155, "a-two-stage-robust-facility-location-problem"]], "API": [[17, null]], "About stage annotations": [[155, null]], "Accessing Constraints": [[133, "accessing-constraints"]], "Accessing Variables": [[139, "accessing-variables"]], "Accessing the Objective Function": [[138, "accessing-the-objective-function"]], "Accessing the Solution": [[145, "accessing-the-solution"]], "Adding User Cuts and Lazy Constraints": [[146, null]], "Adding User Cuts and Lazy Constraints [TODO]": [[123, null]], "Adding an Objective Function": [[138, "adding-an-objective-function"]], "Adjustable Robust Optimization (Two-stage)": [[154, null]], "AffExpr": [[69, null]], "AffExpr: Affine Expressions": [[135, "affexpr-affine-expressions"]], "An Example of Lazy Cut Constraints: Benders Optimality Cuts": [[146, "an-example-of-lazy-cut-constraints-benders-optimality-cuts"]], "An Example of User Cuts: Knapsack Cover Inequalities": [[146, "an-example-of-user-cuts-knapsack-cover-inequalities"]], "An Example: Knapsack Cover Cuts": [[142, "an-example-knapsack-cover-cuts"]], "And Then?": [[105, "and-then"]], "Annotation": [[65, null]], "Assigning Stages": [[155, "assigning-stages"]], "Assumption": [[151, null]], "Automatic Reformulation": [[125, "automatic-reformulation"]], "Basic Idea": [[150, "basic-idea"]], "Benchmark": [[86, null]], "BestBound": [[27, null]], "BestEstimate": [[28, null]], "Bilevel Optimization": [[2, null], [11, "bilevel-optimization"], [17, "bilevel-optimization"], [96, "bilevel-optimization"], [112, null], [117, "bilevel-optimization"]], "Bilevel::Description": [[3, null]], "Bilevel::KKT": [[4, null]], "Bilevel::MibS": [[0, null]], "Bilevel::Mibs": [[8, null]], "Bilevel::StrongDuality": [[7, null]], "Branch-and-Bound": [[61, "branch-and-bound"]], "Branch-and-Bound Algorithm": [[122, null]], "Branch-and-Price": [[61, "branch-and-price"]], "Branch-and-Price for the Generalized Assignment Problem": [[86, "branch-and-price-for-the-generalized-assignment-problem"]], "BranchAndBound": [[18, null]], "BranchAndBoundCallback": [[19, null]], "BranchAndBoundCallbackFactory": [[20, null]], "BreadthFirst": [[29, null]], "Build": [[105, "build"]], "Build instructions": [[87, "build-instructions"], [89, "build-instructions"]], "Build the Documentation": [[87, null]], "Building Examples": [[109, "building-examples"]], "Building Unit and Integration Tests": [[109, "building-unit-and-integration-tests"]], "Building the Documentation": [[88, "building-the-documentation"]], "Callback": [[12, null]], "CallbackFactory": [[13, null]], "Changing the Optimization Sense": [[138, "changing-the-optimization-sense"]], "Changing the Scoring Function": [[129, "changing-the-scoring-function"]], "Class List": [[11, null]], "Code coverage options": [[89, "code-coverage-options"]], "Column Generation and Branch-and-Price Algorithm": [[127, null]], "Combining Optimizers": [[144, "combining-optimizers"]], "Combining branch-and-price, column generation, and a penalty method for the generalized assignment problem": [[95, null]], "Complete Example": [[115, "complete-example"], [155, "complete-example"]], "Configure": [[105, "configure"]], "Constraints": [[133, null]], "Create Your Own Callback (Advanced) [TODO]": [[119, null]], "Creating Constraints": [[133, "creating-constraints"]], "Creating Several Variables at Once": [[139, "creating-several-variables-at-once"]], "Creating Variables": [[139, "creating-variables"]], "Creating Your Own Branching Rule (Advanced) [TODO]": [[118, null]], "Creating Your Own Callback": [[142, null]], "Creating Your Own Node Class (Advanced) [TODO]": [[120, null]], "Creating Your Own Node Selection Rule (Advanced) [TODO]": [[121, null]], "Creating Your Own Optimizer (Advanced) [TODO]": [[141, null]], "Creating a Model": [[137, "creating-a-model"]], "Creating the Branch-and-Price Algorithm": [[131, "creating-the-branch-and-price-algorithm"]], "Creating the Column Generation Algorithm": [[125, "creating-the-column-generation-algorithm"]], "Creating your own callback": [[12, "creating-your-own-callback"]], "Ctr": [[66, null]], "CtrType": [[62, null]], "Cuts::KnapsackCover": [[21, null]], "DantzigWolfe::ArtificialCosts": [[40, null]], "DantzigWolfe::FarkasPricing": [[42, null]], "DantzigWolfe::Neame": [[45, null]], "DantzigWolfe::Wentges": [[46, null]], "DantzigWolfeDecomposition": [[41, null]], "Decomposition": [[94, "decomposition"]], "Defining the Deterministic Model": [[155, "defining-the-deterministic-model"]], "Defining the Lower-Level Objective Function": [[115, "defining-the-lower-level-objective-function"]], "Defining the Uncertainty Set": [[155, "defining-the-uncertainty-set"]], "Dependencies": [[87, "dependencies"], [89, "dependencies"]], "DepthFirst": [[30, null]], "Deriving Single-level Reformulations": [[113, null]], "Describing the Lower-Level Problem": [[115, "describing-the-lower-level-problem"]], "Description": [[87, "description"]], "Detailed Answer": [[103, "detailed-answer"]], "Developers": [[88, null]], "Dim": [[67, null]], "Doxygen": [[0, "doxygen"], [1, "doxygen"], [3, "doxygen"], [4, "doxygen"], [5, "doxygen"], [6, "doxygen"], [7, "doxygen"], [18, "doxygen"], [19, "doxygen"], [20, "doxygen"], [21, "doxygen"], [23, "doxygen"], [24, "doxygen"], [25, "doxygen"], [27, "doxygen"], [28, "doxygen"], [29, "doxygen"], [30, "doxygen"], [31, "doxygen"], [33, "doxygen"], [34, "doxygen"], [35, "doxygen"], [36, "doxygen"], [37, "doxygen"], [38, "doxygen"], [40, "doxygen"], [41, "doxygen"], [42, "doxygen"], [43, "doxygen"], [44, "doxygen"], [45, "doxygen"], [46, "doxygen"], [48, "doxygen"], [49, "doxygen"], [50, "doxygen"], [51, "doxygen"], [52, "doxygen"], [53, "doxygen"], [54, "doxygen"], [55, "doxygen"], [56, "doxygen"], [57, "doxygen"], [58, "doxygen"], [59, "doxygen"], [60, "doxygen"], [65, "doxygen"], [66, "doxygen"], [67, "doxygen"], [68, "doxygen"], [69, "doxygen"], [70, "doxygen"], [71, "doxygen"], [73, "doxygen"], [74, "doxygen"], [75, "doxygen"], [76, "doxygen"], [77, "doxygen"], [78, "doxygen"], [79, "doxygen"], [80, "doxygen"], [82, "doxygen"]], "Env": [[68, null]], "Events": [[84, null]], "Example": [[12, null], [18, null], [19, null], [70, null], [89, null], [89, null], [104, null], [109, null], [109, null], [109, null], [109, null], [109, null], [109, null], [109, null], [109, null], [145, null]], "Example for Gurobi": [[105, null]], "Examples": [[96, null]], "Expressions": [[135, null]], "External Bilevel Solvers": [[10, null]], "External Solvers": [[2, "external-solvers"], [61, "external-solvers"]], "FAQ": [[102, null]], "FirstInfeasibleFound": [[33, null]], "Formal Definition": [[129, "formal-definition"]], "From Pessimistic Bilevel Optimization to Optimistic Bilevel Optimization": [[116, null]], "Full Strong Branching": [[129, "full-strong-branching"]], "GLPK": [[48, null]], "GLPK (Open-Source Solver)": [[109, "glpk-open-source-solver"]], "Getting Access to The Underlying Optimizer": [[140, null]], "Getting Started with idol": [[104, "getting-started-with-idol"]], "Getting the Reformulated Model": [[113, "getting-the-reformulated-model"], [113, "id1"]], "Giving Decomposition Instructions": [[125, "giving-decomposition-instructions"]], "Global Installation": [[105, null], [107, "global-installation"]], "Gurobi": [[49, null]], "Gurobi (Commercial Solver)": [[109, "gurobi-commercial-solver"]], "Heuristics::IntegerMaster": [[43, null]], "Heuristics::LocalBranching": [[23, null]], "Heuristics::RENS": [[24, null]], "Heuristics::SimpleRounding": [[25, null]], "HiGHS": [[50, null]], "HiGHS (Open-Source Solver)": [[109, "highs-open-source-solver"]], "How is the Optimality Gap Computed?": [[101, null]], "Implementation": [[90, "implementation"], [91, "implementation"], [92, "implementation"], [93, "implementation"], [94, "implementation"], [97, "implementation"], [98, "implementation"], [99, "implementation"], [100, "implementation"], [111, "implementation"], [116, "implementation"], [129, "implementation"]], "Implementation in idol": [[151, "implementation-in-idol"]], "Implementation with idol": [[95, "implementation-with-idol"]], "In Short": [[103, "in-short"]], "Install": [[105, "install"]], "Installation": [[107, null]], "Installation guide (Ubuntu)": [[87, "installation-guide-ubuntu"], [89, "installation-guide-ubuntu"]], "Instance": [[93, "instance"], [97, "instance"]], "Introduction": [[146, "introduction"], [150, null], [151, "introduction"]], "Is this a MIP Solver?": [[104, "is-this-a-mip-solver"]], "Iterating over the Variables and Constraints": [[137, "iterating-over-the-variables-and-constraints"]], "LazyCutCallback": [[14, null]], "LeastInfeasible": [[34, null]], "LinExpr": [[70, null]], "LinExpr: Linear Expressions": [[135, "linexpr-linear-expressions"]], "Linear Constraints": [[133, "linear-constraints"]], "Linear in What?": [[135, null]], "Linking Your C++ Project": [[106, null]], "Linking with External Solvers": [[109, "linking-with-external-solvers"]], "List of CMake Options": [[109, null]], "List of Optimizers Supporting Universal Callbacks": [[142, "list-of-optimizers-supporting-universal-callbacks"]], "Local Installation": [[107, "local-installation"], [108, null]], "Miscellaneous": [[61, "miscellaneous"]], "Mixed-Integer Optimization": [[17, "mixed-integer-optimization"], [96, "mixed-integer-optimization"], [117, "mixed-integer-optimization"], [132, null]], "Mixed-Integer Programming": [[11, "mixed-integer-programming"], [83, "mixed-integer-programming"]], "Mixed-integer Optimization": [[61, null]], "Model": [[71, null]], "Modeling": [[2, "modeling"], [61, "modeling"], [81, "modeling"]], "Modeling Adjustable Robust Problems": [[155, null]], "Modeling Steps": [[155, "modeling-steps"]], "Modeling a Bilevel Problem": [[115, null]], "Modeling a MIP with idol": [[136, null]], "Modeling and Solving with an External Solver (e.g., GLPK)": [[145, "modeling-and-solving-with-an-external-solver-e-g-glpk"]], "Modeling the High-Point Relaxation": [[115, "modeling-the-high-point-relaxation"]], "Models": [[137, null]], "Modifying Constraints": [[133, "modifying-constraints"]], "Modifying Variables": [[139, "modifying-variables"]], "More on Branching Rules\u2026": [[39, null]], "More on Cutting Planes\u2026": [[22, null]], "More on Heuristics\u2026": [[26, null]], "More on Node Selection Rules\u2026": [[32, null]], "More on Stabilization\u2026": [[47, null]], "More on coin-or/Osi (Cplex, Xpress, Cbc, \u2026)\u2026": [[56, null]], "Mosek": [[51, null]], "Mosek (Commercial Solver)": [[109, "mosek-commercial-solver"]], "MostInfeasible": [[35, null]], "Objective Functions": [[138, null]], "On the Impact of Coupling Constraints": [[150, "on-the-impact-of-coupling-constraints"]], "Optimizers::Bilevel::KKT": [[5, null]], "Optimizers::Bilevel::MibS": [[1, null], [9, null]], "Optimizers::Bilevel::StrongDuality": [[6, null]], "Optimizers::DantzigWolfeDecomposition": [[44, null]], "Optimizers::GLPK": [[52, null]], "Optimizers::Gurobi": [[53, null]], "Optimizers::HiGHS": [[54, null]], "Optimizers::Mosek": [[55, null]], "Optimizers::PADM": [[79, null]], "Options (External Solvers, etc.)": [[107, "options-external-solvers-etc"]], "OsiCbc": [[57, null]], "OsiClp": [[58, null]], "OsiCplex": [[59, null]], "OsiSymphony": [[60, null]], "Other optional dependencies": [[109, "other-optional-dependencies"]], "PADM": [[80, null]], "Penalty Alternating Direction Method": [[61, "penalty-alternating-direction-method"]], "Phases": [[129, "phases"]], "Point": [[72, null]], "Prerequisites": [[131, "prerequisites"]], "Problem Definition": [[90, "problem-definition"], [91, "problem-definition"], [92, "problem-definition"], [93, "problem-definition"], [94, "problem-definition"], [95, "problem-definition"], [97, "problem-definition"], [98, "problem-definition"], [99, "problem-definition"], [125, "problem-definition"]], "Problem Definition and Main Steps": [[115, "problem-definition-and-main-steps"]], "Problem Definition and Notation": [[150, "problem-definition-and-notation"]], "Problem Description": [[100, "problem-description"]], "Problem Formulation": [[113, "problem-formulation"]], "PseudoCost": [[36, null]], "QCtr": [[73, null]], "QuadExpr": [[74, null]], "QuadExpr: Quadratic Expressions": [[135, "quadexpr-quadratic-expressions"]], "Quadratic Constraints": [[133, "quadratic-constraints"]], "Reading Instances": [[111, "reading-instances"]], "Reading a Model from a File": [[137, "reading-a-model-from-a-file"]], "Reading and Writing Bilevel Instances (BOBILib)": [[111, null]], "References": [[110, null]], "Regarding Coupling Constraints": [[150, null]], "Related Classes": [[56, "related-classes"]], "Related Pages": [[88, "related-pages"], [105, "related-pages"]], "Removing Constraints": [[133, "removing-constraints"]], "Removing Variables": [[139, "removing-variables"]], "Restricted Strong Branching": [[129, "restricted-strong-branching"]], "Robust Optimization": [[11, "robust-optimization"], [17, "robust-optimization"], [81, null], [96, "robust-optimization"], [117, "robust-optimization"], [147, null]], "Robust::Description": [[82, null]], "Saving a Projected Solution": [[145, "saving-a-projected-solution"]], "Saving a Solution": [[145, "saving-a-solution"]], "Scoring Functions": [[129, "scoring-functions"]], "Separators": [[150, "separators"]], "Setup": [[114, "setup"]], "Single-level Reformulations": [[2, "single-level-reformulations"]], "Single-stage Robust Optimization": [[148, null]], "Solving": [[125, "solving"], [131, "solving"]], "Solving A Dantzig-Wolfe Reformulation": [[125, null]], "Solving Mixed-Integer Bilevel Problems with coin-or/MibS": [[114, null]], "Solving a MIPs": [[143, null]], "Solving a facility location problem with a custom branch-and-bound": [[93, null]], "Solving a generalized assignment problem by column generation and branch-and-price": [[94, null]], "Solving a knapsack problem with HiGHS": [[97, null]], "Solving a pessimistic bilevel problem using an optimistic reformulation": [[92, null]], "Solving a robust facility location problem by its deterministic equivalent": [[99, null]], "Solving an optimistic LP-LP bilevel problem with KKT reformulation": [[90, null]], "Solving an optimistic MILP-MILP bilevel problem with coin-or/MibS": [[91, null]], "Solving the KKT Reformulation directly": [[113, "solving-the-kkt-reformulation-directly"]], "Solving the Strong-duality Reformulation directly": [[113, "solving-the-strong-duality-reformulation-directly"]], "StrongBranching": [[37, null]], "Table of Contents": [[104, "table-of-contents"], [109, "table-of-contents"], [111, "table-of-contents"], [113, "table-of-contents"], [114, "table-of-contents"], [115, "table-of-contents"], [116, "table-of-contents"], [125, "table-of-contents"], [129, "table-of-contents"], [131, "table-of-contents"], [133, "table-of-contents"], [135, "table-of-contents"], [137, "table-of-contents"], [138, "table-of-contents"], [139, "table-of-contents"], [142, "table-of-contents"], [144, "table-of-contents"], [145, "table-of-contents"], [146, "table-of-contents"], [150, "table-of-contents"], [151, "table-of-contents"], [155, "table-of-contents"]], "TempCtr": [[75, null]], "TempQCtr": [[76, null]], "TempVar": [[77, null]], "Temporary Constraints": [[133, "temporary-constraints"]], "The Algorithm": [[150, "the-algorithm"]], "The Basics": [[142, "the-basics"]], "The Concept of Optimizer and OptimizerFactory": [[144, null]], "The Dantzig-Wolfe Reformulation": [[125, "the-dantzig-wolfe-reformulation"]], "The Environment": [[134, null]], "The Equivalent Optimistic Problem": [[116, "the-equivalent-optimistic-problem"]], "The Format": [[111, "the-format"]], "The Integer Master Heuristic [TODO]": [[128, null]], "The KKT Reformulation": [[113, "the-kkt-reformulation"]], "The Natural Formulation": [[125, "the-natural-formulation"], [125, "id1"]], "The Strong-duality Reformulation": [[113, "the-strong-duality-reformulation"]], "Tolerances": [[64, null]], "Tutorials": [[117, null]], "Two-Stage Robust Facility Location Problem (CCG)": [[100, null]], "Type List": [[83, null]], "UniformlyRandom": [[38, null]], "Unit Tests and Integration": [[88, "unit-tests-and-integration"]], "Unit and Integration Tests": [[89, null]], "Universal Callbacks": [[16, null], [85, null]], "UserCutCallback": [[15, null]], "UserCutCallback and LazyCutCallback": [[12, "usercutcallback-and-lazycutcallback"]], "Using CPLEX for Feasibility Check": [[114, "using-cplex-for-feasibility-check"]], "Using Column-and-Constraint-Generation": [[149, null]], "Using Eigen": [[109, "using-eigen"]], "Using In-Out Stabilization [TODO]": [[126, null]], "Using MibS": [[114, "using-mibs"]], "Using Model::add_var": [[139, "using-model-add-var"]], "Using Model::add_vars": [[139, "using-model-add-vars"]], "Using Strong Branching": [[129, null]], "Using Trust Region Stabilization": [[151, null]], "Using Var::make_vector and Model::add_vector": [[139, "using-var-make-vector-and-model-add-vector"]], "Using affine decision rules to solve a two-stage facility location problem with facility disruption": [[98, null]], "Using an External Solver and Accessing the Solution": [[145, null]], "Using martinus/robin-hood-hashing hash map": [[109, "using-martinus-robin-hood-hashing-hash-map"]], "Using the Var class and Model::add": [[139, "using-the-var-class-and-model-add"]], "Var": [[78, null]], "VarType": [[63, null]], "Variables": [[139, null]], "Variables Types": [[139, "variables-types"]], "Variants": [[129, "variants"]], "What is idol?": [[104, null]], "Why is Eigen Necessary to Solve QCQPs with Mosek?": [[103, null]], "WorstBound": [[31, null]], "Writing A Branch-and-Cut-and-Price Algorithm [TODO]": [[130, null]], "Writing A Branch-and-Price Algorithm": [[131, null]], "Writing Instances": [[111, "writing-instances"]], "Writing Your Own Separator (Advanced) [TODO]": [[153, null]], "Writing a Column-and-Constraint-Generation Algorithm": [[152, null]], "Writing a Model to a File": [[137, "writing-a-model-to-a-file"]], "Writing an LP-based Branch-and-Bound [TODO]": [[124, null]], "coin-or (Open-Source Solvers)": [[109, "coin-or-open-source-solvers"]]}, "docnames": ["api/bilevel/external-solvers/MibS", "api/bilevel/external-solvers/Optimizers_MibS", "api/bilevel/index", "api/bilevel/modeling/Description", "api/bilevel/single-level/KKT", "api/bilevel/single-level/Optimizers_KKT", "api/bilevel/single-level/Optimizers_StrongDuality", "api/bilevel/single-level/StrongDuality", "api/classes/external-bilevel/MibS", "api/classes/external-bilevel/Optimizers_MibS", "api/classes/external-bilevel/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/index", "api/mixed-integer/branch-and-bound/BranchAndBound", "api/mixed-integer/branch-and-bound/BranchAndBoundCallback", "api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory", "api/mixed-integer/branch-and-bound/cuts/KnapsackCover", "api/mixed-integer/branch-and-bound/cuts/index", "api/mixed-integer/branch-and-bound/heuristics/LocalBranching", "api/mixed-integer/branch-and-bound/heuristics/RENS", "api/mixed-integer/branch-and-bound/heuristics/SimpleRounding", "api/mixed-integer/branch-and-bound/heuristics/index", "api/mixed-integer/branch-and-bound/node-selection/BestBound", "api/mixed-integer/branch-and-bound/node-selection/BestEstimate", "api/mixed-integer/branch-and-bound/node-selection/BreadthFirst", "api/mixed-integer/branch-and-bound/node-selection/DepthFirst", "api/mixed-integer/branch-and-bound/node-selection/WorstBound", "api/mixed-integer/branch-and-bound/node-selection/index", "api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound", "api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible", "api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible", "api/mixed-integer/branch-and-bound/variable-selection/PseudoCost", "api/mixed-integer/branch-and-bound/variable-selection/StrongBranching", "api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom", "api/mixed-integer/branch-and-bound/variable-selection/index", "api/mixed-integer/column-generation/ArtificialCosts", "api/mixed-integer/column-generation/DantzigWolfeDecomposition", "api/mixed-integer/column-generation/FarkasPricing", "api/mixed-integer/column-generation/IntegerMaster", "api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition", "api/mixed-integer/column-generation/stabilization/Neame", "api/mixed-integer/column-generation/stabilization/Wentges", "api/mixed-integer/column-generation/stabilization/index", "api/mixed-integer/external-solvers/GLPK", "api/mixed-integer/external-solvers/Gurobi", "api/mixed-integer/external-solvers/HiGHS", "api/mixed-integer/external-solvers/Mosek", "api/mixed-integer/external-solvers/Optimizers_GLPK", "api/mixed-integer/external-solvers/Optimizers_Gurobi", "api/mixed-integer/external-solvers/Optimizers_HiGHS", "api/mixed-integer/external-solvers/Optimizers_Mosek", "api/mixed-integer/external-solvers/Osi", "api/mixed-integer/external-solvers/Osi/OsiCbc", "api/mixed-integer/external-solvers/Osi/OsiClp", "api/mixed-integer/external-solvers/Osi/OsiCplex", "api/mixed-integer/external-solvers/Osi/OsiSymphony", "api/mixed-integer/index", "api/mixed-integer/misc/CtrType", "api/mixed-integer/misc/VarType", "api/mixed-integer/misc/tolerances", "api/mixed-integer/modeling/Annotation", "api/mixed-integer/modeling/Ctr", "api/mixed-integer/modeling/Dim", "api/mixed-integer/modeling/Env", "api/mixed-integer/modeling/Expr", "api/mixed-integer/modeling/LinExpr", "api/mixed-integer/modeling/Model", "api/mixed-integer/modeling/Point", "api/mixed-integer/modeling/QCtr", "api/mixed-integer/modeling/QuadExpr", "api/mixed-integer/modeling/TempCtr", "api/mixed-integer/modeling/TempQCtr", "api/mixed-integer/modeling/TempVar", "api/mixed-integer/modeling/Var", "api/mixed-integer/padm/Optimizers_PADM", "api/mixed-integer/padm/PADM", "api/robust/index", "api/robust/modeling/Description", "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/bilevel-pessimistic", "examples/facility-location-problem", "examples/generalized-assignment-problem-bap", "examples/generalized-assignment-problem-penalty-bap", "examples/index", "examples/knapsack-problem", "examples/robust-adr", "examples/robust-determistic", "examples/two-stage-robust-facility-location-problem", "faq/gap", "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/files", "tutorials/bilevel-optimization/index", "tutorials/bilevel-optimization/kkt", "tutorials/bilevel-optimization/mibs", "tutorials/bilevel-optimization/modeling", "tutorials/bilevel-optimization/pessimistic", "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/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/optimizers", "tutorials/mixed-integer-programming/optimizers/solving", "tutorials/mixed-integer-programming/optimizers/universal-callbacks", "tutorials/robust-optimization/index", "tutorials/robust-optimization/single-stage/index", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/index", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator", "tutorials/robust-optimization/two-stage/index", "tutorials/robust-optimization/two-stage/modeling"], "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/bilevel/external-solvers/MibS.rst", "api/bilevel/external-solvers/Optimizers_MibS.rst", "api/bilevel/index.rst", "api/bilevel/modeling/Description.rst", "api/bilevel/single-level/KKT.rst", "api/bilevel/single-level/Optimizers_KKT.rst", "api/bilevel/single-level/Optimizers_StrongDuality.rst", "api/bilevel/single-level/StrongDuality.rst", "api/classes/external-bilevel/MibS.rst", "api/classes/external-bilevel/Optimizers_MibS.rst", "api/classes/external-bilevel/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/index.rst", "api/mixed-integer/branch-and-bound/BranchAndBound.rst", "api/mixed-integer/branch-and-bound/BranchAndBoundCallback.rst", "api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.rst", "api/mixed-integer/branch-and-bound/cuts/KnapsackCover.rst", "api/mixed-integer/branch-and-bound/cuts/index.rst", "api/mixed-integer/branch-and-bound/heuristics/LocalBranching.rst", "api/mixed-integer/branch-and-bound/heuristics/RENS.rst", "api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.rst", "api/mixed-integer/branch-and-bound/heuristics/index.rst", "api/mixed-integer/branch-and-bound/node-selection/BestBound.rst", "api/mixed-integer/branch-and-bound/node-selection/BestEstimate.rst", "api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.rst", "api/mixed-integer/branch-and-bound/node-selection/DepthFirst.rst", "api/mixed-integer/branch-and-bound/node-selection/WorstBound.rst", "api/mixed-integer/branch-and-bound/node-selection/index.rst", "api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.rst", "api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.rst", "api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.rst", "api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.rst", "api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.rst", "api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.rst", "api/mixed-integer/branch-and-bound/variable-selection/index.rst", "api/mixed-integer/column-generation/ArtificialCosts.rst", "api/mixed-integer/column-generation/DantzigWolfeDecomposition.rst", "api/mixed-integer/column-generation/FarkasPricing.rst", "api/mixed-integer/column-generation/IntegerMaster.rst", "api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.rst", "api/mixed-integer/column-generation/stabilization/Neame.rst", "api/mixed-integer/column-generation/stabilization/Wentges.rst", "api/mixed-integer/column-generation/stabilization/index.rst", "api/mixed-integer/external-solvers/GLPK.rst", "api/mixed-integer/external-solvers/Gurobi.rst", "api/mixed-integer/external-solvers/HiGHS.rst", "api/mixed-integer/external-solvers/Mosek.rst", "api/mixed-integer/external-solvers/Optimizers_GLPK.rst", "api/mixed-integer/external-solvers/Optimizers_Gurobi.rst", "api/mixed-integer/external-solvers/Optimizers_HiGHS.rst", "api/mixed-integer/external-solvers/Optimizers_Mosek.rst", "api/mixed-integer/external-solvers/Osi.rst", "api/mixed-integer/external-solvers/Osi/OsiCbc.rst", "api/mixed-integer/external-solvers/Osi/OsiClp.rst", "api/mixed-integer/external-solvers/Osi/OsiCplex.rst", "api/mixed-integer/external-solvers/Osi/OsiSymphony.rst", "api/mixed-integer/index.rst", "api/mixed-integer/misc/CtrType.rst", "api/mixed-integer/misc/VarType.rst", "api/mixed-integer/misc/tolerances.rst", "api/mixed-integer/modeling/Annotation.rst", "api/mixed-integer/modeling/Ctr.rst", "api/mixed-integer/modeling/Dim.rst", "api/mixed-integer/modeling/Env.rst", "api/mixed-integer/modeling/Expr.rst", "api/mixed-integer/modeling/LinExpr.rst", "api/mixed-integer/modeling/Model.rst", "api/mixed-integer/modeling/Point.rst", "api/mixed-integer/modeling/QCtr.rst", "api/mixed-integer/modeling/QuadExpr.rst", "api/mixed-integer/modeling/TempCtr.rst", "api/mixed-integer/modeling/TempQCtr.rst", "api/mixed-integer/modeling/TempVar.rst", "api/mixed-integer/modeling/Var.rst", "api/mixed-integer/padm/Optimizers_PADM.rst", "api/mixed-integer/padm/PADM.rst", "api/robust/index.rst", "api/robust/modeling/Description.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/bilevel-pessimistic.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/robust-adr.rst", "examples/robust-determistic.rst", "examples/two-stage-robust-facility-location-problem.rst", "faq/gap.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/files.rst", "tutorials/bilevel-optimization/index.rst", "tutorials/bilevel-optimization/kkt.rst", "tutorials/bilevel-optimization/mibs.rst", "tutorials/bilevel-optimization/modeling.rst", "tutorials/bilevel-optimization/pessimistic.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/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/optimizers.rst", "tutorials/mixed-integer-programming/optimizers/solving.rst", "tutorials/mixed-integer-programming/optimizers/universal-callbacks.rst", "tutorials/robust-optimization/index.rst", "tutorials/robust-optimization/single-stage/index.rst", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.rst", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.rst", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.rst", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.rst", "tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.rst", "tutorials/robust-optimization/two-stage/index.rst", "tutorials/robust-optimization/two-stage/modeling.rst"], "indexentries": {"idol (c++ type)": [[64, "_CPPv44idol", false]], "idol::absolute_gap (c++ function)": [[64, "_CPPv4N4idol12absolute_gapEdd", false]], "idol::affexpr (c++ class)": [[69, "_CPPv4I00EN4idol7AffExprE", false]], "idol::affexpr::affexpr (c++ function)": [[69, "_CPPv4N4idol7AffExpr7AffExprE6ValueT", false], [69, "_CPPv4N4idol7AffExpr7AffExprE7LinExprI4KeyTE", false], [69, "_CPPv4N4idol7AffExpr7AffExprERK4KeyT", false], [69, "_CPPv4N4idol7AffExpr7AffExprERK7AffExpr", false], [69, "_CPPv4N4idol7AffExpr7AffExprERR7AffExpr", false], [69, "_CPPv4N4idol7AffExpr7AffExprEv", false]], "idol::affexpr::clear (c++ function)": [[69, "_CPPv4N4idol7AffExpr5clearEv", false]], "idol::affexpr::constant (c++ function)": [[69, "_CPPv4N4idol7AffExpr8constantEv", false], [69, "_CPPv4NK4idol7AffExpr8constantEv", false]], "idol::affexpr::is_zero (c++ function)": [[69, "_CPPv4NK4idol7AffExpr7is_zeroEd", false]], "idol::affexpr::linear (c++ function)": [[69, "_CPPv4N4idol7AffExpr6linearEv", false], [69, "_CPPv4NK4idol7AffExpr6linearEv", false]], "idol::affexpr::operator*= (c++ function)": [[69, "_CPPv4N4idol7AffExprmLEd", false]], "idol::affexpr::operator+= (c++ function)": [[69, "_CPPv4N4idol7AffExprpLERK7AffExpr", false]], "idol::affexpr::operator- (c++ function)": [[69, "_CPPv4NK4idol7AffExprmiEv", false]], "idol::affexpr::operator-= (c++ function)": [[69, "_CPPv4N4idol7AffExprmIERK7AffExpr", false]], "idol::affexpr::operator/= (c++ function)": [[69, "_CPPv4N4idol7AffExprdVEd", false]], "idol::affexpr::operator= (c++ function)": [[69, "_CPPv4N4idol7AffExpraSERK7AffExpr", false], [69, "_CPPv4N4idol7AffExpraSERR7AffExpr", false]], "idol::affexpr::zero (c++ member)": [[69, "_CPPv4N4idol7AffExpr4ZeroE", false]], "idol::affexpr::~affexpr (c++ function)": [[69, "_CPPv4N4idol7AffExprD0Ev", false]], "idol::annotation (c++ class)": [[65, "_CPPv4I0EN4idol10AnnotationE", false]], "idol::annotation::annotation (c++ function)": [[65, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", false], [65, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", false]], "idol::annotation::default_value (c++ function)": [[65, "_CPPv4NK4idol10Annotation13default_valueEv", false]], "idol::annotation::env (c++ function)": [[65, "_CPPv4NK4idol10Annotation3envEv", false]], "idol::annotation::free (c++ function)": [[65, "_CPPv4N4idol10Annotation4freeEv", false]], "idol::annotation::has_default (c++ function)": [[65, "_CPPv4NK4idol10Annotation11has_defaultEv", false]], "idol::annotation::id (c++ function)": [[65, "_CPPv4NK4idol10Annotation2idEv", false]], "idol::annotation::make_with_default_value (c++ function)": [[65, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI6ValueTER3EnvNSt6stringEDpRR5ArgsT", false]], "idol::annotation::name (c++ function)": [[65, "_CPPv4NK4idol10Annotation4nameEv", false]], "idol::bestbound (c++ class)": [[27, "_CPPv4N4idol9BestBoundE", false]], "idol::bestbound::strategy (c++ class)": [[27, "_CPPv4I0EN4idol9BestBound8StrategyE", false]], "idol::bestbound::strategy::clone (c++ function)": [[27, "_CPPv4NK4idol9BestBound8Strategy5cloneEv", false]], "idol::bestbound::strategy::operator() (c++ function)": [[27, "_CPPv4NK4idol9BestBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::bestbound::strategy::strategy (c++ function)": [[27, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", false]], "idol::bestestimate (c++ class)": [[28, "_CPPv4N4idol12BestEstimateE", false]], "idol::bestestimate::strategy (c++ class)": [[28, "_CPPv4I0EN4idol12BestEstimate8StrategyE", false]], "idol::bestestimate::strategy::clone (c++ function)": [[28, "_CPPv4NK4idol12BestEstimate8Strategy5cloneEv", false]], "idol::bestestimate::strategy::operator() (c++ function)": [[28, "_CPPv4NK4idol12BestEstimate8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::bestestimate::strategy::strategy (c++ function)": [[28, "_CPPv4N4idol12BestEstimate8Strategy8StrategyERK12BestEstimate", false]], "idol::bilevel::description (c++ class)": [[3, "_CPPv4N4idol7Bilevel11DescriptionE", false]], "idol::bilevel::description::description (c++ function)": [[3, "_CPPv4N4idol7Bilevel11Description11DescriptionER3Env", false], [3, "_CPPv4N4idol7Bilevel11Description11DescriptionER3EnvRKNSt6stringE", false], [3, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE", false], [3, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE7AffExprI3VarE", false]], "idol::bilevel::description::follower_obj (c++ function)": [[3, "_CPPv4NK4idol7Bilevel11Description12follower_objEv", false]], "idol::bilevel::description::is_lower (c++ function)": [[3, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK3Ctr", false], [3, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK3Var", false], [3, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK4QCtr", false]], "idol::bilevel::description::is_upper (c++ function)": [[3, "_CPPv4NK4idol7Bilevel11Description8is_upperERK3Ctr", false], [3, "_CPPv4NK4idol7Bilevel11Description8is_upperERK3Var", false], [3, "_CPPv4NK4idol7Bilevel11Description8is_upperERK4QCtr", false]], "idol::bilevel::description::lower_level (c++ function)": [[3, "_CPPv4NK4idol7Bilevel11Description11lower_levelEv", false]], "idol::bilevel::description::make_lower_level (c++ function)": [[3, "_CPPv4I_jEN4idol7Bilevel11Description16make_lower_levelEvRK6VectorI3Var1NE", false], [3, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK3Ctr", false], [3, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK3Var", false], [3, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK4QCtr", false]], "idol::bilevel::description::make_upper_level (c++ function)": [[3, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK3Ctr", false], [3, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK3Var", false], [3, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK4QCtr", false]], "idol::bilevel::description::set_lower_level_obj (c++ function)": [[3, "_CPPv4N4idol7Bilevel11Description19set_lower_level_objE8QuadExprI3VarE", false]], "idol::bilevel::kkt (c++ class)": [[4, "_CPPv4N4idol7Bilevel3KKTE", false]], "idol::bilevel::kkt::as (c++ function)": [[4, "_CPPv4I0EN4idol7Bilevel3KKT2asER1Tv", false], [4, "_CPPv4I0ENK4idol7Bilevel3KKT2asERK1Tv", false]], "idol::bilevel::kkt::clone (c++ function)": [[4, "_CPPv4NK4idol7Bilevel3KKT5cloneEv", false]], "idol::bilevel::kkt::conditional (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEE", false], [4, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEERKNSt8functionIFvR3KKTEEE", false]], "idol::bilevel::kkt::is (c++ function)": [[4, "_CPPv4I0ENK4idol7Bilevel3KKT2isEbv", false]], "idol::bilevel::kkt::kkt (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT3KKTERK3KKT", false], [4, "_CPPv4N4idol7Bilevel3KKT3KKTERKN7Bilevel11DescriptionE", false]], "idol::bilevel::kkt::make_model (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionE", false], [4, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionERK10AnnotationIdE", false]], "idol::bilevel::kkt::operator() (c++ function)": [[4, "_CPPv4NK4idol7Bilevel3KKTclERK5Model", false]], "idol::bilevel::kkt::operator+= (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKTpLERK16OptimizerFactory", false]], "idol::bilevel::kkt::with_absolute_gap_tolerance (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT27with_absolute_gap_toleranceEd", false]], "idol::bilevel::kkt::with_best_bound_stop (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT20with_best_bound_stopEd", false]], "idol::bilevel::kkt::with_best_obj_stop (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT18with_best_obj_stopEd", false]], "idol::bilevel::kkt::with_big_m (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT10with_big_MERK10AnnotationIdE", false]], "idol::bilevel::kkt::with_infeasible_or_unbounded_info (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT33with_infeasible_or_unbounded_infoEb", false]], "idol::bilevel::kkt::with_iteration_limit (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT20with_iteration_limitEj", false]], "idol::bilevel::kkt::with_logs (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT9with_logsEb", false]], "idol::bilevel::kkt::with_presolve (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT13with_presolveEb", false]], "idol::bilevel::kkt::with_relative_gap_tolerance (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT27with_relative_gap_toleranceEd", false]], "idol::bilevel::kkt::with_single_level_optimizer (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT27with_single_level_optimizerERK16OptimizerFactory", false]], "idol::bilevel::kkt::with_thread_limit (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT17with_thread_limitEj", false]], "idol::bilevel::kkt::with_time_limit (c++ function)": [[4, "_CPPv4N4idol7Bilevel3KKT15with_time_limitEd", false]], "idol::bilevel::mibs (c++ class)": [[0, "_CPPv4N4idol7Bilevel4MibSE", false], [8, "_CPPv4N4idol7Bilevel4MibSE", false]], "idol::bilevel::mibs::add_callback (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS12add_callbackERK15CallbackFactory", false], [8, "_CPPv4N4idol7Bilevel4MibS12add_callbackERK15CallbackFactory", false]], "idol::bilevel::mibs::as (c++ function)": [[0, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", false], [0, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", false], [8, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", false], [8, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", false]], "idol::bilevel::mibs::clone (c++ function)": [[0, "_CPPv4NK4idol7Bilevel4MibS5cloneEv", false], [8, "_CPPv4NK4idol7Bilevel4MibS5cloneEv", false]], "idol::bilevel::mibs::conditional (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", false], [0, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", false], [8, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", false], [8, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", false]], "idol::bilevel::mibs::is (c++ function)": [[0, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", false], [8, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", false]], "idol::bilevel::mibs::mibs (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel11DescriptionE", false], [0, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", false], [0, "_CPPv4N4idol7Bilevel4MibS4MibSERR4MibS", false], [8, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel11DescriptionE", false], [8, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", false], [8, "_CPPv4N4idol7Bilevel4MibS4MibSERR4MibS", false]], "idol::bilevel::mibs::operator() (c++ function)": [[0, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", false], [8, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", false]], "idol::bilevel::mibs::operator= (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibSaSERK4MibS", false], [0, "_CPPv4N4idol7Bilevel4MibSaSERR4MibS", false], [8, "_CPPv4N4idol7Bilevel4MibSaSERK4MibS", false], [8, "_CPPv4N4idol7Bilevel4MibSaSERR4MibS", false]], "idol::bilevel::mibs::with_absolute_gap_tolerance (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", false], [8, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", false]], "idol::bilevel::mibs::with_best_bound_stop (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", false], [8, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", false]], "idol::bilevel::mibs::with_best_obj_stop (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", false], [8, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", false]], "idol::bilevel::mibs::with_cplex_for_feasibility (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS26with_cplex_for_feasibilityEb", false], [8, "_CPPv4N4idol7Bilevel4MibS26with_cplex_for_feasibilityEb", false]], "idol::bilevel::mibs::with_file_interface (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS19with_file_interfaceEb", false], [8, "_CPPv4N4idol7Bilevel4MibS19with_file_interfaceEb", false]], "idol::bilevel::mibs::with_infeasible_or_unbounded_info (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", false], [8, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", false]], "idol::bilevel::mibs::with_iteration_limit (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", false], [8, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", false]], "idol::bilevel::mibs::with_logs (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", false], [8, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", false]], "idol::bilevel::mibs::with_presolve (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", false], [8, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", false]], "idol::bilevel::mibs::with_relative_gap_tolerance (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", false], [8, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", false]], "idol::bilevel::mibs::with_thread_limit (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", false], [8, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", false]], "idol::bilevel::mibs::with_time_limit (c++ function)": [[0, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", false], [8, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", false]], "idol::bilevel::strongduality (c++ class)": [[7, "_CPPv4N4idol7Bilevel13StrongDualityE", false]], "idol::bilevel::strongduality::as (c++ function)": [[7, "_CPPv4I0EN4idol7Bilevel13StrongDuality2asER1Tv", false], [7, "_CPPv4I0ENK4idol7Bilevel13StrongDuality2asERK1Tv", false]], "idol::bilevel::strongduality::clone (c++ function)": [[7, "_CPPv4NK4idol7Bilevel13StrongDuality5cloneEv", false]], "idol::bilevel::strongduality::conditional (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEE", false], [7, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEERKNSt8functionIFvR13StrongDualityEEE", false]], "idol::bilevel::strongduality::is (c++ function)": [[7, "_CPPv4I0ENK4idol7Bilevel13StrongDuality2isEbv", false]], "idol::bilevel::strongduality::make_model (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality10make_modelERK5ModelRKN7Bilevel11DescriptionE", false]], "idol::bilevel::strongduality::operator() (c++ function)": [[7, "_CPPv4NK4idol7Bilevel13StrongDualityclERK5Model", false]], "idol::bilevel::strongduality::operator+= (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDualitypLERK16OptimizerFactory", false]], "idol::bilevel::strongduality::strongduality (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality13StrongDualityERK13StrongDuality", false], [7, "_CPPv4N4idol7Bilevel13StrongDuality13StrongDualityERKN7Bilevel11DescriptionE", false]], "idol::bilevel::strongduality::with_absolute_gap_tolerance (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality27with_absolute_gap_toleranceEd", false]], "idol::bilevel::strongduality::with_best_bound_stop (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality20with_best_bound_stopEd", false]], "idol::bilevel::strongduality::with_best_obj_stop (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality18with_best_obj_stopEd", false]], "idol::bilevel::strongduality::with_infeasible_or_unbounded_info (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality33with_infeasible_or_unbounded_infoEb", false]], "idol::bilevel::strongduality::with_iteration_limit (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality20with_iteration_limitEj", false]], "idol::bilevel::strongduality::with_logs (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality9with_logsEb", false]], "idol::bilevel::strongduality::with_presolve (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality13with_presolveEb", false]], "idol::bilevel::strongduality::with_relative_gap_tolerance (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality27with_relative_gap_toleranceEd", false]], "idol::bilevel::strongduality::with_single_level_optimizer (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality27with_single_level_optimizerERK16OptimizerFactory", false]], "idol::bilevel::strongduality::with_thread_limit (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality17with_thread_limitEj", false]], "idol::bilevel::strongduality::with_time_limit (c++ function)": [[7, "_CPPv4N4idol7Bilevel13StrongDuality15with_time_limitEd", false]], "idol::branchandbound (c++ class)": [[18, "_CPPv4I0EN4idol14BranchAndBoundE", false]], "idol::branchandbound::add_callback (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound12add_callbackERK15CallbackFactory", false], [18, "_CPPv4N4idol14BranchAndBound12add_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", false]], "idol::branchandbound::as (c++ function)": [[18, "_CPPv4I0EN4idol14BranchAndBound2asER1Tv", false], [18, "_CPPv4I0ENK4idol14BranchAndBound2asERK1Tv", false]], "idol::branchandbound::branchandbound (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERK14BranchAndBound", false], [18, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERR14BranchAndBound", false], [18, "_CPPv4N4idol14BranchAndBound14BranchAndBoundEv", false]], "idol::branchandbound::clone (c++ function)": [[18, "_CPPv4NK4idol14BranchAndBound5cloneEv", false]], "idol::branchandbound::conditional (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEE", false], [18, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", false]], "idol::branchandbound::is (c++ function)": [[18, "_CPPv4I0ENK4idol14BranchAndBound2isEbv", false]], "idol::branchandbound::only_if_has_strategy (c++ type)": [[18, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", false]], "idol::branchandbound::operator() (c++ function)": [[18, "_CPPv4NK4idol14BranchAndBoundclERK5Model", false]], "idol::branchandbound::operator+= (c++ function)": [[18, "_CPPv4N4idol14BranchAndBoundpLERK16OptimizerFactory", false]], "idol::branchandbound::operator= (c++ function)": [[18, "_CPPv4N4idol14BranchAndBoundaSERK14BranchAndBound", false], [18, "_CPPv4N4idol14BranchAndBoundaSERR14BranchAndBound", false]], "idol::branchandbound::set_node_optimizer (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound18set_node_optimizerERK16OptimizerFactory", false]], "idol::branchandbound::with_absolute_gap_tolerance (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", false]], "idol::branchandbound::with_best_bound_stop (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", false]], "idol::branchandbound::with_best_obj_stop (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", false]], "idol::branchandbound::with_branching_rule (c++ function)": [[18, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", false], [18, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", false], [18, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", false]], "idol::branchandbound::with_infeasible_or_unbounded_info (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", false]], "idol::branchandbound::with_iteration_limit (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound20with_iteration_limitEj", false]], "idol::branchandbound::with_logger (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound11with_loggerERKN4Logs14BranchAndBound7FactoryI5NodeTEE", false]], "idol::branchandbound::with_logs (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound9with_logsEb", false]], "idol::branchandbound::with_node_optimizer (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", false]], "idol::branchandbound::with_node_selection_rule (c++ function)": [[18, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", false], [18, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", false], [18, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", false]], "idol::branchandbound::with_presolve (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound13with_presolveEb", false]], "idol::branchandbound::with_relative_gap_tolerance (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", false]], "idol::branchandbound::with_subtree_depth (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", false]], "idol::branchandbound::with_thread_limit (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", false]], "idol::branchandbound::with_time_limit (c++ function)": [[18, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", false]], "idol::branchandboundcallback (c++ class)": [[19, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", false]], "idol::branchandboundcallback::add_lazy_cut (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", false]], "idol::branchandboundcallback::add_local_variable_branching (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback28add_local_variable_branchingERK3Var7CtrTyped", false]], "idol::branchandboundcallback::add_user_cut (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", false]], "idol::branchandboundcallback::best_bound (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback10best_boundEv", false]], "idol::branchandboundcallback::best_obj (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback8best_objEv", false]], "idol::branchandboundcallback::initialize (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback10initializeEv", false]], "idol::branchandboundcallback::log_after_termination (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback21log_after_terminationEv", false]], "idol::branchandboundcallback::node (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback4nodeEv", false]], "idol::branchandboundcallback::operator() (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", false]], "idol::branchandboundcallback::original_model (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback14original_modelEv", false]], "idol::branchandboundcallback::relaxation (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback10relaxationEv", false]], "idol::branchandboundcallback::side_effect_registry (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback20side_effect_registryEv", false]], "idol::branchandboundcallback::submit_bound (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", false]], "idol::branchandboundcallback::submit_heuristic_solution (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", false]], "idol::branchandboundcallback::terminate (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallback9terminateEv", false]], "idol::branchandboundcallback::time (c++ function)": [[19, "_CPPv4NK4idol22BranchAndBoundCallback4timeEv", false]], "idol::branchandboundcallback::~branchandboundcallback (c++ function)": [[19, "_CPPv4N4idol22BranchAndBoundCallbackD0Ev", false]], "idol::branchandboundcallbackfactory (c++ class)": [[20, "_CPPv4I0EN4idol29BranchAndBoundCallbackFactoryE", false]], "idol::branchandboundcallbackfactory::clone (c++ function)": [[20, "_CPPv4NK4idol29BranchAndBoundCallbackFactory5cloneEv", false]], "idol::branchandboundcallbackfactory::operator() (c++ function)": [[20, "_CPPv4N4idol29BranchAndBoundCallbackFactoryclEv", false]], "idol::branchandboundcallbackfactory::~branchandboundcallbackfactory (c++ function)": [[20, "_CPPv4N4idol29BranchAndBoundCallbackFactoryD0Ev", false]], "idol::breadthfirst (c++ class)": [[29, "_CPPv4N4idol12BreadthFirstE", false]], "idol::breadthfirst::strategy (c++ class)": [[29, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", false]], "idol::breadthfirst::strategy::clone (c++ function)": [[29, "_CPPv4NK4idol12BreadthFirst8Strategy5cloneEv", false]], "idol::breadthfirst::strategy::operator() (c++ function)": [[29, "_CPPv4NK4idol12BreadthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::breadthfirst::strategy::strategy (c++ function)": [[29, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", false]], "idol::callback (c++ class)": [[12, "_CPPv4N4idol8CallbackE", false]], "idol::callback::add_lazy_cut (c++ function)": [[12, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", false]], "idol::callback::add_user_cut (c++ function)": [[12, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", false]], "idol::callback::best_bound (c++ function)": [[12, "_CPPv4NK4idol8Callback10best_boundEv", false]], "idol::callback::best_obj (c++ function)": [[12, "_CPPv4NK4idol8Callback8best_objEv", false]], "idol::callback::operator() (c++ function)": [[12, "_CPPv4N4idol8CallbackclE13CallbackEvent", false]], "idol::callback::original_model (c++ function)": [[12, "_CPPv4NK4idol8Callback14original_modelEv", false]], "idol::callback::primal_solution (c++ function)": [[12, "_CPPv4NK4idol8Callback15primal_solutionEv", false]], "idol::callback::submit_heuristic_solution (c++ function)": [[12, "_CPPv4N4idol8Callback25submit_heuristic_solutionERK11PrimalPoint", false]], "idol::callback::terminate (c++ function)": [[12, "_CPPv4N4idol8Callback9terminateEv", false]], "idol::callback::time (c++ function)": [[12, "_CPPv4NK4idol8Callback4timeEv", false]], "idol::callback::~callback (c++ function)": [[12, "_CPPv4N4idol8CallbackD0Ev", false]], "idol::callbackevent (c++ enum)": [[84, "_CPPv4N4idol13CallbackEventE", false]], "idol::callbackevent::incumbentsolution (c++ enumerator)": [[84, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", false]], "idol::callbackevent::invalidsolution (c++ enumerator)": [[84, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", false]], "idol::callbackevent::nodeloaded (c++ enumerator)": [[84, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", false]], "idol::callbackevent::prunedsolution (c++ enumerator)": [[84, "_CPPv4N4idol13CallbackEvent14PrunedSolutionE", false]], "idol::callbackfactory (c++ class)": [[13, "_CPPv4N4idol15CallbackFactoryE", false]], "idol::callbackfactory::clone (c++ function)": [[13, "_CPPv4NK4idol15CallbackFactory5cloneEv", false]], "idol::callbackfactory::operator() (c++ function)": [[13, "_CPPv4N4idol15CallbackFactoryclEv", false]], "idol::callbackfactory::~callbackfactory (c++ function)": [[13, "_CPPv4N4idol15CallbackFactoryD0Ev", false]], "idol::ctr (c++ class)": [[66, "_CPPv4N4idol3CtrE", false]], "idol::ctr::ctr (c++ function)": [[66, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypedNSt6stringE", false], [66, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", false], [66, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", false]], "idol::ctr::get (c++ function)": [[66, "_CPPv4NK4idol3Ctr3getERK10AnnotationI6ValueTE", false]], "idol::ctr::id (c++ function)": [[66, "_CPPv4NK4idol3Ctr2idEv", false]], "idol::ctr::index (c++ function)": [[66, "_CPPv4NK4idol3Ctr5indexERK5Model", false]], "idol::ctr::is_in (c++ function)": [[66, "_CPPv4NK4idol3Ctr5is_inERK5Model", false]], "idol::ctr::make_vector (c++ function)": [[66, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", false]], "idol::ctr::name (c++ function)": [[66, "_CPPv4NK4idol3Ctr4nameEv", false]], "idol::ctr::set (c++ function)": [[66, "_CPPv4NK4idol3Ctr3setERK10AnnotationI6ValueTEDpRR5ArgsT", false]], "idol::ctrtype (c++ enum)": [[62, "_CPPv4N4idol7CtrTypeE", false]], "idol::ctrtype::equal (c++ enumerator)": [[62, "_CPPv4N4idol7CtrType5EqualE", false]], "idol::ctrtype::greaterorequal (c++ enumerator)": [[62, "_CPPv4N4idol7CtrType14GreaterOrEqualE", false]], "idol::ctrtype::lessorequal (c++ enumerator)": [[62, "_CPPv4N4idol7CtrType11LessOrEqualE", false]], "idol::cuts::knapsackcover (c++ class)": [[21, "_CPPv4I0EN4idol4Cuts13KnapsackCoverE", false]], "idol::cuts::knapsackcover::clone (c++ function)": [[21, "_CPPv4NK4idol4Cuts13KnapsackCover5cloneEv", false]], "idol::cuts::knapsackcover::operator() (c++ function)": [[21, "_CPPv4N4idol4Cuts13KnapsackCoverclEv", false]], "idol::cuts::knapsackcover::strategy (c++ class)": [[21, "_CPPv4N4idol4Cuts13KnapsackCover8StrategyE", false]], "idol::cuts::knapsackcover::strategy::strategy (c++ function)": [[21, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", false]], "idol::cuts::knapsackcover::with_lifting (c++ function)": [[21, "_CPPv4N4idol4Cuts13KnapsackCover12with_liftingEb", false]], "idol::cuts::knapsackcover::with_max_cuts_factor (c++ function)": [[21, "_CPPv4N4idol4Cuts13KnapsackCover20with_max_cuts_factorEd", false]], "idol::cuts::knapsackcover::with_max_pass_root_node (c++ function)": [[21, "_CPPv4N4idol4Cuts13KnapsackCover23with_max_pass_root_nodeEj", false]], "idol::cuts::knapsackcover::with_tree_node_cuts (c++ function)": [[21, "_CPPv4N4idol4Cuts13KnapsackCover19with_tree_node_cutsEb", false]], "idol::dantzigwolfe::artificialcosts (c++ class)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCostsE", false]], "idol::dantzigwolfe::artificialcosts::clone (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts5cloneEv", false]], "idol::dantzigwolfe::artificialcosts::operator() (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCostsclEv", false]], "idol::dantzigwolfe::artificialcosts::strategy (c++ class)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8StrategyE", false]], "idol::dantzigwolfe::artificialcosts::strategy::best_bound (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy10best_boundEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::best_obj (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy8best_objEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::execute (c++ function)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", false]], "idol::dantzigwolfe::artificialcosts::strategy::primal_solution (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy15primal_solutionEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::reason (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6reasonEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::status (c++ function)": [[40, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6statusEv", false]], "idol::dantzigwolfe::artificialcosts::strategy::strategy (c++ function)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", false]], "idol::dantzigwolfe::artificialcosts::with_initial_costs (c++ function)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_initial_costsEd", false]], "idol::dantzigwolfe::artificialcosts::with_max_updates_before_phase_i (c++ function)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts31with_max_updates_before_phase_IEj", false]], "idol::dantzigwolfe::artificialcosts::with_update_factor (c++ function)": [[40, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_update_factorEd", false]], "idol::dantzigwolfe::farkaspricing (c++ class)": [[42, "_CPPv4N4idol12DantzigWolfe13FarkasPricingE", false]], "idol::dantzigwolfe::farkaspricing::clone (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing5cloneEv", false]], "idol::dantzigwolfe::farkaspricing::operator() (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricingclEv", false]], "idol::dantzigwolfe::farkaspricing::strategy (c++ class)": [[42, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8StrategyE", false]], "idol::dantzigwolfe::farkaspricing::strategy::best_bound (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy10best_boundEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::best_obj (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy8best_objEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::execute (c++ function)": [[42, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", false]], "idol::dantzigwolfe::farkaspricing::strategy::primal_solution (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy15primal_solutionEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::reason (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6reasonEv", false]], "idol::dantzigwolfe::farkaspricing::strategy::status (c++ function)": [[42, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6statusEv", false]], "idol::dantzigwolfe::neame (c++ class)": [[45, "_CPPv4N4idol12DantzigWolfe5NeameE", false]], "idol::dantzigwolfe::neame::clone (c++ function)": [[45, "_CPPv4NK4idol12DantzigWolfe5Neame5cloneEv", false]], "idol::dantzigwolfe::neame::neame (c++ function)": [[45, "_CPPv4N4idol12DantzigWolfe5Neame5NeameEd", false]], "idol::dantzigwolfe::neame::operator() (c++ function)": [[45, "_CPPv4NK4idol12DantzigWolfe5NeameclEv", false]], "idol::dantzigwolfe::neame::strategy (c++ class)": [[45, "_CPPv4N4idol12DantzigWolfe5Neame8StrategyE", false]], "idol::dantzigwolfe::neame::strategy::compute_smoothed_dual_solution (c++ function)": [[45, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy30compute_smoothed_dual_solutionERK9DualPoint", false]], "idol::dantzigwolfe::neame::strategy::initialize (c++ function)": [[45, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy10initializeEv", false]], "idol::dantzigwolfe::neame::strategy::strategy (c++ function)": [[45, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy8StrategyEd", false]], "idol::dantzigwolfe::neame::strategy::update_stability_center (c++ function)": [[45, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy23update_stability_centerERK9DualPoint", false]], "idol::dantzigwolfe::wentges (c++ class)": [[46, "_CPPv4N4idol12DantzigWolfe7WentgesE", false]], "idol::dantzigwolfe::wentges::clone (c++ function)": [[46, "_CPPv4NK4idol12DantzigWolfe7Wentges5cloneEv", false]], "idol::dantzigwolfe::wentges::operator() (c++ function)": [[46, "_CPPv4NK4idol12DantzigWolfe7WentgesclEv", false]], "idol::dantzigwolfe::wentges::strategy (c++ class)": [[46, "_CPPv4N4idol12DantzigWolfe7Wentges8StrategyE", false]], "idol::dantzigwolfe::wentges::strategy::compute_smoothed_dual_solution (c++ function)": [[46, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy30compute_smoothed_dual_solutionERK9DualPoint", false]], "idol::dantzigwolfe::wentges::strategy::initialize (c++ function)": [[46, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy10initializeEv", false]], "idol::dantzigwolfe::wentges::strategy::strategy (c++ function)": [[46, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy8StrategyEd", false]], "idol::dantzigwolfe::wentges::strategy::update_stability_center (c++ function)": [[46, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy23update_stability_centerERK9DualPoint", false]], "idol::dantzigwolfe::wentges::wentges (c++ function)": [[46, "_CPPv4N4idol12DantzigWolfe7Wentges7WentgesEd", false]], "idol::dantzigwolfedecomposition (c++ class)": [[41, "_CPPv4N4idol25DantzigWolfeDecompositionE", false]], "idol::dantzigwolfedecomposition::as (c++ function)": [[41, "_CPPv4I0EN4idol25DantzigWolfeDecomposition2asER1Tv", false], [41, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2asERK1Tv", false]], "idol::dantzigwolfedecomposition::clone (c++ function)": [[41, "_CPPv4NK4idol25DantzigWolfeDecomposition5cloneEv", false]], "idol::dantzigwolfedecomposition::conditional (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", false], [41, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", false]], "idol::dantzigwolfedecomposition::dantzigwolfedecomposition (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationIjE", false], [41, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK25DantzigWolfeDecomposition", false], [41, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionEv", false]], "idol::dantzigwolfedecomposition::get_sub_problem_spec (c++ function)": [[41, "_CPPv4NK4idol25DantzigWolfeDecomposition20get_sub_problem_specEj", false]], "idol::dantzigwolfedecomposition::is (c++ function)": [[41, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2isEbv", false]], "idol::dantzigwolfedecomposition::operator() (c++ function)": [[41, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", false]], "idol::dantzigwolfedecomposition::with_absolute_gap_tolerance (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", false]], "idol::dantzigwolfedecomposition::with_best_bound_stop (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", false]], "idol::dantzigwolfedecomposition::with_best_obj_stop (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", false]], "idol::dantzigwolfedecomposition::with_default_sub_problem_spec (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition29with_default_sub_problem_specEN12DantzigWolfe10SubProblemE", false]], "idol::dantzigwolfedecomposition::with_dual_price_smoothing_stabilization (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationERKN12DantzigWolfe31DualPriceSmoothingStabilizationE", false]], "idol::dantzigwolfedecomposition::with_hard_branching (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition19with_hard_branchingEb", false]], "idol::dantzigwolfedecomposition::with_infeasibility_strategy (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition27with_infeasibility_strategyERKN12DantzigWolfe28InfeasibilityStrategyFactoryE", false]], "idol::dantzigwolfedecomposition::with_infeasible_columns_removal (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition31with_infeasible_columns_removalEb", false]], "idol::dantzigwolfedecomposition::with_infeasible_or_unbounded_info (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", false]], "idol::dantzigwolfedecomposition::with_iteration_limit (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition20with_iteration_limitEj", false]], "idol::dantzigwolfedecomposition::with_logger (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition11with_loggerERKN4Logs12DantzigWolfe7FactoryE", false]], "idol::dantzigwolfedecomposition::with_logs (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition9with_logsEb", false]], "idol::dantzigwolfedecomposition::with_master_optimizer (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", false]], "idol::dantzigwolfedecomposition::with_max_parallel_sub_problems (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition30with_max_parallel_sub_problemsEj", false]], "idol::dantzigwolfedecomposition::with_presolve (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", false]], "idol::dantzigwolfedecomposition::with_relative_gap_tolerance (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", false]], "idol::dantzigwolfedecomposition::with_sub_problem_spec (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", false]], "idol::dantzigwolfedecomposition::with_thread_limit (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", false]], "idol::dantzigwolfedecomposition::with_time_limit (c++ function)": [[41, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", false]], "idol::depthfirst (c++ class)": [[30, "_CPPv4N4idol10DepthFirstE", false]], "idol::depthfirst::strategy (c++ class)": [[30, "_CPPv4I0EN4idol10DepthFirst8StrategyE", false]], "idol::depthfirst::strategy::clone (c++ function)": [[30, "_CPPv4NK4idol10DepthFirst8Strategy5cloneEv", false]], "idol::depthfirst::strategy::operator() (c++ function)": [[30, "_CPPv4NK4idol10DepthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::depthfirst::strategy::strategy (c++ function)": [[30, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", false]], "idol::dim (c++ class)": [[67, "_CPPv4I_jEN4idol3DimE", false]], "idol::dim::dim (c++ function)": [[67, "_CPPv4IDpEN4idol3Dim3DimEDpRR5ArgsT", false], [67, "_CPPv4N4idol3Dim3DimENSt5arrayIj1NEE", false]], "idol::env (c++ class)": [[68, "_CPPv4N4idol3EnvE", false]], "idol::env::env (c++ function)": [[68, "_CPPv4N4idol3Env3EnvEv", false]], "idol::env::operator[] (c++ function)": [[68, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", false]], "idol::equals (c++ function)": [[64, "_CPPv4N4idol6equalsEddd", false]], "idol::firstinfeasiblefound (c++ class)": [[33, "_CPPv4N4idol20FirstInfeasibleFoundE", false]], "idol::firstinfeasiblefound::firstinfeasiblefound (c++ function)": [[33, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", false], [33, "_CPPv4N4idol20FirstInfeasibleFound20FirstInfeasibleFoundEv", false]], "idol::firstinfeasiblefound::strategy (c++ class)": [[33, "_CPPv4I0EN4idol20FirstInfeasibleFound8StrategyE", false]], "idol::firstinfeasiblefound::strategy::clone (c++ function)": [[33, "_CPPv4NK4idol20FirstInfeasibleFound8Strategy5cloneEv", false]], "idol::firstinfeasiblefound::strategy::operator() (c++ function)": [[33, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [33, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::firstinfeasiblefound::strategy::strategy (c++ function)": [[33, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyERK20FirstInfeasibleFound", false], [33, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyEv", false]], "idol::glpk (c++ class)": [[48, "_CPPv4N4idol4GLPKE", false]], "idol::glpk::as (c++ function)": [[48, "_CPPv4I0EN4idol4GLPK2asER1Tv", false], [48, "_CPPv4I0ENK4idol4GLPK2asERK1Tv", false]], "idol::glpk::clone (c++ function)": [[48, "_CPPv4NK4idol4GLPK5cloneEv", false]], "idol::glpk::conditional (c++ function)": [[48, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", false], [48, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", false]], "idol::glpk::continuousrelaxation (c++ function)": [[48, "_CPPv4N4idol4GLPK20ContinuousRelaxationEv", false]], "idol::glpk::glpk (c++ function)": [[48, "_CPPv4N4idol4GLPK4GLPKERK4GLPK", false], [48, "_CPPv4N4idol4GLPK4GLPKERR4GLPK", false], [48, "_CPPv4N4idol4GLPK4GLPKEv", false]], "idol::glpk::is (c++ function)": [[48, "_CPPv4I0ENK4idol4GLPK2isEbv", false]], "idol::glpk::operator() (c++ function)": [[48, "_CPPv4NK4idol4GLPKclERK5Model", false]], "idol::glpk::operator= (c++ function)": [[48, "_CPPv4N4idol4GLPKaSERK4GLPK", false], [48, "_CPPv4N4idol4GLPKaSERR4GLPK", false]], "idol::glpk::read_from_file (c++ function)": [[48, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", false]], "idol::glpk::with_absolute_gap_tolerance (c++ function)": [[48, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", false]], "idol::glpk::with_best_bound_stop (c++ function)": [[48, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", false]], "idol::glpk::with_best_obj_stop (c++ function)": [[48, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", false]], "idol::glpk::with_infeasible_or_unbounded_info (c++ function)": [[48, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", false]], "idol::glpk::with_iteration_limit (c++ function)": [[48, "_CPPv4N4idol4GLPK20with_iteration_limitEj", false]], "idol::glpk::with_logs (c++ function)": [[48, "_CPPv4N4idol4GLPK9with_logsEb", false]], "idol::glpk::with_presolve (c++ function)": [[48, "_CPPv4N4idol4GLPK13with_presolveEb", false]], "idol::glpk::with_relative_gap_tolerance (c++ function)": [[48, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", false]], "idol::glpk::with_thread_limit (c++ function)": [[48, "_CPPv4N4idol4GLPK17with_thread_limitEj", false]], "idol::glpk::with_time_limit (c++ function)": [[48, "_CPPv4N4idol4GLPK15with_time_limitEd", false]], "idol::gurobi (c++ class)": [[49, "_CPPv4N4idol6GurobiE", false]], "idol::gurobi::add_callback (c++ function)": [[49, "_CPPv4N4idol6Gurobi12add_callbackERK15CallbackFactory", false]], "idol::gurobi::as (c++ function)": [[49, "_CPPv4I0EN4idol6Gurobi2asER1Tv", false], [49, "_CPPv4I0ENK4idol6Gurobi2asERK1Tv", false]], "idol::gurobi::clone (c++ function)": [[49, "_CPPv4NK4idol6Gurobi5cloneEv", false]], "idol::gurobi::conditional (c++ function)": [[49, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", false], [49, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", false]], "idol::gurobi::continuousrelaxation (c++ function)": [[49, "_CPPv4N4idol6Gurobi20ContinuousRelaxationEv", false]], "idol::gurobi::gurobi (c++ function)": [[49, "_CPPv4N4idol6Gurobi6GurobiERK6Gurobi", false], [49, "_CPPv4N4idol6Gurobi6GurobiERR6Gurobi", false], [49, "_CPPv4N4idol6Gurobi6GurobiEv", false]], "idol::gurobi::is (c++ function)": [[49, "_CPPv4I0ENK4idol6Gurobi2isEbv", false]], "idol::gurobi::operator() (c++ function)": [[49, "_CPPv4NK4idol6GurobiclERK5Model", false]], "idol::gurobi::operator= (c++ function)": [[49, "_CPPv4N4idol6GurobiaSERK6Gurobi", false], [49, "_CPPv4N4idol6GurobiaSERR6Gurobi", false]], "idol::gurobi::read_from_file (c++ function)": [[49, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", false]], "idol::gurobi::with_absolute_gap_tolerance (c++ function)": [[49, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", false]], "idol::gurobi::with_best_bound_stop (c++ function)": [[49, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", false]], "idol::gurobi::with_best_obj_stop (c++ function)": [[49, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", false]], "idol::gurobi::with_continuous_relaxation_only (c++ function)": [[49, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", false]], "idol::gurobi::with_external_param (c++ function)": [[49, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", false], [49, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", false]], "idol::gurobi::with_infeasible_or_unbounded_info (c++ function)": [[49, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", false]], "idol::gurobi::with_iteration_limit (c++ function)": [[49, "_CPPv4N4idol6Gurobi20with_iteration_limitEj", false]], "idol::gurobi::with_lazy_cut (c++ function)": [[49, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", false]], "idol::gurobi::with_logs (c++ function)": [[49, "_CPPv4N4idol6Gurobi9with_logsEb", false]], "idol::gurobi::with_max_n_solution_in_pool (c++ function)": [[49, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", false]], "idol::gurobi::with_presolve (c++ function)": [[49, "_CPPv4N4idol6Gurobi13with_presolveEb", false]], "idol::gurobi::with_relative_gap_tolerance (c++ function)": [[49, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", false]], "idol::gurobi::with_thread_limit (c++ function)": [[49, "_CPPv4N4idol6Gurobi17with_thread_limitEj", false]], "idol::gurobi::with_time_limit (c++ function)": [[49, "_CPPv4N4idol6Gurobi15with_time_limitEd", false]], "idol::heuristics::integermaster (c++ class)": [[43, "_CPPv4I0EN4idol10Heuristics13IntegerMasterE", false]], "idol::heuristics::integermaster::clone (c++ function)": [[43, "_CPPv4NK4idol10Heuristics13IntegerMaster5cloneEv", false]], "idol::heuristics::integermaster::integermaster (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterERR13IntegerMaster", false], [43, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterEv", false]], "idol::heuristics::integermaster::operator() (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMasterclEv", false]], "idol::heuristics::integermaster::operator= (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMasteraSERK13IntegerMaster", false], [43, "_CPPv4N4idol10Heuristics13IntegerMasteraSERR13IntegerMaster", false]], "idol::heuristics::integermaster::strategy (c++ class)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8StrategyE", false]], "idol::heuristics::integermaster::strategy::set_frequency (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_frequencyEj", false]], "idol::heuristics::integermaster::strategy::set_integer_columns (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_integer_columnsEb", false]], "idol::heuristics::integermaster::strategy::set_iteration_limit (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_iteration_limitEj", false]], "idol::heuristics::integermaster::strategy::set_max_depth (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_max_depthEj", false]], "idol::heuristics::integermaster::strategy::set_time_limit (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy14set_time_limitEd", false]], "idol::heuristics::integermaster::strategy::strategy (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy8StrategyERK16OptimizerFactory", false]], "idol::heuristics::integermaster::strategy::with_integer_columns (c++ function)": [[43, "_CPPv4NK4idol10Heuristics13IntegerMaster8Strategy20with_integer_columnsEv", false]], "idol::heuristics::integermaster::with_frequency (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster14with_frequencyEj", false]], "idol::heuristics::integermaster::with_integer_columns (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster20with_integer_columnsEb", false]], "idol::heuristics::integermaster::with_iteration_limit (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster20with_iteration_limitEj", false]], "idol::heuristics::integermaster::with_max_depth (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster14with_max_depthEj", false]], "idol::heuristics::integermaster::with_optimizer (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster14with_optimizerERK16OptimizerFactory", false]], "idol::heuristics::integermaster::with_time_limit (c++ function)": [[43, "_CPPv4N4idol10Heuristics13IntegerMaster15with_time_limitEd", false]], "idol::heuristics::localbranching (c++ class)": [[23, "_CPPv4N4idol10Heuristics14LocalBranchingE", false]], "idol::heuristics::localbranching::clone (c++ function)": [[23, "_CPPv4NK4idol10Heuristics14LocalBranching5cloneEv", false]], "idol::heuristics::localbranching::localbranching (c++ function)": [[23, "_CPPv4N4idol10Heuristics14LocalBranching14LocalBranchingEv", false]], "idol::heuristics::localbranching::operator() (c++ function)": [[23, "_CPPv4N4idol10Heuristics14LocalBranchingclEv", false]], "idol::heuristics::localbranching::strategy (c++ class)": [[23, "_CPPv4N4idol10Heuristics14LocalBranching8StrategyE", false]], "idol::heuristics::localbranching::strategy::strategy (c++ function)": [[23, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", false]], "idol::heuristics::localbranching::with_optimizer (c++ function)": [[23, "_CPPv4N4idol10Heuristics14LocalBranching14with_optimizerERK16OptimizerFactory", false]], "idol::heuristics::rens (c++ class)": [[24, "_CPPv4N4idol10Heuristics4RENSE", false]], "idol::heuristics::rens::clone (c++ function)": [[24, "_CPPv4NK4idol10Heuristics4RENS5cloneEv", false]], "idol::heuristics::rens::operator() (c++ function)": [[24, "_CPPv4N4idol10Heuristics4RENSclEv", false]], "idol::heuristics::rens::rens (c++ function)": [[24, "_CPPv4N4idol10Heuristics4RENS4RENSEv", false]], "idol::heuristics::rens::strategy (c++ class)": [[24, "_CPPv4N4idol10Heuristics4RENS8StrategyE", false]], "idol::heuristics::rens::strategy::strategy (c++ function)": [[24, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", false]], "idol::heuristics::rens::with_optimizer (c++ function)": [[24, "_CPPv4N4idol10Heuristics4RENS14with_optimizerERK16OptimizerFactory", false]], "idol::heuristics::simplerounding (c++ class)": [[25, "_CPPv4N4idol10Heuristics14SimpleRoundingE", false]], "idol::heuristics::simplerounding::clone (c++ function)": [[25, "_CPPv4NK4idol10Heuristics14SimpleRounding5cloneEv", false]], "idol::heuristics::simplerounding::operator() (c++ function)": [[25, "_CPPv4N4idol10Heuristics14SimpleRoundingclEv", false]], "idol::heuristics::simplerounding::simplerounding (c++ function)": [[25, "_CPPv4N4idol10Heuristics14SimpleRounding14SimpleRoundingEv", false]], "idol::heuristics::simplerounding::strategy (c++ class)": [[25, "_CPPv4N4idol10Heuristics14SimpleRounding8StrategyE", false]], "idol::highs (c++ class)": [[50, "_CPPv4N4idol5HiGHSE", false]], "idol::highs::as (c++ function)": [[50, "_CPPv4I0EN4idol5HiGHS2asER1Tv", false], [50, "_CPPv4I0ENK4idol5HiGHS2asERK1Tv", false]], "idol::highs::clone (c++ function)": [[50, "_CPPv4NK4idol5HiGHS5cloneEv", false]], "idol::highs::conditional (c++ function)": [[50, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", false], [50, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", false]], "idol::highs::continuousrelaxation (c++ function)": [[50, "_CPPv4N4idol5HiGHS20ContinuousRelaxationEv", false]], "idol::highs::highs (c++ function)": [[50, "_CPPv4N4idol5HiGHS5HiGHSERK5HiGHS", false], [50, "_CPPv4N4idol5HiGHS5HiGHSERR5HiGHS", false], [50, "_CPPv4N4idol5HiGHS5HiGHSEv", false]], "idol::highs::is (c++ function)": [[50, "_CPPv4I0ENK4idol5HiGHS2isEbv", false]], "idol::highs::operator() (c++ function)": [[50, "_CPPv4NK4idol5HiGHSclERK5Model", false]], "idol::highs::operator= (c++ function)": [[50, "_CPPv4N4idol5HiGHSaSERK5HiGHS", false], [50, "_CPPv4N4idol5HiGHSaSERR5HiGHS", false]], "idol::highs::with_absolute_gap_tolerance (c++ function)": [[50, "_CPPv4N4idol5HiGHS27with_absolute_gap_toleranceEd", false]], "idol::highs::with_best_bound_stop (c++ function)": [[50, "_CPPv4N4idol5HiGHS20with_best_bound_stopEd", false]], "idol::highs::with_best_obj_stop (c++ function)": [[50, "_CPPv4N4idol5HiGHS18with_best_obj_stopEd", false]], "idol::highs::with_continuous_relaxation_only (c++ function)": [[50, "_CPPv4N4idol5HiGHS31with_continuous_relaxation_onlyEb", false]], "idol::highs::with_infeasible_or_unbounded_info (c++ function)": [[50, "_CPPv4N4idol5HiGHS33with_infeasible_or_unbounded_infoEb", false]], "idol::highs::with_iteration_limit (c++ function)": [[50, "_CPPv4N4idol5HiGHS20with_iteration_limitEj", false]], "idol::highs::with_logs (c++ function)": [[50, "_CPPv4N4idol5HiGHS9with_logsEb", false]], "idol::highs::with_presolve (c++ function)": [[50, "_CPPv4N4idol5HiGHS13with_presolveEb", false]], "idol::highs::with_relative_gap_tolerance (c++ function)": [[50, "_CPPv4N4idol5HiGHS27with_relative_gap_toleranceEd", false]], "idol::highs::with_thread_limit (c++ function)": [[50, "_CPPv4N4idol5HiGHS17with_thread_limitEj", false]], "idol::highs::with_time_limit (c++ function)": [[50, "_CPPv4N4idol5HiGHS15with_time_limitEd", false]], "idol::inf (c++ member)": [[64, "_CPPv4N4idol3InfE", false]], "idol::is (c++ function)": [[64, "_CPPv4N4idol2isEd7CtrTypedd", false]], "idol::is_inf (c++ function)": [[64, "_CPPv4N4idol6is_infEd", false]], "idol::is_integer (c++ function)": [[64, "_CPPv4N4idol10is_integerEdd", false]], "idol::is_neg_inf (c++ function)": [[64, "_CPPv4N4idol10is_neg_infEd", false]], "idol::is_pos_inf (c++ function)": [[64, "_CPPv4N4idol10is_pos_infEd", false]], "idol::is_zero (c++ function)": [[64, "_CPPv4I0EN4idol7is_zeroEDTcldtclNSt7declvalI1TEEE7is_zeroL.1EEERK1Td", false], [64, "_CPPv4N4idol7is_zeroEdd", false]], "idol::lazycutcallback (c++ class)": [[14, "_CPPv4N4idol15LazyCutCallbackE", false]], "idol::lazycutcallback::clone (c++ function)": [[14, "_CPPv4NK4idol15LazyCutCallback5cloneEv", false]], "idol::lazycutcallback::lazycutcallback (c++ function)": [[14, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", false]], "idol::lazycutcallback::operator() (c++ function)": [[14, "_CPPv4N4idol15LazyCutCallbackclEv", false]], "idol::lazycutcallback::strategy (c++ class)": [[14, "_CPPv4N4idol15LazyCutCallback8StrategyE", false]], "idol::lazycutcallback::strategy::strategy (c++ function)": [[14, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", false]], "idol::lazycutcallback::with_separation_optimizer (c++ function)": [[14, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", false]], "idol::leastinfeasible (c++ class)": [[34, "_CPPv4N4idol15LeastInfeasibleE", false]], "idol::leastinfeasible::leastinfeasible (c++ function)": [[34, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", false], [34, "_CPPv4N4idol15LeastInfeasible15LeastInfeasibleEv", false]], "idol::leastinfeasible::strategy (c++ class)": [[34, "_CPPv4I0EN4idol15LeastInfeasible8StrategyE", false]], "idol::leastinfeasible::strategy::clone (c++ function)": [[34, "_CPPv4NK4idol15LeastInfeasible8Strategy5cloneEv", false]], "idol::leastinfeasible::strategy::operator() (c++ function)": [[34, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [34, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::leastinfeasible::strategy::strategy (c++ function)": [[34, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyERK15LeastInfeasible", false], [34, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyEv", false]], "idol::linexpr (c++ class)": [[70, "_CPPv4I00EN4idol7LinExprE", false]], "idol::linexpr::begin (c++ function)": [[70, "_CPPv4N4idol7LinExpr5beginEv", false], [70, "_CPPv4NK4idol7LinExpr5beginEv", false]], "idol::linexpr::cbegin (c++ function)": [[70, "_CPPv4NK4idol7LinExpr6cbeginEv", false]], "idol::linexpr::cend (c++ function)": [[70, "_CPPv4NK4idol7LinExpr4cendEv", false]], "idol::linexpr::clear (c++ function)": [[70, "_CPPv4N4idol7LinExpr5clearEv", false]], "idol::linexpr::const_iterator (c++ type)": [[70, "_CPPv4N4idol7LinExpr14const_iteratorE", false]], "idol::linexpr::empty (c++ function)": [[70, "_CPPv4NK4idol7LinExpr5emptyEv", false]], "idol::linexpr::end (c++ function)": [[70, "_CPPv4N4idol7LinExpr3endEv", false], [70, "_CPPv4NK4idol7LinExpr3endEv", false]], "idol::linexpr::get (c++ function)": [[70, "_CPPv4NK4idol7LinExpr3getERK6IndexT", false]], "idol::linexpr::has_index (c++ function)": [[70, "_CPPv4NK4idol7LinExpr9has_indexERK6IndexT", false]], "idol::linexpr::is_zero (c++ function)": [[70, "_CPPv4NK4idol7LinExpr7is_zeroEd", false]], "idol::linexpr::iterator (c++ type)": [[70, "_CPPv4N4idol7LinExpr8iteratorE", false]], "idol::linexpr::linexpr (c++ function)": [[70, "_CPPv4N4idol7LinExpr7LinExprE12SparseVectorI4KeyT6ValueTE", false], [70, "_CPPv4N4idol7LinExpr7LinExprE4KeyT", false], [70, "_CPPv4N4idol7LinExpr7LinExprERK6ValueTRK4KeyT", false], [70, "_CPPv4N4idol7LinExpr7LinExprERK7LinExprI4KeyT6ValueTE", false], [70, "_CPPv4N4idol7LinExpr7LinExprERR6ValueTRK4KeyT", false], [70, "_CPPv4N4idol7LinExpr7LinExprERR7LinExprI4KeyT6ValueTE", false], [70, "_CPPv4N4idol7LinExpr7LinExprEv", false]], "idol::linexpr::merge_without_conflict (c++ function)": [[70, "_CPPv4N4idol7LinExpr22merge_without_conflictERK12SparseVector", false]], "idol::linexpr::operator*= (c++ function)": [[70, "_CPPv4N4idol7LinExprmLENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", false]], "idol::linexpr::operator+= (c++ function)": [[70, "_CPPv4N4idol7LinExprpLERK12SparseVector", false], [70, "_CPPv4N4idol7LinExprpLERK4KeyT", false], [70, "_CPPv4N4idol7LinExprpLERK7LinExprI4KeyT6ValueTE", false]], "idol::linexpr::operator- (c++ function)": [[70, "_CPPv4NK4idol7LinExprmiEv", false]], "idol::linexpr::operator-= (c++ function)": [[70, "_CPPv4N4idol7LinExprmIERK12SparseVector", false], [70, "_CPPv4N4idol7LinExprmIERK4KeyT", false], [70, "_CPPv4N4idol7LinExprmIERK7LinExprI4KeyT6ValueTE", false]], "idol::linexpr::operator/= (c++ function)": [[70, "_CPPv4N4idol7LinExprdVENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", false]], "idol::linexpr::operator= (c++ function)": [[70, "_CPPv4N4idol7LinExpraSERK7LinExprI4KeyT6ValueTE", false], [70, "_CPPv4N4idol7LinExpraSERR7LinExprI4KeyT6ValueTE", false]], "idol::linexpr::remove (c++ function)": [[70, "_CPPv4N4idol7LinExpr6removeERK6IndexT", false]], "idol::linexpr::reserve (c++ function)": [[70, "_CPPv4N4idol7LinExpr7reserveEj", false]], "idol::linexpr::set (c++ function)": [[70, "_CPPv4N4idol7LinExpr3setERK6IndexTRK6ValueT", false]], "idol::linexpr::size (c++ function)": [[70, "_CPPv4NK4idol7LinExpr4sizeEv", false]], "idol::linexpr::zero (c++ member)": [[70, "_CPPv4N4idol7LinExpr4ZeroE", false]], "idol::model (c++ class)": [[71, "_CPPv4N4idol5ModelE", false]], "idol::model::add (c++ function)": [[71, "_CPPv4N4idol5Model3addERK3Ctr", false], [71, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", false], [71, "_CPPv4N4idol5Model3addERK3Var", false], [71, "_CPPv4N4idol5Model3addERK3Var7TempVar", false], [71, "_CPPv4N4idol5Model3addERK4QCtr", false], [71, "_CPPv4N4idol5Model3addERK4QCtr8TempQCtr", false]], "idol::model::add_ctr (c++ function)": [[71, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", false], [71, "_CPPv4N4idol5Model7add_ctrERR7LinExprI3VarE7CtrTypedNSt6stringE", false]], "idol::model::add_ctrs (c++ function)": [[71, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", false], [71, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", false]], "idol::model::add_qctr (c++ function)": [[71, "_CPPv4N4idol5Model8add_qctrE8TempQCtrNSt6stringE", false], [71, "_CPPv4N4idol5Model8add_qctrERR8QuadExprI3VarE7CtrTypeNSt6stringE", false]], "idol::model::add_qctrs (c++ function)": [[71, "_CPPv4I_jEN4idol5Model9add_qctrsE6VectorI4QCtr1NE3DimI1NE7CtrTypeRKNSt6stringE", false]], "idol::model::add_var (c++ function)": [[71, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", false], [71, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", false]], "idol::model::add_vars (c++ function)": [[71, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", false], [71, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", false]], "idol::model::add_vector (c++ function)": [[71, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", false]], "idol::model::clone (c++ function)": [[71, "_CPPv4NK4idol5Model5cloneEv", false]], "idol::model::copy (c++ function)": [[71, "_CPPv4NK4idol5Model4copyEv", false]], "idol::model::ctrs (c++ function)": [[71, "_CPPv4NK4idol5Model4ctrsEv", false]], "idol::model::dump (c++ function)": [[71, "_CPPv4NK4idol5Model4dumpERNSt7ostreamE", false]], "idol::model::env (c++ function)": [[71, "_CPPv4NK4idol5Model3envEv", false]], "idol::model::get_best_bound (c++ function)": [[71, "_CPPv4NK4idol5Model14get_best_boundEv", false]], "idol::model::get_best_obj (c++ function)": [[71, "_CPPv4NK4idol5Model12get_best_objEv", false]], "idol::model::get_ctr_by_index (c++ function)": [[71, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", false]], "idol::model::get_ctr_dual (c++ function)": [[71, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", false]], "idol::model::get_ctr_farkas (c++ function)": [[71, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", false]], "idol::model::get_ctr_index (c++ function)": [[71, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", false]], "idol::model::get_ctr_rhs (c++ function)": [[71, "_CPPv4NK4idol5Model11get_ctr_rhsERK3Ctr", false]], "idol::model::get_ctr_row (c++ function)": [[71, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", false]], "idol::model::get_ctr_type (c++ function)": [[71, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", false]], "idol::model::get_mat_coeff (c++ function)": [[71, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", false]], "idol::model::get_n_solutions (c++ function)": [[71, "_CPPv4NK4idol5Model15get_n_solutionsEv", false]], "idol::model::get_obj_expr (c++ function)": [[71, "_CPPv4NK4idol5Model12get_obj_exprEv", false]], "idol::model::get_obj_sense (c++ function)": [[71, "_CPPv4NK4idol5Model13get_obj_senseEv", false]], "idol::model::get_qctr_by_index (c++ function)": [[71, "_CPPv4NK4idol5Model17get_qctr_by_indexEj", false]], "idol::model::get_qctr_expr (c++ function)": [[71, "_CPPv4NK4idol5Model13get_qctr_exprERK4QCtr", false]], "idol::model::get_qctr_index (c++ function)": [[71, "_CPPv4NK4idol5Model14get_qctr_indexERK4QCtr", false]], "idol::model::get_qctr_type (c++ function)": [[71, "_CPPv4NK4idol5Model13get_qctr_typeERK4QCtr", false]], "idol::model::get_reason (c++ function)": [[71, "_CPPv4NK4idol5Model10get_reasonEv", false]], "idol::model::get_rhs_expr (c++ function)": [[71, "_CPPv4NK4idol5Model12get_rhs_exprEv", false]], "idol::model::get_solution_index (c++ function)": [[71, "_CPPv4NK4idol5Model18get_solution_indexEv", false]], "idol::model::get_status (c++ function)": [[71, "_CPPv4NK4idol5Model10get_statusEv", false]], "idol::model::get_var_by_index (c++ function)": [[71, "_CPPv4NK4idol5Model16get_var_by_indexEj", false]], "idol::model::get_var_column (c++ function)": [[71, "_CPPv4NK4idol5Model14get_var_columnERK3Var", false]], "idol::model::get_var_index (c++ function)": [[71, "_CPPv4NK4idol5Model13get_var_indexERK3Var", false]], "idol::model::get_var_lb (c++ function)": [[71, "_CPPv4NK4idol5Model10get_var_lbERK3Var", false]], "idol::model::get_var_obj (c++ function)": [[71, "_CPPv4NK4idol5Model11get_var_objERK3Var", false]], "idol::model::get_var_primal (c++ function)": [[71, "_CPPv4NK4idol5Model14get_var_primalERK3Var", false]], "idol::model::get_var_ray (c++ function)": [[71, "_CPPv4NK4idol5Model11get_var_rayERK3Var", false]], "idol::model::get_var_reduced_cost (c++ function)": [[71, "_CPPv4NK4idol5Model20get_var_reduced_costERK3Var", false]], "idol::model::get_var_type (c++ function)": [[71, "_CPPv4NK4idol5Model12get_var_typeERK3Var", false]], "idol::model::get_var_ub (c++ function)": [[71, "_CPPv4NK4idol5Model10get_var_ubERK3Var", false]], "idol::model::has (c++ function)": [[71, "_CPPv4NK4idol5Model3hasERK3Ctr", false], [71, "_CPPv4NK4idol5Model3hasERK3Var", false], [71, "_CPPv4NK4idol5Model3hasERK4QCtr", false]], "idol::model::has_optimizer (c++ function)": [[71, "_CPPv4NK4idol5Model13has_optimizerEv", false]], "idol::model::has_optimizer_factory (c++ function)": [[71, "_CPPv4NK4idol5Model21has_optimizer_factoryEv", false]], "idol::model::id (c++ function)": [[71, "_CPPv4NK4idol5Model2idEv", false]], "idol::model::model (c++ function)": [[71, "_CPPv4N4idol5Model5ModelER3Env7Storage", false], [71, "_CPPv4N4idol5Model5ModelERR5Model", false]], "idol::model::operator= (c++ function)": [[71, "_CPPv4N4idol5ModelaSERK5Model", false], [71, "_CPPv4N4idol5ModelaSERR5Model", false]], "idol::model::optimize (c++ function)": [[71, "_CPPv4N4idol5Model8optimizeEv", false]], "idol::model::optimizer (c++ function)": [[71, "_CPPv4N4idol5Model9optimizerEv", false], [71, "_CPPv4NK4idol5Model9optimizerEv", false]], "idol::model::optimizer_factory (c++ function)": [[71, "_CPPv4NK4idol5Model17optimizer_factoryEv", false]], "idol::model::qctrs (c++ function)": [[71, "_CPPv4NK4idol5Model5qctrsEv", false]], "idol::model::remove (c++ function)": [[71, "_CPPv4N4idol5Model6removeERK3Ctr", false], [71, "_CPPv4N4idol5Model6removeERK3Var", false], [71, "_CPPv4N4idol5Model6removeERK4QCtr", false]], "idol::model::reserve_ctrs (c++ function)": [[71, "_CPPv4N4idol5Model12reserve_ctrsEj", false]], "idol::model::reserve_qctrs (c++ function)": [[71, "_CPPv4N4idol5Model13reserve_qctrsEj", false]], "idol::model::reserve_vars (c++ function)": [[71, "_CPPv4N4idol5Model12reserve_varsEj", false]], "idol::model::reset_minor_representation (c++ function)": [[71, "_CPPv4N4idol5Model26reset_minor_representationEv", false]], "idol::model::set_ctr_rhs (c++ function)": [[71, "_CPPv4N4idol5Model11set_ctr_rhsERK3Ctrd", false]], "idol::model::set_ctr_row (c++ function)": [[71, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK7LinExprI3VarE", false], [71, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR7LinExprI3VarE", false]], "idol::model::set_ctr_type (c++ function)": [[71, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", false]], "idol::model::set_mat_coeff (c++ function)": [[71, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3Vard", false]], "idol::model::set_obj_const (c++ function)": [[71, "_CPPv4N4idol5Model13set_obj_constEd", false]], "idol::model::set_obj_expr (c++ function)": [[71, "_CPPv4N4idol5Model12set_obj_exprERK8QuadExprI3VarE", false], [71, "_CPPv4N4idol5Model12set_obj_exprERR8QuadExprI3VarE", false]], "idol::model::set_obj_sense (c++ function)": [[71, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", false]], "idol::model::set_rhs_expr (c++ function)": [[71, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", false], [71, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", false]], "idol::model::set_solution_index (c++ function)": [[71, "_CPPv4N4idol5Model18set_solution_indexEj", false]], "idol::model::set_storage (c++ function)": [[71, "_CPPv4N4idol5Model11set_storageE7Storageb", false]], "idol::model::set_var_column (c++ function)": [[71, "_CPPv4N4idol5Model14set_var_columnERK3VarRK7LinExprI3CtrE", false], [71, "_CPPv4N4idol5Model14set_var_columnERK3VarRR7LinExprI3CtrE", false]], "idol::model::set_var_lb (c++ function)": [[71, "_CPPv4N4idol5Model10set_var_lbERK3Vard", false]], "idol::model::set_var_obj (c++ function)": [[71, "_CPPv4N4idol5Model11set_var_objERK3Vard", false]], "idol::model::set_var_type (c++ function)": [[71, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", false]], "idol::model::set_var_ub (c++ function)": [[71, "_CPPv4N4idol5Model10set_var_ubERK3Vard", false]], "idol::model::storage (c++ enum)": [[71, "_CPPv4N4idol5Model7StorageE", false]], "idol::model::storage (c++ function)": [[71, "_CPPv4NK4idol5Model7storageEv", false]], "idol::model::storage::both (c++ enumerator)": [[71, "_CPPv4N4idol5Model7Storage4BothE", false]], "idol::model::storage::columnoriented (c++ enumerator)": [[71, "_CPPv4N4idol5Model7Storage14ColumnOrientedE", false]], "idol::model::storage::roworiented (c++ enumerator)": [[71, "_CPPv4N4idol5Model7Storage11RowOrientedE", false]], "idol::model::unuse (c++ function)": [[71, "_CPPv4N4idol5Model5unuseEv", false]], "idol::model::update (c++ function)": [[71, "_CPPv4N4idol5Model6updateEv", false]], "idol::model::use (c++ function)": [[71, "_CPPv4N4idol5Model3useERK16OptimizerFactory", false]], "idol::model::vars (c++ function)": [[71, "_CPPv4NK4idol5Model4varsEv", false]], "idol::model::write (c++ function)": [[71, "_CPPv4N4idol5Model5writeERKNSt6stringE", false]], "idol::model::~model (c++ function)": [[71, "_CPPv4N4idol5ModelD0Ev", false]], "idol::mosek (c++ class)": [[51, "_CPPv4N4idol5MosekE", false]], "idol::mosek::add_callback (c++ function)": [[51, "_CPPv4N4idol5Mosek12add_callbackERK15CallbackFactory", false]], "idol::mosek::as (c++ function)": [[51, "_CPPv4I0EN4idol5Mosek2asER1Tv", false], [51, "_CPPv4I0ENK4idol5Mosek2asERK1Tv", false]], "idol::mosek::clone (c++ function)": [[51, "_CPPv4NK4idol5Mosek5cloneEv", false]], "idol::mosek::conditional (c++ function)": [[51, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", false], [51, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", false]], "idol::mosek::continuousrelaxation (c++ function)": [[51, "_CPPv4N4idol5Mosek20ContinuousRelaxationEv", false]], "idol::mosek::is (c++ function)": [[51, "_CPPv4I0ENK4idol5Mosek2isEbv", false]], "idol::mosek::mosek (c++ function)": [[51, "_CPPv4N4idol5Mosek5MosekERK5Mosek", false], [51, "_CPPv4N4idol5Mosek5MosekERR5Mosek", false], [51, "_CPPv4N4idol5Mosek5MosekEv", false]], "idol::mosek::operator() (c++ function)": [[51, "_CPPv4NK4idol5MosekclERK5Model", false]], "idol::mosek::operator= (c++ function)": [[51, "_CPPv4N4idol5MosekaSERK5Mosek", false], [51, "_CPPv4N4idol5MosekaSERR5Mosek", false]], "idol::mosek::with_absolute_gap_tolerance (c++ function)": [[51, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", false]], "idol::mosek::with_best_bound_stop (c++ function)": [[51, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", false]], "idol::mosek::with_best_obj_stop (c++ function)": [[51, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", false]], "idol::mosek::with_continuous_relaxation_only (c++ function)": [[51, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", false]], "idol::mosek::with_external_parameter (c++ function)": [[51, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", false], [51, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", false], [51, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", false]], "idol::mosek::with_infeasible_or_unbounded_info (c++ function)": [[51, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", false]], "idol::mosek::with_iteration_limit (c++ function)": [[51, "_CPPv4N4idol5Mosek20with_iteration_limitEj", false]], "idol::mosek::with_logs (c++ function)": [[51, "_CPPv4N4idol5Mosek9with_logsEb", false]], "idol::mosek::with_presolve (c++ function)": [[51, "_CPPv4N4idol5Mosek13with_presolveEb", false]], "idol::mosek::with_relative_gap_tolerance (c++ function)": [[51, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", false]], "idol::mosek::with_thread_limit (c++ function)": [[51, "_CPPv4N4idol5Mosek17with_thread_limitEj", false]], "idol::mosek::with_time_limit (c++ function)": [[51, "_CPPv4N4idol5Mosek15with_time_limitEd", false]], "idol::mostinfeasible (c++ class)": [[35, "_CPPv4N4idol14MostInfeasibleE", false]], "idol::mostinfeasible::mostinfeasible (c++ function)": [[35, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", false], [35, "_CPPv4N4idol14MostInfeasible14MostInfeasibleEv", false]], "idol::mostinfeasible::strategy (c++ class)": [[35, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", false]], "idol::mostinfeasible::strategy::clone (c++ function)": [[35, "_CPPv4NK4idol14MostInfeasible8Strategy5cloneEv", false]], "idol::mostinfeasible::strategy::operator() (c++ function)": [[35, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [35, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::mostinfeasible::strategy::strategy (c++ function)": [[35, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", false], [35, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyEv", false]], "idol::optimizers::bilevel::kkt (c++ class)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKTE", false]], "idol::optimizers::bilevel::kkt::as (c++ function)": [[5, "_CPPv4I0EN4idol10Optimizers7Bilevel3KKT2asER1Tv", false], [5, "_CPPv4I0ENK4idol10Optimizers7Bilevel3KKT2asERK1Tv", false]], "idol::optimizers::bilevel::kkt::get_absolute_gap (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT16get_absolute_gapEv", false]], "idol::optimizers::bilevel::kkt::get_best_bound (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_best_boundEv", false]], "idol::optimizers::bilevel::kkt::get_best_obj (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT12get_best_objEv", false]], "idol::optimizers::bilevel::kkt::get_ctr_dual (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT12get_ctr_dualERK3Ctr", false]], "idol::optimizers::bilevel::kkt::get_ctr_farkas (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_ctr_farkasERK3Ctr", false]], "idol::optimizers::bilevel::kkt::get_n_solutions (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT15get_n_solutionsEv", false]], "idol::optimizers::bilevel::kkt::get_param_best_bound_stop (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT25get_param_best_bound_stopEv", false]], "idol::optimizers::bilevel::kkt::get_param_best_obj_stop (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT23get_param_best_obj_stopEv", false]], "idol::optimizers::bilevel::kkt::get_param_infeasible_or_unbounded_info (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::bilevel::kkt::get_param_iteration_limit (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT25get_param_iteration_limitEv", false]], "idol::optimizers::bilevel::kkt::get_param_logs (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_param_logsEv", false]], "idol::optimizers::bilevel::kkt::get_param_presolve (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_param_presolveEv", false]], "idol::optimizers::bilevel::kkt::get_param_thread_limit (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT22get_param_thread_limitEv", false]], "idol::optimizers::bilevel::kkt::get_param_time_limit (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT20get_param_time_limitEv", false]], "idol::optimizers::bilevel::kkt::get_reason (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT10get_reasonEv", false]], "idol::optimizers::bilevel::kkt::get_relative_gap (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT16get_relative_gapEv", false]], "idol::optimizers::bilevel::kkt::get_remaining_time (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_remaining_timeEv", false]], "idol::optimizers::bilevel::kkt::get_solution_index (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_solution_indexEv", false]], "idol::optimizers::bilevel::kkt::get_status (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT10get_statusEv", false]], "idol::optimizers::bilevel::kkt::get_tol_feasibility (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT19get_tol_feasibilityEv", false]], "idol::optimizers::bilevel::kkt::get_tol_integer (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT15get_tol_integerEv", false]], "idol::optimizers::bilevel::kkt::get_tol_mip_absolute_gap (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::bilevel::kkt::get_tol_mip_relative_gap (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT24get_tol_mip_relative_gapEv", false]], "idol::optimizers::bilevel::kkt::get_tol_optimality (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_tol_optimalityEv", false]], "idol::optimizers::bilevel::kkt::get_var_primal (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_var_primalERK3Var", false]], "idol::optimizers::bilevel::kkt::get_var_ray (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT11get_var_rayERK3Var", false]], "idol::optimizers::bilevel::kkt::get_var_reduced_cost (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT20get_var_reduced_costERK3Var", false]], "idol::optimizers::bilevel::kkt::is (c++ function)": [[5, "_CPPv4I0ENK4idol10Optimizers7Bilevel3KKT2isEbv", false]], "idol::optimizers::bilevel::kkt::is_terminated (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT13is_terminatedEv", false]], "idol::optimizers::bilevel::kkt::kkt (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT3KKTERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactoryRKNSt8optionalI10AnnotationIdEEE", false]], "idol::optimizers::bilevel::kkt::name (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT4nameEv", false]], "idol::optimizers::bilevel::kkt::parent (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT6parentEv", false]], "idol::optimizers::bilevel::kkt::set_param_best_bound_stop (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT25set_param_best_bound_stopEd", false]], "idol::optimizers::bilevel::kkt::set_param_best_obj_stop (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT23set_param_best_obj_stopEd", false]], "idol::optimizers::bilevel::kkt::set_param_infeasible_or_unbounded_info (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::bilevel::kkt::set_param_iteration_limit (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT25set_param_iteration_limitEj", false]], "idol::optimizers::bilevel::kkt::set_param_logs (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT14set_param_logsEb", false]], "idol::optimizers::bilevel::kkt::set_param_presolve (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT18set_param_presolveEb", false]], "idol::optimizers::bilevel::kkt::set_param_threads (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT17set_param_threadsEj", false]], "idol::optimizers::bilevel::kkt::set_param_time_limit (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT20set_param_time_limitEd", false]], "idol::optimizers::bilevel::kkt::set_tol_feasibility (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT19set_tol_feasibilityEd", false]], "idol::optimizers::bilevel::kkt::set_tol_integer (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT15set_tol_integerEd", false]], "idol::optimizers::bilevel::kkt::set_tol_mip_absolute_gap (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::bilevel::kkt::set_tol_mip_relative_gap (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT24set_tol_mip_relative_gapEd", false]], "idol::optimizers::bilevel::kkt::set_tol_optimality (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT18set_tol_optimalityEd", false]], "idol::optimizers::bilevel::kkt::terminate (c++ function)": [[5, "_CPPv4N4idol10Optimizers7Bilevel3KKT9terminateEv", false]], "idol::optimizers::bilevel::kkt::time (c++ function)": [[5, "_CPPv4NK4idol10Optimizers7Bilevel3KKT4timeEv", false]], "idol::optimizers::bilevel::strongduality (c++ class)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDualityE", false]], "idol::optimizers::bilevel::strongduality::as (c++ function)": [[6, "_CPPv4I0EN4idol10Optimizers7Bilevel13StrongDuality2asER1Tv", false], [6, "_CPPv4I0ENK4idol10Optimizers7Bilevel13StrongDuality2asERK1Tv", false]], "idol::optimizers::bilevel::strongduality::get_absolute_gap (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality16get_absolute_gapEv", false]], "idol::optimizers::bilevel::strongduality::get_best_bound (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_best_boundEv", false]], "idol::optimizers::bilevel::strongduality::get_best_obj (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality12get_best_objEv", false]], "idol::optimizers::bilevel::strongduality::get_ctr_dual (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality12get_ctr_dualERK3Ctr", false]], "idol::optimizers::bilevel::strongduality::get_ctr_farkas (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_ctr_farkasERK3Ctr", false]], "idol::optimizers::bilevel::strongduality::get_n_solutions (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality15get_n_solutionsEv", false]], "idol::optimizers::bilevel::strongduality::get_param_best_bound_stop (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality25get_param_best_bound_stopEv", false]], "idol::optimizers::bilevel::strongduality::get_param_best_obj_stop (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality23get_param_best_obj_stopEv", false]], "idol::optimizers::bilevel::strongduality::get_param_infeasible_or_unbounded_info (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::bilevel::strongduality::get_param_iteration_limit (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality25get_param_iteration_limitEv", false]], "idol::optimizers::bilevel::strongduality::get_param_logs (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_param_logsEv", false]], "idol::optimizers::bilevel::strongduality::get_param_presolve (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_param_presolveEv", false]], "idol::optimizers::bilevel::strongduality::get_param_thread_limit (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality22get_param_thread_limitEv", false]], "idol::optimizers::bilevel::strongduality::get_param_time_limit (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality20get_param_time_limitEv", false]], "idol::optimizers::bilevel::strongduality::get_reason (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality10get_reasonEv", false]], "idol::optimizers::bilevel::strongduality::get_relative_gap (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality16get_relative_gapEv", false]], "idol::optimizers::bilevel::strongduality::get_remaining_time (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_remaining_timeEv", false]], "idol::optimizers::bilevel::strongduality::get_solution_index (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_solution_indexEv", false]], "idol::optimizers::bilevel::strongduality::get_status (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality10get_statusEv", false]], "idol::optimizers::bilevel::strongduality::get_tol_feasibility (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality19get_tol_feasibilityEv", false]], "idol::optimizers::bilevel::strongduality::get_tol_integer (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality15get_tol_integerEv", false]], "idol::optimizers::bilevel::strongduality::get_tol_mip_absolute_gap (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::bilevel::strongduality::get_tol_mip_relative_gap (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality24get_tol_mip_relative_gapEv", false]], "idol::optimizers::bilevel::strongduality::get_tol_optimality (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_tol_optimalityEv", false]], "idol::optimizers::bilevel::strongduality::get_var_primal (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_var_primalERK3Var", false]], "idol::optimizers::bilevel::strongduality::get_var_ray (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality11get_var_rayERK3Var", false]], "idol::optimizers::bilevel::strongduality::get_var_reduced_cost (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality20get_var_reduced_costERK3Var", false]], "idol::optimizers::bilevel::strongduality::is (c++ function)": [[6, "_CPPv4I0ENK4idol10Optimizers7Bilevel13StrongDuality2isEbv", false]], "idol::optimizers::bilevel::strongduality::is_terminated (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality13is_terminatedEv", false]], "idol::optimizers::bilevel::strongduality::name (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality4nameEv", false]], "idol::optimizers::bilevel::strongduality::parent (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality6parentEv", false]], "idol::optimizers::bilevel::strongduality::set_param_best_bound_stop (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality25set_param_best_bound_stopEd", false]], "idol::optimizers::bilevel::strongduality::set_param_best_obj_stop (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality23set_param_best_obj_stopEd", false]], "idol::optimizers::bilevel::strongduality::set_param_infeasible_or_unbounded_info (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::bilevel::strongduality::set_param_iteration_limit (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality25set_param_iteration_limitEj", false]], "idol::optimizers::bilevel::strongduality::set_param_logs (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality14set_param_logsEb", false]], "idol::optimizers::bilevel::strongduality::set_param_presolve (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality18set_param_presolveEb", false]], "idol::optimizers::bilevel::strongduality::set_param_threads (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality17set_param_threadsEj", false]], "idol::optimizers::bilevel::strongduality::set_param_time_limit (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality20set_param_time_limitEd", false]], "idol::optimizers::bilevel::strongduality::set_tol_feasibility (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality19set_tol_feasibilityEd", false]], "idol::optimizers::bilevel::strongduality::set_tol_integer (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality15set_tol_integerEd", false]], "idol::optimizers::bilevel::strongduality::set_tol_mip_absolute_gap (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::bilevel::strongduality::set_tol_mip_relative_gap (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality24set_tol_mip_relative_gapEd", false]], "idol::optimizers::bilevel::strongduality::set_tol_optimality (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality18set_tol_optimalityEd", false]], "idol::optimizers::bilevel::strongduality::strongduality (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality13StrongDualityERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactory", false]], "idol::optimizers::bilevel::strongduality::terminate (c++ function)": [[6, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality9terminateEv", false]], "idol::optimizers::bilevel::strongduality::time (c++ function)": [[6, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality4timeEv", false]], "idol::optimizers::dantzigwolfedecomposition (c++ class)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecompositionE", false]], "idol::optimizers::dantzigwolfedecomposition::as (c++ function)": [[44, "_CPPv4I0EN4idol10Optimizers25DantzigWolfeDecomposition2asER1Tv", false], [44, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2asERK1Tv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration (c++ class)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGenerationE", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::best_bound (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration10best_boundEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::best_obj (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration8best_objEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::columngeneration (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::execute (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration7executeEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::parent (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", false], [44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::primal_solution (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration15primal_solutionEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::reason (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6reasonEv", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::set_best_bound_stop (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration19set_best_bound_stopEd", false]], "idol::optimizers::dantzigwolfedecomposition::columngeneration::status (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6statusEv", false]], "idol::optimizers::dantzigwolfedecomposition::dantzigwolfedecomposition (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", false]], "idol::optimizers::dantzigwolfedecomposition::formulation (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", false], [44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_absolute_gap (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_absolute_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_best_bound (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_best_boundEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_best_obj (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition12get_best_objEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_best_bound_stop (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_best_bound_stopEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_best_obj_stop (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition23get_param_best_obj_stopEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_infeasible_or_unbounded_info (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_iteration_limit (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_iteration_limitEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_logs (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_param_logsEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_presolve (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_param_presolveEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_thread_limit (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition22get_param_thread_limitEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_param_time_limit (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition20get_param_time_limitEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_reason (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_reasonEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_relative_gap (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_relative_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_remaining_time (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_remaining_timeEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_status (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_statusEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_feasibility (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition19get_tol_feasibilityEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_integer (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition15get_tol_integerEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_mip_absolute_gap (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_mip_relative_gap (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_relative_gapEv", false]], "idol::optimizers::dantzigwolfedecomposition::get_tol_optimality (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_tol_optimalityEv", false]], "idol::optimizers::dantzigwolfedecomposition::is (c++ function)": [[44, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2isEbv", false]], "idol::optimizers::dantzigwolfedecomposition::is_terminated (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition13is_terminatedEv", false]], "idol::optimizers::dantzigwolfedecomposition::name (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4nameEv", false]], "idol::optimizers::dantzigwolfedecomposition::parent (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition6parentEv", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_best_bound_stop (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_best_bound_stopEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_best_obj_stop (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition23set_param_best_obj_stopEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_infeasible_or_unbounded_info (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_iteration_limit (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_iteration_limitEj", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_logs (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition14set_param_logsEb", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_presolve (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_param_presolveEb", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_threads (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition17set_param_threadsEj", false]], "idol::optimizers::dantzigwolfedecomposition::set_param_time_limit (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition20set_param_time_limitEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_feasibility (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition19set_tol_feasibilityEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_integer (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition15set_tol_integerEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_mip_absolute_gap (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_mip_relative_gap (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_relative_gapEd", false]], "idol::optimizers::dantzigwolfedecomposition::set_tol_optimality (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_tol_optimalityEd", false]], "idol::optimizers::dantzigwolfedecomposition::terminate (c++ function)": [[44, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition9terminateEv", false]], "idol::optimizers::dantzigwolfedecomposition::time (c++ function)": [[44, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4timeEv", false]], "idol::optimizers::glpk (c++ class)": [[52, "_CPPv4N4idol10Optimizers4GLPKE", false]], "idol::optimizers::glpk::as (c++ function)": [[52, "_CPPv4I0EN4idol10Optimizers4GLPK2asER1Tv", false], [52, "_CPPv4I0ENK4idol10Optimizers4GLPK2asERK1Tv", false]], "idol::optimizers::glpk::get_param_best_bound_stop (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK25get_param_best_bound_stopEv", false]], "idol::optimizers::glpk::get_param_best_obj_stop (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK23get_param_best_obj_stopEv", false]], "idol::optimizers::glpk::get_param_infeasible_or_unbounded_info (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::glpk::get_param_iteration_limit (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK25get_param_iteration_limitEv", false]], "idol::optimizers::glpk::get_param_logs (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK14get_param_logsEv", false]], "idol::optimizers::glpk::get_param_presolve (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK18get_param_presolveEv", false]], "idol::optimizers::glpk::get_param_thread_limit (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK22get_param_thread_limitEv", false]], "idol::optimizers::glpk::get_param_time_limit (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK20get_param_time_limitEv", false]], "idol::optimizers::glpk::get_remaining_time (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK18get_remaining_timeEv", false]], "idol::optimizers::glpk::get_tol_feasibility (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK19get_tol_feasibilityEv", false]], "idol::optimizers::glpk::get_tol_integer (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK15get_tol_integerEv", false]], "idol::optimizers::glpk::get_tol_mip_absolute_gap (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::glpk::get_tol_mip_relative_gap (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_relative_gapEv", false]], "idol::optimizers::glpk::get_tol_optimality (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK18get_tol_optimalityEv", false]], "idol::optimizers::glpk::glpk (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", false]], "idol::optimizers::glpk::is (c++ function)": [[52, "_CPPv4I0ENK4idol10Optimizers4GLPK2isEbv", false]], "idol::optimizers::glpk::is_terminated (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK13is_terminatedEv", false]], "idol::optimizers::glpk::name (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK4nameEv", false]], "idol::optimizers::glpk::operator[] (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPKixERK3Ctr", false], [52, "_CPPv4N4idol10Optimizers4GLPKixERK3Var", false], [52, "_CPPv4NK4idol10Optimizers4GLPKixERK3Ctr", false], [52, "_CPPv4NK4idol10Optimizers4GLPKixERK3Var", false]], "idol::optimizers::glpk::parent (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK6parentEv", false]], "idol::optimizers::glpk::read_from_file (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", false]], "idol::optimizers::glpk::set_param_best_bound_stop (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK25set_param_best_bound_stopEd", false]], "idol::optimizers::glpk::set_param_best_obj_stop (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK23set_param_best_obj_stopEd", false]], "idol::optimizers::glpk::set_param_infeasible_or_unbounded_info (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::glpk::set_param_iteration_limit (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK25set_param_iteration_limitEj", false]], "idol::optimizers::glpk::set_param_logs (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK14set_param_logsEb", false]], "idol::optimizers::glpk::set_param_presolve (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK18set_param_presolveEb", false]], "idol::optimizers::glpk::set_param_threads (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK17set_param_threadsEj", false]], "idol::optimizers::glpk::set_param_time_limit (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK20set_param_time_limitEd", false]], "idol::optimizers::glpk::set_tol_feasibility (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK19set_tol_feasibilityEd", false]], "idol::optimizers::glpk::set_tol_integer (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK15set_tol_integerEd", false]], "idol::optimizers::glpk::set_tol_mip_absolute_gap (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::glpk::set_tol_mip_relative_gap (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_relative_gapEd", false]], "idol::optimizers::glpk::set_tol_optimality (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK18set_tol_optimalityEd", false]], "idol::optimizers::glpk::terminate (c++ function)": [[52, "_CPPv4N4idol10Optimizers4GLPK9terminateEv", false]], "idol::optimizers::glpk::time (c++ function)": [[52, "_CPPv4NK4idol10Optimizers4GLPK4timeEv", false]], "idol::optimizers::gurobi (c++ class)": [[53, "_CPPv4N4idol10Optimizers6GurobiE", false]], "idol::optimizers::gurobi::add_callback (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi12add_callbackEP8Callback", false]], "idol::optimizers::gurobi::as (c++ function)": [[53, "_CPPv4I0EN4idol10Optimizers6Gurobi2asER1Tv", false], [53, "_CPPv4I0ENK4idol10Optimizers6Gurobi2asERK1Tv", false]], "idol::optimizers::gurobi::env (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi3envEv", false], [53, "_CPPv4NK4idol10Optimizers6Gurobi3envEv", false]], "idol::optimizers::gurobi::get_param_best_bound_stop (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_best_bound_stopEv", false]], "idol::optimizers::gurobi::get_param_best_obj_stop (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi23get_param_best_obj_stopEv", false]], "idol::optimizers::gurobi::get_param_infeasible_or_unbounded_info (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::gurobi::get_param_iteration_limit (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_iteration_limitEv", false]], "idol::optimizers::gurobi::get_param_logs (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi14get_param_logsEv", false]], "idol::optimizers::gurobi::get_param_presolve (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi18get_param_presolveEv", false]], "idol::optimizers::gurobi::get_param_thread_limit (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi22get_param_thread_limitEv", false]], "idol::optimizers::gurobi::get_param_time_limit (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi20get_param_time_limitEv", false]], "idol::optimizers::gurobi::get_remaining_time (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi18get_remaining_timeEv", false]], "idol::optimizers::gurobi::get_tol_feasibility (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi19get_tol_feasibilityEv", false]], "idol::optimizers::gurobi::get_tol_integer (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi15get_tol_integerEv", false]], "idol::optimizers::gurobi::get_tol_mip_absolute_gap (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::gurobi::get_tol_mip_relative_gap (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_relative_gapEv", false]], "idol::optimizers::gurobi::get_tol_optimality (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi18get_tol_optimalityEv", false]], "idol::optimizers::gurobi::gurobi (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", false], [53, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", false]], "idol::optimizers::gurobi::is (c++ function)": [[53, "_CPPv4I0ENK4idol10Optimizers6Gurobi2isEbv", false]], "idol::optimizers::gurobi::is_terminated (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi13is_terminatedEv", false]], "idol::optimizers::gurobi::model (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi5modelEv", false], [53, "_CPPv4NK4idol10Optimizers6Gurobi5modelEv", false]], "idol::optimizers::gurobi::name (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi4nameEv", false]], "idol::optimizers::gurobi::operator[] (c++ function)": [[53, "_CPPv4N4idol10Optimizers6GurobiixERK3Ctr", false], [53, "_CPPv4N4idol10Optimizers6GurobiixERK3Var", false], [53, "_CPPv4NK4idol10Optimizers6GurobiixERK3Ctr", false], [53, "_CPPv4NK4idol10Optimizers6GurobiixERK3Var", false]], "idol::optimizers::gurobi::parent (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi6parentEv", false]], "idol::optimizers::gurobi::read_from_file (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", false]], "idol::optimizers::gurobi::set_lazy_cut (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi12set_lazy_cutEb", false]], "idol::optimizers::gurobi::set_max_n_solution_in_pool (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi26set_max_n_solution_in_poolEj", false]], "idol::optimizers::gurobi::set_param (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", false], [53, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", false]], "idol::optimizers::gurobi::set_param_best_bound_stop (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi25set_param_best_bound_stopEd", false]], "idol::optimizers::gurobi::set_param_best_obj_stop (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi23set_param_best_obj_stopEd", false]], "idol::optimizers::gurobi::set_param_infeasible_or_unbounded_info (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::gurobi::set_param_iteration_limit (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi25set_param_iteration_limitEj", false]], "idol::optimizers::gurobi::set_param_logs (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi14set_param_logsEb", false]], "idol::optimizers::gurobi::set_param_presolve (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi18set_param_presolveEb", false]], "idol::optimizers::gurobi::set_param_threads (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi17set_param_threadsEj", false]], "idol::optimizers::gurobi::set_param_time_limit (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi20set_param_time_limitEd", false]], "idol::optimizers::gurobi::set_tol_feasibility (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi19set_tol_feasibilityEd", false]], "idol::optimizers::gurobi::set_tol_integer (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi15set_tol_integerEd", false]], "idol::optimizers::gurobi::set_tol_mip_absolute_gap (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::gurobi::set_tol_mip_relative_gap (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_relative_gapEd", false]], "idol::optimizers::gurobi::set_tol_optimality (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi18set_tol_optimalityEd", false]], "idol::optimizers::gurobi::terminate (c++ function)": [[53, "_CPPv4N4idol10Optimizers6Gurobi9terminateEv", false]], "idol::optimizers::gurobi::time (c++ function)": [[53, "_CPPv4NK4idol10Optimizers6Gurobi4timeEv", false]], "idol::optimizers::padm (c++ class)": [[79, "_CPPv4N4idol10Optimizers4PADME", false]], "idol::optimizers::padm::as (c++ function)": [[79, "_CPPv4I0EN4idol10Optimizers4PADM2asER1Tv", false], [79, "_CPPv4I0ENK4idol10Optimizers4PADM2asERK1Tv", false]], "idol::optimizers::padm::get_absolute_gap (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM16get_absolute_gapEv", false]], "idol::optimizers::padm::get_best_bound (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM14get_best_boundEv", false]], "idol::optimizers::padm::get_best_obj (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM12get_best_objEv", false]], "idol::optimizers::padm::get_ctr_dual (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM12get_ctr_dualERK3Ctr", false]], "idol::optimizers::padm::get_ctr_farkas (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM14get_ctr_farkasERK3Ctr", false]], "idol::optimizers::padm::get_inner_loop_iteration_count (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM30get_inner_loop_iteration_countEv", false]], "idol::optimizers::padm::get_n_solutions (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM15get_n_solutionsEv", false]], "idol::optimizers::padm::get_outer_loop_iteration_count (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM30get_outer_loop_iteration_countEv", false]], "idol::optimizers::padm::get_param_best_bound_stop (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM25get_param_best_bound_stopEv", false]], "idol::optimizers::padm::get_param_best_obj_stop (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM23get_param_best_obj_stopEv", false]], "idol::optimizers::padm::get_param_infeasible_or_unbounded_info (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM38get_param_infeasible_or_unbounded_infoEv", false]], "idol::optimizers::padm::get_param_iteration_limit (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM25get_param_iteration_limitEv", false]], "idol::optimizers::padm::get_param_logs (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM14get_param_logsEv", false]], "idol::optimizers::padm::get_param_presolve (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM18get_param_presolveEv", false]], "idol::optimizers::padm::get_param_thread_limit (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM22get_param_thread_limitEv", false]], "idol::optimizers::padm::get_param_time_limit (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM20get_param_time_limitEv", false]], "idol::optimizers::padm::get_reason (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM10get_reasonEv", false]], "idol::optimizers::padm::get_relative_gap (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM16get_relative_gapEv", false]], "idol::optimizers::padm::get_remaining_time (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM18get_remaining_timeEv", false]], "idol::optimizers::padm::get_solution_index (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM18get_solution_indexEv", false]], "idol::optimizers::padm::get_status (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM10get_statusEv", false]], "idol::optimizers::padm::get_tol_feasibility (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM19get_tol_feasibilityEv", false]], "idol::optimizers::padm::get_tol_integer (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM15get_tol_integerEv", false]], "idol::optimizers::padm::get_tol_mip_absolute_gap (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM24get_tol_mip_absolute_gapEv", false]], "idol::optimizers::padm::get_tol_mip_relative_gap (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM24get_tol_mip_relative_gapEv", false]], "idol::optimizers::padm::get_tol_optimality (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM18get_tol_optimalityEv", false]], "idol::optimizers::padm::get_var_primal (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM14get_var_primalERK3Var", false]], "idol::optimizers::padm::get_var_ray (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM11get_var_rayERK3Var", false]], "idol::optimizers::padm::get_var_reduced_cost (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM20get_var_reduced_costERK3Var", false]], "idol::optimizers::padm::is (c++ function)": [[79, "_CPPv4I0ENK4idol10Optimizers4PADM2isEbv", false]], "idol::optimizers::padm::is_terminated (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM13is_terminatedEv", false]], "idol::optimizers::padm::iterationplot (c++ class)": [[79, "_CPPv4N4idol10Optimizers4PADM13IterationPlotE", false]], "idol::optimizers::padm::iterationplot::iterationplot (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM13IterationPlot13IterationPlotERN5Plots7ManagerE", false]], "idol::optimizers::padm::iterationplot::update (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM13IterationPlot6updateEjjRKNSt6vectorIdEERKNSt6vectorIdEE", false]], "idol::optimizers::padm::name (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM4nameEv", false]], "idol::optimizers::padm::padm (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", false]], "idol::optimizers::padm::parent (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM6parentEv", false]], "idol::optimizers::padm::set_param_best_bound_stop (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM25set_param_best_bound_stopEd", false]], "idol::optimizers::padm::set_param_best_obj_stop (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM23set_param_best_obj_stopEd", false]], "idol::optimizers::padm::set_param_infeasible_or_unbounded_info (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM38set_param_infeasible_or_unbounded_infoEb", false]], "idol::optimizers::padm::set_param_iteration_limit (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM25set_param_iteration_limitEj", false]], "idol::optimizers::padm::set_param_logs (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM14set_param_logsEb", false]], "idol::optimizers::padm::set_param_presolve (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM18set_param_presolveEb", false]], "idol::optimizers::padm::set_param_threads (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM17set_param_threadsEj", false]], "idol::optimizers::padm::set_param_time_limit (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM20set_param_time_limitEd", false]], "idol::optimizers::padm::set_tol_feasibility (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM19set_tol_feasibilityEd", false]], "idol::optimizers::padm::set_tol_integer (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM15set_tol_integerEd", false]], "idol::optimizers::padm::set_tol_mip_absolute_gap (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM24set_tol_mip_absolute_gapEd", false]], "idol::optimizers::padm::set_tol_mip_relative_gap (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM24set_tol_mip_relative_gapEd", false]], "idol::optimizers::padm::set_tol_optimality (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM18set_tol_optimalityEd", false]], "idol::optimizers::padm::sub_problem_spec (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM16sub_problem_specEj", false]], "idol::optimizers::padm::terminate (c++ function)": [[79, "_CPPv4N4idol10Optimizers4PADM9terminateEv", false]], "idol::optimizers::padm::time (c++ function)": [[79, "_CPPv4NK4idol10Optimizers4PADM4timeEv", false]], "idol::osi (c++ class)": [[56, "_CPPv4N4idol3OsiE", false]], "idol::osi::as (c++ function)": [[56, "_CPPv4I0EN4idol3Osi2asER1Tv", false], [56, "_CPPv4I0ENK4idol3Osi2asERK1Tv", false]], "idol::osi::clone (c++ function)": [[56, "_CPPv4NK4idol3Osi5cloneEv", false]], "idol::osi::conditional (c++ function)": [[56, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [56, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osi::continuousrelaxation (c++ function)": [[56, "_CPPv4N4idol3Osi20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osi::create_osi_solver_interface (c++ function)": [[56, "_CPPv4NK4idol3Osi27create_osi_solver_interfaceEv", false]], "idol::osi::is (c++ function)": [[56, "_CPPv4I0ENK4idol3Osi2isEbv", false]], "idol::osi::operator() (c++ function)": [[56, "_CPPv4NK4idol3OsiclERK5Model", false]], "idol::osi::operator= (c++ function)": [[56, "_CPPv4N4idol3OsiaSERK3Osi", false], [56, "_CPPv4N4idol3OsiaSERR3Osi", false]], "idol::osi::osi (c++ function)": [[56, "_CPPv4N4idol3Osi3OsiERK18OsiSolverInterface", false], [56, "_CPPv4N4idol3Osi3OsiERK3Osi", false], [56, "_CPPv4N4idol3Osi3OsiERR3Osi", false]], "idol::osi::with_absolute_gap_tolerance (c++ function)": [[56, "_CPPv4N4idol3Osi27with_absolute_gap_toleranceEd", false]], "idol::osi::with_best_bound_stop (c++ function)": [[56, "_CPPv4N4idol3Osi20with_best_bound_stopEd", false]], "idol::osi::with_best_obj_stop (c++ function)": [[56, "_CPPv4N4idol3Osi18with_best_obj_stopEd", false]], "idol::osi::with_infeasible_or_unbounded_info (c++ function)": [[56, "_CPPv4N4idol3Osi33with_infeasible_or_unbounded_infoEb", false]], "idol::osi::with_iteration_limit (c++ function)": [[56, "_CPPv4N4idol3Osi20with_iteration_limitEj", false]], "idol::osi::with_logs (c++ function)": [[56, "_CPPv4N4idol3Osi9with_logsEb", false]], "idol::osi::with_presolve (c++ function)": [[56, "_CPPv4N4idol3Osi13with_presolveEb", false]], "idol::osi::with_relative_gap_tolerance (c++ function)": [[56, "_CPPv4N4idol3Osi27with_relative_gap_toleranceEd", false]], "idol::osi::with_thread_limit (c++ function)": [[56, "_CPPv4N4idol3Osi17with_thread_limitEj", false]], "idol::osi::with_time_limit (c++ function)": [[56, "_CPPv4N4idol3Osi15with_time_limitEd", false]], "idol::osicbc (c++ class)": [[57, "_CPPv4N4idol6OsiCbcE", false]], "idol::osicbc::as (c++ function)": [[57, "_CPPv4I0EN4idol6OsiCbc2asER1Tv", false], [57, "_CPPv4I0ENK4idol6OsiCbc2asERK1Tv", false]], "idol::osicbc::clone (c++ function)": [[57, "_CPPv4NK4idol6OsiCbc5cloneEv", false]], "idol::osicbc::conditional (c++ function)": [[57, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [57, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osicbc::continuousrelaxation (c++ function)": [[57, "_CPPv4N4idol6OsiCbc20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osicbc::create_osi_solver_interface (c++ function)": [[57, "_CPPv4NK4idol6OsiCbc27create_osi_solver_interfaceEv", false]], "idol::osicbc::is (c++ function)": [[57, "_CPPv4I0ENK4idol6OsiCbc2isEbv", false]], "idol::osicbc::operator() (c++ function)": [[57, "_CPPv4NK4idol6OsiCbcclERK5Model", false]], "idol::osicbc::with_absolute_gap_tolerance (c++ function)": [[57, "_CPPv4N4idol6OsiCbc27with_absolute_gap_toleranceEd", false]], "idol::osicbc::with_best_bound_stop (c++ function)": [[57, "_CPPv4N4idol6OsiCbc20with_best_bound_stopEd", false]], "idol::osicbc::with_best_obj_stop (c++ function)": [[57, "_CPPv4N4idol6OsiCbc18with_best_obj_stopEd", false]], "idol::osicbc::with_infeasible_or_unbounded_info (c++ function)": [[57, "_CPPv4N4idol6OsiCbc33with_infeasible_or_unbounded_infoEb", false]], "idol::osicbc::with_iteration_limit (c++ function)": [[57, "_CPPv4N4idol6OsiCbc20with_iteration_limitEj", false]], "idol::osicbc::with_logs (c++ function)": [[57, "_CPPv4N4idol6OsiCbc9with_logsEb", false]], "idol::osicbc::with_presolve (c++ function)": [[57, "_CPPv4N4idol6OsiCbc13with_presolveEb", false]], "idol::osicbc::with_relative_gap_tolerance (c++ function)": [[57, "_CPPv4N4idol6OsiCbc27with_relative_gap_toleranceEd", false]], "idol::osicbc::with_thread_limit (c++ function)": [[57, "_CPPv4N4idol6OsiCbc17with_thread_limitEj", false]], "idol::osicbc::with_time_limit (c++ function)": [[57, "_CPPv4N4idol6OsiCbc15with_time_limitEd", false]], "idol::osiclp (c++ class)": [[58, "_CPPv4N4idol6OsiClpE", false]], "idol::osiclp::as (c++ function)": [[58, "_CPPv4I0EN4idol6OsiClp2asER1Tv", false], [58, "_CPPv4I0ENK4idol6OsiClp2asERK1Tv", false]], "idol::osiclp::clone (c++ function)": [[58, "_CPPv4NK4idol6OsiClp5cloneEv", false]], "idol::osiclp::conditional (c++ function)": [[58, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [58, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osiclp::continuousrelaxation (c++ function)": [[58, "_CPPv4N4idol6OsiClp20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osiclp::create_osi_solver_interface (c++ function)": [[58, "_CPPv4NK4idol6OsiClp27create_osi_solver_interfaceEv", false]], "idol::osiclp::is (c++ function)": [[58, "_CPPv4I0ENK4idol6OsiClp2isEbv", false]], "idol::osiclp::operator() (c++ function)": [[58, "_CPPv4NK4idol6OsiClpclERK5Model", false]], "idol::osiclp::with_absolute_gap_tolerance (c++ function)": [[58, "_CPPv4N4idol6OsiClp27with_absolute_gap_toleranceEd", false]], "idol::osiclp::with_best_bound_stop (c++ function)": [[58, "_CPPv4N4idol6OsiClp20with_best_bound_stopEd", false]], "idol::osiclp::with_best_obj_stop (c++ function)": [[58, "_CPPv4N4idol6OsiClp18with_best_obj_stopEd", false]], "idol::osiclp::with_infeasible_or_unbounded_info (c++ function)": [[58, "_CPPv4N4idol6OsiClp33with_infeasible_or_unbounded_infoEb", false]], "idol::osiclp::with_iteration_limit (c++ function)": [[58, "_CPPv4N4idol6OsiClp20with_iteration_limitEj", false]], "idol::osiclp::with_logs (c++ function)": [[58, "_CPPv4N4idol6OsiClp9with_logsEb", false]], "idol::osiclp::with_presolve (c++ function)": [[58, "_CPPv4N4idol6OsiClp13with_presolveEb", false]], "idol::osiclp::with_relative_gap_tolerance (c++ function)": [[58, "_CPPv4N4idol6OsiClp27with_relative_gap_toleranceEd", false]], "idol::osiclp::with_thread_limit (c++ function)": [[58, "_CPPv4N4idol6OsiClp17with_thread_limitEj", false]], "idol::osiclp::with_time_limit (c++ function)": [[58, "_CPPv4N4idol6OsiClp15with_time_limitEd", false]], "idol::osicplex (c++ class)": [[59, "_CPPv4N4idol8OsiCplexE", false]], "idol::osicplex::as (c++ function)": [[59, "_CPPv4I0EN4idol8OsiCplex2asER1Tv", false], [59, "_CPPv4I0ENK4idol8OsiCplex2asERK1Tv", false]], "idol::osicplex::clone (c++ function)": [[59, "_CPPv4NK4idol8OsiCplex5cloneEv", false]], "idol::osicplex::conditional (c++ function)": [[59, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [59, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osicplex::continuousrelaxation (c++ function)": [[59, "_CPPv4N4idol8OsiCplex20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osicplex::create_osi_solver_interface (c++ function)": [[59, "_CPPv4NK4idol8OsiCplex27create_osi_solver_interfaceEv", false]], "idol::osicplex::is (c++ function)": [[59, "_CPPv4I0ENK4idol8OsiCplex2isEbv", false]], "idol::osicplex::operator() (c++ function)": [[59, "_CPPv4NK4idol8OsiCplexclERK5Model", false]], "idol::osicplex::with_absolute_gap_tolerance (c++ function)": [[59, "_CPPv4N4idol8OsiCplex27with_absolute_gap_toleranceEd", false]], "idol::osicplex::with_best_bound_stop (c++ function)": [[59, "_CPPv4N4idol8OsiCplex20with_best_bound_stopEd", false]], "idol::osicplex::with_best_obj_stop (c++ function)": [[59, "_CPPv4N4idol8OsiCplex18with_best_obj_stopEd", false]], "idol::osicplex::with_infeasible_or_unbounded_info (c++ function)": [[59, "_CPPv4N4idol8OsiCplex33with_infeasible_or_unbounded_infoEb", false]], "idol::osicplex::with_iteration_limit (c++ function)": [[59, "_CPPv4N4idol8OsiCplex20with_iteration_limitEj", false]], "idol::osicplex::with_logs (c++ function)": [[59, "_CPPv4N4idol8OsiCplex9with_logsEb", false]], "idol::osicplex::with_presolve (c++ function)": [[59, "_CPPv4N4idol8OsiCplex13with_presolveEb", false]], "idol::osicplex::with_relative_gap_tolerance (c++ function)": [[59, "_CPPv4N4idol8OsiCplex27with_relative_gap_toleranceEd", false]], "idol::osicplex::with_thread_limit (c++ function)": [[59, "_CPPv4N4idol8OsiCplex17with_thread_limitEj", false]], "idol::osicplex::with_time_limit (c++ function)": [[59, "_CPPv4N4idol8OsiCplex15with_time_limitEd", false]], "idol::osisymphony (c++ class)": [[60, "_CPPv4N4idol11OsiSymphonyE", false]], "idol::osisymphony::as (c++ function)": [[60, "_CPPv4I0EN4idol11OsiSymphony2asER1Tv", false], [60, "_CPPv4I0ENK4idol11OsiSymphony2asERK1Tv", false]], "idol::osisymphony::clone (c++ function)": [[60, "_CPPv4NK4idol11OsiSymphony5cloneEv", false]], "idol::osisymphony::conditional (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", false], [60, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", false]], "idol::osisymphony::continuousrelaxation (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony20ContinuousRelaxationERK18OsiSolverInterface", false]], "idol::osisymphony::create_osi_solver_interface (c++ function)": [[60, "_CPPv4NK4idol11OsiSymphony27create_osi_solver_interfaceEv", false]], "idol::osisymphony::is (c++ function)": [[60, "_CPPv4I0ENK4idol11OsiSymphony2isEbv", false]], "idol::osisymphony::operator() (c++ function)": [[60, "_CPPv4NK4idol11OsiSymphonyclERK5Model", false]], "idol::osisymphony::with_absolute_gap_tolerance (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony27with_absolute_gap_toleranceEd", false]], "idol::osisymphony::with_best_bound_stop (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony20with_best_bound_stopEd", false]], "idol::osisymphony::with_best_obj_stop (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony18with_best_obj_stopEd", false]], "idol::osisymphony::with_infeasible_or_unbounded_info (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony33with_infeasible_or_unbounded_infoEb", false]], "idol::osisymphony::with_iteration_limit (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony20with_iteration_limitEj", false]], "idol::osisymphony::with_logs (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony9with_logsEb", false]], "idol::osisymphony::with_presolve (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony13with_presolveEb", false]], "idol::osisymphony::with_relative_gap_tolerance (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony27with_relative_gap_toleranceEd", false]], "idol::osisymphony::with_thread_limit (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony17with_thread_limitEj", false]], "idol::osisymphony::with_time_limit (c++ function)": [[60, "_CPPv4N4idol11OsiSymphony15with_time_limitEd", false]], "idol::padm (c++ class)": [[80, "_CPPv4N4idol4PADME", false]], "idol::padm::as (c++ function)": [[80, "_CPPv4I0EN4idol4PADM2asER1Tv", false], [80, "_CPPv4I0ENK4idol4PADM2asERK1Tv", false]], "idol::padm::clone (c++ function)": [[80, "_CPPv4NK4idol4PADM5cloneEv", false]], "idol::padm::conditional (c++ function)": [[80, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEE", false], [80, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEERKNSt8functionIFvR4PADMEEE", false]], "idol::padm::is (c++ function)": [[80, "_CPPv4I0ENK4idol4PADM2isEbv", false]], "idol::padm::operator() (c++ function)": [[80, "_CPPv4NK4idol4PADMclERK5Model", false]], "idol::padm::operator= (c++ function)": [[80, "_CPPv4N4idol4PADMaSERK4PADM", false], [80, "_CPPv4N4idol4PADMaSERR4PADM", false]], "idol::padm::padm (c++ function)": [[80, "_CPPv4N4idol4PADM4PADME10AnnotationIjE", false], [80, "_CPPv4N4idol4PADM4PADME10AnnotationIjE10AnnotationIdE", false], [80, "_CPPv4N4idol4PADM4PADMERK4PADM", false], [80, "_CPPv4N4idol4PADM4PADMERR4PADM", false]], "idol::padm::with_absolute_gap_tolerance (c++ function)": [[80, "_CPPv4N4idol4PADM27with_absolute_gap_toleranceEd", false]], "idol::padm::with_best_bound_stop (c++ function)": [[80, "_CPPv4N4idol4PADM20with_best_bound_stopEd", false]], "idol::padm::with_best_obj_stop (c++ function)": [[80, "_CPPv4N4idol4PADM18with_best_obj_stopEd", false]], "idol::padm::with_default_sub_problem_spec (c++ function)": [[80, "_CPPv4N4idol4PADM29with_default_sub_problem_specEN3ADM10SubProblemE", false]], "idol::padm::with_feasible_solution_status (c++ function)": [[80, "_CPPv4N4idol4PADM29with_feasible_solution_statusE14SolutionStatus", false]], "idol::padm::with_infeasible_or_unbounded_info (c++ function)": [[80, "_CPPv4N4idol4PADM33with_infeasible_or_unbounded_infoEb", false]], "idol::padm::with_iteration_limit (c++ function)": [[80, "_CPPv4N4idol4PADM20with_iteration_limitEj", false]], "idol::padm::with_iteration_plot (c++ function)": [[80, "_CPPv4N4idol4PADM19with_iteration_plotERN5Plots7ManagerE", false]], "idol::padm::with_logs (c++ function)": [[80, "_CPPv4N4idol4PADM9with_logsEb", false]], "idol::padm::with_penalty_update (c++ function)": [[80, "_CPPv4N4idol4PADM19with_penalty_updateERK13PenaltyUpdate", false]], "idol::padm::with_presolve (c++ function)": [[80, "_CPPv4N4idol4PADM13with_presolveEb", false]], "idol::padm::with_relative_gap_tolerance (c++ function)": [[80, "_CPPv4N4idol4PADM27with_relative_gap_toleranceEd", false]], "idol::padm::with_rescaling_threshold (c++ function)": [[80, "_CPPv4N4idol4PADM24with_rescaling_thresholdEd", false]], "idol::padm::with_sub_problem_spec (c++ function)": [[80, "_CPPv4N4idol4PADM21with_sub_problem_specEjN3ADM10SubProblemE", false]], "idol::padm::with_thread_limit (c++ function)": [[80, "_CPPv4N4idol4PADM17with_thread_limitEj", false]], "idol::padm::with_time_limit (c++ function)": [[80, "_CPPv4N4idol4PADM15with_time_limitEd", false]], "idol::point (c++ class)": [[72, "_CPPv4I0EN4idol5PointE", false]], "idol::point::begin (c++ function)": [[72, "_CPPv4N4idol5Point5beginEv", false], [72, "_CPPv4NK4idol5Point5beginEv", false]], "idol::point::cbegin (c++ function)": [[72, "_CPPv4NK4idol5Point6cbeginEv", false]], "idol::point::cend (c++ function)": [[72, "_CPPv4NK4idol5Point4cendEv", false]], "idol::point::clear (c++ function)": [[72, "_CPPv4N4idol5Point5clearEv", false]], "idol::point::const_iterator (c++ type)": [[72, "_CPPv4N4idol5Point14const_iteratorE", false]], "idol::point::empty (c++ function)": [[72, "_CPPv4NK4idol5Point5emptyEv", false]], "idol::point::end (c++ function)": [[72, "_CPPv4N4idol5Point3endEv", false], [72, "_CPPv4NK4idol5Point3endEv", false]], "idol::point::get (c++ function)": [[72, "_CPPv4NK4idol5Point3getERK1T", false]], "idol::point::has_index (c++ function)": [[72, "_CPPv4NK4idol5Point9has_indexERK1T", false]], "idol::point::has_objective_value (c++ function)": [[72, "_CPPv4NK4idol5Point19has_objective_valueEv", false]], "idol::point::is_zero (c++ function)": [[72, "_CPPv4NK4idol5Point7is_zeroEd", false]], "idol::point::iterator (c++ type)": [[72, "_CPPv4N4idol5Point8iteratorE", false]], "idol::point::merge_without_conflict (c++ function)": [[72, "_CPPv4N4idol5Point22merge_without_conflictERK12SparseVector", false]], "idol::point::objective_value (c++ function)": [[72, "_CPPv4NK4idol5Point15objective_valueEv", false]], "idol::point::operator*= (c++ function)": [[72, "_CPPv4N4idol5PointmLENSt13conditional_tINSt15is_arithmetic_vIdEEddEE", false], [72, "_CPPv4N4idol5PointmLEd", false]], "idol::point::operator+= (c++ function)": [[72, "_CPPv4N4idol5PointpLERK12SparseVector", false], [72, "_CPPv4N4idol5PointpLERK5Point", false], [72, "_CPPv4N4idol5PointpLERR5Point", false]], "idol::point::operator- (c++ function)": [[72, "_CPPv4NK4idol5PointmiEv", false]], "idol::point::operator-= (c++ function)": [[72, "_CPPv4N4idol5PointmIERK12SparseVector", false], [72, "_CPPv4N4idol5PointmIERK5Point", false], [72, "_CPPv4N4idol5PointmIERR5Point", false]], "idol::point::operator/= (c++ function)": [[72, "_CPPv4N4idol5PointdVENSt13conditional_tINSt15is_arithmetic_vIdEEddEE", false]], "idol::point::point (c++ function)": [[72, "_CPPv4N4idol5Point5PointERK12SparseVectorI1TdE", false], [72, "_CPPv4N4idol5Point5PointERR12SparseVectorI1TdE", false], [72, "_CPPv4N4idol5Point5PointEv", false]], "idol::point::reason (c++ function)": [[72, "_CPPv4NK4idol5Point6reasonEv", false]], "idol::point::remove (c++ function)": [[72, "_CPPv4N4idol5Point6removeERK1T", false]], "idol::point::reserve (c++ function)": [[72, "_CPPv4N4idol5Point7reserveEj", false]], "idol::point::reset_objective_value (c++ function)": [[72, "_CPPv4N4idol5Point21reset_objective_valueEv", false]], "idol::point::set (c++ function)": [[72, "_CPPv4N4idol5Point3setERK1TRKd", false]], "idol::point::set_objective_value (c++ function)": [[72, "_CPPv4N4idol5Point19set_objective_valueEd", false]], "idol::point::set_reason (c++ function)": [[72, "_CPPv4N4idol5Point10set_reasonE14SolutionReason", false]], "idol::point::set_status (c++ function)": [[72, "_CPPv4N4idol5Point10set_statusE14SolutionStatus", false]], "idol::point::size (c++ function)": [[72, "_CPPv4NK4idol5Point4sizeEv", false]], "idol::point::status (c++ function)": [[72, "_CPPv4NK4idol5Point6statusEv", false]], "idol::pseudocost (c++ class)": [[36, "_CPPv4N4idol10PseudoCostE", false]], "idol::pseudocost::pseudocost (c++ function)": [[36, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", false], [36, "_CPPv4N4idol10PseudoCost10PseudoCostEv", false]], "idol::pseudocost::strategy (c++ class)": [[36, "_CPPv4I0EN4idol10PseudoCost8StrategyE", false]], "idol::pseudocost::strategy::clone (c++ function)": [[36, "_CPPv4NK4idol10PseudoCost8Strategy5cloneEv", false]], "idol::pseudocost::strategy::operator() (c++ function)": [[36, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [36, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::pseudocost::strategy::strategy (c++ function)": [[36, "_CPPv4N4idol10PseudoCost8Strategy8StrategyERK10PseudoCost", false], [36, "_CPPv4N4idol10PseudoCost8Strategy8StrategyEv", false]], "idol::qctr (c++ class)": [[73, "_CPPv4N4idol4QCtrE", false]], "idol::qctr::get (c++ function)": [[73, "_CPPv4NK4idol4QCtr3getERK10AnnotationI6ValueTE", false]], "idol::qctr::id (c++ function)": [[73, "_CPPv4NK4idol4QCtr2idEv", false]], "idol::qctr::index (c++ function)": [[73, "_CPPv4NK4idol4QCtr5indexERK5Model", false]], "idol::qctr::is_in (c++ function)": [[73, "_CPPv4NK4idol4QCtr5is_inERK5Model", false]], "idol::qctr::make_vector (c++ function)": [[73, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", false]], "idol::qctr::name (c++ function)": [[73, "_CPPv4NK4idol4QCtr4nameEv", false]], "idol::qctr::qctr (c++ function)": [[73, "_CPPv4N4idol4QCtr4QCtrER3Env7CtrTypeNSt6stringE", false], [73, "_CPPv4N4idol4QCtr4QCtrER3EnvRK8TempQCtrNSt6stringE", false], [73, "_CPPv4N4idol4QCtr4QCtrER3EnvRR8TempQCtrNSt6stringE", false]], "idol::qctr::set (c++ function)": [[73, "_CPPv4NK4idol4QCtr3setERK10AnnotationI6ValueTEDpRR5ArgsT", false]], "idol::quadexpr (c++ class)": [[74, "_CPPv4I00EN4idol8QuadExprE", false]], "idol::quadexpr::affine (c++ function)": [[74, "_CPPv4N4idol8QuadExpr6affineEv", false], [74, "_CPPv4NK4idol8QuadExpr6affineEv", false]], "idol::quadexpr::begin (c++ function)": [[74, "_CPPv4N4idol8QuadExpr5beginEv", false], [74, "_CPPv4NK4idol8QuadExpr5beginEv", false]], "idol::quadexpr::cbegin (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr6cbeginEv", false]], "idol::quadexpr::cend (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr4cendEv", false]], "idol::quadexpr::clear (c++ function)": [[74, "_CPPv4N4idol8QuadExpr5clearEv", false]], "idol::quadexpr::clear_all (c++ function)": [[74, "_CPPv4N4idol8QuadExpr9clear_allEv", false]], "idol::quadexpr::const_iterator (c++ type)": [[74, "_CPPv4N4idol8QuadExpr14const_iteratorE", false]], "idol::quadexpr::empty (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr5emptyEv", false]], "idol::quadexpr::empty_all (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr9empty_allEv", false]], "idol::quadexpr::end (c++ function)": [[74, "_CPPv4N4idol8QuadExpr3endEv", false], [74, "_CPPv4NK4idol8QuadExpr3endEv", false]], "idol::quadexpr::get (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr3getERK6IndexT", false]], "idol::quadexpr::has_index (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr9has_indexERK6IndexT", false]], "idol::quadexpr::has_quadratic (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr13has_quadraticEv", false]], "idol::quadexpr::is_zero (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr7is_zeroEd", false]], "idol::quadexpr::iterator (c++ type)": [[74, "_CPPv4N4idol8QuadExpr8iteratorE", false]], "idol::quadexpr::merge_without_conflict (c++ function)": [[74, "_CPPv4N4idol8QuadExpr22merge_without_conflictERK12SparseVector", false]], "idol::quadexpr::operator*= (c++ function)": [[74, "_CPPv4N4idol8QuadExprmLENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", false], [74, "_CPPv4N4idol8QuadExprmLEd", false]], "idol::quadexpr::operator+= (c++ function)": [[74, "_CPPv4N4idol8QuadExprpLERK12SparseVector", false], [74, "_CPPv4N4idol8QuadExprpLERK4KeyT", false], [74, "_CPPv4N4idol8QuadExprpLERK7LinExprI4KeyT6ValueTE", false], [74, "_CPPv4N4idol8QuadExprpLERK8QuadExpr", false]], "idol::quadexpr::operator- (c++ function)": [[74, "_CPPv4NK4idol8QuadExprmiEv", false]], "idol::quadexpr::operator-= (c++ function)": [[74, "_CPPv4N4idol8QuadExprmIERK12SparseVector", false], [74, "_CPPv4N4idol8QuadExprmIERK4KeyT", false], [74, "_CPPv4N4idol8QuadExprmIERK7LinExprI4KeyT6ValueTE", false], [74, "_CPPv4N4idol8QuadExprmIERK8QuadExpr", false]], "idol::quadexpr::operator/= (c++ function)": [[74, "_CPPv4N4idol8QuadExprdVENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", false], [74, "_CPPv4N4idol8QuadExprdVEd", false]], "idol::quadexpr::operator= (c++ function)": [[74, "_CPPv4N4idol8QuadExpraSERK8QuadExpr", false], [74, "_CPPv4N4idol8QuadExpraSERR8QuadExpr", false]], "idol::quadexpr::quadexpr (c++ function)": [[74, "_CPPv4N4idol8QuadExpr8QuadExprE6ValueT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprE7AffExprI4KeyT6ValueTE", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprE7LinExprI4KeyT6ValueTE", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyTRK4KeyT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyTRK4KeyT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyTRK4KeyT", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprERR8QuadExpr", false], [74, "_CPPv4N4idol8QuadExpr8QuadExprEv", false]], "idol::quadexpr::remove (c++ function)": [[74, "_CPPv4N4idol8QuadExpr6removeERK6IndexT", false]], "idol::quadexpr::reserve (c++ function)": [[74, "_CPPv4N4idol8QuadExpr7reserveEj", false]], "idol::quadexpr::set (c++ function)": [[74, "_CPPv4N4idol8QuadExpr3setERK6IndexTRK6ValueT", false]], "idol::quadexpr::size (c++ function)": [[74, "_CPPv4NK4idol8QuadExpr4sizeEv", false]], "idol::quadexpr::zero (c++ member)": [[74, "_CPPv4N4idol8QuadExpr4ZeroE", false]], "idol::relative_gap (c++ function)": [[64, "_CPPv4N4idol12relative_gapEdd", false]], "idol::robust::description (c++ class)": [[82, "_CPPv4N4idol6Robust11DescriptionE", false]], "idol::robust::description::description (c++ function)": [[82, "_CPPv4N4idol6Robust11Description11DescriptionERK5Model", false]], "idol::robust::description::set_stage (c++ function)": [[82, "_CPPv4N4idol6Robust11Description9set_stageERK3Varj", false]], "idol::robust::description::set_uncertain_mat_coeff (c++ function)": [[82, "_CPPv4N4idol6Robust11Description23set_uncertain_mat_coeffERK3CtrRK3VarRK7LinExprI3VarE", false]], "idol::robust::description::set_uncertain_obj (c++ function)": [[82, "_CPPv4N4idol6Robust11Description17set_uncertain_objE7LinExprI3Var7LinExprI3VarEE", false], [82, "_CPPv4N4idol6Robust11Description17set_uncertain_objERK3VarRK7LinExprI3VarE", false]], "idol::robust::description::set_uncertain_rhs (c++ function)": [[82, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsE7LinExprI3Ctr7LinExprI3VarEE", false], [82, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsERK3CtrRK7LinExprI3VarE", false]], "idol::robust::description::stage (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description5stageERK3Ctr", false], [82, "_CPPv4NK4idol6Robust11Description5stageERK3Var", false]], "idol::robust::description::stage_annotation (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description16stage_annotationEv", false]], "idol::robust::description::uncertain_mat_coeff (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description19uncertain_mat_coeffERK3CtrRK3Var", false]], "idol::robust::description::uncertain_mat_coeffs (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description20uncertain_mat_coeffsERK3Ctr", false], [82, "_CPPv4NK4idol6Robust11Description20uncertain_mat_coeffsEv", false]], "idol::robust::description::uncertain_obj (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description13uncertain_objERK3Var", false], [82, "_CPPv4NK4idol6Robust11Description13uncertain_objEv", false]], "idol::robust::description::uncertain_rhs (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description13uncertain_rhsERK3Ctr", false], [82, "_CPPv4NK4idol6Robust11Description13uncertain_rhsEv", false]], "idol::robust::description::uncertainty_set (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description15uncertainty_setEv", false]], "idol::robust::description::view (c++ class)": [[82, "_CPPv4N4idol6Robust11Description4ViewE", false]], "idol::robust::description::view::description (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description4View11descriptionEv", false]], "idol::robust::description::view::deterministic_model (c++ function)": [[82, "_CPPv4NK4idol6Robust11Description4View19deterministic_modelEv", false]], "idol::robust::description::view::view (c++ function)": [[82, "_CPPv4N4idol6Robust11Description4View4ViewERK5ModelRK11Description", false]], "idol::round (c++ function)": [[64, "_CPPv4N4idol5roundEdj", false]], "idol::strongbranching (c++ class)": [[37, "_CPPv4N4idol15StrongBranchingE", false]], "idol::strongbranching::add_phase (c++ function)": [[37, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", false]], "idol::strongbranching::strategy (c++ class)": [[37, "_CPPv4I0EN4idol15StrongBranching8StrategyE", false]], "idol::strongbranching::strategy::clone (c++ function)": [[37, "_CPPv4NK4idol15StrongBranching8Strategy5cloneEv", false]], "idol::strongbranching::strategy::operator() (c++ function)": [[37, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [37, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::strongbranching::strategy::strategy (c++ function)": [[37, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK15StrongBranching", false], [37, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK8StrategyI9NodeInfoTE", false], [37, "_CPPv4N4idol15StrongBranching8Strategy8StrategyEv", false]], "idol::strongbranching::strongbranching (c++ function)": [[37, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", false], [37, "_CPPv4N4idol15StrongBranching15StrongBranchingEv", false]], "idol::strongbranching::with_max_n_variables (c++ function)": [[37, "_CPPv4N4idol15StrongBranching20with_max_n_variablesEj", false]], "idol::strongbranching::with_node_scoring_function (c++ function)": [[37, "_CPPv4N4idol15StrongBranching26with_node_scoring_functionERK17NodeScoreFunction", false]], "idol::tempctr (c++ class)": [[75, "_CPPv4N4idol7TempCtrE", false]], "idol::tempctr::lhs (c++ function)": [[75, "_CPPv4N4idol7TempCtr3lhsEv", false], [75, "_CPPv4NK4idol7TempCtr3lhsEv", false]], "idol::tempctr::operator= (c++ function)": [[75, "_CPPv4N4idol7TempCtraSERK7TempCtr", false], [75, "_CPPv4N4idol7TempCtraSERR7TempCtr", false]], "idol::tempctr::rhs (c++ function)": [[75, "_CPPv4N4idol7TempCtr3rhsEv", false], [75, "_CPPv4NK4idol7TempCtr3rhsEv", false]], "idol::tempctr::set_lhs (c++ function)": [[75, "_CPPv4N4idol7TempCtr7set_lhsERR7LinExprI3VarE", false]], "idol::tempctr::set_rhs (c++ function)": [[75, "_CPPv4N4idol7TempCtr7set_rhsEd", false]], "idol::tempctr::set_type (c++ function)": [[75, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", false]], "idol::tempctr::tempctr (c++ function)": [[75, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", false], [75, "_CPPv4N4idol7TempCtr7TempCtrERR7LinExprI3VarE7CtrTyped", false], [75, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", false], [75, "_CPPv4N4idol7TempCtr7TempCtrEv", false]], "idol::tempctr::type (c++ function)": [[75, "_CPPv4NK4idol7TempCtr4typeEv", false]], "idol::tempqctr (c++ class)": [[76, "_CPPv4N4idol8TempQCtrE", false]], "idol::tempqctr::expr (c++ function)": [[76, "_CPPv4N4idol8TempQCtr4exprEv", false], [76, "_CPPv4NK4idol8TempQCtr4exprEv", false]], "idol::tempqctr::operator= (c++ function)": [[76, "_CPPv4N4idol8TempQCtraSERK8TempQCtr", false], [76, "_CPPv4N4idol8TempQCtraSERR8TempQCtr", false]], "idol::tempqctr::set_expr (c++ function)": [[76, "_CPPv4N4idol8TempQCtr8set_exprERR8QuadExprI3VarE", false]], "idol::tempqctr::set_type (c++ function)": [[76, "_CPPv4N4idol8TempQCtr8set_typeE7CtrType", false]], "idol::tempqctr::tempqctr (c++ function)": [[76, "_CPPv4N4idol8TempQCtr8TempQCtrERK8TempQCtr", false], [76, "_CPPv4N4idol8TempQCtr8TempQCtrERR8QuadExprI3VarE7CtrType", false], [76, "_CPPv4N4idol8TempQCtr8TempQCtrERR8TempQCtr", false], [76, "_CPPv4N4idol8TempQCtr8TempQCtrEv", false]], "idol::tempqctr::type (c++ function)": [[76, "_CPPv4NK4idol8TempQCtr4typeEv", false]], "idol::tempvar (c++ class)": [[77, "_CPPv4N4idol7TempVarE", false]], "idol::tempvar::column (c++ function)": [[77, "_CPPv4N4idol7TempVar6columnEv", false], [77, "_CPPv4NK4idol7TempVar6columnEv", false]], "idol::tempvar::lb (c++ function)": [[77, "_CPPv4NK4idol7TempVar2lbEv", false]], "idol::tempvar::obj (c++ function)": [[77, "_CPPv4NK4idol7TempVar3objEv", false]], "idol::tempvar::operator= (c++ function)": [[77, "_CPPv4N4idol7TempVaraSERK7TempVar", false], [77, "_CPPv4N4idol7TempVaraSERR7TempVar", false]], "idol::tempvar::set_lb (c++ function)": [[77, "_CPPv4N4idol7TempVar6set_lbEd", false]], "idol::tempvar::set_obj (c++ function)": [[77, "_CPPv4N4idol7TempVar7set_objEd", false]], "idol::tempvar::set_type (c++ function)": [[77, "_CPPv4N4idol7TempVar8set_typeE7VarType", false]], "idol::tempvar::set_ub (c++ function)": [[77, "_CPPv4N4idol7TempVar6set_ubEd", false]], "idol::tempvar::tempvar (c++ function)": [[77, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", false], [77, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", false], [77, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", false], [77, "_CPPv4N4idol7TempVar7TempVarEv", false]], "idol::tempvar::type (c++ function)": [[77, "_CPPv4NK4idol7TempVar4typeEv", false]], "idol::tempvar::ub (c++ function)": [[77, "_CPPv4NK4idol7TempVar2ubEv", false]], "idol::tolerance (c++ type)": [[64, "_CPPv4N4idol9ToleranceE", false]], "idol::tolerance::digits (c++ member)": [[64, "_CPPv4N4idol9Tolerance6DigitsE", false]], "idol::tolerance::feasibility (c++ member)": [[64, "_CPPv4N4idol9Tolerance11FeasibilityE", false]], "idol::tolerance::integer (c++ member)": [[64, "_CPPv4N4idol9Tolerance7IntegerE", false]], "idol::tolerance::mipabsolutegap (c++ member)": [[64, "_CPPv4N4idol9Tolerance14MIPAbsoluteGapE", false]], "idol::tolerance::miprelativegap (c++ member)": [[64, "_CPPv4N4idol9Tolerance14MIPRelativeGapE", false]], "idol::tolerance::optimality (c++ member)": [[64, "_CPPv4N4idol9Tolerance10OptimalityE", false]], "idol::tolerance::sparsity (c++ member)": [[64, "_CPPv4N4idol9Tolerance8SparsityE", false]], "idol::uniformlyrandom (c++ class)": [[38, "_CPPv4N4idol15UniformlyRandomE", false]], "idol::uniformlyrandom::strategy (c++ class)": [[38, "_CPPv4I0EN4idol15UniformlyRandom8StrategyE", false]], "idol::uniformlyrandom::strategy::clone (c++ function)": [[38, "_CPPv4NK4idol15UniformlyRandom8Strategy5cloneEv", false]], "idol::uniformlyrandom::strategy::operator() (c++ function)": [[38, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", false], [38, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", false]], "idol::uniformlyrandom::strategy::strategy (c++ function)": [[38, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyERK15UniformlyRandom", false], [38, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyEv", false]], "idol::uniformlyrandom::uniformlyrandom (c++ function)": [[38, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", false], [38, "_CPPv4N4idol15UniformlyRandom15UniformlyRandomEv", false]], "idol::uniformlyrandom::with_seed (c++ function)": [[38, "_CPPv4N4idol15UniformlyRandom9with_seedEj", false]], "idol::usercutcallback (c++ class)": [[15, "_CPPv4N4idol15UserCutCallbackE", false]], "idol::usercutcallback::clone (c++ function)": [[15, "_CPPv4NK4idol15UserCutCallback5cloneEv", false]], "idol::usercutcallback::operator() (c++ function)": [[15, "_CPPv4N4idol15UserCutCallbackclEv", false]], "idol::usercutcallback::strategy (c++ class)": [[15, "_CPPv4N4idol15UserCutCallback8StrategyE", false]], "idol::usercutcallback::strategy::strategy (c++ function)": [[15, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", false]], "idol::usercutcallback::usercutcallback (c++ function)": [[15, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", false]], "idol::usercutcallback::with_separation_optimizer (c++ function)": [[15, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", false]], "idol::var (c++ class)": [[78, "_CPPv4N4idol3VarE", false]], "idol::var::get (c++ function)": [[78, "_CPPv4NK4idol3Var3getERK10AnnotationI6ValueTE", false]], "idol::var::id (c++ function)": [[78, "_CPPv4NK4idol3Var2idEv", false]], "idol::var::index (c++ function)": [[78, "_CPPv4NK4idol3Var5indexERK5Model", false]], "idol::var::is_in (c++ function)": [[78, "_CPPv4NK4idol3Var5is_inERK5Model", false]], "idol::var::make_vector (c++ function)": [[78, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", false]], "idol::var::name (c++ function)": [[78, "_CPPv4NK4idol3Var4nameEv", false]], "idol::var::operator= (c++ function)": [[78, "_CPPv4N4idol3VaraSERK3Var", false], [78, "_CPPv4N4idol3VaraSERR3Var", false]], "idol::var::set (c++ function)": [[78, "_CPPv4NK4idol3Var3setERK10AnnotationI6ValueTEDpRR5ArgsT", false]], "idol::var::var (c++ function)": [[78, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", false], [78, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", false], [78, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", false], [78, "_CPPv4N4idol3Var3VarERK3Var", false], [78, "_CPPv4N4idol3Var3VarERR3Var", false]], "idol::vartype (c++ enum)": [[63, "_CPPv4N4idol7VarTypeE", false]], "idol::vartype::binary (c++ enumerator)": [[63, "_CPPv4N4idol7VarType6BinaryE", false]], "idol::vartype::continuous (c++ enumerator)": [[63, "_CPPv4N4idol7VarType10ContinuousE", false]], "idol::vartype::integer (c++ enumerator)": [[63, "_CPPv4N4idol7VarType7IntegerE", false]], "idol::worstbound (c++ class)": [[31, "_CPPv4N4idol10WorstBoundE", false]], "idol::worstbound::strategy (c++ class)": [[31, "_CPPv4I0EN4idol10WorstBound8StrategyE", false]], "idol::worstbound::strategy::clone (c++ function)": [[31, "_CPPv4NK4idol10WorstBound8Strategy5cloneEv", false]], "idol::worstbound::strategy::operator() (c++ function)": [[31, "_CPPv4NK4idol10WorstBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", false]], "idol::worstbound::strategy::strategy (c++ function)": [[31, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", false]]}, "objects": {"": [[64, 0, 1, "_CPPv44idol", "idol"], [69, 1, 1, "_CPPv4I00EN4idol7AffExprE", "idol::AffExpr"], [69, 2, 1, "_CPPv4N4idol7AffExpr7AffExprE6ValueT", "idol::AffExpr::AffExpr"], [69, 2, 1, "_CPPv4N4idol7AffExpr7AffExprE7LinExprI4KeyTE", "idol::AffExpr::AffExpr"], [69, 2, 1, "_CPPv4N4idol7AffExpr7AffExprERK4KeyT", "idol::AffExpr::AffExpr"], [69, 2, 1, "_CPPv4N4idol7AffExpr7AffExprERK7AffExpr", "idol::AffExpr::AffExpr"], [69, 2, 1, "_CPPv4N4idol7AffExpr7AffExprERR7AffExpr", "idol::AffExpr::AffExpr"], [69, 2, 1, "_CPPv4N4idol7AffExpr7AffExprEv", "idol::AffExpr::AffExpr"], [69, 3, 1, "_CPPv4N4idol7AffExpr7AffExprE6ValueT", "idol::AffExpr::AffExpr::t_constant"], [69, 3, 1, "_CPPv4N4idol7AffExpr7AffExprE7LinExprI4KeyTE", "idol::AffExpr::AffExpr::t_expr"], [69, 3, 1, "_CPPv4N4idol7AffExpr7AffExprERK4KeyT", "idol::AffExpr::AffExpr::t_key"], [69, 3, 1, "_CPPv4N4idol7AffExpr7AffExprERK7AffExpr", "idol::AffExpr::AffExpr::t_src"], [69, 4, 1, "_CPPv4I00EN4idol7AffExprE", "idol::AffExpr::KeyT"], [69, 4, 1, "_CPPv4I00EN4idol7AffExprE", "idol::AffExpr::ValueT"], [69, 5, 1, "_CPPv4N4idol7AffExpr4ZeroE", "idol::AffExpr::Zero"], [69, 2, 1, "_CPPv4N4idol7AffExpr5clearEv", "idol::AffExpr::clear"], [69, 2, 1, "_CPPv4N4idol7AffExpr8constantEv", "idol::AffExpr::constant"], [69, 2, 1, "_CPPv4NK4idol7AffExpr8constantEv", "idol::AffExpr::constant"], [69, 2, 1, "_CPPv4NK4idol7AffExpr7is_zeroEd", "idol::AffExpr::is_zero"], [69, 3, 1, "_CPPv4NK4idol7AffExpr7is_zeroEd", "idol::AffExpr::is_zero::t_tolerance"], [69, 2, 1, "_CPPv4N4idol7AffExpr6linearEv", "idol::AffExpr::linear"], [69, 2, 1, "_CPPv4NK4idol7AffExpr6linearEv", "idol::AffExpr::linear"], [69, 2, 1, "_CPPv4N4idol7AffExprmLEd", "idol::AffExpr::operator*="], [69, 3, 1, "_CPPv4N4idol7AffExprmLEd", "idol::AffExpr::operator*=::t_rhs"], [69, 2, 1, "_CPPv4N4idol7AffExprpLERK7AffExpr", "idol::AffExpr::operator+="], [69, 3, 1, "_CPPv4N4idol7AffExprpLERK7AffExpr", "idol::AffExpr::operator+=::t_rhs"], [69, 2, 1, "_CPPv4NK4idol7AffExprmiEv", "idol::AffExpr::operator-"], [69, 2, 1, "_CPPv4N4idol7AffExprmIERK7AffExpr", "idol::AffExpr::operator-="], [69, 3, 1, "_CPPv4N4idol7AffExprmIERK7AffExpr", "idol::AffExpr::operator-=::t_rhs"], [69, 2, 1, "_CPPv4N4idol7AffExprdVEd", "idol::AffExpr::operator/="], [69, 3, 1, "_CPPv4N4idol7AffExprdVEd", "idol::AffExpr::operator/=::t_rhs"], [69, 2, 1, "_CPPv4N4idol7AffExpraSERK7AffExpr", "idol::AffExpr::operator="], [69, 2, 1, "_CPPv4N4idol7AffExpraSERR7AffExpr", "idol::AffExpr::operator="], [69, 3, 1, "_CPPv4N4idol7AffExpraSERK7AffExpr", "idol::AffExpr::operator=::t_rhs"], [69, 2, 1, "_CPPv4N4idol7AffExprD0Ev", "idol::AffExpr::~AffExpr"], [65, 1, 1, "_CPPv4I0EN4idol10AnnotationE", "idol::Annotation"], [65, 2, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation"], [65, 2, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation"], [65, 4, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::ArgsT"], [65, 3, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_args"], [65, 3, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_env"], [65, 3, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation::t_env"], [65, 3, 1, "_CPPv4IDpEN4idol10Annotation10AnnotationER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::Annotation::t_name"], [65, 3, 1, "_CPPv4N4idol10Annotation10AnnotationER3EnvNSt6stringE", "idol::Annotation::Annotation::t_name"], [65, 4, 1, "_CPPv4I0EN4idol10AnnotationE", "idol::Annotation::ValueT"], [65, 2, 1, "_CPPv4NK4idol10Annotation13default_valueEv", "idol::Annotation::default_value"], [65, 2, 1, "_CPPv4NK4idol10Annotation3envEv", "idol::Annotation::env"], [65, 2, 1, "_CPPv4N4idol10Annotation4freeEv", "idol::Annotation::free"], [65, 2, 1, "_CPPv4NK4idol10Annotation11has_defaultEv", "idol::Annotation::has_default"], [65, 2, 1, "_CPPv4NK4idol10Annotation2idEv", "idol::Annotation::id"], [65, 2, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value"], [65, 4, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::ArgsT"], [65, 3, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_args"], [65, 3, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_env"], [65, 3, 1, "_CPPv4IDpEN4idol10Annotation23make_with_default_valueE10AnnotationI6ValueTER3EnvNSt6stringEDpRR5ArgsT", "idol::Annotation::make_with_default_value::t_name"], [65, 2, 1, "_CPPv4NK4idol10Annotation4nameEv", "idol::Annotation::name"], [27, 1, 1, "_CPPv4N4idol9BestBoundE", "idol::BestBound"], [27, 1, 1, "_CPPv4I0EN4idol9BestBound8StrategyE", "idol::BestBound::Strategy"], [27, 4, 1, "_CPPv4I0EN4idol9BestBound8StrategyE", "idol::BestBound::Strategy::NodeT"], [27, 2, 1, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", "idol::BestBound::Strategy::Strategy"], [27, 3, 1, "_CPPv4N4idol9BestBound8Strategy8StrategyERK9BestBound", "idol::BestBound::Strategy::Strategy::t_parent"], [27, 2, 1, "_CPPv4NK4idol9BestBound8Strategy5cloneEv", "idol::BestBound::Strategy::clone"], [27, 2, 1, "_CPPv4NK4idol9BestBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestBound::Strategy::operator()"], [27, 3, 1, "_CPPv4NK4idol9BestBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestBound::Strategy::operator()::t_parent"], [28, 1, 1, "_CPPv4N4idol12BestEstimateE", "idol::BestEstimate"], [28, 1, 1, "_CPPv4I0EN4idol12BestEstimate8StrategyE", "idol::BestEstimate::Strategy"], [28, 4, 1, "_CPPv4I0EN4idol12BestEstimate8StrategyE", "idol::BestEstimate::Strategy::NodeT"], [28, 2, 1, "_CPPv4N4idol12BestEstimate8Strategy8StrategyERK12BestEstimate", "idol::BestEstimate::Strategy::Strategy"], [28, 3, 1, "_CPPv4N4idol12BestEstimate8Strategy8StrategyERK12BestEstimate", "idol::BestEstimate::Strategy::Strategy::t_parent"], [28, 2, 1, "_CPPv4NK4idol12BestEstimate8Strategy5cloneEv", "idol::BestEstimate::Strategy::clone"], [28, 2, 1, "_CPPv4NK4idol12BestEstimate8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestEstimate::Strategy::operator()"], [28, 3, 1, "_CPPv4NK4idol12BestEstimate8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BestEstimate::Strategy::operator()::t_parent"], [3, 1, 1, "_CPPv4N4idol7Bilevel11DescriptionE", "idol::Bilevel::Description"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionER3Env", "idol::Bilevel::Description::Description"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionER3EnvRKNSt6stringE", "idol::Bilevel::Description::Description"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE", "idol::Bilevel::Description::Description"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE7AffExprI3VarE", "idol::Bilevel::Description::Description"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionER3Env", "idol::Bilevel::Description::Description::t_env"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionER3EnvRKNSt6stringE", "idol::Bilevel::Description::Description::t_env"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE7AffExprI3VarE", "idol::Bilevel::Description::Description::t_follower_objective"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE", "idol::Bilevel::Description::Description::t_lower_level"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionERK10AnnotationIjE7AffExprI3VarE", "idol::Bilevel::Description::Description::t_lower_level"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description11DescriptionER3EnvRKNSt6stringE", "idol::Bilevel::Description::Description::t_name"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description12follower_objEv", "idol::Bilevel::Description::follower_obj"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK3Ctr", "idol::Bilevel::Description::is_lower"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK3Var", "idol::Bilevel::Description::is_lower"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK4QCtr", "idol::Bilevel::Description::is_lower"], [3, 3, 1, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK3Ctr", "idol::Bilevel::Description::is_lower::t_ctr"], [3, 3, 1, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK4QCtr", "idol::Bilevel::Description::is_lower::t_ctr"], [3, 3, 1, "_CPPv4NK4idol7Bilevel11Description8is_lowerERK3Var", "idol::Bilevel::Description::is_lower::t_var"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description8is_upperERK3Ctr", "idol::Bilevel::Description::is_upper"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description8is_upperERK3Var", "idol::Bilevel::Description::is_upper"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description8is_upperERK4QCtr", "idol::Bilevel::Description::is_upper"], [3, 3, 1, "_CPPv4NK4idol7Bilevel11Description8is_upperERK3Ctr", "idol::Bilevel::Description::is_upper::t_ctr"], [3, 3, 1, "_CPPv4NK4idol7Bilevel11Description8is_upperERK4QCtr", "idol::Bilevel::Description::is_upper::t_ctr"], [3, 3, 1, "_CPPv4NK4idol7Bilevel11Description8is_upperERK3Var", "idol::Bilevel::Description::is_upper::t_var"], [3, 2, 1, "_CPPv4NK4idol7Bilevel11Description11lower_levelEv", "idol::Bilevel::Description::lower_level"], [3, 2, 1, "_CPPv4I_jEN4idol7Bilevel11Description16make_lower_levelEvRK6VectorI3Var1NE", "idol::Bilevel::Description::make_lower_level"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK3Ctr", "idol::Bilevel::Description::make_lower_level"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK3Var", "idol::Bilevel::Description::make_lower_level"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK4QCtr", "idol::Bilevel::Description::make_lower_level"], [3, 4, 1, "_CPPv4I_jEN4idol7Bilevel11Description16make_lower_levelEvRK6VectorI3Var1NE", "idol::Bilevel::Description::make_lower_level::N"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK3Ctr", "idol::Bilevel::Description::make_lower_level::t_ctr"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK4QCtr", "idol::Bilevel::Description::make_lower_level::t_ctr"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description16make_lower_levelERK3Var", "idol::Bilevel::Description::make_lower_level::t_var"], [3, 3, 1, "_CPPv4I_jEN4idol7Bilevel11Description16make_lower_levelEvRK6VectorI3Var1NE", "idol::Bilevel::Description::make_lower_level::t_vars"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK3Ctr", "idol::Bilevel::Description::make_upper_level"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK3Var", "idol::Bilevel::Description::make_upper_level"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK4QCtr", "idol::Bilevel::Description::make_upper_level"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK3Ctr", "idol::Bilevel::Description::make_upper_level::t_ctr"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK4QCtr", "idol::Bilevel::Description::make_upper_level::t_ctr"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description16make_upper_levelERK3Var", "idol::Bilevel::Description::make_upper_level::t_var"], [3, 2, 1, "_CPPv4N4idol7Bilevel11Description19set_lower_level_objE8QuadExprI3VarE", "idol::Bilevel::Description::set_lower_level_obj"], [3, 3, 1, "_CPPv4N4idol7Bilevel11Description19set_lower_level_objE8QuadExprI3VarE", "idol::Bilevel::Description::set_lower_level_obj::t_objective"], [4, 1, 1, "_CPPv4N4idol7Bilevel3KKTE", "idol::Bilevel::KKT"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT3KKTERK3KKT", "idol::Bilevel::KKT::KKT"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT3KKTERKN7Bilevel11DescriptionE", "idol::Bilevel::KKT::KKT"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT3KKTERKN7Bilevel11DescriptionE", "idol::Bilevel::KKT::KKT::t_description"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT3KKTERK3KKT", "idol::Bilevel::KKT::KKT::t_src"], [4, 2, 1, "_CPPv4I0EN4idol7Bilevel3KKT2asER1Tv", "idol::Bilevel::KKT::as"], [4, 2, 1, "_CPPv4I0ENK4idol7Bilevel3KKT2asERK1Tv", "idol::Bilevel::KKT::as"], [4, 4, 1, "_CPPv4I0EN4idol7Bilevel3KKT2asER1Tv", "idol::Bilevel::KKT::as::T"], [4, 4, 1, "_CPPv4I0ENK4idol7Bilevel3KKT2asERK1Tv", "idol::Bilevel::KKT::as::T"], [4, 2, 1, "_CPPv4NK4idol7Bilevel3KKT5cloneEv", "idol::Bilevel::KKT::clone"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEERKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional::t_conditional_value"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEERKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional::t_conditional_value"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEERKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional::t_else"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional::t_if"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT11conditionalEbRKNSt8functionIFvR3KKTEEERKNSt8functionIFvR3KKTEEE", "idol::Bilevel::KKT::conditional::t_if"], [4, 2, 1, "_CPPv4I0ENK4idol7Bilevel3KKT2isEbv", "idol::Bilevel::KKT::is"], [4, 4, 1, "_CPPv4I0ENK4idol7Bilevel3KKT2isEbv", "idol::Bilevel::KKT::is::T"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionE", "idol::Bilevel::KKT::make_model"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionERK10AnnotationIdE", "idol::Bilevel::KKT::make_model"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionERK10AnnotationIdE", "idol::Bilevel::KKT::make_model::t_big_M"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionE", "idol::Bilevel::KKT::make_model::t_description"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionERK10AnnotationIdE", "idol::Bilevel::KKT::make_model::t_description"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionE", "idol::Bilevel::KKT::make_model::t_model"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT10make_modelERK5ModelRKN7Bilevel11DescriptionERK10AnnotationIdE", "idol::Bilevel::KKT::make_model::t_model"], [4, 2, 1, "_CPPv4NK4idol7Bilevel3KKTclERK5Model", "idol::Bilevel::KKT::operator()"], [4, 3, 1, "_CPPv4NK4idol7Bilevel3KKTclERK5Model", "idol::Bilevel::KKT::operator()::t_model"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKTpLERK16OptimizerFactory", "idol::Bilevel::KKT::operator+="], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKTpLERK16OptimizerFactory", "idol::Bilevel::KKT::operator+=::t_optimizer"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT27with_absolute_gap_toleranceEd", "idol::Bilevel::KKT::with_absolute_gap_tolerance"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT27with_absolute_gap_toleranceEd", "idol::Bilevel::KKT::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT20with_best_bound_stopEd", "idol::Bilevel::KKT::with_best_bound_stop"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT20with_best_bound_stopEd", "idol::Bilevel::KKT::with_best_bound_stop::t_best_bound_stop"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT18with_best_obj_stopEd", "idol::Bilevel::KKT::with_best_obj_stop"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT18with_best_obj_stopEd", "idol::Bilevel::KKT::with_best_obj_stop::t_user_best_obj"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT10with_big_MERK10AnnotationIdE", "idol::Bilevel::KKT::with_big_M"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT10with_big_MERK10AnnotationIdE", "idol::Bilevel::KKT::with_big_M::t_big_M"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::KKT::with_infeasible_or_unbounded_info"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::KKT::with_infeasible_or_unbounded_info::t_value"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT20with_iteration_limitEj", "idol::Bilevel::KKT::with_iteration_limit"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT20with_iteration_limitEj", "idol::Bilevel::KKT::with_iteration_limit::t_iteration_count_limit"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT9with_logsEb", "idol::Bilevel::KKT::with_logs"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT9with_logsEb", "idol::Bilevel::KKT::with_logs::t_value"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT13with_presolveEb", "idol::Bilevel::KKT::with_presolve"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT13with_presolveEb", "idol::Bilevel::KKT::with_presolve::t_value"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT27with_relative_gap_toleranceEd", "idol::Bilevel::KKT::with_relative_gap_tolerance"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT27with_relative_gap_toleranceEd", "idol::Bilevel::KKT::with_relative_gap_tolerance::t_relative_gap_tolerance"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT27with_single_level_optimizerERK16OptimizerFactory", "idol::Bilevel::KKT::with_single_level_optimizer"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT27with_single_level_optimizerERK16OptimizerFactory", "idol::Bilevel::KKT::with_single_level_optimizer::t_deterministic_optimizer"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT17with_thread_limitEj", "idol::Bilevel::KKT::with_thread_limit"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT17with_thread_limitEj", "idol::Bilevel::KKT::with_thread_limit::t_max_n_threads"], [4, 2, 1, "_CPPv4N4idol7Bilevel3KKT15with_time_limitEd", "idol::Bilevel::KKT::with_time_limit"], [4, 3, 1, "_CPPv4N4idol7Bilevel3KKT15with_time_limitEd", "idol::Bilevel::KKT::with_time_limit::t_time_limit"], [0, 1, 1, "_CPPv4N4idol7Bilevel4MibSE", "idol::Bilevel::MibS"], [8, 1, 1, "_CPPv4N4idol7Bilevel4MibSE", "idol::Bilevel::MibS"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel11DescriptionE", "idol::Bilevel::MibS::MibS"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", "idol::Bilevel::MibS::MibS"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERR4MibS", "idol::Bilevel::MibS::MibS"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel11DescriptionE", "idol::Bilevel::MibS::MibS"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", "idol::Bilevel::MibS::MibS"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERR4MibS", "idol::Bilevel::MibS::MibS"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel11DescriptionE", "idol::Bilevel::MibS::MibS::t_description"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS4MibSEN7Bilevel11DescriptionE", "idol::Bilevel::MibS::MibS::t_description"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", "idol::Bilevel::MibS::MibS::t_src"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS4MibSERK4MibS", "idol::Bilevel::MibS::MibS::t_src"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS12add_callbackERK15CallbackFactory", "idol::Bilevel::MibS::add_callback"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS12add_callbackERK15CallbackFactory", "idol::Bilevel::MibS::add_callback"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS12add_callbackERK15CallbackFactory", "idol::Bilevel::MibS::add_callback::t_cb"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS12add_callbackERK15CallbackFactory", "idol::Bilevel::MibS::add_callback::t_cb"], [0, 2, 1, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", "idol::Bilevel::MibS::as"], [0, 2, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", "idol::Bilevel::MibS::as"], [8, 2, 1, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", "idol::Bilevel::MibS::as"], [8, 2, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", "idol::Bilevel::MibS::as"], [0, 4, 1, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", "idol::Bilevel::MibS::as::T"], [0, 4, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", "idol::Bilevel::MibS::as::T"], [8, 4, 1, "_CPPv4I0EN4idol7Bilevel4MibS2asER1Tv", "idol::Bilevel::MibS::as::T"], [8, 4, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2asERK1Tv", "idol::Bilevel::MibS::as::T"], [0, 2, 1, "_CPPv4NK4idol7Bilevel4MibS5cloneEv", "idol::Bilevel::MibS::clone"], [8, 2, 1, "_CPPv4NK4idol7Bilevel4MibS5cloneEv", "idol::Bilevel::MibS::clone"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_conditional_value"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_conditional_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_conditional_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_conditional_value"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_else"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_else"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_if"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_if"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_if"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS11conditionalEbRKNSt8functionIFvR4MibSEEERKNSt8functionIFvR4MibSEEE", "idol::Bilevel::MibS::conditional::t_if"], [0, 2, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", "idol::Bilevel::MibS::is"], [8, 2, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", "idol::Bilevel::MibS::is"], [0, 4, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", "idol::Bilevel::MibS::is::T"], [8, 4, 1, "_CPPv4I0ENK4idol7Bilevel4MibS2isEbv", "idol::Bilevel::MibS::is::T"], [0, 2, 1, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", "idol::Bilevel::MibS::operator()"], [8, 2, 1, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", "idol::Bilevel::MibS::operator()"], [0, 3, 1, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", "idol::Bilevel::MibS::operator()::t_model"], [8, 3, 1, "_CPPv4NK4idol7Bilevel4MibSclERK5Model", "idol::Bilevel::MibS::operator()::t_model"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibSaSERK4MibS", "idol::Bilevel::MibS::operator="], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibSaSERR4MibS", "idol::Bilevel::MibS::operator="], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibSaSERK4MibS", "idol::Bilevel::MibS::operator="], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibSaSERR4MibS", "idol::Bilevel::MibS::operator="], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", "idol::Bilevel::MibS::with_absolute_gap_tolerance"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", "idol::Bilevel::MibS::with_absolute_gap_tolerance"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", "idol::Bilevel::MibS::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS27with_absolute_gap_toleranceEd", "idol::Bilevel::MibS::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", "idol::Bilevel::MibS::with_best_bound_stop"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", "idol::Bilevel::MibS::with_best_bound_stop"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", "idol::Bilevel::MibS::with_best_bound_stop::t_best_bound_stop"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS20with_best_bound_stopEd", "idol::Bilevel::MibS::with_best_bound_stop::t_best_bound_stop"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", "idol::Bilevel::MibS::with_best_obj_stop"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", "idol::Bilevel::MibS::with_best_obj_stop"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", "idol::Bilevel::MibS::with_best_obj_stop::t_user_best_obj"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS18with_best_obj_stopEd", "idol::Bilevel::MibS::with_best_obj_stop::t_user_best_obj"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS26with_cplex_for_feasibilityEb", "idol::Bilevel::MibS::with_cplex_for_feasibility"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS26with_cplex_for_feasibilityEb", "idol::Bilevel::MibS::with_cplex_for_feasibility"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS26with_cplex_for_feasibilityEb", "idol::Bilevel::MibS::with_cplex_for_feasibility::t_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS26with_cplex_for_feasibilityEb", "idol::Bilevel::MibS::with_cplex_for_feasibility::t_value"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS19with_file_interfaceEb", "idol::Bilevel::MibS::with_file_interface"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS19with_file_interfaceEb", "idol::Bilevel::MibS::with_file_interface"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS19with_file_interfaceEb", "idol::Bilevel::MibS::with_file_interface::t_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS19with_file_interfaceEb", "idol::Bilevel::MibS::with_file_interface::t_value"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::MibS::with_infeasible_or_unbounded_info"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::MibS::with_infeasible_or_unbounded_info"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::MibS::with_infeasible_or_unbounded_info::t_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::MibS::with_infeasible_or_unbounded_info::t_value"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", "idol::Bilevel::MibS::with_iteration_limit"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", "idol::Bilevel::MibS::with_iteration_limit"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", "idol::Bilevel::MibS::with_iteration_limit::t_iteration_count_limit"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS20with_iteration_limitEj", "idol::Bilevel::MibS::with_iteration_limit::t_iteration_count_limit"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", "idol::Bilevel::MibS::with_logs"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", "idol::Bilevel::MibS::with_logs"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", "idol::Bilevel::MibS::with_logs::t_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS9with_logsEb", "idol::Bilevel::MibS::with_logs::t_value"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", "idol::Bilevel::MibS::with_presolve"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", "idol::Bilevel::MibS::with_presolve"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", "idol::Bilevel::MibS::with_presolve::t_value"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS13with_presolveEb", "idol::Bilevel::MibS::with_presolve::t_value"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", "idol::Bilevel::MibS::with_relative_gap_tolerance"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", "idol::Bilevel::MibS::with_relative_gap_tolerance"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", "idol::Bilevel::MibS::with_relative_gap_tolerance::t_relative_gap_tolerance"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS27with_relative_gap_toleranceEd", "idol::Bilevel::MibS::with_relative_gap_tolerance::t_relative_gap_tolerance"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", "idol::Bilevel::MibS::with_thread_limit"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", "idol::Bilevel::MibS::with_thread_limit"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", "idol::Bilevel::MibS::with_thread_limit::t_max_n_threads"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS17with_thread_limitEj", "idol::Bilevel::MibS::with_thread_limit::t_max_n_threads"], [0, 2, 1, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", "idol::Bilevel::MibS::with_time_limit"], [8, 2, 1, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", "idol::Bilevel::MibS::with_time_limit"], [0, 3, 1, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", "idol::Bilevel::MibS::with_time_limit::t_time_limit"], [8, 3, 1, "_CPPv4N4idol7Bilevel4MibS15with_time_limitEd", "idol::Bilevel::MibS::with_time_limit::t_time_limit"], [7, 1, 1, "_CPPv4N4idol7Bilevel13StrongDualityE", "idol::Bilevel::StrongDuality"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality13StrongDualityERK13StrongDuality", "idol::Bilevel::StrongDuality::StrongDuality"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality13StrongDualityERKN7Bilevel11DescriptionE", "idol::Bilevel::StrongDuality::StrongDuality"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality13StrongDualityERKN7Bilevel11DescriptionE", "idol::Bilevel::StrongDuality::StrongDuality::t_description"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality13StrongDualityERK13StrongDuality", "idol::Bilevel::StrongDuality::StrongDuality::t_src"], [7, 2, 1, "_CPPv4I0EN4idol7Bilevel13StrongDuality2asER1Tv", "idol::Bilevel::StrongDuality::as"], [7, 2, 1, "_CPPv4I0ENK4idol7Bilevel13StrongDuality2asERK1Tv", "idol::Bilevel::StrongDuality::as"], [7, 4, 1, "_CPPv4I0EN4idol7Bilevel13StrongDuality2asER1Tv", "idol::Bilevel::StrongDuality::as::T"], [7, 4, 1, "_CPPv4I0ENK4idol7Bilevel13StrongDuality2asERK1Tv", "idol::Bilevel::StrongDuality::as::T"], [7, 2, 1, "_CPPv4NK4idol7Bilevel13StrongDuality5cloneEv", "idol::Bilevel::StrongDuality::clone"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEERKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional::t_conditional_value"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEERKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional::t_conditional_value"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEERKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional::t_else"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional::t_if"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality11conditionalEbRKNSt8functionIFvR13StrongDualityEEERKNSt8functionIFvR13StrongDualityEEE", "idol::Bilevel::StrongDuality::conditional::t_if"], [7, 2, 1, "_CPPv4I0ENK4idol7Bilevel13StrongDuality2isEbv", "idol::Bilevel::StrongDuality::is"], [7, 4, 1, "_CPPv4I0ENK4idol7Bilevel13StrongDuality2isEbv", "idol::Bilevel::StrongDuality::is::T"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality10make_modelERK5ModelRKN7Bilevel11DescriptionE", "idol::Bilevel::StrongDuality::make_model"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality10make_modelERK5ModelRKN7Bilevel11DescriptionE", "idol::Bilevel::StrongDuality::make_model::t_description"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality10make_modelERK5ModelRKN7Bilevel11DescriptionE", "idol::Bilevel::StrongDuality::make_model::t_model"], [7, 2, 1, "_CPPv4NK4idol7Bilevel13StrongDualityclERK5Model", "idol::Bilevel::StrongDuality::operator()"], [7, 3, 1, "_CPPv4NK4idol7Bilevel13StrongDualityclERK5Model", "idol::Bilevel::StrongDuality::operator()::t_model"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDualitypLERK16OptimizerFactory", "idol::Bilevel::StrongDuality::operator+="], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDualitypLERK16OptimizerFactory", "idol::Bilevel::StrongDuality::operator+=::t_optimizer"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality27with_absolute_gap_toleranceEd", "idol::Bilevel::StrongDuality::with_absolute_gap_tolerance"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality27with_absolute_gap_toleranceEd", "idol::Bilevel::StrongDuality::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality20with_best_bound_stopEd", "idol::Bilevel::StrongDuality::with_best_bound_stop"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality20with_best_bound_stopEd", "idol::Bilevel::StrongDuality::with_best_bound_stop::t_best_bound_stop"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality18with_best_obj_stopEd", "idol::Bilevel::StrongDuality::with_best_obj_stop"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality18with_best_obj_stopEd", "idol::Bilevel::StrongDuality::with_best_obj_stop::t_user_best_obj"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::StrongDuality::with_infeasible_or_unbounded_info"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality33with_infeasible_or_unbounded_infoEb", "idol::Bilevel::StrongDuality::with_infeasible_or_unbounded_info::t_value"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality20with_iteration_limitEj", "idol::Bilevel::StrongDuality::with_iteration_limit"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality20with_iteration_limitEj", "idol::Bilevel::StrongDuality::with_iteration_limit::t_iteration_count_limit"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality9with_logsEb", "idol::Bilevel::StrongDuality::with_logs"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality9with_logsEb", "idol::Bilevel::StrongDuality::with_logs::t_value"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality13with_presolveEb", "idol::Bilevel::StrongDuality::with_presolve"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality13with_presolveEb", "idol::Bilevel::StrongDuality::with_presolve::t_value"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality27with_relative_gap_toleranceEd", "idol::Bilevel::StrongDuality::with_relative_gap_tolerance"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality27with_relative_gap_toleranceEd", "idol::Bilevel::StrongDuality::with_relative_gap_tolerance::t_relative_gap_tolerance"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality27with_single_level_optimizerERK16OptimizerFactory", "idol::Bilevel::StrongDuality::with_single_level_optimizer"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality27with_single_level_optimizerERK16OptimizerFactory", "idol::Bilevel::StrongDuality::with_single_level_optimizer::t_deterministic_optimizer"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality17with_thread_limitEj", "idol::Bilevel::StrongDuality::with_thread_limit"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality17with_thread_limitEj", "idol::Bilevel::StrongDuality::with_thread_limit::t_max_n_threads"], [7, 2, 1, "_CPPv4N4idol7Bilevel13StrongDuality15with_time_limitEd", "idol::Bilevel::StrongDuality::with_time_limit"], [7, 3, 1, "_CPPv4N4idol7Bilevel13StrongDuality15with_time_limitEd", "idol::Bilevel::StrongDuality::with_time_limit::t_time_limit"], [63, 6, 1, "_CPPv4N4idol7VarType6BinaryE", "idol::Binary"], [18, 1, 1, "_CPPv4I0EN4idol14BranchAndBoundE", "idol::BranchAndBound"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERK14BranchAndBound", "idol::BranchAndBound::BranchAndBound"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERR14BranchAndBound", "idol::BranchAndBound::BranchAndBound"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundEv", "idol::BranchAndBound::BranchAndBound"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound14BranchAndBoundERK14BranchAndBound", "idol::BranchAndBound::BranchAndBound::t_rhs"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBoundE", "idol::BranchAndBound::NodeT"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK15CallbackFactory", "idol::BranchAndBound::add_callback"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", "idol::BranchAndBound::add_callback"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK15CallbackFactory", "idol::BranchAndBound::add_callback::t_callback"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound12add_callbackERK29BranchAndBoundCallbackFactoryI5NodeTE", "idol::BranchAndBound::add_callback::t_callback"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound2asER1Tv", "idol::BranchAndBound::as"], [18, 2, 1, "_CPPv4I0ENK4idol14BranchAndBound2asERK1Tv", "idol::BranchAndBound::as"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound2asER1Tv", "idol::BranchAndBound::as::T"], [18, 4, 1, "_CPPv4I0ENK4idol14BranchAndBound2asERK1Tv", "idol::BranchAndBound::as::T"], [18, 2, 1, "_CPPv4NK4idol14BranchAndBound5cloneEv", "idol::BranchAndBound::clone"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional::t_conditional_value"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional::t_conditional_value"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional::t_else"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional::t_if"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound11conditionalEbRKNSt8functionIFvR4CRTPEEERKNSt8functionIFvR4CRTPEEE", "idol::BranchAndBound::conditional::t_if"], [18, 2, 1, "_CPPv4I0ENK4idol14BranchAndBound2isEbv", "idol::BranchAndBound::is"], [18, 4, 1, "_CPPv4I0ENK4idol14BranchAndBound2isEbv", "idol::BranchAndBound::is::T"], [18, 0, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy"], [18, 4, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy::ReturnT"], [18, 4, 1, "_CPPv4I00EN4idol14BranchAndBound20only_if_has_StrategyE", "idol::BranchAndBound::only_if_has_Strategy::T"], [18, 2, 1, "_CPPv4NK4idol14BranchAndBoundclERK5Model", "idol::BranchAndBound::operator()"], [18, 3, 1, "_CPPv4NK4idol14BranchAndBoundclERK5Model", "idol::BranchAndBound::operator()::t_model"], [18, 2, 1, "_CPPv4N4idol14BranchAndBoundpLERK16OptimizerFactory", "idol::BranchAndBound::operator+="], [18, 3, 1, "_CPPv4N4idol14BranchAndBoundpLERK16OptimizerFactory", "idol::BranchAndBound::operator+=::t_node_optimizer"], [18, 2, 1, "_CPPv4N4idol14BranchAndBoundaSERK14BranchAndBound", "idol::BranchAndBound::operator="], [18, 2, 1, "_CPPv4N4idol14BranchAndBoundaSERR14BranchAndBound", "idol::BranchAndBound::operator="], [18, 2, 1, "_CPPv4N4idol14BranchAndBound18set_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::set_node_optimizer"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound18set_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::set_node_optimizer::t_node_optimizer"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", "idol::BranchAndBound::with_absolute_gap_tolerance"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound27with_absolute_gap_toleranceEd", "idol::BranchAndBound::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", "idol::BranchAndBound::with_best_bound_stop"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound20with_best_bound_stopEd", "idol::BranchAndBound::with_best_bound_stop::t_best_bound_stop"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", "idol::BranchAndBound::with_best_obj_stop"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound18with_best_obj_stopEd", "idol::BranchAndBound::with_best_obj_stop::t_user_best_obj"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", "idol::BranchAndBound::with_branching_rule"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::BranchingRuleFactoryT"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::BranchingRuleFactoryT"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE21BranchingRuleFactoryTERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound19with_branching_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE21BranchingRuleFactoryTEERK21BranchingRuleFactoryT", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound19with_branching_ruleERK20BranchingRuleFactoryI5NodeTE", "idol::BranchAndBound::with_branching_rule::t_branching_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", "idol::BranchAndBound::with_infeasible_or_unbounded_info"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound33with_infeasible_or_unbounded_infoEb", "idol::BranchAndBound::with_infeasible_or_unbounded_info::t_value"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound20with_iteration_limitEj", "idol::BranchAndBound::with_iteration_limit"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound20with_iteration_limitEj", "idol::BranchAndBound::with_iteration_limit::t_iteration_count_limit"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound11with_loggerERKN4Logs14BranchAndBound7FactoryI5NodeTEE", "idol::BranchAndBound::with_logger"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound11with_loggerERKN4Logs14BranchAndBound7FactoryI5NodeTEE", "idol::BranchAndBound::with_logger::t_log_factory"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound9with_logsEb", "idol::BranchAndBound::with_logs"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound9with_logsEb", "idol::BranchAndBound::with_logs::t_value"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::with_node_optimizer"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound19with_node_optimizerERK16OptimizerFactory", "idol::BranchAndBound::with_node_optimizer::t_node_optimizer"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule"], [18, 2, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", "idol::BranchAndBound::with_node_selection_rule"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::NodeSelectionRuleFactoryT"], [18, 4, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::NodeSelectionRuleFactoryT"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound24with_node_selection_ruleERK24NodeSelectionRuleFactoryI5NodeTE", "idol::BranchAndBound::with_node_selection_rule::t_node_selection"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleE20only_if_has_StrategyIR14BranchAndBoundI5NodeTE25NodeSelectionRuleFactoryTERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::t_node_selection_rule"], [18, 3, 1, "_CPPv4I0EN4idol14BranchAndBound24with_node_selection_ruleEN4idol14BranchAndBoundI5NodeTE20only_if_has_StrategyIRN4idol14BranchAndBoundI5NodeTEE25NodeSelectionRuleFactoryTEERK25NodeSelectionRuleFactoryT", "idol::BranchAndBound::with_node_selection_rule::t_node_selection_rule"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound13with_presolveEb", "idol::BranchAndBound::with_presolve"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound13with_presolveEb", "idol::BranchAndBound::with_presolve::t_value"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", "idol::BranchAndBound::with_relative_gap_tolerance"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound27with_relative_gap_toleranceEd", "idol::BranchAndBound::with_relative_gap_tolerance::t_relative_gap_tolerance"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", "idol::BranchAndBound::with_subtree_depth"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound18with_subtree_depthEj", "idol::BranchAndBound::with_subtree_depth::t_depth"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", "idol::BranchAndBound::with_thread_limit"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound17with_thread_limitEj", "idol::BranchAndBound::with_thread_limit::t_max_n_threads"], [18, 2, 1, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", "idol::BranchAndBound::with_time_limit"], [18, 3, 1, "_CPPv4N4idol14BranchAndBound15with_time_limitEd", "idol::BranchAndBound::with_time_limit::t_time_limit"], [19, 1, 1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", "idol::BranchAndBoundCallback"], [19, 4, 1, "_CPPv4I0EN4idol22BranchAndBoundCallbackE", "idol::BranchAndBoundCallback::NodeInfoT"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_lazy_cut"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_lazy_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_lazy_cut::t_cut"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback28add_local_variable_branchingERK3Var7CtrTyped", "idol::BranchAndBoundCallback::add_local_variable_branching"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback28add_local_variable_branchingERK3Var7CtrTyped", "idol::BranchAndBoundCallback::add_local_variable_branching::t_rhs"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback28add_local_variable_branchingERK3Var7CtrTyped", "idol::BranchAndBoundCallback::add_local_variable_branching::t_type"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback28add_local_variable_branchingERK3Var7CtrTyped", "idol::BranchAndBoundCallback::add_local_variable_branching::t_var"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_user_cut"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback12add_user_cutERK7TempCtr", "idol::BranchAndBoundCallback::add_user_cut::t_cut"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback10best_boundEv", "idol::BranchAndBoundCallback::best_bound"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback8best_objEv", "idol::BranchAndBoundCallback::best_obj"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback10initializeEv", "idol::BranchAndBoundCallback::initialize"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback21log_after_terminationEv", "idol::BranchAndBoundCallback::log_after_termination"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback4nodeEv", "idol::BranchAndBoundCallback::node"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", "idol::BranchAndBoundCallback::operator()"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallbackclE13CallbackEvent", "idol::BranchAndBoundCallback::operator()::t_event"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback14original_modelEv", "idol::BranchAndBoundCallback::original_model"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback10relaxationEv", "idol::BranchAndBoundCallback::relaxation"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback20side_effect_registryEv", "idol::BranchAndBoundCallback::side_effect_registry"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", "idol::BranchAndBoundCallback::submit_bound"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback12submit_boundEd", "idol::BranchAndBoundCallback::submit_bound::t_bound"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", "idol::BranchAndBoundCallback::submit_heuristic_solution"], [19, 3, 1, "_CPPv4N4idol22BranchAndBoundCallback25submit_heuristic_solutionEP9NodeInfoT", "idol::BranchAndBoundCallback::submit_heuristic_solution::t_info"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallback9terminateEv", "idol::BranchAndBoundCallback::terminate"], [19, 2, 1, "_CPPv4NK4idol22BranchAndBoundCallback4timeEv", "idol::BranchAndBoundCallback::time"], [19, 2, 1, "_CPPv4N4idol22BranchAndBoundCallbackD0Ev", "idol::BranchAndBoundCallback::~BranchAndBoundCallback"], [20, 1, 1, "_CPPv4I0EN4idol29BranchAndBoundCallbackFactoryE", "idol::BranchAndBoundCallbackFactory"], [20, 4, 1, "_CPPv4I0EN4idol29BranchAndBoundCallbackFactoryE", "idol::BranchAndBoundCallbackFactory::NodeInfoT"], [20, 2, 1, "_CPPv4NK4idol29BranchAndBoundCallbackFactory5cloneEv", "idol::BranchAndBoundCallbackFactory::clone"], [20, 2, 1, "_CPPv4N4idol29BranchAndBoundCallbackFactoryclEv", "idol::BranchAndBoundCallbackFactory::operator()"], [20, 2, 1, "_CPPv4N4idol29BranchAndBoundCallbackFactoryD0Ev", "idol::BranchAndBoundCallbackFactory::~BranchAndBoundCallbackFactory"], [29, 1, 1, "_CPPv4N4idol12BreadthFirstE", "idol::BreadthFirst"], [29, 1, 1, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", "idol::BreadthFirst::Strategy"], [29, 4, 1, "_CPPv4I0EN4idol12BreadthFirst8StrategyE", "idol::BreadthFirst::Strategy::NodeT"], [29, 2, 1, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", "idol::BreadthFirst::Strategy::Strategy"], [29, 3, 1, "_CPPv4N4idol12BreadthFirst8Strategy8StrategyERK12BreadthFirst", "idol::BreadthFirst::Strategy::Strategy::t_parent"], [29, 2, 1, "_CPPv4NK4idol12BreadthFirst8Strategy5cloneEv", "idol::BreadthFirst::Strategy::clone"], [29, 2, 1, "_CPPv4NK4idol12BreadthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BreadthFirst::Strategy::operator()"], [29, 3, 1, "_CPPv4NK4idol12BreadthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::BreadthFirst::Strategy::operator()::t_parent"], [12, 1, 1, "_CPPv4N4idol8CallbackE", "idol::Callback"], [12, 2, 1, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", "idol::Callback::add_lazy_cut"], [12, 3, 1, "_CPPv4N4idol8Callback12add_lazy_cutERK7TempCtr", "idol::Callback::add_lazy_cut::t_cut"], [12, 2, 1, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", "idol::Callback::add_user_cut"], [12, 3, 1, "_CPPv4N4idol8Callback12add_user_cutERK7TempCtr", "idol::Callback::add_user_cut::t_cut"], [12, 2, 1, "_CPPv4NK4idol8Callback10best_boundEv", "idol::Callback::best_bound"], [12, 2, 1, "_CPPv4NK4idol8Callback8best_objEv", "idol::Callback::best_obj"], [12, 2, 1, "_CPPv4N4idol8CallbackclE13CallbackEvent", "idol::Callback::operator()"], [12, 3, 1, "_CPPv4N4idol8CallbackclE13CallbackEvent", "idol::Callback::operator()::t_event"], [12, 2, 1, "_CPPv4NK4idol8Callback14original_modelEv", "idol::Callback::original_model"], [12, 2, 1, "_CPPv4NK4idol8Callback15primal_solutionEv", "idol::Callback::primal_solution"], [12, 2, 1, "_CPPv4N4idol8Callback25submit_heuristic_solutionERK11PrimalPoint", "idol::Callback::submit_heuristic_solution"], [12, 3, 1, "_CPPv4N4idol8Callback25submit_heuristic_solutionERK11PrimalPoint", "idol::Callback::submit_heuristic_solution::t_solution"], [12, 2, 1, "_CPPv4N4idol8Callback9terminateEv", "idol::Callback::terminate"], [12, 2, 1, "_CPPv4NK4idol8Callback4timeEv", "idol::Callback::time"], [12, 2, 1, "_CPPv4N4idol8CallbackD0Ev", "idol::Callback::~Callback"], [84, 7, 1, "_CPPv4N4idol13CallbackEventE", "idol::CallbackEvent"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", "idol::CallbackEvent::IncumbentSolution"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", "idol::CallbackEvent::InvalidSolution"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", "idol::CallbackEvent::NodeLoaded"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent14PrunedSolutionE", "idol::CallbackEvent::PrunedSolution"], [13, 1, 1, "_CPPv4N4idol15CallbackFactoryE", "idol::CallbackFactory"], [13, 2, 1, "_CPPv4NK4idol15CallbackFactory5cloneEv", "idol::CallbackFactory::clone"], [13, 2, 1, "_CPPv4N4idol15CallbackFactoryclEv", "idol::CallbackFactory::operator()"], [13, 2, 1, "_CPPv4N4idol15CallbackFactoryD0Ev", "idol::CallbackFactory::~CallbackFactory"], [63, 6, 1, "_CPPv4N4idol7VarType10ContinuousE", "idol::Continuous"], [66, 1, 1, "_CPPv4N4idol3CtrE", "idol::Ctr"], [66, 2, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypedNSt6stringE", "idol::Ctr::Ctr"], [66, 2, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr"], [66, 2, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypedNSt6stringE", "idol::Ctr::Ctr::t_constant"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypedNSt6stringE", "idol::Ctr::Ctr::t_env"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_env"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_env"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypedNSt6stringE", "idol::Ctr::Ctr::t_name"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_name"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_name"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRK7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_temp_ctr"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3EnvRR7TempCtrNSt6stringE", "idol::Ctr::Ctr::t_temp_ctr"], [66, 3, 1, "_CPPv4N4idol3Ctr3CtrER3Env7CtrTypedNSt6stringE", "idol::Ctr::Ctr::t_type"], [66, 2, 1, "_CPPv4NK4idol3Ctr3getERK10AnnotationI6ValueTE", "idol::Ctr::get"], [66, 3, 1, "_CPPv4NK4idol3Ctr3getERK10AnnotationI6ValueTE", "idol::Ctr::get::t_annotation"], [66, 2, 1, "_CPPv4NK4idol3Ctr2idEv", "idol::Ctr::id"], [66, 2, 1, "_CPPv4NK4idol3Ctr5indexERK5Model", "idol::Ctr::index"], [66, 3, 1, "_CPPv4NK4idol3Ctr5indexERK5Model", "idol::Ctr::index::t_index"], [66, 2, 1, "_CPPv4NK4idol3Ctr5is_inERK5Model", "idol::Ctr::is_in"], [66, 3, 1, "_CPPv4NK4idol3Ctr5is_inERK5Model", "idol::Ctr::is_in::t_model"], [66, 2, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector"], [66, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::I"], [66, 4, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::N"], [66, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::t_constant"], [66, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::t_dim"], [66, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::t_env"], [66, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::t_name"], [66, 3, 1, "_CPPv4I_j_jEN4idol3Ctr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypedRKNSt6stringE", "idol::Ctr::make_vector::t_type"], [66, 2, 1, "_CPPv4NK4idol3Ctr4nameEv", "idol::Ctr::name"], [66, 2, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::Ctr::set"], [66, 3, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::Ctr::set::t_annotation"], [66, 3, 1, "_CPPv4NK4idol3Ctr3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::Ctr::set::t_args"], [62, 7, 1, "_CPPv4N4idol7CtrTypeE", "idol::CtrType"], [62, 6, 1, "_CPPv4N4idol7CtrType5EqualE", "idol::CtrType::Equal"], [62, 6, 1, "_CPPv4N4idol7CtrType14GreaterOrEqualE", "idol::CtrType::GreaterOrEqual"], [62, 6, 1, "_CPPv4N4idol7CtrType11LessOrEqualE", "idol::CtrType::LessOrEqual"], [21, 1, 1, "_CPPv4I0EN4idol4Cuts13KnapsackCoverE", "idol::Cuts::KnapsackCover"], [21, 4, 1, "_CPPv4I0EN4idol4Cuts13KnapsackCoverE", "idol::Cuts::KnapsackCover::NodeInfoT"], [21, 1, 1, "_CPPv4N4idol4Cuts13KnapsackCover8StrategyE", "idol::Cuts::KnapsackCover::Strategy"], [21, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_apply_to_tree_nodes"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_max_cuts_factor"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_max_pass_root_node"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover8Strategy8StrategyEbbjd", "idol::Cuts::KnapsackCover::Strategy::Strategy::t_use_lifting"], [21, 2, 1, "_CPPv4NK4idol4Cuts13KnapsackCover5cloneEv", "idol::Cuts::KnapsackCover::clone"], [21, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCoverclEv", "idol::Cuts::KnapsackCover::operator()"], [21, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover12with_liftingEb", "idol::Cuts::KnapsackCover::with_lifting"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover12with_liftingEb", "idol::Cuts::KnapsackCover::with_lifting::t_value"], [21, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover20with_max_cuts_factorEd", "idol::Cuts::KnapsackCover::with_max_cuts_factor"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover20with_max_cuts_factorEd", "idol::Cuts::KnapsackCover::with_max_cuts_factor::t_value"], [21, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover23with_max_pass_root_nodeEj", "idol::Cuts::KnapsackCover::with_max_pass_root_node"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover23with_max_pass_root_nodeEj", "idol::Cuts::KnapsackCover::with_max_pass_root_node::t_value"], [21, 2, 1, "_CPPv4N4idol4Cuts13KnapsackCover19with_tree_node_cutsEb", "idol::Cuts::KnapsackCover::with_tree_node_cuts"], [21, 3, 1, "_CPPv4N4idol4Cuts13KnapsackCover19with_tree_node_cutsEb", "idol::Cuts::KnapsackCover::with_tree_node_cuts::t_value"], [40, 1, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCostsE", "idol::DantzigWolfe::ArtificialCosts"], [40, 1, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8StrategyE", "idol::DantzigWolfe::ArtificialCosts::Strategy"], [40, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy::t_initial_costs"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy::t_max_updates_before_phase_I"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy8StrategyEddj", "idol::DantzigWolfe::ArtificialCosts::Strategy::Strategy::t_update_factor"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy10best_boundEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::best_bound"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy8best_objEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::best_obj"], [40, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::ArtificialCosts::Strategy::execute"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::ArtificialCosts::Strategy::execute::t_parent"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy15primal_solutionEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::primal_solution"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6reasonEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::reason"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts8Strategy6statusEv", "idol::DantzigWolfe::ArtificialCosts::Strategy::status"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCosts5cloneEv", "idol::DantzigWolfe::ArtificialCosts::clone"], [40, 2, 1, "_CPPv4NK4idol12DantzigWolfe15ArtificialCostsclEv", "idol::DantzigWolfe::ArtificialCosts::operator()"], [40, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_initial_costsEd", "idol::DantzigWolfe::ArtificialCosts::with_initial_costs"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_initial_costsEd", "idol::DantzigWolfe::ArtificialCosts::with_initial_costs::t_value"], [40, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts31with_max_updates_before_phase_IEj", "idol::DantzigWolfe::ArtificialCosts::with_max_updates_before_phase_I"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts31with_max_updates_before_phase_IEj", "idol::DantzigWolfe::ArtificialCosts::with_max_updates_before_phase_I::t_value"], [40, 2, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_update_factorEd", "idol::DantzigWolfe::ArtificialCosts::with_update_factor"], [40, 3, 1, "_CPPv4N4idol12DantzigWolfe15ArtificialCosts18with_update_factorEd", "idol::DantzigWolfe::ArtificialCosts::with_update_factor::t_value"], [42, 1, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricingE", "idol::DantzigWolfe::FarkasPricing"], [42, 1, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8StrategyE", "idol::DantzigWolfe::FarkasPricing::Strategy"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy10best_boundEv", "idol::DantzigWolfe::FarkasPricing::Strategy::best_bound"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy8best_objEv", "idol::DantzigWolfe::FarkasPricing::Strategy::best_obj"], [42, 2, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::FarkasPricing::Strategy::execute"], [42, 3, 1, "_CPPv4N4idol12DantzigWolfe13FarkasPricing8Strategy7executeERN10Optimizers25DantzigWolfeDecompositionE", "idol::DantzigWolfe::FarkasPricing::Strategy::execute::t_parent"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy15primal_solutionEv", "idol::DantzigWolfe::FarkasPricing::Strategy::primal_solution"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6reasonEv", "idol::DantzigWolfe::FarkasPricing::Strategy::reason"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing8Strategy6statusEv", "idol::DantzigWolfe::FarkasPricing::Strategy::status"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricing5cloneEv", "idol::DantzigWolfe::FarkasPricing::clone"], [42, 2, 1, "_CPPv4NK4idol12DantzigWolfe13FarkasPricingclEv", "idol::DantzigWolfe::FarkasPricing::operator()"], [45, 1, 1, "_CPPv4N4idol12DantzigWolfe5NeameE", "idol::DantzigWolfe::Neame"], [45, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame5NeameEd", "idol::DantzigWolfe::Neame::Neame"], [45, 3, 1, "_CPPv4N4idol12DantzigWolfe5Neame5NeameEd", "idol::DantzigWolfe::Neame::Neame::t_initial_factor"], [45, 1, 1, "_CPPv4N4idol12DantzigWolfe5Neame8StrategyE", "idol::DantzigWolfe::Neame::Strategy"], [45, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy8StrategyEd", "idol::DantzigWolfe::Neame::Strategy::Strategy"], [45, 3, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy8StrategyEd", "idol::DantzigWolfe::Neame::Strategy::Strategy::t_initial_factor"], [45, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy30compute_smoothed_dual_solutionERK9DualPoint", "idol::DantzigWolfe::Neame::Strategy::compute_smoothed_dual_solution"], [45, 3, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy30compute_smoothed_dual_solutionERK9DualPoint", "idol::DantzigWolfe::Neame::Strategy::compute_smoothed_dual_solution::t_master_dual"], [45, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy10initializeEv", "idol::DantzigWolfe::Neame::Strategy::initialize"], [45, 2, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy23update_stability_centerERK9DualPoint", "idol::DantzigWolfe::Neame::Strategy::update_stability_center"], [45, 3, 1, "_CPPv4N4idol12DantzigWolfe5Neame8Strategy23update_stability_centerERK9DualPoint", "idol::DantzigWolfe::Neame::Strategy::update_stability_center::t_master_dual"], [45, 2, 1, "_CPPv4NK4idol12DantzigWolfe5Neame5cloneEv", "idol::DantzigWolfe::Neame::clone"], [45, 2, 1, "_CPPv4NK4idol12DantzigWolfe5NeameclEv", "idol::DantzigWolfe::Neame::operator()"], [46, 1, 1, "_CPPv4N4idol12DantzigWolfe7WentgesE", "idol::DantzigWolfe::Wentges"], [46, 1, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8StrategyE", "idol::DantzigWolfe::Wentges::Strategy"], [46, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy8StrategyEd", "idol::DantzigWolfe::Wentges::Strategy::Strategy"], [46, 3, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy8StrategyEd", "idol::DantzigWolfe::Wentges::Strategy::Strategy::t_initial_factor"], [46, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy30compute_smoothed_dual_solutionERK9DualPoint", "idol::DantzigWolfe::Wentges::Strategy::compute_smoothed_dual_solution"], [46, 3, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy30compute_smoothed_dual_solutionERK9DualPoint", "idol::DantzigWolfe::Wentges::Strategy::compute_smoothed_dual_solution::t_master_dual"], [46, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy10initializeEv", "idol::DantzigWolfe::Wentges::Strategy::initialize"], [46, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy23update_stability_centerERK9DualPoint", "idol::DantzigWolfe::Wentges::Strategy::update_stability_center"], [46, 3, 1, "_CPPv4N4idol12DantzigWolfe7Wentges8Strategy23update_stability_centerERK9DualPoint", "idol::DantzigWolfe::Wentges::Strategy::update_stability_center::t_master_dual"], [46, 2, 1, "_CPPv4N4idol12DantzigWolfe7Wentges7WentgesEd", "idol::DantzigWolfe::Wentges::Wentges"], [46, 3, 1, "_CPPv4N4idol12DantzigWolfe7Wentges7WentgesEd", "idol::DantzigWolfe::Wentges::Wentges::t_initial_factor"], [46, 2, 1, "_CPPv4NK4idol12DantzigWolfe7Wentges5cloneEv", "idol::DantzigWolfe::Wentges::clone"], [46, 2, 1, "_CPPv4NK4idol12DantzigWolfe7WentgesclEv", "idol::DantzigWolfe::Wentges::operator()"], [41, 1, 1, "_CPPv4N4idol25DantzigWolfeDecompositionE", "idol::DantzigWolfeDecomposition"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationIjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK25DantzigWolfeDecomposition", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionEv", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionE10AnnotationIjE", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_decomposition"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK25DantzigWolfeDecomposition", "idol::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_src"], [41, 2, 1, "_CPPv4I0EN4idol25DantzigWolfeDecomposition2asER1Tv", "idol::DantzigWolfeDecomposition::as"], [41, 2, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2asERK1Tv", "idol::DantzigWolfeDecomposition::as"], [41, 4, 1, "_CPPv4I0EN4idol25DantzigWolfeDecomposition2asER1Tv", "idol::DantzigWolfeDecomposition::as::T"], [41, 4, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2asERK1Tv", "idol::DantzigWolfeDecomposition::as::T"], [41, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition5cloneEv", "idol::DantzigWolfeDecomposition::clone"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_conditional_value"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_conditional_value"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_else"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_if"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11conditionalEbRKNSt8functionIFvR25DantzigWolfeDecompositionEEERKNSt8functionIFvR25DantzigWolfeDecompositionEEE", "idol::DantzigWolfeDecomposition::conditional::t_if"], [41, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition20get_sub_problem_specEj", "idol::DantzigWolfeDecomposition::get_sub_problem_spec"], [41, 3, 1, "_CPPv4NK4idol25DantzigWolfeDecomposition20get_sub_problem_specEj", "idol::DantzigWolfeDecomposition::get_sub_problem_spec::t_id"], [41, 2, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2isEbv", "idol::DantzigWolfeDecomposition::is"], [41, 4, 1, "_CPPv4I0ENK4idol25DantzigWolfeDecomposition2isEbv", "idol::DantzigWolfeDecomposition::is::T"], [41, 2, 1, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", "idol::DantzigWolfeDecomposition::operator()"], [41, 3, 1, "_CPPv4NK4idol25DantzigWolfeDecompositionclERK5Model", "idol::DantzigWolfeDecomposition::operator()::t_model"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_absolute_gap_tolerance"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_absolute_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", "idol::DantzigWolfeDecomposition::with_best_bound_stop"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_best_bound_stopEd", "idol::DantzigWolfeDecomposition::with_best_bound_stop::t_best_bound_stop"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", "idol::DantzigWolfeDecomposition::with_best_obj_stop"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition18with_best_obj_stopEd", "idol::DantzigWolfeDecomposition::with_best_obj_stop::t_user_best_obj"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition29with_default_sub_problem_specEN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_default_sub_problem_spec"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition29with_default_sub_problem_specEN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_default_sub_problem_spec::t_sub_problem"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationERKN12DantzigWolfe31DualPriceSmoothingStabilizationE", "idol::DantzigWolfeDecomposition::with_dual_price_smoothing_stabilization"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition39with_dual_price_smoothing_stabilizationERKN12DantzigWolfe31DualPriceSmoothingStabilizationE", "idol::DantzigWolfeDecomposition::with_dual_price_smoothing_stabilization::t_stabilization"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition19with_hard_branchingEb", "idol::DantzigWolfeDecomposition::with_hard_branching"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition19with_hard_branchingEb", "idol::DantzigWolfeDecomposition::with_hard_branching::t_value"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_infeasibility_strategyERKN12DantzigWolfe28InfeasibilityStrategyFactoryE", "idol::DantzigWolfeDecomposition::with_infeasibility_strategy"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_infeasibility_strategyERKN12DantzigWolfe28InfeasibilityStrategyFactoryE", "idol::DantzigWolfeDecomposition::with_infeasibility_strategy::t_strategy"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition31with_infeasible_columns_removalEb", "idol::DantzigWolfeDecomposition::with_infeasible_columns_removal"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition31with_infeasible_columns_removalEb", "idol::DantzigWolfeDecomposition::with_infeasible_columns_removal::t_value"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", "idol::DantzigWolfeDecomposition::with_infeasible_or_unbounded_info"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition33with_infeasible_or_unbounded_infoEb", "idol::DantzigWolfeDecomposition::with_infeasible_or_unbounded_info::t_value"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_iteration_limitEj", "idol::DantzigWolfeDecomposition::with_iteration_limit"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition20with_iteration_limitEj", "idol::DantzigWolfeDecomposition::with_iteration_limit::t_iteration_count_limit"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11with_loggerERKN4Logs12DantzigWolfe7FactoryE", "idol::DantzigWolfeDecomposition::with_logger"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition11with_loggerERKN4Logs12DantzigWolfe7FactoryE", "idol::DantzigWolfeDecomposition::with_logger::t_logger"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition9with_logsEb", "idol::DantzigWolfeDecomposition::with_logs"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition9with_logsEb", "idol::DantzigWolfeDecomposition::with_logs::t_value"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_master_optimizer"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_master_optimizerERK16OptimizerFactory", "idol::DantzigWolfeDecomposition::with_master_optimizer::t_optimizer_factory"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_max_parallel_sub_problemsEj", "idol::DantzigWolfeDecomposition::with_max_parallel_sub_problems"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition30with_max_parallel_sub_problemsEj", "idol::DantzigWolfeDecomposition::with_max_parallel_sub_problems::t_n_sub_problems"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", "idol::DantzigWolfeDecomposition::with_presolve"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition13with_presolveEb", "idol::DantzigWolfeDecomposition::with_presolve::t_value"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_relative_gap_tolerance"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition27with_relative_gap_toleranceEd", "idol::DantzigWolfeDecomposition::with_relative_gap_tolerance::t_relative_gap_tolerance"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_sub_problem_spec"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_sub_problem_spec::t_id"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition21with_sub_problem_specEjN12DantzigWolfe10SubProblemE", "idol::DantzigWolfeDecomposition::with_sub_problem_spec::t_sub_problem"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", "idol::DantzigWolfeDecomposition::with_thread_limit"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition17with_thread_limitEj", "idol::DantzigWolfeDecomposition::with_thread_limit::t_max_n_threads"], [41, 2, 1, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", "idol::DantzigWolfeDecomposition::with_time_limit"], [41, 3, 1, "_CPPv4N4idol25DantzigWolfeDecomposition15with_time_limitEd", "idol::DantzigWolfeDecomposition::with_time_limit::t_time_limit"], [30, 1, 1, "_CPPv4N4idol10DepthFirstE", "idol::DepthFirst"], [30, 1, 1, "_CPPv4I0EN4idol10DepthFirst8StrategyE", "idol::DepthFirst::Strategy"], [30, 4, 1, "_CPPv4I0EN4idol10DepthFirst8StrategyE", "idol::DepthFirst::Strategy::NodeT"], [30, 2, 1, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", "idol::DepthFirst::Strategy::Strategy"], [30, 3, 1, "_CPPv4N4idol10DepthFirst8Strategy8StrategyERK10DepthFirst", "idol::DepthFirst::Strategy::Strategy::t_parent"], [30, 2, 1, "_CPPv4NK4idol10DepthFirst8Strategy5cloneEv", "idol::DepthFirst::Strategy::clone"], [30, 2, 1, "_CPPv4NK4idol10DepthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::DepthFirst::Strategy::operator()"], [30, 3, 1, "_CPPv4NK4idol10DepthFirst8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::DepthFirst::Strategy::operator()::t_parent"], [67, 1, 1, "_CPPv4I_jEN4idol3DimE", "idol::Dim"], [67, 2, 1, "_CPPv4IDpEN4idol3Dim3DimEDpRR5ArgsT", "idol::Dim::Dim"], [67, 2, 1, "_CPPv4N4idol3Dim3DimENSt5arrayIj1NEE", "idol::Dim::Dim"], [67, 4, 1, "_CPPv4IDpEN4idol3Dim3DimEDpRR5ArgsT", "idol::Dim::Dim::ArgsT"], [67, 3, 1, "_CPPv4IDpEN4idol3Dim3DimEDpRR5ArgsT", "idol::Dim::Dim::t_args"], [67, 3, 1, "_CPPv4N4idol3Dim3DimENSt5arrayIj1NEE", "idol::Dim::Dim::t_dims"], [67, 4, 1, "_CPPv4I_jEN4idol3DimE", "idol::Dim::N"], [68, 1, 1, "_CPPv4N4idol3EnvE", "idol::Env"], [68, 2, 1, "_CPPv4N4idol3Env3EnvEv", "idol::Env::Env"], [68, 2, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]"], [68, 4, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]::T"], [68, 3, 1, "_CPPv4I0ENK4idol3EnvixERKDaRK1T", "idol::Env::operator[]::t_object"], [62, 6, 1, "_CPPv4N4idol7CtrType5EqualE", "idol::Equal"], [33, 1, 1, "_CPPv4N4idol20FirstInfeasibleFoundE", "idol::FirstInfeasibleFound"], [33, 2, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound"], [33, 2, 1, "_CPPv4N4idol20FirstInfeasibleFound20FirstInfeasibleFoundEv", "idol::FirstInfeasibleFound::FirstInfeasibleFound"], [33, 4, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound::IteratorT"], [33, 3, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound::t_begin"], [33, 3, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound20FirstInfeasibleFoundE9IteratorT9IteratorT", "idol::FirstInfeasibleFound::FirstInfeasibleFound::t_end"], [33, 1, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound8StrategyE", "idol::FirstInfeasibleFound::Strategy"], [33, 4, 1, "_CPPv4I0EN4idol20FirstInfeasibleFound8StrategyE", "idol::FirstInfeasibleFound::Strategy::NodeInfoT"], [33, 2, 1, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyERK20FirstInfeasibleFound", "idol::FirstInfeasibleFound::Strategy::Strategy"], [33, 2, 1, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyEv", "idol::FirstInfeasibleFound::Strategy::Strategy"], [33, 3, 1, "_CPPv4N4idol20FirstInfeasibleFound8Strategy8StrategyERK20FirstInfeasibleFound", "idol::FirstInfeasibleFound::Strategy::Strategy::t_parent"], [33, 2, 1, "_CPPv4NK4idol20FirstInfeasibleFound8Strategy5cloneEv", "idol::FirstInfeasibleFound::Strategy::clone"], [33, 2, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::FirstInfeasibleFound::Strategy::operator()"], [33, 2, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::FirstInfeasibleFound::Strategy::operator()"], [33, 3, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::FirstInfeasibleFound::Strategy::operator()::t_parent"], [33, 3, 1, "_CPPv4NK4idol20FirstInfeasibleFound8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::FirstInfeasibleFound::Strategy::operator()::t_parent"], [48, 1, 1, "_CPPv4N4idol4GLPKE", "idol::GLPK"], [48, 2, 1, "_CPPv4N4idol4GLPK20ContinuousRelaxationEv", "idol::GLPK::ContinuousRelaxation"], [48, 2, 1, "_CPPv4N4idol4GLPK4GLPKERK4GLPK", "idol::GLPK::GLPK"], [48, 2, 1, "_CPPv4N4idol4GLPK4GLPKERR4GLPK", "idol::GLPK::GLPK"], [48, 2, 1, "_CPPv4N4idol4GLPK4GLPKEv", "idol::GLPK::GLPK"], [48, 2, 1, "_CPPv4I0EN4idol4GLPK2asER1Tv", "idol::GLPK::as"], [48, 2, 1, "_CPPv4I0ENK4idol4GLPK2asERK1Tv", "idol::GLPK::as"], [48, 4, 1, "_CPPv4I0EN4idol4GLPK2asER1Tv", "idol::GLPK::as::T"], [48, 4, 1, "_CPPv4I0ENK4idol4GLPK2asERK1Tv", "idol::GLPK::as::T"], [48, 2, 1, "_CPPv4NK4idol4GLPK5cloneEv", "idol::GLPK::clone"], [48, 2, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional"], [48, 2, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional"], [48, 3, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_conditional_value"], [48, 3, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_conditional_value"], [48, 3, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_else"], [48, 3, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_if"], [48, 3, 1, "_CPPv4N4idol4GLPK11conditionalEbRKNSt8functionIFvR4GLPKEEERKNSt8functionIFvR4GLPKEEE", "idol::GLPK::conditional::t_if"], [48, 2, 1, "_CPPv4I0ENK4idol4GLPK2isEbv", "idol::GLPK::is"], [48, 4, 1, "_CPPv4I0ENK4idol4GLPK2isEbv", "idol::GLPK::is::T"], [48, 2, 1, "_CPPv4NK4idol4GLPKclERK5Model", "idol::GLPK::operator()"], [48, 3, 1, "_CPPv4NK4idol4GLPKclERK5Model", "idol::GLPK::operator()::t_model"], [48, 2, 1, "_CPPv4N4idol4GLPKaSERK4GLPK", "idol::GLPK::operator="], [48, 2, 1, "_CPPv4N4idol4GLPKaSERR4GLPK", "idol::GLPK::operator="], [48, 2, 1, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::GLPK::read_from_file"], [48, 3, 1, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::GLPK::read_from_file::t_env"], [48, 3, 1, "_CPPv4N4idol4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::GLPK::read_from_file::t_filename"], [48, 2, 1, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", "idol::GLPK::with_absolute_gap_tolerance"], [48, 3, 1, "_CPPv4N4idol4GLPK27with_absolute_gap_toleranceEd", "idol::GLPK::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [48, 2, 1, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", "idol::GLPK::with_best_bound_stop"], [48, 3, 1, "_CPPv4N4idol4GLPK20with_best_bound_stopEd", "idol::GLPK::with_best_bound_stop::t_best_bound_stop"], [48, 2, 1, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", "idol::GLPK::with_best_obj_stop"], [48, 3, 1, "_CPPv4N4idol4GLPK18with_best_obj_stopEd", "idol::GLPK::with_best_obj_stop::t_user_best_obj"], [48, 2, 1, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", "idol::GLPK::with_infeasible_or_unbounded_info"], [48, 3, 1, "_CPPv4N4idol4GLPK33with_infeasible_or_unbounded_infoEb", "idol::GLPK::with_infeasible_or_unbounded_info::t_value"], [48, 2, 1, "_CPPv4N4idol4GLPK20with_iteration_limitEj", "idol::GLPK::with_iteration_limit"], [48, 3, 1, "_CPPv4N4idol4GLPK20with_iteration_limitEj", "idol::GLPK::with_iteration_limit::t_iteration_count_limit"], [48, 2, 1, "_CPPv4N4idol4GLPK9with_logsEb", "idol::GLPK::with_logs"], [48, 3, 1, "_CPPv4N4idol4GLPK9with_logsEb", "idol::GLPK::with_logs::t_value"], [48, 2, 1, "_CPPv4N4idol4GLPK13with_presolveEb", "idol::GLPK::with_presolve"], [48, 3, 1, "_CPPv4N4idol4GLPK13with_presolveEb", "idol::GLPK::with_presolve::t_value"], [48, 2, 1, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", "idol::GLPK::with_relative_gap_tolerance"], [48, 3, 1, "_CPPv4N4idol4GLPK27with_relative_gap_toleranceEd", "idol::GLPK::with_relative_gap_tolerance::t_relative_gap_tolerance"], [48, 2, 1, "_CPPv4N4idol4GLPK17with_thread_limitEj", "idol::GLPK::with_thread_limit"], [48, 3, 1, "_CPPv4N4idol4GLPK17with_thread_limitEj", "idol::GLPK::with_thread_limit::t_max_n_threads"], [48, 2, 1, "_CPPv4N4idol4GLPK15with_time_limitEd", "idol::GLPK::with_time_limit"], [48, 3, 1, "_CPPv4N4idol4GLPK15with_time_limitEd", "idol::GLPK::with_time_limit::t_time_limit"], [62, 6, 1, "_CPPv4N4idol7CtrType14GreaterOrEqualE", "idol::GreaterOrEqual"], [49, 1, 1, "_CPPv4N4idol6GurobiE", "idol::Gurobi"], [49, 2, 1, "_CPPv4N4idol6Gurobi20ContinuousRelaxationEv", "idol::Gurobi::ContinuousRelaxation"], [49, 2, 1, "_CPPv4N4idol6Gurobi6GurobiERK6Gurobi", "idol::Gurobi::Gurobi"], [49, 2, 1, "_CPPv4N4idol6Gurobi6GurobiERR6Gurobi", "idol::Gurobi::Gurobi"], [49, 2, 1, "_CPPv4N4idol6Gurobi6GurobiEv", "idol::Gurobi::Gurobi"], [49, 3, 1, "_CPPv4N4idol6Gurobi6GurobiERK6Gurobi", "idol::Gurobi::Gurobi::t_src"], [49, 2, 1, "_CPPv4N4idol6Gurobi12add_callbackERK15CallbackFactory", "idol::Gurobi::add_callback"], [49, 3, 1, "_CPPv4N4idol6Gurobi12add_callbackERK15CallbackFactory", "idol::Gurobi::add_callback::t_cb"], [49, 2, 1, "_CPPv4I0EN4idol6Gurobi2asER1Tv", "idol::Gurobi::as"], [49, 2, 1, "_CPPv4I0ENK4idol6Gurobi2asERK1Tv", "idol::Gurobi::as"], [49, 4, 1, "_CPPv4I0EN4idol6Gurobi2asER1Tv", "idol::Gurobi::as::T"], [49, 4, 1, "_CPPv4I0ENK4idol6Gurobi2asERK1Tv", "idol::Gurobi::as::T"], [49, 2, 1, "_CPPv4NK4idol6Gurobi5cloneEv", "idol::Gurobi::clone"], [49, 2, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional"], [49, 2, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional"], [49, 3, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_conditional_value"], [49, 3, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_conditional_value"], [49, 3, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_else"], [49, 3, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_if"], [49, 3, 1, "_CPPv4N4idol6Gurobi11conditionalEbRKNSt8functionIFvR6GurobiEEERKNSt8functionIFvR6GurobiEEE", "idol::Gurobi::conditional::t_if"], [49, 2, 1, "_CPPv4I0ENK4idol6Gurobi2isEbv", "idol::Gurobi::is"], [49, 4, 1, "_CPPv4I0ENK4idol6Gurobi2isEbv", "idol::Gurobi::is::T"], [49, 2, 1, "_CPPv4NK4idol6GurobiclERK5Model", "idol::Gurobi::operator()"], [49, 3, 1, "_CPPv4NK4idol6GurobiclERK5Model", "idol::Gurobi::operator()::t_model"], [49, 2, 1, "_CPPv4N4idol6GurobiaSERK6Gurobi", "idol::Gurobi::operator="], [49, 2, 1, "_CPPv4N4idol6GurobiaSERR6Gurobi", "idol::Gurobi::operator="], [49, 2, 1, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Gurobi::read_from_file"], [49, 3, 1, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Gurobi::read_from_file::t_env"], [49, 3, 1, "_CPPv4N4idol6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Gurobi::read_from_file::t_filename"], [49, 2, 1, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", "idol::Gurobi::with_absolute_gap_tolerance"], [49, 3, 1, "_CPPv4N4idol6Gurobi27with_absolute_gap_toleranceEd", "idol::Gurobi::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [49, 2, 1, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", "idol::Gurobi::with_best_bound_stop"], [49, 3, 1, "_CPPv4N4idol6Gurobi20with_best_bound_stopEd", "idol::Gurobi::with_best_bound_stop::t_best_bound_stop"], [49, 2, 1, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", "idol::Gurobi::with_best_obj_stop"], [49, 3, 1, "_CPPv4N4idol6Gurobi18with_best_obj_stopEd", "idol::Gurobi::with_best_obj_stop::t_user_best_obj"], [49, 2, 1, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", "idol::Gurobi::with_continuous_relaxation_only"], [49, 3, 1, "_CPPv4N4idol6Gurobi31with_continuous_relaxation_onlyEb", "idol::Gurobi::with_continuous_relaxation_only::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param"], [49, 2, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param"], [49, 3, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param::t_param"], [49, 3, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param::t_param"], [49, 3, 1, "_CPPv4N4idol6Gurobi19with_external_paramE12GRB_IntParami", "idol::Gurobi::with_external_param::t_value"], [49, 3, 1, "_CPPv4N4idol6Gurobi19with_external_paramE15GRB_DoubleParamd", "idol::Gurobi::with_external_param::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", "idol::Gurobi::with_infeasible_or_unbounded_info"], [49, 3, 1, "_CPPv4N4idol6Gurobi33with_infeasible_or_unbounded_infoEb", "idol::Gurobi::with_infeasible_or_unbounded_info::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi20with_iteration_limitEj", "idol::Gurobi::with_iteration_limit"], [49, 3, 1, "_CPPv4N4idol6Gurobi20with_iteration_limitEj", "idol::Gurobi::with_iteration_limit::t_iteration_count_limit"], [49, 2, 1, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", "idol::Gurobi::with_lazy_cut"], [49, 3, 1, "_CPPv4N4idol6Gurobi13with_lazy_cutEb", "idol::Gurobi::with_lazy_cut::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi9with_logsEb", "idol::Gurobi::with_logs"], [49, 3, 1, "_CPPv4N4idol6Gurobi9with_logsEb", "idol::Gurobi::with_logs::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", "idol::Gurobi::with_max_n_solution_in_pool"], [49, 3, 1, "_CPPv4N4idol6Gurobi27with_max_n_solution_in_poolEj", "idol::Gurobi::with_max_n_solution_in_pool::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi13with_presolveEb", "idol::Gurobi::with_presolve"], [49, 3, 1, "_CPPv4N4idol6Gurobi13with_presolveEb", "idol::Gurobi::with_presolve::t_value"], [49, 2, 1, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", "idol::Gurobi::with_relative_gap_tolerance"], [49, 3, 1, "_CPPv4N4idol6Gurobi27with_relative_gap_toleranceEd", "idol::Gurobi::with_relative_gap_tolerance::t_relative_gap_tolerance"], [49, 2, 1, "_CPPv4N4idol6Gurobi17with_thread_limitEj", "idol::Gurobi::with_thread_limit"], [49, 3, 1, "_CPPv4N4idol6Gurobi17with_thread_limitEj", "idol::Gurobi::with_thread_limit::t_max_n_threads"], [49, 2, 1, "_CPPv4N4idol6Gurobi15with_time_limitEd", "idol::Gurobi::with_time_limit"], [49, 3, 1, "_CPPv4N4idol6Gurobi15with_time_limitEd", "idol::Gurobi::with_time_limit::t_time_limit"], [43, 1, 1, "_CPPv4I0EN4idol10Heuristics13IntegerMasterE", "idol::Heuristics::IntegerMaster"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterERR13IntegerMaster", "idol::Heuristics::IntegerMaster::IntegerMaster"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster13IntegerMasterEv", "idol::Heuristics::IntegerMaster::IntegerMaster"], [43, 4, 1, "_CPPv4I0EN4idol10Heuristics13IntegerMasterE", "idol::Heuristics::IntegerMaster::NodeInfoT"], [43, 1, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8StrategyE", "idol::Heuristics::IntegerMaster::Strategy"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy8StrategyERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::Strategy::Strategy"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy8StrategyERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::Strategy::Strategy::t_optimizer"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_frequencyEj", "idol::Heuristics::IntegerMaster::Strategy::set_frequency"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_frequencyEj", "idol::Heuristics::IntegerMaster::Strategy::set_frequency::t_frequency"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_integer_columnsEb", "idol::Heuristics::IntegerMaster::Strategy::set_integer_columns"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_integer_columnsEb", "idol::Heuristics::IntegerMaster::Strategy::set_integer_columns::t_value"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_iteration_limitEj", "idol::Heuristics::IntegerMaster::Strategy::set_iteration_limit"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy19set_iteration_limitEj", "idol::Heuristics::IntegerMaster::Strategy::set_iteration_limit::t_iteration_limit"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_max_depthEj", "idol::Heuristics::IntegerMaster::Strategy::set_max_depth"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy13set_max_depthEj", "idol::Heuristics::IntegerMaster::Strategy::set_max_depth::t_max_depth"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy14set_time_limitEd", "idol::Heuristics::IntegerMaster::Strategy::set_time_limit"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster8Strategy14set_time_limitEd", "idol::Heuristics::IntegerMaster::Strategy::set_time_limit::t_time_limit"], [43, 2, 1, "_CPPv4NK4idol10Heuristics13IntegerMaster8Strategy20with_integer_columnsEv", "idol::Heuristics::IntegerMaster::Strategy::with_integer_columns"], [43, 2, 1, "_CPPv4NK4idol10Heuristics13IntegerMaster5cloneEv", "idol::Heuristics::IntegerMaster::clone"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMasterclEv", "idol::Heuristics::IntegerMaster::operator()"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMasteraSERK13IntegerMaster", "idol::Heuristics::IntegerMaster::operator="], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMasteraSERR13IntegerMaster", "idol::Heuristics::IntegerMaster::operator="], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_frequencyEj", "idol::Heuristics::IntegerMaster::with_frequency"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_frequencyEj", "idol::Heuristics::IntegerMaster::with_frequency::t_frequency"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_integer_columnsEb", "idol::Heuristics::IntegerMaster::with_integer_columns"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_integer_columnsEb", "idol::Heuristics::IntegerMaster::with_integer_columns::t_value"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_iteration_limitEj", "idol::Heuristics::IntegerMaster::with_iteration_limit"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster20with_iteration_limitEj", "idol::Heuristics::IntegerMaster::with_iteration_limit::t_iteration_limit"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_max_depthEj", "idol::Heuristics::IntegerMaster::with_max_depth"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_max_depthEj", "idol::Heuristics::IntegerMaster::with_max_depth::t_max_depth"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_optimizerERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::with_optimizer"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster14with_optimizerERK16OptimizerFactory", "idol::Heuristics::IntegerMaster::with_optimizer::t_optimizer"], [43, 2, 1, "_CPPv4N4idol10Heuristics13IntegerMaster15with_time_limitEd", "idol::Heuristics::IntegerMaster::with_time_limit"], [43, 3, 1, "_CPPv4N4idol10Heuristics13IntegerMaster15with_time_limitEd", "idol::Heuristics::IntegerMaster::with_time_limit::t_time_limit"], [23, 1, 1, "_CPPv4N4idol10Heuristics14LocalBranchingE", "idol::Heuristics::LocalBranching"], [23, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranching14LocalBranchingEv", "idol::Heuristics::LocalBranching::LocalBranching"], [23, 1, 1, "_CPPv4N4idol10Heuristics14LocalBranching8StrategyE", "idol::Heuristics::LocalBranching::Strategy"], [23, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", "idol::Heuristics::LocalBranching::Strategy::Strategy"], [23, 3, 1, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", "idol::Heuristics::LocalBranching::Strategy::Strategy::t_neighbourhood_size"], [23, 3, 1, "_CPPv4N4idol10Heuristics14LocalBranching8Strategy8StrategyEjP16OptimizerFactory", "idol::Heuristics::LocalBranching::Strategy::Strategy::t_optimizer_factory"], [23, 2, 1, "_CPPv4NK4idol10Heuristics14LocalBranching5cloneEv", "idol::Heuristics::LocalBranching::clone"], [23, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranchingclEv", "idol::Heuristics::LocalBranching::operator()"], [23, 2, 1, "_CPPv4N4idol10Heuristics14LocalBranching14with_optimizerERK16OptimizerFactory", "idol::Heuristics::LocalBranching::with_optimizer"], [23, 3, 1, "_CPPv4N4idol10Heuristics14LocalBranching14with_optimizerERK16OptimizerFactory", "idol::Heuristics::LocalBranching::with_optimizer::t_optimizer_factory"], [24, 1, 1, "_CPPv4N4idol10Heuristics4RENSE", "idol::Heuristics::RENS"], [24, 2, 1, "_CPPv4N4idol10Heuristics4RENS4RENSEv", "idol::Heuristics::RENS::RENS"], [24, 1, 1, "_CPPv4N4idol10Heuristics4RENS8StrategyE", "idol::Heuristics::RENS::Strategy"], [24, 2, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy"], [24, 3, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy::t_minimum_ratio_of_integer_variables_to_fix"], [24, 3, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy::t_minimum_ratio_of_variables_to_fix"], [24, 3, 1, "_CPPv4N4idol10Heuristics4RENS8Strategy8StrategyEddP16OptimizerFactory", "idol::Heuristics::RENS::Strategy::Strategy::t_optimizer_factory"], [24, 2, 1, "_CPPv4NK4idol10Heuristics4RENS5cloneEv", "idol::Heuristics::RENS::clone"], [24, 2, 1, "_CPPv4N4idol10Heuristics4RENSclEv", "idol::Heuristics::RENS::operator()"], [24, 2, 1, "_CPPv4N4idol10Heuristics4RENS14with_optimizerERK16OptimizerFactory", "idol::Heuristics::RENS::with_optimizer"], [24, 3, 1, "_CPPv4N4idol10Heuristics4RENS14with_optimizerERK16OptimizerFactory", "idol::Heuristics::RENS::with_optimizer::t_optimizer_factory"], [25, 1, 1, "_CPPv4N4idol10Heuristics14SimpleRoundingE", "idol::Heuristics::SimpleRounding"], [25, 2, 1, "_CPPv4N4idol10Heuristics14SimpleRounding14SimpleRoundingEv", "idol::Heuristics::SimpleRounding::SimpleRounding"], [25, 1, 1, "_CPPv4N4idol10Heuristics14SimpleRounding8StrategyE", "idol::Heuristics::SimpleRounding::Strategy"], [25, 2, 1, "_CPPv4NK4idol10Heuristics14SimpleRounding5cloneEv", "idol::Heuristics::SimpleRounding::clone"], [25, 2, 1, "_CPPv4N4idol10Heuristics14SimpleRoundingclEv", "idol::Heuristics::SimpleRounding::operator()"], [50, 1, 1, "_CPPv4N4idol5HiGHSE", "idol::HiGHS"], [50, 2, 1, "_CPPv4N4idol5HiGHS20ContinuousRelaxationEv", "idol::HiGHS::ContinuousRelaxation"], [50, 2, 1, "_CPPv4N4idol5HiGHS5HiGHSERK5HiGHS", "idol::HiGHS::HiGHS"], [50, 2, 1, "_CPPv4N4idol5HiGHS5HiGHSERR5HiGHS", "idol::HiGHS::HiGHS"], [50, 2, 1, "_CPPv4N4idol5HiGHS5HiGHSEv", "idol::HiGHS::HiGHS"], [50, 2, 1, "_CPPv4I0EN4idol5HiGHS2asER1Tv", "idol::HiGHS::as"], [50, 2, 1, "_CPPv4I0ENK4idol5HiGHS2asERK1Tv", "idol::HiGHS::as"], [50, 4, 1, "_CPPv4I0EN4idol5HiGHS2asER1Tv", "idol::HiGHS::as::T"], [50, 4, 1, "_CPPv4I0ENK4idol5HiGHS2asERK1Tv", "idol::HiGHS::as::T"], [50, 2, 1, "_CPPv4NK4idol5HiGHS5cloneEv", "idol::HiGHS::clone"], [50, 2, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional"], [50, 2, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional"], [50, 3, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_conditional_value"], [50, 3, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_conditional_value"], [50, 3, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_else"], [50, 3, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_if"], [50, 3, 1, "_CPPv4N4idol5HiGHS11conditionalEbRKNSt8functionIFvR5HiGHSEEERKNSt8functionIFvR5HiGHSEEE", "idol::HiGHS::conditional::t_if"], [50, 2, 1, "_CPPv4I0ENK4idol5HiGHS2isEbv", "idol::HiGHS::is"], [50, 4, 1, "_CPPv4I0ENK4idol5HiGHS2isEbv", "idol::HiGHS::is::T"], [50, 2, 1, "_CPPv4NK4idol5HiGHSclERK5Model", "idol::HiGHS::operator()"], [50, 3, 1, "_CPPv4NK4idol5HiGHSclERK5Model", "idol::HiGHS::operator()::t_model"], [50, 2, 1, "_CPPv4N4idol5HiGHSaSERK5HiGHS", "idol::HiGHS::operator="], [50, 2, 1, "_CPPv4N4idol5HiGHSaSERR5HiGHS", "idol::HiGHS::operator="], [50, 2, 1, "_CPPv4N4idol5HiGHS27with_absolute_gap_toleranceEd", "idol::HiGHS::with_absolute_gap_tolerance"], [50, 3, 1, "_CPPv4N4idol5HiGHS27with_absolute_gap_toleranceEd", "idol::HiGHS::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [50, 2, 1, "_CPPv4N4idol5HiGHS20with_best_bound_stopEd", "idol::HiGHS::with_best_bound_stop"], [50, 3, 1, "_CPPv4N4idol5HiGHS20with_best_bound_stopEd", "idol::HiGHS::with_best_bound_stop::t_best_bound_stop"], [50, 2, 1, "_CPPv4N4idol5HiGHS18with_best_obj_stopEd", "idol::HiGHS::with_best_obj_stop"], [50, 3, 1, "_CPPv4N4idol5HiGHS18with_best_obj_stopEd", "idol::HiGHS::with_best_obj_stop::t_user_best_obj"], [50, 2, 1, "_CPPv4N4idol5HiGHS31with_continuous_relaxation_onlyEb", "idol::HiGHS::with_continuous_relaxation_only"], [50, 3, 1, "_CPPv4N4idol5HiGHS31with_continuous_relaxation_onlyEb", "idol::HiGHS::with_continuous_relaxation_only::t_value"], [50, 2, 1, "_CPPv4N4idol5HiGHS33with_infeasible_or_unbounded_infoEb", "idol::HiGHS::with_infeasible_or_unbounded_info"], [50, 3, 1, "_CPPv4N4idol5HiGHS33with_infeasible_or_unbounded_infoEb", "idol::HiGHS::with_infeasible_or_unbounded_info::t_value"], [50, 2, 1, "_CPPv4N4idol5HiGHS20with_iteration_limitEj", "idol::HiGHS::with_iteration_limit"], [50, 3, 1, "_CPPv4N4idol5HiGHS20with_iteration_limitEj", "idol::HiGHS::with_iteration_limit::t_iteration_count_limit"], [50, 2, 1, "_CPPv4N4idol5HiGHS9with_logsEb", "idol::HiGHS::with_logs"], [50, 3, 1, "_CPPv4N4idol5HiGHS9with_logsEb", "idol::HiGHS::with_logs::t_value"], [50, 2, 1, "_CPPv4N4idol5HiGHS13with_presolveEb", "idol::HiGHS::with_presolve"], [50, 3, 1, "_CPPv4N4idol5HiGHS13with_presolveEb", "idol::HiGHS::with_presolve::t_value"], [50, 2, 1, "_CPPv4N4idol5HiGHS27with_relative_gap_toleranceEd", "idol::HiGHS::with_relative_gap_tolerance"], [50, 3, 1, "_CPPv4N4idol5HiGHS27with_relative_gap_toleranceEd", "idol::HiGHS::with_relative_gap_tolerance::t_relative_gap_tolerance"], [50, 2, 1, "_CPPv4N4idol5HiGHS17with_thread_limitEj", "idol::HiGHS::with_thread_limit"], [50, 3, 1, "_CPPv4N4idol5HiGHS17with_thread_limitEj", "idol::HiGHS::with_thread_limit::t_max_n_threads"], [50, 2, 1, "_CPPv4N4idol5HiGHS15with_time_limitEd", "idol::HiGHS::with_time_limit"], [50, 3, 1, "_CPPv4N4idol5HiGHS15with_time_limitEd", "idol::HiGHS::with_time_limit::t_time_limit"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent17IncumbentSolutionE", "idol::IncumbentSolution"], [64, 5, 1, "_CPPv4N4idol3InfE", "idol::Inf"], [63, 6, 1, "_CPPv4N4idol7VarType7IntegerE", "idol::Integer"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent15InvalidSolutionE", "idol::InvalidSolution"], [14, 1, 1, "_CPPv4N4idol15LazyCutCallbackE", "idol::LazyCutCallback"], [14, 2, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback"], [14, 3, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback::t_cut"], [14, 3, 1, "_CPPv4N4idol15LazyCutCallback15LazyCutCallbackERK5Model7TempCtr", "idol::LazyCutCallback::LazyCutCallback::t_model"], [14, 1, 1, "_CPPv4N4idol15LazyCutCallback8StrategyE", "idol::LazyCutCallback::Strategy"], [14, 2, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::LazyCutCallback::Strategy::Strategy"], [14, 3, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::LazyCutCallback::Strategy::Strategy::t_cut"], [14, 3, 1, "_CPPv4N4idol15LazyCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::LazyCutCallback::Strategy::Strategy::t_separation_problem"], [14, 2, 1, "_CPPv4NK4idol15LazyCutCallback5cloneEv", "idol::LazyCutCallback::clone"], [14, 2, 1, "_CPPv4N4idol15LazyCutCallbackclEv", "idol::LazyCutCallback::operator()"], [14, 2, 1, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::LazyCutCallback::with_separation_optimizer"], [14, 3, 1, "_CPPv4N4idol15LazyCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::LazyCutCallback::with_separation_optimizer::t_optimizer_factory"], [34, 1, 1, "_CPPv4N4idol15LeastInfeasibleE", "idol::LeastInfeasible"], [34, 2, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible"], [34, 2, 1, "_CPPv4N4idol15LeastInfeasible15LeastInfeasibleEv", "idol::LeastInfeasible::LeastInfeasible"], [34, 4, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible::IteratorT"], [34, 3, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible::t_begin"], [34, 3, 1, "_CPPv4I0EN4idol15LeastInfeasible15LeastInfeasibleE9IteratorT9IteratorT", "idol::LeastInfeasible::LeastInfeasible::t_end"], [34, 1, 1, "_CPPv4I0EN4idol15LeastInfeasible8StrategyE", "idol::LeastInfeasible::Strategy"], [34, 4, 1, "_CPPv4I0EN4idol15LeastInfeasible8StrategyE", "idol::LeastInfeasible::Strategy::NodeInfoT"], [34, 2, 1, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyERK15LeastInfeasible", "idol::LeastInfeasible::Strategy::Strategy"], [34, 2, 1, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyEv", "idol::LeastInfeasible::Strategy::Strategy"], [34, 3, 1, "_CPPv4N4idol15LeastInfeasible8Strategy8StrategyERK15LeastInfeasible", "idol::LeastInfeasible::Strategy::Strategy::t_parent"], [34, 2, 1, "_CPPv4NK4idol15LeastInfeasible8Strategy5cloneEv", "idol::LeastInfeasible::Strategy::clone"], [34, 2, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::LeastInfeasible::Strategy::operator()"], [34, 2, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::LeastInfeasible::Strategy::operator()"], [34, 3, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::LeastInfeasible::Strategy::operator()::t_parent"], [34, 3, 1, "_CPPv4NK4idol15LeastInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::LeastInfeasible::Strategy::operator()::t_parent"], [62, 6, 1, "_CPPv4N4idol7CtrType11LessOrEqualE", "idol::LessOrEqual"], [70, 1, 1, "_CPPv4I00EN4idol7LinExprE", "idol::LinExpr"], [70, 4, 1, "_CPPv4I00EN4idol7LinExprE", "idol::LinExpr::KeyT"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprE12SparseVectorI4KeyT6ValueTE", "idol::LinExpr::LinExpr"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprE4KeyT", "idol::LinExpr::LinExpr"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERK6ValueTRK4KeyT", "idol::LinExpr::LinExpr"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERK7LinExprI4KeyT6ValueTE", "idol::LinExpr::LinExpr"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERR6ValueTRK4KeyT", "idol::LinExpr::LinExpr"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprERR7LinExprI4KeyT6ValueTE", "idol::LinExpr::LinExpr"], [70, 2, 1, "_CPPv4N4idol7LinExpr7LinExprEv", "idol::LinExpr::LinExpr"], [70, 3, 1, "_CPPv4N4idol7LinExpr7LinExprERK6ValueTRK4KeyT", "idol::LinExpr::LinExpr::t_factor"], [70, 3, 1, "_CPPv4N4idol7LinExpr7LinExprERR6ValueTRK4KeyT", "idol::LinExpr::LinExpr::t_factor"], [70, 3, 1, "_CPPv4N4idol7LinExpr7LinExprE4KeyT", "idol::LinExpr::LinExpr::t_key"], [70, 3, 1, "_CPPv4N4idol7LinExpr7LinExprERK6ValueTRK4KeyT", "idol::LinExpr::LinExpr::t_key"], [70, 3, 1, "_CPPv4N4idol7LinExpr7LinExprERR6ValueTRK4KeyT", "idol::LinExpr::LinExpr::t_key"], [70, 3, 1, "_CPPv4N4idol7LinExpr7LinExprE12SparseVectorI4KeyT6ValueTE", "idol::LinExpr::LinExpr::t_vector"], [70, 4, 1, "_CPPv4I00EN4idol7LinExprE", "idol::LinExpr::ValueT"], [70, 5, 1, "_CPPv4N4idol7LinExpr4ZeroE", "idol::LinExpr::Zero"], [70, 2, 1, "_CPPv4N4idol7LinExpr5beginEv", "idol::LinExpr::begin"], [70, 2, 1, "_CPPv4NK4idol7LinExpr5beginEv", "idol::LinExpr::begin"], [70, 2, 1, "_CPPv4NK4idol7LinExpr6cbeginEv", "idol::LinExpr::cbegin"], [70, 2, 1, "_CPPv4NK4idol7LinExpr4cendEv", "idol::LinExpr::cend"], [70, 2, 1, "_CPPv4N4idol7LinExpr5clearEv", "idol::LinExpr::clear"], [70, 0, 1, "_CPPv4N4idol7LinExpr14const_iteratorE", "idol::LinExpr::const_iterator"], [70, 2, 1, "_CPPv4NK4idol7LinExpr5emptyEv", "idol::LinExpr::empty"], [70, 2, 1, "_CPPv4N4idol7LinExpr3endEv", "idol::LinExpr::end"], [70, 2, 1, "_CPPv4NK4idol7LinExpr3endEv", "idol::LinExpr::end"], [70, 2, 1, "_CPPv4NK4idol7LinExpr3getERK6IndexT", "idol::LinExpr::get"], [70, 3, 1, "_CPPv4NK4idol7LinExpr3getERK6IndexT", "idol::LinExpr::get::t_index1"], [70, 2, 1, "_CPPv4NK4idol7LinExpr9has_indexERK6IndexT", "idol::LinExpr::has_index"], [70, 3, 1, "_CPPv4NK4idol7LinExpr9has_indexERK6IndexT", "idol::LinExpr::has_index::t_index"], [70, 2, 1, "_CPPv4NK4idol7LinExpr7is_zeroEd", "idol::LinExpr::is_zero"], [70, 3, 1, "_CPPv4NK4idol7LinExpr7is_zeroEd", "idol::LinExpr::is_zero::t_tolerance"], [70, 0, 1, "_CPPv4N4idol7LinExpr8iteratorE", "idol::LinExpr::iterator"], [70, 2, 1, "_CPPv4N4idol7LinExpr22merge_without_conflictERK12SparseVector", "idol::LinExpr::merge_without_conflict"], [70, 3, 1, "_CPPv4N4idol7LinExpr22merge_without_conflictERK12SparseVector", "idol::LinExpr::merge_without_conflict::t_vec"], [70, 2, 1, "_CPPv4N4idol7LinExprmLENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::LinExpr::operator*="], [70, 3, 1, "_CPPv4N4idol7LinExprmLENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::LinExpr::operator*=::t_scalar"], [70, 2, 1, "_CPPv4N4idol7LinExprpLERK12SparseVector", "idol::LinExpr::operator+="], [70, 2, 1, "_CPPv4N4idol7LinExprpLERK4KeyT", "idol::LinExpr::operator+="], [70, 2, 1, "_CPPv4N4idol7LinExprpLERK7LinExprI4KeyT6ValueTE", "idol::LinExpr::operator+="], [70, 3, 1, "_CPPv4N4idol7LinExprpLERK4KeyT", "idol::LinExpr::operator+=::t_rhs"], [70, 3, 1, "_CPPv4N4idol7LinExprpLERK7LinExprI4KeyT6ValueTE", "idol::LinExpr::operator+=::t_rhs"], [70, 3, 1, "_CPPv4N4idol7LinExprpLERK12SparseVector", "idol::LinExpr::operator+=::t_vector"], [70, 2, 1, "_CPPv4NK4idol7LinExprmiEv", "idol::LinExpr::operator-"], [70, 2, 1, "_CPPv4N4idol7LinExprmIERK12SparseVector", "idol::LinExpr::operator-="], [70, 2, 1, "_CPPv4N4idol7LinExprmIERK4KeyT", "idol::LinExpr::operator-="], [70, 2, 1, "_CPPv4N4idol7LinExprmIERK7LinExprI4KeyT6ValueTE", "idol::LinExpr::operator-="], [70, 3, 1, "_CPPv4N4idol7LinExprmIERK4KeyT", "idol::LinExpr::operator-=::t_rhs"], [70, 3, 1, "_CPPv4N4idol7LinExprmIERK7LinExprI4KeyT6ValueTE", "idol::LinExpr::operator-=::t_rhs"], [70, 3, 1, "_CPPv4N4idol7LinExprmIERK12SparseVector", "idol::LinExpr::operator-=::t_vector"], [70, 2, 1, "_CPPv4N4idol7LinExprdVENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::LinExpr::operator/="], [70, 3, 1, "_CPPv4N4idol7LinExprdVENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::LinExpr::operator/=::t_scalar"], [70, 2, 1, "_CPPv4N4idol7LinExpraSERK7LinExprI4KeyT6ValueTE", "idol::LinExpr::operator="], [70, 2, 1, "_CPPv4N4idol7LinExpraSERR7LinExprI4KeyT6ValueTE", "idol::LinExpr::operator="], [70, 2, 1, "_CPPv4N4idol7LinExpr6removeERK6IndexT", "idol::LinExpr::remove"], [70, 3, 1, "_CPPv4N4idol7LinExpr6removeERK6IndexT", "idol::LinExpr::remove::t_index"], [70, 2, 1, "_CPPv4N4idol7LinExpr7reserveEj", "idol::LinExpr::reserve"], [70, 3, 1, "_CPPv4N4idol7LinExpr7reserveEj", "idol::LinExpr::reserve::t_capacity"], [70, 2, 1, "_CPPv4N4idol7LinExpr3setERK6IndexTRK6ValueT", "idol::LinExpr::set"], [70, 3, 1, "_CPPv4N4idol7LinExpr3setERK6IndexTRK6ValueT", "idol::LinExpr::set::t_index"], [70, 3, 1, "_CPPv4N4idol7LinExpr3setERK6IndexTRK6ValueT", "idol::LinExpr::set::t_value"], [70, 2, 1, "_CPPv4NK4idol7LinExpr4sizeEv", "idol::LinExpr::size"], [71, 1, 1, "_CPPv4N4idol5ModelE", "idol::Model"], [71, 6, 1, "_CPPv4N4idol5Model7Storage4BothE", "idol::Model::Both"], [71, 6, 1, "_CPPv4N4idol5Model7Storage14ColumnOrientedE", "idol::Model::ColumnOriented"], [71, 2, 1, "_CPPv4N4idol5Model5ModelER3Env7Storage", "idol::Model::Model"], [71, 2, 1, "_CPPv4N4idol5Model5ModelERR5Model", "idol::Model::Model"], [71, 3, 1, "_CPPv4N4idol5Model5ModelER3Env7Storage", "idol::Model::Model::t_env"], [71, 3, 1, "_CPPv4N4idol5Model5ModelER3Env7Storage", "idol::Model::Model::t_storage"], [71, 6, 1, "_CPPv4N4idol5Model7Storage11RowOrientedE", "idol::Model::RowOriented"], [71, 7, 1, "_CPPv4N4idol5Model7StorageE", "idol::Model::Storage"], [71, 6, 1, "_CPPv4N4idol5Model7Storage4BothE", "idol::Model::Storage::Both"], [71, 6, 1, "_CPPv4N4idol5Model7Storage14ColumnOrientedE", "idol::Model::Storage::ColumnOriented"], [71, 6, 1, "_CPPv4N4idol5Model7Storage11RowOrientedE", "idol::Model::Storage::RowOriented"], [71, 2, 1, "_CPPv4N4idol5Model3addERK3Ctr", "idol::Model::add"], [71, 2, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add"], [71, 2, 1, "_CPPv4N4idol5Model3addERK3Var", "idol::Model::add"], [71, 2, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add"], [71, 2, 1, "_CPPv4N4idol5Model3addERK4QCtr", "idol::Model::add"], [71, 2, 1, "_CPPv4N4idol5Model3addERK4QCtr8TempQCtr", "idol::Model::add"], [71, 3, 1, "_CPPv4N4idol5Model3addERK3Ctr", "idol::Model::add::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model3addERK4QCtr", "idol::Model::add::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model3addERK4QCtr8TempQCtr", "idol::Model::add::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model3addERK3Ctr7TempCtr", "idol::Model::add::t_temp_ctr"], [71, 3, 1, "_CPPv4N4idol5Model3addERK4QCtr8TempQCtr", "idol::Model::add::t_temp_ctr"], [71, 3, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add::t_temp_var"], [71, 3, 1, "_CPPv4N4idol5Model3addERK3Var", "idol::Model::add::t_var"], [71, 3, 1, "_CPPv4N4idol5Model3addERK3Var7TempVar", "idol::Model::add::t_var"], [71, 2, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr"], [71, 2, 1, "_CPPv4N4idol5Model7add_ctrERR7LinExprI3VarE7CtrTypedNSt6stringE", "idol::Model::add_ctr"], [71, 3, 1, "_CPPv4N4idol5Model7add_ctrERR7LinExprI3VarE7CtrTypedNSt6stringE", "idol::Model::add_ctr::t_lhs"], [71, 3, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr::t_name"], [71, 3, 1, "_CPPv4N4idol5Model7add_ctrERR7LinExprI3VarE7CtrTypedNSt6stringE", "idol::Model::add_ctr::t_name"], [71, 3, 1, "_CPPv4N4idol5Model7add_ctrERR7LinExprI3VarE7CtrTypedNSt6stringE", "idol::Model::add_ctr::t_rhs"], [71, 3, 1, "_CPPv4N4idol5Model7add_ctrE7TempCtrNSt6stringE", "idol::Model::add_ctr::t_temp_ctr"], [71, 3, 1, "_CPPv4N4idol5Model7add_ctrERR7LinExprI3VarE7CtrTypedNSt6stringE", "idol::Model::add_ctr::t_type"], [71, 2, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs"], [71, 2, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs"], [71, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::N"], [71, 4, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::N"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_dim"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_dim"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_name"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_name"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_rhs"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_rhs"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsE6VectorI3Ctr1NE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_type"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_ctrsEN4idol6VectorIN4idol3CtrE1NEE3DimI1NE7CtrTypedRKNSt6stringE", "idol::Model::add_ctrs::t_type"], [71, 2, 1, "_CPPv4N4idol5Model8add_qctrE8TempQCtrNSt6stringE", "idol::Model::add_qctr"], [71, 2, 1, "_CPPv4N4idol5Model8add_qctrERR8QuadExprI3VarE7CtrTypeNSt6stringE", "idol::Model::add_qctr"], [71, 3, 1, "_CPPv4N4idol5Model8add_qctrERR8QuadExprI3VarE7CtrTypeNSt6stringE", "idol::Model::add_qctr::t_expr"], [71, 3, 1, "_CPPv4N4idol5Model8add_qctrE8TempQCtrNSt6stringE", "idol::Model::add_qctr::t_name"], [71, 3, 1, "_CPPv4N4idol5Model8add_qctrERR8QuadExprI3VarE7CtrTypeNSt6stringE", "idol::Model::add_qctr::t_name"], [71, 3, 1, "_CPPv4N4idol5Model8add_qctrE8TempQCtrNSt6stringE", "idol::Model::add_qctr::t_temp_ctr"], [71, 3, 1, "_CPPv4N4idol5Model8add_qctrERR8QuadExprI3VarE7CtrTypeNSt6stringE", "idol::Model::add_qctr::t_type"], [71, 2, 1, "_CPPv4I_jEN4idol5Model9add_qctrsE6VectorI4QCtr1NE3DimI1NE7CtrTypeRKNSt6stringE", "idol::Model::add_qctrs"], [71, 4, 1, "_CPPv4I_jEN4idol5Model9add_qctrsE6VectorI4QCtr1NE3DimI1NE7CtrTypeRKNSt6stringE", "idol::Model::add_qctrs::N"], [71, 3, 1, "_CPPv4I_jEN4idol5Model9add_qctrsE6VectorI4QCtr1NE3DimI1NE7CtrTypeRKNSt6stringE", "idol::Model::add_qctrs::t_dim"], [71, 3, 1, "_CPPv4I_jEN4idol5Model9add_qctrsE6VectorI4QCtr1NE3DimI1NE7CtrTypeRKNSt6stringE", "idol::Model::add_qctrs::t_name"], [71, 3, 1, "_CPPv4I_jEN4idol5Model9add_qctrsE6VectorI4QCtr1NE3DimI1NE7CtrTypeRKNSt6stringE", "idol::Model::add_qctrs::t_type"], [71, 2, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var"], [71, 2, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", "idol::Model::add_var"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var::t_column"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var::t_lb"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", "idol::Model::add_var::t_lb"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var::t_name"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", "idol::Model::add_var::t_name"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var::t_obj"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", "idol::Model::add_var::t_obj"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var::t_type"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", "idol::Model::add_var::t_type"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTyped7LinExprI3CtrENSt6stringE", "idol::Model::add_var::t_ub"], [71, 3, 1, "_CPPv4N4idol5Model7add_varEdd7VarTypedNSt6stringE", "idol::Model::add_var::t_ub"], [71, 2, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars"], [71, 2, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars"], [71, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::N"], [71, 4, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::N"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_dim"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_dim"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_lb"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_lb"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_name"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_name"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_obj"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_obj"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_type"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_type"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsE6VectorI3Var1NE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_ub"], [71, 3, 1, "_CPPv4I_jEN4idol5Model8add_varsEN4idol6VectorIN4idol3VarE1NEE3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Model::add_vars::t_ub"], [71, 2, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector"], [71, 4, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::N"], [71, 4, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::T"], [71, 3, 1, "_CPPv4I0_jEN4idol5Model10add_vectorEvRK6VectorI1T1NE", "idol::Model::add_vector::t_vector"], [71, 2, 1, "_CPPv4NK4idol5Model5cloneEv", "idol::Model::clone"], [71, 2, 1, "_CPPv4NK4idol5Model4copyEv", "idol::Model::copy"], [71, 2, 1, "_CPPv4NK4idol5Model4ctrsEv", "idol::Model::ctrs"], [71, 2, 1, "_CPPv4NK4idol5Model4dumpERNSt7ostreamE", "idol::Model::dump"], [71, 3, 1, "_CPPv4NK4idol5Model4dumpERNSt7ostreamE", "idol::Model::dump::t_os"], [71, 2, 1, "_CPPv4NK4idol5Model3envEv", "idol::Model::env"], [71, 2, 1, "_CPPv4NK4idol5Model14get_best_boundEv", "idol::Model::get_best_bound"], [71, 2, 1, "_CPPv4NK4idol5Model12get_best_objEv", "idol::Model::get_best_obj"], [71, 2, 1, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", "idol::Model::get_ctr_by_index"], [71, 3, 1, "_CPPv4NK4idol5Model16get_ctr_by_indexEj", "idol::Model::get_ctr_by_index::t_index"], [71, 2, 1, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", "idol::Model::get_ctr_dual"], [71, 3, 1, "_CPPv4NK4idol5Model12get_ctr_dualERK3Ctr", "idol::Model::get_ctr_dual::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", "idol::Model::get_ctr_farkas"], [71, 3, 1, "_CPPv4NK4idol5Model14get_ctr_farkasERK3Ctr", "idol::Model::get_ctr_farkas::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", "idol::Model::get_ctr_index"], [71, 3, 1, "_CPPv4NK4idol5Model13get_ctr_indexERK3Ctr", "idol::Model::get_ctr_index::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model11get_ctr_rhsERK3Ctr", "idol::Model::get_ctr_rhs"], [71, 3, 1, "_CPPv4NK4idol5Model11get_ctr_rhsERK3Ctr", "idol::Model::get_ctr_rhs::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", "idol::Model::get_ctr_row"], [71, 3, 1, "_CPPv4NK4idol5Model11get_ctr_rowERK3Ctr", "idol::Model::get_ctr_row::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", "idol::Model::get_ctr_type"], [71, 3, 1, "_CPPv4NK4idol5Model12get_ctr_typeERK3Ctr", "idol::Model::get_ctr_type::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff"], [71, 3, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff::t_ctr"], [71, 3, 1, "_CPPv4NK4idol5Model13get_mat_coeffERK3CtrRK3Var", "idol::Model::get_mat_coeff::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model15get_n_solutionsEv", "idol::Model::get_n_solutions"], [71, 2, 1, "_CPPv4NK4idol5Model12get_obj_exprEv", "idol::Model::get_obj_expr"], [71, 2, 1, "_CPPv4NK4idol5Model13get_obj_senseEv", "idol::Model::get_obj_sense"], [71, 2, 1, "_CPPv4NK4idol5Model17get_qctr_by_indexEj", "idol::Model::get_qctr_by_index"], [71, 3, 1, "_CPPv4NK4idol5Model17get_qctr_by_indexEj", "idol::Model::get_qctr_by_index::t_index"], [71, 2, 1, "_CPPv4NK4idol5Model13get_qctr_exprERK4QCtr", "idol::Model::get_qctr_expr"], [71, 3, 1, "_CPPv4NK4idol5Model13get_qctr_exprERK4QCtr", "idol::Model::get_qctr_expr::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model14get_qctr_indexERK4QCtr", "idol::Model::get_qctr_index"], [71, 3, 1, "_CPPv4NK4idol5Model14get_qctr_indexERK4QCtr", "idol::Model::get_qctr_index::tctr"], [71, 2, 1, "_CPPv4NK4idol5Model13get_qctr_typeERK4QCtr", "idol::Model::get_qctr_type"], [71, 3, 1, "_CPPv4NK4idol5Model13get_qctr_typeERK4QCtr", "idol::Model::get_qctr_type::t_ctr"], [71, 2, 1, "_CPPv4NK4idol5Model10get_reasonEv", "idol::Model::get_reason"], [71, 2, 1, "_CPPv4NK4idol5Model12get_rhs_exprEv", "idol::Model::get_rhs_expr"], [71, 2, 1, "_CPPv4NK4idol5Model18get_solution_indexEv", "idol::Model::get_solution_index"], [71, 2, 1, "_CPPv4NK4idol5Model10get_statusEv", "idol::Model::get_status"], [71, 2, 1, "_CPPv4NK4idol5Model16get_var_by_indexEj", "idol::Model::get_var_by_index"], [71, 3, 1, "_CPPv4NK4idol5Model16get_var_by_indexEj", "idol::Model::get_var_by_index::t_index"], [71, 2, 1, "_CPPv4NK4idol5Model14get_var_columnERK3Var", "idol::Model::get_var_column"], [71, 3, 1, "_CPPv4NK4idol5Model14get_var_columnERK3Var", "idol::Model::get_var_column::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model13get_var_indexERK3Var", "idol::Model::get_var_index"], [71, 3, 1, "_CPPv4NK4idol5Model13get_var_indexERK3Var", "idol::Model::get_var_index::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model10get_var_lbERK3Var", "idol::Model::get_var_lb"], [71, 3, 1, "_CPPv4NK4idol5Model10get_var_lbERK3Var", "idol::Model::get_var_lb::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model11get_var_objERK3Var", "idol::Model::get_var_obj"], [71, 3, 1, "_CPPv4NK4idol5Model11get_var_objERK3Var", "idol::Model::get_var_obj::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model14get_var_primalERK3Var", "idol::Model::get_var_primal"], [71, 3, 1, "_CPPv4NK4idol5Model14get_var_primalERK3Var", "idol::Model::get_var_primal::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model11get_var_rayERK3Var", "idol::Model::get_var_ray"], [71, 3, 1, "_CPPv4NK4idol5Model11get_var_rayERK3Var", "idol::Model::get_var_ray::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model20get_var_reduced_costERK3Var", "idol::Model::get_var_reduced_cost"], [71, 3, 1, "_CPPv4NK4idol5Model20get_var_reduced_costERK3Var", "idol::Model::get_var_reduced_cost::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model12get_var_typeERK3Var", "idol::Model::get_var_type"], [71, 3, 1, "_CPPv4NK4idol5Model12get_var_typeERK3Var", "idol::Model::get_var_type::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model10get_var_ubERK3Var", "idol::Model::get_var_ub"], [71, 3, 1, "_CPPv4NK4idol5Model10get_var_ubERK3Var", "idol::Model::get_var_ub::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model3hasERK3Ctr", "idol::Model::has"], [71, 2, 1, "_CPPv4NK4idol5Model3hasERK3Var", "idol::Model::has"], [71, 2, 1, "_CPPv4NK4idol5Model3hasERK4QCtr", "idol::Model::has"], [71, 3, 1, "_CPPv4NK4idol5Model3hasERK3Ctr", "idol::Model::has::t_ctr"], [71, 3, 1, "_CPPv4NK4idol5Model3hasERK4QCtr", "idol::Model::has::t_ctr"], [71, 3, 1, "_CPPv4NK4idol5Model3hasERK3Var", "idol::Model::has::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model13has_optimizerEv", "idol::Model::has_optimizer"], [71, 2, 1, "_CPPv4NK4idol5Model21has_optimizer_factoryEv", "idol::Model::has_optimizer_factory"], [71, 2, 1, "_CPPv4NK4idol5Model2idEv", "idol::Model::id"], [71, 2, 1, "_CPPv4N4idol5ModelaSERK5Model", "idol::Model::operator="], [71, 2, 1, "_CPPv4N4idol5ModelaSERR5Model", "idol::Model::operator="], [71, 2, 1, "_CPPv4N4idol5Model8optimizeEv", "idol::Model::optimize"], [71, 2, 1, "_CPPv4N4idol5Model9optimizerEv", "idol::Model::optimizer"], [71, 2, 1, "_CPPv4NK4idol5Model9optimizerEv", "idol::Model::optimizer"], [71, 2, 1, "_CPPv4NK4idol5Model17optimizer_factoryEv", "idol::Model::optimizer_factory"], [71, 2, 1, "_CPPv4NK4idol5Model5qctrsEv", "idol::Model::qctrs"], [71, 2, 1, "_CPPv4N4idol5Model6removeERK3Ctr", "idol::Model::remove"], [71, 2, 1, "_CPPv4N4idol5Model6removeERK3Var", "idol::Model::remove"], [71, 2, 1, "_CPPv4N4idol5Model6removeERK4QCtr", "idol::Model::remove"], [71, 3, 1, "_CPPv4N4idol5Model6removeERK3Ctr", "idol::Model::remove::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model6removeERK4QCtr", "idol::Model::remove::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model6removeERK3Var", "idol::Model::remove::t_var"], [71, 2, 1, "_CPPv4N4idol5Model12reserve_ctrsEj", "idol::Model::reserve_ctrs"], [71, 3, 1, "_CPPv4N4idol5Model12reserve_ctrsEj", "idol::Model::reserve_ctrs::t_size"], [71, 2, 1, "_CPPv4N4idol5Model13reserve_qctrsEj", "idol::Model::reserve_qctrs"], [71, 3, 1, "_CPPv4N4idol5Model13reserve_qctrsEj", "idol::Model::reserve_qctrs::t_size"], [71, 2, 1, "_CPPv4N4idol5Model12reserve_varsEj", "idol::Model::reserve_vars"], [71, 3, 1, "_CPPv4N4idol5Model12reserve_varsEj", "idol::Model::reserve_vars::t_size"], [71, 2, 1, "_CPPv4N4idol5Model26reset_minor_representationEv", "idol::Model::reset_minor_representation"], [71, 2, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3Ctrd", "idol::Model::set_ctr_rhs"], [71, 3, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3Ctrd", "idol::Model::set_ctr_rhs::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model11set_ctr_rhsERK3Ctrd", "idol::Model::set_ctr_rhs::t_rhs"], [71, 2, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK7LinExprI3VarE", "idol::Model::set_ctr_row"], [71, 2, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR7LinExprI3VarE", "idol::Model::set_ctr_row"], [71, 3, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK7LinExprI3VarE", "idol::Model::set_ctr_row::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR7LinExprI3VarE", "idol::Model::set_ctr_row::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRK7LinExprI3VarE", "idol::Model::set_ctr_row::t_row"], [71, 3, 1, "_CPPv4N4idol5Model11set_ctr_rowERK3CtrRR7LinExprI3VarE", "idol::Model::set_ctr_row::t_row"], [71, 2, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type"], [71, 3, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model12set_ctr_typeERK3Ctr7CtrType", "idol::Model::set_ctr_type::t_type"], [71, 2, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3Vard", "idol::Model::set_mat_coeff"], [71, 3, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3Vard", "idol::Model::set_mat_coeff::t_coeff"], [71, 3, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3Vard", "idol::Model::set_mat_coeff::t_ctr"], [71, 3, 1, "_CPPv4N4idol5Model13set_mat_coeffERK3CtrRK3Vard", "idol::Model::set_mat_coeff::t_var"], [71, 2, 1, "_CPPv4N4idol5Model13set_obj_constEd", "idol::Model::set_obj_const"], [71, 3, 1, "_CPPv4N4idol5Model13set_obj_constEd", "idol::Model::set_obj_const::t_constant"], [71, 2, 1, "_CPPv4N4idol5Model12set_obj_exprERK8QuadExprI3VarE", "idol::Model::set_obj_expr"], [71, 2, 1, "_CPPv4N4idol5Model12set_obj_exprERR8QuadExprI3VarE", "idol::Model::set_obj_expr"], [71, 3, 1, "_CPPv4N4idol5Model12set_obj_exprERK8QuadExprI3VarE", "idol::Model::set_obj_expr::t_objective"], [71, 3, 1, "_CPPv4N4idol5Model12set_obj_exprERR8QuadExprI3VarE", "idol::Model::set_obj_expr::t_objective"], [71, 2, 1, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", "idol::Model::set_obj_sense"], [71, 3, 1, "_CPPv4N4idol5Model13set_obj_senseE14ObjectiveSense", "idol::Model::set_obj_sense::t_value"], [71, 2, 1, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", "idol::Model::set_rhs_expr"], [71, 2, 1, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", "idol::Model::set_rhs_expr"], [71, 3, 1, "_CPPv4N4idol5Model12set_rhs_exprERK7LinExprI3CtrE", "idol::Model::set_rhs_expr::t_rhs"], [71, 3, 1, "_CPPv4N4idol5Model12set_rhs_exprERR7LinExprI3CtrE", "idol::Model::set_rhs_expr::t_rhs"], [71, 2, 1, "_CPPv4N4idol5Model18set_solution_indexEj", "idol::Model::set_solution_index"], [71, 3, 1, "_CPPv4N4idol5Model18set_solution_indexEj", "idol::Model::set_solution_index::t_index"], [71, 2, 1, "_CPPv4N4idol5Model11set_storageE7Storageb", "idol::Model::set_storage"], [71, 3, 1, "_CPPv4N4idol5Model11set_storageE7Storageb", "idol::Model::set_storage::t_reset_minor_representation"], [71, 3, 1, "_CPPv4N4idol5Model11set_storageE7Storageb", "idol::Model::set_storage::t_storage"], [71, 2, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK7LinExprI3CtrE", "idol::Model::set_var_column"], [71, 2, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR7LinExprI3CtrE", "idol::Model::set_var_column"], [71, 3, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK7LinExprI3CtrE", "idol::Model::set_var_column::t_column"], [71, 3, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR7LinExprI3CtrE", "idol::Model::set_var_column::t_column"], [71, 3, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRK7LinExprI3CtrE", "idol::Model::set_var_column::t_var"], [71, 3, 1, "_CPPv4N4idol5Model14set_var_columnERK3VarRR7LinExprI3CtrE", "idol::Model::set_var_column::t_var"], [71, 2, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb"], [71, 3, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb::t_lb"], [71, 3, 1, "_CPPv4N4idol5Model10set_var_lbERK3Vard", "idol::Model::set_var_lb::t_var"], [71, 2, 1, "_CPPv4N4idol5Model11set_var_objERK3Vard", "idol::Model::set_var_obj"], [71, 3, 1, "_CPPv4N4idol5Model11set_var_objERK3Vard", "idol::Model::set_var_obj::t_obj"], [71, 3, 1, "_CPPv4N4idol5Model11set_var_objERK3Vard", "idol::Model::set_var_obj::t_var"], [71, 2, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type"], [71, 3, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type::t_type"], [71, 3, 1, "_CPPv4N4idol5Model12set_var_typeERK3Var7VarType", "idol::Model::set_var_type::t_var"], [71, 2, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub"], [71, 3, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub::t_ub"], [71, 3, 1, "_CPPv4N4idol5Model10set_var_ubERK3Vard", "idol::Model::set_var_ub::t_var"], [71, 2, 1, "_CPPv4NK4idol5Model7storageEv", "idol::Model::storage"], [71, 2, 1, "_CPPv4N4idol5Model5unuseEv", "idol::Model::unuse"], [71, 2, 1, "_CPPv4N4idol5Model6updateEv", "idol::Model::update"], [71, 2, 1, "_CPPv4N4idol5Model3useERK16OptimizerFactory", "idol::Model::use"], [71, 3, 1, "_CPPv4N4idol5Model3useERK16OptimizerFactory", "idol::Model::use::t_optimizer_factory"], [71, 2, 1, "_CPPv4NK4idol5Model4varsEv", "idol::Model::vars"], [71, 2, 1, "_CPPv4N4idol5Model5writeERKNSt6stringE", "idol::Model::write"], [71, 3, 1, "_CPPv4N4idol5Model5writeERKNSt6stringE", "idol::Model::write::t_name"], [71, 2, 1, "_CPPv4N4idol5ModelD0Ev", "idol::Model::~Model"], [51, 1, 1, "_CPPv4N4idol5MosekE", "idol::Mosek"], [51, 2, 1, "_CPPv4N4idol5Mosek20ContinuousRelaxationEv", "idol::Mosek::ContinuousRelaxation"], [51, 2, 1, "_CPPv4N4idol5Mosek5MosekERK5Mosek", "idol::Mosek::Mosek"], [51, 2, 1, "_CPPv4N4idol5Mosek5MosekERR5Mosek", "idol::Mosek::Mosek"], [51, 2, 1, "_CPPv4N4idol5Mosek5MosekEv", "idol::Mosek::Mosek"], [51, 2, 1, "_CPPv4N4idol5Mosek12add_callbackERK15CallbackFactory", "idol::Mosek::add_callback"], [51, 3, 1, "_CPPv4N4idol5Mosek12add_callbackERK15CallbackFactory", "idol::Mosek::add_callback::t_cb"], [51, 2, 1, "_CPPv4I0EN4idol5Mosek2asER1Tv", "idol::Mosek::as"], [51, 2, 1, "_CPPv4I0ENK4idol5Mosek2asERK1Tv", "idol::Mosek::as"], [51, 4, 1, "_CPPv4I0EN4idol5Mosek2asER1Tv", "idol::Mosek::as::T"], [51, 4, 1, "_CPPv4I0ENK4idol5Mosek2asERK1Tv", "idol::Mosek::as::T"], [51, 2, 1, "_CPPv4NK4idol5Mosek5cloneEv", "idol::Mosek::clone"], [51, 2, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional"], [51, 2, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional"], [51, 3, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_conditional_value"], [51, 3, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_conditional_value"], [51, 3, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_else"], [51, 3, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_if"], [51, 3, 1, "_CPPv4N4idol5Mosek11conditionalEbRKNSt8functionIFvR5MosekEEERKNSt8functionIFvR5MosekEEE", "idol::Mosek::conditional::t_if"], [51, 2, 1, "_CPPv4I0ENK4idol5Mosek2isEbv", "idol::Mosek::is"], [51, 4, 1, "_CPPv4I0ENK4idol5Mosek2isEbv", "idol::Mosek::is::T"], [51, 2, 1, "_CPPv4NK4idol5MosekclERK5Model", "idol::Mosek::operator()"], [51, 3, 1, "_CPPv4NK4idol5MosekclERK5Model", "idol::Mosek::operator()::t_model"], [51, 2, 1, "_CPPv4N4idol5MosekaSERK5Mosek", "idol::Mosek::operator="], [51, 2, 1, "_CPPv4N4idol5MosekaSERR5Mosek", "idol::Mosek::operator="], [51, 2, 1, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", "idol::Mosek::with_absolute_gap_tolerance"], [51, 3, 1, "_CPPv4N4idol5Mosek27with_absolute_gap_toleranceEd", "idol::Mosek::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [51, 2, 1, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", "idol::Mosek::with_best_bound_stop"], [51, 3, 1, "_CPPv4N4idol5Mosek20with_best_bound_stopEd", "idol::Mosek::with_best_bound_stop::t_best_bound_stop"], [51, 2, 1, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", "idol::Mosek::with_best_obj_stop"], [51, 3, 1, "_CPPv4N4idol5Mosek18with_best_obj_stopEd", "idol::Mosek::with_best_obj_stop::t_user_best_obj"], [51, 2, 1, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", "idol::Mosek::with_continuous_relaxation_only"], [51, 3, 1, "_CPPv4N4idol5Mosek31with_continuous_relaxation_onlyEb", "idol::Mosek::with_continuous_relaxation_only::t_value"], [51, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter"], [51, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter"], [51, 2, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter"], [51, 3, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter::t_param"], [51, 3, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter::t_param"], [51, 3, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter::t_param"], [51, 3, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringENSt6stringE", "idol::Mosek::with_external_parameter::t_value"], [51, 3, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEd", "idol::Mosek::with_external_parameter::t_value"], [51, 3, 1, "_CPPv4N4idol5Mosek23with_external_parameterERKNSt6stringEi", "idol::Mosek::with_external_parameter::t_value"], [51, 2, 1, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", "idol::Mosek::with_infeasible_or_unbounded_info"], [51, 3, 1, "_CPPv4N4idol5Mosek33with_infeasible_or_unbounded_infoEb", "idol::Mosek::with_infeasible_or_unbounded_info::t_value"], [51, 2, 1, "_CPPv4N4idol5Mosek20with_iteration_limitEj", "idol::Mosek::with_iteration_limit"], [51, 3, 1, "_CPPv4N4idol5Mosek20with_iteration_limitEj", "idol::Mosek::with_iteration_limit::t_iteration_count_limit"], [51, 2, 1, "_CPPv4N4idol5Mosek9with_logsEb", "idol::Mosek::with_logs"], [51, 3, 1, "_CPPv4N4idol5Mosek9with_logsEb", "idol::Mosek::with_logs::t_value"], [51, 2, 1, "_CPPv4N4idol5Mosek13with_presolveEb", "idol::Mosek::with_presolve"], [51, 3, 1, "_CPPv4N4idol5Mosek13with_presolveEb", "idol::Mosek::with_presolve::t_value"], [51, 2, 1, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", "idol::Mosek::with_relative_gap_tolerance"], [51, 3, 1, "_CPPv4N4idol5Mosek27with_relative_gap_toleranceEd", "idol::Mosek::with_relative_gap_tolerance::t_relative_gap_tolerance"], [51, 2, 1, "_CPPv4N4idol5Mosek17with_thread_limitEj", "idol::Mosek::with_thread_limit"], [51, 3, 1, "_CPPv4N4idol5Mosek17with_thread_limitEj", "idol::Mosek::with_thread_limit::t_max_n_threads"], [51, 2, 1, "_CPPv4N4idol5Mosek15with_time_limitEd", "idol::Mosek::with_time_limit"], [51, 3, 1, "_CPPv4N4idol5Mosek15with_time_limitEd", "idol::Mosek::with_time_limit::t_time_limit"], [35, 1, 1, "_CPPv4N4idol14MostInfeasibleE", "idol::MostInfeasible"], [35, 2, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible"], [35, 2, 1, "_CPPv4N4idol14MostInfeasible14MostInfeasibleEv", "idol::MostInfeasible::MostInfeasible"], [35, 4, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::IteratorT"], [35, 3, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::t_begin"], [35, 3, 1, "_CPPv4I0EN4idol14MostInfeasible14MostInfeasibleE9IteratorT9IteratorT", "idol::MostInfeasible::MostInfeasible::t_end"], [35, 1, 1, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", "idol::MostInfeasible::Strategy"], [35, 4, 1, "_CPPv4I0EN4idol14MostInfeasible8StrategyE", "idol::MostInfeasible::Strategy::NodeInfoT"], [35, 2, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", "idol::MostInfeasible::Strategy::Strategy"], [35, 2, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyEv", "idol::MostInfeasible::Strategy::Strategy"], [35, 3, 1, "_CPPv4N4idol14MostInfeasible8Strategy8StrategyERK14MostInfeasible", "idol::MostInfeasible::Strategy::Strategy::t_parent"], [35, 2, 1, "_CPPv4NK4idol14MostInfeasible8Strategy5cloneEv", "idol::MostInfeasible::Strategy::clone"], [35, 2, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::MostInfeasible::Strategy::operator()"], [35, 2, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::MostInfeasible::Strategy::operator()"], [35, 3, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::MostInfeasible::Strategy::operator()::t_parent"], [35, 3, 1, "_CPPv4NK4idol14MostInfeasible8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::MostInfeasible::Strategy::operator()::t_parent"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent10NodeLoadedE", "idol::NodeLoaded"], [5, 1, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKTE", "idol::Optimizers::Bilevel::KKT"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT3KKTERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactoryRKNSt8optionalI10AnnotationIdEEE", "idol::Optimizers::Bilevel::KKT::KKT"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT3KKTERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactoryRKNSt8optionalI10AnnotationIdEEE", "idol::Optimizers::Bilevel::KKT::KKT::t_big_M"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT3KKTERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactoryRKNSt8optionalI10AnnotationIdEEE", "idol::Optimizers::Bilevel::KKT::KKT::t_description"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT3KKTERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactoryRKNSt8optionalI10AnnotationIdEEE", "idol::Optimizers::Bilevel::KKT::KKT::t_deterministic_optimizer"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT3KKTERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactoryRKNSt8optionalI10AnnotationIdEEE", "idol::Optimizers::Bilevel::KKT::KKT::t_parent"], [5, 2, 1, "_CPPv4I0EN4idol10Optimizers7Bilevel3KKT2asER1Tv", "idol::Optimizers::Bilevel::KKT::as"], [5, 2, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel3KKT2asERK1Tv", "idol::Optimizers::Bilevel::KKT::as"], [5, 4, 1, "_CPPv4I0EN4idol10Optimizers7Bilevel3KKT2asER1Tv", "idol::Optimizers::Bilevel::KKT::as::T"], [5, 4, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel3KKT2asERK1Tv", "idol::Optimizers::Bilevel::KKT::as::T"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT16get_absolute_gapEv", "idol::Optimizers::Bilevel::KKT::get_absolute_gap"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_best_boundEv", "idol::Optimizers::Bilevel::KKT::get_best_bound"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT12get_best_objEv", "idol::Optimizers::Bilevel::KKT::get_best_obj"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT12get_ctr_dualERK3Ctr", "idol::Optimizers::Bilevel::KKT::get_ctr_dual"], [5, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT12get_ctr_dualERK3Ctr", "idol::Optimizers::Bilevel::KKT::get_ctr_dual::t_ctr"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_ctr_farkasERK3Ctr", "idol::Optimizers::Bilevel::KKT::get_ctr_farkas"], [5, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_ctr_farkasERK3Ctr", "idol::Optimizers::Bilevel::KKT::get_ctr_farkas::t_ctr"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT15get_n_solutionsEv", "idol::Optimizers::Bilevel::KKT::get_n_solutions"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT25get_param_best_bound_stopEv", "idol::Optimizers::Bilevel::KKT::get_param_best_bound_stop"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT23get_param_best_obj_stopEv", "idol::Optimizers::Bilevel::KKT::get_param_best_obj_stop"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::Bilevel::KKT::get_param_infeasible_or_unbounded_info"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT25get_param_iteration_limitEv", "idol::Optimizers::Bilevel::KKT::get_param_iteration_limit"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_param_logsEv", "idol::Optimizers::Bilevel::KKT::get_param_logs"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_param_presolveEv", "idol::Optimizers::Bilevel::KKT::get_param_presolve"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT22get_param_thread_limitEv", "idol::Optimizers::Bilevel::KKT::get_param_thread_limit"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT20get_param_time_limitEv", "idol::Optimizers::Bilevel::KKT::get_param_time_limit"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT10get_reasonEv", "idol::Optimizers::Bilevel::KKT::get_reason"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT16get_relative_gapEv", "idol::Optimizers::Bilevel::KKT::get_relative_gap"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_remaining_timeEv", "idol::Optimizers::Bilevel::KKT::get_remaining_time"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_solution_indexEv", "idol::Optimizers::Bilevel::KKT::get_solution_index"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT10get_statusEv", "idol::Optimizers::Bilevel::KKT::get_status"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT19get_tol_feasibilityEv", "idol::Optimizers::Bilevel::KKT::get_tol_feasibility"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT15get_tol_integerEv", "idol::Optimizers::Bilevel::KKT::get_tol_integer"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT24get_tol_mip_absolute_gapEv", "idol::Optimizers::Bilevel::KKT::get_tol_mip_absolute_gap"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT24get_tol_mip_relative_gapEv", "idol::Optimizers::Bilevel::KKT::get_tol_mip_relative_gap"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT18get_tol_optimalityEv", "idol::Optimizers::Bilevel::KKT::get_tol_optimality"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_var_primalERK3Var", "idol::Optimizers::Bilevel::KKT::get_var_primal"], [5, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT14get_var_primalERK3Var", "idol::Optimizers::Bilevel::KKT::get_var_primal::t_var"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT11get_var_rayERK3Var", "idol::Optimizers::Bilevel::KKT::get_var_ray"], [5, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT11get_var_rayERK3Var", "idol::Optimizers::Bilevel::KKT::get_var_ray::t_var"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT20get_var_reduced_costERK3Var", "idol::Optimizers::Bilevel::KKT::get_var_reduced_cost"], [5, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT20get_var_reduced_costERK3Var", "idol::Optimizers::Bilevel::KKT::get_var_reduced_cost::t_var"], [5, 2, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel3KKT2isEbv", "idol::Optimizers::Bilevel::KKT::is"], [5, 4, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel3KKT2isEbv", "idol::Optimizers::Bilevel::KKT::is::T"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT13is_terminatedEv", "idol::Optimizers::Bilevel::KKT::is_terminated"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT4nameEv", "idol::Optimizers::Bilevel::KKT::name"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT6parentEv", "idol::Optimizers::Bilevel::KKT::parent"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT25set_param_best_bound_stopEd", "idol::Optimizers::Bilevel::KKT::set_param_best_bound_stop"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT25set_param_best_bound_stopEd", "idol::Optimizers::Bilevel::KKT::set_param_best_bound_stop::t_best_bound_stop"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT23set_param_best_obj_stopEd", "idol::Optimizers::Bilevel::KKT::set_param_best_obj_stop"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT23set_param_best_obj_stopEd", "idol::Optimizers::Bilevel::KKT::set_param_best_obj_stop::t_best_obj_stop"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Bilevel::KKT::set_param_infeasible_or_unbounded_info"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Bilevel::KKT::set_param_infeasible_or_unbounded_info::t_value"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT25set_param_iteration_limitEj", "idol::Optimizers::Bilevel::KKT::set_param_iteration_limit"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT25set_param_iteration_limitEj", "idol::Optimizers::Bilevel::KKT::set_param_iteration_limit::t_iteration_limit"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT14set_param_logsEb", "idol::Optimizers::Bilevel::KKT::set_param_logs"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT14set_param_logsEb", "idol::Optimizers::Bilevel::KKT::set_param_logs::t_value"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT18set_param_presolveEb", "idol::Optimizers::Bilevel::KKT::set_param_presolve"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT18set_param_presolveEb", "idol::Optimizers::Bilevel::KKT::set_param_presolve::t_value"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT17set_param_threadsEj", "idol::Optimizers::Bilevel::KKT::set_param_threads"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT17set_param_threadsEj", "idol::Optimizers::Bilevel::KKT::set_param_threads::t_threads"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT20set_param_time_limitEd", "idol::Optimizers::Bilevel::KKT::set_param_time_limit"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT20set_param_time_limitEd", "idol::Optimizers::Bilevel::KKT::set_param_time_limit::t_time_limit"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT19set_tol_feasibilityEd", "idol::Optimizers::Bilevel::KKT::set_tol_feasibility"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT19set_tol_feasibilityEd", "idol::Optimizers::Bilevel::KKT::set_tol_feasibility::t_tol_feasibility"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT15set_tol_integerEd", "idol::Optimizers::Bilevel::KKT::set_tol_integer"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT15set_tol_integerEd", "idol::Optimizers::Bilevel::KKT::set_tol_integer::t_tol_integer"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT24set_tol_mip_absolute_gapEd", "idol::Optimizers::Bilevel::KKT::set_tol_mip_absolute_gap"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT24set_tol_mip_absolute_gapEd", "idol::Optimizers::Bilevel::KKT::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT24set_tol_mip_relative_gapEd", "idol::Optimizers::Bilevel::KKT::set_tol_mip_relative_gap"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT24set_tol_mip_relative_gapEd", "idol::Optimizers::Bilevel::KKT::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT18set_tol_optimalityEd", "idol::Optimizers::Bilevel::KKT::set_tol_optimality"], [5, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT18set_tol_optimalityEd", "idol::Optimizers::Bilevel::KKT::set_tol_optimality::t_tol_optimality"], [5, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel3KKT9terminateEv", "idol::Optimizers::Bilevel::KKT::terminate"], [5, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel3KKT4timeEv", "idol::Optimizers::Bilevel::KKT::time"], [6, 1, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDualityE", "idol::Optimizers::Bilevel::StrongDuality"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality13StrongDualityERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactory", "idol::Optimizers::Bilevel::StrongDuality::StrongDuality"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality13StrongDualityERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactory", "idol::Optimizers::Bilevel::StrongDuality::StrongDuality::t_description"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality13StrongDualityERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactory", "idol::Optimizers::Bilevel::StrongDuality::StrongDuality::t_deterministic_optimizer"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality13StrongDualityERK5ModelRKN4idol7Bilevel11DescriptionERK16OptimizerFactory", "idol::Optimizers::Bilevel::StrongDuality::StrongDuality::t_parent"], [6, 2, 1, "_CPPv4I0EN4idol10Optimizers7Bilevel13StrongDuality2asER1Tv", "idol::Optimizers::Bilevel::StrongDuality::as"], [6, 2, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel13StrongDuality2asERK1Tv", "idol::Optimizers::Bilevel::StrongDuality::as"], [6, 4, 1, "_CPPv4I0EN4idol10Optimizers7Bilevel13StrongDuality2asER1Tv", "idol::Optimizers::Bilevel::StrongDuality::as::T"], [6, 4, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel13StrongDuality2asERK1Tv", "idol::Optimizers::Bilevel::StrongDuality::as::T"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality16get_absolute_gapEv", "idol::Optimizers::Bilevel::StrongDuality::get_absolute_gap"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_best_boundEv", "idol::Optimizers::Bilevel::StrongDuality::get_best_bound"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality12get_best_objEv", "idol::Optimizers::Bilevel::StrongDuality::get_best_obj"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality12get_ctr_dualERK3Ctr", "idol::Optimizers::Bilevel::StrongDuality::get_ctr_dual"], [6, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality12get_ctr_dualERK3Ctr", "idol::Optimizers::Bilevel::StrongDuality::get_ctr_dual::t_ctr"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_ctr_farkasERK3Ctr", "idol::Optimizers::Bilevel::StrongDuality::get_ctr_farkas"], [6, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_ctr_farkasERK3Ctr", "idol::Optimizers::Bilevel::StrongDuality::get_ctr_farkas::t_ctr"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality15get_n_solutionsEv", "idol::Optimizers::Bilevel::StrongDuality::get_n_solutions"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality25get_param_best_bound_stopEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_best_bound_stop"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality23get_param_best_obj_stopEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_best_obj_stop"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_infeasible_or_unbounded_info"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality25get_param_iteration_limitEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_iteration_limit"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_param_logsEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_logs"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_param_presolveEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_presolve"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality22get_param_thread_limitEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_thread_limit"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality20get_param_time_limitEv", "idol::Optimizers::Bilevel::StrongDuality::get_param_time_limit"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality10get_reasonEv", "idol::Optimizers::Bilevel::StrongDuality::get_reason"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality16get_relative_gapEv", "idol::Optimizers::Bilevel::StrongDuality::get_relative_gap"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_remaining_timeEv", "idol::Optimizers::Bilevel::StrongDuality::get_remaining_time"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_solution_indexEv", "idol::Optimizers::Bilevel::StrongDuality::get_solution_index"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality10get_statusEv", "idol::Optimizers::Bilevel::StrongDuality::get_status"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality19get_tol_feasibilityEv", "idol::Optimizers::Bilevel::StrongDuality::get_tol_feasibility"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality15get_tol_integerEv", "idol::Optimizers::Bilevel::StrongDuality::get_tol_integer"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality24get_tol_mip_absolute_gapEv", "idol::Optimizers::Bilevel::StrongDuality::get_tol_mip_absolute_gap"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality24get_tol_mip_relative_gapEv", "idol::Optimizers::Bilevel::StrongDuality::get_tol_mip_relative_gap"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality18get_tol_optimalityEv", "idol::Optimizers::Bilevel::StrongDuality::get_tol_optimality"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_var_primalERK3Var", "idol::Optimizers::Bilevel::StrongDuality::get_var_primal"], [6, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality14get_var_primalERK3Var", "idol::Optimizers::Bilevel::StrongDuality::get_var_primal::t_var"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality11get_var_rayERK3Var", "idol::Optimizers::Bilevel::StrongDuality::get_var_ray"], [6, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality11get_var_rayERK3Var", "idol::Optimizers::Bilevel::StrongDuality::get_var_ray::t_var"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality20get_var_reduced_costERK3Var", "idol::Optimizers::Bilevel::StrongDuality::get_var_reduced_cost"], [6, 3, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality20get_var_reduced_costERK3Var", "idol::Optimizers::Bilevel::StrongDuality::get_var_reduced_cost::t_var"], [6, 2, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel13StrongDuality2isEbv", "idol::Optimizers::Bilevel::StrongDuality::is"], [6, 4, 1, "_CPPv4I0ENK4idol10Optimizers7Bilevel13StrongDuality2isEbv", "idol::Optimizers::Bilevel::StrongDuality::is::T"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality13is_terminatedEv", "idol::Optimizers::Bilevel::StrongDuality::is_terminated"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality4nameEv", "idol::Optimizers::Bilevel::StrongDuality::name"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality6parentEv", "idol::Optimizers::Bilevel::StrongDuality::parent"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality25set_param_best_bound_stopEd", "idol::Optimizers::Bilevel::StrongDuality::set_param_best_bound_stop"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality25set_param_best_bound_stopEd", "idol::Optimizers::Bilevel::StrongDuality::set_param_best_bound_stop::t_best_bound_stop"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality23set_param_best_obj_stopEd", "idol::Optimizers::Bilevel::StrongDuality::set_param_best_obj_stop"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality23set_param_best_obj_stopEd", "idol::Optimizers::Bilevel::StrongDuality::set_param_best_obj_stop::t_best_obj_stop"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Bilevel::StrongDuality::set_param_infeasible_or_unbounded_info"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Bilevel::StrongDuality::set_param_infeasible_or_unbounded_info::t_value"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality25set_param_iteration_limitEj", "idol::Optimizers::Bilevel::StrongDuality::set_param_iteration_limit"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality25set_param_iteration_limitEj", "idol::Optimizers::Bilevel::StrongDuality::set_param_iteration_limit::t_iteration_limit"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality14set_param_logsEb", "idol::Optimizers::Bilevel::StrongDuality::set_param_logs"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality14set_param_logsEb", "idol::Optimizers::Bilevel::StrongDuality::set_param_logs::t_value"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality18set_param_presolveEb", "idol::Optimizers::Bilevel::StrongDuality::set_param_presolve"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality18set_param_presolveEb", "idol::Optimizers::Bilevel::StrongDuality::set_param_presolve::t_value"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality17set_param_threadsEj", "idol::Optimizers::Bilevel::StrongDuality::set_param_threads"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality17set_param_threadsEj", "idol::Optimizers::Bilevel::StrongDuality::set_param_threads::t_threads"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality20set_param_time_limitEd", "idol::Optimizers::Bilevel::StrongDuality::set_param_time_limit"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality20set_param_time_limitEd", "idol::Optimizers::Bilevel::StrongDuality::set_param_time_limit::t_time_limit"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality19set_tol_feasibilityEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_feasibility"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality19set_tol_feasibilityEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_feasibility::t_tol_feasibility"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality15set_tol_integerEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_integer"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality15set_tol_integerEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_integer::t_tol_integer"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality24set_tol_mip_absolute_gapEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_mip_absolute_gap"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality24set_tol_mip_absolute_gapEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality24set_tol_mip_relative_gapEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_mip_relative_gap"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality24set_tol_mip_relative_gapEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality18set_tol_optimalityEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_optimality"], [6, 3, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality18set_tol_optimalityEd", "idol::Optimizers::Bilevel::StrongDuality::set_tol_optimality::t_tol_optimality"], [6, 2, 1, "_CPPv4N4idol10Optimizers7Bilevel13StrongDuality9terminateEv", "idol::Optimizers::Bilevel::StrongDuality::terminate"], [6, 2, 1, "_CPPv4NK4idol10Optimizers7Bilevel13StrongDuality4timeEv", "idol::Optimizers::Bilevel::StrongDuality::time"], [44, 1, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecompositionE", "idol::Optimizers::DantzigWolfeDecomposition"], [44, 1, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGenerationE", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration::t_best_bound_stop"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration::t_parent"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration16ColumnGenerationER25DantzigWolfeDecompositionbd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::ColumnGeneration::t_use_farkas_for_infeasibility"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration10best_boundEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::best_bound"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration8best_objEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::best_obj"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration7executeEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::execute"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::parent"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6parentEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::parent"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration15primal_solutionEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::primal_solution"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6reasonEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::reason"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration19set_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::set_best_bound_stop"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration19set_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::set_best_bound_stop::t_best_bound_stop"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16ColumnGeneration6statusEv", "idol::Optimizers::DantzigWolfeDecomposition::ColumnGeneration::status"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_default_sub_problem_spec"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_formulation"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_logger_factory"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_master_optimizer_factory"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_max_parallel_pricing"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_model"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_remove_infeasible_columns"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_stabilization"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_strategy"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_sub_problem_specifications"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25DantzigWolfeDecompositionERK5ModelRRN4idol12DantzigWolfe11FormulationERK16OptimizerFactoryRKN12DantzigWolfe31DualPriceSmoothingStabilizationEjbbRRNSt6vectorIN12DantzigWolfe10SubProblemEEENSt8optionalIN12DantzigWolfe10SubProblemEEERKN12DantzigWolfe28InfeasibilityStrategyFactoryERKN4Logs12DantzigWolfe7FactoryE", "idol::Optimizers::DantzigWolfeDecomposition::DantzigWolfeDecomposition::t_use_hard_branching"], [44, 2, 1, "_CPPv4I0EN4idol10Optimizers25DantzigWolfeDecomposition2asER1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as"], [44, 2, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2asERK1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as"], [44, 4, 1, "_CPPv4I0EN4idol10Optimizers25DantzigWolfeDecomposition2asER1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as::T"], [44, 4, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2asERK1Tv", "idol::Optimizers::DantzigWolfeDecomposition::as::T"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", "idol::Optimizers::DantzigWolfeDecomposition::formulation"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition11formulationEv", "idol::Optimizers::DantzigWolfeDecomposition::formulation"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_absolute_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_absolute_gap"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_best_boundEv", "idol::Optimizers::DantzigWolfeDecomposition::get_best_bound"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition12get_best_objEv", "idol::Optimizers::DantzigWolfeDecomposition::get_best_obj"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_best_bound_stopEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_best_bound_stop"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition23get_param_best_obj_stopEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_best_obj_stop"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_infeasible_or_unbounded_info"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition25get_param_iteration_limitEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_iteration_limit"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition14get_param_logsEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_logs"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_param_presolveEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_presolve"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition22get_param_thread_limitEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_thread_limit"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition20get_param_time_limitEv", "idol::Optimizers::DantzigWolfeDecomposition::get_param_time_limit"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_reasonEv", "idol::Optimizers::DantzigWolfeDecomposition::get_reason"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition16get_relative_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_relative_gap"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_remaining_timeEv", "idol::Optimizers::DantzigWolfeDecomposition::get_remaining_time"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition10get_statusEv", "idol::Optimizers::DantzigWolfeDecomposition::get_status"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition19get_tol_feasibilityEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_feasibility"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition15get_tol_integerEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_integer"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_absolute_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_mip_absolute_gap"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition24get_tol_mip_relative_gapEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_mip_relative_gap"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition18get_tol_optimalityEv", "idol::Optimizers::DantzigWolfeDecomposition::get_tol_optimality"], [44, 2, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2isEbv", "idol::Optimizers::DantzigWolfeDecomposition::is"], [44, 4, 1, "_CPPv4I0ENK4idol10Optimizers25DantzigWolfeDecomposition2isEbv", "idol::Optimizers::DantzigWolfeDecomposition::is::T"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition13is_terminatedEv", "idol::Optimizers::DantzigWolfeDecomposition::is_terminated"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4nameEv", "idol::Optimizers::DantzigWolfeDecomposition::name"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition6parentEv", "idol::Optimizers::DantzigWolfeDecomposition::parent"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_bound_stop"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_best_bound_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_bound_stop::t_best_bound_stop"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition23set_param_best_obj_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_obj_stop"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition23set_param_best_obj_stopEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_best_obj_stop::t_best_obj_stop"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_infeasible_or_unbounded_info"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_infeasible_or_unbounded_info::t_value"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_iteration_limitEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_iteration_limit"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition25set_param_iteration_limitEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_iteration_limit::t_iteration_limit"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition14set_param_logsEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_logs"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition14set_param_logsEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_logs::t_value"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_param_presolveEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_presolve"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_param_presolveEb", "idol::Optimizers::DantzigWolfeDecomposition::set_param_presolve::t_value"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition17set_param_threadsEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_threads"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition17set_param_threadsEj", "idol::Optimizers::DantzigWolfeDecomposition::set_param_threads::t_threads"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition20set_param_time_limitEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_time_limit"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition20set_param_time_limitEd", "idol::Optimizers::DantzigWolfeDecomposition::set_param_time_limit::t_time_limit"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition19set_tol_feasibilityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_feasibility"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition19set_tol_feasibilityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_feasibility::t_tol_feasibility"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition15set_tol_integerEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_integer"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition15set_tol_integerEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_integer::t_tol_integer"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_absolute_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_absolute_gap"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_absolute_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_relative_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_relative_gap"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition24set_tol_mip_relative_gapEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_tol_optimalityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_optimality"], [44, 3, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition18set_tol_optimalityEd", "idol::Optimizers::DantzigWolfeDecomposition::set_tol_optimality::t_tol_optimality"], [44, 2, 1, "_CPPv4N4idol10Optimizers25DantzigWolfeDecomposition9terminateEv", "idol::Optimizers::DantzigWolfeDecomposition::terminate"], [44, 2, 1, "_CPPv4NK4idol10Optimizers25DantzigWolfeDecomposition4timeEv", "idol::Optimizers::DantzigWolfeDecomposition::time"], [52, 1, 1, "_CPPv4N4idol10Optimizers4GLPKE", "idol::Optimizers::GLPK"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", "idol::Optimizers::GLPK::GLPK"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", "idol::Optimizers::GLPK::GLPK::t_continuous_relaxation"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK4GLPKERK5Modelb", "idol::Optimizers::GLPK::GLPK::t_model"], [52, 2, 1, "_CPPv4I0EN4idol10Optimizers4GLPK2asER1Tv", "idol::Optimizers::GLPK::as"], [52, 2, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2asERK1Tv", "idol::Optimizers::GLPK::as"], [52, 4, 1, "_CPPv4I0EN4idol10Optimizers4GLPK2asER1Tv", "idol::Optimizers::GLPK::as::T"], [52, 4, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2asERK1Tv", "idol::Optimizers::GLPK::as::T"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK25get_param_best_bound_stopEv", "idol::Optimizers::GLPK::get_param_best_bound_stop"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK23get_param_best_obj_stopEv", "idol::Optimizers::GLPK::get_param_best_obj_stop"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::GLPK::get_param_infeasible_or_unbounded_info"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK25get_param_iteration_limitEv", "idol::Optimizers::GLPK::get_param_iteration_limit"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK14get_param_logsEv", "idol::Optimizers::GLPK::get_param_logs"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK18get_param_presolveEv", "idol::Optimizers::GLPK::get_param_presolve"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK22get_param_thread_limitEv", "idol::Optimizers::GLPK::get_param_thread_limit"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK20get_param_time_limitEv", "idol::Optimizers::GLPK::get_param_time_limit"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK18get_remaining_timeEv", "idol::Optimizers::GLPK::get_remaining_time"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK19get_tol_feasibilityEv", "idol::Optimizers::GLPK::get_tol_feasibility"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK15get_tol_integerEv", "idol::Optimizers::GLPK::get_tol_integer"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_absolute_gapEv", "idol::Optimizers::GLPK::get_tol_mip_absolute_gap"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK24get_tol_mip_relative_gapEv", "idol::Optimizers::GLPK::get_tol_mip_relative_gap"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK18get_tol_optimalityEv", "idol::Optimizers::GLPK::get_tol_optimality"], [52, 2, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2isEbv", "idol::Optimizers::GLPK::is"], [52, 4, 1, "_CPPv4I0ENK4idol10Optimizers4GLPK2isEbv", "idol::Optimizers::GLPK::is::T"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK13is_terminatedEv", "idol::Optimizers::GLPK::is_terminated"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK4nameEv", "idol::Optimizers::GLPK::name"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]::t_ctr"], [52, 3, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Ctr", "idol::Optimizers::GLPK::operator[]::t_ctr"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]::t_var"], [52, 3, 1, "_CPPv4NK4idol10Optimizers4GLPKixERK3Var", "idol::Optimizers::GLPK::operator[]::t_var"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK6parentEv", "idol::Optimizers::GLPK::parent"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::GLPK::read_from_file"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::GLPK::read_from_file::t_env"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::GLPK::read_from_file::t_filename"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_best_bound_stopEd", "idol::Optimizers::GLPK::set_param_best_bound_stop"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_best_bound_stopEd", "idol::Optimizers::GLPK::set_param_best_bound_stop::t_best_bound_stop"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK23set_param_best_obj_stopEd", "idol::Optimizers::GLPK::set_param_best_obj_stop"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK23set_param_best_obj_stopEd", "idol::Optimizers::GLPK::set_param_best_obj_stop::t_best_obj_stop"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::GLPK::set_param_infeasible_or_unbounded_info"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::GLPK::set_param_infeasible_or_unbounded_info::t_value"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_iteration_limitEj", "idol::Optimizers::GLPK::set_param_iteration_limit"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK25set_param_iteration_limitEj", "idol::Optimizers::GLPK::set_param_iteration_limit::t_iteration_limit"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK14set_param_logsEb", "idol::Optimizers::GLPK::set_param_logs"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK14set_param_logsEb", "idol::Optimizers::GLPK::set_param_logs::t_value"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK18set_param_presolveEb", "idol::Optimizers::GLPK::set_param_presolve"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK18set_param_presolveEb", "idol::Optimizers::GLPK::set_param_presolve::t_value"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK17set_param_threadsEj", "idol::Optimizers::GLPK::set_param_threads"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK17set_param_threadsEj", "idol::Optimizers::GLPK::set_param_threads::t_threads"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK20set_param_time_limitEd", "idol::Optimizers::GLPK::set_param_time_limit"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK20set_param_time_limitEd", "idol::Optimizers::GLPK::set_param_time_limit::t_time_limit"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK19set_tol_feasibilityEd", "idol::Optimizers::GLPK::set_tol_feasibility"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK19set_tol_feasibilityEd", "idol::Optimizers::GLPK::set_tol_feasibility::t_tol_feasibility"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK15set_tol_integerEd", "idol::Optimizers::GLPK::set_tol_integer"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK15set_tol_integerEd", "idol::Optimizers::GLPK::set_tol_integer::t_tol_integer"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_absolute_gapEd", "idol::Optimizers::GLPK::set_tol_mip_absolute_gap"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_absolute_gapEd", "idol::Optimizers::GLPK::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_relative_gapEd", "idol::Optimizers::GLPK::set_tol_mip_relative_gap"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK24set_tol_mip_relative_gapEd", "idol::Optimizers::GLPK::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK18set_tol_optimalityEd", "idol::Optimizers::GLPK::set_tol_optimality"], [52, 3, 1, "_CPPv4N4idol10Optimizers4GLPK18set_tol_optimalityEd", "idol::Optimizers::GLPK::set_tol_optimality::t_tol_optimality"], [52, 2, 1, "_CPPv4N4idol10Optimizers4GLPK9terminateEv", "idol::Optimizers::GLPK::terminate"], [52, 2, 1, "_CPPv4NK4idol10Optimizers4GLPK4timeEv", "idol::Optimizers::GLPK::time"], [53, 1, 1, "_CPPv4N4idol10Optimizers6GurobiE", "idol::Optimizers::Gurobi"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", "idol::Optimizers::Gurobi::Gurobi"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", "idol::Optimizers::Gurobi::Gurobi::t_continuous_relaxation"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi::t_continuous_relaxation"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi::t_env"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5Modelb", "idol::Optimizers::Gurobi::Gurobi::t_model"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi6GurobiERK5ModelbR6GRBEnv", "idol::Optimizers::Gurobi::Gurobi::t_model"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi12add_callbackEP8Callback", "idol::Optimizers::Gurobi::add_callback"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi12add_callbackEP8Callback", "idol::Optimizers::Gurobi::add_callback::t_ptr_to_callback"], [53, 2, 1, "_CPPv4I0EN4idol10Optimizers6Gurobi2asER1Tv", "idol::Optimizers::Gurobi::as"], [53, 2, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2asERK1Tv", "idol::Optimizers::Gurobi::as"], [53, 4, 1, "_CPPv4I0EN4idol10Optimizers6Gurobi2asER1Tv", "idol::Optimizers::Gurobi::as::T"], [53, 4, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2asERK1Tv", "idol::Optimizers::Gurobi::as::T"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi3envEv", "idol::Optimizers::Gurobi::env"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi3envEv", "idol::Optimizers::Gurobi::env"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_best_bound_stopEv", "idol::Optimizers::Gurobi::get_param_best_bound_stop"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi23get_param_best_obj_stopEv", "idol::Optimizers::Gurobi::get_param_best_obj_stop"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::Gurobi::get_param_infeasible_or_unbounded_info"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi25get_param_iteration_limitEv", "idol::Optimizers::Gurobi::get_param_iteration_limit"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi14get_param_logsEv", "idol::Optimizers::Gurobi::get_param_logs"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi18get_param_presolveEv", "idol::Optimizers::Gurobi::get_param_presolve"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi22get_param_thread_limitEv", "idol::Optimizers::Gurobi::get_param_thread_limit"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi20get_param_time_limitEv", "idol::Optimizers::Gurobi::get_param_time_limit"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi18get_remaining_timeEv", "idol::Optimizers::Gurobi::get_remaining_time"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi19get_tol_feasibilityEv", "idol::Optimizers::Gurobi::get_tol_feasibility"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi15get_tol_integerEv", "idol::Optimizers::Gurobi::get_tol_integer"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_absolute_gapEv", "idol::Optimizers::Gurobi::get_tol_mip_absolute_gap"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi24get_tol_mip_relative_gapEv", "idol::Optimizers::Gurobi::get_tol_mip_relative_gap"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi18get_tol_optimalityEv", "idol::Optimizers::Gurobi::get_tol_optimality"], [53, 2, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2isEbv", "idol::Optimizers::Gurobi::is"], [53, 4, 1, "_CPPv4I0ENK4idol10Optimizers6Gurobi2isEbv", "idol::Optimizers::Gurobi::is::T"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi13is_terminatedEv", "idol::Optimizers::Gurobi::is_terminated"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi5modelEv", "idol::Optimizers::Gurobi::model"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi5modelEv", "idol::Optimizers::Gurobi::model"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi4nameEv", "idol::Optimizers::Gurobi::name"], [53, 2, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]"], [53, 2, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]"], [53, 3, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]::t_ctr"], [53, 3, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Ctr", "idol::Optimizers::Gurobi::operator[]::t_ctr"], [53, 3, 1, "_CPPv4N4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]::t_var"], [53, 3, 1, "_CPPv4NK4idol10Optimizers6GurobiixERK3Var", "idol::Optimizers::Gurobi::operator[]::t_var"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi6parentEv", "idol::Optimizers::Gurobi::parent"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::Gurobi::read_from_file"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::Gurobi::read_from_file::t_env"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi14read_from_fileER3EnvRKNSt6stringE", "idol::Optimizers::Gurobi::read_from_file::t_filename"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi12set_lazy_cutEb", "idol::Optimizers::Gurobi::set_lazy_cut"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi12set_lazy_cutEb", "idol::Optimizers::Gurobi::set_lazy_cut::t_value"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi26set_max_n_solution_in_poolEj", "idol::Optimizers::Gurobi::set_max_n_solution_in_pool"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi26set_max_n_solution_in_poolEj", "idol::Optimizers::Gurobi::set_max_n_solution_in_pool::t_value"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", "idol::Optimizers::Gurobi::set_param"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", "idol::Optimizers::Gurobi::set_param"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", "idol::Optimizers::Gurobi::set_param::t_param"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", "idol::Optimizers::Gurobi::set_param::t_param"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE12GRB_IntParami", "idol::Optimizers::Gurobi::set_param::t_value"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi9set_paramE15GRB_DoubleParamd", "idol::Optimizers::Gurobi::set_param::t_value"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_best_bound_stopEd", "idol::Optimizers::Gurobi::set_param_best_bound_stop"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_best_bound_stopEd", "idol::Optimizers::Gurobi::set_param_best_bound_stop::t_best_bound_stop"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi23set_param_best_obj_stopEd", "idol::Optimizers::Gurobi::set_param_best_obj_stop"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi23set_param_best_obj_stopEd", "idol::Optimizers::Gurobi::set_param_best_obj_stop::t_best_obj_stop"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Gurobi::set_param_infeasible_or_unbounded_info"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::Gurobi::set_param_infeasible_or_unbounded_info::t_value"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_iteration_limitEj", "idol::Optimizers::Gurobi::set_param_iteration_limit"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi25set_param_iteration_limitEj", "idol::Optimizers::Gurobi::set_param_iteration_limit::t_iteration_limit"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi14set_param_logsEb", "idol::Optimizers::Gurobi::set_param_logs"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi14set_param_logsEb", "idol::Optimizers::Gurobi::set_param_logs::t_value"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_param_presolveEb", "idol::Optimizers::Gurobi::set_param_presolve"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_param_presolveEb", "idol::Optimizers::Gurobi::set_param_presolve::t_value"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi17set_param_threadsEj", "idol::Optimizers::Gurobi::set_param_threads"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi17set_param_threadsEj", "idol::Optimizers::Gurobi::set_param_threads::t_thread_limit"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi20set_param_time_limitEd", "idol::Optimizers::Gurobi::set_param_time_limit"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi20set_param_time_limitEd", "idol::Optimizers::Gurobi::set_param_time_limit::t_time_limit"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi19set_tol_feasibilityEd", "idol::Optimizers::Gurobi::set_tol_feasibility"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi19set_tol_feasibilityEd", "idol::Optimizers::Gurobi::set_tol_feasibility::t_tol_feasibility"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi15set_tol_integerEd", "idol::Optimizers::Gurobi::set_tol_integer"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi15set_tol_integerEd", "idol::Optimizers::Gurobi::set_tol_integer::t_tol_integer"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_absolute_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_absolute_gap"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_absolute_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_absolute_gap::t_absolute_gap_tolerance"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_relative_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_relative_gap"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi24set_tol_mip_relative_gapEd", "idol::Optimizers::Gurobi::set_tol_mip_relative_gap::t_relative_gap_tolerance"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_tol_optimalityEd", "idol::Optimizers::Gurobi::set_tol_optimality"], [53, 3, 1, "_CPPv4N4idol10Optimizers6Gurobi18set_tol_optimalityEd", "idol::Optimizers::Gurobi::set_tol_optimality::t_tol_optimality"], [53, 2, 1, "_CPPv4N4idol10Optimizers6Gurobi9terminateEv", "idol::Optimizers::Gurobi::terminate"], [53, 2, 1, "_CPPv4NK4idol10Optimizers6Gurobi4timeEv", "idol::Optimizers::Gurobi::time"], [79, 1, 1, "_CPPv4N4idol10Optimizers4PADME", "idol::Optimizers::PADM"], [79, 1, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlotE", "idol::Optimizers::PADM::IterationPlot"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot13IterationPlotERN5Plots7ManagerE", "idol::Optimizers::PADM::IterationPlot::IterationPlot"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot13IterationPlotERN5Plots7ManagerE", "idol::Optimizers::PADM::IterationPlot::IterationPlot::t_manager"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot6updateEjjRKNSt6vectorIdEERKNSt6vectorIdEE", "idol::Optimizers::PADM::IterationPlot::update"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot6updateEjjRKNSt6vectorIdEERKNSt6vectorIdEE", "idol::Optimizers::PADM::IterationPlot::update::t_infeasibilities"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot6updateEjjRKNSt6vectorIdEERKNSt6vectorIdEE", "idol::Optimizers::PADM::IterationPlot::update::t_inner_loop_iteration"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot6updateEjjRKNSt6vectorIdEERKNSt6vectorIdEE", "idol::Optimizers::PADM::IterationPlot::update::t_objective_values"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM13IterationPlot6updateEjjRKNSt6vectorIdEERKNSt6vectorIdEE", "idol::Optimizers::PADM::IterationPlot::update::t_outer_loop_iteration"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM::t_feasible_solution_status"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM::t_formulation"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM::t_model"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM::t_penalty_update"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM::t_plot_manager"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM4PADMERK5ModelN3ADM11FormulationERRNSt6vectorIN4idol3ADM10SubProblemEEEP13PenaltyUpdate14SolutionStatusPN5Plots7ManagerE", "idol::Optimizers::PADM::PADM::t_sub_problem_specs"], [79, 2, 1, "_CPPv4I0EN4idol10Optimizers4PADM2asER1Tv", "idol::Optimizers::PADM::as"], [79, 2, 1, "_CPPv4I0ENK4idol10Optimizers4PADM2asERK1Tv", "idol::Optimizers::PADM::as"], [79, 4, 1, "_CPPv4I0EN4idol10Optimizers4PADM2asER1Tv", "idol::Optimizers::PADM::as::T"], [79, 4, 1, "_CPPv4I0ENK4idol10Optimizers4PADM2asERK1Tv", "idol::Optimizers::PADM::as::T"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM16get_absolute_gapEv", "idol::Optimizers::PADM::get_absolute_gap"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM14get_best_boundEv", "idol::Optimizers::PADM::get_best_bound"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM12get_best_objEv", "idol::Optimizers::PADM::get_best_obj"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM12get_ctr_dualERK3Ctr", "idol::Optimizers::PADM::get_ctr_dual"], [79, 3, 1, "_CPPv4NK4idol10Optimizers4PADM12get_ctr_dualERK3Ctr", "idol::Optimizers::PADM::get_ctr_dual::t_ctr"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM14get_ctr_farkasERK3Ctr", "idol::Optimizers::PADM::get_ctr_farkas"], [79, 3, 1, "_CPPv4NK4idol10Optimizers4PADM14get_ctr_farkasERK3Ctr", "idol::Optimizers::PADM::get_ctr_farkas::t_ctr"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM30get_inner_loop_iteration_countEv", "idol::Optimizers::PADM::get_inner_loop_iteration_count"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM15get_n_solutionsEv", "idol::Optimizers::PADM::get_n_solutions"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM30get_outer_loop_iteration_countEv", "idol::Optimizers::PADM::get_outer_loop_iteration_count"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM25get_param_best_bound_stopEv", "idol::Optimizers::PADM::get_param_best_bound_stop"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM23get_param_best_obj_stopEv", "idol::Optimizers::PADM::get_param_best_obj_stop"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM38get_param_infeasible_or_unbounded_infoEv", "idol::Optimizers::PADM::get_param_infeasible_or_unbounded_info"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM25get_param_iteration_limitEv", "idol::Optimizers::PADM::get_param_iteration_limit"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM14get_param_logsEv", "idol::Optimizers::PADM::get_param_logs"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM18get_param_presolveEv", "idol::Optimizers::PADM::get_param_presolve"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM22get_param_thread_limitEv", "idol::Optimizers::PADM::get_param_thread_limit"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM20get_param_time_limitEv", "idol::Optimizers::PADM::get_param_time_limit"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM10get_reasonEv", "idol::Optimizers::PADM::get_reason"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM16get_relative_gapEv", "idol::Optimizers::PADM::get_relative_gap"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM18get_remaining_timeEv", "idol::Optimizers::PADM::get_remaining_time"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM18get_solution_indexEv", "idol::Optimizers::PADM::get_solution_index"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM10get_statusEv", "idol::Optimizers::PADM::get_status"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM19get_tol_feasibilityEv", "idol::Optimizers::PADM::get_tol_feasibility"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM15get_tol_integerEv", "idol::Optimizers::PADM::get_tol_integer"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM24get_tol_mip_absolute_gapEv", "idol::Optimizers::PADM::get_tol_mip_absolute_gap"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM24get_tol_mip_relative_gapEv", "idol::Optimizers::PADM::get_tol_mip_relative_gap"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM18get_tol_optimalityEv", "idol::Optimizers::PADM::get_tol_optimality"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM14get_var_primalERK3Var", "idol::Optimizers::PADM::get_var_primal"], [79, 3, 1, "_CPPv4NK4idol10Optimizers4PADM14get_var_primalERK3Var", "idol::Optimizers::PADM::get_var_primal::t_var"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM11get_var_rayERK3Var", "idol::Optimizers::PADM::get_var_ray"], [79, 3, 1, "_CPPv4NK4idol10Optimizers4PADM11get_var_rayERK3Var", "idol::Optimizers::PADM::get_var_ray::t_var"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM20get_var_reduced_costERK3Var", "idol::Optimizers::PADM::get_var_reduced_cost"], [79, 3, 1, "_CPPv4NK4idol10Optimizers4PADM20get_var_reduced_costERK3Var", "idol::Optimizers::PADM::get_var_reduced_cost::t_var"], [79, 2, 1, "_CPPv4I0ENK4idol10Optimizers4PADM2isEbv", "idol::Optimizers::PADM::is"], [79, 4, 1, "_CPPv4I0ENK4idol10Optimizers4PADM2isEbv", "idol::Optimizers::PADM::is::T"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM13is_terminatedEv", "idol::Optimizers::PADM::is_terminated"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM4nameEv", "idol::Optimizers::PADM::name"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM6parentEv", "idol::Optimizers::PADM::parent"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM25set_param_best_bound_stopEd", "idol::Optimizers::PADM::set_param_best_bound_stop"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM25set_param_best_bound_stopEd", "idol::Optimizers::PADM::set_param_best_bound_stop::t_best_bound_stop"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM23set_param_best_obj_stopEd", "idol::Optimizers::PADM::set_param_best_obj_stop"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM23set_param_best_obj_stopEd", "idol::Optimizers::PADM::set_param_best_obj_stop::t_best_obj_stop"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::PADM::set_param_infeasible_or_unbounded_info"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM38set_param_infeasible_or_unbounded_infoEb", "idol::Optimizers::PADM::set_param_infeasible_or_unbounded_info::t_value"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM25set_param_iteration_limitEj", "idol::Optimizers::PADM::set_param_iteration_limit"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM25set_param_iteration_limitEj", "idol::Optimizers::PADM::set_param_iteration_limit::t_iteration_limit"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM14set_param_logsEb", "idol::Optimizers::PADM::set_param_logs"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM14set_param_logsEb", "idol::Optimizers::PADM::set_param_logs::t_value"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM18set_param_presolveEb", "idol::Optimizers::PADM::set_param_presolve"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM18set_param_presolveEb", "idol::Optimizers::PADM::set_param_presolve::t_value"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM17set_param_threadsEj", "idol::Optimizers::PADM::set_param_threads"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM17set_param_threadsEj", "idol::Optimizers::PADM::set_param_threads::t_threads"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM20set_param_time_limitEd", "idol::Optimizers::PADM::set_param_time_limit"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM20set_param_time_limitEd", "idol::Optimizers::PADM::set_param_time_limit::t_time_limit"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM19set_tol_feasibilityEd", "idol::Optimizers::PADM::set_tol_feasibility"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM19set_tol_feasibilityEd", "idol::Optimizers::PADM::set_tol_feasibility::t_tol_feasibility"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM15set_tol_integerEd", "idol::Optimizers::PADM::set_tol_integer"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM15set_tol_integerEd", "idol::Optimizers::PADM::set_tol_integer::t_tol_integer"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM24set_tol_mip_absolute_gapEd", "idol::Optimizers::PADM::set_tol_mip_absolute_gap"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM24set_tol_mip_absolute_gapEd", "idol::Optimizers::PADM::set_tol_mip_absolute_gap::t_mip_tol_absolute_gap"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM24set_tol_mip_relative_gapEd", "idol::Optimizers::PADM::set_tol_mip_relative_gap"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM24set_tol_mip_relative_gapEd", "idol::Optimizers::PADM::set_tol_mip_relative_gap::t_tol_mip_relative_gap"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM18set_tol_optimalityEd", "idol::Optimizers::PADM::set_tol_optimality"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM18set_tol_optimalityEd", "idol::Optimizers::PADM::set_tol_optimality::t_tol_optimality"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM16sub_problem_specEj", "idol::Optimizers::PADM::sub_problem_spec"], [79, 3, 1, "_CPPv4N4idol10Optimizers4PADM16sub_problem_specEj", "idol::Optimizers::PADM::sub_problem_spec::t_sub_problem_id"], [79, 2, 1, "_CPPv4N4idol10Optimizers4PADM9terminateEv", "idol::Optimizers::PADM::terminate"], [79, 2, 1, "_CPPv4NK4idol10Optimizers4PADM4timeEv", "idol::Optimizers::PADM::time"], [56, 1, 1, "_CPPv4N4idol3OsiE", "idol::Osi"], [56, 2, 1, "_CPPv4N4idol3Osi20ContinuousRelaxationERK18OsiSolverInterface", "idol::Osi::ContinuousRelaxation"], [56, 3, 1, "_CPPv4N4idol3Osi20ContinuousRelaxationERK18OsiSolverInterface", "idol::Osi::ContinuousRelaxation::t_solver_interface"], [56, 2, 1, "_CPPv4N4idol3Osi3OsiERK18OsiSolverInterface", "idol::Osi::Osi"], [56, 2, 1, "_CPPv4N4idol3Osi3OsiERK3Osi", "idol::Osi::Osi"], [56, 2, 1, "_CPPv4N4idol3Osi3OsiERR3Osi", "idol::Osi::Osi"], [56, 3, 1, "_CPPv4N4idol3Osi3OsiERK18OsiSolverInterface", "idol::Osi::Osi::t_solver_interface"], [56, 3, 1, "_CPPv4N4idol3Osi3OsiERK3Osi", "idol::Osi::Osi::t_src"], [56, 2, 1, "_CPPv4I0EN4idol3Osi2asER1Tv", "idol::Osi::as"], [56, 2, 1, "_CPPv4I0ENK4idol3Osi2asERK1Tv", "idol::Osi::as"], [56, 4, 1, "_CPPv4I0EN4idol3Osi2asER1Tv", "idol::Osi::as::T"], [56, 4, 1, "_CPPv4I0ENK4idol3Osi2asERK1Tv", "idol::Osi::as::T"], [56, 2, 1, "_CPPv4NK4idol3Osi5cloneEv", "idol::Osi::clone"], [56, 2, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional"], [56, 2, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional"], [56, 3, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_conditional_value"], [56, 3, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_conditional_value"], [56, 3, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_else"], [56, 3, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_if"], [56, 3, 1, "_CPPv4N4idol3Osi11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::Osi::conditional::t_if"], [56, 2, 1, "_CPPv4NK4idol3Osi27create_osi_solver_interfaceEv", "idol::Osi::create_osi_solver_interface"], [56, 2, 1, "_CPPv4I0ENK4idol3Osi2isEbv", "idol::Osi::is"], [56, 4, 1, "_CPPv4I0ENK4idol3Osi2isEbv", "idol::Osi::is::T"], [56, 2, 1, "_CPPv4NK4idol3OsiclERK5Model", "idol::Osi::operator()"], [56, 3, 1, "_CPPv4NK4idol3OsiclERK5Model", "idol::Osi::operator()::t_model"], [56, 2, 1, "_CPPv4N4idol3OsiaSERK3Osi", "idol::Osi::operator="], [56, 2, 1, "_CPPv4N4idol3OsiaSERR3Osi", "idol::Osi::operator="], [56, 2, 1, "_CPPv4N4idol3Osi27with_absolute_gap_toleranceEd", "idol::Osi::with_absolute_gap_tolerance"], [56, 3, 1, "_CPPv4N4idol3Osi27with_absolute_gap_toleranceEd", "idol::Osi::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [56, 2, 1, "_CPPv4N4idol3Osi20with_best_bound_stopEd", "idol::Osi::with_best_bound_stop"], [56, 3, 1, "_CPPv4N4idol3Osi20with_best_bound_stopEd", "idol::Osi::with_best_bound_stop::t_best_bound_stop"], [56, 2, 1, "_CPPv4N4idol3Osi18with_best_obj_stopEd", "idol::Osi::with_best_obj_stop"], [56, 3, 1, "_CPPv4N4idol3Osi18with_best_obj_stopEd", "idol::Osi::with_best_obj_stop::t_user_best_obj"], [56, 2, 1, "_CPPv4N4idol3Osi33with_infeasible_or_unbounded_infoEb", "idol::Osi::with_infeasible_or_unbounded_info"], [56, 3, 1, "_CPPv4N4idol3Osi33with_infeasible_or_unbounded_infoEb", "idol::Osi::with_infeasible_or_unbounded_info::t_value"], [56, 2, 1, "_CPPv4N4idol3Osi20with_iteration_limitEj", "idol::Osi::with_iteration_limit"], [56, 3, 1, "_CPPv4N4idol3Osi20with_iteration_limitEj", "idol::Osi::with_iteration_limit::t_iteration_count_limit"], [56, 2, 1, "_CPPv4N4idol3Osi9with_logsEb", "idol::Osi::with_logs"], [56, 3, 1, "_CPPv4N4idol3Osi9with_logsEb", "idol::Osi::with_logs::t_value"], [56, 2, 1, "_CPPv4N4idol3Osi13with_presolveEb", "idol::Osi::with_presolve"], [56, 3, 1, "_CPPv4N4idol3Osi13with_presolveEb", "idol::Osi::with_presolve::t_value"], [56, 2, 1, "_CPPv4N4idol3Osi27with_relative_gap_toleranceEd", "idol::Osi::with_relative_gap_tolerance"], [56, 3, 1, "_CPPv4N4idol3Osi27with_relative_gap_toleranceEd", "idol::Osi::with_relative_gap_tolerance::t_relative_gap_tolerance"], [56, 2, 1, "_CPPv4N4idol3Osi17with_thread_limitEj", "idol::Osi::with_thread_limit"], [56, 3, 1, "_CPPv4N4idol3Osi17with_thread_limitEj", "idol::Osi::with_thread_limit::t_max_n_threads"], [56, 2, 1, "_CPPv4N4idol3Osi15with_time_limitEd", "idol::Osi::with_time_limit"], [56, 3, 1, "_CPPv4N4idol3Osi15with_time_limitEd", "idol::Osi::with_time_limit::t_time_limit"], [57, 1, 1, "_CPPv4N4idol6OsiCbcE", "idol::OsiCbc"], [57, 2, 1, "_CPPv4N4idol6OsiCbc20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCbc::ContinuousRelaxation"], [57, 3, 1, "_CPPv4N4idol6OsiCbc20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCbc::ContinuousRelaxation::t_solver_interface"], [57, 2, 1, "_CPPv4I0EN4idol6OsiCbc2asER1Tv", "idol::OsiCbc::as"], [57, 2, 1, "_CPPv4I0ENK4idol6OsiCbc2asERK1Tv", "idol::OsiCbc::as"], [57, 4, 1, "_CPPv4I0EN4idol6OsiCbc2asER1Tv", "idol::OsiCbc::as::T"], [57, 4, 1, "_CPPv4I0ENK4idol6OsiCbc2asERK1Tv", "idol::OsiCbc::as::T"], [57, 2, 1, "_CPPv4NK4idol6OsiCbc5cloneEv", "idol::OsiCbc::clone"], [57, 2, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional"], [57, 2, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional"], [57, 3, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_conditional_value"], [57, 3, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_conditional_value"], [57, 3, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_else"], [57, 3, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_if"], [57, 3, 1, "_CPPv4N4idol6OsiCbc11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCbc::conditional::t_if"], [57, 2, 1, "_CPPv4NK4idol6OsiCbc27create_osi_solver_interfaceEv", "idol::OsiCbc::create_osi_solver_interface"], [57, 2, 1, "_CPPv4I0ENK4idol6OsiCbc2isEbv", "idol::OsiCbc::is"], [57, 4, 1, "_CPPv4I0ENK4idol6OsiCbc2isEbv", "idol::OsiCbc::is::T"], [57, 2, 1, "_CPPv4NK4idol6OsiCbcclERK5Model", "idol::OsiCbc::operator()"], [57, 3, 1, "_CPPv4NK4idol6OsiCbcclERK5Model", "idol::OsiCbc::operator()::t_model"], [57, 2, 1, "_CPPv4N4idol6OsiCbc27with_absolute_gap_toleranceEd", "idol::OsiCbc::with_absolute_gap_tolerance"], [57, 3, 1, "_CPPv4N4idol6OsiCbc27with_absolute_gap_toleranceEd", "idol::OsiCbc::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [57, 2, 1, "_CPPv4N4idol6OsiCbc20with_best_bound_stopEd", "idol::OsiCbc::with_best_bound_stop"], [57, 3, 1, "_CPPv4N4idol6OsiCbc20with_best_bound_stopEd", "idol::OsiCbc::with_best_bound_stop::t_best_bound_stop"], [57, 2, 1, "_CPPv4N4idol6OsiCbc18with_best_obj_stopEd", "idol::OsiCbc::with_best_obj_stop"], [57, 3, 1, "_CPPv4N4idol6OsiCbc18with_best_obj_stopEd", "idol::OsiCbc::with_best_obj_stop::t_user_best_obj"], [57, 2, 1, "_CPPv4N4idol6OsiCbc33with_infeasible_or_unbounded_infoEb", "idol::OsiCbc::with_infeasible_or_unbounded_info"], [57, 3, 1, "_CPPv4N4idol6OsiCbc33with_infeasible_or_unbounded_infoEb", "idol::OsiCbc::with_infeasible_or_unbounded_info::t_value"], [57, 2, 1, "_CPPv4N4idol6OsiCbc20with_iteration_limitEj", "idol::OsiCbc::with_iteration_limit"], [57, 3, 1, "_CPPv4N4idol6OsiCbc20with_iteration_limitEj", "idol::OsiCbc::with_iteration_limit::t_iteration_count_limit"], [57, 2, 1, "_CPPv4N4idol6OsiCbc9with_logsEb", "idol::OsiCbc::with_logs"], [57, 3, 1, "_CPPv4N4idol6OsiCbc9with_logsEb", "idol::OsiCbc::with_logs::t_value"], [57, 2, 1, "_CPPv4N4idol6OsiCbc13with_presolveEb", "idol::OsiCbc::with_presolve"], [57, 3, 1, "_CPPv4N4idol6OsiCbc13with_presolveEb", "idol::OsiCbc::with_presolve::t_value"], [57, 2, 1, "_CPPv4N4idol6OsiCbc27with_relative_gap_toleranceEd", "idol::OsiCbc::with_relative_gap_tolerance"], [57, 3, 1, "_CPPv4N4idol6OsiCbc27with_relative_gap_toleranceEd", "idol::OsiCbc::with_relative_gap_tolerance::t_relative_gap_tolerance"], [57, 2, 1, "_CPPv4N4idol6OsiCbc17with_thread_limitEj", "idol::OsiCbc::with_thread_limit"], [57, 3, 1, "_CPPv4N4idol6OsiCbc17with_thread_limitEj", "idol::OsiCbc::with_thread_limit::t_max_n_threads"], [57, 2, 1, "_CPPv4N4idol6OsiCbc15with_time_limitEd", "idol::OsiCbc::with_time_limit"], [57, 3, 1, "_CPPv4N4idol6OsiCbc15with_time_limitEd", "idol::OsiCbc::with_time_limit::t_time_limit"], [58, 1, 1, "_CPPv4N4idol6OsiClpE", "idol::OsiClp"], [58, 2, 1, "_CPPv4N4idol6OsiClp20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiClp::ContinuousRelaxation"], [58, 3, 1, "_CPPv4N4idol6OsiClp20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiClp::ContinuousRelaxation::t_solver_interface"], [58, 2, 1, "_CPPv4I0EN4idol6OsiClp2asER1Tv", "idol::OsiClp::as"], [58, 2, 1, "_CPPv4I0ENK4idol6OsiClp2asERK1Tv", "idol::OsiClp::as"], [58, 4, 1, "_CPPv4I0EN4idol6OsiClp2asER1Tv", "idol::OsiClp::as::T"], [58, 4, 1, "_CPPv4I0ENK4idol6OsiClp2asERK1Tv", "idol::OsiClp::as::T"], [58, 2, 1, "_CPPv4NK4idol6OsiClp5cloneEv", "idol::OsiClp::clone"], [58, 2, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional"], [58, 2, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional"], [58, 3, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_conditional_value"], [58, 3, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_conditional_value"], [58, 3, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_else"], [58, 3, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_if"], [58, 3, 1, "_CPPv4N4idol6OsiClp11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiClp::conditional::t_if"], [58, 2, 1, "_CPPv4NK4idol6OsiClp27create_osi_solver_interfaceEv", "idol::OsiClp::create_osi_solver_interface"], [58, 2, 1, "_CPPv4I0ENK4idol6OsiClp2isEbv", "idol::OsiClp::is"], [58, 4, 1, "_CPPv4I0ENK4idol6OsiClp2isEbv", "idol::OsiClp::is::T"], [58, 2, 1, "_CPPv4NK4idol6OsiClpclERK5Model", "idol::OsiClp::operator()"], [58, 3, 1, "_CPPv4NK4idol6OsiClpclERK5Model", "idol::OsiClp::operator()::t_model"], [58, 2, 1, "_CPPv4N4idol6OsiClp27with_absolute_gap_toleranceEd", "idol::OsiClp::with_absolute_gap_tolerance"], [58, 3, 1, "_CPPv4N4idol6OsiClp27with_absolute_gap_toleranceEd", "idol::OsiClp::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [58, 2, 1, "_CPPv4N4idol6OsiClp20with_best_bound_stopEd", "idol::OsiClp::with_best_bound_stop"], [58, 3, 1, "_CPPv4N4idol6OsiClp20with_best_bound_stopEd", "idol::OsiClp::with_best_bound_stop::t_best_bound_stop"], [58, 2, 1, "_CPPv4N4idol6OsiClp18with_best_obj_stopEd", "idol::OsiClp::with_best_obj_stop"], [58, 3, 1, "_CPPv4N4idol6OsiClp18with_best_obj_stopEd", "idol::OsiClp::with_best_obj_stop::t_user_best_obj"], [58, 2, 1, "_CPPv4N4idol6OsiClp33with_infeasible_or_unbounded_infoEb", "idol::OsiClp::with_infeasible_or_unbounded_info"], [58, 3, 1, "_CPPv4N4idol6OsiClp33with_infeasible_or_unbounded_infoEb", "idol::OsiClp::with_infeasible_or_unbounded_info::t_value"], [58, 2, 1, "_CPPv4N4idol6OsiClp20with_iteration_limitEj", "idol::OsiClp::with_iteration_limit"], [58, 3, 1, "_CPPv4N4idol6OsiClp20with_iteration_limitEj", "idol::OsiClp::with_iteration_limit::t_iteration_count_limit"], [58, 2, 1, "_CPPv4N4idol6OsiClp9with_logsEb", "idol::OsiClp::with_logs"], [58, 3, 1, "_CPPv4N4idol6OsiClp9with_logsEb", "idol::OsiClp::with_logs::t_value"], [58, 2, 1, "_CPPv4N4idol6OsiClp13with_presolveEb", "idol::OsiClp::with_presolve"], [58, 3, 1, "_CPPv4N4idol6OsiClp13with_presolveEb", "idol::OsiClp::with_presolve::t_value"], [58, 2, 1, "_CPPv4N4idol6OsiClp27with_relative_gap_toleranceEd", "idol::OsiClp::with_relative_gap_tolerance"], [58, 3, 1, "_CPPv4N4idol6OsiClp27with_relative_gap_toleranceEd", "idol::OsiClp::with_relative_gap_tolerance::t_relative_gap_tolerance"], [58, 2, 1, "_CPPv4N4idol6OsiClp17with_thread_limitEj", "idol::OsiClp::with_thread_limit"], [58, 3, 1, "_CPPv4N4idol6OsiClp17with_thread_limitEj", "idol::OsiClp::with_thread_limit::t_max_n_threads"], [58, 2, 1, "_CPPv4N4idol6OsiClp15with_time_limitEd", "idol::OsiClp::with_time_limit"], [58, 3, 1, "_CPPv4N4idol6OsiClp15with_time_limitEd", "idol::OsiClp::with_time_limit::t_time_limit"], [59, 1, 1, "_CPPv4N4idol8OsiCplexE", "idol::OsiCplex"], [59, 2, 1, "_CPPv4N4idol8OsiCplex20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCplex::ContinuousRelaxation"], [59, 3, 1, "_CPPv4N4idol8OsiCplex20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiCplex::ContinuousRelaxation::t_solver_interface"], [59, 2, 1, "_CPPv4I0EN4idol8OsiCplex2asER1Tv", "idol::OsiCplex::as"], [59, 2, 1, "_CPPv4I0ENK4idol8OsiCplex2asERK1Tv", "idol::OsiCplex::as"], [59, 4, 1, "_CPPv4I0EN4idol8OsiCplex2asER1Tv", "idol::OsiCplex::as::T"], [59, 4, 1, "_CPPv4I0ENK4idol8OsiCplex2asERK1Tv", "idol::OsiCplex::as::T"], [59, 2, 1, "_CPPv4NK4idol8OsiCplex5cloneEv", "idol::OsiCplex::clone"], [59, 2, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional"], [59, 2, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional"], [59, 3, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_conditional_value"], [59, 3, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_conditional_value"], [59, 3, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_else"], [59, 3, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_if"], [59, 3, 1, "_CPPv4N4idol8OsiCplex11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiCplex::conditional::t_if"], [59, 2, 1, "_CPPv4NK4idol8OsiCplex27create_osi_solver_interfaceEv", "idol::OsiCplex::create_osi_solver_interface"], [59, 2, 1, "_CPPv4I0ENK4idol8OsiCplex2isEbv", "idol::OsiCplex::is"], [59, 4, 1, "_CPPv4I0ENK4idol8OsiCplex2isEbv", "idol::OsiCplex::is::T"], [59, 2, 1, "_CPPv4NK4idol8OsiCplexclERK5Model", "idol::OsiCplex::operator()"], [59, 3, 1, "_CPPv4NK4idol8OsiCplexclERK5Model", "idol::OsiCplex::operator()::t_model"], [59, 2, 1, "_CPPv4N4idol8OsiCplex27with_absolute_gap_toleranceEd", "idol::OsiCplex::with_absolute_gap_tolerance"], [59, 3, 1, "_CPPv4N4idol8OsiCplex27with_absolute_gap_toleranceEd", "idol::OsiCplex::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [59, 2, 1, "_CPPv4N4idol8OsiCplex20with_best_bound_stopEd", "idol::OsiCplex::with_best_bound_stop"], [59, 3, 1, "_CPPv4N4idol8OsiCplex20with_best_bound_stopEd", "idol::OsiCplex::with_best_bound_stop::t_best_bound_stop"], [59, 2, 1, "_CPPv4N4idol8OsiCplex18with_best_obj_stopEd", "idol::OsiCplex::with_best_obj_stop"], [59, 3, 1, "_CPPv4N4idol8OsiCplex18with_best_obj_stopEd", "idol::OsiCplex::with_best_obj_stop::t_user_best_obj"], [59, 2, 1, "_CPPv4N4idol8OsiCplex33with_infeasible_or_unbounded_infoEb", "idol::OsiCplex::with_infeasible_or_unbounded_info"], [59, 3, 1, "_CPPv4N4idol8OsiCplex33with_infeasible_or_unbounded_infoEb", "idol::OsiCplex::with_infeasible_or_unbounded_info::t_value"], [59, 2, 1, "_CPPv4N4idol8OsiCplex20with_iteration_limitEj", "idol::OsiCplex::with_iteration_limit"], [59, 3, 1, "_CPPv4N4idol8OsiCplex20with_iteration_limitEj", "idol::OsiCplex::with_iteration_limit::t_iteration_count_limit"], [59, 2, 1, "_CPPv4N4idol8OsiCplex9with_logsEb", "idol::OsiCplex::with_logs"], [59, 3, 1, "_CPPv4N4idol8OsiCplex9with_logsEb", "idol::OsiCplex::with_logs::t_value"], [59, 2, 1, "_CPPv4N4idol8OsiCplex13with_presolveEb", "idol::OsiCplex::with_presolve"], [59, 3, 1, "_CPPv4N4idol8OsiCplex13with_presolveEb", "idol::OsiCplex::with_presolve::t_value"], [59, 2, 1, "_CPPv4N4idol8OsiCplex27with_relative_gap_toleranceEd", "idol::OsiCplex::with_relative_gap_tolerance"], [59, 3, 1, "_CPPv4N4idol8OsiCplex27with_relative_gap_toleranceEd", "idol::OsiCplex::with_relative_gap_tolerance::t_relative_gap_tolerance"], [59, 2, 1, "_CPPv4N4idol8OsiCplex17with_thread_limitEj", "idol::OsiCplex::with_thread_limit"], [59, 3, 1, "_CPPv4N4idol8OsiCplex17with_thread_limitEj", "idol::OsiCplex::with_thread_limit::t_max_n_threads"], [59, 2, 1, "_CPPv4N4idol8OsiCplex15with_time_limitEd", "idol::OsiCplex::with_time_limit"], [59, 3, 1, "_CPPv4N4idol8OsiCplex15with_time_limitEd", "idol::OsiCplex::with_time_limit::t_time_limit"], [60, 1, 1, "_CPPv4N4idol11OsiSymphonyE", "idol::OsiSymphony"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiSymphony::ContinuousRelaxation"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony20ContinuousRelaxationERK18OsiSolverInterface", "idol::OsiSymphony::ContinuousRelaxation::t_solver_interface"], [60, 2, 1, "_CPPv4I0EN4idol11OsiSymphony2asER1Tv", "idol::OsiSymphony::as"], [60, 2, 1, "_CPPv4I0ENK4idol11OsiSymphony2asERK1Tv", "idol::OsiSymphony::as"], [60, 4, 1, "_CPPv4I0EN4idol11OsiSymphony2asER1Tv", "idol::OsiSymphony::as::T"], [60, 4, 1, "_CPPv4I0ENK4idol11OsiSymphony2asERK1Tv", "idol::OsiSymphony::as::T"], [60, 2, 1, "_CPPv4NK4idol11OsiSymphony5cloneEv", "idol::OsiSymphony::clone"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_conditional_value"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_conditional_value"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_else"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_if"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony11conditionalEbRKNSt8functionIFvR3OsiEEERKNSt8functionIFvR3OsiEEE", "idol::OsiSymphony::conditional::t_if"], [60, 2, 1, "_CPPv4NK4idol11OsiSymphony27create_osi_solver_interfaceEv", "idol::OsiSymphony::create_osi_solver_interface"], [60, 2, 1, "_CPPv4I0ENK4idol11OsiSymphony2isEbv", "idol::OsiSymphony::is"], [60, 4, 1, "_CPPv4I0ENK4idol11OsiSymphony2isEbv", "idol::OsiSymphony::is::T"], [60, 2, 1, "_CPPv4NK4idol11OsiSymphonyclERK5Model", "idol::OsiSymphony::operator()"], [60, 3, 1, "_CPPv4NK4idol11OsiSymphonyclERK5Model", "idol::OsiSymphony::operator()::t_model"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony27with_absolute_gap_toleranceEd", "idol::OsiSymphony::with_absolute_gap_tolerance"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony27with_absolute_gap_toleranceEd", "idol::OsiSymphony::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony20with_best_bound_stopEd", "idol::OsiSymphony::with_best_bound_stop"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony20with_best_bound_stopEd", "idol::OsiSymphony::with_best_bound_stop::t_best_bound_stop"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony18with_best_obj_stopEd", "idol::OsiSymphony::with_best_obj_stop"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony18with_best_obj_stopEd", "idol::OsiSymphony::with_best_obj_stop::t_user_best_obj"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony33with_infeasible_or_unbounded_infoEb", "idol::OsiSymphony::with_infeasible_or_unbounded_info"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony33with_infeasible_or_unbounded_infoEb", "idol::OsiSymphony::with_infeasible_or_unbounded_info::t_value"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony20with_iteration_limitEj", "idol::OsiSymphony::with_iteration_limit"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony20with_iteration_limitEj", "idol::OsiSymphony::with_iteration_limit::t_iteration_count_limit"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony9with_logsEb", "idol::OsiSymphony::with_logs"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony9with_logsEb", "idol::OsiSymphony::with_logs::t_value"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony13with_presolveEb", "idol::OsiSymphony::with_presolve"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony13with_presolveEb", "idol::OsiSymphony::with_presolve::t_value"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony27with_relative_gap_toleranceEd", "idol::OsiSymphony::with_relative_gap_tolerance"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony27with_relative_gap_toleranceEd", "idol::OsiSymphony::with_relative_gap_tolerance::t_relative_gap_tolerance"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony17with_thread_limitEj", "idol::OsiSymphony::with_thread_limit"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony17with_thread_limitEj", "idol::OsiSymphony::with_thread_limit::t_max_n_threads"], [60, 2, 1, "_CPPv4N4idol11OsiSymphony15with_time_limitEd", "idol::OsiSymphony::with_time_limit"], [60, 3, 1, "_CPPv4N4idol11OsiSymphony15with_time_limitEd", "idol::OsiSymphony::with_time_limit::t_time_limit"], [80, 1, 1, "_CPPv4N4idol4PADME", "idol::PADM"], [80, 2, 1, "_CPPv4N4idol4PADM4PADME10AnnotationIjE", "idol::PADM::PADM"], [80, 2, 1, "_CPPv4N4idol4PADM4PADME10AnnotationIjE10AnnotationIdE", "idol::PADM::PADM"], [80, 2, 1, "_CPPv4N4idol4PADM4PADMERK4PADM", "idol::PADM::PADM"], [80, 2, 1, "_CPPv4N4idol4PADM4PADMERR4PADM", "idol::PADM::PADM"], [80, 3, 1, "_CPPv4N4idol4PADM4PADME10AnnotationIjE", "idol::PADM::PADM::t_decomposition"], [80, 3, 1, "_CPPv4N4idol4PADM4PADME10AnnotationIjE10AnnotationIdE", "idol::PADM::PADM::t_decomposition"], [80, 3, 1, "_CPPv4N4idol4PADM4PADME10AnnotationIjE10AnnotationIdE", "idol::PADM::PADM::t_penalized_constraints"], [80, 3, 1, "_CPPv4N4idol4PADM4PADMERK4PADM", "idol::PADM::PADM::t_src"], [80, 2, 1, "_CPPv4I0EN4idol4PADM2asER1Tv", "idol::PADM::as"], [80, 2, 1, "_CPPv4I0ENK4idol4PADM2asERK1Tv", "idol::PADM::as"], [80, 4, 1, "_CPPv4I0EN4idol4PADM2asER1Tv", "idol::PADM::as::T"], [80, 4, 1, "_CPPv4I0ENK4idol4PADM2asERK1Tv", "idol::PADM::as::T"], [80, 2, 1, "_CPPv4NK4idol4PADM5cloneEv", "idol::PADM::clone"], [80, 2, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional"], [80, 2, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEERKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional"], [80, 3, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional::t_conditional_value"], [80, 3, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEERKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional::t_conditional_value"], [80, 3, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEERKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional::t_else"], [80, 3, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional::t_if"], [80, 3, 1, "_CPPv4N4idol4PADM11conditionalEbRKNSt8functionIFvR4PADMEEERKNSt8functionIFvR4PADMEEE", "idol::PADM::conditional::t_if"], [80, 2, 1, "_CPPv4I0ENK4idol4PADM2isEbv", "idol::PADM::is"], [80, 4, 1, "_CPPv4I0ENK4idol4PADM2isEbv", "idol::PADM::is::T"], [80, 2, 1, "_CPPv4NK4idol4PADMclERK5Model", "idol::PADM::operator()"], [80, 3, 1, "_CPPv4NK4idol4PADMclERK5Model", "idol::PADM::operator()::t_model"], [80, 2, 1, "_CPPv4N4idol4PADMaSERK4PADM", "idol::PADM::operator="], [80, 2, 1, "_CPPv4N4idol4PADMaSERR4PADM", "idol::PADM::operator="], [80, 2, 1, "_CPPv4N4idol4PADM27with_absolute_gap_toleranceEd", "idol::PADM::with_absolute_gap_tolerance"], [80, 3, 1, "_CPPv4N4idol4PADM27with_absolute_gap_toleranceEd", "idol::PADM::with_absolute_gap_tolerance::t_absolute_gap_tolerance"], [80, 2, 1, "_CPPv4N4idol4PADM20with_best_bound_stopEd", "idol::PADM::with_best_bound_stop"], [80, 3, 1, "_CPPv4N4idol4PADM20with_best_bound_stopEd", "idol::PADM::with_best_bound_stop::t_best_bound_stop"], [80, 2, 1, "_CPPv4N4idol4PADM18with_best_obj_stopEd", "idol::PADM::with_best_obj_stop"], [80, 3, 1, "_CPPv4N4idol4PADM18with_best_obj_stopEd", "idol::PADM::with_best_obj_stop::t_user_best_obj"], [80, 2, 1, "_CPPv4N4idol4PADM29with_default_sub_problem_specEN3ADM10SubProblemE", "idol::PADM::with_default_sub_problem_spec"], [80, 3, 1, "_CPPv4N4idol4PADM29with_default_sub_problem_specEN3ADM10SubProblemE", "idol::PADM::with_default_sub_problem_spec::t_sub_problem"], [80, 2, 1, "_CPPv4N4idol4PADM29with_feasible_solution_statusE14SolutionStatus", "idol::PADM::with_feasible_solution_status"], [80, 3, 1, "_CPPv4N4idol4PADM29with_feasible_solution_statusE14SolutionStatus", "idol::PADM::with_feasible_solution_status::t_status"], [80, 2, 1, "_CPPv4N4idol4PADM33with_infeasible_or_unbounded_infoEb", "idol::PADM::with_infeasible_or_unbounded_info"], [80, 3, 1, "_CPPv4N4idol4PADM33with_infeasible_or_unbounded_infoEb", "idol::PADM::with_infeasible_or_unbounded_info::t_value"], [80, 2, 1, "_CPPv4N4idol4PADM20with_iteration_limitEj", "idol::PADM::with_iteration_limit"], [80, 3, 1, "_CPPv4N4idol4PADM20with_iteration_limitEj", "idol::PADM::with_iteration_limit::t_iteration_count_limit"], [80, 2, 1, "_CPPv4N4idol4PADM19with_iteration_plotERN5Plots7ManagerE", "idol::PADM::with_iteration_plot"], [80, 3, 1, "_CPPv4N4idol4PADM19with_iteration_plotERN5Plots7ManagerE", "idol::PADM::with_iteration_plot::t_manager"], [80, 2, 1, "_CPPv4N4idol4PADM9with_logsEb", "idol::PADM::with_logs"], [80, 3, 1, "_CPPv4N4idol4PADM9with_logsEb", "idol::PADM::with_logs::t_value"], [80, 2, 1, "_CPPv4N4idol4PADM19with_penalty_updateERK13PenaltyUpdate", "idol::PADM::with_penalty_update"], [80, 3, 1, "_CPPv4N4idol4PADM19with_penalty_updateERK13PenaltyUpdate", "idol::PADM::with_penalty_update::t_penalty_update"], [80, 2, 1, "_CPPv4N4idol4PADM13with_presolveEb", "idol::PADM::with_presolve"], [80, 3, 1, "_CPPv4N4idol4PADM13with_presolveEb", "idol::PADM::with_presolve::t_value"], [80, 2, 1, "_CPPv4N4idol4PADM27with_relative_gap_toleranceEd", "idol::PADM::with_relative_gap_tolerance"], [80, 3, 1, "_CPPv4N4idol4PADM27with_relative_gap_toleranceEd", "idol::PADM::with_relative_gap_tolerance::t_relative_gap_tolerance"], [80, 2, 1, "_CPPv4N4idol4PADM24with_rescaling_thresholdEd", "idol::PADM::with_rescaling_threshold"], [80, 3, 1, "_CPPv4N4idol4PADM24with_rescaling_thresholdEd", "idol::PADM::with_rescaling_threshold::t_threshold"], [80, 2, 1, "_CPPv4N4idol4PADM21with_sub_problem_specEjN3ADM10SubProblemE", "idol::PADM::with_sub_problem_spec"], [80, 3, 1, "_CPPv4N4idol4PADM21with_sub_problem_specEjN3ADM10SubProblemE", "idol::PADM::with_sub_problem_spec::t_id"], [80, 3, 1, "_CPPv4N4idol4PADM21with_sub_problem_specEjN3ADM10SubProblemE", "idol::PADM::with_sub_problem_spec::t_sub_problem"], [80, 2, 1, "_CPPv4N4idol4PADM17with_thread_limitEj", "idol::PADM::with_thread_limit"], [80, 3, 1, "_CPPv4N4idol4PADM17with_thread_limitEj", "idol::PADM::with_thread_limit::t_max_n_threads"], [80, 2, 1, "_CPPv4N4idol4PADM15with_time_limitEd", "idol::PADM::with_time_limit"], [80, 3, 1, "_CPPv4N4idol4PADM15with_time_limitEd", "idol::PADM::with_time_limit::t_time_limit"], [72, 1, 1, "_CPPv4I0EN4idol5PointE", "idol::Point"], [72, 2, 1, "_CPPv4N4idol5Point5PointERK12SparseVectorI1TdE", "idol::Point::Point"], [72, 2, 1, "_CPPv4N4idol5Point5PointERR12SparseVectorI1TdE", "idol::Point::Point"], [72, 2, 1, "_CPPv4N4idol5Point5PointEv", "idol::Point::Point"], [72, 3, 1, "_CPPv4N4idol5Point5PointERK12SparseVectorI1TdE", "idol::Point::Point::t_vector"], [72, 3, 1, "_CPPv4N4idol5Point5PointERR12SparseVectorI1TdE", "idol::Point::Point::t_vector"], [72, 4, 1, "_CPPv4I0EN4idol5PointE", "idol::Point::T"], [72, 2, 1, "_CPPv4N4idol5Point5beginEv", "idol::Point::begin"], [72, 2, 1, "_CPPv4NK4idol5Point5beginEv", "idol::Point::begin"], [72, 2, 1, "_CPPv4NK4idol5Point6cbeginEv", "idol::Point::cbegin"], [72, 2, 1, "_CPPv4NK4idol5Point4cendEv", "idol::Point::cend"], [72, 2, 1, "_CPPv4N4idol5Point5clearEv", "idol::Point::clear"], [72, 0, 1, "_CPPv4N4idol5Point14const_iteratorE", "idol::Point::const_iterator"], [72, 2, 1, "_CPPv4NK4idol5Point5emptyEv", "idol::Point::empty"], [72, 2, 1, "_CPPv4N4idol5Point3endEv", "idol::Point::end"], [72, 2, 1, "_CPPv4NK4idol5Point3endEv", "idol::Point::end"], [72, 2, 1, "_CPPv4NK4idol5Point3getERK1T", "idol::Point::get"], [72, 3, 1, "_CPPv4NK4idol5Point3getERK1T", "idol::Point::get::t_index1"], [72, 2, 1, "_CPPv4NK4idol5Point9has_indexERK1T", "idol::Point::has_index"], [72, 3, 1, "_CPPv4NK4idol5Point9has_indexERK1T", "idol::Point::has_index::t_index"], [72, 2, 1, "_CPPv4NK4idol5Point19has_objective_valueEv", "idol::Point::has_objective_value"], [72, 2, 1, "_CPPv4NK4idol5Point7is_zeroEd", "idol::Point::is_zero"], [72, 3, 1, "_CPPv4NK4idol5Point7is_zeroEd", "idol::Point::is_zero::t_tolerance"], [72, 0, 1, "_CPPv4N4idol5Point8iteratorE", "idol::Point::iterator"], [72, 2, 1, "_CPPv4N4idol5Point22merge_without_conflictERK12SparseVector", "idol::Point::merge_without_conflict"], [72, 3, 1, "_CPPv4N4idol5Point22merge_without_conflictERK12SparseVector", "idol::Point::merge_without_conflict::t_vec"], [72, 2, 1, "_CPPv4NK4idol5Point15objective_valueEv", "idol::Point::objective_value"], [72, 2, 1, "_CPPv4N4idol5PointmLENSt13conditional_tINSt15is_arithmetic_vIdEEddEE", "idol::Point::operator*="], [72, 2, 1, "_CPPv4N4idol5PointmLEd", "idol::Point::operator*="], [72, 3, 1, "_CPPv4N4idol5PointmLEd", "idol::Point::operator*=::t_factor"], [72, 3, 1, "_CPPv4N4idol5PointmLENSt13conditional_tINSt15is_arithmetic_vIdEEddEE", "idol::Point::operator*=::t_scalar"], [72, 2, 1, "_CPPv4N4idol5PointpLERK12SparseVector", "idol::Point::operator+="], [72, 2, 1, "_CPPv4N4idol5PointpLERK5Point", "idol::Point::operator+="], [72, 2, 1, "_CPPv4N4idol5PointpLERR5Point", "idol::Point::operator+="], [72, 3, 1, "_CPPv4N4idol5PointpLERK5Point", "idol::Point::operator+=::t_other"], [72, 3, 1, "_CPPv4N4idol5PointpLERR5Point", "idol::Point::operator+=::t_other"], [72, 3, 1, "_CPPv4N4idol5PointpLERK12SparseVector", "idol::Point::operator+=::t_vector"], [72, 2, 1, "_CPPv4NK4idol5PointmiEv", "idol::Point::operator-"], [72, 2, 1, "_CPPv4N4idol5PointmIERK12SparseVector", "idol::Point::operator-="], [72, 2, 1, "_CPPv4N4idol5PointmIERK5Point", "idol::Point::operator-="], [72, 2, 1, "_CPPv4N4idol5PointmIERR5Point", "idol::Point::operator-="], [72, 3, 1, "_CPPv4N4idol5PointmIERK5Point", "idol::Point::operator-=::t_other"], [72, 3, 1, "_CPPv4N4idol5PointmIERR5Point", "idol::Point::operator-=::t_other"], [72, 3, 1, "_CPPv4N4idol5PointmIERK12SparseVector", "idol::Point::operator-=::t_vector"], [72, 2, 1, "_CPPv4N4idol5PointdVENSt13conditional_tINSt15is_arithmetic_vIdEEddEE", "idol::Point::operator/="], [72, 3, 1, "_CPPv4N4idol5PointdVENSt13conditional_tINSt15is_arithmetic_vIdEEddEE", "idol::Point::operator/=::t_scalar"], [72, 2, 1, "_CPPv4NK4idol5Point6reasonEv", "idol::Point::reason"], [72, 2, 1, "_CPPv4N4idol5Point6removeERK1T", "idol::Point::remove"], [72, 3, 1, "_CPPv4N4idol5Point6removeERK1T", "idol::Point::remove::t_index"], [72, 2, 1, "_CPPv4N4idol5Point7reserveEj", "idol::Point::reserve"], [72, 3, 1, "_CPPv4N4idol5Point7reserveEj", "idol::Point::reserve::t_capacity"], [72, 2, 1, "_CPPv4N4idol5Point21reset_objective_valueEv", "idol::Point::reset_objective_value"], [72, 2, 1, "_CPPv4N4idol5Point3setERK1TRKd", "idol::Point::set"], [72, 3, 1, "_CPPv4N4idol5Point3setERK1TRKd", "idol::Point::set::t_index"], [72, 3, 1, "_CPPv4N4idol5Point3setERK1TRKd", "idol::Point::set::t_value"], [72, 2, 1, "_CPPv4N4idol5Point19set_objective_valueEd", "idol::Point::set_objective_value"], [72, 3, 1, "_CPPv4N4idol5Point19set_objective_valueEd", "idol::Point::set_objective_value::t_objective_value"], [72, 2, 1, "_CPPv4N4idol5Point10set_reasonE14SolutionReason", "idol::Point::set_reason"], [72, 3, 1, "_CPPv4N4idol5Point10set_reasonE14SolutionReason", "idol::Point::set_reason::t_reason"], [72, 2, 1, "_CPPv4N4idol5Point10set_statusE14SolutionStatus", "idol::Point::set_status"], [72, 3, 1, "_CPPv4N4idol5Point10set_statusE14SolutionStatus", "idol::Point::set_status::t_status"], [72, 2, 1, "_CPPv4NK4idol5Point4sizeEv", "idol::Point::size"], [72, 2, 1, "_CPPv4NK4idol5Point6statusEv", "idol::Point::status"], [84, 6, 1, "_CPPv4N4idol13CallbackEvent14PrunedSolutionE", "idol::PrunedSolution"], [36, 1, 1, "_CPPv4N4idol10PseudoCostE", "idol::PseudoCost"], [36, 2, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost"], [36, 2, 1, "_CPPv4N4idol10PseudoCost10PseudoCostEv", "idol::PseudoCost::PseudoCost"], [36, 4, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost::IteratorT"], [36, 3, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost::t_begin"], [36, 3, 1, "_CPPv4I0EN4idol10PseudoCost10PseudoCostE9IteratorT9IteratorT", "idol::PseudoCost::PseudoCost::t_end"], [36, 1, 1, "_CPPv4I0EN4idol10PseudoCost8StrategyE", "idol::PseudoCost::Strategy"], [36, 4, 1, "_CPPv4I0EN4idol10PseudoCost8StrategyE", "idol::PseudoCost::Strategy::NodeInfoT"], [36, 2, 1, "_CPPv4N4idol10PseudoCost8Strategy8StrategyERK10PseudoCost", "idol::PseudoCost::Strategy::Strategy"], [36, 2, 1, "_CPPv4N4idol10PseudoCost8Strategy8StrategyEv", "idol::PseudoCost::Strategy::Strategy"], [36, 3, 1, "_CPPv4N4idol10PseudoCost8Strategy8StrategyERK10PseudoCost", "idol::PseudoCost::Strategy::Strategy::t_parent"], [36, 2, 1, "_CPPv4NK4idol10PseudoCost8Strategy5cloneEv", "idol::PseudoCost::Strategy::clone"], [36, 2, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::PseudoCost::Strategy::operator()"], [36, 2, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::PseudoCost::Strategy::operator()"], [36, 3, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::PseudoCost::Strategy::operator()::t_parent"], [36, 3, 1, "_CPPv4NK4idol10PseudoCost8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::PseudoCost::Strategy::operator()::t_parent"], [73, 1, 1, "_CPPv4N4idol4QCtrE", "idol::QCtr"], [73, 2, 1, "_CPPv4N4idol4QCtr4QCtrER3Env7CtrTypeNSt6stringE", "idol::QCtr::QCtr"], [73, 2, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRK8TempQCtrNSt6stringE", "idol::QCtr::QCtr"], [73, 2, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRR8TempQCtrNSt6stringE", "idol::QCtr::QCtr"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3Env7CtrTypeNSt6stringE", "idol::QCtr::QCtr::t_env"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRK8TempQCtrNSt6stringE", "idol::QCtr::QCtr::t_env"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRR8TempQCtrNSt6stringE", "idol::QCtr::QCtr::t_env"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3Env7CtrTypeNSt6stringE", "idol::QCtr::QCtr::t_name"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRK8TempQCtrNSt6stringE", "idol::QCtr::QCtr::t_name"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRR8TempQCtrNSt6stringE", "idol::QCtr::QCtr::t_name"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRK8TempQCtrNSt6stringE", "idol::QCtr::QCtr::t_temp_ctr"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3EnvRR8TempQCtrNSt6stringE", "idol::QCtr::QCtr::t_temp_ctr"], [73, 3, 1, "_CPPv4N4idol4QCtr4QCtrER3Env7CtrTypeNSt6stringE", "idol::QCtr::QCtr::t_type"], [73, 2, 1, "_CPPv4NK4idol4QCtr3getERK10AnnotationI6ValueTE", "idol::QCtr::get"], [73, 3, 1, "_CPPv4NK4idol4QCtr3getERK10AnnotationI6ValueTE", "idol::QCtr::get::t_annotation"], [73, 2, 1, "_CPPv4NK4idol4QCtr2idEv", "idol::QCtr::id"], [73, 2, 1, "_CPPv4NK4idol4QCtr5indexERK5Model", "idol::QCtr::index"], [73, 3, 1, "_CPPv4NK4idol4QCtr5indexERK5Model", "idol::QCtr::index::t_model"], [73, 2, 1, "_CPPv4NK4idol4QCtr5is_inERK5Model", "idol::QCtr::is_in"], [73, 3, 1, "_CPPv4NK4idol4QCtr5is_inERK5Model", "idol::QCtr::is_in::t_model"], [73, 2, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector"], [73, 4, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector::I"], [73, 4, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector::N"], [73, 3, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector::t_dim"], [73, 3, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector::t_env"], [73, 3, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector::t_name"], [73, 3, 1, "_CPPv4I_j_jEN4idol4QCtr11make_vectorE6VectorI3CtrXmi1N1IEER3EnvRK3DimI1NE7CtrTypeRKNSt6stringE", "idol::QCtr::make_vector::t_type"], [73, 2, 1, "_CPPv4NK4idol4QCtr4nameEv", "idol::QCtr::name"], [73, 2, 1, "_CPPv4NK4idol4QCtr3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::QCtr::set"], [73, 3, 1, "_CPPv4NK4idol4QCtr3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::QCtr::set::t_annotation"], [73, 3, 1, "_CPPv4NK4idol4QCtr3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::QCtr::set::t_args"], [74, 1, 1, "_CPPv4I00EN4idol8QuadExprE", "idol::QuadExpr"], [74, 4, 1, "_CPPv4I00EN4idol8QuadExprE", "idol::QuadExpr::KeyT"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprE6ValueT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprE7AffExprI4KeyT6ValueTE", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprE7LinExprI4KeyT6ValueTE", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR8QuadExpr", "idol::QuadExpr::QuadExpr"], [74, 2, 1, "_CPPv4N4idol8QuadExpr8QuadExprEv", "idol::QuadExpr::QuadExpr"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprE6ValueT", "idol::QuadExpr::QuadExpr::t_constant"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprE7AffExprI4KeyT6ValueTE", "idol::QuadExpr::QuadExpr::t_expr"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprE7LinExprI4KeyT6ValueTE", "idol::QuadExpr::QuadExpr::t_expr"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyT", "idol::QuadExpr::QuadExpr::t_factor"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_factor"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyT", "idol::QuadExpr::QuadExpr::t_factor"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_factor"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyT", "idol::QuadExpr::QuadExpr::t_key"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key1"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key1"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key1"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key2"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key2"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERR6ValueTRK4KeyTRK4KeyT", "idol::QuadExpr::QuadExpr::t_key2"], [74, 3, 1, "_CPPv4N4idol8QuadExpr8QuadExprERK8QuadExpr", "idol::QuadExpr::QuadExpr::t_src"], [74, 4, 1, "_CPPv4I00EN4idol8QuadExprE", "idol::QuadExpr::ValueT"], [74, 5, 1, "_CPPv4N4idol8QuadExpr4ZeroE", "idol::QuadExpr::Zero"], [74, 2, 1, "_CPPv4N4idol8QuadExpr6affineEv", "idol::QuadExpr::affine"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr6affineEv", "idol::QuadExpr::affine"], [74, 2, 1, "_CPPv4N4idol8QuadExpr5beginEv", "idol::QuadExpr::begin"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr5beginEv", "idol::QuadExpr::begin"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr6cbeginEv", "idol::QuadExpr::cbegin"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr4cendEv", "idol::QuadExpr::cend"], [74, 2, 1, "_CPPv4N4idol8QuadExpr5clearEv", "idol::QuadExpr::clear"], [74, 2, 1, "_CPPv4N4idol8QuadExpr9clear_allEv", "idol::QuadExpr::clear_all"], [74, 0, 1, "_CPPv4N4idol8QuadExpr14const_iteratorE", "idol::QuadExpr::const_iterator"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr5emptyEv", "idol::QuadExpr::empty"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr9empty_allEv", "idol::QuadExpr::empty_all"], [74, 2, 1, "_CPPv4N4idol8QuadExpr3endEv", "idol::QuadExpr::end"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr3endEv", "idol::QuadExpr::end"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr3getERK6IndexT", "idol::QuadExpr::get"], [74, 3, 1, "_CPPv4NK4idol8QuadExpr3getERK6IndexT", "idol::QuadExpr::get::t_index1"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr9has_indexERK6IndexT", "idol::QuadExpr::has_index"], [74, 3, 1, "_CPPv4NK4idol8QuadExpr9has_indexERK6IndexT", "idol::QuadExpr::has_index::t_index"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr13has_quadraticEv", "idol::QuadExpr::has_quadratic"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr7is_zeroEd", "idol::QuadExpr::is_zero"], [74, 3, 1, "_CPPv4NK4idol8QuadExpr7is_zeroEd", "idol::QuadExpr::is_zero::t_tolerance"], [74, 0, 1, "_CPPv4N4idol8QuadExpr8iteratorE", "idol::QuadExpr::iterator"], [74, 2, 1, "_CPPv4N4idol8QuadExpr22merge_without_conflictERK12SparseVector", "idol::QuadExpr::merge_without_conflict"], [74, 3, 1, "_CPPv4N4idol8QuadExpr22merge_without_conflictERK12SparseVector", "idol::QuadExpr::merge_without_conflict::t_vec"], [74, 2, 1, "_CPPv4N4idol8QuadExprmLENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::QuadExpr::operator*="], [74, 2, 1, "_CPPv4N4idol8QuadExprmLEd", "idol::QuadExpr::operator*="], [74, 3, 1, "_CPPv4N4idol8QuadExprmLEd", "idol::QuadExpr::operator*=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprmLENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::QuadExpr::operator*=::t_scalar"], [74, 2, 1, "_CPPv4N4idol8QuadExprpLERK12SparseVector", "idol::QuadExpr::operator+="], [74, 2, 1, "_CPPv4N4idol8QuadExprpLERK4KeyT", "idol::QuadExpr::operator+="], [74, 2, 1, "_CPPv4N4idol8QuadExprpLERK7LinExprI4KeyT6ValueTE", "idol::QuadExpr::operator+="], [74, 2, 1, "_CPPv4N4idol8QuadExprpLERK8QuadExpr", "idol::QuadExpr::operator+="], [74, 3, 1, "_CPPv4N4idol8QuadExprpLERK4KeyT", "idol::QuadExpr::operator+=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprpLERK7LinExprI4KeyT6ValueTE", "idol::QuadExpr::operator+=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprpLERK8QuadExpr", "idol::QuadExpr::operator+=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprpLERK12SparseVector", "idol::QuadExpr::operator+=::t_vector"], [74, 2, 1, "_CPPv4NK4idol8QuadExprmiEv", "idol::QuadExpr::operator-"], [74, 2, 1, "_CPPv4N4idol8QuadExprmIERK12SparseVector", "idol::QuadExpr::operator-="], [74, 2, 1, "_CPPv4N4idol8QuadExprmIERK4KeyT", "idol::QuadExpr::operator-="], [74, 2, 1, "_CPPv4N4idol8QuadExprmIERK7LinExprI4KeyT6ValueTE", "idol::QuadExpr::operator-="], [74, 2, 1, "_CPPv4N4idol8QuadExprmIERK8QuadExpr", "idol::QuadExpr::operator-="], [74, 3, 1, "_CPPv4N4idol8QuadExprmIERK4KeyT", "idol::QuadExpr::operator-=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprmIERK7LinExprI4KeyT6ValueTE", "idol::QuadExpr::operator-=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprmIERK8QuadExpr", "idol::QuadExpr::operator-=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprmIERK12SparseVector", "idol::QuadExpr::operator-=::t_vector"], [74, 2, 1, "_CPPv4N4idol8QuadExprdVENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::QuadExpr::operator/="], [74, 2, 1, "_CPPv4N4idol8QuadExprdVEd", "idol::QuadExpr::operator/="], [74, 3, 1, "_CPPv4N4idol8QuadExprdVEd", "idol::QuadExpr::operator/=::t_rhs"], [74, 3, 1, "_CPPv4N4idol8QuadExprdVENSt13conditional_tINSt15is_arithmetic_vI6ValueTEE6ValueTdEE", "idol::QuadExpr::operator/=::t_scalar"], [74, 2, 1, "_CPPv4N4idol8QuadExpraSERK8QuadExpr", "idol::QuadExpr::operator="], [74, 2, 1, "_CPPv4N4idol8QuadExpraSERR8QuadExpr", "idol::QuadExpr::operator="], [74, 3, 1, "_CPPv4N4idol8QuadExpraSERK8QuadExpr", "idol::QuadExpr::operator=::t_rhs"], [74, 2, 1, "_CPPv4N4idol8QuadExpr6removeERK6IndexT", "idol::QuadExpr::remove"], [74, 3, 1, "_CPPv4N4idol8QuadExpr6removeERK6IndexT", "idol::QuadExpr::remove::t_index"], [74, 2, 1, "_CPPv4N4idol8QuadExpr7reserveEj", "idol::QuadExpr::reserve"], [74, 3, 1, "_CPPv4N4idol8QuadExpr7reserveEj", "idol::QuadExpr::reserve::t_capacity"], [74, 2, 1, "_CPPv4N4idol8QuadExpr3setERK6IndexTRK6ValueT", "idol::QuadExpr::set"], [74, 3, 1, "_CPPv4N4idol8QuadExpr3setERK6IndexTRK6ValueT", "idol::QuadExpr::set::t_index"], [74, 3, 1, "_CPPv4N4idol8QuadExpr3setERK6IndexTRK6ValueT", "idol::QuadExpr::set::t_value"], [74, 2, 1, "_CPPv4NK4idol8QuadExpr4sizeEv", "idol::QuadExpr::size"], [82, 1, 1, "_CPPv4N4idol6Robust11DescriptionE", "idol::Robust::Description"], [82, 2, 1, "_CPPv4N4idol6Robust11Description11DescriptionERK5Model", "idol::Robust::Description::Description"], [82, 3, 1, "_CPPv4N4idol6Robust11Description11DescriptionERK5Model", "idol::Robust::Description::Description::t_uncertainty_set"], [82, 1, 1, "_CPPv4N4idol6Robust11Description4ViewE", "idol::Robust::Description::View"], [82, 2, 1, "_CPPv4N4idol6Robust11Description4View4ViewERK5ModelRK11Description", "idol::Robust::Description::View::View"], [82, 3, 1, "_CPPv4N4idol6Robust11Description4View4ViewERK5ModelRK11Description", "idol::Robust::Description::View::View::t_description"], [82, 3, 1, "_CPPv4N4idol6Robust11Description4View4ViewERK5ModelRK11Description", "idol::Robust::Description::View::View::t_deterministic_model"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description4View11descriptionEv", "idol::Robust::Description::View::description"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description4View19deterministic_modelEv", "idol::Robust::Description::View::deterministic_model"], [82, 2, 1, "_CPPv4N4idol6Robust11Description9set_stageERK3Varj", "idol::Robust::Description::set_stage"], [82, 3, 1, "_CPPv4N4idol6Robust11Description9set_stageERK3Varj", "idol::Robust::Description::set_stage::t_stage"], [82, 3, 1, "_CPPv4N4idol6Robust11Description9set_stageERK3Varj", "idol::Robust::Description::set_stage::t_var"], [82, 2, 1, "_CPPv4N4idol6Robust11Description23set_uncertain_mat_coeffERK3CtrRK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_mat_coeff"], [82, 3, 1, "_CPPv4N4idol6Robust11Description23set_uncertain_mat_coeffERK3CtrRK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_mat_coeff::t_coeff"], [82, 3, 1, "_CPPv4N4idol6Robust11Description23set_uncertain_mat_coeffERK3CtrRK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_mat_coeff::t_ctr"], [82, 3, 1, "_CPPv4N4idol6Robust11Description23set_uncertain_mat_coeffERK3CtrRK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_mat_coeff::t_var"], [82, 2, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_objE7LinExprI3Var7LinExprI3VarEE", "idol::Robust::Description::set_uncertain_obj"], [82, 2, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_objERK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_obj"], [82, 3, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_objE7LinExprI3Var7LinExprI3VarEE", "idol::Robust::Description::set_uncertain_obj::t_obj"], [82, 3, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_objERK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_obj::t_obj"], [82, 3, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_objERK3VarRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_obj::t_var"], [82, 2, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsE7LinExprI3Ctr7LinExprI3VarEE", "idol::Robust::Description::set_uncertain_rhs"], [82, 2, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsERK3CtrRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_rhs"], [82, 3, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsERK3CtrRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_rhs::t_ctr"], [82, 3, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsE7LinExprI3Ctr7LinExprI3VarEE", "idol::Robust::Description::set_uncertain_rhs::t_rhs"], [82, 3, 1, "_CPPv4N4idol6Robust11Description17set_uncertain_rhsERK3CtrRK7LinExprI3VarE", "idol::Robust::Description::set_uncertain_rhs::t_rhs"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description5stageERK3Ctr", "idol::Robust::Description::stage"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description5stageERK3Var", "idol::Robust::Description::stage"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description5stageERK3Ctr", "idol::Robust::Description::stage::t_var"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description5stageERK3Var", "idol::Robust::Description::stage::t_var"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description16stage_annotationEv", "idol::Robust::Description::stage_annotation"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description19uncertain_mat_coeffERK3CtrRK3Var", "idol::Robust::Description::uncertain_mat_coeff"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description19uncertain_mat_coeffERK3CtrRK3Var", "idol::Robust::Description::uncertain_mat_coeff::t_ctr"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description19uncertain_mat_coeffERK3CtrRK3Var", "idol::Robust::Description::uncertain_mat_coeff::t_var"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description20uncertain_mat_coeffsERK3Ctr", "idol::Robust::Description::uncertain_mat_coeffs"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description20uncertain_mat_coeffsEv", "idol::Robust::Description::uncertain_mat_coeffs"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description20uncertain_mat_coeffsERK3Ctr", "idol::Robust::Description::uncertain_mat_coeffs::t_ctr"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description13uncertain_objERK3Var", "idol::Robust::Description::uncertain_obj"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description13uncertain_objEv", "idol::Robust::Description::uncertain_obj"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description13uncertain_objERK3Var", "idol::Robust::Description::uncertain_obj::t_var"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description13uncertain_rhsERK3Ctr", "idol::Robust::Description::uncertain_rhs"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description13uncertain_rhsEv", "idol::Robust::Description::uncertain_rhs"], [82, 3, 1, "_CPPv4NK4idol6Robust11Description13uncertain_rhsERK3Ctr", "idol::Robust::Description::uncertain_rhs::t_ctr"], [82, 2, 1, "_CPPv4NK4idol6Robust11Description15uncertainty_setEv", "idol::Robust::Description::uncertainty_set"], [37, 1, 1, "_CPPv4N4idol15StrongBranchingE", "idol::StrongBranching"], [37, 1, 1, "_CPPv4I0EN4idol15StrongBranching8StrategyE", "idol::StrongBranching::Strategy"], [37, 4, 1, "_CPPv4I0EN4idol15StrongBranching8StrategyE", "idol::StrongBranching::Strategy::NodeInfoT"], [37, 2, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK15StrongBranching", "idol::StrongBranching::Strategy::Strategy"], [37, 2, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK8StrategyI9NodeInfoTE", "idol::StrongBranching::Strategy::Strategy"], [37, 2, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyEv", "idol::StrongBranching::Strategy::Strategy"], [37, 3, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK15StrongBranching", "idol::StrongBranching::Strategy::Strategy::t_parent"], [37, 3, 1, "_CPPv4N4idol15StrongBranching8Strategy8StrategyERK8StrategyI9NodeInfoTE", "idol::StrongBranching::Strategy::Strategy::t_src"], [37, 2, 1, "_CPPv4NK4idol15StrongBranching8Strategy5cloneEv", "idol::StrongBranching::Strategy::clone"], [37, 2, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::StrongBranching::Strategy::operator()"], [37, 2, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::StrongBranching::Strategy::operator()"], [37, 3, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::StrongBranching::Strategy::operator()::t_parent"], [37, 3, 1, "_CPPv4NK4idol15StrongBranching8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::StrongBranching::Strategy::operator()::t_parent"], [37, 2, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching"], [37, 2, 1, "_CPPv4N4idol15StrongBranching15StrongBranchingEv", "idol::StrongBranching::StrongBranching"], [37, 4, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching::IteratorT"], [37, 3, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching::t_begin"], [37, 3, 1, "_CPPv4I0EN4idol15StrongBranching15StrongBranchingE9IteratorT9IteratorT", "idol::StrongBranching::StrongBranching::t_end"], [37, 2, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase"], [37, 3, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase::t_max_depth"], [37, 3, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase::t_max_n_variables"], [37, 3, 1, "_CPPv4N4idol15StrongBranching9add_phaseERK24StrongBranchingPhaseTypejj", "idol::StrongBranching::add_phase::t_phase"], [37, 2, 1, "_CPPv4N4idol15StrongBranching20with_max_n_variablesEj", "idol::StrongBranching::with_max_n_variables"], [37, 3, 1, "_CPPv4N4idol15StrongBranching20with_max_n_variablesEj", "idol::StrongBranching::with_max_n_variables::t_n_variables"], [37, 2, 1, "_CPPv4N4idol15StrongBranching26with_node_scoring_functionERK17NodeScoreFunction", "idol::StrongBranching::with_node_scoring_function"], [37, 3, 1, "_CPPv4N4idol15StrongBranching26with_node_scoring_functionERK17NodeScoreFunction", "idol::StrongBranching::with_node_scoring_function::t_score_function"], [75, 1, 1, "_CPPv4N4idol7TempCtrE", "idol::TempCtr"], [75, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", "idol::TempCtr::TempCtr"], [75, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7LinExprI3VarE7CtrTyped", "idol::TempCtr::TempCtr"], [75, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", "idol::TempCtr::TempCtr"], [75, 2, 1, "_CPPv4N4idol7TempCtr7TempCtrEv", "idol::TempCtr::TempCtr"], [75, 3, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7LinExprI3VarE7CtrTyped", "idol::TempCtr::TempCtr::t_lhs"], [75, 3, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7LinExprI3VarE7CtrTyped", "idol::TempCtr::TempCtr::t_rhs"], [75, 3, 1, "_CPPv4N4idol7TempCtr7TempCtrERK7TempCtr", "idol::TempCtr::TempCtr::t_src"], [75, 3, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7TempCtr", "idol::TempCtr::TempCtr::t_src"], [75, 3, 1, "_CPPv4N4idol7TempCtr7TempCtrERR7LinExprI3VarE7CtrTyped", "idol::TempCtr::TempCtr::t_type"], [75, 2, 1, "_CPPv4N4idol7TempCtr3lhsEv", "idol::TempCtr::lhs"], [75, 2, 1, "_CPPv4NK4idol7TempCtr3lhsEv", "idol::TempCtr::lhs"], [75, 2, 1, "_CPPv4N4idol7TempCtraSERK7TempCtr", "idol::TempCtr::operator="], [75, 2, 1, "_CPPv4N4idol7TempCtraSERR7TempCtr", "idol::TempCtr::operator="], [75, 3, 1, "_CPPv4N4idol7TempCtraSERK7TempCtr", "idol::TempCtr::operator=::t_src"], [75, 3, 1, "_CPPv4N4idol7TempCtraSERR7TempCtr", "idol::TempCtr::operator=::t_src"], [75, 2, 1, "_CPPv4N4idol7TempCtr3rhsEv", "idol::TempCtr::rhs"], [75, 2, 1, "_CPPv4NK4idol7TempCtr3rhsEv", "idol::TempCtr::rhs"], [75, 2, 1, "_CPPv4N4idol7TempCtr7set_lhsERR7LinExprI3VarE", "idol::TempCtr::set_lhs"], [75, 3, 1, "_CPPv4N4idol7TempCtr7set_lhsERR7LinExprI3VarE", "idol::TempCtr::set_lhs::t_lhs"], [75, 2, 1, "_CPPv4N4idol7TempCtr7set_rhsEd", "idol::TempCtr::set_rhs"], [75, 3, 1, "_CPPv4N4idol7TempCtr7set_rhsEd", "idol::TempCtr::set_rhs::t_rhs"], [75, 2, 1, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", "idol::TempCtr::set_type"], [75, 3, 1, "_CPPv4N4idol7TempCtr8set_typeE7CtrType", "idol::TempCtr::set_type::t_type"], [75, 2, 1, "_CPPv4NK4idol7TempCtr4typeEv", "idol::TempCtr::type"], [76, 1, 1, "_CPPv4N4idol8TempQCtrE", "idol::TempQCtr"], [76, 2, 1, "_CPPv4N4idol8TempQCtr8TempQCtrERK8TempQCtr", "idol::TempQCtr::TempQCtr"], [76, 2, 1, "_CPPv4N4idol8TempQCtr8TempQCtrERR8QuadExprI3VarE7CtrType", "idol::TempQCtr::TempQCtr"], [76, 2, 1, "_CPPv4N4idol8TempQCtr8TempQCtrERR8TempQCtr", "idol::TempQCtr::TempQCtr"], [76, 2, 1, "_CPPv4N4idol8TempQCtr8TempQCtrEv", "idol::TempQCtr::TempQCtr"], [76, 3, 1, "_CPPv4N4idol8TempQCtr8TempQCtrERR8QuadExprI3VarE7CtrType", "idol::TempQCtr::TempQCtr::t_expr"], [76, 3, 1, "_CPPv4N4idol8TempQCtr8TempQCtrERK8TempQCtr", "idol::TempQCtr::TempQCtr::t_src"], [76, 3, 1, "_CPPv4N4idol8TempQCtr8TempQCtrERR8QuadExprI3VarE7CtrType", "idol::TempQCtr::TempQCtr::t_type"], [76, 2, 1, "_CPPv4N4idol8TempQCtr4exprEv", "idol::TempQCtr::expr"], [76, 2, 1, "_CPPv4NK4idol8TempQCtr4exprEv", "idol::TempQCtr::expr"], [76, 2, 1, "_CPPv4N4idol8TempQCtraSERK8TempQCtr", "idol::TempQCtr::operator="], [76, 2, 1, "_CPPv4N4idol8TempQCtraSERR8TempQCtr", "idol::TempQCtr::operator="], [76, 3, 1, "_CPPv4N4idol8TempQCtraSERK8TempQCtr", "idol::TempQCtr::operator=::t_rhs"], [76, 2, 1, "_CPPv4N4idol8TempQCtr8set_exprERR8QuadExprI3VarE", "idol::TempQCtr::set_expr"], [76, 3, 1, "_CPPv4N4idol8TempQCtr8set_exprERR8QuadExprI3VarE", "idol::TempQCtr::set_expr::t_expr"], [76, 2, 1, "_CPPv4N4idol8TempQCtr8set_typeE7CtrType", "idol::TempQCtr::set_type"], [76, 3, 1, "_CPPv4N4idol8TempQCtr8set_typeE7CtrType", "idol::TempQCtr::set_type::t_type"], [76, 2, 1, "_CPPv4NK4idol8TempQCtr4typeEv", "idol::TempQCtr::type"], [77, 1, 1, "_CPPv4N4idol7TempVarE", "idol::TempVar"], [77, 2, 1, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", "idol::TempVar::TempVar"], [77, 2, 1, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", "idol::TempVar::TempVar"], [77, 2, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", "idol::TempVar::TempVar"], [77, 2, 1, "_CPPv4N4idol7TempVar7TempVarEv", "idol::TempVar::TempVar"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", "idol::TempVar::TempVar::t_column"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", "idol::TempVar::TempVar::t_lb"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", "idol::TempVar::TempVar::t_obj"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarERK7TempVar", "idol::TempVar::TempVar::t_src"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarERR7TempVar", "idol::TempVar::TempVar::t_src"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", "idol::TempVar::TempVar::t_type"], [77, 3, 1, "_CPPv4N4idol7TempVar7TempVarEdd7VarTypedRR7LinExprI3CtrE", "idol::TempVar::TempVar::t_ub"], [77, 2, 1, "_CPPv4N4idol7TempVar6columnEv", "idol::TempVar::column"], [77, 2, 1, "_CPPv4NK4idol7TempVar6columnEv", "idol::TempVar::column"], [77, 2, 1, "_CPPv4NK4idol7TempVar2lbEv", "idol::TempVar::lb"], [77, 2, 1, "_CPPv4NK4idol7TempVar3objEv", "idol::TempVar::obj"], [77, 2, 1, "_CPPv4N4idol7TempVaraSERK7TempVar", "idol::TempVar::operator="], [77, 2, 1, "_CPPv4N4idol7TempVaraSERR7TempVar", "idol::TempVar::operator="], [77, 3, 1, "_CPPv4N4idol7TempVaraSERK7TempVar", "idol::TempVar::operator=::t_src"], [77, 3, 1, "_CPPv4N4idol7TempVaraSERR7TempVar", "idol::TempVar::operator=::t_src"], [77, 2, 1, "_CPPv4N4idol7TempVar6set_lbEd", "idol::TempVar::set_lb"], [77, 3, 1, "_CPPv4N4idol7TempVar6set_lbEd", "idol::TempVar::set_lb::t_lb"], [77, 2, 1, "_CPPv4N4idol7TempVar7set_objEd", "idol::TempVar::set_obj"], [77, 3, 1, "_CPPv4N4idol7TempVar7set_objEd", "idol::TempVar::set_obj::t_obj"], [77, 2, 1, "_CPPv4N4idol7TempVar8set_typeE7VarType", "idol::TempVar::set_type"], [77, 3, 1, "_CPPv4N4idol7TempVar8set_typeE7VarType", "idol::TempVar::set_type::t_type"], [77, 2, 1, "_CPPv4N4idol7TempVar6set_ubEd", "idol::TempVar::set_ub"], [77, 3, 1, "_CPPv4N4idol7TempVar6set_ubEd", "idol::TempVar::set_ub::t_ub"], [77, 2, 1, "_CPPv4NK4idol7TempVar4typeEv", "idol::TempVar::type"], [77, 2, 1, "_CPPv4NK4idol7TempVar2ubEv", "idol::TempVar::ub"], [64, 0, 1, "_CPPv4N4idol9ToleranceE", "idol::Tolerance"], [64, 5, 1, "_CPPv4N4idol9Tolerance6DigitsE", "idol::Tolerance::Digits"], [64, 5, 1, "_CPPv4N4idol9Tolerance11FeasibilityE", "idol::Tolerance::Feasibility"], [64, 5, 1, "_CPPv4N4idol9Tolerance7IntegerE", "idol::Tolerance::Integer"], [64, 5, 1, "_CPPv4N4idol9Tolerance14MIPAbsoluteGapE", "idol::Tolerance::MIPAbsoluteGap"], [64, 5, 1, "_CPPv4N4idol9Tolerance14MIPRelativeGapE", "idol::Tolerance::MIPRelativeGap"], [64, 5, 1, "_CPPv4N4idol9Tolerance10OptimalityE", "idol::Tolerance::Optimality"], [64, 5, 1, "_CPPv4N4idol9Tolerance8SparsityE", "idol::Tolerance::Sparsity"], [38, 1, 1, "_CPPv4N4idol15UniformlyRandomE", "idol::UniformlyRandom"], [38, 1, 1, "_CPPv4I0EN4idol15UniformlyRandom8StrategyE", "idol::UniformlyRandom::Strategy"], [38, 4, 1, "_CPPv4I0EN4idol15UniformlyRandom8StrategyE", "idol::UniformlyRandom::Strategy::NodeInfoT"], [38, 2, 1, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyERK15UniformlyRandom", "idol::UniformlyRandom::Strategy::Strategy"], [38, 2, 1, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyEv", "idol::UniformlyRandom::Strategy::Strategy"], [38, 3, 1, "_CPPv4N4idol15UniformlyRandom8Strategy8StrategyERK15UniformlyRandom", "idol::UniformlyRandom::Strategy::Strategy::t_parent"], [38, 2, 1, "_CPPv4NK4idol15UniformlyRandom8Strategy5cloneEv", "idol::UniformlyRandom::Strategy::clone"], [38, 2, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::UniformlyRandom::Strategy::operator()"], [38, 2, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::UniformlyRandom::Strategy::operator()"], [38, 3, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI5NodeTEE", "idol::UniformlyRandom::Strategy::operator()::t_parent"], [38, 3, 1, "_CPPv4NK4idol15UniformlyRandom8StrategyclERKN10Optimizers14BranchAndBoundI9NodeInfoTEE", "idol::UniformlyRandom::Strategy::operator()::t_parent"], [38, 2, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom"], [38, 2, 1, "_CPPv4N4idol15UniformlyRandom15UniformlyRandomEv", "idol::UniformlyRandom::UniformlyRandom"], [38, 4, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom::IteratorT"], [38, 3, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom::t_begin"], [38, 3, 1, "_CPPv4I0EN4idol15UniformlyRandom15UniformlyRandomE9IteratorT9IteratorT", "idol::UniformlyRandom::UniformlyRandom::t_end"], [38, 2, 1, "_CPPv4N4idol15UniformlyRandom9with_seedEj", "idol::UniformlyRandom::with_seed"], [38, 3, 1, "_CPPv4N4idol15UniformlyRandom9with_seedEj", "idol::UniformlyRandom::with_seed::t_seed"], [15, 1, 1, "_CPPv4N4idol15UserCutCallbackE", "idol::UserCutCallback"], [15, 1, 1, "_CPPv4N4idol15UserCutCallback8StrategyE", "idol::UserCutCallback::Strategy"], [15, 2, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::UserCutCallback::Strategy::Strategy"], [15, 3, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::UserCutCallback::Strategy::Strategy::t_cut"], [15, 3, 1, "_CPPv4N4idol15UserCutCallback8Strategy8StrategyEP5Model7TempCtr", "idol::UserCutCallback::Strategy::Strategy::t_separation_problem"], [15, 2, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback"], [15, 3, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback::t_cut"], [15, 3, 1, "_CPPv4N4idol15UserCutCallback15UserCutCallbackERK5Model7TempCtr", "idol::UserCutCallback::UserCutCallback::t_model"], [15, 2, 1, "_CPPv4NK4idol15UserCutCallback5cloneEv", "idol::UserCutCallback::clone"], [15, 2, 1, "_CPPv4N4idol15UserCutCallbackclEv", "idol::UserCutCallback::operator()"], [15, 2, 1, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::UserCutCallback::with_separation_optimizer"], [15, 3, 1, "_CPPv4N4idol15UserCutCallback25with_separation_optimizerERK16OptimizerFactory", "idol::UserCutCallback::with_separation_optimizer::t_optimizer_factory"], [78, 1, 1, "_CPPv4N4idol3VarE", "idol::Var"], [78, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var"], [78, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var"], [78, 2, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var"], [78, 2, 1, "_CPPv4N4idol3Var3VarERK3Var", "idol::Var::Var"], [78, 2, 1, "_CPPv4N4idol3Var3VarERR3Var", "idol::Var::Var"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_column"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_column"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var::t_env"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_env"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_env"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var::t_lb"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_lb"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_lb"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var::t_name"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_name"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_name"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var::t_obj"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_obj"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_obj"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var::t_type"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_type"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_type"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedNSt6stringE", "idol::Var::Var::t_ub"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRK7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_ub"], [78, 3, 1, "_CPPv4N4idol3Var3VarER3Envdd7VarTypedRR7LinExprI3CtrdENSt6stringE", "idol::Var::Var::t_ub"], [78, 2, 1, "_CPPv4NK4idol3Var3getERK10AnnotationI6ValueTE", "idol::Var::get"], [78, 3, 1, "_CPPv4NK4idol3Var3getERK10AnnotationI6ValueTE", "idol::Var::get::t_annotation"], [78, 2, 1, "_CPPv4NK4idol3Var2idEv", "idol::Var::id"], [78, 2, 1, "_CPPv4NK4idol3Var5indexERK5Model", "idol::Var::index"], [78, 3, 1, "_CPPv4NK4idol3Var5indexERK5Model", "idol::Var::index::t_model"], [78, 2, 1, "_CPPv4NK4idol3Var5is_inERK5Model", "idol::Var::is_in"], [78, 3, 1, "_CPPv4NK4idol3Var5is_inERK5Model", "idol::Var::is_in::t_model"], [78, 2, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector"], [78, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::I"], [78, 4, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::N"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_dim"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_env"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_lb"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_name"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_obj"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_type"], [78, 3, 1, "_CPPv4I_j_jEN4idol3Var11make_vectorE6VectorI3VarXmi1N1IEER3EnvRK3DimI1NEdd7VarTypedRKNSt6stringE", "idol::Var::make_vector::t_ub"], [78, 2, 1, "_CPPv4NK4idol3Var4nameEv", "idol::Var::name"], [78, 2, 1, "_CPPv4N4idol3VaraSERK3Var", "idol::Var::operator="], [78, 2, 1, "_CPPv4N4idol3VaraSERR3Var", "idol::Var::operator="], [78, 2, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::Var::set"], [78, 3, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::Var::set::t_annotation"], [78, 3, 1, "_CPPv4NK4idol3Var3setERK10AnnotationI6ValueTEDpRR5ArgsT", "idol::Var::set::t_args"], [63, 7, 1, "_CPPv4N4idol7VarTypeE", "idol::VarType"], [63, 6, 1, "_CPPv4N4idol7VarType6BinaryE", "idol::VarType::Binary"], [63, 6, 1, "_CPPv4N4idol7VarType10ContinuousE", "idol::VarType::Continuous"], [63, 6, 1, "_CPPv4N4idol7VarType7IntegerE", "idol::VarType::Integer"], [31, 1, 1, "_CPPv4N4idol10WorstBoundE", "idol::WorstBound"], [31, 1, 1, "_CPPv4I0EN4idol10WorstBound8StrategyE", "idol::WorstBound::Strategy"], [31, 4, 1, "_CPPv4I0EN4idol10WorstBound8StrategyE", "idol::WorstBound::Strategy::NodeT"], [31, 2, 1, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", "idol::WorstBound::Strategy::Strategy"], [31, 3, 1, "_CPPv4N4idol10WorstBound8Strategy8StrategyERK10WorstBound", "idol::WorstBound::Strategy::Strategy::t_parent"], [31, 2, 1, "_CPPv4NK4idol10WorstBound8Strategy5cloneEv", "idol::WorstBound::Strategy::clone"], [31, 2, 1, "_CPPv4NK4idol10WorstBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::WorstBound::Strategy::operator()"], [31, 3, 1, "_CPPv4NK4idol10WorstBound8StrategyclERN10Optimizers14BranchAndBoundI5NodeTEE", "idol::WorstBound::Strategy::operator()::t_parent"], [64, 2, 1, "_CPPv4N4idol12absolute_gapEdd", "idol::absolute_gap"], [64, 3, 1, "_CPPv4N4idol12absolute_gapEdd", "idol::absolute_gap::t_lb"], [64, 3, 1, "_CPPv4N4idol12absolute_gapEdd", "idol::absolute_gap::t_ub"], [64, 2, 1, "_CPPv4N4idol6equalsEddd", "idol::equals"], [64, 3, 1, "_CPPv4N4idol6equalsEddd", "idol::equals::t_a"], [64, 3, 1, "_CPPv4N4idol6equalsEddd", "idol::equals::t_b"], [64, 3, 1, "_CPPv4N4idol6equalsEddd", "idol::equals::t_tolerance"], [64, 2, 1, "_CPPv4N4idol2isEd7CtrTypedd", "idol::is"], [64, 3, 1, "_CPPv4N4idol2isEd7CtrTypedd", "idol::is::t_a"], [64, 3, 1, "_CPPv4N4idol2isEd7CtrTypedd", "idol::is::t_b"], [64, 3, 1, "_CPPv4N4idol2isEd7CtrTypedd", "idol::is::t_tolerance"], [64, 3, 1, "_CPPv4N4idol2isEd7CtrTypedd", "idol::is::t_type"], [64, 2, 1, "_CPPv4N4idol6is_infEd", "idol::is_inf"], [64, 3, 1, "_CPPv4N4idol6is_infEd", "idol::is_inf::t_value"], [64, 2, 1, "_CPPv4N4idol10is_integerEdd", "idol::is_integer"], [64, 3, 1, "_CPPv4N4idol10is_integerEdd", "idol::is_integer::t_tolerance"], [64, 3, 1, "_CPPv4N4idol10is_integerEdd", "idol::is_integer::t_value"], [64, 2, 1, "_CPPv4N4idol10is_neg_infEd", "idol::is_neg_inf"], [64, 3, 1, "_CPPv4N4idol10is_neg_infEd", "idol::is_neg_inf::t_value"], [64, 2, 1, "_CPPv4N4idol10is_pos_infEd", "idol::is_pos_inf"], [64, 3, 1, "_CPPv4N4idol10is_pos_infEd", "idol::is_pos_inf::t_value"], [64, 2, 1, "_CPPv4I0EN4idol7is_zeroEDTcldtclNSt7declvalI1TEEE7is_zeroL.1EEERK1Td", "idol::is_zero"], [64, 2, 1, "_CPPv4N4idol7is_zeroEdd", "idol::is_zero"], [64, 4, 1, "_CPPv4I0EN4idol7is_zeroEDTcldtclNSt7declvalI1TEEE7is_zeroL.1EEERK1Td", "idol::is_zero::T"], [64, 3, 1, "_CPPv4I0EN4idol7is_zeroEDTcldtclNSt7declvalI1TEEE7is_zeroL.1EEERK1Td", "idol::is_zero::t_expr"], [64, 3, 1, "_CPPv4I0EN4idol7is_zeroEDTcldtclNSt7declvalI1TEEE7is_zeroL.1EEERK1Td", "idol::is_zero::t_tolerance"], [64, 3, 1, "_CPPv4N4idol7is_zeroEdd", "idol::is_zero::t_tolerance"], [64, 3, 1, "_CPPv4N4idol7is_zeroEdd", "idol::is_zero::t_value"], [64, 2, 1, "_CPPv4N4idol12relative_gapEdd", "idol::relative_gap"], [64, 3, 1, "_CPPv4N4idol12relative_gapEdd", "idol::relative_gap::t_lb"], [64, 3, 1, "_CPPv4N4idol12relative_gapEdd", "idol::relative_gap::t_ub"], [64, 2, 1, "_CPPv4N4idol5roundEdj", "idol::round"], [64, 3, 1, "_CPPv4N4idol5roundEdj", "idol::round::t_n_digits"], [64, 3, 1, "_CPPv4N4idol5roundEdj", "idol::round::t_value"]]}, "objnames": {"0": ["cpp", "type", "C++ type"], "1": ["cpp", "class", "C++ class"], "2": ["cpp", "function", "C++ function"], "3": ["cpp", "functionParam", "C++ function parameter"], "4": ["cpp", "templateParam", "C++ template parameter"], "5": ["cpp", "member", "C++ member"], "6": ["cpp", "enumerator", "C++ enumerator"], "7": ["cpp", "enum", "C++ enum"]}, "objtypes": {"0": "cpp:type", "1": "cpp:class", "2": "cpp:function", "3": "cpp:functionParam", "4": "cpp:templateParam", "5": "cpp:member", "6": "cpp:enumerator", "7": "cpp:enum"}, "terms": {"": [0, 4, 7, 8, 12, 14, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 89, 90, 91, 92, 93, 94, 95, 97, 99, 104, 105, 109, 110, 111, 112, 113, 115, 116, 125, 127, 129, 131, 132, 136, 137, 139, 142, 143, 146, 150, 151, 155], "0": [0, 4, 7, 8, 12, 13, 14, 18, 19, 20, 33, 34, 35, 36, 37, 38, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 66, 70, 71, 73, 77, 78, 80, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 103, 104, 106, 108, 109, 110, 112, 113, 115, 116, 125, 129, 132, 133, 135, 139, 140, 142, 144, 145, 146, 150, 151, 155], "00000001": [94, 95], "002": 110, "003": 110, "0098": 93, "01": 151, "016": 110, "01954": 93, "02": [91, 151], "0249": 110, "02582": 93, "03": [94, 95], "033511": 93, "0339": 93, "04": [93, 97, 99, 110], "0436219": 93, "05": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 110], "05883": 93, "06": [93, 97, 99], "0675881": 93, "07": 91, "0784": 110, "0798539": 93, "08": 90, "08059": 93, "0825": 93, "08599": 93, "0892": 93, "0894973": 93, "09": 92, "0927": 110, "1": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 66, 70, 73, 75, 77, 78, 80, 91, 92, 93, 94, 95, 97, 98, 99, 100, 103, 104, 106, 108, 110, 112, 113, 115, 116, 125, 129, 132, 133, 135, 137, 139, 140, 142, 144, 145, 146, 150, 151, 155], "10": [64, 91, 92, 93, 97, 101, 104, 109, 110, 113, 115, 129, 139, 144, 145], "100": [97, 104, 145], "1002": 110, "1007": 110, "1016": 110, "103": 93, "10785": 93, "109": 93, "10e": 64, "11": [93, 98, 110, 125], "11036": 93, "113": 93, "113758": 93, "118": 93, "12": [90, 92, 93, 110, 111, 113, 125], "123": 93, "12413": 93, "124851": 93, "125": 93, "128": 93, "1287": 110, "13": [93, 94, 95, 110, 125, 127], "131": 93, "137635": 93, "14": [93, 97, 104, 110, 125, 145], "140": 93, "148052": 93, "15": [91, 110, 115, 125], "150": 93, "1500": [94, 95], "15157": 93, "152": 93, "152511": 93, "1548": 93, "156": 93, "16": [92, 93, 110, 116, 125], "169": 93, "16976": 93, "17": [92, 93, 106, 108, 110, 150], "172095": 93, "172742": 93, "173": 110, "18": 125, "187": 110, "187979": 93, "19": [93, 125], "1911818": 110, "1961": 110, "1965": 93, "1974": [28, 110], "198938": 93, "1990": [91, 110], "1992": 93, "1999": 110, "1e": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80], "1e2": 95, "1e20": 64, "1e3": 95, "1e4": [92, 113], "2": [18, 64, 66, 70, 75, 77, 78, 90, 91, 92, 93, 94, 95, 97, 98, 99, 103, 104, 108, 110, 113, 115, 116, 125, 129, 133, 135, 138, 139, 144, 145, 146, 150, 151, 155], "20": [28, 91, 93, 110, 115, 125, 129], "200": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "2002": 110, "200255": 93, "2004": 110, "2005": 110, "2006": 110, "201": 110, "2013": 110, "2015": 92, "2016": [110, 146], "2017": 110, "2018": 110, "2019": 110, "2020": 110, "2021": [90, 110], "2024": 110, "2025": 92, "203461": 93, "206479": 93, "209073": 93, "21": 125, "213": 110, "21527": 93, "218845": 93, "219": 110, "22": 106, "220568": 93, "23": [93, 94, 95, 97, 99, 108], "2307": 110, "232984": 93, "235195": 93, "238144": 93, "238989": 93, "239": 110, "24": [90, 91, 92, 93, 98, 125], "243857": 93, "248045": 93, "25": [91, 92, 115, 125], "25486": 110, "26": [93, 125], "261078": 93, "262": 93, "263439": 93, "2641": 93, "27": [93, 125], "27063": 110, "270847": 93, "271919": 93, "278676": 93, "27883": 93, "28": 98, "281743": 93, "285442": 93, "29": 110, "296455": 93, "2_": 146, "2_12": 110, "2x_0": 146, "2x_1": 146, "2y": 146, "3": [70, 90, 92, 94, 95, 97, 104, 106, 108, 110, 113, 125, 129, 135, 144, 145, 146, 150, 151, 155], "30": [90, 91, 92, 97, 104, 110, 115, 129, 145], "300607": 93, "3051": 110, "3068": 110, "31": 125, "315728": 93, "32": 93, "33": [93, 110], "331": [93, 110], "331478": 93, "331927": 93, "333549": 93, "3341": 110, "336413": 93, "338167": 93, "339": 110, "339767": 93, "34": 125, "340762": 93, "346229": 93, "347025": 93, "347963": 93, "348472": 93, "35": [93, 125], "358": 110, "36": [93, 125], "360": 110, "3600": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 114, 131, 144], "37": 125, "376275": 93, "377274": 93, "379508": 93, "38": 110, "381389": 93, "3815": 93, "38184": 93, "383": 110, "384516": 93, "385068": 93, "385256": 93, "387": 110, "391798": 93, "394834": 93, "3x_1": 146, "3y": 146, "4": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 66, 78, 80, 92, 108, 110, 113, 146, 150], "40": [97, 104, 145], "400407": 93, "40097": 93, "402656": 93, "403443": 93, "405338": 93, "405371": 93, "405533": 93, "406345": 93, "41": [93, 110, 125], "416598": 93, "42": 110, "420089": 93, "424802": 93, "439242": 93, "446836": 93, "457": 110, "461": 110, "462": 93, "462689": 93, "467774": 93, "4686": 93, "472351": 93, "473435": 93, "475284": 93, "4762": 93, "47688": 93, "484": 93, "484362": 93, "495492": 93, "497567": 93, "498": 93, "5": [0, 4, 7, 8, 18, 28, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 90, 93, 97, 103, 104, 110, 113, 125, 129, 144, 145, 151], "50": [97, 104, 129, 145], "501362": 93, "50283": 93, "503": 93, "505968": 93, "506139": 93, "507375": 93, "5090": 92, "513": 93, "523355": 93, "525301": 93, "528276": 93, "533045": 93, "534339": 93, "535": 93, "54": 110, "542633": 93, "548021": 93, "5682": 93, "57822": 93, "579068": 93, "579372": 93, "585824": 93, "586318": 93, "587": 93, "592223": 93, "592807": 93, "5y": 90, "6": [64, 90, 92, 93, 110, 113, 125, 129], "60077": 93, "602651": 93, "60365": 93, "606641": 93, "607522": 93, "607712": 93, "607753": 93, "611747": 93, "614955": 93, "61561": 93, "616543": 93, "620859": 93, "628605": 93, "629149": 93, "631599": 93, "632054": 93, "635155": 93, "63654": 93, "637432": 93, "644812": 93, "647767": 93, "648906": 93, "651": 93, "654002": 93, "654321": 93, "655937": 93, "66": [93, 110], "663717": 93, "66767": 93, "674345": 93, "677736": 93, "6793": 93, "68": 93, "681973": 93, "683577": 93, "692708": 93, "692852": 93, "693984": 93, "699975": 93, "6x_2": 92, "7": [110, 125], "703938": 93, "70739": 93, "70923": 93, "712606": 93, "719628": 93, "721997": 93, "725902": 93, "728693": 93, "729705": 93, "735305": 93, "736": [28, 110], "741449": 93, "742256": 93, "742563": 93, "7471": 93, "74801": 93, "748633": 93, "749647": 93, "75": [94, 95], "7501": 93, "75196": 93, "753687": 93, "756363": 93, "759121": 93, "76135": 93, "766693": 93, "767": 110, "773": [28, 110], "779403": 93, "785082": 93, "7946": 93, "79483": 93, "796432": 93, "8": [64, 90, 92, 93, 110, 125], "801213": 93, "804299": 93, "807152": 93, "812734": 93, "819295": 93, "820894": 93, "822042": 93, "8231": 93, "8237": 93, "831136": 93, "831333": 93, "8319": 93, "836445": 93, "840547": 93, "850139": 93, "852622": 93, "859221": 93, "871605": 93, "8866": 93, "891583": 93, "898665": 93, "9": [64, 110, 125, 129], "91": 110, "911": 110, "911725": 93, "913111": 93, "914744": 93, "91811": 93, "920143": 93, "921": 110, "930165": 93, "932609": 93, "93636": 93, "937797": 93, "9407": 93, "943148": 93, "95": [97, 104, 145], "955962": 93, "961574": 93, "963435": 93, "96618": 93, "966318": 93, "970236": 93, "974": 93, "9781119606475": 110, "98": [97, 104, 145], "988408": 93, "989606": 93, "A": [0, 4, 7, 8, 12, 14, 18, 28, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 78, 80, 92, 104, 105, 107, 108, 110, 112, 113, 115, 116, 117, 127, 132, 133, 135, 137, 139, 140, 142, 145, 146, 147, 154], "And": [104, 139], "As": [108, 125, 131, 133, 142, 144, 145, 146], "At": [56, 151], "Be": 104, "By": [19, 87, 89, 92, 95, 104, 105, 108, 109, 113, 129, 151, 152, 155], "For": [12, 18, 19, 64, 65, 87, 88, 89, 93, 97, 104, 108, 109, 111, 113, 115, 116, 127, 129, 131, 133, 135, 136, 138, 139, 140, 144, 145, 151, 155], "IF": 151, "If": [12, 14, 18, 19, 66, 68, 73, 78, 89, 103, 104, 105, 106, 108, 109, 114, 115, 116, 131, 138, 140, 142, 144, 145, 150, 152, 155], "In": [12, 18, 70, 90, 92, 94, 95, 98, 99, 100, 104, 109, 111, 113, 114, 115, 116, 125, 127, 129, 131, 132, 135, 137, 139, 140, 142, 144, 145, 146, 150, 151, 152, 155], "It": [18, 64, 68, 70, 75, 77, 84, 94, 100, 103, 104, 105, 109, 127, 129, 132, 134, 135, 138, 139, 142, 144, 146, 150, 155], "No": [107, 145], "On": [93, 117, 154], "One": [113, 139], "Or": 90, "Such": 112, "That": [95, 105, 125, 131, 146, 155], "The": [0, 4, 7, 8, 14, 18, 19, 28, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 66, 68, 73, 75, 77, 78, 80, 87, 88, 89, 90, 91, 92, 93, 94, 97, 98, 99, 100, 101, 103, 104, 105, 106, 108, 109, 110, 112, 114, 115, 117, 127, 129, 131, 132, 133, 135, 136, 137, 138, 139, 143, 145, 146, 151, 152, 154, 155], "Then": [14, 19, 89, 92, 93, 95, 97, 99, 103, 108, 113, 114, 116, 125, 129, 139, 142, 145, 146, 150, 152], "There": [107, 112, 129, 133, 139], "These": [12, 115, 127, 135, 139], "To": [65, 89, 98, 101, 104, 105, 109, 112, 113, 114, 115, 116, 125, 129, 136, 137, 138, 140, 142, 144, 152, 155], "With": [95, 113], "_": 125, "_build": [1, 9, 54, 55], "_r": 103, "a_": [103, 132, 137], "a_i": [132, 137], "ab": [64, 101], "about": [84, 125, 133, 139, 142, 145], "abov": [108, 129], "absolut": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 101, 145], "absolute_gap": 64, "acceler": 127, "access": [12, 19, 65, 68, 104, 111, 117, 132, 135, 136, 143, 144], "accord": [18, 19], "accordingli": [107, 139, 144], "account": [64, 112], "achiev": 109, "achterberg": 110, "action": 89, "activ": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 89, 93, 98, 99, 100, 151, 155], "actual": [18, 109, 129, 133, 135, 142], "ad": [12, 14, 18, 19, 117, 131, 132, 133, 135, 139, 142, 143, 150], "add": [12, 14, 18, 19, 71, 87, 108, 125, 127, 133, 136, 137, 142, 143, 144, 145, 146, 151], "add_callback": [0, 8, 18, 49, 51, 53, 93, 94, 95, 142, 146], "add_ctr": [71, 75, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 113, 115, 125, 133, 142, 144, 146, 155], "add_execut": [106, 108], "add_lazy_cut": [12, 19], "add_local_variable_branch": 19, "add_optim": [94, 95, 125, 129, 131], "add_phas": [37, 129], "add_qctr": 71, "add_user_cut": [12, 19, 142], "add_var": [70, 71, 77, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 113, 115, 125, 133, 140, 142, 144, 145, 146, 155], "add_vector": 71, "addit": [12, 64, 65, 125, 139, 145], "addition": [129, 151, 155], "adjust": [98, 104, 110, 117, 147], "adm": [79, 80], "adr": 98, "adr_result": 98, "advanc": [12, 19, 105, 107, 110, 125, 140, 142, 145, 146, 155], "advanced_interfac": 19, "advantag": [19, 104, 111], "advis": [18, 68, 105, 134], "affect": 139, "affexpr": [3, 17, 61, 74, 75, 133], "affin": [74, 96], "affinedecisionrul": 98, "after": [129, 144, 150], "again": [137, 139], "against": [14, 105, 109, 114], "agent": [94, 125], "ahead": 129, "aim": 104, "alexand": 110, "algebra": 109, "algorithm": [0, 4, 5, 6, 7, 8, 12, 18, 19, 41, 44, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 79, 80, 84, 90, 94, 104, 109, 110, 117, 129, 132, 144, 146, 147, 149, 151, 154], "align": [14, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 103, 112, 113, 115, 116, 125, 132, 137, 142, 146, 150, 151, 155], "all": [14, 64, 68, 75, 77, 87, 89, 93, 98, 99, 100, 104, 105, 108, 109, 112, 115, 125, 129, 132, 136, 142, 146, 150, 155], "allow": [127, 129, 140, 146], "along": 18, "alow": 150, "alp": 109, "alpha": 108, "alreadi": [95, 106, 114, 116, 131, 143, 150, 152], "also": [12, 14, 18, 41, 56, 64, 68, 89, 90, 98, 99, 100, 101, 105, 108, 109, 113, 114, 115, 131, 134, 136, 137, 138, 139, 142, 144, 146, 150, 152, 155], "altern": [17, 90, 98, 99, 138, 139], "alwai": [64, 129, 144, 145, 146, 150], "among": 129, "amount": [64, 97], "an": [12, 14, 18, 19, 56, 64, 65, 66, 68, 73, 75, 77, 78, 84, 89, 93, 94, 95, 96, 97, 98, 99, 100, 103, 105, 109, 111, 113, 114, 115, 116, 117, 122, 125, 127, 129, 132, 133, 134, 135, 136, 137, 139, 140, 143, 144, 150, 151, 152, 155], "angular": 127, "ani": [56, 104, 105, 106, 114, 116, 129, 133, 135, 139, 142, 150, 155], "annot": [3, 4, 5, 17, 41, 61, 66, 68, 73, 78, 80, 82, 92, 94, 95, 113, 115, 125, 129, 131], "anoth": [109, 113, 125, 129, 144], "anticip": 146, "antonio": 110, "anywher": 65, "apart": 64, "api": 104, "appli": [125, 129], "applic": [110, 112, 146, 151], "approach": [113, 129, 150], "appropri": [139, 140], "approxim": [98, 129], "apt": 87, "ar": [12, 14, 18, 19, 41, 43, 65, 68, 77, 88, 89, 93, 94, 95, 99, 100, 103, 104, 107, 109, 111, 112, 115, 117, 125, 127, 129, 131, 132, 133, 134, 135, 136, 137, 139, 140, 142, 144, 146, 150, 151, 152, 155], "arg": [90, 91, 92, 113, 115], "argmax": [129, 150], "argmin": [90, 91, 92], "argst": [65, 66, 67, 73, 78], "argument": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 66, 73, 75, 77, 78, 80, 114, 115, 125, 129, 133, 139, 144, 145, 151, 152], "aris": [14, 144], "around": 112, "arrai": [67, 90, 91, 115], "articl": 87, "artificialcost": [17, 61, 94], "artur": 110, "ask": [12, 106, 108], "aspect": [129, 150], "assembl": 144, "assess": 101, "assign": [75, 77, 96, 125, 127, 129, 131, 152, 154], "assignment_": [94, 95, 125], "associ": [14, 65, 66, 73, 78, 113, 125, 133, 139], "assum": [14, 103, 105, 111, 112, 114, 116, 129, 131, 143, 144, 152, 155], "assumpt": [103, 150, 152], "attach": [114, 137, 152, 155], "attempt": [89, 129], "attribut": [69, 70, 74, 133, 139], "author": 116, "auto": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 68, 70, 78, 80, 82, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 111, 113, 114, 115, 116, 125, 129, 131, 133, 135, 137, 139, 140, 142, 144, 145, 146, 155], "autom": 110, "automat": [14, 18, 87, 89, 103, 104, 107, 109, 113, 116, 131, 139], "aux": 111, "aux_filenam": 111, "avail": [12, 89, 115, 125, 133, 139, 145], "avoid": [18, 109, 129], "ax": 113, "ayoub": 110, "b": [110, 113], "b_i": [103, 132, 137], "back": 151, "backend": 93, "badli": 129, "baena": 110, "bap": [94, 95, 125], "bar": [92, 98, 112, 116, 125, 151], "bard": [91, 110], "base": [103, 110, 117, 122, 127, 129, 132, 146, 155], "basic": [136, 143], "bbuild": 89, "bcp": 109, "becaus": [113, 129, 146], "becom": 150, "been": [12, 14, 56, 75, 77, 84, 105, 114, 125, 129, 138, 139, 145, 150], "befor": [104, 105, 125, 129], "begin": [14, 19, 70, 72, 74, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 103, 112, 113, 115, 116, 125, 127, 132, 137, 142, 146, 150, 151, 155], "behavior": [12, 68], "behaviour": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 84], "behind": [104, 108], "being": [12, 18, 19, 99, 100, 105, 125, 131, 144, 155], "belong": [137, 139], "below": 129, "benchmark": [104, 110], "bender": [14, 110, 151], "benders_cut": 146, "berlin": 110, "berthold": 110, "best": [0, 4, 7, 8, 12, 18, 19, 28, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 109, 131, 138, 139, 144, 145], "best_bound": [12, 19, 40, 42, 44], "best_obj": [12, 19, 40, 42, 44], "bestbound": [18, 32, 93, 98, 99, 129, 131, 144], "bestestim": [32, 93, 98, 99], "between": [75, 103, 133, 146, 150], "bewar": 129, "big": [90, 92, 113], "big_m": [92, 113], "bilevel": [104, 110, 113, 151, 152], "bin": 109, "binari": [63, 77, 93, 94, 95, 97, 98, 99, 104, 106, 108, 113, 125, 139, 142, 144, 145, 146, 151, 155], "blanco": 146, "bli": 109, "block": [12, 19, 87, 88, 127], "bo": [92, 110], "bobilib": [110, 112, 117], "book": 127, "bool": [0, 3, 4, 5, 6, 7, 8, 18, 21, 41, 43, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 69, 70, 71, 72, 73, 74, 78, 79, 80], "boston": 110, "both": [71, 129, 146, 150, 152], "bound": [0, 4, 7, 8, 12, 14, 17, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 77, 78, 80, 84, 94, 95, 96, 98, 99, 104, 113, 117, 127, 129, 131, 132, 138, 139, 144, 145], "box": 12, "branch": [12, 17, 18, 19, 65, 84, 96, 98, 99, 104, 110, 117, 125, 132, 144, 146, 151], "branch_and_bound": [94, 95, 104, 129, 131, 144], "branch_and_pric": [94, 104, 129], "branchandbound": [12, 17, 19, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 43, 61, 93, 94, 95, 98, 99, 129, 131, 142, 144], "branchandboundcallback": [12, 17, 18, 20, 21, 43, 61], "branchandboundcallbackfactori": [17, 18, 19, 21, 43, 61], "branching_rul": [129, 144], "branchingrul": [33, 34, 35, 36, 37, 38], "branchingrulefactori": 18, "branchingrulefactoryt": 18, "breadthfirst": 32, "break": [94, 112], "breath": 87, "build": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 94, 104], "build_exampl": 109, "build_test": 89, "built": [75, 77, 87, 88, 105, 106], "bunch": [87, 88], "burden": 129, "busi": 110, "button": 87, "c": [14, 87, 89, 97, 98, 99, 103, 104, 105, 109, 113, 129, 132, 135, 137, 142, 146], "c_": [94, 95, 125], "c_0": [132, 135, 137], "c_1": 135, "c_i": [94, 95, 125], "caderno": 110, "call": [12, 18, 19, 65, 89, 93, 97, 104, 105, 109, 111, 113, 115, 125, 129, 131, 133, 137, 139, 142, 144, 145, 146, 150, 151, 152, 155], "callack": 142, "callback": [11, 13, 14, 15, 18, 19, 23, 24, 25, 53, 83, 84, 93, 94, 95, 98, 99, 117, 132, 143, 146], "callbackasbranchandboundcallback": [19, 20], "callbackev": [12, 19, 84, 142], "callbackfactori": [0, 8, 11, 12, 14, 15, 16, 18, 23, 24, 25, 49, 51, 142, 146], "callbacki": 12, "can": [0, 4, 7, 8, 12, 14, 18, 19, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 68, 80, 87, 89, 97, 98, 99, 100, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 125, 127, 129, 131, 133, 134, 135, 136, 137, 138, 139, 140, 142, 144, 145, 146, 150, 151, 152, 155], "candid": 129, "cannot": [1, 9, 12, 19, 54, 55, 89, 142, 144], "capac": [93, 94, 95, 97, 98, 99, 100, 104, 125, 142, 145, 146, 155], "capacit": [93, 100], "capacity_": [94, 95, 125], "caption": 151, "captur": 89, "carefulli": 129, "case": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 99, 112, 115, 125, 129, 132, 139, 140, 142, 144, 145, 146, 150, 152, 155], "cast": 140, "castro": 110, "catch2": [88, 89], "catchorg": 89, "categori": 129, "caus": [105, 144], "cbc": [17, 61, 109], "cbegin": [70, 72, 74], "ccg": [150, 151, 152], "ccgsepar": [151, 152], "ccgstabil": 151, "cd": [89, 105, 109], "cdot": [132, 137], "cend": [70, 72, 74], "center": 151, "certain": 12, "certif": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 133, 145], "cgl": 109, "chang": [19, 64, 105, 139], "chapter7": 125, "char": [90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108], "character": 64, "check": [14, 19, 65, 90, 133, 139, 140, 142, 146, 150, 155], "child": [12, 18, 129, 142], "children": 18, "choic": 109, "choos": [107, 112, 129], "circumv": 112, "clang": 106, "class": [0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 57, 58, 59, 60, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 129, 132, 133, 134, 135, 136, 137, 138, 142, 144, 145, 146, 150, 151], "classic": [105, 108, 112, 115, 146, 150, 155], "clear": [69, 70, 72, 74, 104, 150], "clear_al": 74, "clearli": [129, 150], "clone": [0, 4, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 56, 57, 58, 59, 60, 71, 80, 89, 142], "close": 64, "closer": 64, "closest": [64, 129], "clp": [56, 109], "cmake": [87, 89, 104, 105, 106, 107, 108], "cmake_cxx_standard": [106, 108], "cmake_install_prefix": 105, "cmake_minimum_requir": [106, 108], "cmakelist": [106, 108], "code": [65, 68, 87, 88, 104, 113, 114, 115, 116, 129, 133, 134, 135, 137, 139, 140, 142, 144, 145, 151, 155], "codecov": [88, 89], "coeffici": 139, "coefficient_for_x_in_constraint": 133, "coefficient_for_y_in_constraint": 133, "coin": [17, 61, 96, 104, 112, 117], "coin_or": 109, "coin_or_dir": 109, "coin_or_hom": 109, "collect": 117, "color": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 88], "column": [77, 78, 96, 98, 99, 100, 104, 110, 117, 129, 131, 132, 139, 147, 150, 154, 155], "column_gener": [94, 95, 104, 125, 129, 131], "columnandconstraintgener": [151, 152], "columngener": 44, "columnori": 71, "com": [89, 108], "combin": [96, 104, 110, 114, 127, 129, 131], "combinatori": 110, "come": 109, "command": [87, 89, 105], "common": [12, 104, 113, 129, 133, 139, 140, 150], "commun": 152, "commutativepair": 74, "compact": [133, 139, 150], "compar": [64, 129], "compat": 104, "compil": [89, 105, 114], "complementar": 113, "complet": [105, 107, 108, 125, 147, 150, 151, 152, 154], "complex": [104, 144], "compliant": [12, 87], "complic": 146, "compon": 136, "comput": [64, 92, 102, 103, 105, 107, 108, 110, 129, 150], "computation": 129, "compute_smoothed_dual_solut": [45, 46], "concept": [117, 132, 136, 143, 145, 150], "condit": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 90, 113], "conditional_t": [70, 72, 74], "cone": 103, "configur": 109, "conic": 103, "consid": [14, 64, 93, 95, 98, 99, 100, 103, 112, 113, 114, 115, 116, 129, 144, 145, 146, 150, 152, 155], "consist": [12, 19, 70, 155], "const": [0, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 114, 125, 129, 131, 133, 135, 137, 139, 142, 144, 145, 146, 155], "const_iter": [70, 72, 74], "constant": [69, 75, 135, 146], "constexpr": 64, "constiteratorforward": 71, "constraint": [12, 14, 64, 65, 66, 75, 94, 95, 100, 103, 104, 110, 113, 115, 116, 117, 125, 127, 129, 131, 132, 134, 135, 136, 139, 142, 143, 144, 145, 147, 151, 154, 155], "constraint1": 139, "constraint1_coefficient_for_x": 139, "constraint2": 139, "constraint2_coefficient_for_x": 139, "constraint_1_4": 66, "construct": [66, 73, 78, 86, 147, 148], "constructor": [18, 66, 68, 75, 77, 78, 125, 133, 137, 138, 139, 142], "consumpt": [94, 125], "contact": 105, "contain": [18, 75, 77, 97, 103, 109, 110, 111, 125, 127, 135, 155], "content": [87, 92, 132], "context": 129, "continu": [18, 63, 70, 77, 78, 90, 92, 95, 98, 99, 113, 125, 131, 132, 133, 139, 140, 142, 144, 145, 146, 155], "continuous_relax": 144, "continuousrelax": [18, 19, 48, 49, 50, 51, 56, 57, 58, 59, 60, 93, 94, 95, 125, 129, 131, 144], "contrari": 152, "control": [12, 68, 99, 100, 134, 151, 155], "conveni": [129, 139], "convent": [150, 155], "converg": [12, 127, 152], "convers": 103, "convert": [18, 103], "convex": [90, 103, 110], "cooper": 112, "coordin": 94, "copi": [0, 4, 7, 8, 12, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 71, 75, 77, 80, 87, 105, 142], "copybutton": 87, "correctli": 105, "correspond": [19, 94, 113, 125, 133, 139, 145, 146], "cost": [64, 93, 94, 95, 98, 99, 100, 125, 139, 155], "could": [90, 98, 99, 104, 113, 139, 140, 145], "coupl": [116, 154], "cours": [108, 114], "cout": [12, 19, 65, 66, 71, 78, 90, 91, 92, 93, 94, 95, 97, 98, 99, 114, 116, 135, 137, 139, 142, 145, 152], "cover": 143, "cover_cut": 146, "coverag": 88, "cplex": [17, 61, 104, 109], "cpp": [106, 108], "creat": [0, 4, 7, 8, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 66, 68, 70, 75, 77, 78, 80, 87, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 105, 106, 109, 111, 114, 115, 116, 117, 129, 132, 134, 135, 136, 138, 143, 144, 145, 146, 155], "create_osi_solver_interfac": [56, 57, 58, 59, 60], "creation": 144, "crtp": 18, "crucial": [125, 129], "ctr": [3, 5, 6, 17, 52, 53, 61, 65, 68, 71, 73, 75, 77, 78, 79, 82, 125, 133, 135, 137, 139, 145, 155], "ctrtype": [17, 19, 61, 64, 66, 71, 73, 75, 76], "ctrversion": 66, "cup": 151, "current": [0, 4, 7, 8, 12, 14, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 88, 104, 112, 129, 144, 146], "custom": [12, 18, 96, 98, 99, 100, 105, 107, 155], "cut": [12, 14, 17, 19, 20, 61, 110, 117, 127, 132, 143], "cutsepar": [12, 14, 15], "cx": 113, "cycl": 145, "d": [103, 105, 110, 113, 132, 137], "d_j": [93, 98, 99, 100, 155], "daniel": 110, "dantzig": [41, 94, 95, 110, 117, 127, 131, 132], "dantzigwolf": [17, 41, 44, 47, 61, 94, 95, 125, 129, 131], "dantzigwolfedecomposit": [17, 40, 42, 43, 61, 94, 95, 125, 129, 131], "data": [64, 93, 94, 95, 97, 98, 99, 110, 125, 132, 137, 152, 155], "dbuild_exampl": 109, "dbuild_test": 89, "dcoin_or_dir": 109, "de": [110, 135], "deal": [132, 145], "death": [68, 134], "decid": 129, "decis": [96, 104, 112, 125, 129, 132, 133, 137, 138, 139, 150, 151], "declar": [64, 129], "decltyp": 64, "declval": 64, "decompos": 129, "decomposit": [14, 41, 65, 95, 103, 110, 127, 129, 131, 146, 151], "dedic": [56, 105, 108, 142, 146, 150], "default": [12, 13, 14, 18, 19, 20, 23, 24, 25, 33, 34, 35, 36, 37, 38, 41, 43, 48, 49, 50, 51, 56, 64, 65, 66, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 80, 87, 89, 92, 95, 105, 108, 109, 113, 115, 125, 129, 142, 146, 151, 155], "default_valu": 65, "defaultnodeinfo": [18, 21, 43, 94], "defin": [12, 64, 90, 91, 92, 98, 100, 108, 109, 112, 129, 131, 137, 138, 142, 146, 150, 154], "definit": [12, 14, 108, 154], "degre": 18, "dei": 125, "deigen_dir": 109, "delet": [0, 8, 18, 43, 48, 49, 50, 51, 56, 71, 80], "delta": 151, "delta_j": 129, "demand": [93, 98, 99, 100, 155], "demonstr": 117, "denot": [14, 97, 103, 112, 125, 129, 150], "depend": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 88, 105, 129, 145, 155], "depth": [18, 129], "depthfirst": [18, 19, 32], "deriv": [112, 116, 117, 146], "describ": [113, 145, 151], "descript": [0, 2, 4, 5, 6, 7, 8, 17, 81, 90, 91, 92, 98, 99, 111, 113, 114, 115, 116, 145], "design": [65, 104, 129], "desir": [75, 77, 108, 125], "destin": 105, "destroi": 68, "detail": [87, 111, 125, 127, 129, 133, 137, 139, 145, 150], "determinist": [96, 98, 100, 152, 154], "deterministic_model": [82, 99], "develop": [104, 109], "dglpk_dir": 109, "dgurobi_dir": [105, 109], "dhighs_dir": 109, "diagon": 103, "differ": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 68, 80, 101, 104, 129, 133, 134, 136, 139, 142, 144, 146, 150], "digit": 64, "dim": [17, 61, 66, 70, 71, 73, 78, 92, 93, 94, 95, 97, 98, 99, 104, 125, 133, 139, 142, 144, 145, 146, 155], "dimens": [66, 78, 139], "dimension": [139, 145], "dir": [105, 109], "direct": [17, 108, 139], "directli": [56, 133, 139, 144], "directori": [1, 9, 54, 55, 87, 89, 105, 109], "disabl": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "discuss": [129, 136, 144, 150, 151], "dispens": 136, "displaystyl": [90, 91, 115], "disrupt": 96, "dist": 109, "dive": [137, 150], "dmosek_dir": 109, "do": [19, 56, 65, 87, 90, 98, 99, 104, 105, 106, 109, 110, 113, 114, 116, 125, 129, 137, 139, 144, 145, 152, 155], "doc": 87, "docid": 110, "document": [41, 110], "doe": [115, 116, 129, 144, 146, 152, 155], "doi": 110, "dolan": 110, "domain": 146, "done": [18, 19, 89, 103, 108, 109, 111, 113, 114, 115, 116, 125, 129, 131, 133, 137, 139, 142, 145, 146, 150, 151, 155], "dotsc": [94, 95, 97, 125, 132, 137, 150, 151], "doubl": [0, 4, 5, 6, 7, 8, 12, 18, 19, 21, 24, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 66, 69, 70, 71, 72, 74, 75, 77, 78, 79, 80, 92, 95, 98, 99, 104, 113, 142, 145, 155], "down": 94, "download": [89, 104, 107, 108, 114], "doxygen": [9, 87, 88], "doxygenclass": [1, 9, 54, 55], "drawback": 129, "drobinhood_dir": 109, "dual": [113, 133, 145, 146], "dual_spac": 146, "dualiti": [104, 146], "dualiz": 104, "dualpoint": [45, 46], "dualpricesmoothingstabil": [41, 44, 45, 46], "due": 116, "dump": 71, "dure": [12, 14, 68, 84, 125, 134, 142, 144, 145], "duse_eigen": 109, "duse_glpk": 109, "duse_gurobi": [105, 109], "duse_high": 109, "duse_mosek": 109, "duse_robinhood": 109, "dwith_code_coverag": 89, "dy": 113, "e": [0, 4, 7, 8, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 75, 80, 84, 94, 95, 98, 103, 105, 107, 108, 110, 112, 125, 129, 132, 133, 140, 142, 146, 150, 151, 152, 155], "e_": 125, "each": [12, 18, 66, 68, 78, 88, 93, 94, 97, 98, 99, 100, 125, 127, 129, 134, 139, 142, 144, 145, 146, 150, 151, 152, 155], "eas": 104, "easi": [107, 142], "easier": 140, "easiest": [104, 107, 108, 137], "easili": [104, 111, 116, 131, 133], "econom": 112, "econometrica": 110, "eduardo": 110, "effect": [19, 89, 127, 129], "effici": [125, 127], "eigen": 102, "eigen_dir": 109, "either": [138, 146, 150], "element": [66, 78], "elizabeth": 110, "ell": 150, "els": [145, 151], "emb": 131, "empir": 129, "emploi": 127, "empti": [70, 72, 74, 75, 150], "empty_al": 74, "emptyset": [112, 116, 132, 150, 151], "enabl": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 146], "encod": 125, "encount": [105, 145], "end": [14, 70, 72, 74, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 101, 103, 112, 113, 115, 116, 125, 132, 137, 142, 146, 150, 151, 152, 155], "endif": 151, "endl": [12, 19, 65, 66, 78, 90, 91, 92, 93, 94, 95, 97, 98, 99, 114, 116, 135, 137, 139, 142, 145, 152], "enforc": [95, 150], "engenharia": 110, "engin": 104, "enhanc": 104, "enlight": 103, "ensur": [94, 150, 155], "entireti": 127, "entri": 103, "enum": [62, 63, 71, 84], "enumer": [14, 62, 63, 71, 84, 125], "env": [3, 17, 48, 49, 52, 53, 61, 65, 66, 71, 73, 78, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 111, 113, 115, 125, 133, 134, 137, 138, 139, 140, 142, 144, 145, 146, 155], "environ": [65, 66, 68, 78, 87, 94, 95, 105, 109, 117, 125, 132, 136, 137, 139, 155], "equal": [18, 62, 64, 125, 129], "equalto": 133, "equat": 101, "equival": [75, 96, 109, 115, 133, 139, 150, 155], "error": [105, 140], "essec": 110, "essenti": [14, 68], "estim": [28, 129], "evalu": [129, 155], "even": [90, 106, 139], "event": [12, 19, 83, 85, 142], "eventu": 68, "everi": [12, 18, 68, 89, 104, 125, 134, 136, 142], "exactli": [94, 125, 151], "exampl": [0, 4, 7, 8, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 75, 77, 78, 80, 90, 91, 92, 94, 95, 98, 99, 100, 106, 108, 113, 125, 129, 136, 137, 138, 139, 147, 152, 154], "example_knapsack": 109, "exceed": 97, "except": [66, 73, 78, 140, 144, 155], "execept": 103, "execut": [0, 4, 7, 8, 12, 18, 19, 40, 41, 42, 44, 48, 49, 50, 51, 56, 57, 58, 59, 60, 68, 80, 84, 106, 108, 134, 146], "exist": [12, 14, 19, 89, 104, 112, 116, 136, 150, 152], "expect": [103, 125], "expens": 129, "explain": [87, 89, 129], "explicit": [0, 3, 4, 7, 8, 14, 15, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 41, 43, 45, 46, 52, 53, 67, 71, 72, 79, 80, 82], "explicitli": [108, 133, 139, 146, 150], "exploit": [18, 104, 127], "explor": [12, 18, 19, 127], "exponenti": 125, "exportbranchandboundtreetocsv": [19, 20], "expos": 140, "expr": [76, 135], "express": [70, 75, 99, 100, 103, 117, 132, 133, 136, 138, 146, 155], "extend": [116, 127, 145], "extens": 87, "extern": [0, 4, 7, 8, 11, 17, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 91, 104, 105, 106, 108, 111, 117, 132, 137, 143], "extra": 139, "f": [103, 110, 112, 113, 116, 150, 151], "f1": 90, "f2": 90, "f3": 90, "f4": 90, "f_i": [93, 98, 99, 100, 155], "facil": [96, 147, 154], "fact": [104, 146], "factor": 151, "factori": [0, 4, 7, 8, 12, 18, 41, 44, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 93, 94, 95, 98, 99, 114, 125, 131, 140, 142, 144, 145, 146], "fail": 145, "fall": 129, "fals": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 66, 71, 73, 78, 80, 94, 95, 99], "familiar": [18, 115, 145, 155], "faq": 104, "far": [12, 144], "farka": [133, 145], "farkaspr": [17, 61, 94, 95], "fast": 104, "faster": 152, "fault": 68, "favor": [112, 116], "favourit": 104, "fea": [150, 151], "feasibl": [0, 4, 7, 8, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 95, 98, 100, 125, 132, 133, 145, 146, 150, 152, 155], "featur": [12, 19, 113, 125, 151, 155], "feder": 110, "fetchcont": 108, "fetchcontent_": 108, "fetchcontent_declar": 108, "fetchcontent_makeavail": 108, "field": 112, "file": [88, 89, 93, 97, 108, 109, 111, 125, 155], "filenam": 111, "final": [93, 95, 97, 115, 125, 129, 142, 146, 152, 155], "find": [1, 9, 54, 55, 103, 117, 139, 145, 152], "find_packag": 106, "finit": 150, "first": [0, 4, 7, 8, 12, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 93, 95, 97, 100, 103, 105, 111, 125, 129, 135, 139, 142, 145, 146, 150, 151, 155], "firstinfeasiblefound": 39, "fix": 129, "fixed_cost": [93, 98, 99, 155], "flp": [93, 98, 99, 100, 155], "flp_instanc": [93, 98, 99], "fluminens": 110, "fly": 14, "focu": 125, "focus": 116, "folder": [104, 105, 107, 108, 109], "follow": [14, 19, 56, 64, 65, 68, 70, 87, 89, 90, 91, 92, 94, 97, 99, 100, 104, 105, 106, 109, 110, 111, 112, 113, 114, 115, 116, 125, 129, 131, 132, 133, 134, 135, 136, 137, 139, 140, 142, 144, 145, 146, 150, 151, 152, 155], "follower_c1": [90, 91, 92], "follower_c2": [90, 91, 92], "follower_c3": [90, 91, 92], "follower_c4": [90, 91], "follower_obj": 3, "foral": [150, 151, 152], "forbidden": 134, "forc": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 89], "form": [18, 112, 125, 132, 137, 146, 150], "formul": [44, 79, 90, 91, 97, 98, 99, 145], "formula": 129, "forrest": [28, 110], "fortun": 150, "found": [0, 4, 7, 8, 12, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 73, 78, 80, 84, 89, 105, 108, 109, 129, 142, 145, 146], "frac": [64, 101], "fraction": [125, 129], "fractional_point": 142, "framework": [89, 104, 127], "fran": 110, "frangioni": 110, "free": 65, "freedom": 18, "friend": [12, 53, 66, 68, 73, 78], "friendli": 104, "from": [1, 9, 18, 19, 54, 55, 64, 89, 90, 91, 92, 93, 98, 99, 100, 112, 114, 115, 117, 129, 133, 136, 139, 146, 155], "front": 155, "frontdoor": 110, "fulfil": 56, "fulli": 56, "function": [0, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 94, 95, 98, 108, 109, 111, 112, 113, 117, 125, 132, 136, 137, 139, 144, 145, 146, 150, 155], "functor": 150, "further": 127, "fx": 103, "g": [19, 65, 84, 89, 105, 107, 108, 112, 116, 125, 129, 140, 146, 150, 151, 155], "g_": 150, "game": 112, "gamma": [98, 99, 100, 155], "gamma_": [64, 101], "gap": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 94, 95, 102, 125, 131, 145], "gap_inst": [94, 95, 125], "gcc": 106, "gcov": 89, "ge": [90, 91, 92, 98, 99, 100, 103, 112, 113, 115, 116, 129, 142, 146, 151, 155], "gener": [12, 14, 87, 89, 96, 98, 99, 100, 104, 109, 110, 113, 117, 129, 131, 132, 135, 142, 146, 147, 150, 154, 155], "georg": 110, "geq": [91, 115], "get": [14, 65, 66, 70, 72, 73, 74, 78, 87, 107, 108, 111, 117, 132, 133, 136, 143, 151], "get_absolute_gap": [5, 6, 44, 79, 145], "get_best_bound": [5, 6, 44, 71, 79, 138, 145], "get_best_obj": [5, 6, 44, 71, 79, 97, 98, 99, 138, 142, 145], "get_ctr_by_index": 71, "get_ctr_dual": [5, 6, 71, 79, 133, 145], "get_ctr_farka": [5, 6, 71, 79, 133, 145], "get_ctr_index": [71, 133], "get_ctr_rh": [71, 133], "get_ctr_row": [71, 133], "get_ctr_typ": [71, 133], "get_inner_loop_iteration_count": 79, "get_mat_coeff": 71, "get_n_solut": [5, 6, 71, 79], "get_obj_expr": [71, 138], "get_obj_sens": [71, 138], "get_outer_loop_iteration_count": 79, "get_param_best_bound_stop": [5, 6, 44, 52, 53, 79], "get_param_best_obj_stop": [5, 6, 44, 52, 53, 79], "get_param_infeasible_or_unbounded_info": [5, 6, 44, 52, 53, 79], "get_param_iteration_limit": [5, 6, 44, 52, 53, 79], "get_param_log": [5, 6, 44, 52, 53, 79], "get_param_presolv": [0, 4, 5, 6, 7, 8, 18, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 79, 80], "get_param_thread_limit": [5, 6, 44, 52, 53, 79], "get_param_time_limit": [5, 6, 44, 52, 53, 79], "get_qctr_by_index": 71, "get_qctr_expr": 71, "get_qctr_index": 71, "get_qctr_typ": [71, 133], "get_reason": [5, 6, 44, 71, 79, 145], "get_relative_gap": [5, 6, 44, 79, 145], "get_remaining_tim": [5, 6, 44, 52, 53, 79], "get_rhs_expr": 71, "get_solution_index": [5, 6, 71, 79], "get_statu": [5, 6, 44, 71, 79, 125, 131, 145], "get_sub_problem_spec": 41, "get_tol_feas": [5, 6, 44, 52, 53, 79], "get_tol_integ": [5, 6, 44, 52, 53, 79], "get_tol_mip_absolute_gap": [5, 6, 44, 52, 53, 79], "get_tol_mip_relative_gap": [5, 6, 44, 52, 53, 79], "get_tol_optim": [5, 6, 44, 52, 53, 79], "get_var_by_index": 71, "get_var_column": [71, 139], "get_var_index": [71, 139], "get_var_lb": [71, 139], "get_var_obj": [71, 139], "get_var_prim": [5, 6, 71, 79, 125, 131, 139, 142, 145], "get_var_rai": [5, 6, 71, 79, 139, 145], "get_var_reduced_cost": [5, 6, 71, 79, 139], "get_var_typ": [71, 139], "get_var_ub": [71, 139], "git": [89, 108], "git_repositori": 108, "git_tag": 108, "github": [89, 105, 108, 110], "give": [12, 65, 104, 109, 150], "given": [0, 4, 7, 8, 12, 14, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 66, 73, 78, 80, 93, 94, 97, 98, 99, 100, 112, 125, 129, 132, 133, 137, 138, 139, 142, 144, 145, 146, 150, 151, 152, 155], "global": [64, 65, 101, 106, 108, 125], "glpj": 144, "glpk": [0, 4, 7, 8, 17, 18, 19, 41, 49, 50, 51, 56, 57, 58, 59, 60, 61, 80, 90, 93, 94, 95, 98, 99, 104, 108, 137, 144], "glpk_dir": 109, "glpk_home": 109, "go": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 89, 151], "goal": [93, 94, 97, 98, 99, 100, 125, 155], "good": 151, "grb_doubleparam": [49, 53], "grb_intparam": [49, 53], "grbconstr": 53, "grbenv": 53, "grbmodel": 53, "grbqconstr": 53, "grbvar": [53, 140], "greater": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 142, 146], "greaterorequ": [62, 133], "grid": 88, "guid": [107, 108, 138], "guidelin": [104, 106, 107, 144], "gurobi": [12, 17, 61, 90, 92, 93, 94, 98, 99, 104, 107, 108, 111, 113, 125, 129, 131, 137, 140, 142, 144, 146, 151, 152], "gurobi_dir": [105, 109], "gurobi_hom": [105, 109], "gurobi_optim": 140, "gurobicallbacki": 53, "h": [28, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108, 109, 110, 125, 136], "ha": [12, 18, 56, 65, 71, 75, 77, 84, 89, 93, 94, 97, 98, 99, 100, 103, 104, 105, 112, 125, 129, 133, 135, 138, 139, 142, 145, 146, 150, 155], "hand": [66, 104, 133], "handl": [94, 113, 127, 131], "handsid": 14, "happen": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 129], "hard": 129, "has_default": 65, "has_index": [70, 72, 74], "has_objective_valu": 72, "has_optim": 71, "has_optimizer_factori": 71, "has_quadrat": 74, "hat": [142, 146, 150], "have": [0, 4, 7, 8, 12, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 68, 80, 87, 103, 104, 105, 106, 109, 111, 112, 113, 114, 115, 116, 125, 127, 129, 131, 134, 142, 144, 146, 152, 155], "haven": 131, "header": [109, 125], "help": 104, "henc": [103, 104, 113, 131, 142, 155], "henri": [90, 91, 92, 93, 94, 95, 97, 98, 99], "her": 146, "here": [18, 19, 88, 92, 99, 104, 105, 106, 107, 108, 111, 112, 113, 114, 115, 116, 125, 129, 131, 132, 133, 137, 138, 139, 144, 145, 146, 150, 152, 155], "hereaft": 109, "hesit": 105, "heurist": [12, 13, 17, 19, 20, 61, 94, 95, 110], "hi": 146, "high": [17, 61, 64, 90, 91, 92, 93, 95, 96, 98, 99, 104, 111, 113, 114, 116, 145], "high_point_relax": [90, 91, 92, 113, 114, 115, 116], "higher": 145, "higher_dimensional_model": 145, "highlight": 112, "highs_dir": 109, "hirst": [28, 110], "hlefebvr": 108, "hold": [14, 103, 150, 152], "hood": 155, "hour": 131, "how": [14, 87, 88, 89, 102, 104, 111, 113, 114, 115, 116, 117, 125, 127, 129, 131, 136, 137, 140, 142, 143, 144, 145, 146, 151, 152, 155], "howev": [108, 111, 113, 116, 129, 142, 146, 150], "hpp": 109, "hpr": 115, "html": 87, "http": [89, 92, 108, 110, 125], "i": [0, 4, 5, 6, 7, 8, 12, 14, 18, 19, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 68, 70, 71, 73, 75, 77, 78, 79, 80, 84, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 102, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 150, 151, 152, 153, 155], "id": [19, 65, 66, 71, 73, 78, 125], "idea": [14, 104, 108, 129], "identifi": [14, 18, 115, 127, 150], "idol": [0, 1, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 68, 69, 70, 71, 72, 73, 74, 78, 79, 80, 84, 88, 89, 90, 91, 92, 93, 94, 97, 98, 99, 103, 105, 106, 107, 108, 109, 113, 114, 115, 116, 117, 125, 127, 129, 131, 132, 134, 135, 137, 138, 139, 142, 143, 144, 145, 146, 150, 152, 154, 155], "idol_sum": [93, 94, 95, 97, 98, 99, 104, 125, 142, 145, 146, 155], "iff": 103, "ignor": [64, 155], "ij": [93, 94, 95, 98, 99, 100, 103, 125, 139, 155], "ijoc": 110, "ill": 112, "ilp": 115, "impact": 154, "impl": [12, 14, 15, 65, 66, 68, 73, 78], "implement": [12, 14, 19, 104, 109, 110, 125, 127, 131, 142, 144, 146, 150, 154], "import": [68, 132, 142, 155], "importantli": [129, 152], "impos": 129, "impract": 146, "improv": [12, 19, 95, 127], "includ": [90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108, 109, 125, 136, 142], "incorpor": [18, 150], "increas": [100, 151, 155], "incumb": [19, 84, 142], "incumbentsolut": [12, 84, 142], "inde": [112, 150], "independ": [18, 19, 94, 139], "index": [66, 73, 78, 110, 125, 129, 132, 133, 137, 139], "indext": [70, 74], "indic": [84, 109, 115, 125, 129], "individu": 94, "inequ": 142, "inf": [64, 70, 77, 78, 90, 91, 92, 113, 115, 133, 139, 146, 155], "infeas": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 94, 95, 129, 131, 133, 144, 145, 151], "infeasibilitystrategyfactori": [40, 41, 42, 44], "infinit": 14, "influenc": 84, "info": [89, 94, 95], "inform": [18, 19, 65, 88, 105, 107, 110, 114, 125, 133, 139, 140, 145], "inforunbnd": 145, "infti": [64, 139, 150, 151], "inherit": [12, 18], "initi": [19, 45, 46, 95, 151], "initial_penalty_paramet": 95, "inlin": [0, 3, 4, 5, 6, 7, 8, 14, 15, 18, 19, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82], "insid": [12, 84, 87, 89, 109, 131], "inspir": 151, "instal": [104, 106, 109, 114, 144], "instanc": [19, 64, 65, 87, 89, 94, 95, 98, 99, 103, 104, 108, 109, 110, 112, 113, 115, 116, 117, 125, 129, 131, 133, 135, 136, 137, 138, 139, 140, 144, 145, 151, 155], "instanti": [68, 75, 77, 139], "instead": [12, 14, 19, 103, 127, 129, 133, 136, 140, 150, 151, 155], "instruct": [65, 88], "int": [0, 3, 4, 5, 6, 7, 8, 18, 21, 23, 37, 38, 40, 41, 43, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 67, 70, 71, 72, 73, 74, 78, 79, 80, 82, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 115, 125, 129, 145, 155], "integ": [18, 28, 63, 64, 84, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 110, 112, 113, 115, 125, 127, 129, 137, 139, 143, 146], "integermast": [17, 18, 19, 20, 61, 94, 95], "integr": [87, 127, 131], "intend": [12, 109], "interact": 87, "interest": [14, 146, 150], "interfac": [19, 56, 70, 103, 104, 105, 114, 140, 146], "intermedi": 144, "intern": 109, "interoper": 104, "intertwin": 112, "introduc": [28, 95, 99, 100, 113, 127, 136, 150, 155], "introduct": [147, 149, 154], "invalid": 146, "invalidsolut": [84, 142], "invok": 12, "involv": [127, 135], "io": 110, "iostream": [90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108], "is_arithmetic_v": [70, 72, 74], "is_in": [66, 73, 78], "is_inf": 64, "is_integ": 64, "is_low": 3, "is_neg_inf": 64, "is_pos_inf": 64, "is_termin": [5, 6, 44, 52, 53, 79], "is_upp": 3, "is_zero": [64, 69, 70, 72, 74], "issu": 145, "item": [97, 142, 146], "iter": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 70, 72, 74, 80, 95, 127, 129, 135, 142, 145, 146, 151, 152], "iterationplot": 79, "iteratort": [33, 34, 35, 36, 37, 38], "iterlimit": 145, "its": [0, 4, 7, 8, 12, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 68, 80, 87, 89, 92, 96, 97, 109, 112, 113, 125, 127, 132, 139, 140, 145, 151], "itself": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 104, 146], "ivana": 110, "ix_jx_k": 103, "j": [28, 93, 94, 95, 97, 98, 99, 100, 103, 104, 110, 125, 129, 132, 137, 139, 145, 155], "jame": 110, "jk": 103, "job": [94, 125], "johann": 110, "jonathan": 110, "jordi": 110, "jorg": 110, "josett": 110, "journal": 110, "judici": 14, "just": 129, "k": [103, 129, 139, 150, 151], "karush": 113, "kei": [12, 70], "kept": 65, "keyt": [69, 70, 74], "kind": 104, "kkt": [2, 17, 92, 96, 104], "kleinert": [90, 110], "knapsack": [94, 95, 96, 104, 109, 125, 144, 145], "knapsackcov": [19, 20, 22, 142], "know": [114, 116, 143, 152], "knowledg": 146, "known": [113, 129, 145, 146, 150, 152], "kobv": 110, "koch": 110, "kp": [97, 125], "kp_instanc": 97, "kuhn": 113, "l": [103, 110, 129, 150], "lambda": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 113, 125, 146], "lambda_": 125, "lambda_0": 146, "lambda_1": 146, "lambda_2": 146, "languag": 87, "larg": [12, 14, 18, 28, 104, 110, 111, 127], "larger": [64, 104], "last": [87, 97, 155], "later": [12, 145], "latest": [104, 108], "laurenc": 110, "lazi": [12, 14, 19, 117, 132, 142, 143], "lazyconstraintcallback": 142, "lazycutcallback": [11, 13, 16, 19, 146], "lb": [64, 77, 101, 151], "lbrace": 151, "lceil": [129, 151], "lcov": 89, "ldot": [132, 137], "le": [14, 90, 92, 93, 94, 95, 97, 98, 99, 100, 103, 113, 116, 125, 129, 132, 137, 146, 150, 151, 155], "lead": [68, 146, 150], "leader_c": 92, "learn": [65, 90], "leastinfeas": 39, "left": [12, 14, 19, 95, 98, 99, 100, 125, 129, 150, 155], "leftrightarrow": 14, "lehigh": 110, "leq": [91, 115, 142], "less": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 112, 142, 146], "lessorequ": [62, 66, 75, 133], "let": [97, 105, 107, 108, 111, 113, 116, 125, 129, 136, 143, 144, 145, 150, 151, 155], "letter": 110, "level": [0, 4, 7, 8, 17, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 88, 90, 91, 109, 111, 112, 116, 117, 129], "lfloor": 129, "lh": 75, "li": 19, "lib": [105, 107, 109], "librari": [56, 105, 106, 109, 110, 111, 114, 144, 146], "life": 134, "like": [12, 18, 103, 104, 129, 131, 152], "limit": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 97, 129, 131, 144, 145], "lin_expr": 70, "linderoth": 110, "line": [93, 97, 131], "linear": [69, 70, 91, 94, 97, 109, 110, 113, 125, 127, 129, 132, 138, 146], "linearscor": 129, "linexpr": [17, 61, 69, 71, 74, 75, 77, 78, 82, 133, 139], "link": [56, 105, 108, 114, 144], "linux64x86": 109, "list": [105, 107, 108, 125, 133, 138, 139, 145], "literatur": [110, 112, 129], "litereatur": 116, "littl": [12, 142], "live": 68, "ljubi\u0107": 110, "load": 145, "local": [64, 87, 89, 104, 105, 106, 109, 151], "localbranch": [12, 13, 26], "locat": [96, 125, 147, 154], "log": [18, 41, 44, 94, 95, 144], "log_after_termin": 19, "log_mast": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "logi": 110, "long": 110, "look": [89, 104, 105, 108, 109, 129, 142, 146], "lorenza": 110, "lot": 129, "lower": [77, 78, 91, 111, 112, 113, 116, 139], "lower_c1": [113, 115], "lower_c2": [113, 115], "lower_c3": [113, 115], "lower_c4": [113, 115], "lower_level": [3, 115], "lp": [92, 96, 111, 113, 117, 122, 132, 137, 146], "lvert": 103, "m": [66, 78, 90, 92, 94, 95, 110, 113, 125, 132, 137], "m_capac": 142, "m_n_points_bound": [12, 146, 150], "m_profit": 142, "m_weight": 142, "m_x": 142, "ma": 110, "machin": [87, 89], "made": [75, 77, 111, 140], "mai": [14, 68, 89, 105, 129, 134, 139, 140, 144, 145, 150], "main": [12, 19, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 133, 146], "mainli": [133, 139], "maintain": 94, "make": [18, 19, 87, 89, 93, 98, 99, 103, 104, 105, 109, 129, 133, 146], "make_lower_level": [3, 90, 91, 92, 113, 115], "make_model": [4, 7, 90, 92, 98, 99, 113, 116], "make_upper_level": 3, "make_vector": [66, 73, 78], "make_with_default_valu": 65, "makefil": 106, "manag": [28, 68, 79, 80, 89, 105, 108, 110, 134, 146], "mani": [68, 94, 104, 112, 144, 150], "manner": 64, "manual": 19, "map_t": [70, 72, 74], "martin": 110, "master": [14, 94, 95, 110, 125, 127, 146, 151, 152], "masterid": [94, 95, 115, 125, 155], "mater": 104, "materi": [14, 125], "mathbb": [91, 100, 115, 129, 132, 137, 146, 150, 151, 155], "mathcal": 103, "mathemat": [71, 104, 110, 112, 133, 135], "matric": [103, 109], "matrix": [103, 127], "matter": [107, 146], "max": [129, 150], "max_": [14, 92, 97, 98, 100, 112, 116, 142, 146, 150, 155], "maxim": [97, 138, 142, 144, 145, 146], "maximum": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 93, 98, 99, 100, 129, 155], "mean": [133, 146], "memori": [65, 145], "memorylimit": 145, "merge_without_conflict": [70, 72, 74], "method": [12, 17, 18, 19, 65, 96, 107, 110, 113, 115, 125, 127, 129, 131, 133, 135, 137, 138, 139, 140, 142, 144, 145, 150, 151, 152, 155], "mib": [2, 10, 11, 17, 96, 104, 109, 112, 115, 116, 117, 152], "michael": 110, "milp": [90, 92, 93, 96, 104, 132], "min": [90, 91, 92, 112, 113, 115, 129, 150, 151], "min_": [90, 91, 92, 93, 94, 95, 98, 99, 100, 112, 113, 115, 116, 125, 132, 137, 146, 150, 151, 155], "min_i": 116, "min_x": [14, 150], "minim": [93, 94, 98, 99, 100, 106, 108, 112, 125, 129, 138, 155], "minlp": 146, "mip": [64, 115, 117, 132, 146, 155], "mipabsolutegap": 64, "miprelativegap": 64, "miqcqp": 104, "miqp": 104, "miscellan": 17, "miss": 150, "mistak": 140, "mix": [28, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 110, 112, 113, 125, 143, 146], "mkdir": 105, "mn": 125, "mnsc": 110, "model": [0, 4, 5, 6, 7, 8, 12, 14, 15, 17, 18, 19, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 65, 66, 68, 70, 73, 75, 77, 78, 79, 80, 82, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 104, 106, 108, 111, 112, 114, 116, 117, 125, 129, 131, 132, 133, 138, 140, 142, 143, 144, 146, 147, 151, 152, 154], "model2": 139, "modif": 142, "modifi": [84, 144], "moment": 56, "monitor": 12, "moor": [91, 110], "mor": 110, "more": [12, 17, 61, 65, 88, 90, 103, 104, 105, 107, 111, 114, 115, 125, 127, 129, 133, 139, 145, 150, 155], "moreno": 110, "moreov": [131, 133, 139], "mosek": [17, 61, 94, 102, 104, 108, 142], "mosek_dir": 109, "mosek_hom": 109, "most": [18, 19, 116, 127, 129, 131, 133, 139, 144, 150, 152, 155], "mostinfeas": [18, 19, 39, 93, 94, 95, 98, 99, 131, 144], "move": [75, 77, 125], "mp": [111, 137], "mu": 129, "mu_i": 151, "multi": 87, "multipl": [18, 95, 112], "multipli": 135, "must": [12, 64, 103, 108, 109, 114, 129, 133, 142, 151], "my": [65, 105], "my_annot": 65, "my_cut": 18, "my_known_best_bound": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "my_known_best_obj": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "my_opt": 108, "my_project": [106, 108], "my_target": [106, 108], "my_valu": 108, "mycallback": [12, 19, 142], "n": [3, 66, 67, 71, 73, 78, 94, 95, 97, 103, 125, 132, 137, 142, 146, 151], "n_": [103, 150], "n_agent": [94, 95, 125], "n_custom": [93, 98, 99, 155], "n_facil": [93, 98, 99, 155], "n_item": [97, 104, 142, 145, 146], "n_job": [94, 95, 125], "n_x": [150, 151], "n_y": 150, "name": [5, 6, 12, 18, 44, 52, 53, 65, 66, 73, 78, 79, 125, 137, 144, 155], "namespac": [64, 90, 91, 92, 93, 94, 95, 97, 98, 99, 104, 106, 108, 136, 145], "natur": 104, "nb": 137, "nbsp": 104, "neam": [47, 94, 95], "necessari": [12, 102, 105, 109, 111, 137, 146, 152, 155], "need": [12, 75, 77, 87, 89, 103, 104, 105, 106, 109, 113, 114, 115, 125, 129, 133, 139, 140, 142, 144, 146, 150, 152, 155], "neg": 103, "neq": [112, 116, 132], "nest": [18, 66, 78, 142, 144], "never": 146, "new": [0, 4, 7, 8, 12, 14, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 68, 75, 77, 78, 80, 89, 95, 104, 106, 115, 127, 129, 134, 137, 139, 142, 144, 146, 150, 155], "next": 146, "nlp": 90, "node": [12, 17, 18, 19, 28, 43, 61, 84, 93, 94, 95, 98, 99, 127, 129, 131, 144, 146], "node_selection_rul": 144, "nodeinfo": 19, "nodeinfot": [18, 19, 20, 21, 33, 34, 35, 36, 37, 38, 43], "nodeload": [19, 84], "nodescorefunct": [37, 129], "nodeselectionrul": [27, 28, 29, 30, 31], "nodeselectionrulefactori": [18, 27, 28, 29, 30, 31], "nodeselectionrulefactoryt": 18, "nodet": [18, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38], "nodevarinfo": [18, 43], "nodiscard": 19, "noexcept": [0, 8, 18, 43, 48, 49, 50, 51, 56, 69, 70, 71, 74, 75, 76], "non": [12, 19, 103, 112, 133, 150], "nonlinear": 113, "nor": 89, "normal": 108, "notat": 154, "note": [12, 18, 41, 56, 87, 89, 90, 97, 98, 99, 100, 105, 106, 109, 112, 113, 114, 115, 116, 125, 129, 137, 139, 140, 142, 144, 150, 151, 155], "noth": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 115, 155], "notic": [114, 152], "notin": 129, "notion": [112, 116, 125, 142, 146], "notspecifi": 145, "now": [12, 89, 103, 104, 105, 109, 113, 125, 129, 131, 137, 144, 145, 146, 150, 155], "number": [0, 4, 7, 8, 12, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 78, 80, 88, 93, 97, 98, 111, 125, 127, 129, 137, 145, 151], "numer": [109, 145], "numeric_limit": 129, "nutshel": 12, "o": 110, "obj": 77, "object": [0, 4, 7, 8, 12, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 66, 68, 73, 75, 77, 78, 80, 94, 95, 97, 112, 113, 114, 116, 117, 125, 132, 133, 134, 135, 136, 137, 139, 142, 143, 144, 145, 146, 151, 155], "objective_coefficient_for_x": 139, "objective_valu": 72, "objectivesens": 71, "objlimit": 145, "observ": [14, 125, 129], "obtain": [19, 113, 125, 133, 137, 139, 150, 155], "occur": [84, 142, 145], "off": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 89, 114, 146], "offer": [12, 104, 138], "offici": [105, 109], "oi": 110, "omit": [12, 14], "onc": [89, 104], "one": [65, 68, 75, 92, 94, 99, 103, 104, 106, 112, 113, 115, 125, 129, 131, 133, 134, 135, 138, 139, 144, 146, 150, 155], "ones": 129, "onli": [0, 4, 7, 8, 14, 18, 19, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 68, 80, 89, 106, 109, 125, 127, 129, 131, 133, 134, 139, 142, 144, 145, 146, 150, 151], "onlin": [92, 110], "only_if_has_strategi": 18, "open": [56, 93, 98, 99, 100, 155], "oper": [0, 4, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 68, 69, 70, 71, 72, 74, 75, 76, 77, 78, 80, 110, 112, 127, 142], "opr": 110, "opt": 105, "opt_descript": [92, 116], "opt_model": [92, 116], "optim": [0, 4, 7, 8, 10, 12, 14, 18, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 66, 68, 71, 73, 78, 80, 90, 91, 92, 93, 94, 95, 97, 98, 99, 102, 104, 105, 110, 111, 113, 114, 115, 125, 127, 129, 131, 133, 134, 136, 137, 139, 143, 145, 150, 151, 152, 155], "optimalitygap": [12, 13], "optimist": [96, 104, 112, 115, 117], "optimizer_factori": 71, "optimizerfactori": [4, 5, 6, 7, 14, 15, 18, 23, 24, 41, 43, 44, 71, 80, 117, 132, 143], "optimizerfactorywithdefaultparamet": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 80], "optimizerwithlazyupd": [52, 53], "optimizingwithcolumngener": 110, "option": [5, 44, 88, 93, 105, 108, 114, 151], "opus4": 110, "order": [18, 93, 98, 99, 100, 103, 109, 112, 113, 155], "org": [87, 92, 110], "organ": 117, "origin": [12, 14, 19, 108, 125, 129, 145, 146, 150], "original_model": [12, 19, 145], "orl": 110, "osi": [17, 57, 58, 59, 60, 61, 104, 109], "osicbc": 56, "osiclp": 56, "osicplex": 56, "osicpxsolverinterfac": 56, "osisolverinterfac": [56, 57, 58, 59, 60], "osisymphoni": 56, "ostream": 71, "other": [87, 88, 104, 108, 111, 112, 114, 116, 125, 129, 142], "other_options_go_her": 109, "otherwis": [65, 66, 73, 78, 103, 132, 150], "our": [65, 90, 92, 104, 105, 108, 111, 115, 125, 129, 131, 137, 142, 144, 146], "out": [12, 19, 90, 105, 142, 145], "output": [0, 1, 4, 7, 8, 9, 18, 41, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 80, 87, 89], "over": [135, 155], "overal": [94, 144], "overload": 75, "overrid": [0, 4, 5, 6, 7, 8, 12, 14, 15, 18, 19, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 72, 74, 79, 80, 142], "own": [18, 104, 115, 117, 132, 143, 146, 150, 155], "p": [28, 100, 110, 142, 146, 155], "p_j": 97, "pack": [66, 73, 78], "padm": [17, 61, 95], "page": [18, 41, 86, 87, 89, 106, 107, 108, 109, 110, 117, 136, 142, 144, 145, 146, 150], "pair": [18, 111, 135], "paramet": [0, 4, 7, 8, 12, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 66, 68, 70, 73, 75, 77, 78, 80, 95, 98, 99, 100, 107, 129, 135, 139, 142, 145, 151, 152, 155], "parameter": 112, "parent": [5, 6, 44, 52, 53, 79, 142], "pars": 111, "part": [12, 14, 66, 73, 78, 115, 129, 135, 146, 155], "particular": [65, 87, 109, 114, 115, 116, 129, 140, 142, 152], "particularli": [107, 127], "pass": [12, 56, 109, 114, 115, 125, 137, 139, 142, 144, 146, 151, 152], "path": [105, 109, 137], "pattern": [133, 144], "pdf": [92, 125], "penal": 95, "penalti": [17, 96], "penalty_method": 95, "penaltymethod": 95, "penaltyupd": [79, 80, 95], "peopl": 104, "per_unit_transportation_cost": [93, 98, 99, 155], "percentage_increas": 155, "perform": [12, 19, 109, 110, 129, 150, 155], "pessimisitc": 112, "pessimist": [96, 104, 110, 112, 117], "pessimisticasoptimist": [92, 116], "pessoa": 110, "phase": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "phd": [90, 110], "philip": 110, "philosophi": 104, "pick": [112, 116], "piec": 145, "pip3": 87, "place": [66, 73, 78], "plane": [17, 61], "platform": 109, "pleas": [18, 19, 87, 88, 105, 107, 108, 109, 114, 116, 129, 144, 145, 152], "plot": [12, 13, 79, 80, 88], "plugin": 87, "point": [17, 61, 64, 90, 91, 92, 109, 111, 113, 114, 116, 145, 146, 150, 151], "polymorph": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "polytop": 110, "posit": 150, "poss": 110, "possibl": [12, 19, 64, 68, 90, 104, 105, 106, 108, 109, 113, 114, 115, 127, 135, 138, 139, 144, 145, 146, 150, 155], "possibli": [78, 95, 125], "potenti": [12, 14, 93, 98, 99, 100, 127, 155], "power": 127, "practic": [28, 92, 110, 127, 129], "pre": 19, "precis": 127, "prefix": 136, "prepar": [90, 91, 92, 109], "prepend": [146, 155], "presenc": 12, "previou": [113, 114, 115, 116, 139, 155], "price": [17, 65, 96, 104, 110, 117, 125, 129, 132], "primal": [64, 110, 139, 142, 145], "primal_rai": 145, "primal_solut": [12, 40, 42, 44, 142], "primal_valu": 145, "primalpoint": [12, 40, 42, 44], "print": [12, 19, 91, 92, 94, 95, 103, 142, 152], "privaci": 110, "problem": [14, 18, 19, 28, 96, 104, 109, 110, 111, 112, 117, 127, 129, 131, 132, 133, 136, 138, 139, 142, 143, 144, 145, 146, 147, 151, 152, 154], "procedur": [12, 146], "process": [12, 14, 95, 104, 105, 107, 125, 138, 142, 144, 145, 150], "produ": 110, "produc": 129, "product": [70, 129], "productscor": 129, "profil": 110, "profit": [97, 104, 145, 146], "program": [28, 68, 91, 94, 110, 113, 125, 127, 134, 146], "progress": [12, 118, 119, 120, 121, 122, 123, 124, 126, 128, 130, 141, 153], "project": [1, 9, 54, 55, 88, 104, 105, 107, 108], "promis": 127, "properli": 56, "protect": [12, 19, 142], "prove": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 145], "proven": 19, "provid": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 90, 108, 113, 127, 137, 144, 145, 146], "prune": 127, "prunedsolut": 84, "pseudocod": 151, "pseudocost": [39, 93, 98, 99], "psi": 150, "public": [0, 3, 4, 5, 6, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 106, 108, 142], "pure": 106, "push": 89, "put": [97, 150], "python": 87, "python3": 87, "q": [103, 132, 137], "q_": 103, "q_i": [93, 98, 99, 100, 155], "qcqp": 102, "qctr": [3, 17, 61, 68, 71, 133], "qctrversion": 73, "qp": [103, 109], "qquad": [142, 146, 150], "quad": [14, 90, 91, 92, 93, 94, 95, 97, 98, 99, 112, 113, 115, 116, 125, 132, 137, 142, 146, 150, 151], "quadexpr": [3, 17, 61, 70, 71, 76, 115], "quadrat": [103, 138], "quadratic_constraint": 133, "qualiti": 12, "quantagonia": 110, "quantiti": 138, "queri": [68, 138], "quick": 142, "quot": 112, "r": [100, 110, 129, 146, 150, 151, 155], "r_": [94, 95, 125], "radiu": 151, "rai": [139, 145], "ralph": 110, "ran": 145, "random": 98, "rang": [64, 93, 94, 95, 97, 98, 99, 104, 125, 142, 145, 146, 155], "rather": [64, 155], "rbrace": 151, "rceil": [129, 151], "re": 144, "reach": 145, "read": [92, 93, 97, 98, 99, 108, 109, 112, 113, 115, 116, 117, 125, 131, 155], "read_from_fil": [48, 49, 52, 53, 90, 111, 137], "read_inst": [94, 95, 97, 125], "read_instance_1991_cornuejols_": 155, "read_instance_1991_cornuejols_et_": [93, 98, 99], "reader": [145, 150], "readi": [105, 125, 146], "real": [12, 75, 77], "realiz": [100, 155], "realli": 104, "reason": [12, 40, 42, 44, 72, 145], "recal": [129, 155], "recogn": 64, "recommend": [64, 115, 125, 131, 138, 142, 146, 155], "recours": [150, 152], "recurs": [66, 78], "reduc": [64, 129, 139], "reducedcostfix": [19, 20, 93, 94, 98, 99], "redund": 150, "refer": [18, 87, 88, 104, 106, 107, 109, 111, 114, 116, 125, 127, 129, 135, 140, 142, 144, 145, 146, 150, 152], "reformul": [17, 96, 99, 104, 112, 117, 127, 132, 146], "regard": [19, 125], "region": [132, 133, 146, 147, 149, 154, 155], "registri": 19, "rel": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 101, 145], "relat": [65, 103, 109, 125, 145], "relationship": 133, "relative_gap": 64, "relax": [12, 14, 18, 19, 84, 90, 91, 92, 95, 111, 113, 114, 116, 125, 127, 129, 131, 132, 142, 144, 146, 150], "relev": 109, "reli": 137, "remain": [125, 131], "remov": [70, 71, 72, 74, 129], "ren": [12, 13, 26], "render": 87, "repeat": [18, 139, 150], "replac": [103, 113, 129], "report": [89, 110, 111], "repositori": [89, 109], "repres": [70, 71, 75, 77, 88, 114, 116, 135, 137, 139], "requir": [56, 106, 111, 129, 132, 137, 139, 146, 151], "research": 110, "reserv": [70, 72, 74], "reserve_ctr": 71, "reserve_qctr": 71, "reserve_var": 71, "reset": 151, "reset_minor_represent": 71, "reset_objective_valu": 72, "resolv": 14, "resourc": [94, 125], "resource_consumpt": [94, 95, 125], "respect": [88, 94, 115, 125, 135, 137, 139], "respons": [94, 144, 155], "rest": [114, 116, 125, 131], "restrict": [98, 127, 133, 144, 151], "result": [90, 92, 140, 144, 145, 152], "retriev": [125, 131, 145], "return": [0, 4, 7, 8, 12, 14, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 66, 68, 73, 75, 77, 78, 80, 90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108, 111, 113, 129, 138, 139, 140, 142, 145, 155], "returnt": 18, "returnth": 68, "revers": 151, "revisit": 110, "rfloor": 129, "rh": 75, "rho": 151, "rho_j": 95, "right": [14, 66, 95, 98, 99, 100, 105, 125, 129, 133, 150, 155], "rightarrow": 150, "rl": [90, 91, 115], "rmp": 151, "robin_hood": 109, "robinhood_dir": 109, "robinhood_hom": 109, "robust": [98, 104, 110, 150, 151, 152], "robust_ccg": 155, "role": [12, 142], "root": [18, 109], "rotat": 103, "round": 64, "rout": 127, "routin": [12, 104, 131, 140, 152], "row": [75, 133], "rowori": 71, "rst": [18, 75], "rtd": 87, "rudimentari": [125, 142, 146], "rule": [17, 18, 19, 28, 61, 93, 94, 95, 96, 99, 110, 129, 131, 144], "run": [19, 88, 89, 105, 109, 131, 144], "runtim": 140, "rvert_2": 103, "s101070100263": 110, "s10287": 110, "sadykov": 110, "sai": [103, 113, 132, 150], "said": 132, "same": [56, 77, 109, 114, 115, 116, 125, 134, 139, 144, 155], "satisfact": [64, 155], "satisfi": [14, 64, 100, 133, 146, 150, 152, 155], "save": 64, "save_": 145, "save_du": 145, "save_farka": 145, "save_prim": [90, 91, 92, 93, 94, 95, 97, 114, 116, 145, 152], "save_rai": 145, "savelsbergh": 110, "saw": 129, "scalar": 70, "scale": [104, 110, 127], "scenario": [99, 150, 152], "scheme": [92, 110, 129, 145], "schmidt": 110, "school": [110, 146], "scienc": [28, 110], "seamlessli": [104, 114], "search": [14, 106, 109, 110], "second": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 98, 100, 103, 104, 111, 125, 129, 133, 135, 139, 144, 150, 155], "second_typ": 18, "section": [113, 129, 137, 142, 146, 147, 148, 150, 151], "see": [12, 14, 75, 77, 88, 92, 101, 104, 105, 108, 109, 114, 115, 125, 127, 129, 131, 133, 136, 137, 139, 142, 144, 145, 146, 150, 152, 155], "seek": 150, "seem": 56, "seen": [144, 146, 152, 155], "segment": 68, "select": [17, 18, 28, 61, 93, 94, 95, 97, 98, 99, 100, 127, 129, 131, 144, 155], "sens": [129, 142, 150], "seobj_expr": 155, "separ": [12, 142, 146, 151, 152], "separation_model": 18, "seri": [127, 143], "serv": [93, 98, 99, 100, 155], "set": [0, 4, 7, 8, 14, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 66, 70, 72, 73, 74, 75, 77, 78, 80, 89, 92, 93, 94, 95, 97, 98, 99, 100, 103, 106, 107, 108, 109, 112, 113, 115, 116, 125, 129, 131, 133, 137, 138, 139, 142, 144, 145, 146, 150, 151, 152, 154], "set_best_bound_stop": 44, "set_ctr_rh": [71, 133], "set_ctr_row": [71, 133], "set_ctr_typ": [71, 133], "set_expr": 76, "set_frequ": 43, "set_integer_column": 43, "set_iteration_limit": 43, "set_lazy_cut": 53, "set_lb": 77, "set_lh": 75, "set_lower_level_obj": [3, 90, 91, 92, 113, 115], "set_mat_coeff": 71, "set_max_depth": 43, "set_max_n_solution_in_pool": 53, "set_node_optim": 18, "set_obj": 77, "set_obj_const": 71, "set_obj_expr": [71, 90, 92, 93, 94, 95, 97, 98, 99, 104, 113, 115, 125, 138, 142, 144, 145, 146], "set_obj_sens": [71, 138], "set_objective_valu": 72, "set_param": 53, "set_param_best_bound_stop": [5, 6, 44, 52, 53, 79], "set_param_best_obj_stop": [5, 6, 44, 52, 53, 79], "set_param_infeasible_or_unbounded_info": [5, 6, 44, 52, 53, 79], "set_param_iteration_limit": [5, 6, 44, 52, 53, 79], "set_param_log": [5, 6, 44, 52, 53, 79], "set_param_presolv": [5, 6, 44, 52, 53, 79], "set_param_thread": [5, 6, 44, 52, 53, 79], "set_param_time_limit": [5, 6, 44, 52, 53, 79], "set_reason": 72, "set_rh": 75, "set_rhs_expr": 71, "set_row": 133, "set_solution_index": 71, "set_stag": [82, 98, 155], "set_statu": 72, "set_storag": 71, "set_time_limit": 43, "set_tol_feas": [5, 6, 44, 52, 53, 79], "set_tol_integ": [5, 6, 44, 52, 53, 79], "set_tol_mip_absolute_gap": [5, 6, 44, 52, 53, 79], "set_tol_mip_relative_gap": [5, 6, 44, 52, 53, 79], "set_tol_optim": [5, 6, 44, 52, 53, 79], "set_typ": [75, 76, 77], "set_ub": 77, "set_uncertain_mat_coeff": [82, 99], "set_uncertain_obj": [82, 99], "set_uncertain_rh": [82, 98], "set_var_column": [71, 139], "set_var_lb": [71, 139], "set_var_obj": [71, 139], "set_var_typ": [71, 139], "set_var_ub": [71, 139], "sever": [113, 129, 134, 144, 145], "sfina": 18, "shall": 89, "shape": 146, "share": 111, "shortli": 150, "should": [12, 19, 64, 68, 89, 104, 105, 106, 108, 109, 114, 115, 125, 129, 131, 134, 142, 145, 146, 150, 155], "show": [14, 111, 113, 116, 129, 140, 142, 144, 145, 146, 151], "shown": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "side": [19, 66, 133], "side_effect_registri": 19, "sideeffectregistri": 19, "sign": 133, "similar": [114, 129, 133, 139, 146], "similarli": [12, 113, 133, 139, 146, 155], "simpl": [14, 18, 144, 146], "simpleround": [12, 13, 26], "simplest": 125, "simplex": 145, "simpli": [105, 113, 125, 129, 131], "simplic": 116, "simplifi": [136, 144], "sinc": [109, 139, 142, 144, 150, 155], "singl": [17, 88, 90, 111, 112, 117, 147], "single_level": [90, 113], "single_level_model": 113, "sitemap": 87, "situat": 140, "size": [70, 72, 74, 88, 129, 137, 139, 142, 151], "slightli": 150, "small": 144, "smaller": [14, 64, 129], "snippet": 113, "so": [12, 18, 103, 104, 105, 109, 113, 125, 129, 131, 140, 144, 145, 146, 150, 155], "socp": 109, "softwar": [104, 110], "solut": [12, 14, 19, 28, 64, 84, 91, 92, 94, 95, 97, 100, 110, 112, 116, 117, 125, 127, 129, 131, 132, 133, 139, 142, 143, 144, 146, 150, 151, 152, 155], "solutionlimit": 145, "solutionreason": [5, 6, 40, 42, 44, 71, 72, 79], "solutionstatu": [5, 6, 40, 42, 44, 71, 72, 79, 80], "solv": [0, 4, 7, 8, 14, 18, 19, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 84, 95, 96, 102, 104, 109, 110, 112, 116, 117, 127, 129, 132, 138, 142, 144, 146, 150, 151, 152, 155], "solver": [11, 12, 17, 18, 19, 56, 91, 105, 106, 108, 111, 113, 114, 115, 116, 117, 132, 137, 142, 143, 144, 146, 152], "some": [0, 4, 7, 8, 12, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 103, 107, 108, 109, 113, 125, 129, 132, 137, 139, 140, 142, 144, 145, 150, 151, 155], "somehow": 112, "someth": 131, "sometim": [139, 145], "soon": 12, "space": [97, 125, 127, 145, 146], "spars": 64, "sparsevector": [70, 72, 74], "sparsiti": 64, "special": 150, "specif": [12, 19, 105, 108, 129, 140, 142, 145, 146], "specifi": [93, 105, 108, 109, 115, 125, 129, 133, 138, 139, 145, 146, 150, 152], "spend": 129, "sphinx": 87, "split": 127, "springer": 110, "sqrt": 103, "stabil": [17, 61, 94, 95, 110, 147, 149, 154], "stabl": 56, "stage": [82, 96, 105, 110, 117, 147, 150, 151, 152], "stage_annot": 82, "stage_ctr": 155, "stage_index": 155, "stage_var": 155, "stagedescript": [152, 155], "standard": [19, 104, 113, 129, 136, 137], "start": [14, 19, 107, 108, 111, 113, 125, 136, 143, 144], "state": 151, "statement": 88, "static": [4, 7, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 69, 70, 73, 74, 78], "statu": [40, 42, 44, 72, 145], "status": 145, "std": [0, 3, 4, 5, 6, 7, 8, 12, 18, 19, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 67, 70, 71, 72, 73, 74, 78, 79, 80, 90, 91, 92, 93, 94, 95, 97, 98, 99, 109, 114, 116, 125, 129, 135, 137, 139, 142, 145, 152], "step": [12, 105, 125, 147, 151, 154], "still": [104, 106], "stock": 127, "stop": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 129, 151], "storag": 71, "store": [18, 19, 64, 66, 68, 78, 93, 97, 109, 111, 113, 125, 137, 144, 145, 152, 155], "straightforward": [111, 139, 144, 146], "strategi": [12, 14, 15, 18, 19, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 42, 43, 45, 46, 94, 95, 110, 142], "strengthen": 146, "strictli": [18, 142, 146], "string": [3, 5, 6, 44, 48, 49, 51, 52, 53, 65, 66, 71, 73, 78, 79], "strong": [104, 117, 127, 132], "strongbranch": [39, 129], "strongbranchingphas": 129, "strongbranchingphasetyp": 37, "strongdual": [2, 17, 113], "strongli": 18, "structur": [104, 127, 129], "studi": [95, 110, 112], "sub": [18, 104, 107, 108, 125, 129, 142, 144, 152], "sub_problem_spec": 79, "sub_problem_specif": [125, 131], "subclass": [12, 13, 19, 20, 56, 70], "subject": [110, 125, 146], "submit": [12, 19], "submit_bound": 19, "submit_heuristic_solut": [12, 19], "suboptim": 145, "subproblem": [41, 44, 79, 80, 94, 95, 125, 127, 129, 131], "subset": [93, 97, 98, 99, 100, 127, 150, 155], "subseteq": [129, 132, 137, 150, 151], "substanti": 129, "subtract": 135, "sudo": [87, 89, 105], "suffici": 88, "suit": 127, "sum": [142, 146], "sum_": [93, 94, 95, 97, 98, 99, 100, 103, 125, 142, 146, 151, 155], "superus": 105, "support": [104, 138, 146], "sure": [19, 104, 129, 155], "switch": 129, "symbol": 146, "symphoni": [56, 104, 109], "system": [105, 114, 133], "t": [0, 4, 5, 6, 7, 8, 14, 18, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 68, 71, 72, 79, 80, 90, 91, 92, 93, 94, 95, 97, 99, 110, 112, 113, 115, 116, 125, 131, 132, 137, 139, 142, 146, 150, 151], "t_": [93, 98, 99, 100, 155], "t_a": 64, "t_absolute_gap_toler": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 53, 56, 57, 58, 59, 60, 80], "t_annot": [66, 73, 78], "t_apply_to_tree_nod": 21, "t_arg": [65, 66, 67, 73, 78], "t_argc": [90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108], "t_argv": [90, 91, 92, 93, 94, 95, 97, 98, 99, 106, 108], "t_b": 64, "t_begin": [33, 34, 35, 36, 37, 38], "t_best_bound_stop": [0, 4, 5, 6, 7, 8, 18, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 79, 80], "t_best_obj_stop": [5, 6, 44, 52, 53, 79], "t_big_m": [4, 5], "t_bound": 19, "t_branching_rul": 18, "t_callback": 18, "t_capac": [70, 72, 74, 142], "t_cb": [0, 8, 49, 51], "t_coeff": [71, 82], "t_column": [71, 77, 78], "t_conditional_valu": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_constant": [66, 69, 71, 74], "t_continuous_relax": [52, 53], "t_ctr": [3, 5, 6, 52, 53, 71, 79, 82], "t_cut": [12, 14, 15, 19], "t_decomposit": [41, 80], "t_default_sub_problem_spec": 44, "t_depth": 18, "t_descript": [0, 4, 5, 6, 7, 8, 82], "t_deterministic_model": 82, "t_deterministic_optim": [4, 5, 6, 7], "t_dim": [66, 67, 71, 73, 78], "t_els": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_end": [33, 34, 35, 36, 37, 38], "t_env": [3, 48, 49, 52, 53, 65, 66, 71, 73, 78], "t_event": [12, 19, 142], "t_expr": [64, 69, 71, 74, 76], "t_factor": [70, 72, 74], "t_feasible_solution_statu": 79, "t_filenam": [48, 49, 52, 53], "t_follower_object": 3, "t_formul": [44, 79], "t_frequenc": 43, "t_id": [41, 80], "t_if": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_index": [66, 70, 71, 72, 74], "t_index1": [70, 72, 74], "t_infeas": 79, "t_info": 19, "t_initial_cost": 40, "t_initial_factor": [45, 46], "t_inner_loop_iter": 79, "t_iteration_count_limit": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_iteration_limit": [5, 6, 43, 44, 52, 53, 79], "t_kei": [69, 70, 74], "t_key1": 74, "t_key2": 74, "t_lb": [64, 71, 77, 78], "t_lh": [71, 75], "t_log_color": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_log_factori": 18, "t_log_level": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_logger": 41, "t_logger_factori": 44, "t_lower_level": 3, "t_manag": [79, 80], "t_master_du": [45, 46], "t_master_optimizer_factori": 44, "t_max_cuts_factor": 21, "t_max_depth": [37, 43], "t_max_n_thread": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_max_n_vari": 37, "t_max_parallel_pr": 44, "t_max_pass_root_nod": 21, "t_max_updates_before_phase_i": 40, "t_minimum_ratio_of_integer_variables_to_fix": 24, "t_minimum_ratio_of_variables_to_fix": 24, "t_mip_tol_absolute_gap": [5, 6, 44, 52, 79], "t_model": [0, 4, 7, 8, 14, 15, 18, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 66, 73, 78, 79, 80], "t_n_digit": 64, "t_n_sub_problem": 41, "t_n_variabl": 37, "t_name": [3, 65, 66, 71, 73, 78], "t_neighbourhood_s": 23, "t_node_optim": 18, "t_node_select": 18, "t_node_selection_rul": 18, "t_o": 71, "t_obj": [71, 77, 78, 82], "t_object": [3, 68, 71], "t_objective_valu": [72, 79], "t_optim": [4, 7, 43], "t_optimizer_factori": [14, 15, 23, 24, 41, 71], "t_other": 72, "t_outer_loop_iter": 79, "t_param": [49, 51, 53], "t_parent": [5, 6, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 42, 44], "t_penalized_constraint": 80, "t_penalty_upd": [79, 80], "t_phase": 37, "t_plot_manag": 79, "t_profit": 142, "t_ptr_to_callback": 53, "t_reason": 72, "t_relative_gap_toler": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 53, 56, 57, 58, 59, 60, 80], "t_remove_infeasible_column": 44, "t_reset_minor_represent": 71, "t_rh": [18, 19, 69, 70, 71, 74, 75, 76, 82], "t_row": [71, 75], "t_scalar": [70, 72, 74], "t_score_funct": 37, "t_seed": 38, "t_separation_problem": [14, 15], "t_size": 71, "t_solut": 12, "t_solver_interfac": [56, 57, 58, 59, 60], "t_src": [0, 4, 7, 8, 37, 41, 49, 56, 69, 74, 75, 76, 77, 80], "t_stabil": [41, 44], "t_stage": 82, "t_statu": [72, 80], "t_storag": 71, "t_strategi": [41, 44], "t_sub_problem": [41, 80], "t_sub_problem_id": 79, "t_sub_problem_spec": 79, "t_sub_problem_specif": 44, "t_temp_ctr": [66, 71, 73], "t_temp_var": 71, "t_thread": [5, 6, 44, 52, 79], "t_thread_limit": 53, "t_threshold": 80, "t_time_limit": [0, 4, 5, 6, 7, 8, 18, 41, 43, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 79, 80], "t_tol_feas": [5, 6, 44, 52, 53, 79], "t_tol_integ": [5, 6, 44, 52, 53, 79], "t_tol_mip_relative_gap": [5, 6, 44, 52, 79], "t_tol_optim": [5, 6, 44, 52, 53, 79], "t_toler": [64, 69, 70, 72, 74], "t_type": [19, 64, 66, 71, 73, 75, 76, 77, 78], "t_ub": [64, 71, 77, 78], "t_uncertainty_set": 82, "t_update_factor": 40, "t_use_farkas_for_infeas": 44, "t_use_hard_branch": 44, "t_use_lift": 21, "t_user_best_obj": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "t_valu": [0, 4, 5, 6, 7, 8, 18, 21, 40, 41, 43, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 70, 71, 72, 74, 79, 80], "t_var": [3, 5, 6, 19, 52, 53, 71, 79, 82], "t_vec": [70, 72, 74], "t_vector": [70, 71, 72, 74], "t_weight": 142, "t_x": 142, "tabl": 132, "tackl": 104, "take": [18, 65, 97, 112, 129, 133, 139, 144, 145, 151], "taken": [64, 90, 91, 92, 99, 100, 115, 146, 155], "target": [87, 89, 105, 106, 108, 109], "target_link_librari": [106, 108], "task": [103, 125, 129, 131], "tctr": 71, "technic": 110, "techniqu": [104, 110, 113, 127, 129, 151], "technisch": 110, "ted": 110, "tell": [89, 108, 109, 125], "tempctr": [12, 14, 15, 17, 19, 61, 66, 71, 133], "templat": [0, 3, 4, 5, 6, 7, 8, 18, 19, 20, 21, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 41, 43, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 78, 79, 80, 109, 125, 135, 139, 145], "temporari": [66, 75, 77, 139, 144], "temporary_constraint": 133, "tempqctr": [17, 61, 71, 73], "tempvar": [17, 61, 71, 139], "term": [70, 75, 135], "termin": [5, 6, 12, 19, 44, 52, 53, 79], "test": [56, 104], "text": [14, 64, 90, 91, 92, 93, 94, 95, 97, 99, 101, 112, 113, 115, 116, 125, 129, 132, 137, 142, 146, 150, 151], "textbf": 103, "textrm": 125, "th": [94, 95], "than": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 80, 103, 104, 142, 146, 150], "thank": [118, 119, 120, 121, 122, 123, 124, 126, 128, 130, 141, 153], "thei": [65, 125, 133, 139, 142, 146, 150, 155], "them": [14, 68, 89, 98, 112, 113, 139, 146], "theme": 87, "theori": 146, "therefor": [65, 105, 139, 146, 150], "thesi": [90, 110], "thi": [0, 4, 7, 8, 12, 14, 18, 19, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 68, 70, 71, 75, 77, 80, 86, 87, 89, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 103, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133, 136, 137, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 150, 151, 152, 153, 155], "thing": [136, 146], "think": 104, "third": 97, "thoma": 110, "thorsten": 110, "those": 146, "though": [56, 68, 106, 125, 129, 146, 150], "thought": [105, 151], "thread": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "three": [115, 125, 129, 139, 144, 146], "threshold": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "through": [0, 4, 7, 8, 12, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 68, 80, 104, 107, 109, 125, 131, 134, 142, 144, 151], "throughout": 95, "throw": 140, "thrown": [66, 73, 78, 103, 144], "thu": [14, 18, 65, 104, 113, 129, 150], "th\u00fcrauf": 110, "ti": 112, "tight": 127, "tild": [92, 116, 150], "time": [0, 4, 5, 6, 7, 8, 12, 18, 19, 41, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 79, 80, 84, 100, 105, 129, 131, 134, 139, 144, 145, 150, 151, 155], "timelimit": 145, "timer": [5, 6, 12, 19, 44, 52, 53, 79], "timo": 110, "to_str": [94, 95, 125], "tobia": 110, "todo": [117, 122, 132], "togeth": [109, 131, 135, 144], "told": 89, "toler": [0, 4, 7, 8, 14, 17, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 61, 80, 101, 145], "tomlin": [28, 110], "tool": [87, 88, 104, 109], "top": [14, 98, 103, 113, 132, 137, 142, 146], "topic": [117, 125, 142, 146], "total": [12, 93, 94, 97, 98, 99, 100, 125, 155], "transform": 116, "tree": [12, 18, 19, 84, 127, 129, 146], "tri": 129, "trier": 110, "trigger": [12, 19, 129, 142], "trr154": 110, "true": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 66, 73, 78, 80, 91, 93, 94, 95, 98, 114, 144, 146, 151, 152], "trust": [147, 149, 154], "trustregion": 151, "try": [19, 68, 105, 140], "tucker": 113, "turn": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 144, 146, 155], "tutori": [14, 41, 65, 90, 104, 111, 113, 114, 115, 116, 125, 127, 129, 131, 143, 150, 151, 152, 155], "two": [96, 101, 103, 107, 110, 111, 112, 114, 116, 117, 129, 131, 133, 139, 142, 146, 147, 150, 152], "twofold": 111, "txt": [93, 94, 95, 97, 98, 99, 106, 108, 125, 155], "type": [18, 65, 66, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 84, 115, 125, 129, 133, 135, 140, 146, 155], "typenam": [18, 70, 72, 74], "typic": [12, 14, 68, 70, 75, 84, 104, 112, 129, 134, 137, 144, 146, 150, 155], "u": [99, 105, 110, 116, 125, 136, 144, 145], "ub": [64, 77, 101, 151], "uchoa": 110, "uff": 110, "umpir": [28, 110], "unbound": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 145], "unbounded": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "uncertain": [98, 99, 100, 152, 155], "uncertain_mat_coeff": 82, "uncertain_obj": 82, "uncertain_rh": 82, "uncertainti": [98, 99, 100, 110, 150, 152, 154], "uncertainty_set": [82, 98, 99, 151, 152, 155], "unchang": [125, 131], "undefin": 68, "under": [86, 103, 147, 148, 155], "underli": [65, 111, 117, 129, 132, 142, 143, 146, 155], "underlin": 151, "underset": [90, 91, 92, 115, 150], "understand": [118, 119, 120, 121, 122, 123, 124, 126, 128, 130, 141, 153], "unfortun": [109, 129], "unibo": 125, "unifi": 104, "uniformlyrandom": 39, "uniqu": [65, 66, 78], "unitari": [93, 98, 99, 100, 155], "univers": [11, 83, 110], "universidad": 110, "universit": 110, "universit\u00e4t": 110, "unknown": [99, 100, 155], "unlik": 146, "unord": 109, "unsign": [0, 3, 4, 5, 6, 7, 8, 18, 21, 23, 37, 38, 40, 41, 43, 44, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 64, 65, 66, 67, 70, 71, 72, 73, 74, 78, 79, 80, 82, 93, 94, 95, 98, 99, 104, 115, 125, 129, 145, 155], "until": 127, "unus": [71, 98], "up": [131, 144, 145], "updat": [19, 71, 79, 94, 95, 139, 144, 151], "update_stability_cent": [45, 46], "upload": 92, "upper": [77, 78, 91, 112, 115, 116, 139], "url": 110, "us": [0, 4, 7, 8, 12, 14, 18, 19, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 66, 68, 70, 71, 72, 73, 74, 75, 78, 80, 84, 87, 88, 89, 90, 91, 93, 94, 95, 96, 97, 99, 100, 101, 103, 104, 105, 106, 107, 108, 110, 111, 112, 113, 115, 116, 117, 125, 127, 131, 132, 133, 134, 135, 136, 137, 138, 140, 142, 143, 144, 146, 147, 150, 152, 154, 155], "usag": 56, "use_": 109, "use_cbc": 109, "use_clp": [109, 114], "use_cplex": 109, "use_eigen": 109, "use_glpk": 109, "use_gurobi": [108, 109], "use_high": 109, "use_mib": [109, 114], "use_mosek": 109, "use_osi": 109, "use_presolv": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "use_robinhood": 109, "use_symphoni": 109, "user": [12, 18, 19, 64, 104, 105, 107, 109, 117, 132, 142, 143, 144, 150], "usercutcallback": [11, 13, 16, 18, 19, 142, 146], "usr": [105, 107, 109], "usual": [125, 131], "util": [19, 20], "v": [99, 146, 151], "v0": 108, "v_1": [93, 98, 99, 100, 155], "v_2": [93, 98, 99, 100, 155], "v_j": 99, "valid": [12, 19, 84, 90, 113, 142, 146], "valu": [0, 4, 7, 8, 12, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 71, 73, 78, 80, 84, 92, 95, 97, 98, 99, 103, 108, 109, 113, 125, 129, 132, 133, 137, 138, 139, 142, 145, 146, 150, 151], "valuet": [65, 66, 69, 70, 73, 74, 78], "vanderbeck": 110, "var": [3, 5, 6, 17, 19, 52, 53, 61, 68, 69, 70, 71, 74, 75, 76, 77, 79, 82, 133, 135, 137, 140, 142, 145, 155], "varepsilon": [14, 129, 151], "varepsilon_": [150, 151], "variabl": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 70, 75, 77, 78, 80, 94, 95, 98, 105, 108, 109, 113, 114, 115, 116, 117, 125, 127, 129, 131, 132, 133, 134, 135, 136, 138, 143, 144, 145, 146, 150, 151, 152, 155], "variablebranch": [33, 34, 35, 36, 37, 38], "variant": [99, 100, 155], "varieti": 104, "variou": 117, "vartyp": [17, 61, 71, 77, 78], "varvers": 78, "vector": [3, 44, 66, 71, 73, 78, 79, 99, 100, 109, 142, 146, 150, 155], "vehicl": 127, "veri": [19, 114], "version": [19, 66, 68, 78, 87, 98, 99, 100, 104, 106, 108, 127, 133, 134, 139, 150, 155], "via": 89, "view": [82, 98, 99], "violat": [14, 64, 142, 146], "virtual": [0, 4, 5, 6, 7, 8, 12, 13, 14, 15, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 69, 70, 72, 74, 79, 80], "void": [0, 3, 4, 5, 6, 7, 8, 12, 18, 19, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 65, 66, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 82, 142], "w": [110, 142, 146], "w_j": 97, "wa": [28, 66, 73, 78, 106, 129, 144, 150], "wai": [94, 107, 108, 113, 115, 125, 133, 137, 139, 146, 150, 155], "want": [12, 19, 89, 103, 104, 105, 107, 108, 125, 139, 140, 142, 144, 145, 155], "warn": 103, "we": [12, 14, 18, 65, 70, 88, 89, 90, 92, 93, 94, 95, 97, 98, 99, 100, 101, 103, 104, 105, 106, 108, 109, 111, 112, 113, 114, 115, 116, 125, 127, 129, 131, 132, 133, 136, 137, 138, 139, 142, 143, 144, 145, 146, 150, 151, 152, 155], "websit": [87, 114], "weight": [97, 104, 142, 145, 146], "well": [104, 109, 131, 146], "wentg": 47, "were": [12, 146], "what": [19, 114, 116, 137, 144, 146, 152, 155], "when": [0, 4, 7, 8, 12, 18, 19, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 64, 65, 80, 84, 89, 94, 109, 125, 129, 132, 133, 139, 142, 146, 152], "whenev": [12, 138, 142, 146], "where": [18, 91, 92, 100, 103, 105, 109, 112, 116, 129, 133, 142, 146, 151, 155], "whether": [142, 146, 150], "which": [0, 4, 7, 8, 12, 14, 18, 19, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 65, 70, 75, 77, 80, 87, 92, 98, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 125, 127, 129, 133, 135, 136, 138, 139, 140, 142, 144, 146, 150, 152, 155], "while": [18, 93, 94, 97, 98, 99, 100, 113, 125, 127, 129, 132, 137, 142, 144, 146, 155], "who": 105, "whole": [14, 129], "whose": [12, 129, 142], "why": [102, 133], "wilei": 110, "wish": [19, 150], "with_": 144, "with_absolute_gap_toler": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_best_bound_stop": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_best_obj_stop": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_big_m": [4, 92, 113], "with_branching_rul": [18, 19, 93, 94, 95, 129, 131, 144], "with_callback": [12, 18, 19], "with_column_pool_clean_up": [94, 95], "with_complete_recours": 152, "with_continuous_relaxation_onli": [49, 50, 51], "with_cplex_for_feas": [0, 8, 114], "with_default_sub_problem_spec": [41, 80, 94, 95, 125, 129, 131], "with_deterministic_optim": [98, 99], "with_dual_price_smoothing_stabil": [41, 94, 95], "with_external_param": 49, "with_external_paramet": 51, "with_feasible_solution_statu": [80, 95], "with_file_interfac": [0, 8], "with_frequ": 43, "with_frequency_in_second": [94, 95], "with_hard_branch": [41, 94, 95], "with_infeasibility_strategi": [41, 94, 95], "with_infeasible_columns_remov": 41, "with_infeasible_or_unbounded_info": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_initial_cost": 40, "with_integer_column": 43, "with_iteration_limit": [0, 4, 7, 8, 18, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_iteration_plot": 80, "with_lazy_cut": [49, 146], "with_lift": 21, "with_log": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 91, 93, 94, 95, 98, 99, 114, 144, 151, 152], "with_logg": [18, 41, 94, 95], "with_master_optim": [41, 94, 95, 125, 129, 131, 151, 152], "with_max_cuts_factor": 21, "with_max_depth": 43, "with_max_n_solution_in_pool": 49, "with_max_n_vari": [37, 129], "with_max_parallel_sub_problem": 41, "with_max_pass_root_nod": 21, "with_max_updates_before_phase_i": 40, "with_node_log": 94, "with_node_optim": [18, 19, 93, 131, 144], "with_node_scoring_funct": 37, "with_node_select": 18, "with_node_selection_rul": [18, 19, 93, 94, 95, 131, 144], "with_node_selection_strategi": 129, "with_node_solv": 144, "with_optim": [23, 24, 43, 94], "with_osi_interfac": 95, "with_penalty_upd": [80, 95], "with_presolv": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_relative_gap_toler": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_rescaling_threshold": [80, 95], "with_scoring_funct": 129, "with_se": 38, "with_separ": [151, 152], "with_separation_optim": [14, 15, 146], "with_single_level_optim": [4, 7, 90, 113], "with_stabil": 151, "with_sub_problem_spec": [41, 80], "with_subtree_depth": [18, 94, 95], "with_test_coverag": 89, "with_thread_limit": [0, 4, 7, 8, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80], "with_time_limit": [0, 4, 7, 8, 18, 41, 43, 48, 49, 50, 51, 56, 57, 58, 59, 60, 80, 114, 131, 144], "with_tree_node_cut": 21, "with_trust_factor": 151, "with_update_factor": 40, "within": [65, 146], "withiterationlimit": 129, "withnodeoptim": 129, "without": [105, 108, 142, 151], "wolf": [41, 94, 95, 110, 117, 127, 131, 132], "wolsei": 110, "word": [125, 142], "work": [88, 104, 108, 113, 114, 118, 119, 120, 121, 122, 123, 124, 126, 128, 130, 141, 144, 151, 153], "worri": 142, "worst": [99, 112, 152], "worstbound": [32, 94, 95], "would": [125, 133], "wp": 92, "wrapper": [90, 91, 92, 93, 94, 95, 97, 98, 99], "write": [12, 19, 71, 90, 104, 112, 117, 122, 127, 129, 132, 142, 144, 147, 149, 154], "write_to_fil": 111, "written": [103, 150], "wrong": 140, "www": 125, "x": [0, 4, 7, 8, 14, 18, 41, 48, 49, 50, 51, 56, 57, 58, 59, 60, 70, 75, 78, 80, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 103, 104, 106, 108, 112, 113, 115, 116, 125, 132, 133, 135, 137, 139, 140, 142, 144, 145, 146, 150, 151, 152, 155], "x_": [94, 95, 103, 125], "x_0": [70, 103, 133, 135, 138, 146, 150, 151], "x_1": [70, 92, 133, 135, 138, 146], "x_1_4": 78, "x_2": 92, "x_i": [93, 98, 99, 100, 103, 142, 146, 151, 155], "x_ij": [94, 95, 125], "x_j": [97, 103, 129, 132, 137], "xi": [14, 98, 99, 100, 150, 151, 152, 155], "xi_0": 14, "xi_i": 98, "xi_j": [98, 99, 100, 155], "xml": [1, 9, 54, 55], "xpress": [17, 61], "y": [75, 90, 91, 92, 93, 98, 99, 100, 112, 113, 115, 116, 133, 139, 146, 150, 151, 152, 155], "y_": [93, 98, 99, 100, 139, 155], "y_0_0": 139, "y_1": 92, "y_2": 92, "y_3": 92, "y_4": 92, "y_ij": 98, "y_j": 99, "ye": [89, 105, 108, 109, 114], "yet": [12, 64, 75, 77, 129, 134, 139, 150], "you": [12, 14, 18, 19, 87, 89, 90, 98, 99, 104, 105, 106, 107, 108, 109, 111, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 126, 128, 129, 130, 131, 133, 139, 140, 141, 142, 143, 145, 146, 150, 151, 152, 153, 155], "your": [18, 68, 89, 104, 105, 107, 108, 114, 115, 116, 117, 122, 123, 124, 126, 128, 130, 131, 132, 134, 143, 146, 150, 152, 155], "your_cmake_opt": 105, "your_other_cmake_opt": 105, "your_valu": 105, "z": [129, 132, 137, 142, 146], "z_": [91, 115], "z_i": 129, "z_j": 129, "zeng": [92, 110], "zero": [64, 69, 70, 74, 103], "zhao": 110, "\u00e3": 110, "\u00e4": 110, "\u00e7": 110, "\u00e9": 110}, "titles": ["Bilevel::MibS", "Optimizers::Bilevel::MibS", "Bilevel Optimization", "Bilevel::Description", "Bilevel::KKT", "Optimizers::Bilevel::KKT", "Optimizers::Bilevel::StrongDuality", "Bilevel::StrongDuality", "Bilevel::Mibs", "Optimizers::Bilevel::MibS", "External Bilevel Solvers", "Class List", "Callback", "CallbackFactory", "LazyCutCallback", "UserCutCallback", "Universal Callbacks", "API", "BranchAndBound", "BranchAndBoundCallback", "BranchAndBoundCallbackFactory", "Cuts::KnapsackCover", "More on Cutting Planes\u2026", "Heuristics::LocalBranching", "Heuristics::RENS", "Heuristics::SimpleRounding", "More on Heuristics\u2026", "BestBound", "BestEstimate", "BreadthFirst", "DepthFirst", "WorstBound", "More on Node Selection Rules\u2026", "FirstInfeasibleFound", "LeastInfeasible", "MostInfeasible", "PseudoCost", "StrongBranching", "UniformlyRandom", "More on Branching Rules\u2026", "DantzigWolfe::ArtificialCosts", "DantzigWolfeDecomposition", "DantzigWolfe::FarkasPricing", "Heuristics::IntegerMaster", "Optimizers::DantzigWolfeDecomposition", "DantzigWolfe::Neame", "DantzigWolfe::Wentges", "More on Stabilization\u2026", "GLPK", "Gurobi", "HiGHS", "Mosek", "Optimizers::GLPK", "Optimizers::Gurobi", "Optimizers::HiGHS", "Optimizers::Mosek", "More on coin-or/Osi (Cplex, Xpress, Cbc, \u2026)\u2026", "OsiCbc", "OsiClp", "OsiCplex", "OsiSymphony", "Mixed-integer Optimization", "CtrType", "VarType", "Tolerances", "Annotation", "Ctr", "Dim", "Env", "AffExpr", "LinExpr", "Model", "Point", "QCtr", "QuadExpr", "TempCtr", "TempQCtr", "TempVar", "Var", "Optimizers::PADM", "PADM", "Robust Optimization", "Robust::Description", "Type List", "Events", "Universal Callbacks", "Benchmark", "Build the Documentation", "Developers", "Unit and Integration Tests", "Solving an optimistic LP-LP bilevel problem with KKT reformulation", "Solving an optimistic MILP-MILP bilevel problem with coin-or/MibS", "Solving a pessimistic bilevel problem using an optimistic reformulation", "Solving a facility location problem with a custom branch-and-bound", "Solving a generalized assignment problem by column generation and branch-and-price", "Combining branch-and-price, column generation, and a penalty method for the generalized assignment problem", "Examples", "Solving a knapsack problem with HiGHS", "Using affine decision rules to solve a two-stage facility location problem with facility disruption", "Solving a robust facility location problem by its deterministic equivalent", "Two-Stage Robust Facility Location Problem (CCG)", "How is the Optimality Gap Computed?", "FAQ", "Why is Eigen Necessary to Solve QCQPs with Mosek?", "idol, a C++ Framework for Optimization", "Global Installation", "Linking Your C++ Project", "Installation", "Local Installation", "List of CMake Options", "References", "Reading and Writing Bilevel Instances (BOBILib)", "Bilevel Optimization", "Deriving Single-level Reformulations", "Solving Mixed-Integer Bilevel Problems with coin-or/MibS", "Modeling a Bilevel Problem", "From Pessimistic Bilevel Optimization to Optimistic Bilevel Optimization", "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]", "Solving A Dantzig-Wolfe Reformulation", "Using In-Out Stabilization [TODO]", "Column Generation and Branch-and-Price Algorithm", "The Integer Master Heuristic [TODO]", "Using Strong Branching", "Writing A Branch-and-Cut-and-Price Algorithm [TODO]", "Writing A Branch-and-Price Algorithm", "Mixed-Integer Optimization", "Constraints", "The Environment", "Expressions", "Modeling a MIP with idol", "Models", "Objective Functions", "Variables", "Getting Access to The Underlying Optimizer", "Creating Your Own Optimizer (Advanced) [TODO]", "Creating Your Own Callback", "Solving a MIPs", "The Concept of Optimizer and OptimizerFactory", "Using an External Solver and Accessing the Solution", "Adding User Cuts and Lazy Constraints", "Robust Optimization", "Single-stage Robust Optimization", "Using Column-and-Constraint-Generation", "Introduction", "Using Trust Region Stabilization", "Writing a Column-and-Constraint-Generation Algorithm", "Writing Your Own Separator (Advanced) [TODO]", "Adjustable Robust Optimization (Two-stage)", "Modeling Adjustable Robust Problems"], "titleterms": {"A": [125, 130, 131, 144, 155], "And": 105, "In": [103, 126], "On": 150, "The": [111, 113, 116, 125, 128, 134, 140, 142, 144, 150], "Then": 105, "about": 155, "access": [133, 138, 139, 140, 145], "ad": [123, 138, 146], "add": 139, "add_var": 139, "add_vector": 139, "adjust": [154, 155], "advanc": [118, 119, 120, 121, 141, 153], "affexpr": [69, 135], "affin": [98, 135], "algorithm": [122, 125, 127, 130, 131, 150, 152], "altern": 61, "an": [90, 91, 92, 124, 138, 142, 145, 146], "annot": [65, 155], "answer": 103, "api": 17, "artificialcost": 40, "assign": [86, 94, 95, 155], "assumpt": 151, "automat": 125, "base": 124, "basic": [142, 150], "benchmark": 86, "bender": 146, "bestbound": 27, "bestestim": 28, "bilevel": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 17, 90, 91, 92, 96, 111, 112, 114, 115, 116, 117], "bobilib": 111, "bound": [61, 93, 122, 124], "branch": [39, 61, 86, 93, 94, 95, 118, 122, 124, 127, 129, 130, 131], "branchandbound": 18, "branchandboundcallback": 19, "branchandboundcallbackfactori": 20, "breadthfirst": 29, "build": [87, 88, 89, 105, 109], "c": 106, "callback": [12, 16, 85, 119, 142], "callbackfactori": 13, "cbc": 56, "ccg": 100, "chang": [129, 138], "check": 114, "class": [11, 56, 120, 139], "cmake": 109, "code": 89, "coin": [56, 91, 109, 114], "column": [94, 95, 125, 127, 149, 152], "combin": [95, 144], "commerci": 109, "complet": [115, 155], "comput": 101, "concept": 144, "configur": 105, "constraint": [123, 133, 137, 146, 149, 150, 152], "content": [104, 109, 111, 113, 114, 115, 116, 125, 129, 131, 133, 135, 137, 138, 139, 142, 144, 145, 146, 150, 151, 155], "coupl": 150, "cover": [142, 146], "coverag": 89, "cplex": [56, 114], "creat": [12, 118, 119, 120, 121, 125, 131, 133, 137, 139, 141, 142], "ctr": 66, "ctrtype": 62, "custom": 93, "cut": [21, 22, 123, 130, 142, 146], "dantzig": 125, "dantzigwolf": [40, 42, 45, 46], "dantzigwolfedecomposit": [41, 44], "decis": 98, "decomposit": [94, 125], "defin": [115, 155], "definit": [90, 91, 92, 93, 94, 95, 97, 98, 99, 115, 125, 129, 150], "depend": [87, 89, 109], "depthfirst": 30, "deriv": 113, "describ": 115, "descript": [3, 82, 87, 100], "detail": 103, "determinist": [99, 155], "develop": 88, "dim": 67, "direct": 61, "directli": 113, "disrupt": 98, "document": [87, 88], "doxygen": [0, 1, 3, 4, 5, 6, 7, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 65, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 82], "dualiti": 113, "e": 145, "eigen": [103, 109], "env": 68, "environ": 134, "equival": [99, 116], "etc": 107, "event": 84, "exampl": [12, 18, 19, 70, 89, 96, 104, 105, 109, 115, 142, 144, 145, 146, 155], "express": 135, "extern": [2, 10, 61, 107, 109, 145], "facil": [93, 98, 99, 100, 155], "faq": 102, "farkaspr": 42, "feasibl": 114, "file": 137, "first": 144, "firstinfeasiblefound": 33, "formal": 129, "format": 111, "formul": [113, 125], "from": [116, 137], "full": 129, "function": [115, 129, 138], "g": 145, "gap": 101, "gener": [86, 94, 95, 125, 127, 149, 152], "get": [104, 113, 140], "give": 125, "global": [105, 107], "glpk": [48, 52, 109, 145], "guid": [87, 89], "gurobi": [49, 53, 105, 109], "hash": 109, "heurist": [23, 24, 25, 26, 43, 128], "high": [50, 54, 97, 109, 115], "hood": 109, "how": 101, "i": [101, 103, 104], "idea": 150, "idol": [95, 104, 136, 151], "impact": 150, "implement": [90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 111, 116, 129, 151], "inequ": 146, "instal": [87, 89, 105, 107, 108], "instanc": [93, 97, 111], "instruct": [87, 89, 125], "integ": [11, 17, 61, 83, 96, 114, 117, 128, 132], "integermast": 43, "integr": [88, 89, 109], "introduct": [146, 150, 151], "iter": 137, "its": 99, "kkt": [4, 5, 90, 113], "knapsack": [97, 142, 146], "knapsackcov": 21, "lazi": [123, 146], "lazycutcallback": [12, 14], "leastinfeas": 34, "level": [2, 113, 115], "linear": [133, 135], "linexpr": [70, 135], "link": [106, 109], "list": [11, 83, 109, 142], "local": [107, 108], "localbranch": 23, "locat": [93, 98, 99, 100, 155], "lower": 115, "lp": [90, 124], "main": 115, "make_vector": 139, "map": 109, "martinu": 109, "master": 128, "method": [61, 95], "mib": [0, 1, 8, 9, 91, 114], "milp": 91, "mip": [104, 136, 143], "miscellan": 61, "mix": [11, 17, 61, 83, 96, 114, 117, 132], "model": [2, 61, 71, 81, 113, 115, 136, 137, 139, 145, 155], "modifi": [133, 139], "more": [22, 26, 32, 39, 47, 56], "mosek": [51, 55, 103, 109], "mostinfeas": 35, "natur": 125, "neam": 45, "necessari": 103, "node": [32, 120, 121], "notat": 150, "object": [115, 138], "onc": 139, "open": 109, "optim": [1, 2, 5, 6, 9, 11, 17, 44, 52, 53, 54, 55, 61, 79, 81, 96, 101, 112, 116, 117, 132, 138, 140, 141, 142, 144, 146, 147, 148, 154], "optimist": [90, 91, 92, 116], "optimizerfactori": 144, "option": [89, 107, 109], "osi": 56, "osicbc": 57, "osiclp": 58, "osicplex": 59, "osisymphoni": 60, "other": 109, "out": 126, "over": 137, "own": [12, 118, 119, 120, 121, 141, 142, 153], "padm": [79, 80], "page": [88, 105], "penalti": [61, 95], "pessimist": [92, 116], "phase": 129, "plane": 22, "point": [72, 115], "prerequisit": 131, "price": [61, 86, 94, 95, 127, 130, 131], "problem": [86, 90, 91, 92, 93, 94, 95, 97, 98, 99, 100, 113, 114, 115, 116, 125, 150, 155], "program": [11, 83], "project": [106, 145], "pseudocost": 36, "qcqp": 103, "qctr": 73, "quadexpr": [74, 135], "quadrat": [133, 135], "read": [111, 137], "refer": 110, "reformul": [2, 90, 92, 113, 125], "regard": 150, "region": 151, "relat": [56, 88, 105], "relax": 115, "remov": [133, 139], "ren": 24, "restrict": 129, "robin": 109, "robust": [11, 17, 81, 82, 96, 99, 100, 117, 147, 148, 154, 155], "rule": [32, 39, 98, 118, 121], "save": 145, "score": 129, "select": [32, 121], "sens": 138, "separ": [150, 153], "set": 155, "setup": 114, "sever": 139, "short": 103, "simpleround": 25, "singl": [2, 113, 148], "solut": 145, "solv": [90, 91, 92, 93, 94, 97, 98, 99, 103, 113, 114, 125, 131, 143, 145], "solver": [2, 10, 61, 104, 107, 109, 145], "sourc": 109, "stabil": [47, 126, 151], "stage": [98, 100, 148, 154, 155], "start": 104, "step": [115, 155], "strong": [113, 129], "strongbranch": 37, "strongdual": [6, 7], "support": 142, "tabl": [104, 109, 111, 113, 114, 115, 116, 125, 129, 131, 133, 135, 137, 138, 139, 142, 144, 145, 146, 150, 151, 155], "tempctr": 75, "temporari": 133, "tempqctr": 76, "tempvar": 77, "test": [88, 89, 109], "thi": 104, "todo": [118, 119, 120, 121, 123, 124, 126, 128, 130, 141, 153], "toler": 64, "trust": 151, "tutori": 117, "two": [98, 100, 154, 155], "type": [83, 139], "ubuntu": [87, 89], "uncertainti": 155, "underli": 140, "uniformlyrandom": 38, "unit": [88, 89, 109], "univers": [16, 85, 142], "us": [92, 98, 109, 114, 126, 129, 139, 145, 149, 151], "user": [123, 146], "usercutcallback": [12, 15], "var": [78, 139], "variabl": [137, 139], "variant": 129, "vartyp": 63, "wentg": 46, "what": [104, 135], "why": 103, "wolf": 125, "worstbound": 31, "write": [111, 124, 130, 131, 137, 152, 153], "xpress": 56, "your": [12, 106, 118, 119, 120, 121, 141, 142, 153]}}) \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..9f68f804b --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,2 @@ + +https://hlefebvr.github.io/idol/en/api/bilevel/external-solvers/MibS.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/external-solvers/Optimizers_MibS.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/index.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/modeling/Description.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/single-level/KKT.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/single-level/Optimizers_KKT.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/single-level/Optimizers_StrongDuality.htmlhttps://hlefebvr.github.io/idol/en/api/bilevel/single-level/StrongDuality.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/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/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/BranchAndBound.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/BranchAndBoundCallback.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/BranchAndBoundCallbackFactory.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/cuts/KnapsackCover.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/cuts/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/heuristics/LocalBranching.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/heuristics/RENS.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/heuristics/SimpleRounding.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/heuristics/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/node-selection/BestBound.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/node-selection/BestEstimate.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/node-selection/BreadthFirst.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/node-selection/DepthFirst.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/node-selection/WorstBound.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/node-selection/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/FirstInfeasibleFound.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/LeastInfeasible.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/MostInfeasible.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/PseudoCost.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/StrongBranching.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/UniformlyRandom.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/branch-and-bound/variable-selection/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/ArtificialCosts.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/DantzigWolfeDecomposition.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/FarkasPricing.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/IntegerMaster.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/Optimizers_DantzigWolfeDecomposition.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/stabilization/Neame.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/stabilization/Wentges.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/column-generation/stabilization/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/GLPK.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Gurobi.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/HiGHS.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Mosek.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Optimizers_GLPK.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Optimizers_Gurobi.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Optimizers_HiGHS.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Optimizers_Mosek.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Osi.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Osi/OsiCbc.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Osi/OsiClp.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Osi/OsiCplex.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/external-solvers/Osi/OsiSymphony.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/index.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/misc/CtrType.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/misc/VarType.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/misc/tolerances.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Annotation.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Ctr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Dim.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Env.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Expr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/LinExpr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Model.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Point.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/QCtr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/QuadExpr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/TempCtr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/TempQCtr.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/TempVar.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/modeling/Var.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/padm/Optimizers_PADM.htmlhttps://hlefebvr.github.io/idol/en/api/mixed-integer/padm/PADM.htmlhttps://hlefebvr.github.io/idol/en/api/robust/index.htmlhttps://hlefebvr.github.io/idol/en/api/robust/modeling/Description.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/bilevel-pessimistic.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/robust-adr.htmlhttps://hlefebvr.github.io/idol/en/examples/robust-determistic.htmlhttps://hlefebvr.github.io/idol/en/examples/two-stage-robust-facility-location-problem.htmlhttps://hlefebvr.github.io/idol/en/faq/gap.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/files.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/kkt.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/mibs.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/modeling.htmlhttps://hlefebvr.github.io/idol/en/tutorials/bilevel-optimization/pessimistic.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/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/optimizers.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/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/single-stage/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/index.htmlhttps://hlefebvr.github.io/idol/en/tutorials/robust-optimization/two-stage/modeling.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/files.html b/tutorials/bilevel-optimization/files.html new file mode 100644 index 000000000..e05f4d999 --- /dev/null +++ b/tutorials/bilevel-optimization/files.html @@ -0,0 +1,293 @@ + + + + + + + Reading and Writing Bilevel Instances (BOBILib) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Reading and Writing Bilevel Instances (BOBILib)

    +

    BOBILib is a library of instances for bilevel optimization problems. +In this tutorial, we will show how to read and write bilevel instances in the format which is used by BOBILib. +The advantage is twofold. First, we can easily access a large number of bilevel instances. +Second, we can easily share our bilevel instances with others.

    +

    Let’s get started!

    + +
    +

    The Format

    +

    The instances in BOBILib are stored in two files:

    +
      +
    • An .mps or .lp file containing the high-point relaxation of the bilevel problem,

    • +
    • An .aux file containing the description of the lower-level problem.

    • +
    +

    For more details, we refer to the report [12].

    +
    +
    +

    Implementation

    +
    +

    Reading Instances

    +

    Reading a BOBILib instance is straightforward. We can use the Bilevel::read_from_file function. +However, it requires an underlying solver to parse the .mps file. Here, we will use Gurobi.

    +
    Env env;
    +auto [model, description] =
    +    Bilevel::read_from_file<Gurobi>(env, aux_filename);
    +
    +
    +

    The function returns a pair made by the high-point relaxation model and the description of the lower-level problem.

    +
    +
    +

    Writing Instances

    +

    Assume that you have a bilevel model model and a description description for the lower-level problem. +Writing this problem to file can be done by a single call to Bilevel::write_to_file. +Here, no external solver is necessary.

    +
    /*
    +    the following creates two files:
    +    - instance-filename.mps
    +    - instance-filename.aux
    +*/
    +Bilevel::write_to_file(model, description, "instance-filename");
    +
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..e9d181a86 --- /dev/null +++ b/tutorials/bilevel-optimization/index.html @@ -0,0 +1,289 @@ + + + + + + + Bilevel Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Bilevel Optimization

    +

    Bilevel optimization is a field of mathematical optimization in which two optimization problems are intertwined: the +upper-level and the lower-level problem. The upper-level problem minimizes a given objective function taking into account +the solution to the lower-level problem, which is parameterized by the upper-level’s decision. Such problems have many +applications in, e.g., economics where it is used to model non-cooperative games.

    +

    A classic model for a bilevel problem is as follows.

    +
    +(1)\[\begin{split}\begin{align} + \text{''}\min_{x}\text{''} \quad & F(x,y) \\ + \text{s.t.} \quad & G(x,y) \ge 0, \\ + & x\in X, \\ + & y\in S(x), +\end{align}\end{split}\]
    +

    in which \(S(x)\) denotes the solution set of the lower-level problem, which is parameterized by the upper-level decision +\(x\). The lower-level problem is defined as

    +
    +\[\begin{split}\begin{align} + \min_{y} \quad & f(x,y) \\ + \text{s.t.} \quad & g(x,y) \ge 0, \\ + & y\in Y. +\end{align}\end{split}\]
    +

    Note that the quotes around the \(\min\) operator in (1) is here to highlight that the problem is +ill-defined in its current form. Indeed, in case multiple solutions to the lower-level problem exist, the upper-level problem +has to somehow “choose” one of them. To circumvent this, we typically consider the optimistic setting, where the lower-level +is assumed to pick the solution in favor of the upper-level problem, in order to break ties.

    +

    Optimistic bilevel problems can be modeled as:

    +
    +\[\begin{split}\begin{align} + \min_{x,y} \quad & F(x,y) \\ + \text{s.t.} \quad & G(x,y) \ge 0, \\ + & x\in X, \\ + & y\in S(x), +\end{align}\end{split}\]
    +

    Note that there exists other notions such as pessimistic bilevel problems. There, the lower-level problem is assumed to pick +the worst solution for the upper-level problem. This can be modeled as follows.

    +
    +\[\begin{split}\begin{align} + \min_{x} \quad & \max_{ y\in S(x) } \ F(x,y) \\ + \text{s.t.} \quad & G(x,\bar y) \ge 0, \quad \text{for all } \bar y\in S(x), \\ + & x\in X, \\ + & S(x) \neq \emptyset. + \end{align}\end{split}\]
    +

    Pessimisitc bilevel problems are less studied in the literature.

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/kkt.html b/tutorials/bilevel-optimization/kkt.html new file mode 100644 index 000000000..7abfbf995 --- /dev/null +++ b/tutorials/bilevel-optimization/kkt.html @@ -0,0 +1,408 @@ + + + + + + + Deriving Single-level Reformulations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Deriving Single-level Reformulations

    +

    A standard technique for solving LP-LP bilevel problems is to reformulate the problem as a single-level problem. +This can be done in several ways. In this tutorial, we will show how we can use idol to derive the +Karush-Kuhn-Tucker (KKT) reformulation and the strong-duality reformulation of a bilevel problem.

    +

    Let’s get started!

    + +
    +

    Problem Formulation

    +

    Consider the following bilevel optimization problem:

    +
    +\[\begin{split}\begin{align} + \min_{x,y} \quad & c^\top x + d^\top y \\ + \text{s.t.} \quad & Ax + By \ge a, \\ + & y \in \text{arg min} \{ f^\top y : Dy \ge b - Cx \}. +\end{align}\end{split}\]
    +

    In order to solve problem (1) with a standard optimization solver, we need to reformulate it as a single-level optimization problem. +This can be automatically done by idol using the KKT reformulation or the strong-duality reformulation.

    +

    For this tutorial, we will work on the following code snippet:

    +
    Env env;
    +
    +Model high_point_relaxation(env);
    +
    +auto x = high_point_relaxation.add_var(0, Inf, Continuous, 0., "x");
    +auto y = high_point_relaxation.add_var(-Inf, Inf, Continuous, 0., "y");
    +
    +high_point_relaxation.set_obj_expr(x + 6 * y);
    +auto lower_c1 = high_point_relaxation.add_ctr(2 * x - y >= 0);
    +auto lower_c2 = high_point_relaxation.add_ctr(-x - y >= -6);
    +auto lower_c3 = high_point_relaxation.add_ctr(-x + 6 * y >= -3);
    +auto lower_c4 = high_point_relaxation.add_ctr(x + 3 * y >= 3);
    +high_point_relaxation.add_ctr(-x + 5 * y <= 12.5);
    +
    +Bilevel::Description description(env);
    +description.set_lower_level_obj(-y);
    +description.make_lower_level(y);
    +description.make_lower_level(lower_c1);
    +description.make_lower_level(lower_c2);
    +description.make_lower_level(lower_c3);
    +description.make_lower_level(lower_c4);
    +
    +
    +

    Here, a bilevel problem is modeled with idol. The high point relaxation is stored in high_point_relaxation, while +the lower-level problem is described using the Bilevel::Description object description.

    +
    +
    +

    The KKT Reformulation

    +

    The KKT reformulation of a bilevel problem is obtained by replacing the lower-level problem with its KKT optimality conditions. +The KKT reformulation of the bilevel problem is as follows:

    +
    +(1)\[\begin{split}\begin{align} + \min_{x,y,\lambda} \quad & c^\top x + d^\top y \\ + \text{s.t.} \quad & Ax + By \ge a, \\ + & Dy \ge b - Cx, \\ + & D^\top \lambda = f, \; \lambda \ge 0, \\ + & \lambda^\top (b - Cx - Dy) = 0. +\end{align}\end{split}\]
    +
    +

    Getting the Reformulated Model

    +

    With idol, it is possible to generate the KKT reformulation of the bilevel problem using the Bilevel::KKT::make_model function.

    +

    For instance, one could do the following.

    +
    auto single_level_model = Bilevel::KKT::make_model(
    +    high_point_relaxation, description
    +    );
    +
    +
    +

    Then, one can solve the single-level model using a standard optimization solver. Here, we use Gurobi.

    +
    single_level.use(Gurobi());
    +single_level.optimize();
    +
    +
    +

    Note that the KKT reformulation (1), and thus single_level, is a nonlinear problem because of the complementarity constraint. +Hence, we use the nonlinear solving features of Gurobi here.

    +

    A common approach to handle the complementarity constraints is to linearize them by introducing binary variables. +This can also be done in idol. To do this, we will need to provide some valid bounds on the dual variables. +This is done by annotating the lower-level problem constraints. The constraints associated with the variables +bounds can also have their big-M values by annotating the corresponding variable.

    +

    In the following code, we will simply use a default value for the big-M values of \(10^{4}\).

    +
    Annotation<double> big_M(env, "big_M", 1e4);
    +auto single_level_model = Bilevel::KKT::make_model(
    +        high_point_relaxation, description, big_M
    +        );
    +
    +
    +

    The returned model is now a mixed-integer linear program that can be solved using a standard optimization solver.

    +

    Now, say that constraint lower_c1 is known to have a dual variable bounded by, say, 10. One could do the following.

    +
    Annotation<double> big_M(env, "big_M", 1e4);
    +lower_c1.set(big_M, 10);
    +
    +auto single_level_model = Bilevel::KKT::make_model(
    +        high_point_relaxation, description, big_M
    +        );
    +
    +
    +
    +
    +

    Solving the KKT Reformulation directly

    +

    In the previous section, we showed how to generate the KKT reformulation of a bilevel problem. +However, idol also provides a function to solve the KKT reformulation directly. +This can be done by using the Bilevel::KKT optimizer.

    +

    Here is a code snippet that shows how to solve the KKT reformulation directly.

    +
    high_point_relaxation.use(Bilevel::KKT(description) + Gurobi());
    +
    +
    +

    Note that big-M values can also be provided to the Bilevel::KKT optimizer. Here is an example.

    +
    high_point_relaxation.use(
    +    Bilevel::KKT(description)
    +        .with_single_level_optimizer(Gurobi())
    +        .with_big_M(big_M)
    +);
    +
    +
    +

    Calling the optimize method on the model will solve the KKT reformulation of the bilevel problem.

    +
    +
    +
    +

    The Strong-duality Reformulation

    +

    Another single-level reformulation is the so-called strong-duality reformulation which reads

    +
    +\[\begin{split}\begin{align} + \min_{x,y,\lambda} \quad & c^\top x + d^\top y \\ + \text{s.t.} \quad & Ax + By \ge a, \\ + & Dy \ge b - Cx, \\ + & D^\top \lambda = f, \; \lambda \ge 0, \\ + & f^\top y \le (b - Cx)^\top \lambda. +\end{align}\end{split}\]
    +
    +

    Getting the Reformulated Model

    +

    The strong-duality reformulation can be obtained using the Bilevel::StrongDuality::make_model function. +This function works similarly to the Bilevel::KKT::make_model function. +Here is an example.

    +
    auto single_level_model = Bilevel::StrongDuality::make_model(
    +    high_point_relaxation, description
    +    );
    +single_level_model.use(Gurobi());
    +single_level_model.optimize();
    +
    +
    +

    Note that here, the strong-duality reformulation is a nonlinear problem because of the dual objective function. +Hence, we use the nonlinear solving features of Gurobi here.

    +
    +
    +

    Solving the Strong-duality Reformulation directly

    +

    Similarly to the KKT reformulation, idol also provides a function to solve the strong-duality reformulation directly. +This can be done by using the Bilevel::StrongDuality optimizer as follows.

    +
    high_point_relaxation.use(
    +    Bilevel::StrongDuality(description) + Gurobi()
    +);
    +high_point_relaxation.optimize();
    +
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/mibs.html b/tutorials/bilevel-optimization/mibs.html new file mode 100644 index 000000000..b700b8d2a --- /dev/null +++ b/tutorials/bilevel-optimization/mibs.html @@ -0,0 +1,296 @@ + + + + + + + Solving Mixed-Integer Bilevel Problems with coin-or/MibS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving Mixed-Integer Bilevel Problems with coin-or/MibS

    +

    MibS is an optimization solver for mixed-integer bilevel problems; for more information, please refer to the MibS website. +Idol seamlessly interfaces with MibS to solve bilevel problems.

    +

    We will see that solving bilevel problems with MibS is very similar to solving any optimization problem in idol.

    + +
    +

    Setup

    +

    We will assume that you have your bilevel problem already modeled in idol. In particular, we consider that you have +two variables:

    +
      +
    1. high_point_relaxation which is a Model representing the high-point relaxation of your bilevel problem.

    2. +
    3. description which is a Bilevel:Description object representing the bilevel problem. If you do not know what this is or how to create it, please refer to the previous tutorial.

    4. +
    +
    +
    +

    Using MibS

    +

    To solve your bilevel problem, you can use the MibS optimizer factory as follows:

    +
    high_point_relaxation.use(Bilevel::MibS(description));
    +
    +high_point_relaxation.optimize();
    +
    +std::cout << save_primal(high_point_relaxation) << std::endl;
    +
    +
    +

    Notice how the MibS optimizer factory is attached to the high-point relaxation model and that the bilevel description +is passed as an argument.

    +

    The rest of the code is the same as with any other solver.

    +
    +

    Hint

    +

    To use MibS, you need to have the MibS library installed on your system and idol linked against it. +You can download MibS from here.

    +

    Then, idol should be compiled with the options USE_MIBS=YES, USE_CLP=YES.

    +
    +
    +
    +

    Using CPLEX for Feasibility Check

    +

    Note that it is also possible to use MibS in combination with CPLEX for the feasibility check. This can be done as follows:

    +
    const auto mibs = Bilevel::MibS(description)
    +                    .with_cplex_for_feasibility(true)
    +                    .with_time_limit(3600)
    +                    .with_logs(true);
    +
    +high_point_relaxation.use(mibs);
    +
    +high_point_relaxation.optimize();
    +
    +std::cout << save_primal(high_point_relaxation) << std::endl;
    +
    +
    +

    Off course, MibS must have been installed with CPLEX for this to work.

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/modeling.html b/tutorials/bilevel-optimization/modeling.html new file mode 100644 index 000000000..d81719f76 --- /dev/null +++ b/tutorials/bilevel-optimization/modeling.html @@ -0,0 +1,354 @@ + + + + + + + Modeling a Bilevel Problem + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Modeling a Bilevel Problem

    +

    In this tutorial, we will see how to model a 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 MIP modeling.

    + +
    +

    Problem Definition and Main Steps

    +

    We consider the optimistic bilevel problem

    +
    +\[\begin{split}\begin{align} + \min_{x, y} \quad & -x + -10 y \\ + \text{s.t.} \quad & x \in \mathbb Z_{\ge 0} \\ + & y\in + \begin{array}[t]{rl} + \displaystyle \underset{y}{\text{arg min}} \quad & y \\ + \text{s.t.} \quad & -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_{\ge 0}. + \end{array} +\end{align}\end{split}\]
    +

    This is an ILP-ILP bilevel problem which is taken from [10] (Example 1).

    +

    To model this problem in idol, there are three main steps:

    +
      +
    1. Define the high-point relaxation (HPR) model,

    2. +
    3. Describe which variables and constraints are part of the lower-level problem,

    4. +
    5. Define the lower-level objective function.

    6. +
    +
    +
    +

    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 MIP modeling.

    +

    In our example, the HPR reads

    +
    +\[\begin{split}\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}\end{split}\]
    +

    Here is the code to model the HPR of the bilevel problem.

    +
    Env env;
    +Model high_point_relaxation(env);
    +
    +auto x = high_point_relaxation.add_var(0, Inf, Integer, 0, "x");
    +auto y = high_point_relaxation.add_var(0, Inf, Integer, 0, "y");
    +
    +high_point_relaxation.set_obj_expr(-x - 10 * y);
    +auto lower_c1 = high_point_relaxation.add_ctr(-25*x + 20*y <= 30);
    +auto lower_c2 = high_point_relaxation.add_ctr(x + 2 * y <= 10);
    +auto lower_c3 = high_point_relaxation.add_ctr(2 * x - y <= 15);
    +auto lower_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 it. +This is done by creating an object of type Bilevel::Description and calling the methods make_lower_level.

    +
    Bilevel::Description description(env);
    +description.make_lower_level(y);
    +description.make_lower_level(lower_c1);
    +description.make_lower_level(lower_c2);
    +description.make_lower_level(lower_c3);
    +description.make_lower_level(lower_c4);
    +
    +
    +

    Note that this does nothing more but to create a new Annotation<unsigned int> to indicate variables and constraints that are part of the lower-level problem. +These annotations are used by the bilevel solvers to identify the lower-level problem. +In particular, all variables and constraints that are not annotated as lower-level variables or constraints are considered as upper-level variables or constraints, respectively. +Upper-level variables and constraints have an annotation which is set to MasterId by default.

    +

    Also note that it is possible to create and use your own annotation. For instance, the following code is equivalent to the previous one.

    +
    Annotation<unsigned int> lower_level(env, MasterId, "lower_level");
    +
    +y.set(lower_level, 0);
    +lower_c1.set(lower_level, 0);
    +lower_c2.set(lower_level, 0);
    +lower_c3.set(lower_level, 0);
    +lower_c4.set(lower_level, 0);
    +
    +
    +Bilevel::Description description(lower_level);
    +
    +
    +
    +
    +

    Defining the Lower-Level Objective Function

    +

    Finally, we need to define the lower-level objective function. +This is done by calling the method set_lower_level_obj on the object of type Bilevel::Description. +A QuadExpr object is passed as argument to this method.

    +
    description.set_lower_level_obj(y);
    +
    +
    +
    +
    +

    Complete Example

    +

    A complete example is available here and uses the MibS solver.

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/bilevel-optimization/pessimistic.html b/tutorials/bilevel-optimization/pessimistic.html new file mode 100644 index 000000000..dcbfa415a --- /dev/null +++ b/tutorials/bilevel-optimization/pessimistic.html @@ -0,0 +1,318 @@ + + + + + + + From Pessimistic Bilevel Optimization to Optimistic Bilevel Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    From Pessimistic Bilevel Optimization to Optimistic Bilevel Optimization

    +

    Most of the litereature on bilevel optimization focuses on the optimistic setting, where the lower-level problem is assumed to +pick the solution in favor of the upper-level problem. +However, there exists other notions such as pessimistic bilevel problems.

    +

    A pessimistic problem reads as follows:

    +
    +(1)\[\begin{split}\begin{align} + \min_{x} \quad & \max_{ y\in S(x) } \ F(x,y) \\ + \text{s.t.} \quad & x\in X, \\ + & S(x) \neq \emptyset, + \end{align}\end{split}\]
    +

    with \(S(x)\) the solution set of

    +
    +\[\begin{split}\begin{align} + \min_{y} \quad & f(x,y) \\ + \text{s.t.} \quad & g(x,y) \ge 0, \\ + & y\in Y. +\end{align}\end{split}\]
    +

    In this tutorial, we will show how a pessimistic bilevel problem can be automatically transformed into an optimistic bilevel problem. +This transformation is due to [16].

    +
    +

    Hint

    +

    Here, (1) does not have coupling constraints for simplicity. +However, the transformation can be extended to bilevel problems with coupling constraints.

    +
    + +
    +

    The Equivalent Optimistic Problem

    +

    In [16], the authors show that the pessimistic bilevel problem (1) is equivalent to the following optimistic bilevel problem:

    +
    +(2)\[\begin{split}\begin{align} + \min_{x,\bar y} \quad & F(x,y) \\ + \text{s.t.} \quad & x\in X, \ \bar y\in Y, \\ + & g(x,\bar y) \ge 0, \\ + & y\in \tilde S(x, \bar y), +\end{align}\end{split}\]
    +

    in which \(\tilde S(x, \bar y)\) is the solution set of

    +
    +\[\begin{split}\begin{align} + \min_y \quad & -F(x,y) \\ + \text{s.t.} \quad & g(x,y) \ge 0, \\ + & y\in Y, \\ + & f(x,y) \le f(x, \bar y). +\end{align}\end{split}\]
    +

    Note that (2) is an optimistic bilevel problem.

    +
    +
    +

    Implementation

    +

    Deriving the equivalent optimistic bilevel problem from a pessimistic bilevel problem can be done easily in idol.

    +

    To this end, let us assume that you have your bilevel problem already modeled in idol. In particular, let us consider that you have +two variables:

    +
      +
    1. high_point_relaxation which is a Model representing the high-point relaxation of your bilevel problem.

    2. +
    3. description which is a Bilevel:Description object representing the bilevel problem. If you do not know what this is or how to create it, please refer to the previous tutorial.

    4. +
    +

    Then, you can derive the equivalent optimistic bilevel problem as follows:

    +
    auto [opt_model, opt_description] =
    +    Bilevel::PessimisticAsOptimistic::make_model(
    +                                        high_point_relaxation,
    +                                        description
    +                                );
    +
    +
    +

    Here, opt_model is the high-point relaxation of (2) and opt_description is the bilevel description of (2).

    +

    The rest of the code is the same as with any other solver. For instance, you can solve the optimistic bilevel problem with MibS as follows:

    +
    opt_model.use(Bilevel::MibS(opt_description));
    +
    +opt_model.optimize();
    +
    +std::cout << save_primal(opt_model) << std::endl;
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/index.html b/tutorials/index.html new file mode 100644 index 000000000..6731873cc --- /dev/null +++ b/tutorials/index.html @@ -0,0 +1,318 @@ + + + + + + + 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 000000000..47ba45f2c --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-branching-rule.html @@ -0,0 +1,221 @@ + + + + + + + Creating Your Own Branching Rule (Advanced) [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Creating Your Own Branching Rule (Advanced) [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..5ade8545a --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-callback.html @@ -0,0 +1,221 @@ + + + + + + + Create Your Own Callback (Advanced) [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Create Your Own Callback (Advanced) [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..d7cb0888d --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-node-selection-rule.html @@ -0,0 +1,221 @@ + + + + + + + Creating Your Own Node Selection Rule (Advanced) [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Creating Your Own Node Selection Rule (Advanced) [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..dc97130c7 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/create-node.html @@ -0,0 +1,221 @@ + + + + + + + Creating Your Own Node Class (Advanced) [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Creating Your Own Node Class (Advanced) [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..88f1c14de --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/index.html @@ -0,0 +1,248 @@ + + + + + + + Branch-and-Bound Algorithm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Branch-and-Bound Algorithm

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..da6ac4cf4 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/user-cuts-lazy-constraints.html @@ -0,0 +1,221 @@ + + + + + + + Adding User Cuts and Lazy Constraints [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Adding User Cuts and Lazy Constraints [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..d85c18a32 --- /dev/null +++ b/tutorials/mixed-integer-programming/branch-and-bound/write-branch-and-bound.html @@ -0,0 +1,245 @@ + + + + + + + Writing an LP-based Branch-and-Bound [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Writing an LP-based Branch-and-Bound [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..f27b34427 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/dantzig-wolfe.html @@ -0,0 +1,432 @@ + + + + + + + Solving A Dantzig-Wolfe Reformulation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving A Dantzig-Wolfe Reformulation

    +

    In this tutorial, we will see how to implement a column generation algorithm to solve a continuous relaxation of the Generalized Assignment Problem (GAP). +This relaxation is obtained by relaxing the Dantzig-Wolfe reformulation of the GAP.

    +
    +

    Hint

    +

    This tutorial regards the advanced topic of Column Generation and Dantzig-Wolfe decomposition. +Rudimentary notions in the following subjects are recommended:

    + +
    +

    A complete example which includes branching is available here.

    + +
    +

    Problem Definition

    +

    Given a set of \(m\) agents and \(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 \(i\in\{1,\dotsc,m\}\) has a capacity \(C_i\). +Each job \(j\in\{1,\dotsc,n\}\) has a resource consumption \(r_{ij}\) and a cost \(c_{ij}\) when assigned to agent \(i\).

    +
    +

    The Natural Formulation

    +

    We model the GAP with the following binary linear program:

    +
    +\[\begin{split}\begin{align*} + \min_{x} \quad & \sum_{i=1}^m \sum_{j=1}^n c_{ij} x_{ij} \\ + \text{s.t.} \quad & \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*}\end{split}\]
    +

    Here, variable \(x_{ij}\) encodes the assignment decision and equals 1 if and only if task \(j\) is assigned to +agent \(i\).

    +
    +
    +

    The Dantzig-Wolfe Reformulation

    +

    Let us enumerate the list of all feasible assignments, i.e., let

    +
    +\[\{\bar x^e_{ij} \}_{e\in E} = \left\{ x \in \{ 0,1 \}^{mn} : \sum_{j=1}^n r_{ij}x_{ij} \le C_i \quad i=1,...,m \right\},\]
    +

    in which \(E\) denotes a list for their indices.

    +

    The Dantzig-Wolfe reformulation of GAP reads

    +
    +(1)\[\begin{split}\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 \quad j=1,...,n, \\ +& \sum_{e\in E} \lambda_e = 1, \\ +& \lambda_e \in \{ 0, 1 \} & \text{for all } e\in E.\end{split}\]
    +

    Though this model contains an exponential number of variables, it can be solved efficiently using +Column Generation and Branch-and-price. In such a case, the pricing problem is a Knapsack Problem.

    +

    In this tutorial, we focus on the continuous relaxation of (1).

    +
    +
    +
    +

    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).

    +

    We will start by modeling the problem in its natural form and then indicate which constraints should be moved to the pricing problem.

    +
    +

    The Natural Formulation

    +

    Before we start, we will use a GAP instance stored in a file. This file reads as follows.

    +
    3   8
    +-27 -12 -12 -16 -24 -31 -41 -13
    +-14  -5 -37  -9 -36 -25  -1 -35
    +-34 -34 -20  -9 -19 -19  -3 -24
    +21 13  9  5  7 15  5 24
    +20  8 18 25  6  6  9  6
    +16 16 18 24 11 11 16 18
    +26 25 34
    +
    +http://www.or.deis.unibo.it/kp/Chapter7.pdf Example 7.3
    +
    +
    +

    To read an instance of the GAP, we need to include the header file located in idol/mixed-integer/problems/generalized-assignment-problem/GAP_Instance.h.

    +

    Then, we can use the Problems::GAP::read_instance function to read the instance file.

    +
    const auto instance =
    +        Problems::GAP::read_instance("assignment-bap.data.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 this tutorial on modeling)

    +
    // 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 a template argument which is the value type of the annotation. Here, the Dantzig-Wolfe +decomposition expects an annotation with a value of type unsigned int and which corresponds +to the sub-problem index to which the constraint will be moved to.

    +

    We create the annotation as follows.

    +
    Annotation<unsigned int> decomposition(env, "decomposition", MasterId);
    +
    +
    +

    Here, we pass three arguments to the constructor of Annotation<unsigned int>. First, we pass the optimization +environment which will store the annotation. Then, a name is given to the annotation: here, “decomposition”. +Finally, a default value is given and is set to 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.

    +
    for (unsigned int i = 0 ; i < n_agents ; ++i) {
    +    auto 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.

    +
    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 Column Generation Algorithm

    +

    Now that the desired decomposition has been specified, we can set the desired optimizer to solve our model. +Here, we want to solve our the continuous relaxation of the Dantzig-Wolfe reformulation using column generation.

    +

    To begin with, we need to give some instructions 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 +DantzigWolfe::SubProblem object.

    +
    const auto sub_problem_specifications = DantzigWolfe::SubProblem()
    +                                            .add_optimizer(Gurobi());
    +
    +
    +

    Then, we can create the column generation algorithm (factory) in the following way.

    +
    const auto column_generation = DantzigWolfeDecomposition(decomposition)
    +        .with_master_optimizer(Gurobi::ContinuousRelaxation())
    +        .with_default_sub_problem_spec(sub_problem_specifications);
    +
    +
    +

    We can now tell idol to use this algorithm for solving our model by using the Model::use method.

    +
    model.use(column_generation);
    +
    +
    +
    +
    +

    Solving

    +

    As usual, one can simply call the Model::optimize method to solve the problem.

    +
    model.optimize();
    +
    +
    +

    That’s it! The problem is being solved by column generation, and possibly branching on fractional variables.

    +

    The rest remains unchanged and one can retrieve the solution +through the usual methods such as Model::get_status and Model::get_var_primal.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..42cd86edb --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/in-out-stabilization.html @@ -0,0 +1,221 @@ + + + + + + + Using In-Out Stabilization [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Using In-Out Stabilization [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..abacbc331 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/index.html @@ -0,0 +1,263 @@ + + + + + + + Column Generation and Branch-and-Price Algorithm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Column Generation and Branch-and-Price Algorithm

    +

    Column generation is an algorithm used to solve large scale optimization problems which involve a large number of variables. +Instead of solving the problem in its entirety, column generation begins with a restricted version of the problem containing only a subset of variables. It then iteratively introduces new variables (or columns) that have the potential to improve the solution, based on the problem’s structure and constraints.

    +

    In practice, column generation is particularly effective for problems with block-angular structures, such as cutting stock, vehicle routing, and generalized assignment problems. The method splits the problem into a master problem, which handles the selection of variables, and a pricing problem, which identifies the most promising variables to add to the master problem. These subproblems are solved iteratively until no further improvements are possible.

    +
    +https://upload.wikimedia.org/wikipedia/commons/e/ec/DW_Block_Angular_Matrix.jpg + +
    +

    Block-angular matrix structure particularly suited for column generation.

    +
    +
    +

    The Branch-and-Price algorithm extends column generation to integer programming. While column generation operates on the linear relaxation of the problem, Branch-and-Price integrates it into a Branch-and-Bound framework to handle integer constraints. This combination allows efficient exploration of the solution space while exploiting the power of decomposition techniques. Each node of the Branch-and-Bound tree employs column generation to solve the relaxed problem, providing tight bounds for pruning and accelerating convergence.

    +

    In this series of tutorials, we will see how column generation and, more precisely, Dantzig-Wolfe decomposition can be implemented in idol.

    +
    +

    Hint

    +

    For more details on column generation, we refer to the book [13].

    +
    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..707a9eee6 --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/integer-master.html @@ -0,0 +1,221 @@ + + + + + + + The Integer Master Heuristic [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    The Integer Master Heuristic [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..df89257bc --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/strong-branching.html @@ -0,0 +1,417 @@ + + + + + + + Using Strong Branching + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Using Strong Branching

    +

    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.

    + +
    +

    Formal Definition

    +

    Let \(C\) be a set of indices for branching candidates at a given node, i.e., for each \(j\in C\), +\(x_j\) is an integer variable in the original problem but with \(x_j^*\notin\mathbb Z\) at the current node. +Strong Branching tries to evaluate the effect of applying branching constraints \(x_j \le \lfloor x_j^* \rfloor\) and +\(x_j \ge \lceil x_j^* \rceil\) to the current node. To do so, it solves, before branching happens, and for each \(j\in C\), +both the left and right child node. Let \(z_i^\le\) and \(z_i^\ge\) denote the (optimal) value of the +left and right nodes if branching is performed on \(x_j\). The “effect of branching on \(x_j\)” is then estimated by +computing a score, noted \(\text{Score}(j)\), based on \(z_j^\le\) and \(z_j^\ge\). Then Strong Branching +selects the variable with an index \(j^*\) such that (for minimization problems)

    +
    +\[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 \(\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 [1].

    +
    +

    Scoring Functions

    +

    Two common scoring functions \(\text{Score}(j)\) are found in the literature. The linear formula [9]

    +
    +\[\text{LinearScore}(j) := (1 - \mu) \min(\Delta_j^\le, \Delta_j^\ge) + \mu \max(\Delta_j^\le, \Delta_j^\ge),\]
    +

    and the product formula

    +
    +\[\text{ProductScore}(j) := \max(\Delta_j^\le, \varepsilon) \max(\Delta_j^\ge, \varepsilon),\]
    +

    in which \(\Delta_j^\le := z_j^\le - z^*\) and \(\Delta_j^\ge := z_j^\ge - z^*\) with \(z^*\) denoting the +(optimal) value of the current node. Parameters \(\mu\in[0,1]\) and \(\varepsilon > 0\) are given. +In idol, \(\mu = 1/6\) and \(\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 \(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 \(K\) branching candidates at each branching decision instead of the whole set \(C\). +Thus, \(C\) is replaced by a smaller set \(R\subseteq C\) such that \(|R| = K\) with \(K\) fixed. +The “restricted branching candidate set” \(R\) is created by taking the \(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” \(R\). Instead, it considers a look ahead parameter, noted +\(L\), and applies the Full Strong Branching rule. However, if the branching candidate does not change after \(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 Column Generation. +More specifically, we will assume that you have a variable +model of type Model which has a decomposable structure specified by the annotation (Annotation<unsigned int>) decomposition.

    +
    +

    Full Strong Branching

    +

    Recall that the Branch-and-Price algorithm is created by the following code.

    +
    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 StrongBranching class to define our branching rule. We can, for instance, simply +declare

    +
    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 +BranchAndBound::with_branching_rule method.

    +
    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.

    +
    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 StrongBranching::with_max_n_variables method. +This is done as follows.

    +
    const auto branching_rule =
    +        StrongBranching()
    +            .with_max_n_variables(50);
    +
    +
    +

    Here, we set the maximum number of considered variables equal to \(K = 50\).

    +
    +
    +

    Phases

    +

    In this section, we will discuss how to implement phases with the strong branching rule. This is done by using the +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 \(K = 30\) and which solves nodes with an iteration +limit of 20.

    +
    const auto branching_rule =
    +            StrongBranching()
    +                .add_phase(StrongBranchingPhases::WithNodeOptimizer(), std::numeric_limits<unsigned int>::max(), 3)
    +                .add_phase(StrongBranchingPhases::WithIterationLimit(20), 30, std::numeric_limits<unsigned int>::max());
    +
    +
    +

    Observe how we used std::numeric_limits<unsigned int>::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 StrongBranching::with_scoring_function method. This method +takes a scoring function as an argument. The scoring function is a sub-class of NodeScoreFunction and can be +Linear or Product.

    +

    By default, idol uses the product scoring function. To change it to the linear scoring function, one can simply write

    +
    const auto branching_rule =
    +    StrongBranching()
    +        .with_scoring_function(NodeScoreFunctions::Linear());
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..dd575689b --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-cut-and-price.html @@ -0,0 +1,221 @@ + + + + + + + Writing A Branch-and-Cut-and-Price Algorithm [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Writing A Branch-and-Cut-and-Price Algorithm [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..2af79c32e --- /dev/null +++ b/tutorials/mixed-integer-programming/dantzig-wolfe/writing-branch-and-price.html @@ -0,0 +1,305 @@ + + + + + + + Writing A Branch-and-Price Algorithm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Writing A Branch-and-Price Algorithm

    +

    This tutorial is a follow-up to the Dantzig-Wolfe decomposition tutorial. +In this tutorial, we will see how to implement a Branch-and-Price algorithm in idol to, not only solve +the continuous relaxation of the Generalized Assignment Problem (GAP), but also handle the integrality constraints.

    + +
    +

    Prerequisites

    +

    We will assume that you have already defined your model as well as the column generation optimizer factory. +If you haven’t done so, we recommend you to read the Dantzig-Wolfe decomposition tutorial.

    +

    Hence, you should already have something like this:

    +
    const auto sub_problem_specifications = DantzigWolfe::SubProblem()
    +                                            .add_optimizer(Gurobi());
    +
    +const auto column_generation = DantzigWolfeDecomposition(decomposition)
    +        .with_master_optimizer(Gurobi::ContinuousRelaxation())
    +        .with_default_sub_problem_spec(sub_problem_specifications);
    +
    +
    +

    Moreover, we will assume that your model is called model and that the decomposition annotation is called decomposition.

    +
    +
    +

    Creating the Branch-and-Price Algorithm

    +

    Our remaining task is to embed our column generation routine inside of a Branch-and-Bound algorithm.

    +

    Hence, we create a branch-and-bound algorithm as follows.

    +
    const auto branch_and_bound = BranchAndBound()
    +
    +    /* 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)
    +
    +);
    +
    +
    +

    Here, variables are selected for branching using the most-infeasible rule, and nodes are selected using the best-bound rule. +We also set a time limit of one hour.

    +

    The column generation algorithm can easily be combined with the branch-and-bound algorithm using the BranchAndBound::with_node_optimizer +method, or by simply adding the two algorithms together.

    +

    For instance, the following line creates a branch-and-price algorithm.

    +
    model.use(branch_and_bound + column_generation);
    +
    +
    +
    +
    +

    Solving

    +

    As usual, one can simply call the Model::optimize method to solve the problem.

    +
    model.optimize();
    +
    +
    +

    That’s it! The problem is being now solved by a branch-and-price and the integrality constraints are handled automatically!

    +

    The rest remains unchanged and one can retrieve the solution +through the usual methods such as Model::get_status and Model::get_var_primal.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..abe561ac7 --- /dev/null +++ b/tutorials/mixed-integer-programming/index.html @@ -0,0 +1,290 @@ + + + + + + + Mixed-Integer Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Mixed-Integer Optimization

    +

    Mixed-integer optimization deals with problems of the following form:

    +
    +(1)\[\begin{split}\begin{align} + \min_{x} \quad & c^\top x + x^\top D x + c_0 \\ + \text{s.t.} \quad & a_{i\cdot}^\top x + x^\top Q^i x \le b_i, \quad i = 1, \ldots, m, \\ + & x_j \in \mathbb{Z}, \quad j \in I \subseteq \{ 1, \dotsc, n \}. +\end{align}\end{split}\]
    +

    Here, \(x\) are the decision variables, while \(c\), \(D\), \(c_0\), \(a_i\), \(Q^i\), and \(b_i\) are given data. +Some of the decision variables are required to be integer-valued and are indexed by \(I\).

    +

    We say that (1) is an integer problem if \(I = \{ 1, \dotsc, n \}\), i.e., if all variables are required to +be integer. It is said to be mixed-integer if \(I \neq \emptyset\). Otherwise, we say that (1) is a continuous problem.

    +

    An important class of problems is when \(D = 0\) and \(Q^i = 0\) for all \(i\), i.e., when the objective function and the constraints are linear. +In such a case, we say that (1) is a mixed-integer linear problem (MILP), or a linear problem (LP) if all variables are continuous.

    +
    +https://upload.wikimedia.org/wikipedia/commons/0/06/IP_polytope_with_LP_relaxation.svg + +
    +

    The feasible region of an integer problem and its linear relaxation.

    +
    +
    +

    Table of Contents

    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..71aa4ebab --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/constraints.html @@ -0,0 +1,370 @@ + + + + + + + Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Constraints

    +

    Constraints are mathematical expressions that must be satisfied by the decision variables of an optimization problem. +They are used to model relationships between variables, and to restrict the feasible region of the problem.

    +

    There are mainly two types of constraints:

    +
      +
    • Linear Constraints: constraints that are linear in the decision variables.

    • +
    • Quadratic Constraints: constraints that are non-linear in the decision variables.

    • +
    + +
    +

    Linear Constraints

    +
    +

    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 Ctr class and added to a model by means of +Model::add or by calling the Model::add_ctr method.

    +

    Using the Ctr class directly creates a variable that is not associated to any model. We will then need to add it +explicitly to a model. This is done by calling the Model::add method. See for instance the following 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.

    +
    Env env;
    +Model model(env);
    +
    +const auto x = model.add_vars(Dim<1>(2), 0., Inf, Continuous, 0, "x");
    +const auto constraint = model.add_ctr(x[0] + x[1] >= 1);
    +
    +
    +
    +
    +

    Temporary Constraints

    +

    As you can see, a constraint is created using the pattern {expression} {sign} {expression} where

    +
      +
    • {sign} is one of <=, >= and ==;

    • +
    • {expression} is an expression, i.e., an instance of AffExpr.

    • +
    +

    Actually, the pattern {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 Model::add_ctr method. +Temporary constraints are objects of the class TempCtr. An equivalent code would be.

    +
    Env env;
    +Model model(env);
    +
    +const auto x = model.add_vars(Dim<1>(2), 0., Inf, Continuous, "x");
    +const auto temporary_constraint = TempCtr(x[0] + x[1], GreaterOrEqual, 1);
    +
    +model.add_ctr(temporary_constraint);
    +
    +
    +

    Here, the sign of the constraint is +specified by the second argument of the constructor of the TempCtr class, and can take values +LessOrEqual, GreaterOrEqual and EqualTo.

    +
    +
    +

    Accessing Constraints

    +

    Information about a given constraint in a model can be accessed by calling the corresponding methods of the model. +For instance, one can access the right-hand side of a constraint by calling the Model::get_ctr_rhs method. +Here is a list of the most common methods to access information about a constraint.

    +
      +
    • Model::get_ctr_rhs: get the right-hand side of a constraint,

    • +
    • Model::get_ctr_type: get the type of a constraint,

    • +
    • Model::get_ctr_row: get the row of a constraint,

    • +
    • Model::get_ctr_index: get the index of a constraint.

    • +
    +

    When available, the values associated to the constraint in a given solution can be accessed in a similar way. +Here is a list of the most common methods to access information about a constraint in a solution.

    +
      +
    • Model::get_ctr_dual: get the dual value of a constraint,

    • +
    • Model::get_ctr_farkas: get the Farkas certificate of a constraint (for infeasible systems).

    • +
    +

    The Model::has method can be used to check if a given constraint is in the model.

    +

    For more details, see the Model class.

    +
    +
    +

    Modifying Constraints

    +

    Similarly to accessing constraints, the attributes of a constraint can be modified by calling the corresponding methods of the model. +Here is a list of the most common methods to modify a constraint.

    +
      +
    • Model::set_ctr_rhs: set the right-hand side of a constraint,

    • +
    • Model::set_ctr_type: set the type of a constraint,

    • +
    • Model::set_ctr_row: set the row of a constraint.

    • +
    +

    The row of a constraint in the model can be modified by calling the Ctr::set_row method. +For instance.

    +
    LinExpr row;
    +row.set(x, coefficient_for_x_in_constraint);
    +row.set(y, coefficient_for_y_in_constraint);
    +
    +model.set_ctr_row(constraint, row);
    +
    +
    +

    For more details, see the Model class.

    +
    +
    +

    Removing Constraints

    +

    A constraint can be removed from a model by calling the Model::remove method.

    +
    +
    +
    +

    Quadratic Constraints

    +

    Creating, accessing and modifying quadratic constraints is similar to linear constraints. The main difference is that +quadratic constraints are created using the QCtr class. Moreover, the corresponding methods in Model +use qctr instead of ctr. For instance, the following code accesses the type of a quadratic constraint.

    +
    model.get_qctr_type(quadratic_constraint);
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..c5e400ca4 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/environment.html @@ -0,0 +1,249 @@ + + + + + + + The Environment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 Env class, and can be created as follows.

    +
    Env env; // Creates a new optimization environment.
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..0b71b393f --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/expressions.html @@ -0,0 +1,309 @@ + + + + + + + Expressions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Expressions

    +

    An expression generically refers to any mathematical expression involving variables or constraints. In idol, expressions +are represented by the QuadExpr, AffExpr and LinExpr classes. These classes are used to represent +quadratic, affine and linear expressions, respectively.

    +

    An expression can be created by adding, subtracting or multiplying variables together. For instance, +the following code creates the mathematical expression \(1 + 3 x_0 + x_1 + x_0 + 2 x_0 x_1\).

    +
    const AffExpr expr = 1 + 3 * x[0] + x[1] + x[0] + 2 * x[0] * x[1];
    +
    +std::cout << expr << std::endl;
    +
    +
    + +
    +

    LinExpr: Linear Expressions

    +

    The LinExpr class is used to represent linear expressions. A linear expression is a mathematical expression +that is linear in the variables. For instance, the following code creates the mathematical expression \(1 + 3 x_0 + x_1\).

    +
    const LinExpr expr = 1 + 3 * x[0] + x[1];
    +
    +std::cout << expr << std::endl; // "1 + 3 * x[0] + 1 * x[1]"
    +
    +
    +
    +

    Linear in What?

    +

    Actually, LinExpr is a template class with one parameter, which is the type of the “variables” in the linear expression. +For instance, it is possible de create a linear expression of Ctr objects, which are constraints. The following code +creates the mathematical expression \(1 + 3 c_0 + c_1\).

    +
    const LinExpr<Ctr> expr = 1 + 3 * c[0] + c[1];
    +
    +std::cout << expr << std::endl; // "1 + 3 * c[0] + 1 * c[1]"
    +
    +
    +
    +

    It is possible to iterate over the terms in the expression as follows.

    +
    for (const auto& [var, constant] : expr) {
    +    std::cout << constant << " multiplied by " << var << std::endl;
    +}
    +
    +
    +
    +
    +

    AffExpr: Affine Expressions

    +

    The AffExpr class is used to represent affine expressions. An affine expression is a mathematical expression +that is linear in the variables and has a constant term.

    +

    The linear part of the expression is accessed by the AffExpr::linear() method, and the constant term is accessed +by the AffExpr::constant() method.

    +
    +
    +

    QuadExpr: Quadratic Expressions

    +

    The QuadExpr class is used to represent quadratic expressions. A quadratic expression is a mathematical expression +which contains an affine part and a quadratic part. The affine part can be accessed by the QuadExpr::affine() method.

    +

    It is possible to iterate over the terms in the quadratic part of the expression as follows.

    +
    for (const auto& [pair, constant] : expr) {
    +    std::cout << constant << " multiplied by " << pair.first << " and " << pair.second << std::endl;
    +}
    +
    +for (const auto& [var, constant] : expr.affine().linear()) {
    +    std::cout << constant << " multiplied by " << var << std::endl;
    +}
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..cd392ca76 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/index.html @@ -0,0 +1,257 @@ + + + + + + + Modeling a MIP with idol + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Modeling a MIP with idol

    +

    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 #include <idol/modeling.h>.

    +

    To simplify things, we will use the namespace idol in the following examples. This dispenses us from prefixing +every class with idol::. For instance, we will use Model instead of idol::Model.

    +

    Let’s get started.

    + +
    + + +
    + +
    +
    + + + + \ 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 000000000..2507f2d7a --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/models.html @@ -0,0 +1,317 @@ + + + + + + + Models + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Models

    +

    The Model class is used to represent a (standard) optimization model of the form

    +
    +\[\begin{split}\begin{align} + \min_{x} \quad & c^\top x + x^\top D x + c_0 \\ + \text{s.t.} \quad & a_{i\cdot}^\top x + x^\top Q^i x \le b_i, \quad i = 1, \ldots, m, \\ + & x_j \in \mathbb{Z}, \quad j \in I \subseteq \{ 1, \dotsc, n \}. +\end{align}\end{split}\]
    +

    Here, \(x\) are the decision variables, while \(c\), \(D\), \(c_0\), \(a_i\), \(Q^i\), and \(b_i\) are given data. +Some of the decision variables are required to be integer-valued and are indexed by \(I\).

    +

    In what follows, we will dive into the Model class and see how to create, read, and write models to files.

    + +
    +

    Creating a Model

    +

    A Model is created by calling the constructor of the Model class. Note that it is necessary to pass an environment +to the constructor.

    +

    The following code creates a new optimization model.

    +
    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 Variables, Constraints and Objective sections, respectively.

    +
    +
    +

    Reading a Model from a File

    +

    A Model can also be created by reading a model from a file (typically, a .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.

    +
    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 Model::write method.

    +
    Env env;
    +Model model(env);
    +
    +// Add variables and constraints HERE...
    +
    +model.use(Gurobi()); // Set the optimizer as Gurobi
    +
    +model.write("instance.lp"); // Creates a new file "instance.lp" storing the model
    +
    +
    +
    +
    +

    Iterating over the Variables and Constraints

    +

    The Model class provides methods to iterate over the variables and constraints of the model. +See for instance, the following example.

    +
    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.

    +
    std::cout << "Nb. of variables: " << model.vars().size() << std::endl;
    +std::cout << "Nb. of constraints: " << model.ctrs().size() << std::endl;
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..f23b03025 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/objective-function.html @@ -0,0 +1,291 @@ + + + + + + + Objective Functions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Objective Functions

    +

    The objective function of an optimization model is a quadratic expression of the decision variables. +It is used to guide the optimization process by defining the quantity to be minimized or maximized.

    + +
    +

    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 \(-x_0 + 2 x_1\);

    +
    model.set_obj_expr(-x_0 + 2 * x_1);
    +
    +
    +
    +
    +

    Accessing the Objective Function

    +

    Here is a list of methods to access the objective function of a given model:

    +
      +
    • Model::get_obj_expr: Returns the objective function of the model.

    • +
    • Model::get_obj_sense: Returns the optimization sense of the model.

    • +
    +

    If a given model has been solved, one can also query the best objective function value and the best bound.

    +
      +
    • Model::get_best_obj: Returns the best objective function value.

    • +
    • Model::get_best_bound: Returns the best bound.

    • +
    +
    +
    +

    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,

    +
    model.set_obj_sense(Maximize);
    +
    +
    +

    Alternatively, one can use the constructor of the Model class to set the optimization sense.

    +
    Env env;
    +Model model(env, Maximize); // Creates a model for maximization
    +
    +
    +
    +

    Warning

    +

    idol offers minimal support for maximization problems. +We recommend to use minimization problems whenever possible.

    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..4ea3eeca6 --- /dev/null +++ b/tutorials/mixed-integer-programming/modeling/variables.html @@ -0,0 +1,424 @@ + + + + + + + Variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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.

    + +
    +

    Creating Variables

    +

    There are mainly two ways to create variables in idol. The first one is to use the Var class directly, and the +second one is to use the Model::add_var method.

    +
    +

    Using the Var class and Model::add

    +

    Using the Var class directly creates a variable that is not associated to any model. We will then need to add it +explicitly to a model. This is done by calling the Model::add method. See for instance the following code which +creates a continuous variable \(x\), with bounds \([0,\infty)\), and adds it to the model.

    +
    Var x(env, 0., Inf, Continuous, 0, "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.

    +
    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 \(x\) is added to two different models. The upper bound of \(x\) in the second model +is then set to 10. The upper bound of \(x\) in the first model is not affected by this change.

    +

    Also, it is possible to add a variable to a model and set its attributes (bounds and type) at the same time. For instance, +the following code is equivalent to the previous one.

    +
    Var x(env, 0., Inf, Continuous, "x");
    +
    +model.add(x);
    +
    +Model model2(env);
    +model2.add(x, TempVar(0, 10, Continuous, 0));
    +
    +
    +

    Here, we used the class 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, type an objective coefficient. Here, we therefore +add the variable \(x\) to the second model and directly set its attributes (bounds and type) accordingly.

    +
    +
    +

    Using Model::add_var

    +

    A more straightforward way to create variables is to call the add_var method of the Model class. +For instance, one can do:

    +
    const auto x = model.add_var(0, Inf, Continuous, 0, "x");
    +
    +
    +

    Here, we do not need to repeat the environment since the model’s environment is automatically used. Moreover, we do not need to +explicitly add the variable to the model since it is done by the add_var method.

    +

    Again, a variable may belong to several models at the same time. And we can do as follows.

    +
    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.

    +
    const auto x = model.add(0, Inf, Continuous, "x");
    +
    +Model model2(env);
    +model2.add(x, TempVar(0, 10, Continuous, 0));
    +
    +
    +
    +
    +
    +

    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.

    +
    +

    Using Var::make_vector and Model::add_vector

    +

    The following code creates variables \(y_{ij}\) with \(i=1,...,K\) and \(j=1,...,T\).

    +
    const auto y = Var::make_vector(env, Dim<2>(K, T), 0., Inf, Continuous, "y");
    +
    +model.add_vector<Var, 2>(y);
    +
    +std::cout << y[0][0] << std::endl; // "y_0_0"
    +
    +
    +

    Here, we use the Dim class to specify the dimension of the new variable. The Dim class is a template class +that takes an integer as a template parameter. The integer specifies the dimension of the new variable. In this case, we use +2 to specify that we want to create a two-dimensional variable. Then, we specify the size of each dimension by passing the +appropriate arguments to the constructor of the Dim class. Here, we specify that the first dimension has size \(K\) and the +second dimension has size \(T\).

    +

    Once the variables are created, we add them to the model by calling the Model::add_vector method.

    +
    +
    +

    Using Model::add_vars

    +

    One alternative is to use the more direct Model::add_vars method.

    +
    const auto y = model.add_vars(Dim<2>(K, T), 0., Inf, Continuous, "y");
    +
    +std::cout << y[0][0] << std::endl; // "y_0_0"
    +
    +
    +

    Note that the Dim class is used in the same way as in the previous example.

    +
    +
    +
    +

    Variables Types

    +

    Variables can be of different types. In idol, three types of variables are available:

    +
      +
    • Continuous: continuous variables,

    • +
    • Binary binary variables,

    • +
    • Integer: integer variables.

    • +
    +
    +
    +

    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 Model::get_var_lb method. Here is a list of the most common +methods to access information about a variable.

    +
      +
    • Model::get_var_lb: returns the lower bound of a variable,

    • +
    • Model::get_var_ub: returns the upper bound of a variable,

    • +
    • Model::get_var_type: returns the type of a variable,

    • +
    • Model::get_var_column: returns the column of a variable,

    • +
    • Model::get_var_obj: returns the objective coefficient of a variable,

    • +
    • Model::get_var_index: returns the index of a variable.

    • +
    +

    When available, the value of the variable in a given solution can be accessed in a similar way. +Here is a list of the most common methods to access information about a variable in a solution.

    +
      +
    • Model::get_var_primal: returns the value of a variable in a solution,

    • +
    • Model::get_var_reduced_cost: returns the reduced cost of a variable in a solution,

    • +
    • Model::get_var_ray: returns the primal ray of a variable in a solution.

    • +
    +

    The Model::has method can be used to check if a given variable is in the model.

    +

    For more details, see the Model class.

    +
    +
    +

    Modifying Variables

    +

    Similarly to accessing variables, the attributes of a variable can be modified by calling the corresponding methods of the model. +Here is a list of the most common methods to modify a variable.

    +
      +
    • Model::set_var_lb: sets the lower bound of a variable,

    • +
    • Model::set_var_ub: sets the upper bound of a variable,

    • +
    • Model::set_var_type: sets the type of a variable,

    • +
    • Model::set_var_obj: sets the objective coefficient of a variable,

    • +
    • Model::set_var_column: sets the column of a variable.

    • +
    +

    For instance, the following code updates the column of a given variable.

    +
    LinExpr<Ctr> column(objective_coefficient_for_x);
    +column.set(constraint1, constraint1_coefficient_for_x);
    +column.set(constraint2, constraint2_coefficient_for_x);
    +
    +model.set_var_column(x, column);
    +
    +
    +

    Here, we use the LinExpr<Ctr> class to represent the column of the variable \(x\).

    +

    For more details, see the Model class.

    +
    +
    +

    Removing Variables

    +

    A variable can be removed from a model by calling the Model::remove method.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..67de44039 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/access-optimizer.html @@ -0,0 +1,271 @@ + + + + + + + Getting Access to The Underlying Optimizer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Getting Access to The Underlying Optimizer

    +

    In some advanced situations, you may want to access the underlying optimizer of an optimization model. +For instance, this could be the case if you want to get optimizer-specific information which are not exposed by the Model interface.

    +

    In this case, you can use the Model::optimizer method. Note that this method +will return a reference of type Optimizer&.

    +

    To access optimizer-specific routines, you will need to cast the reference to the appropriate optimizer type. +This is made easier by the Optimizer::as and 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.

    +
    Env env;
    +Model model(env);
    +auto x = model.add_var(0.0, 1.0, Continuous, -1, "x");
    +
    +model.use(Gurobi());
    +model.optimize();
    +
    +if (!model.optimizer().is<Optimizers::Gurobi>()) {
    +    throw Exception("The optimizer is not Gurobi");
    +}
    +
    +auto& gurobi_optimizer = model.optimizer().as<Optimizers::Gurobi>();
    +
    +// Access the optimizer-specific routines
    +GRBVar& var = gurobi_optimizer[x];
    +
    +
    +
    +

    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., Gurobi instead of Optimizers::Gurobi). +If so, this will result in a runtime error.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..890f81b89 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/create-optimizer.html @@ -0,0 +1,221 @@ + + + + + + + Creating Your Own Optimizer (Advanced) [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Creating Your Own Optimizer (Advanced) [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..dbedc4403 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/create-universal-callback.html @@ -0,0 +1,449 @@ + + + + + + + Creating Your Own Callback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Creating Your Own Callback

    +

    In this page, we see how to create your own universal callback. +Universal callbacks are callbacks which are not specific to a particular optimizer. +In that sense, they are generic and can be used with different optimizers without any modification.

    +

    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 this page.

    +
    +

    Hint

    +

    Note that there are also callbacks specific to the BranchAndBound optimizer. +If you are looking for this, you can refer to this page.

    +
    + +
    +

    The Basics

    +

    Creating your callback is done by creating a sub-class of the Callback class and overriding the +Callack::operator() method. It is this method that will be called by the solver whenever an incumbent is found.

    +

    Note, however, 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.

    +

    The following code shows how to create a callback factory and a callback that prints the value of the primal solution at each +iteration.

    +
    /* Callback factory implementation */
    +class MyCallback : public CallbackFactory {
    +public:
    +
    +    /* Actual callback implementation */
    +    class Strategy {
    +    protected:
    +
    +        /* This method is called whenever an event occurs
    +           during the solution process */
    +        void operator()(CallbackEvent t_event) {
    +
    +               if (t_event != IncumbentSolution) {
    +                    return;
    +               }
    +
    +               std::cout << primal_solution() << std::endl;
    +        }
    +
    +    }
    +
    +    /* This method creates a new callback object */
    +    Callback* operator()() {
    +        return new Strategy();
    +    }
    +
    +    /* This method creates a copy of the callback factory */
    +    CallbackFactory* clone() const {
    +        return new MyCallback(*this);
    +    }
    +
    +}
    +
    +
    +

    As you can see, the callback factory has two important methods: operator() and clone(). The operator() +method is used to create a new callback object, while the clone() method is used to create a copy of the callback factory.

    +

    The nested class Strategy is the actual callback implementation. It is a sub-class of the Callback class and +overrides the operator() method. In this example, the callback prints the value of the primal solution whenever the event +triggering the callback is IncumbentSolution. In other words, this callback will print out all incumbent solutions found by the solver.

    +

    As for the UserCutCallback and LazyConstraintCallback classes, +our new callback can be added to an optimizer as follows.

    +
    model.use(
    +    Gurobi().add_callback(MyCallback())
    +);
    +
    +model.optimize();
    +
    +
    +
    +
    +

    List of Optimizers Supporting Universal Callbacks

    +

    The following solvers support universal callbacks:

    +
      +
    • Gurobi

    • +
    • BranchAndBound

    • +
    • Mosek

    • +
    +

    Hence, for these solvers, you can create your own callback and add it to the optimizer without having to +worry about the underlying solver.

    +
    +
    +

    An 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:

    +
    +\[\sum_{i \in C} x_i \leq |C| - 1\]
    +

    where \(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 \(\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.

    +
    +\[\begin{split}\begin{align} + \max_{z} \quad & (1 - \hat x)^\top z \qquad \ge 1 \\ + \text{s.t.} \quad & w^\top z \ge W + 1, \\ + & z\in\{0,1\}^n. +\end{align}\end{split}\]
    +

    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.

    +
    Env env;
    +Model knapsack(env, Maximize);
    +
    +const auto x = knapsack.add_vars(Dim<1>(n), 0, 1, Binary, 0, "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.

    +
    class KnapsackCover : public CallbackFactory {
    +    const std::vector<Var> m_x;
    +    const std::vector<double> m_weights;
    +    const std::vector<double> m_profits;
    +    const double m_capacity;
    +public:
    +    KnapsackCover(const std::vector<Var>& t_x,
    +                  const std::vector<double>& t_weights,
    +                  const std::vector<double>& 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()() {
    +        return new Strategy(m_x, m_weights, m_profits, m_capacity);
    +    }
    +
    +    CallbackFactory* clone() const {
    +        return new MyCallback(*this);
    +    }
    +
    +}
    +
    +
    +

    The actual implementation of the callback is done in the nested class Strategy. +This class is a sub-class of the Callback class and is defined as follows.

    +
    class KnapsackCover::Strategy {
    +    const std::vector<Var> m_x;
    +    const std::vector<double> m_weights;
    +    const std::vector<double> m_profits;
    +    const double m_capacity;
    +protected:
    +    Strategy(const std::vector<Var>& t_x,
    +             const std::vector<double>& t_weights,
    +             const std::vector<double>& 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.

    +
    knapsack.use(
    +    Gurobi::Continuous().add_callback(KnapsackCover(x, w, p, W))
    +);
    +
    +knapsack.optimize();
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..b3783f588 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/index.html @@ -0,0 +1,252 @@ + + + + + + + Solving a MIPs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Solving a MIPs

    +

    This series of tutorials covers the basics of solving mixed-integer problems (MIPs) in idol. +We assume that you already know how to create a model and add variables, constraints, and objectives to it.

    +

    Let’s get started!

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/mixed-integer-programming/optimizers/optimizers.html b/tutorials/mixed-integer-programming/optimizers/optimizers.html new file mode 100644 index 000000000..32755f4be --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/optimizers.html @@ -0,0 +1,340 @@ + + + + + + + The Concept of Optimizer and OptimizerFactory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    The Concept of Optimizer and OptimizerFactory

    +

    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.

    + +
    +

    A First Example

    +

    We start with an example. Consider the following code, which models a simple knapsack problem:

    +
    Env env;
    +Model model(env, Maximize);
    +const auto x = model.add_vars(Dim<1>(3), 0, 1, Binary, 0, "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 model.optimize() will result in an exception being thrown.

    +

    To set up an optimizer, we need to call the Model::use method, which takes an optimizer factory as an argument. +For this example, let us use the GLPK optimizer factory, which creates an optimizer using GLPK to solve our model; see GLPK.

    +
    model.use(GLPK());
    +
    +
    +

    Here, we assume that idol was linked with the GLPK library during installation. If this is not the case, please, refer to +the installation guidelines.

    +

    Now, calling model.optimize() will cause the optimizer factory to create an optimizer, which will solve the model. +Since we are using the GLPK optimizer factory, an instance of Optimizers::GLPJ +will be created and used to solve the model; see Optimizers::GLPK.

    +

    Note that we can modify the model after setting up the optimizer. The optimizer will be updated accordingly. For instance.

    +
    model.add_ctr(x[0] + x[1] <= 1); // Add a new constraint
    +model.optimize(); // Re-optimize
    +
    +
    +

    idol provides several optimizer factories, each of which creating an optimizer using different solvers or implementing different algorithms. +For instance, the Gurobi optimizer factory creates an optimizer using the Gurobi solver, +while the 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 showing how to pass a time limit to the GLPK optimizer:

    +
    model.use(GLPK().with_time_limit(10)); // add time limit of 10 seconds
    +
    +
    +

    As it can be seen, arguments are given by calling the with_* methods of the optimizer factory, followed by the name of the argument.

    +
    +
    +

    Combining Optimizers

    +

    In some cases, it can useful to combine optimizers together. For instance, this is useful if one wants to use an optimizer +to solve a sub-problem arising in another optimizer. +The process of combining optimizers is straightforward and follows the same pattern as what we have seen so far.

    +

    For instance, consider the following code, which implements a simple branch-and-bound algorithm to solve our knapsack problem.

    +
    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_optimizer(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.

    +
    const auto continuous_relaxation = GLPK::ContinuousRelaxation();
    +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);
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..7654c7049 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/solving.html @@ -0,0 +1,443 @@ + + + + + + + Using an External Solver and Accessing the Solution + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Using an External Solver and Accessing the Solution

    +

    This page shows 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 Optimizers.

    + +
    +

    Modeling and Solving with an External Solver (e.g., GLPK)

    +

    Let us consider the following code.

    +
    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);
    +
    +auto x = model.add_vars(Dim<1>(n_items), 0., 1., Binary, 0, "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 this page, +we will now set up an optimizer and solve the model. For this example, we use GLPK.

    +
    model.use(GLPK());
    +
    +
    +

    Solving the model is then done by calling the optimize method.

    +
    model.optimize();
    +
    +
    +
    +
    +

    Accessing the Solution

    +

    idol provides several methods to access the solution.

    +

    First, the status of the solution can be accessed using the get_status method. +Here is a detailed list of possible statuses and reasons:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Status

    Description

    Loaded

    The model has been loaded but not solved.

    Optimal

    An optimal solution has been found.

    Feasible

    A feasible solution has been found.

    Infeasible

    No feasible solution could be found.

    InfOrUnbnd

    The model is infeasible or unbounded.

    Unbounded

    The model is unbounded.

    Fail

    The solver failed to solve the model.

    SubOptimal

    A suboptimal solution has been found.

    +

    Related to a status, the reason for the status can be accessed using the get_reason method.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Reason

    Description

    NotSpecified

    No specific reason is available.

    Proved

    The solver proved optimality.

    TimeLimit

    The solver reached the time limit.

    IterLimit

    The solver reached the iteration limit.

    ObjLimit

    The solver reached the objective limit.

    Numerical

    A numerical issue occurred during the solution process.

    MemoryLimit

    The solver ran out of memory.

    Cycling

    The solver encountered cycling (e.g., in simplex method).

    SolutionLimit

    The solver reached the solution limit (e.g., number of solutions).

    +

    Then, the following methods can be used to access the solution:

    +
      +
    • get_best_obj returns the best known objective value (this always refers to feasible solutions),

    • +
    • get_best_bound returns the best known objective value bound,

    • +
    • get_relative_gap returns the relative optimality gap,

    • +
    • get_absolute_gap returns the absolute optimality gap; see this page for more details about gaps and tolerances.

    • +
    +

    Accessing the primal and dual values can be done with the following methods:

    +
      +
    • get_var_primal returns the primal value of a given variable (Feasible and Optimal status only),

    • +
    • get_var_ray returns the primal ray value of a given variable (Unbounded status only),

    • +
    • get_ctr_dual returns the dual value of a given constraint (Continuous models only),

    • +
    • get_ctr_farkas returns the Farkas certificate value of a given constraint (Continuous models and Infeasible status only).

    • +
    +
    +
    +

    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: +save_primal, save_ray, save_dual and save_farkas. +Each of these functions takes a model as argument and returns an object of the class Point with template parameter Var or Ctr depending on the function. +The returned object stores the results of corresponding calls to get_var_primal, get_var_ray, get_ctr_dual or get_ctr_farkas methods.

    +
    +

    Example

    +

    This example shows how to solve a model using HiGHS and retrieves some piece of information about its solution.

    +
    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 save_* with an additional argument to specify the original model. +For instance.

    +
    const auto primal_values = save_primal(original_model, higher_dimensional_model);
    +
    +
    +

    This code will return an object of the class Point storing the results of corresponding calls to get_var_primal methods on the higher dimensional model +for the original model variables.

    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..ceea163f8 --- /dev/null +++ b/tutorials/mixed-integer-programming/optimizers/universal-callbacks.html @@ -0,0 +1,446 @@ + + + + + + + Adding User Cuts and Lazy Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Adding User Cuts and Lazy Constraints

    +

    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.

    +
    +

    Hint

    +

    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 UserCutCallback and LazyCutCallback classes. +In case you are interested in creating your own callback functions, you can refer to this page.

    +
    +

    In the next section, we will show how to implement

    +
      +
    • a simple separation procedure for knapsack cover inequalities using the UserCutCallback, and

    • +
    • a straightforward Bender’s decomposition algorithm using the LazyCutCallback class.

    • +
    + +
    +

    Introduction

    +

    Now, both classes are derived from the 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 UserCutCallback class is called +whenever an invalid solution is found, e.g., a point which violates integer requirements, while the LazyCutCallback class is called +whenever a new valid solution is found to check that it satisfies all the lazy constraints.

    +
    +
    +

    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 knapsack problem:

    +
    +\[\begin{align} + \max_{x} \quad p^\top x \quad + \text{s.t.} \quad w^\top x \le W, \; x\in\{0,1\}^n. +\end{align}\]
    +

    Here, \(x\) is a binary vector, \(p\) is a vector of profits, \(w\) is a vector of weights, and \(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

    +
    +\[\sum_{i\in C} x_i \le |C| - 1,\]
    +

    where \(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 \(\hat x\) to the continuous relaxation of the knapsack problem, we can check whether it violates a cover inequality +by solving the following separation problem.

    +
    +\[\begin{split}\begin{align} + \max_{z} \quad & (1 - \hat x)^\top z \qquad \ge 1 \\ + \text{s.t.} \quad & w^\top z \ge W + 1, \\ + & z\in\{0,1\}^n. +\end{align}\end{split}\]
    +

    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.

    +
    Env env;
    +Model knapsack(env, Maximize);
    +
    +auto x = knapsack.add_vars(Dim<1>(n), 0, 1, Binary, 0, "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.

    +
    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 \(C\). +Cuts are always expressed as if they were part of the original problem. What we mean by this is that, here, \(x\) +should be seen as a variable while \(z\) should be seen as a constant.

    +

    We therefore have, for a given \(z\),

    +
    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.

    +
    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 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.

    +
    +\[\begin{split}\begin{align} + \min_{x,y} \quad & 2 x_0 + 3x_1 + 2y \\ + \text{s.t.} \quad & x_0 + 2x_1 + y \ge 3, \\ + & 2x_0 - x_1 + 3y \ge 4, \\ + & x\ge 0, \ y\in \mathbb N. +\end{align}\end{split}\]
    +

    The Benders reformulation of this problem, by considering \(y\) as the complicating variable, leads to

    +
    +\[\begin{split}\begin{align} + \min_{y,z} \quad & 2y + z \\ + \text{s.t.} \quad & z \ge \lambda_1 ( 3 - y ) + \lambda_2(4 - 3y) \qquad \text{for all } \lambda \in \Lambda, \\ + & z \ge 0, \ y\in\mathbb N, +\end{align}\end{split}\]
    +

    with \(\Lambda\) defined as the set of all dual feasible m_n_points_bound, i.e., those \(\lambda\in\mathbb R^2_+\) such that

    +
    +\[\begin{split}\begin{align} + & \lambda_0 + 2 \lambda_1 \le 2, \\ + & 2\lambda_0 - \lambda_1 \le 3. +\end{align}\end{split}\]
    +

    Now, we will show how to implement the Benders decomposition algorithm using the LazyCutCallback class. +This will be done so that constraints \(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 \(\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.

    +
    Env env;
    +
    +Model master(env);
    +
    +const auto y = master.add_var(0, Inf, Integer, 0, "y");
    +const auto z = master.add_var(0, Inf, Continuous, 0, "z");
    +
    +master.set_obj_expr(2 * y + z);
    +
    +
    +

    Similarly, the dual space \(\Lambda\) can be defined as follows.

    +
    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 \(\lambda\). +Cuts are always expressed as if they were part of the master problem. What we mean by this is that, here, \(y\) +should be seen as a variable while \(\lambda\) should be seen as a constant.

    +

    We therefore have, for a given \(\lambda\),

    +
    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.

    +
    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 Gurobi::with_lazy_cut. This is because the Gurobi optimizer does not support lazy cuts by default +and one needs to explicitly enable them.

    +
    +
    +
    + + +
    + +
    +
    + + + + \ 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 000000000..a9de3298b --- /dev/null +++ b/tutorials/robust-optimization/index.html @@ -0,0 +1,264 @@ + + + + + + + Robust Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/single-stage/index.html b/tutorials/robust-optimization/single-stage/index.html new file mode 100644 index 000000000..438d65691 --- /dev/null +++ b/tutorials/robust-optimization/single-stage/index.html @@ -0,0 +1,245 @@ + + + + + + + Single-stage Robust Optimization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Single-stage Robust Optimization

    +
    +

    Warning

    +

    This section is under construction.

    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.html b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.html new file mode 100644 index 000000000..82cd332ac --- /dev/null +++ b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/index.html @@ -0,0 +1,249 @@ + + + + + + + Using Column-and-Constraint-Generation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Using Column-and-Constraint-Generation

    + +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.html b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.html new file mode 100644 index 000000000..0705ed7db --- /dev/null +++ b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/introduction.html @@ -0,0 +1,367 @@ + + + + + + + Introduction + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Introduction

    +

    The Column-and-Constraint Generation (CCG) algorithm is a classical method for solving two-stage robust optimization problems. +It was originally introduced by [17].

    +

    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.

    + +
    +

    Problem Definition and Notation

    +

    The CCG algorithm can solve optimization problems of the form

    +
    +(1)\[\begin{split}\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}\end{split}\]
    +

    in which \(f:\mathbb R^{n_x}\rightarrow\mathbb R\) is a given function, +\(X\subseteq\mathbb R^{n_x}\) is a given set, called the first-stage feasible set, +\(\Xi\subseteq\mathbb R^{n_\xi}\) is a given set, called the uncertainty set, typically compact, +\(Y(x,\xi) \subseteq \mathbb R^{n_y}\) is a set, defined for all \(x\in X\) and \(\xi\in\Xi\), called the second-stage feasible set, and +\(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.

    +
    +

    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

    +
    +\[\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 (1) since it can be written as

    +
    +\[\begin{split}\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}\end{split}\]
    +

    Here, there is only one coupling constraint, which is \(\psi(x,y,\xi) \le x_0\).

    +
    +
    +
    +

    The Algorithm

    +
    +

    Basic Idea

    +

    The idea of the CCG algorithm is to consider a finite subset of m_n_points_bound in \(\Xi\), say \(\{ \xi^1, \dotsc, \xi^k \}\), +and to solve the following problem instead of (1):

    +
    +(2)\[\begin{split}\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}\end{split}\]
    +

    Here, a new variable \(y^t\) has been introduced for each \(t=1,...,k\), enforcing that, indeed, +there exists \(y^t\in Y(x,\xi^t)\) such that \(G(x,y^t,\xi^t) \le 0\).

    +

    Note that Problem (2) is a relaxation of Problem (1) since +any feasible point of (1) is also feasible for (2) (for some \(y^1,\dotsc,y^K\)).

    +

    Now, given a solution \(\hat x\in X\) to the relaxed problem (2), +one needs to check whether \(\hat x\) is feasible for Problem (1). +Thus, one seeks a scenario \(\xi^*\in\Xi\) such that, either \(Y(\hat x, \xi^*)\) is empty, or \(G(\hat x,y,\xi^*) > 0\) for all \(y\in Y(\hat x, \xi^*)\). +If no such scenario exists, then \(\hat x\) is feasible for (1). Otherwise, the new scenario \(\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:

    +
    +(3)\[ \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 \(\hat x\) is feasible for (1). +Otherwise, the solution to the separation problem gives a new scenario \(\xi^*\) to be added to the set of scenarios.

    +

    Note that we use the convention \(\max \emptyset = -\infty\) and \(\min \emptyset = +\infty\).

    +
    +
    +

    Separators

    +

    Clearly, the separation problem (3) 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 this tutorial.

    +

    Shortly put, the separator solves problems of the form

    +
    +(4)\[ \max_{\xi\in \Xi} \ \min_{ y\in Y(\hat x,\xi) } \ G_\ell(\hat x,y,\xi),\]
    +

    for a given \(G_\ell\) (\(\ell\in\{1,...,L\}\)).

    +

    Note that it is ensured that the separator always solves a problem which is feasible. +Indeed, in case Problem (3) +is not known to satisfy the complete recourse assumption (i.e., it is not known whether \(\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 +\(\hat x\) is such that for all \(\xi\in\Xi\) there exists \(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 \(\xi^{\ell}\) denote the solution to the separation problem (4) for a given \(\ell\in\{1,...,L\}\). +Then, a scenario \(\xi^{\ell^*}\) is added to Problem (2) if and only if

    +
    +\[\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 the dedicated page for more details.

    +
    +
    +
    +

    On the Impact of Coupling Constraints

    +

    We now discuss the impact of the definition of the coupling constraints \(G\) on the implementation of the CCG algorithm. +Clearly, one obtains an equivalent problem to (1) by defining the second-stage feasible set as

    +
    +\[\tilde Y(x,\xi) = \{ y\in Y(x,\xi) \ | \ G(x,y,\xi) \le 0 \},\]
    +

    and by considering the problem

    +
    +\[\begin{split}\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}\end{split}\]
    +

    In this case, the separation problem becomes

    +
    +\[\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 (1), +they may lead to different computational performances. An interested reader may refer to, e.g., [2] for more details.

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.html b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.html new file mode 100644 index 000000000..ba2a77502 --- /dev/null +++ b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/trust-region-stabilization.html @@ -0,0 +1,351 @@ + + + + + + + Using Trust Region Stabilization + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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 [3] on Benders decomposition.

    +
    +

    Assumption

    +

    This feature is only applicable if the first-stage decisions are binary, i.e., \(X \subseteq \{0,1\}^{n_x}\).

    +
    + +
    +

    Introduction

    +

    In this section, we discuss stabilization of the CCG algorithm if the first-stage decisions are binary, i.e., \(X \subseteq \{0,1\}^{n_x}\).

    +

    Let \(\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:

    +
    +\[\Delta(x,\bar x) := \sum_{i:\bar x_i = 1} (1 - x_i) + \sum_{i:\bar x_i = 0} x_i \le \rho,\]
    +

    with \(\rho\) a given radius. Additionally, we call reversed local branching constraint the following constraint:

    +
    +\[\Delta(x,\bar x) \ge \rho + 1.\]
    +

    At each iteration, the stabilized CCG algorithm solves the following problem instead of (2):

    +
    +\[\begin{split}\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}\end{split}\]
    +

    for some set \(R\subseteq X\times\mathbb N\) of reversed local branching constraints.

    +

    The complete stabilized CCG algorithm is described with the following pseudocode.

    +
    +    \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 \(\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 with_stabilization of the idol::Robust::ColumnAndConstraintGeneration class. +An object of the class 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.

    +
    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 \(\rho\) is set to

    +
    +\[\rho \gets \lceil \mu_i n_x \rceil\]
    +

    where \(\mu_i\) is a parameter controlling the size of the trust region and \(n_x\) is the number of (binary) first-stage variables. By default, \(\mu_i\) takes value in +:\(\lbrace .01, .02, .5 \rbrace\). +You can set the values of \(\mu_i\) by calling the method with_trust_factors of the class Robust::CCGStabilizers::TrustRegion. +For instance, the following code sets the trust factors to \(\lbrace .02, .5 \rbrace\).

    +
    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)
    +);
    +
    +
    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.html b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.html new file mode 100644 index 000000000..052750bc1 --- /dev/null +++ b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/write-ccg.html @@ -0,0 +1,279 @@ + + + + + + + Writing a Column-and-Constraint-Generation Algorithm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    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. (idol::Model) model which is the deterministic model of the problem in which the uncertain data are seen as parameters.

    2. +
    3. (idol::Model) uncertainty_set which is the uncertainty set of the robust problem.

    4. +
    5. (idol::Robust::StageDescription) stages which stores the assignments of variables and constraints to each stage.

    6. +
    +

    If you do not know what these are, please refer to the tutorial on 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:

    +
     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 optimize is called to solve the problem and the solution is printed.

    +
    +

    Hint

    +

    Here, we have assumed that the problem does not satisfy the complete recourse assumption, i.e., it is not known if +\(\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 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.

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.html b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.html new file mode 100644 index 000000000..c400af909 --- /dev/null +++ b/tutorials/robust-optimization/two-stage/column-and-constraint-generation/writing-separator.html @@ -0,0 +1,221 @@ + + + + + + + Writing Your Own Separator (Advanced) [TODO] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Writing Your Own Separator (Advanced) [TODO]

    +
    +

    Warning

    +

    This is a work in progress. Thank you for your understanding.

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/index.html b/tutorials/robust-optimization/two-stage/index.html new file mode 100644 index 000000000..5ef002535 --- /dev/null +++ b/tutorials/robust-optimization/two-stage/index.html @@ -0,0 +1,270 @@ + + + + + + + Adjustable Robust Optimization (Two-stage) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + + + + \ No newline at end of file diff --git a/tutorials/robust-optimization/two-stage/modeling.html b/tutorials/robust-optimization/two-stage/modeling.html new file mode 100644 index 000000000..809861843 --- /dev/null +++ b/tutorials/robust-optimization/two-stage/modeling.html @@ -0,0 +1,424 @@ + + + + + + + Modeling Adjustable Robust Problems + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + idol + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +

    Modeling Adjustable Robust Problems

    +

    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 MIP modeling.

    + +
    +

    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 \(V_1\) and a set of customers \(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 deterministic version of the FLP using Column Generation.

    +

    Each facility \(i\in V_1\) has an opening cost \(f_i\) and a maximum capacity \(q_i\). +Each customer \(j\in V_2\) has a demand \(d_j\). +The unitary cost for serving customer \(j\in V_2\) from facility \(i\in V_1\) is \(t_{ij}\). +The uncertainty in customer demands is controlled by a parameter \(\Gamma\).

    +

    In this robust variant, we consider that the demands are uncertain and can be expressed as \(d_j(\xi) = d_j(1 + p\xi_j)\) +with \(p\) being the maximum increase in demand and \(\xi\) being an unknown vector taken in the uncertainty set

    +
    +\[\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

    +
    +\[\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 \(Y(x,\xi)\) is the set of feasible solutions for the second stage problem, given the first stage solution \(x\) and the realization \(\xi\) of the uncertain demand vector. +It is defined as the set of vectors \(y\in \mathbb{R}^{|V_1|\times|V_2|}\) that satisfy the following constraints

    +
    +\[\begin{split}\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*}\end{split}\]
    +

    In what follows, we will assume that we have a variable instance of type 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.

    +
    // Read instance
    +const auto instance = Problems::FLP::read_instance_1991_Cornuejols_eal("robust_ccg.data.txt");
    +
    +
    +

    Additionally, we define an optimization environment env and some parameters.

    +
    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 \(\Xi\).

    2. +
    3. Define the deterministic model in which \(\xi\) is a parameter.

    4. +
    5. Assign a stage to each variable and constraint.

    6. +
    +

    Let’s see how these steps are done in idol.

    +
    +

    Defining the Uncertainty Set

    +

    Modeling the uncertainty set \(\Xi\) is done in the same way as modeling any classical optimization problem. +For instance, one can do as follows.

    +
    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., xi[0], can be turned into a parameter by prepending it with !.

    +

    Hence, +we can define the deterministic model as follows.

    +
    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 \(x\) are first-stage variables +and variables \(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 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.

    +
    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 set_stage of the object stages. +For instance, one can do as follows.

    +
    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.

    +
    for (const auto& ctr : model.ctrs()) {
    +    stages.set_stage(ctr, 2);
    +}
    +
    +
    +
    +

    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 MasterId. +All second-stage variables and constraints have the annotation evaluating to 0.

    +

    For instance, the following code is equivalent to the previous one.

    +
    Annotation<Var, unsigned int> stage_vars(model, "stage_vars", MasterId); // By default, all variables are first-stage variables
    +Annotation<Ctr, unsigned int> 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 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

    +
    Annotation<Var, unsigned int> stage_vars = stages.stage_vars()
    +
    +
    +

    Finally, also note the method 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., the column-and-constraint generation tutorial.

    +
    +
    +
    +

    Complete Example

    +

    A complete example is given here

    +
    +
    + + +
    + +
    +
    + + + + \ No newline at end of file