From ecfecf04754aadcc823653b7771ae2a16afafaa1 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Thu, 10 Oct 2024 01:51:56 +0000 Subject: [PATCH] build based on 5975249 --- dev/.documenter-siteinfo.json | 2 +- dev/JuMP.pdf | Bin 6254238 -> 6289994 bytes dev/api/JuMP.Containers/index.html | 32 +- dev/api/JuMP/index.html | 558 +- .../algebraic_modeling_languages/index.html | 4 +- dev/background/bibliography/index.html | 2 +- dev/changelog/index.html | 4 +- dev/developers/checklists/index.html | 4 +- dev/developers/contributing/index.html | 4 +- .../custom_solver_binaries/index.html | 4 +- dev/developers/extensions/index.html | 4 +- dev/developers/roadmap/index.html | 2 +- dev/developers/style/index.html | 4 +- dev/extensions/DimensionalData/index.html | 4 +- dev/extensions/introduction/index.html | 2 +- dev/index.html | 4 +- dev/installation/index.html | 4 +- dev/manual/callbacks/index.html | 4 +- dev/manual/complex/index.html | 4 +- dev/manual/constraints/index.html | 4 +- dev/manual/containers/index.html | 4 +- dev/manual/expressions/index.html | 4 +- dev/manual/models/index.html | 6 +- dev/manual/nlp/index.html | 4 +- dev/manual/nonlinear/index.html | 4 +- dev/manual/objective/index.html | 4 +- dev/manual/solutions/index.html | 4 +- dev/manual/variables/index.html | 4 +- dev/moi/background/duality/index.html | 4 +- .../infeasibility_certificates/index.html | 4 +- dev/moi/background/motivation/index.html | 2 +- .../background/naming_conventions/index.html | 2 +- dev/moi/changelog/index.html | 4 +- dev/moi/developer/checklists/index.html | 4 +- dev/moi/index.html | 4 +- dev/moi/manual/constraints/index.html | 4 +- dev/moi/manual/models/index.html | 2 +- dev/moi/manual/modification/index.html | 4 +- dev/moi/manual/solutions/index.html | 4 +- dev/moi/manual/standard_form/index.html | 4 +- dev/moi/manual/variables/index.html | 4 +- dev/moi/reference/callbacks/index.html | 4 +- dev/moi/reference/constraints/index.html | 4 +- dev/moi/reference/errors/index.html | 4 +- dev/moi/reference/models/index.html | 6 +- dev/moi/reference/modification/index.html | 4 +- dev/moi/reference/nonlinear/index.html | 4 +- dev/moi/reference/standard_form/index.html | 4 +- dev/moi/reference/variables/index.html | 4 +- dev/moi/release_notes/index.html | 4 +- .../submodules/Benchmarks/overview/index.html | 4 +- .../Benchmarks/reference/index.html | 4 +- .../Bridges/implementation/index.html | 4 +- .../Bridges/list_of_bridges/index.html | 4 +- .../submodules/Bridges/overview/index.html | 4 +- .../submodules/Bridges/reference/index.html | 4 +- .../FileFormats/overview/index.html | 4 +- .../FileFormats/reference/index.html | 4 +- .../submodules/Nonlinear/overview/index.html | 4 +- .../submodules/Nonlinear/reference/index.html | 4 +- dev/moi/submodules/Test/overview/index.html | 4 +- dev/moi/submodules/Test/reference/index.html | 4 +- .../submodules/Utilities/overview/index.html | 4 +- .../submodules/Utilities/reference/index.html | 10 +- .../tutorials/bridging_constraint/index.html | 4 +- dev/moi/tutorials/example/index.html | 4 +- dev/moi/tutorials/implementing/index.html | 4 +- dev/moi/tutorials/latency/index.html | 4 +- .../manipulating_expressions/index.html | 4 +- dev/moi/tutorials/mathprogbase/index.html | 4 +- dev/objects.inv | Bin 52334 -> 52481 bytes dev/packages/Alpine/index.html | 4 +- dev/packages/AmplNLWriter/index.html | 4 +- dev/packages/BARON/index.html | 4 +- dev/packages/BilevelJuMP/index.html | 4 +- dev/packages/CDCS/index.html | 4 +- dev/packages/CDDLib/index.html | 4 +- dev/packages/COPT/index.html | 4 +- dev/packages/COSMO/index.html | 4 +- dev/packages/CPLEX/index.html | 4 +- dev/packages/CSDP/index.html | 4 +- dev/packages/Cbc/index.html | 4 +- dev/packages/Clarabel/index.html | 4 +- dev/packages/Clp/index.html | 4 +- dev/packages/DAQP/index.html | 4 +- dev/packages/DSDP/index.html | 4 +- dev/packages/DiffOpt/index.html | 4 +- .../DisjunctiveProgramming/index.html | 4 +- dev/packages/Dualization/index.html | 4 +- dev/packages/EAGO/index.html | 4 +- dev/packages/ECOS/index.html | 4 +- dev/packages/GAMS/index.html | 4 +- dev/packages/GLPK/index.html | 4 +- dev/packages/Gurobi/index.html | 4 +- dev/packages/HiGHS/index.html | 4 +- dev/packages/Hypatia/index.html | 4 +- dev/packages/InfiniteOpt/index.html | 4 +- dev/packages/Ipopt/index.html | 4 +- dev/packages/Juniper/index.html | 4 +- dev/packages/KNITRO/index.html | 4 +- dev/packages/Loraine/index.html | 4 +- dev/packages/MAiNGO/index.html | 4 +- dev/packages/MadNLP/index.html | 4 +- dev/packages/Manopt/index.html | 4 +- dev/packages/MiniZinc/index.html | 4 +- dev/packages/MosekTools/index.html | 4 +- .../MultiObjectiveAlgorithms/index.html | 4 +- dev/packages/NEOSServer/index.html | 4 +- dev/packages/NLopt/index.html | 4 +- dev/packages/OSQP/index.html | 4 +- dev/packages/Optim/index.html | 4 +- dev/packages/PATHSolver/index.html | 4 +- dev/packages/Pajarito/index.html | 4 +- .../ParametricOptInterface/index.html | 4 +- dev/packages/Pavito/index.html | 4 +- dev/packages/Percival/index.html | 4 +- dev/packages/PiecewiseLinearOpt/index.html | 4 +- dev/packages/Plasmo/index.html | 4 +- dev/packages/PolyJuMP/index.html | 4 +- dev/packages/ProxSDP/index.html | 4 +- dev/packages/SCIP/index.html | 4 +- dev/packages/SCS/index.html | 4 +- dev/packages/SDDP/index.html | 2 +- dev/packages/SDPA/index.html | 4 +- dev/packages/SDPLR/index.html | 4 +- dev/packages/SDPNAL/index.html | 4 +- dev/packages/SDPT3/index.html | 4 +- dev/packages/SeDuMi/index.html | 4 +- dev/packages/SumOfSquares/index.html | 4 +- dev/packages/Tulip/index.html | 4 +- dev/packages/Xpress/index.html | 4 +- dev/packages/solvers/index.html | 2 +- dev/release_notes/index.html | 4 +- dev/search_index.js | 2 +- dev/should_i_use/index.html | 2 +- .../benders_decomposition/index.html | 6 +- .../{a9493d7d.svg => 7d9e7982.svg} | 1002 +- .../{fb0afeb8.svg => aec3d275.svg} | 670 +- .../index.html | 12 +- .../algorithms/parallelism/index.html | 4 +- dev/tutorials/algorithms/pdhg.jl | 498 + dev/tutorials/algorithms/pdhg/index.html | 395 + .../{c843d268.svg => c80340a8.svg} | 650 +- .../{7137e2f8.svg => d2e2dcd0.svg} | 132 +- .../{79ceb890.svg => fac3cb37.svg} | 200 +- .../algorithms/rolling_horizon/index.html | 6 +- .../{045a578b.svg => 13633f32.svg} | 142 +- .../{27d3e8d4.svg => 4a8f38ff.svg} | 142 +- .../tsp_lazy_constraints/index.html | 8 +- .../optimal_power_flow/index.html | 8 +- .../{fc8b6aa4.svg => 559a65db.svg} | 124 +- .../{137a3b50.svg => 84f549c0.svg} | 56 +- .../{87456083.svg => cf4faf65.svg} | 120 +- .../applications/power_systems/index.html | 12 +- .../two_stage_stochastic/10af651c.svg | 85 + .../two_stage_stochastic/13505d13.svg | 88 - .../two_stage_stochastic/4d7de0bf.svg | 84 - .../two_stage_stochastic/71c31772.svg | 81 + .../two_stage_stochastic/9621f874.svg | 103 - .../two_stage_stochastic/acaca15f.svg | 99 + .../two_stage_stochastic/c013ef5d.svg | 122 - .../two_stage_stochastic/e70c6c13.svg | 114 + .../two_stage_stochastic/index.html | 62 +- dev/tutorials/applications/web_app/index.html | 4 +- .../conic/arbitrary_precision/index.html | 8 +- dev/tutorials/conic/dualization/index.html | 52 +- .../{967beae2.svg => 00b141ac.svg} | 4854 +- .../{0c7c56fb.svg => 2fb10bcd.svg} | 4856 +- dev/tutorials/conic/ellipse_approx/index.html | 14 +- .../conic/experiment_design/index.html | 4 +- dev/tutorials/conic/introduction/index.html | 4 +- .../conic/logistic_regression/index.html | 4 +- .../{14174992.svg => 8ab57525.svg} | 76 +- .../{c15f8657.svg => e58ea520.svg} | 70 +- dev/tutorials/conic/min_ellipse/index.html | 8 +- .../conic/quantum_discrimination/index.html | 8 +- .../{0a1f973c.svg => cc78345e.svg} | 70 +- .../conic/simple_examples/index.html | 6 +- dev/tutorials/conic/start_values/index.html | 18 +- .../conic/tips_and_tricks/index.html | 4 +- .../getting_started/debugging/index.html | 4 +- .../index.html | 4 +- .../getting_started_with_JuMP/index.html | 4 +- .../{557855bd.svg => b2928af5.svg} | 118 +- .../{4ef45756.svg => d5e2ffa3.svg} | 94 +- .../{785b022a.svg => fbbd692c.svg} | 88 +- .../index.html | 12 +- .../getting_started_with_julia/index.html | 10 +- .../index.html | 4 +- .../getting_started/introduction/index.html | 2 +- .../performance_tips/index.html | 4 +- .../sum_if/{cb48755e.svg => 712c2a29.svg} | 82 +- .../sum_if/{d8e8212f.svg => 8cc11a43.svg} | 110 +- .../getting_started/sum_if/index.html | 10 +- .../getting_started/tolerances/index.html | 62 +- dev/tutorials/linear/basis/index.html | 12 +- dev/tutorials/linear/callbacks/index.html | 4 +- dev/tutorials/linear/cannery/index.html | 6 +- .../linear/constraint_programming/index.html | 4 +- dev/tutorials/linear/diet/index.html | 10 +- .../{d5619045.svg => 81f40fa1.svg} | 108 +- .../{bcdcc435.svg => a214a3f2.svg} | 94 +- .../{06807ec6.svg => f036e2b5.svg} | 84 +- .../{339bf1ce.svg => f6947f1e.svg} | 108 +- .../linear/facility_location/index.html | 10 +- .../{0abed998.svg => 1feeabd8.svg} | 296 +- .../{a1081ed1.svg => 5d71293e.svg} | 124 +- .../{d8f3f194.svg => fef69965.svg} | 292 +- .../linear/factory_schedule/index.html | 8 +- dev/tutorials/linear/finance/index.html | 4 +- .../linear/geographic_clustering/index.html | 4 +- dev/tutorials/linear/introduction/index.html | 4 +- dev/tutorials/linear/knapsack/index.html | 6 +- .../linear/lp_sensitivity/index.html | 8 +- dev/tutorials/linear/mip_duality/index.html | 4 +- dev/tutorials/linear/multi/index.html | 8 +- .../linear/multi_commodity_network/index.html | 6 +- .../multi_objective_examples/index.html | 10 +- .../{e625c6aa.svg => 226552c6.svg} | 78 +- .../{10e7b789.svg => 3f4b0538.svg} | 80 +- .../multi_objective_knapsack/index.html | 10 +- dev/tutorials/linear/n-queens/index.html | 4 +- dev/tutorials/linear/network_flows/index.html | 4 +- .../{9586706a.svg => 00593e98.svg} | 100 +- .../{d0b7bbba.svg => 066c5b05.svg} | 90 +- .../{4406a726.svg => 0f663428.svg} | 92 +- .../{81058509.svg => 4298fb21.svg} | 96 +- .../{6bfa16a8.svg => 4d4bf418.svg} | 60 +- .../{374069f4.svg => 5d6b77a0.svg} | 66 +- .../{b1cee668.svg => 7cf9e176.svg} | 62 +- .../{87488bb2.svg => 82d4a3dc.svg} | 96 +- .../{5d19e96a.svg => bb96625d.svg} | 56 +- .../{aba80ace.svg => c6e6aa35.svg} | 66 +- .../{e0960832.svg => d33356de.svg} | 70 +- .../{344994f0.svg => d6a83bca.svg} | 58 +- .../linear/piecewise_linear/index.html | 26 +- dev/tutorials/linear/sudoku/index.html | 4 +- .../linear/tips_and_tricks/index.html | 4 +- dev/tutorials/linear/transp/index.html | 4 +- .../{f3016092.svg => 083c9223.svg} | 1070 +- .../{230ed0a1.svg => 10a45532.svg} | 1056 +- .../{8f0322b6.svg => 1bf722a5.svg} | 1072 +- .../{52c98522.svg => 2306653c.svg} | 254 +- .../{5d0288a4.svg => 28a7a70a.svg} | 256 +- .../{426b8d25.svg => 50b37e03.svg} | 1058 +- .../{68a68a57.svg => 8fd7c934.svg} | 2054 +- .../{07b594f2.svg => 92e8e785.svg} | 1056 +- .../{00b8380c.svg => e66763d0.svg} | 41796 ++++++++-------- .../nonlinear/classifiers/index.html | 20 +- .../nonlinear/complementarity/index.html | 6 +- .../nonlinear/introduction/index.html | 4 +- .../nonlinear/nested_problems/index.html | 8 +- .../nonlinear/operator_ad/index.html | 4 +- .../portfolio/{ad06ed6b.svg => adcf8009.svg} | 1126 +- dev/tutorials/nonlinear/portfolio/index.html | 8 +- .../nonlinear/querying_hessians/index.html | 4 +- .../{291534dd.svg => 8f97c6f6.svg} | 206 +- .../nonlinear/rocket_control/index.html | 6 +- .../nonlinear/simple_examples/index.html | 4 +- .../{94a3bf2f.svg => 40987d66.svg} | 294 +- .../{c0f758ad.svg => 7ede57f7.svg} | 148 +- .../{f1274686.svg => 9bd3b149.svg} | 66 +- .../index.html | 8 +- .../nonlinear/tips_and_tricks/index.html | 4 +- .../user_defined_hessians/index.html | 6 +- .../transitioning_from_matlab/index.html | 6 +- 266 files changed, 35806 insertions(+), 34929 deletions(-) rename dev/tutorials/algorithms/cutting_stock_column_generation/{a9493d7d.svg => 7d9e7982.svg} (69%) rename dev/tutorials/algorithms/cutting_stock_column_generation/{fb0afeb8.svg => aec3d275.svg} (72%) create mode 100644 dev/tutorials/algorithms/pdhg.jl create mode 100644 dev/tutorials/algorithms/pdhg/index.html rename dev/tutorials/algorithms/rolling_horizon/{c843d268.svg => c80340a8.svg} (87%) rename dev/tutorials/algorithms/rolling_horizon/{7137e2f8.svg => d2e2dcd0.svg} (90%) rename dev/tutorials/algorithms/rolling_horizon/{79ceb890.svg => fac3cb37.svg} (86%) rename dev/tutorials/algorithms/tsp_lazy_constraints/{045a578b.svg => 13633f32.svg} (80%) rename dev/tutorials/algorithms/tsp_lazy_constraints/{27d3e8d4.svg => 4a8f38ff.svg} (80%) rename dev/tutorials/applications/power_systems/{fc8b6aa4.svg => 559a65db.svg} (86%) rename dev/tutorials/applications/power_systems/{137a3b50.svg => 84f549c0.svg} (85%) rename dev/tutorials/applications/power_systems/{87456083.svg => cf4faf65.svg} (86%) create mode 100644 dev/tutorials/applications/two_stage_stochastic/10af651c.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/13505d13.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/4d7de0bf.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/71c31772.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/9621f874.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/acaca15f.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/c013ef5d.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/e70c6c13.svg rename dev/tutorials/conic/ellipse_approx/{967beae2.svg => 00b141ac.svg} (57%) rename dev/tutorials/conic/ellipse_approx/{0c7c56fb.svg => 2fb10bcd.svg} (57%) rename dev/tutorials/conic/min_ellipse/{14174992.svg => 8ab57525.svg} (88%) rename dev/tutorials/conic/min_ellipse/{c15f8657.svg => e58ea520.svg} (88%) rename dev/tutorials/conic/simple_examples/{0a1f973c.svg => cc78345e.svg} (79%) rename dev/tutorials/getting_started/getting_started_with_data_and_plotting/{557855bd.svg => b2928af5.svg} (82%) rename dev/tutorials/getting_started/getting_started_with_data_and_plotting/{4ef45756.svg => d5e2ffa3.svg} (84%) rename dev/tutorials/getting_started/getting_started_with_data_and_plotting/{785b022a.svg => fbbd692c.svg} (85%) rename dev/tutorials/getting_started/sum_if/{cb48755e.svg => 712c2a29.svg} (54%) rename dev/tutorials/getting_started/sum_if/{d8e8212f.svg => 8cc11a43.svg} (57%) rename dev/tutorials/linear/facility_location/{d5619045.svg => 81f40fa1.svg} (79%) rename dev/tutorials/linear/facility_location/{bcdcc435.svg => a214a3f2.svg} (81%) rename dev/tutorials/linear/facility_location/{06807ec6.svg => f036e2b5.svg} (80%) rename dev/tutorials/linear/facility_location/{339bf1ce.svg => f6947f1e.svg} (79%) rename dev/tutorials/linear/factory_schedule/{0abed998.svg => 1feeabd8.svg} (78%) rename dev/tutorials/linear/factory_schedule/{a1081ed1.svg => 5d71293e.svg} (86%) rename dev/tutorials/linear/factory_schedule/{d8f3f194.svg => fef69965.svg} (78%) rename dev/tutorials/linear/multi_objective_knapsack/{e625c6aa.svg => 226552c6.svg} (87%) rename dev/tutorials/linear/multi_objective_knapsack/{10e7b789.svg => 3f4b0538.svg} (83%) rename dev/tutorials/linear/piecewise_linear/{9586706a.svg => 00593e98.svg} (85%) rename dev/tutorials/linear/piecewise_linear/{d0b7bbba.svg => 066c5b05.svg} (78%) rename dev/tutorials/linear/piecewise_linear/{4406a726.svg => 0f663428.svg} (82%) rename dev/tutorials/linear/piecewise_linear/{81058509.svg => 4298fb21.svg} (92%) rename dev/tutorials/linear/piecewise_linear/{6bfa16a8.svg => 4d4bf418.svg} (81%) rename dev/tutorials/linear/piecewise_linear/{374069f4.svg => 5d6b77a0.svg} (82%) rename dev/tutorials/linear/piecewise_linear/{b1cee668.svg => 7cf9e176.svg} (85%) rename dev/tutorials/linear/piecewise_linear/{87488bb2.svg => 82d4a3dc.svg} (80%) rename dev/tutorials/linear/piecewise_linear/{5d19e96a.svg => bb96625d.svg} (86%) rename dev/tutorials/linear/piecewise_linear/{aba80ace.svg => c6e6aa35.svg} (94%) rename dev/tutorials/linear/piecewise_linear/{e0960832.svg => d33356de.svg} (87%) rename dev/tutorials/linear/piecewise_linear/{344994f0.svg => d6a83bca.svg} (85%) rename dev/tutorials/nonlinear/classifiers/{f3016092.svg => 083c9223.svg} (62%) rename dev/tutorials/nonlinear/classifiers/{230ed0a1.svg => 10a45532.svg} (62%) rename dev/tutorials/nonlinear/classifiers/{8f0322b6.svg => 1bf722a5.svg} (63%) rename dev/tutorials/nonlinear/classifiers/{52c98522.svg => 2306653c.svg} (72%) rename dev/tutorials/nonlinear/classifiers/{5d0288a4.svg => 28a7a70a.svg} (73%) rename dev/tutorials/nonlinear/classifiers/{426b8d25.svg => 50b37e03.svg} (62%) rename dev/tutorials/nonlinear/classifiers/{68a68a57.svg => 8fd7c934.svg} (61%) rename dev/tutorials/nonlinear/classifiers/{07b594f2.svg => 92e8e785.svg} (62%) rename dev/tutorials/nonlinear/classifiers/{00b8380c.svg => e66763d0.svg} (69%) rename dev/tutorials/nonlinear/portfolio/{ad06ed6b.svg => adcf8009.svg} (79%) rename dev/tutorials/nonlinear/rocket_control/{291534dd.svg => 8f97c6f6.svg} (89%) rename dev/tutorials/nonlinear/space_shuttle_reentry_trajectory/{94a3bf2f.svg => 40987d66.svg} (88%) rename dev/tutorials/nonlinear/space_shuttle_reentry_trajectory/{c0f758ad.svg => 7ede57f7.svg} (88%) rename dev/tutorials/nonlinear/space_shuttle_reentry_trajectory/{f1274686.svg => 9bd3b149.svg} (88%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 01cf168ae9f..2fb32c70626 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.0","generation_timestamp":"2024-10-09T20:23:10","documenter_version":"1.6.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.0","generation_timestamp":"2024-10-10T01:29:22","documenter_version":"1.6.0"}} \ No newline at end of file diff --git a/dev/JuMP.pdf b/dev/JuMP.pdf index 3fbc2847716b3b1b4cb20c99b5dcff107bb9b2c7..e3ece93bb474d2d72b92501bc5213f3921553eb7 100644 GIT binary patch delta 2237584 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

H9EL6AF(i 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

wu*%_E19S#J43Zr;+poeKb2TTo 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

-M2hFp0vqI@eErZr`W)g9fyurMf4-mV1EqYI%G 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�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≀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

$8ky^mtD~RZbJT6y6{P`C-{0DFT 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

A&CQ92346{V9vz9XGP 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�$725F43@oGIAIb(?5bR1(d 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 !-k^Iqe-8!8>{1f-fN9 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

s^YKC8H(@)GsHMQUY*GSkT25vqG36{0h$PLb* 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

j>-Y`T^*kEiT=B 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�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¨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 z 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

La)p0-b=u2pYy9&glC?yW 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 *>3Tlvb2aB(r}|WkvS6KG{bBKFlXy;#4Iod&#y? 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

XM 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

rlxW5=vpk(yQ;SojP**O*-Cl_Y4y z2&(C~M6)p>L(W01HdT4pWJaVeU+P$Q49Qm}{K`U7elNgASGv$HiL0ZJ{`lMGz zjmaTcVSNyF9;uSZpp|zaA?~Z0dh+OQ=4o#^|d8 z`i(X#=wvWif?}Rsi{VPpEFl-PwY7SFV#a5=aU`r(+~`JtWyCJp)GTdFh1Ch+c_#Q_WY zO=lBgj!kX!*|wu|`BVEPqk21RgL3b`7Yk={1I!l3|C zK~`XL&M}c~u#y-;W7oJBo-{u%9SnBxF&MJas19*^#c{v_&pHec8v?3$Izc2?ssn*S zaaJ-oBrZ~;S&_gF^npbG(u=>U27b1TKLzDGT!k zdP_lSP~PS((@flmP#}juTopjjr8jQ|u`KQMuLgPu-AryNH$|Clo}Ck=LsyXA0ncm2 zK;OF3@hC2GCeo)#%6G>xzo@n`b+pFHtgwdl;;d!?8n0OikFVvoh%`KaAr+T0J(De0tQ0LSTWpZlA<(TRu05nK`WedWz*akr375#GW5PXYCR#I+o(z2d!N_cYJgaB z?A=zz{qhTSx72h|L<`stMY(oOOCB7U% zvP%7UWtuzk%j$osEc`y)g!WvPOeyV&r~gK0ADmu{-CrYUVzBK2DJ1P%49o3u90a8_ zSxih^TI=#Iq8km=d8%?DL*MAp=qJK9% z*;$bMg9?Uf;MnzwW+&k!;UMA4xd3%Sv`Q^CE(%SfLp0;c^0_($3-*+?v1smgA=c9d{QLf_M+421-o-2soH7z?nC40(&WT&OHl zj>DHp@xQ6bl4rM+#yI(UEfR{fpmC|W;v5IKv2h)t4jn=5Bw-5sqZ0AQxa+8=N>B+^ z;V!MclKlbQ0);aBC$h6YG5m-=yC7`AuQ**H1etx4`Jo?jC@lw^jpcI5Z*ujSWpYCM zB`^I2U|6Li3#Gh`&Z4Yhg7s~P@Ei2AGR*-k{DlFBr6jQvYj@N%>89jhgNaDTV&`fi zf7LrQ2WfP6ydWbAxX)CGN4;mh2eOe|apd*lWJLi)0%zdABmztw9exMvvF2D{93-f= zbs%2|MBd-*m%70;m@|z~k-K^lYj-mLpo0EFi(8b)KD+w+C{Y^sR612AZ19GZh7X+EoY!sd%O&@IKy2%4bTN6C8~8E%>-%GneQwU}*@i>wdyBxL70-aeDsHx1dqv`j4Uq z1YrL`CtvUMPH<+ebxteoT#f@gUb{CO0(0Tc1>L=upH z@upBGJX&h*D14L$LkHdi(0KTyS}6!i#&-Zx(un~x-?KVJaOA&@tA8ds#V6Bi@fq}a z!vvjbBpfOm&npqp2zdMd3?dz~KFl;$j(x5To<)_qpM0NOJMxzG%EA_R;UKp21?rwF zc{1H7o{65GP{*koJP+b1b;>^6Ytfwl)-iwASZdW$^kn~XpTq+!CcyT<-*S1o76FW^ zJ+ti}lwi4x=inI$BEpkeY}4slR?YtHYgtl?UO9(rV3Lhx&skvSh@py`?5Y=_4LA5t z&P18k)do?f&;l@OBK5H1nw?Zoz(n3kBV}Tq83+wb!3jN=3g}L`Idk8f#9Nr1h!$1z zPB-Y{M1A06!0#dQz+&|>n6nbPQoz!4cx>jso_4dpPS%$N?j>gjQeF#EQ*CjQaZ7&~ zSHQj}VEICLIp#-3p}{qe$D4!~xcXNea)2 zgq~hr&um*mKvib=)nA)@nv6vzl8Cya8b%@FNmpCDM)t{JSa2-TbXPMMB$9*UUHv zgY~=|%PtX{ONFNX5tX_176NEgjD0A$0=Pe3tQd5B4hMCv3WSBWoLXs2A2wfsZS4;| z5*+;UdTh9guu+;IE!n6G!}aBGx!7fz&OXcj#nP>Fxnuj-yPM?h*f#`O+Fq2kA%tQ4yLQg z+O8>DDjneSpz4J2y-ahu z7i&eNa>kcG;!LHtW0u!>3X{iK`drR6Ctd!hUSip6NkOdx3s?8OG!X0LZElMqQ%u*|*3R8a{e`V!G&m z0$q`MaQZ~_23BBBJvaogrvMcSjfI1ig@lU7-R>li07_Xvd1VE1Yn&yv)GI1V7z=uHn+z%&$VYE^Z#2qUcMEB5kwrPGg zI%`p*KpAwh#4!^TNVSwJ@zDk@`JbdXAGKTXKY4R?qb z8)^D!oV0?zkr_2+Svl5eo5_YbxcYvZ${KE* z-K+p+$x!Qa>HMK)#yBGSbR@D-o+48c9)`4d<}Df@(ICfv0E7ZH$c=)UlWasHEcN-a@wYE#kf@STE>*{`ZRY4>I@`waJVp?9dkQB5_dDdIgA0Q_M{4 z(ae;btU7zC0IkT1`V`O0`HmLLM8GTQRr>Neu0wb zJ2nV9G@s0Mc{|-VYzfxk)Zneu}eMU zoX$@XgB3XwyW^43w@|}e6d$X zY9-2SVtfpmi)m5!j}lk>Yt7QvsCN$V$HpG){22fD0Pf&y0l>>#=-kt&u9?sa!a<`5^OS^soG1$T+m zV}%d{H0JyR2;J0JQKYc4ps=bg&uCAum)cukW$v zVdEK4Kxr=T-0h>2Ie8}1Z8P`~gMol4|$B`sYQ0xX{h56dY?ne%rZ7av-7yKr9#u zdYHm)m*n=q^ua%cU_^~G67gsS)z58VW&rER+(f=sl?DRuMQJ_4W^Q8L{*f~n3u#x> z>-GH*HLe|ytbVv!Qo!0j_o_)v47j9M?JKG%h&oO%N=HHKP%I6!9-aYrYgn^%P|4r0SbHiAajXLZF2 z1TIFfCUft8A;0$#uI0w`2fy=bt>=?P0H-Dnip--?sC00@X~ibSjA{@7H!plPH0ae& z%qe;-Too4Uqk{r9pkxCpVa_v#?ArS~pjQNd9+&=1dLjGPq<}o`?(Tf|uN*KNHZ9ZN zaZ}pihw#6G-VXF;AnNUev)eH^pLVETfE!Dm0JR7V=hLE zQ(k(B+vr^#b}@3$RjdW*k}y}|RDoJ!tYlV9!S!0N*0o_FxCe<|1>pZA<-xp!(@+!+ zH+L%X@uw@_TryqmtbtjxQY9kgg-n3?yFlPX66$yDO-kkuKVSW?1UAsS08mI_uz3j` zp)`Kok-CTnn*!k~P@qh1F>M{4h->I_zZ($W!{M9kWT&Pb}Va^(|nAVpr zZyY@lgy7Ceo~wgg2WP5#tB=dB`qvC;-Bk4%V?Fp`7X^f6=qjxPUrZIt(JB@FM{?L0 z`DUJEuV2BPgF7!kFe^q?`6}Nfg%LMs1AOdP3FWxRrOLbxQM4~wo|zS-3f`&=zKy(h zocLK2?9~oCFPXL}SNIunXfgHR?#*i(*_R}i=f`ng!SRuj{{mK4A^*j_yf?;TDMNXQ z8pIo7ij-U3vsFV&SntE^R+q+YwMr|DO(ide%0lz;l#4E4(vTLpo9A>nzuktD3FM{U z(VeX}6Qcx;L)5?7IvPx_RKV7|&ilJ^k5iH*)l#(Hjj-y^&iTyFDtn&2yDq#xcttr4Xw ztxBE6dp9iymh91R#fQDuj;3NsjH*(+j-t{%%gg~tvs;@Gx_nhU%I3UR%6KUrf1fx1 zJXPoW9RVk9s-!#tmW<(4zPI4-pcp^h$jyK&|I$HAy{tS@UM|rLk%Si_(o(f5c?ot(}iHuzkX%{xS;mx#!rXJJRQ82Cl+%fQ7ln+A#ZNx`zmQAOG0&!!VZSbaaG0JHfNIcdB|l zgHmRJD)W$2XZe*K4MNd#7OvfnTEeVxUOw>(F8Ggo0j~#L5|}Y{iI1XW1&F@z7=cxF zkQnOxwvP1ce5oS&9bQHy&gh451wA={?06u2?WWQo%|s`l$m7N@qw7Jd03jiS`TMDt z$}aHjAq6fpEFJGtoma(xwpuy@$S;_fKs!h&NAMV@NmQ5eGZE4}$c;7YWVFb5Fw_{E zz7iL(h2BXnrvqXxTE4No^bN%LkD&&Nw;LZ1fxNk5x8lAlRGT?tyiK6eSCjgQ)K#U& z&TFq-qAszt@26e7XC_NGnaron^HH^KmO}IMG6@mpxJUzSirCcFLA9}K!d~ZeP#kpm z+{*EUYn;3$w;m{~agI|<-m1MUJ;se#8Nph$p*jc1^kN>8Ic zb*1TB#Y2_5wek$BX??CVA?;yd_h*)lwKe2qE+Q>BuoM}vP6}Y_%1~*H56&`I_Vp``FH7YLF4S$w@BI6s3&RQSvopoqn<_4tV$#i^12|x329G1 zQ7p4?tN3Ne*b>ma`N4jNCyYfQ{eBx6TH~HF8-j16%2k~5g^~d1R$Zdg%sZ7Juhoer zeC}0w?jaH3@KwS zlHjhbO=hK7FA@(()l4)Sjo52ugb$E{Rdee4z*Cysg{XnEC2fH-bHEXE$R8~#aJdpE z@b_+YH`9pmW=Yix42q89j~OJ+CBV(lhN&m?$0w5u|0nAqMrQk`J-E*nf-!{61+!kJ za1?cPypWU%=_zECo(CU+o+1s2%p$Q@idkyBZxA$9fmQ~kP54wO+#yb+$XBoq`w zUmC>z&kip@!Za7xFEIYONPGplj!fyt!9-L%1v`Io>Jp#Y`;+8qD+YEPQr^^!h*uldo&Dma& zvD`kd@dHm{J`}XM0C9*y1bF5~xb#^x%{Au!&GL5|@OOTpUxp1YGEe4)Lt!uY{i-#o zfU^hY?%?d+?zF)+HRaMUz&J@7%$fT<)72kLb};OhfenDIaNWYE%TI5Mzl23^w(tq7 zIBAyv9=$84M!zNh&2tl#1X$zpjJAp4m-M>G*-%nKODtoV{!@rcgDkevcZjm`y{e1* z_9wel4vBi2dnSj*igk_E$((K1<)(4ROvs91+MB*IL8z4;8az29>O|h4}O^l`7OGI`JFucYIveE?@3`C%B5xTQoVp8YksL#|Z z4Q1C9;Pn~6dO_U4#Ff$J_c#hFEt1;oATx=32!c$`R#Nc0{RPgEO3g(q#SrsXMHp4$ zdTjCavgN&NEhAfP=Z*e)1~5n8D_ji+-vIL@!bllQaJ z+0)y_0tz(LaG@EA*06AEqOhyMKbDq2>|*p2GFY=Up%w}_f};iiM%y-#zM+Bq&W{#} z5eO}ZsA$OO21Z8eiz`vWr1M+A;o#xoA6m0`W3@~6IEg_q!mwe|xBb&W3N93)c-S;2 zlRpAUkPz#`M&5p&J}!dY{9nhXj}Sv8rOgQFrs}Ec%0f{4<@wl3OjE_;kf+LWKW}@m ztg~}lUSVvHm6(dTtMri&wqM6je9oIWOPLxeFQ$dj61gL{Z6;}AoX2VqPvMcpdZL% zCwW7chU31tro!#&wA(%eU>5`LJy$#bs;<$EpUjXtstYm`>7J1DaGI}AzcSFOKbfAJ z9ZX8+W9;!iS|$s>2EU3K8y@;Wly~VVl2Lr;Y$f}lV7TIDIf0u4R*b&fwruru=XE&O zu2XCZ#Zr1hYhrlHO?bTGdG;5&g+JgxZG2-%R0ox_NP8Za*Aq@#`(d?@^`}xKq=pK|q&*8-(lRlmYu(?5 zuWr&O;4f#|7rsPV!6CD=+)49~Dsyqm0={0VUdmo-lgpyl82}wB0CVzijiYR z&nBmJLD-p$^iME7TAlO=8R>X1J$jw|2vLio8%Y!S>>i!2f53WG3Qyk$X{hvT) zgo-pH*cPqse*nOGuq}F>!U!kn{{(U)jHK$#OctO>*a04zD2gQhy7PZT% zviD8kt1TtwwO&*@%hH`(@aSBO1e=)ROvEO^W#Wp0R#h;?W-G^E`tWaRyvFk(&P6AIQsG!0HhmEQF>$#tbL|Ob}9xfudH)gD$>0$aknt^ z`JNgOh>kYFOGO+>%qIrG=bAdU>96E$<6fHLc@13QN-K-CLUQT^mJ^Yz13zpR313H4 zR8A?Ny@Jq&XS^5GEOtMd0{T@BLIj90LRVRsntje(9xPaz_D_@rUII1%IYZ!a_zN&@ z=nd33%?thU@{hT-^)bL%kUOYbDV=8{|#u=DqS2Off&5d<3>J&wv`++^{5%)_u{ z?DFK*>_je|gzDB{l%F=~$a1~j5;DE4hLJ891HrunXE|$8#B+G9kuGA zD*TJSmA~k%y?f9k&nP}M#!9e)M6l(v>9nnuR;HR<0wpU;njB* z=(g64qXHvC_{8(rE)NU!i|X^aw9}^yqF?AJd6B#d)DW-IIFCf)!6c#xJv&r3>B$%K zXwQ((ZDx=EXy|uk8y~8VpEcKw4_|S*WO6zXHvD)A=u_l}%Ea&po^q+NRf^xJWv;Em z)2r(yBy5a7%rV*mIN@VJOE~$GxbtUa>nV)mwB~NBl8E`t5OtanQKe`#ODsRY@KAiX za|pW7T|xWF1QjR|A&FlfoDk2m)8qDpL@0&?$fZP+ELQ-ZK^HF6(}-*3zkhTRY0$krb%)}aQEc3Rk6FQ>Ds zhZJnT$S}46+idJG_YvlDk8P>R=WpA0PP0$@nv;IqkGajL&7x~v}s ze^e|zXR?ccjZ&XBhpvrQSFJ>|Raa9ElEhP- z9l*G{yTJqNkLK|xiMIW{trDMg587Gu{ z=mLaDX2&D;fq%j0jm(;_SCQZ#O!MCZ6lc4(*%xhO%_ASlPM)JASzh%Yd(bMPvx|ng zF8A#8W-(tp*D(`gUQY_~sM!i7^wzgEXvP)1mw zV<9AZGolhGBs>@!M`EoQ#rN+t+6t_IMcwZWCnLDN)889T>;e#u{b;d3J7nrJLK0iz z|1{y_!2isnq^c`PNcy{(_i-t(EnRS-*TGrJpxRR#dgpL7@p8q6e%fdjC{vA@$fzpD zR;kv{j84fx@4TeeUrPec!T*Pp<3{f6fvY1gL}J{Cd;fyG;igG#VcN*$8nKZbkT_eA zVk|qhP$y5D@yb&aC7bV2Wb3j3C+{f*o;so~zpvBV5Dw?8J=#zQG5@0|y1<G7?6IrpMmb_I=I#t zmZ^&o#FlA|2}AuLOD_+hmYfBLfc75SD0XNMH`d&{K%PqQqZ>2|_yh<8XGX_E4rh^d z2G`%?EzJ{h-*1B|%{BBN=}E{-G1?JP9%tKmT8Kor|0l&N%$hZTe(JnVY#PiCm3pUA ztZ60^hXU&sSAYX5hZMPlL(-TNRFGoc3n#^J5;Bj*=07Y9vClUxy7B}MNOf3es)JF; z}2+2bvy#XSDv4Kxj zO>Lf14@bmHgzlal?36Pdz#fQf&DlXB=EVS#7-dFFx&ukcUkPRtXpw;Q5okO!Afm=r z($LsqCHJOwGlr=dHWfw6eom4@@x09k{pfoT*;Pq+!;sNLyPgtp`F|fOfaTAt zDnjoK4CNY}qo1!wkRNXrvrXqmN;;fO>w`y`O6B7hhbk{;Z_BaG+ZS2?+7F4d_&tNO zp}|5RxYMFivJz8hjax~ya=@PFV!>YbEp(2U?lnAB7%UY+H5-42kv|5)=b^x0+BQi2 zs0HKlpF2PQ<)>2x7&9DSOwxMf#}EA@ju?IE_?Sl&c@7nH%?UgouHXCN4Vx*1I<@PB zL=dAVF^OqgMXiKGG{DWGRPOZHQpV<>)A&+EB%KcxeIr2Fmo)@Va$(KirpIJR_*Kcc zo=21$zJv6s4msMmLPwTIFF%B!K2S!xMO_1a%9f=Db1m!&ctEA$egd~94dAaVGiS@} z0HF)5)?jq9d;b4uI;)_#x~^N}?lkW1?oM#m1b26b;ElUOXgs)EfY7)T+#P~LaCbkv z-(RO{-F4OKzSz}!)EIL-Gp78qv(XDMS;|ryv+!!ztk*Y#vWMAHytaGd1Ji|pzJ+dF zw|2U4MK6nBqd-~Jn0MkW`C+p2NA%Su1E)JORrmCc=#aZueeA?4_hWRxrA~T%i3+B?_x0UeHbJnx*NGk zN3{3PeU9!SiKzTph(sP2t}Csw}f|!>Lr=aQ)dSs9Tui8&de zJ!H}Qw_f?hb)I%p#$g4kGJQRxy{@;$jQah{m?#m^d}>EKTwSm~pg3N3%2ue-8Y{z- z81@=Vr9+QRYmPR6>i^3dYNfPVYO0RarJ#mDrHxp5$I8RudGcaf4Y}zuljO~v_ zf*grWohGHi1p%~yNCSI@Q9#C$eZE74#z9N0NK>AGc;hIs%o(jJ9aV;8m}Z`I+WqKh z1++mCS>7@?u+ejJTk6<0xWUBe^4kpBH$i!U_>*LH1Xq2F#X)F}htoY9?;iH@jAX+L zi2Fhjh@L{$vJ>epyK*Xa(J8jEeKx9Bj+~sLRCLzA8)T7kkj^=GdCtd$w7=LQ&q*}m z3w<3(VtYQ9Ze^q;ZpI;5P5Qy*cz7=*!z-L6%|H9=0w-lZ^;d6uur4RZVD$>V_$99% zJG3O|eFX|Nk^KBR9o2tySV8(Nj}b3J-5|R2^8-Cv;lI(L(rHDOy`aIu9JblT5w(AS zl=Njt;7JA%)M@NE&J-`(*!DaFH6pcU?YI#ps$B(tt*@Z&p63E_?m?r&?7y?pOasuF zhkETl^X5;m7*1~E4%IQy5T5X%tN$b+SNph%x?G)efuGEpn}_+1^8EwwHSADEU%_Qb zp<%(QRami8=e|i#>&_xq6}hy6YfQx?RJzj)X!r7XfPVHcAlbWjAA7J+IrunrgkVJ3 zIsj75Q#<0w1)Qy&?ycOMHa$+~t&<;7|HR9%UBInsF6e)~#m!i;BA&SS|JmiMJ3ji_ zek^G=EC0#Ow)XD+lkLIE2A;b^zI}u0e6?{T``^(T{g*UZQKZ=u*a`M{sBp`(>X|YuX;M#^Z3cf@Gc!6MX@~2C=mfQCEwF`sXquq=L;mML(tU*bJQ7s%{8Qj6oM5Y+0M30OFqby zonV(FI7baT>OH`5k={$A{noVIsyNjAhHI`_V`u72B$#t~UEg=14y6spkFNu+fL*2F zql`wD2t4~Q{fmZ?bL2t3JP_9HwpDH8AZ1>*Rovd!gVKqU=8S;XSFXahorCX993uEl zrE!MzaF)0p4zle}6zqa@SI`NK*cp~xS!Ff(mdQ&@5R*$$zGMu_TozPwx<>*y>$E?5deN%2uAtuAXPk2qiN`$pl_`|1g7>OZHYsZOlRvgKj& zaw(&aSbO!?^0gHLF;%repx3a(MT;NMtvjr0G%f%;^CweB% zx9o~U8+c3Otb@k1|`YCc@aPMYO84o5-4<8d zLFTWyTNJk=gB1*~Iv7ltq8_Hog(OB_gkbeky@j0~avA{=inaesNnF089B2}eWIZ(Y z%7igp*_06E(>i)Mpmw~*h&K?xxpYZDL-DilBT?$(s9D=ZQi^QQ=(aau(`JU8lQ670 zNLBtL6KRM1`(qd%;5uRWH@bnm)c4arBubpdSbtbD1HN#6z>^ zph2Ax9AX7og#?23HNXUmxzgOef@TUzlFC0Fn;gMm_)eFf7Y23vFIc-v#5L9Q}gmtb> zVkgu!D26*EQV)MsdH)GckjpEom(s|Mie^yCC!~(q4docsPo=k&|LO2mpZ@u8Rx2Hn zHZjGzvMk`Z20KRGjEww<@c0tTfX2pPzH6EKReXkex!{4@wS zwNnwHoE%lGcpZ_YSfCKCIOIs8BY&@n6Bo7f zO_?BC8{}30*-x#lQH+RFcHTgSygs8j<=7_X6S~HriVyqOb|zL z57&1EYUaghdc|vT{8tTjlI2gC4b~x`p(N3((xRMXvQsAyt_W-J3R0(nHj5dci@11_ zv}rH(048ocJ1BnpWcTv+y6uI-JbX9P&F=X%0MCeik2yCZ%^Gd*_NIFdv|g6X7|do( z99ay^QWfh~ksK3anBtH19zuoEkNn<)3A13)G9;|Yt~Vi$7>oor|Gi#L-L)84Yz^Sa zl!0x%?xuHI3fa+8$P3OIq4lPdJ*r{h(o5*vAA5NsG|5{_#%i(b`oqp{b{fC+U95xOB6&Clqg%p>hK(a zf2FE~(}-qC*p=Vj0!quzrp9q#i1F2wA)v-|u^K4Qt@sT*()sCFV5bjUiH5-?jOLhaFa2a)jh_ zwgJO%t{!}E@^du6-I3E@68iO?^`_>~N5hPj~ zL7!)tDGL5vE=_ux;@&MzC81!F>z>(5pH&7^0=cuSMdyNr$c0XfiLEF#UXO8#GhO>pxsxoYP z&P>ETju1+lnc|>osfdyWXRuQb25f^7?qPY;tvLv zX6nNr2GgD5Vz95ZWX^FymG|*tnNK%v6=4$HO6W`9D#rsqpI@^l>RQcj_hU6S!*%y! z=R)xku^&)ez<3y14K^!6b%uH?_?*(HltAJIJ4LLqHnBXd9uFlqJFomTku}8?65~`I zMiZ4u>U6fWNe8{BG7tUPC?>^lp4?*1C~qp=L#E0S@7m->z!VR!rtk;uhcT0w{ntb`N^K3c>3&1&VRfIz{TkoV1u9O(UX1HoPe>CTu*H-tpKjo1U3yW#fd*`MHzUA^ z^L*P`8wV+lF6nocC%V2i5;98FMcaC-#FJO`MvQcD9^R@jJ3f32QK4(T2NiMT27V$w zO@@}5;`49Iead3rFE0`q+ZSH&H@aID zB9dlrJ3?N861DY;qgE}F5*fWx{3)-Cby!YDpd0C|tGJNk>CXma7`T})qEP=3oZv#9 z&pR{nrU{2 ze<#O%iKdhtx~%8A&JlgcF)roQ5_T+h+ejK5`7_Fico+0bU`t{34~|I}rD+x-8&-_kYI&AxO58E+!;+5I)v3^+cLspOwR%q%L; z?_wctZBHA2Q7Pd?^RX_*@ea=jW$oHMhx^iLCExXp2d1Gs<>smd+X*V3o52gK?Zsu< zlYhL6rMAWx;v6*Ds}(=BL-vro?9v0OoPnWX26vG{mbmT3OP;F_aS1$Z0nOvG25y8d z8SyShwkM7_nU>g3CaZfZx~%N`_;v}k?Nx3`De_Ta<-tV(U%OXAjo4A0JhrkYZ0ssB z$}-1cPxc`uN`z(%J~W#mM()a*lu^iDm`wO~tlGN`mZ2|^&)X{3vdmU$XkpUIYYmA` zATatTVnJ4s^!?E-w9*ad`!V6tqdePrF0J_2O4X=$RJ=1I$4PT%hcGmRhx~j&8&JYH zp9Nr<6oy^Lgm1Bm-498g#R$kO zIFJNB6E^rU4iXmeb705yv!n{L?o_7(3#3D~BY2Y4K-AjRQ8 zdR36v;GSQQqlh5RYFun^ZaZWnJSe*T^G=I?$VXUEu+BFC*kuHA3l6kh28|6Oxx!-r z$4x^Pd|J9s3;>W-r#d~@_V0h+uuTVt4MHx}WCWY;L&_mTaR`8V%TchwU6+tN$RLgi z6#y9i6*3tfnvU+KaILA;n|#av!(cVU30WGwg9EKhB z=Law_9gO`Iz7+zB>4JRxjgrnvnZsCZi|0 z9Z`ixACL-K=~JVRAQQSo3Buf;hL!`Fm=eA*{38G& zgvH@Hl!c3>)TPS9S|rikcz!xK?*EuPwzKA~t1`~E)MjgU*R3Euc?-Df5_Q%(`x3BG zXMg0YO~z`~&2213$Q>HamwA5~5X)8&J{`R{w%>3BuP_^UWp-jNPnh&j8;?u#?QOOx z(o-M!hs$pv``Gc0iLl2B{T{t7kr(EyUYtKg22lSThZgh$+ZM^yxoXug;Mk%E$ecd3 zFm|$y-X`5x?NtTr1Tq1E{KsvLH{IIbI_L3XcLy`arTES|QnY>t%#ODWy1mcoHtKl2 zGIK03^m>9);P*rMbCwvoSllZWBR&N23GVFkA zme+%Wms(XwEmV@BHds+Q;09c`ezNYgxG;K8vKEEu;P6@EYz@+PMAi@fV=2i=?X5MHyljzYAui_Ha zC2ATC7m9dRO5U(x8Qlu1ioB{t4($pW2ct$xQ<}#Lsb7_5aamcJm{ytfbN#yp#Y(lx zQe)hNdHQme7MZDcISr(9(l~tW@1^ctpUE9<2*SdN11JCG(#8tvEgyWi4)n5rByvtsW zf3Z)3l;03e(&}oEwdqAuLYx>3=+fgp8rL&Cwj*#RpRO$0di&xlU7T*1h|!sdvl*hU z%yAMfDqI+B5BRL12PJ*4sC|J~^uAa4z9Pl)i`(SaZ$6JboPmr@8>snrUPw)Oq}$sp z;r67@`L1>w0K#X}ky}$NEmsuOw|Z6>37*1>?s$LteG!~r>=xP?1GSg1N%@pYB@u_Oc=H4x(o`^aPdiUOm_N#{;|0V<;2YMHB4E%vAJ-pXcaq<0% z%-4wDXya!*rpL40*MIauEDmU@5HW1#@S1fAJ5syTEHeey!tfo9AJs#Gm(AH}SeB0B z%!3R(xLnHEkH&o(GDvDfN5YpUqHpBE9{lg#K64QA60GPHt7F+xL5eFX9!D0mB*sSSnooPga zQ;q@4tO+N(T3v8MU+f-5W+uV_;f}*4KOIsNxO=CZ7I;`NMC$%|(tTflIasegJMM2k zdqW<#_;^@o&xQ97+)@AGKS1!K-d7w&3r$&3M{b#^_;OnQTVpBkx4Yf7c}#ECq9uok zOvWyPGO~pCJyGiK>&w5%vN=M-x1ein-6~;2L+cv9m9VApGKG{F`&~As(uc3xOeom?~du0-YK9g~RoY!B|giw~t%1MB8ZXo3LpL>1h z>(xTf2f7cqn08{oP|m5wz-l@cwy=ay-fMc22CJ_Dktjst7!{#KD+I*Tyvk59Njl>C z5_zURdkIF_?<+)$Z#NKkR#(px=UfGnDBTvGM{1=1wre|T3sKbL&_i|?Qxwq>Pb01m zxgJEare|$ioZDm@JM7F_MQe|Usj?Ghn$Td-iQIN%S=;<1VpyD)i&9r{0Q)?zQ^_8#-N3ALI4$dvSEYpFB#~;t*lVJ z2q4G;Apl7HREQqj%m>wu2-+D}zy^nXfx18dQT`Ui21h7Bl_7vIH<)q3lA2KX2%pI@ zhobDKO3{bPfdgsa3S)su&7kBEK0#=j*kB(!s1C&c?e_u8d3^p5C=MPF#}`#>&!IMJ%yv;R4hVIk3(s$M$!VFxhTOKM#_w!=)V}gQIF(`x7 z>!~-$ugQm(w!&UuwN>NZdVdLQjFhFGsFG)_fI-L-@ylG#barar5kC&u6(7Wm#avKV zl97`A9kg{S1qg#FvkT==)8vsbtX>?Pv9t@VVyeU=Phkqbg5{!b62*}naHN6#Q4Q4Y z36H%~a4VkoI6hl^Pswd{_w7K#6@XrhPPj1!5Z+7a%ac?At` zrr?dyByTnNtbPS9GAhA9k4+Fs`*Ju#J+X#f|z0iJ|0SM&=EzdOaJN0r|R(x|ibm9Ph!!g{lY zy~UTavgfCRRkDL&o8aKkqjaj8oz;vS-I?0u9D&PD7R{|ZL3W(sMnz5E$d~Dr?RZ+t z1DxR&y!1w-m0C@ZGO{Us8BF$RHIZ~mK(;lk5~cSnp9HU7@lZvn-Y#jiQXn7F0?ndD zC*)Trt`x;S7*cUd4NU;1R`hB)RHc-ruod-O9LtXs(=>>Rv=Oa{HqDBAR2Svn+>EWn zN^qsqDB&USFv;;W( ze2w)rfyhG3gUqYUyHj(&c0}o2j1MBu~9kL2ouFyqyM{j9^8y0rTtm@z39F|Y{6Le;@r9Wr@xa1 zFZRR_XLevrCO%G6yxpqLVXnP7&~^Q_ilpdiNdPmxML@n{ytjWlBmNm7ap1AaDsM&- zXKf*?MY!_L`(J@?#57I0^#FdtpzNa(ma*5hiuKmS0^SWv2rxAJfawo_w*=FBvb|*v zDPMqXn+LM)2>I(z^s2E-1ITkkoo{;mjKs5;I^T3nzQIK)5Jz!iJfY-IjBrVKAPrhS z20%t}CHyS+o@p@rp1JR_M=!m*v&w1`nmiIaxSZm@9G#P*daz-R60Q2HQNMQAUUAe! zz;kE>`DZXV3Je?$nV)bs&+}J?Q@=*|A=IL1@QVO-EwtwYY@g^lVNghH&iacvQ!$e$ zQWVQmWq=)n8^ga1l4AQFMo|iF50L?Ve}|=CK3rJ14-KKry(QoaWpElTW$JJ+bLjod zsvM138VP%0BTVio%Tz+z_zV>UyH_y6FeaqQ(8{*yWDk(UAQ?Ho^eVl}`i_SRnJ?gw z^=87F-MD5!e>Ny7c6@>u?>2}S^LHFutMJuGGS!QnyqHF8mqkcN4JzQPsM^Ut;lgvo zmXo4q?i8%q;cNfd;c@#e+DLPM z`!B=OL$~2fevmg`)y5YM@ng4%5%8S(^yGAfwe76Z)w!hSVT-Q^1X_AP1=l(*@XcH| zkbn14?k#y#$Dz6-^kh#@9UfpV?QzHVqcstJJx|uM!JoSv{$=HTaQ&bRr-v`WuoMA? z*DJEUbOEWqa7y2<@P`F1#z>ZX#7UMbhAX3%5w(;1GWxTw9X_prZOkQe^U-K8p??g%|?cX__Cx-$G~#abk-CK@&TtC0op3=xM=hZ5~O< zww#6^(Ox{nV0{CFy9U6uQ>;E|{czE|EbG*u^)MuVu1c!><{)IeV#}6s#1`7x@UgjfxRVAF&sdjOkJjBwiLv zp(4NM2H#cntQ=Q@A>jiHI)SZIes1<@sE~es2FBN%#>kR}4>Y5)z3glz%iZI-_@h)5 zw#~;FM#XPr@!y8M?#9x?NYNzM5B5AlPeuprYrD+>1*Mzy@;74{I`M4CO8zV;JFDR= zgDxm2g{-|M@3c~H+0%I5%P7GR+cUe$7MDqYmHnS1MLMuV%5tK%tzTMozI=VyalM0s z5#M!o4s6(T4$Pep6@C4664?6l?fJ+W$oHiBP!*Fu&vV$OTA+bUBysC8I_C%;$BoM~A77o}k3(6lJL}3O1fZqzBdf-7< zMXCVM>8mt7_^ATQ4*|rr6taA%e`-6tF-l+i(ovlqIP8PlJXB1{?fs7s?6aKLP_b2;GOB0ffON0SAV? zg<|-`iNfMwgTH)0>0^9C&Hh*Lsz-+&hXt{HKp}$+o;jI8CI~28;D0#K&3ymaLs;Ni zWoQvpkRJ}T16W%hTI&laTN(P(Kgxlo{JiZu2R8Vw3>qI6gyD@20F7uP(Szk{pdVrX zn*`+K_=G1nLf^4Naq@vMA4LFQ=ribHr2o`dJ*qS{s2dsz35t^))VqaE2U5e6f&mio zVZEOl_a=6tZ@cmPivS>J_hyk@BH>)o4s%WM8=8Lqpx2Ys1GfT!Q)($JmX3<;qCz$^ zw36pZTsc1f!oRY#R>w8$>8g9hAV4>BLQ)D+G`P)#B2@cRW+F0XNJ!ymrl}TljwsbL z3Vjb#mEQ+g{4v*L5{f7v)+it!jsZd->0-*l;m9W=hd1QA>1G1}iky*#5*Uah^f43? zFzM=X`%GSwGG2c$hLUm%g!ZZ3D;yZz5yyE)C*9EWzpCl!!BNFDBhbBJlm0iCG zVFo;Q8O}gn1f^u=_)Rzc{l?$`Nsd6yi29_uJbNaDDQ~Gt>MlnG+ zh-oeOi|PrXslNjGE1Sv>Le0L}oH6z$xc)arYIZ?10 zP{`!W)c^x}K*d&kIaK}TI2vM z_1-#twLAYnP<+=5C?7hDR<7nEj(=PVA(54rWh%(_bUC^$7yPt|Ec<~<2S2N{`PLHG zY`N+Zs(=CBbRTciMnLd{nP3)6RcxDM*-dPtrI23J-QL>O3fbKKwSz8rtZ~NQjW<{I zxbCr9Y~ua;dLQ#WJc^G_%fWFz@^}gOA)AaSxIK-Tk!?I>RrcT_?efL*!UL+A)<|uOlkIi^=Yk%zct&o6h=}i9alRkfJ z{`T9DtabVG@2T)l^gl-tXHW`@^2&~6r$a5?u3qV@!lT&9h{vtw&F@FCB#4PTvo|QF zUTLOXoN{LEXkb^Am>@%|(W#o7NYq?ckD1v-JzlXLwbFm(;(w-nrlWs@NzeO9y(Y8w*WfbivN~Lu-az8S+n( z5c{Q)r{uv5txc~(-r?%`^|O1JL|yx`qc}STH;NHIsgh0wB$Bpc;?L$6UG&Qz?!Y+4 z+^fAKo;IeoH^(iki5l8S@li|CxMvqoZYF2=M(~y8Q~4+SkyD)YP}0*waVstw%Y8ID zz*jb<>i`ys6>FWj)c8ln)DYaL#-AC=I>~;hNHZ$))bSydWKZVmEi65ac;XrXD&*%1M4abX4hTif+1x zY>e>OF&NQD4V%Pp6kq?1Q?NY@KEU%!HHzFsE$X1UmT69{3K@eR{wHK{@jwh)@d8B9 zFi>w0wl50dmmT%36LA-dI{T|MKr`mXlL@Ie)=UV;a;@8bZ9~@dMXQmc`p@ah5Cnjj z4QPBsx6E)1seaJto9~qg;cvl14`236aW#E2KHtC%n$=6~7(95W*x8{uvVM~DDt_(q z)*RWf_IK!r%6`P;MPNTA^$_EzMHiS4M?y(L0|OL0d6_MG4w%d}>vxq4Fa`~X+yzA1 z@3O&9UqR+fQk1sgw}hr*S}uO*l7`mAlF;#s4Ir}qCDWa{LVG=7JNTJoT)(%DHxe+p zZjHv?gHT7-5OZN9{gz)VyK>>} zeS62*1*Okg*|kvPSmKrKgWxuLtID#8SMvF;J5|5|?qyUQksw>gbCM4OH^Vw z$P^j|2Xt}zsV24_pwp56Cw{=u&@e0rAW!H|88dbRf1#C=_s;7|bX< zFyeZO&=ZO@a)D|}t8AeW=WsoUJBT+^g&3OK&a#F8+HhM59esh$crvy1-g{AD?9ZKE zJ2_2I3+Bi=E?-jEIAy|@l+FE_?a}Aca$RRxF0>c+l;;HQ*0mkD6v5PR^Q66O{^F;{ zRNC-Oy`m|s0mJyNw|`A0oJfw|7M!kNttiKSd`x8U(;PPZ>NwNwA>{spX@1sF7?ZhF zJO0D|p!soz;=8>mcdZC|d*|NN%2v`J=#fACuG}09Z38sDxrw}Qzk|IPp3jN&weZrv zC#-xx-e{SCIHJE|e`bG>WYRd`P&t_UPf?j7h7FEWgSkNih2X$rfoPNT7{G1DFqWwQ z)0+4aZvEH9zzLkH!_Q}1gB8wsDbax$b~--8 zH6)MH%&#%UZyH#RqtPfS7kqzsn^a5Nr*EbnRhWw$kaV+}e9Lj3lw-KaFj4Rsj4SL; zmbd0WNMTTfCd)ty-mob(C)BZO<4e%px5>}&JW@7c9o1Hl?iF?{2(kV`h*D^#UIGj@ z)$pjJmPsF$N&10C#R5oWJi}p;*@C}dpIUCBGy%Lab@Xe~^|t*1&MKNw3C5vtkcgzJ z3+Yv5rcj>k2&HrM-Di2v9EB=gT-waSBl1>r~|53w>(KVwGiyTl2Xvw8)YWmpB*Y!8!W3t zg;vkp6URNvoP?kgn~Z3S*AIkBgCLCh3DJC*Yfizhr)Y|m>K^i&egvKeCXSH+XEC~% z*q?{l%Z*&PP+0{9oX9J{Au1(zdtCOj0epa97{46&^KJL%heVDKX+AFr72oAQJC00) zj==a#=9iMZ`H2-~G8|?Wla=-k$JkP{O25~egZrgMUT0+5cDyprg%IE$1^_u`V)Q7( z-VcPfb4a~(fUCFno1ov)d{JYe$kaxs$b=~1=URft{dS;M(6T2aX=QWysz7+ToPGz} zzq>*LoEuj7nX1iL*US$CplBHZn&7p%p-DjKkBogOStpu6gJ{)Kt!sP@GRpE54DND@ zkO)s9q2-kTinD*!C44}g5fLjgZMH-Mb7z`CWtyii3P_t^K4vOw!)f|R1i}Se=SQ^S z1v9SUUD7XkofVaBYjP|lVyaP)yRkSk+|ia|OA{?Nvw=I5FN*j2_sFC@FR+J+tL{|L z-;)>=Sk+?V(1i0X6etew2CGgTTo+~oflO6vrxSJ$>iUb{ywZVhZ*R`G7m?Y`xf360 zmOpV*Imr$jC+o)Uty~Ak1pQ)%=4gN7y1(0|Osu`yX;=VZ*6h7r{u~`A)z9|@*osN0 zL7&nMX1&dplK3k^OE^n1GaBv@w$A&EV3#B35j}#CLx%7l_!x9=c4z&WP8KITokwhq zEI*6@69Kx0#-+gM@1E{L#*LRor+yP6m7vBLc!@ALX`-YVfkE}N2W#L_WRY*y+mB^B zX9M?>tA)Wgi2wTez6}PuEv6fkoH-_d-6O`aL#ujwWR6r5Hm&YdD79V%`a^=Eb6x%fnpn(N@}PD!<*Ikz0burcgN<}HQ6{7xsVrbZUd z_|0NtfxsHE{D@y<|D*z{i^>00Qp`_G@)95>HCeOL?#9?G&&g3-V(f+r(7`89y|ss*v58EXd3HoJ0)#n?lLRRN`Ywk7cVydB|e7S-{hy zMHX-qm(J2JgwJv&r|E7)nIkjzFZ8C|ZVg$vk$LODicti@Us!8c($tC%g4UFmF}H7D zQ~h1Fzux@b9g8GlR+&ytV8ebq?U<-Neoo(Pnj0aL;d@dV2^K~9e%V|7C~LTzzB;{` z@KMLnWliyI#>MWHa?K5yB4jURwjty~Oj8;ds`qVXn}-+)TdrXGXW6+xjt(T`mjJEG zGTTUUqaa>LGjL%%moT0k{HiFaioUFZ*L>^#JS87P4L{tTSq(7D3vlkT`iDp*a*oEa z>d1LnML!Ev&zGWAoF^b#Q__yEQe)=aihV7xx`S!PWd+)uEz(syg#xDPU9e;CgXVxG zJ@=Uk1k@~z{Ypo~WicNgZZPh4&;l&_=6Q=hYAKmWVuj|Zj{rM*n(3zO_)JRCapr=QP&{5HYTeRk8Jm+1#t33SBI zqXlLth=idaJ$LrlaV_YF=Wj3hYvKZTc-71Gj%x%Fq&S2sZlk)6^yx)=<&zpigfJEG zuP+DztY8mIXj1Uk*(d^#4-%N$7scOcDL1(3bZjubyC6jNfJBLb`X0nWYD<|VwP+Fu zI>bT9l^FDtQ^aB&H*D&(BngOEQqsrn$#`n&GxU6mVyU|wfsiw(Xm?O6k`#Oe2KP2f z+rp)T}pG;tUiChp6eif zdWeHC08mPUG5{=`0ONu3e-UV37ECe1f8|^N*tZDg6Ri555(IhWDl>p z*x<2N7&~MTxD^HfDF7qrS7(1P9A6Ac*qT?4jjsOs!)F=>fZS7W)NwdA7M5a0B}pJR#om1yj$lT? zJt@YWx>8PLI}?pCu@I9UJFuv9V|r>3tT8m5Lb{{yhwgOtBkH>zL+P)}b9{zMKFB(A zMhUK_(vrSScvW4y^}8CN#}1E~gk5H`PCQ*RgEpK262P&?D_iq+N??x0w#VFe<73j? zCvobyhQr&=wD=cLj5YP;fhtsKWIz<^yMSi8qTiMhqa#o5@7w9ux3kAf!D7%O9D$FmwbY!N(^&)wB!t|2Gn2|gnHhGqWqiB9wO-kr*tsrf;PdM1 z!_(Wo7+Vbl;}JgJ{beE<+dG_s$t+S^ypp@$b+SW0x159*zo2#Us*5BrFaM5mafl z8vypReGI}{M{<@0!RjJo(>cGK7K+@CW>xtU`%wy_hvtXXQV*3#~BjN&R= zJLDYmS7ogP;>3sY3EEjYu(8hb@JxyQ9$b><_`n z$AoT$*@oQriGNI;Yz7SV(adR7IBr)DBeE+6*~!jC8En(B&(}ICGaa$!5srlccvSI7 zW7voGFj zh0c}kYh+pU3_G-nmO26@k5WovygF@J#6&jBYAhsysOJxddNJM;=e+TBFm$@v5wkQ0 z)D?-Po96s3g+NJd@$Z0juMcWHmGZ6+Ti}jhyY;D!;?-#)aymLerAkzX!a>=~ym%vZ z$5SYBEHCR-4adNH>xJBtn0#w(t^Z9llHLOmc}r)KLD%NS?B=b9eL!TJ*qP0$N; zokcF;=#7?Mz6o4GQOg-O60A}acB&$~M{kw1bVC&<7d&DlO;js2Qd!Mk8`7Ez*&?s{_K}BGty!I1l8y!3=C#o5Bp`Oh72XX?@9;b*mCb^H!<^;Vq^bNp8I6Dscwfjnu?}ems1&$f&nskB*Qdn*0vX5r z()PKxw!-^)zI2%NV3_Cr9{8 zvkcWWj2(Y*;HgJ1^&-Bit5hwV!8m07g6>h{WL-~%kaWu!TXdNK_dE^bbbdwlc5Y#3 zD9C=>FHtE9lm4Lq$o%yL(w-j$E~-YSxhO1f@IHJ+lq1#1j}+?7wAz6nX21vDnrVol zT14@N(=YJe3MdmBF|k1@B%}C1nMW+7IDY4J_DX@?h~Cl=ldXr<5ZAq5^Gy3Qc~nWz zRC#};8dVsl*UH2Lc#oED98>et(tu{EVO}{{vx%;8&5dzSfi>YtjrG_Be(w{FpMv;~ zKziqniz@fIJ-B4{*Wg9MpeYebLommJS4G0UsZRAYuL+5}D-DE>PjSQgW4r{%p*@|> zoKh!Rx<@Z05KYH`otbEGB#PP6ztDT;xAl5H-Aj=KW~Bu01^_E?K1b!Y()wE*nv~R0 zi$0XsGxALi3At71%^P3r;iBxr%LrDsYPX_V8@5mH=O zR3dMr8*c0S1JQo|j%%E(vnwN^#v=E?3F@e&??31Sv&-0@R2?=MUeDGW2MHZh!k-V? z{tmtv{`Wxu-xzHxkf9D-{nqRtH5ssDvhP^KC2}CD?$XKQbM;Pwp>*Lo>|fEQU&*ob z9d<|=-2Ioas1A(a9%HsbJilPIh44?8AC5kDOI^&`=jB+>9LRd%m;UhIvrNJNFA>)0 zxspkhI1^U8TfERMF8iUQQs@8C^-j^5bm10mI<}1tI_cQz*tTuk#+Rg%bnN7dZQHhO z+qQG^@4e5tJ6Eel)vBu+W7WIfHRm%!0EOm%=(8(gDB0r+R{S(q0V?4ddLc)9zXdqp z7p1ydM!z->EJX1rYOj*lyrQ-+&D|Z_#o0Sqs+qV{_|K){d zaw#z2#Vn`&kll5JpGyIC#|=3Hd7~1zy5|$If+J4`R9qJ=W-hJ%w<@p`gL@!eVZ^kWej2b|Q6j|H?OPghT?CI|xFeakJF#SM$iEQ?gG zRa#e6tA|yVOQ?A$sucFKSO+jiEF&s&pF1TS2oL9$;ThD3Gu`baLg@#7kF%O-7kA(! zh4`1ytor=(fY3Azr$^BgInWa*iw#ZZ3CFT{gPU9U6qNZsjIQM#CjQwS&sN3a(KTw31z8$8a=y=u>M6cUF zPTci6z;uNQV@>X+nG&axVp6QGBi&8e^sElhnm}szC}Pf#aQuS0Sn1pN|583}V1YCP z;IKdeO$BtIe;YqJU_eVMevJ*j^X#eB`Zx>DiMXs zJc^hfskkB~*f=txj8e%*qrsOn8&x67!`jKfDZS@wtd2Kf7Yv?P`uTUphu(jHV7?C; z)_u)Xa(XqUy?xdm@0j@pDMK@qV*I`B#_(nbV?_o)*}O}Qu{xqviyEy0LugpwFEmHZ zcF>R6e5nEx%h`^xu`s%fOB;pL)>;qVP<-gRzNag~g+D)!u+`6YYwD@!CYocJGU=QSNpf(n01luAX& zjXj&-= zX+yiZkaGpOxvI*WS2t-(tEVkpO!)jX8HOeRf+V^|gjysNj<=%4S2zL+oWX+|e1W<7 z8ZNuEvTk)Dcw&bhA#rbk@}$w1JaVa?i6qC2B65U`a!n$Ap9YQdKzRNR3&X~+<{3GSISEyyE|5&b7NA^0z9I9xX@JOn~;CvI$vmkJe(qG}d^ z?1%zWOXf%;Tf8CgG2M^j{gse_a{Tc4cdFaM)k<8vDW7f7&^q-?OVYyEoGJ*p}|iKzOWo%QjdNrw-YtoljZY}URRspPYpUnVi3hTA8Fgbd0W?$q)OwZ zlwwST+ci`(+a#k~8sZ!E)^?LHRu~fl6f4JaI#SXnSkvZ&$3PP}f9%d~I^;U^P`sl_ z+YLHrAoTHKC=ok(apCFSYok`^{e^#5RNa3NRM+M%n0AkyRv1SWRg(;A8JNe(!ukD; zAD0J-OD!svrqENwL%TpA$%~L84^6aiNUhWNwg|(B$;v_Y65k`PI&kF#@PWX_ z-`j$s&|7t!tot#q>MqTab$Qy$M<1w3n{)o$88NQQ=~~|#?~NDMo=gWHq2amA)gGNO zHH8{1z&8u%I+-^7pN~X9cJ6F0z>gxADu*9_j5U5F#Qkf$W_U<$^2?kN*&C?bi)yhp#V zW3E%1JaEvNs2@#nF$6{;@yZ;xIXz2AAVa5Bb`2@<^}%*K6n&BGGO*|n-fU7n(P!~IZb#)xVNQM%2=P9GpCtm4pyRyfM! z+}u5nx#aMx@W9{cvC`tK9cRvV120)p-&mH*fC?d&uA`fUuv2KLwTrxPqm`WjtYsaInwGktImf&Zil2} z1ww9zMT=u->?pVNZ`h{8%v0H>-@Ir*9a27K3d3%0=&A0b^FOk!Dt9n>G?+L$_q1|J^j-OvoVY!Fkn}bo-~mn?*N>o1P3emfmU|{hk{Q`x{`xqsgyL1X_n3x_==vBa6NloGRjMd7NasrH%uu#B}savVv6@&KKT`uNeqf(8VHmR}*-3Z{a1i3%9+9qu>gF!Zt_Z@BZ;CF=xK7S$U4m2qbG@6~sFmeGnE;y=o@ts}1 ze~KIKvKS>7kkeVth%&qj=68roI6QO}ii!j_Q4Ylk7?Tm>nwE&#K;@k|1-hSYL@-;x zaFw|-41rTt>fODMXubdnYG>EyZ#h7o7oU=jkjR%TE1+I=|0JuZOSoQb-?NvCe{`W2 zqJvaDlZBNaY?%&J203u+gM{r-ntCTv15*l(bX)y$H$qV`k9db7!B(=Es8qdWwp>xY z^P78?$fV_)1$5j27X=i&x6a3zvnc80qK9}qhh(WPp<6j0u%7Bb4-E1rp;!r&Wb7w2 z-i)qAB~fkAE>iOlR3sgASQprKZdET|DH}?8`L5f+7uYqB%jW}Ym+4kjwaBS8Yf|q? z8s;*oY?2(vLQ4~7cyQjbFW~BymPyZ+%v2cN(8lv>Wt!bY)d3JT8`VD25|8@QE-f-- zjdc0gRA>bcRvq!nLEc5&IJ5K>mR~0Ez49Y2UJ^Qew@%%!iP-ex=p3($&+*|5;XiV# zJ2g0+dRkUIXhP`>^~^-v#xyVD@thTuhCA*60Rlw+&r9y z{f1)Qz!bQEDq$y`$V&?bYMg;1n&vunxNad@>{@0h-)I9Tcfq*;1%HgN*h=UzPL7L2 zk(QSSB^f7I#G4d>2>d($($LwJTgP(=D0Mt44Y-V;z4y{m7T?$X9%=-nAq{mO{P1~g z@LJtypf<#5=%F+eBM|w?zjQH}6ScP??)p&lf75-J02=rQ*03Mt34>srhpy1%AHDSh z4c`e=y0|@S=~EqmpKkm_UqUk6HmNa;w(cyK{I?UsM*C-CbyKZ!e;ac#1m6;<{0I7{ zNe_m>T!T3aN3-}0>7mHF-scCUQ3GLZ*QrCLMDtU|E(I|x0#Tkz>R0KrEidFwm$Cz& z;3!6anTy5cX5qgLWb8N)(m>xfk^3|wE|k;?s0F^}9oHzmF_>$=gwU?pkKBSe*aJt2>cR$dvvN|EuwQ@2nhj`TmM(K)tJpnO1!|~d(b4opYR@$uouy&` z(MD9X`b2wO!P=ygVN~6Z5J_l6K^iM;@tZJ{#gwhXLi2vD3$!Nwq4Voxj4#HkzQBu^ zZ7g5`RLl1@B`t$n=#1X#<8izRXcG_p8o2xn9}y5Ly%Kjv)_hza6C-HxG_Vac#KBqj z!_Hd8dvbe>c7)&o5}XPZHah5<+dJhvPG9UomjDlh!LvLD7MN)$WRg{d@^zE?j=hXe zT6}fdyn3A+eMs34GTCoC)3Pu&Y4P(J7s;9cu_kfxW!935NTxG4IEhitg3Gls^X4ESoPBLp7Xq75Phnf4${O}tLph=qtsrjz zU2ksjO-Ix_-XX?1fLE&Vq;8s&|2Kzab!~XdHeKzRdBuk}m=6rpGoZD_v-VqG5b{XG ze&MO2)6RlG89IyWY=*N=Z++>#)@YWlLJ)ZJ$g0J#=`KIjlcn9*@y^p0Tz zexJblbd~EPVKCmH)r-ruLcF~&5gHBPhroJqRc(P9U`X0h2bM;AZa_cSimPTP%{&eK zRTi-LL333#dPHlMylc?s9%5^ZU+qnIz^r4R9N`XMJ0=b{q`Ft@wLcbe8uPJZ^t(zK z6v5lf`{(fUIk|a|dsfCS{qLU;l42Q2pgLTOocC+1RJV*1IPmQi260D5slU_#l`=oQ zIU$@YD_yA#-Lz0oZQRwGoJ@t-+qX_Tj`04{a>X`+)2@MP?|HBjQggSRD-z~zuR<6k zeyCoHp?k9nQ1`FxrvPZLMB(NY8nH07gbA>CtZ!`AE)8p9ysKjEm9kr6N>rFTR>SIB zb5v0~!w5App;^lOJ?)xoH(O``4)Qj8Y!kMys>uWAbpYB1&dk_q(sdZTS68-2NXWLzE?3h=>jO7-B7j_A*r zxrVgw#YF|tJBnBrXQu+E{eEZpMxHMV3O56OHI;6SFTvz{%gWfth%7-HaDFuqF=ahz zd$G`Wj4?jLww{}@BT!_T^tXa!%AE0UJBnWFpeu5V@XI7wR7(2EugMqgi^Oo1$tS0} z-j=DGUaTxgIM5#XqC{vvEv0;BxNQ%_8ZB}$NOGcJtzd?|t!?4O@n8s}IC@{BsjZUKf+!k6Uacl6Yvdingis=|2tyb`aWkI6_loEia7;`hy5?A5xuGU9()Au ze}s7r5fD;puYuiPq4V*NR{iV9-<1<%1;U;8>#AR>IHok>O0RZv~*UWqE=6IK3DY~G4v zU2gd?aLOUiMQ|B5`N6L0g&b9jRZjtb>ba{Ot~;g?hp656528awu?Q?-Pk1KZg3cr!hVIT;^X!2GwW*pEBwJZ z8xVhYzXV<@rm>FG8cGWh0_?whiD(9!H59g0q!F0ZcwYD;8z-wx0Y+An zCMi2IjLc2ih3c)^}Z~i-IQE&s|y~oyYFhjDBbgx zkp9{0wL1pgj%GX5z#<`K!M`xeKM2%u@l!EK2|DpB89i)kuxF;@P95sS2S9g;G!HF2n z1ZlD1+c@;FL5wVpaT>YTFuu6tzMf1pUL?Rc<~{ga1MPMq-4u=8lmv2*Vn_8IdLuTQ zB>i(M!<05fJ=*c_J%S1?OA&m|scUa@on+86D4(;RtssG-`&k637r>IQ5^{>A5wfv0 z_5p!Dsf(8KLOHOlp*mU6yI_nvM_7p0(7FpH5wdlB!X07?f0!CXh3CmYwk>AC8D~6?0z0*b(Zg9qM(4nxzAj**` zT6{nt{rcqj$!)XyjHzt1Ny7o4NqzfnJH1Yk7B=5#gda!pK?E= zh5iq<_O*{)ZRT<7!nTv8(%r^qJqwt$5TYn6UKIwGw81)+XLE@X|m+$luutktBJ=kqKs%EkSUnH@3Sj7=w5xN@(Mz`3M+jJWx` z_3_2k%%FzQW3H%_SQ|+CeZzQv=oG!1HKp$us{8neV{{-v|EQt+SW-{26p&)6J7HN4 zW^__*zmUR(4@fCC2L5_!XYw2*aJ{DuFa3;d&(_rWV9R4=@TpAZiP-t*9n;@2=@Zak zD%Q$q*=K=#m4?F&w#=v-tvEM0<}vSYT>;2sW!Z|v9o#{^FtPD zr`$^1tElyH&I=v}z*?;;9<1;lfEc>esqSg{9yy-;1x&TLZ-LUCt?cHQekVn#GO4zC zR-Se`|JG4^YVY?X_i;`z9}h@tVgio&!DhZ`dx^xw;k42DSRK?DOh}MeyR4V!I-TY2 zgb@C;6|%Ae=S+Xo*jB=OX|OSu*ZhNbNLus|OlZqSRZW_m%3;;A3afl$jdZ84Zl%EI zwjpq44$y@l$KaZ4k=fuo8K8tqL?_UigNcgrN3i%y6iROTPv!wC;YfgDG&M^hDXcMkQK=^aQmn zsyq69NR6Lau;GuO8j*+jxO zPMBY14;9(gWAgo}qFqgS!p4HbKn6+(TtFydY&x-|U{L^q`__OYCChT`{=B`O|cw}{i zzDs-+XLwK?0r*^1^M6mu&hR;!CJWZ!9B)G+k6kS`Fj|u)2EJO%-rV0%yU~>Rhs#w5 zgQly`#@0@+zmR-f-M%X_FcrN-50DPu7b4<7IVuQhfZ=G#mlKvF4+yLeeSVeY*sB^e z(CJLMZ4+}H)By|%S;^7`m=dKGvudq((8;zowlQ?#y7m`ZIrg8BJ2^;cdM+5!)(=0~ z^rs)kEYAcW#ks;k>$j1}$Nd)sM8_2>RdyLQ-6h9>^55`cftpX$3+$qkaW*<|| ztZK}I0a0j6YW_3e;HHchufJ~yo>$QIc1VoZ7hBnb^U#*u{PO1DoeCTwxOwU+BUp}H ztalVSKQ{ymzy6(7-$;+TXB_ccZ;uT8-VB#v&0jq!Z^bfDlKdx*2m|xJ4?gd3Fvv*%^ELh-umzcJn#OE+kxgMxnLsR z^S{OBAMC0R2LKk7cp!-+ss;_*REio^ou`$og0i%=?ySTw1?85=lf3avQU=kZaw2rH z+ZZn(?o!oIT{HV4mr_p&MV589E-t5B*UT`Umx)%h46LUXG)2j5 zZ{;Lszn~gj9DzSXMbJQ*Sb;qzuxL%XG!W1K1!ngEDCxfk#$=xV*8(|&@>!`@LpTSr z(zda(0wi(RSysW#{{cS&u?ii)A8QtdGJqB}wEFVoV;Y?xK8IS8cQ6P^Ib>DvWa zKx#)rX%sh&mQ={(1PJ#N$7GklIXWmCP@9CWQ231<+ap*iE8Yna%d zf?4(*6{QiA=wU+4EYKM?&IU^>kSz-uhm;8s@UEMLI%}&HsFxF=zatEDJH}XyYNjY( zK-A_c8f)+?Mnzb)ld~#>Qs_qv7DjXNFtB$Vg@~LRTRx-~0bnY^IP8j3KLSl_)Y1Q< z6Zly7YJg!)4`B5Ze|}Xo@apZ`)4^PK06{lw;%j%?-l>rsu16jYio$e{4FY|2V@!j_ zJ**v%fk@bT$zN7y1g#%oyQ1jEsFv}EmPZX2A{#F#$M-)PlSTo-i6z4w=oyJ3QAHG} zM-jl284UMR2RP$)+?q5ZdiUU^<$w=|S8iu)n!b>LjiySgdQeCa6}5YV1XiWL^ip#N zq6~LiNyQQw91zI{bWjo61Yfgy(sOTbl#E}A2Pu|MG3YWR5Fmz}Z z@iWe8Vu-(kv?>vg^)eV;@2W-E!>u4K>+@t$Mko*)17N}V#SMR%YYixJr{ol>ze=O1 z)N5dZ%OyO6{-i8MnjrzdKFqu7qTl><(892T+$(ignOe16oFvBgsfpr-YnQK(EcvD6tW1AYI zd?J|{UUoOr3j>5c7_SN9VyE1DiN33>G%g%-z^atwKg8~hIMe>N8VRkZg65%YvSeu% zTsmOD?<+#n3l99rRn++iaqZed+b%ATD!aFbl#9^|iJPmh_umhyzxId>uvxXFi;j@= zA@qA1c8nF}uNX0QJvG^jn*JITP>5mmHrSMz7Fs_&KOtSn6DsYN!S^6D6*ZB%CwKNBeL zU!Q;|si3w0>yhDSLTG-`*t58Ezj#)U2%v|6Rr(bjp-T{T5z!=M-_AY4jXS+bNZXw< zmB8-zv+ME%S7H`1b&S!3#Ok=BSbYFEkFc}AVA60z^ghHHyW!ld&OF3jNwv06Gm_Lk z*z?!V!S0sQO6y@3w?2le6$30YOaUW4B!B?E z3*Kbb1dX6bv?hffVvSz|1B!wekrbov z(hsVv$(rtkdvKYrS}NB+po328#{&>h2CgX1m1^0llQu(t_QZQ2Uac1^;%&AZHpxB6 z4ry(km?K>|)7f~ES9u+kqPdzvEc@DqrS8_)WpUAsCxv_jhK{3Ipm{c1vd&$RFU4!E zq*bOl5X%iz{oPqGR@G5%x*Ms_e7IBXr#9{bv8a#O4w0U~7GV6DW06}F{t6K5FvohW zrApNc&NKQ>Q1WH}Tx+wOrb|8j_kwZGa7sy$YDzheEk~@OXr9g5(}~S-)AUbqs|!#y z6kgbwzK_pP`Y#;s&j?W-5>}+U^o;VAEo7ZxdvZi6Wdcu^yBa$dvp!q=j=m@3jM~M7 zn8NXT)NXxnH7x(F!dP-E-WuUPf>b6&Gk1%b=mwj}BeSMWm8j6E?Kw-)nfyo7FeoVTFPX(;msQH#) zdm!hC73`b7BaVMcC%}4SCz_PaKZEWvID8KeiQ~ ze=uy$Z`C}A^7oFRE+XV}VlyL`_IIp-Tm)k&h@Y4K7CVOpZxD2nFimrN6o1yd(7O zI?wGdH_Y2FyofDJP2Niz&nZRgMn!nMxuM#@OBA>?^)eEP)Zq(%iE6QJvlNZTRHdiJ zp(EI~gNvC~ht{#Ij|itFpOJ$1(lD7Qs<QI29 z3Emo_2<8Xt|2`aYfoOpR*1JHU{zvbmY-;m^82MJE=X{qozz~S6|JYyXKrI=0iYCW6 zh;!&4>_CHfe)J}%G>9)4pdbn>YExhV1P;`H{Uo%e>T-xHsQ*|Os6aCb4a%m~dI(`i zP}cwB&5J0hQ8a0_LA1gF9Wmt5ez3>y%#%0C4?)y|1NxVYTJ#;>1NU%`PT#p3N+uIh z)dU)v5s5;p!Ciue$YwM~gv+QbF-}59ql-mX+&(RxnTuK1P?ONHNN7^X{fve429ip`EoSL3qHGdHH+?0PXBUb#+M$LN9>tCuuV3;;!`=a5}Xp zaG@_+HPd8xH8C+w|8qmiX;&*Y1_RFl8LJTk=D!&$h5yaK8B=swdw{Xrcz*?blH8%e z4*Y17eAN=LJ~y;?&t11_#Wrd)UUdH9QuH`Hg*N`eP!QS%z6Ns5G9DPv^$g(bwTz+U zW?5WYW?k)gI~hB&8byV1LnqkN zaD%xBRJmdEJ@!d~E&F7>;04IFMN=pl*;vMV(kDvrC?RQ?3KUik1u6xMHo#LZm*NWQ zqDa~!i>ZoIcDcwi#Ymm23AVc+>*Z-8YaO&iAa{--cT*vc%C|)AQ9EM02gN?BhNOU; z(ZKzF0EdudmumL;x{o+}#WeE2Bg&VgI}*?YOG?u(K*Vw{EV#4y(*YPSB&c+vQgX_j zwWGFIwgLg!7z&MvfAKVr@L8vUziyf=LFmPH<3b4t%dk)hs&*8wy3QsR9@8|UzTNzz zLiu@}oxd7C=_(QbN}gZI)W|(jpwKaQleXDJT3)Cc+*vkt7sQz;JZglQfSbfDn~yQB z$?C|Y*l>WcuIZU1rvxxyiteWgSJ9Z-{f!+eVP|ZbD^0UB!+aQ{QvGn?gkc~tHzKYg zg>l)+spzsg?=RiDau&v_pq3|qhPSn?F>dOErbk)cRQ4;}BVJUT@A*AfGao9tVnf^= zHJV0D;!Gpdi8p3dgXpIMtC(lzA<+#fiJ~`}4@qYkMH(`9U^+HvJviboS7Ad@U zLXTo&%eqQ8Uy~%<$!E@e8ZPy0wevTnuEgk;zgSLGr7Qq<4uHtLm!+LxB4G*-4l$l$84IqQUXR2O-E&^6I;{h-PX&>Z;w@j!1OONcT+nb6@3OX zQNT!^Q;nj7*DwzkXN1rqQi7@vV*ggro+kN zDf>?pE1F+`mm=F7{zh2I1IjcKrIXmCh@vAoEDBg2+CZPqaQIpK7FI^1{orOC= zjg)^VoL~~PXHcP&E#gm||Cslx`HckUR=uH~XkYrzt!8$mceHd0x_QFrl*dAeW7{fy zx)|j@@1=&#f~KE@8sDHv1qiAC-1Gd{)EG_rvk(L@piF;&GtW$DK=wy2a$vO!D|l1K z8pI78Pyqmo2JB2zrffPrg2;sZ!3Nwx#=rn>I(`2)!`>jSVSth}5C}l;771*iUl=+( z5Nky2KSRBh5*`=o$7I#?P@9%XeDR*H6Hl&bGrNU33p{((Vb{=RU}5Tl>$8oUYqojyn&rhz9h zJuWI&MdHNC<1p^k20>iC9p`9F{F^IDL`XCeV5|sxI%Y1;C=no$*vgV5VKV}@m%{Q} z;zyhtsmSjN_~UMD@u<$~>LZel0kheEq&>Rw`wc-I=ED-dfed2Vc2b!!QUf7u*US3!D8qvyv%eEwB5K@B(L4reLMnF z*;p_VP)pMJH}-!0u)WS4XpsBuzB00Ow* zCpmfgO3l|ae}sI9Is$&_a#pjsOQMT;U?|s`5s@JVY$zb>;42bKqBQw_u&(ilXiDZk zDm-SzN5gO0=LRjNitVd25=2kwcD#lb-bR64Yl$RXB<$64c3vVm7D{B9{QGE~EDI

ZM7;EV6)t;bL|M~)@UMqrF9!=5I6f-#n%~PPoj{F{Ck&v%WkTnMlU@FD_U9RS& z$>yvTybIP7Qljc9_!9bkqvA=6X7{(h-bQpqHllV4FjQOw+c8107OL<_ zEV|-?{cv;`YE`w%=K5nS6v%e>XAO4a#6{3;NA~#eMe$o9<0u61E()IM4!M%DjJ{Ecd= z=GyYY1OD`6%&0vJpi7+U`|8`k_K2k7*{O44Fg5WviT<}%fNi8tj83h|;TT-1ics2P zk1Om4Irq!l0)7n-Pq6Hq5juUvdf0^ti>s#Sp3s?3E?7UD9sq=kr zZR@M!sl>Of&5iVNVpNddEDK2uv`n+^j>Vvv@zF!=?^naZmT`u?Wc@Ki-K#ifaRGCE z^6$(;X!qaGEy#zx+C`LmX>(gC*@pp{aHe$2E!%8H>1z0XlsPT^<0k>zjDtf;mxjuK z6kl0uyd#qtKvgi7iLb=vyZfCj5J0enS{a`PTRv|PizCZbspH-{|Hu2OGU<(LZRepU zI8$=Kr8PW-xD=dy)GpY(3;XGHz&L>*iQVI&5dUy*WH4Fts5v){@SsJU9WCkYI1_Ph zbLcjMuCi-0-FtajiQ1zTG|eE)hY@MfHt=LEuVbkLu=n?GALQKL%z|^ehist ztSU9F*vgl4w<9e z32JJ2sjfsB4l0mqG6NBVQK9O79FpKve?YM;f9Xw?d8xkZbBcJ0%lsHUP9X8hKFKo$yK^3vN0GV!C&tG zIw+|EkM?d4GtZb>M?NhMy2`7I-vzua_Ha`*MKs};rj;}45*AN%Aoc&fo(AFHwI1ra z6ih2uO68O+Z($C$#FCbX1}daq>1*4=CwTDpJDZsq$dv3QX%92W~;i;Xq?dh z1pImH@YXYJI|oW+CO@kwo5Nara(_hTS|ZxeH?zh1s{DWg>5S%1MZ~d}`dl&Qqw?R| zMiugZIQC?jq#n;$Vfb?W_c>ZshoU)?s>e1RQMxqUKMApts|T;=a)vl`;_?j4;PC6)m@rtnY)Bal~po04LhG0OU zHAO){_Q3ydEQd=CKP7NlO$xjz8Wpng+wA?#lKggb`)8wlldSQ^Y=5=fTvi?LP4;N> zhS7I3=v$osctkbcTQikQS@{tl9bk?4@`0WugW0Bangl6=hDUCuK5?lcqXH#}^ySd%&Jv&rQxuJVpQxS>co29KBq+)ZZ$!PCuuDYm=M0KDUqe z;=n!(&@AYicYwJ--~;`O*Bi~ak}hD-4W$##%i7&?7Z#6KZ1{DhvnSKth6{M5L21CtBXTDQS+b+!Z5Yn=+?8J8*3VDz zoJMOW(3Qc+nO37T;p1TmBW|UgvVOMfXU{!tDQ{vae!$_B`yZP*0c@g>*Q2K@G>_Z6 zq8Io<1_MZ%I5(P-GFk?sfofbP9bQI_JayJEWvj^-3wD_}F4LAA^+4ED+wLqpsV1`6!wnhn&B?F-A7#UDJ_R-`~u> zp*Lh5VSq@8sJ5oISaluzbUr0GI>UFXQ0ldO;-cPkk)PjOOR+~!th905oK^6TEfNnY z`dzEcpTmMeE~a?1<^T^{@;rF3GpeAN6pK2twS1)=W@IVJaoH-0!RntE{z9t1zVIK+ z7C4+WMc2haN_9(kM@yq&#(3_T#xyMpgX|Ki(g6@O4g)|G1XU_O3n!H78fbxH3FYpM z_$)ph*KvFTZlH>YytKY)jj+NB4JSnsJJ$*8(y9=`EwnBRRnWxZQzO|(F=u4rl|wrb z4y2akUv*XQ5(qfYE&5I;@3={31hA^52?d7{bTu%I6gPjM0Imc%6F_A4+RMCYI~k-W zAJEaiT}5ZPqbO@n89m$TL`+=gZ{2VlPFV2ZV;{DnIG`7m9{!C;!UEXDnr1Xm~rU)1%bmr}ms#ngZ$WByIPpKb1R=5tYET+J1wWKXW9Rl-| z&dLjU@UFfUHlxNuz|>XkR#KVqyBlJMul+go3*p`(yvH1t;F9q3n%Jhs)ginu1Tbs& z%uF)rb&VhHh3}~qa9BmiMtPU47jWM6{y~`4^=^e0j}GZmTA2K^0FpF*?A`*eK{?f7 z>+kdJ%h^A%0zh-1t`S@L{H*}+g)-9EaJy*OE6FFGCDo&Ms>m41{7J4v(JG;cV!Ir- zs64Y%rDPlFwrIDhmXCU|Jc3427trn{k?8C%gAQD_ytabSdYBC=6?t#$t75w;L*%15 zoSLC`9Wi9&Cu2-3N!m=&&L`Op@wJ~gpDhjGQ(Z{y55G@%U3;HLubd}u<##R94t3Py zMk+KFoiN$c+GH()EUS?-+{XwI+@{BJ&H1g>N=dMK*w>HjHYrx~pfAt&0=y=I{3Xi> zm6Ra^2N7m4T_gkN{|PE6yn3ps9Zy^^IcOROo=o}>x(At8MP0+w_Zk5DGe5mfafbAe zqkQN{>g2KHPn5FJ%A~8*?@sHLf+)=~exLy{ZdvW1LpImB7zco zI3+}45w`O={||A$$_J1R!$qVrI|W$+?XXs-Sh?)OpOhA{Ab)~eE?S|m?}FPEG=fjn zWgYt3=h z!q{-(^(%5fhWPQn*b*38;O{zsEpWX{gdj-5BVTS2tFALtT%cB{HHIX13yMe8`>tOc zDcd82fv#Fg{K%X^;!<3*;Cn?LY{;2bO?3tgSO%JgwSCEyomg;LvhpNc*|7$mf~g7- zd5e|dSZr9aqW2nEuTavIHBwmbR~M$COMDUd}S2HbN^8Pl91doz`3-%*D_(m@um)xe}I{Xu%H9 z=+JC9)xC1ARNq@ZDtOT?=R!gdM2Hbi2*8(?6!>FCA+H!!en;4;=CvmG6NmpOC%QFG_lOm z`Yoqy-yjtEZfq2lTqAhdYixcKSSYXf`ZS?2HPF`Zr!?Bj!T@L>;lvx8;f1S|;BtUD zIkW-{b^zWQ4FCG5OSItsWs(DkQ9GAe;@i_8*j)r$GQUnbG7Iv1ctOEs8{Fk!^*kvQ z6sfL-$DXC3L=c$O{=G#o42;QTkTDbtHb@)UXrE$}ms)CEr*X$Qly^z3=M*W+i!%*t zU>O+8OEV1vW=13~aP!5JF<@duzBgw|3-bi--NM(@n ziAYab6T)^kj;hSo+&||I}!t2=@#uAyL5D zS&qu&Jwrfk{gT7vVQ&C?4k04n7KI$=W-%G+7PDJ(`m%)kUoi?lE*GcBhaa2ns&X1j zsd=bUg=ua_FLMHT&MBbx;f!P@hXCKycOV0d2-fJ84z?p)y#6*J@D0tQT#TchEq)*Ika7XGaNEKpAO9M~>; zQI(HegQ`_4GSo}c*D6*u_m^))Y~i3|JB$$_>gE# z_vDa=kl*6vZ-BWK7&9{)Fct=ZLS0D>EI1F-Z6i!8U7dV#E6gh|w=pDlk(O%F9}cRF z0x^cEG&{T5-Y=Zf-cSJ@3NbL3BKJHnkd&0vpOo~5@5WM6!5Ta;;>yR}+m?=<_~nnU zoow^o1{bjAH!1^QD+vyZ?)_m&kMl7X{i=t)sXS)H82X0?iJXrgOOZC+Qj=PTL0@nN zm)q%b_~_IWP_h7f)p@S`Zc$A0Lz=W_xB*XBunCz|`81X*_>a%#mE!{Zm1~V_KCZhhJZ61_!Bx ze23397loL(Q|#Jxn69rzyS_lebc?$q>&8C&8k#pp(0{ZYX>4XgYHMp7!)e2RkLhnJ z68fy@Qjc30V~0@ubi+>Po{YLl^h{T3o$m@ADiFPG^_j@8(T495ZnT?|*;H?&z8^{1 zq7fiH5yl4InnX%jC_78y5~tfRmU;p*T#fo~JQX0|q zW6*nJaa(_42QNT2WDvt)AKE5?)z(m`Ry;x4guYexSrAm!F2IkJ3Uoea-1yvEb(W z{^cwm-K!hrVhJiTM2c})_zdQ z)y-6b*B=|TmQl@bM!XIV4%C=?su5&u*sJ1z!`gmpL5G+3W0a6^s8sF`5vn@hUkL0| z-uK3pkOIdP_PG82WvlL8$)6u>k7rU5wKh{>K9j}}W5YrfnF`?C)9GoF%I~Ri6LIN! zefm`;>v=FIB~()O@TwyFq>aKvV<;v8jr+#0ZiW$tKnKe0(H+nd7_^Mot29Uyz@_((QPr zjYi1zgU!zpm-T7ba!Y5YKjtY|t!^mOW$&f?mlcsiKbsE?zHb6#DRY%d+>Z`+&r=H! zf4mt_Ra#z-jCD7LQfj41g}TyO!lY_yYD>t?`(IuXI^W>o*(#qa7UmFJn~E1RAWQAy z&|#naE}e2P(G=c7jO^?$SF^nL$s@+XxTaUaWd5c^R!Ql|LHI|`ovUm0SyLT}ywSYp zG@2a*4wLONuk03@we{ucr18^G2|lrYxGVm;`D`ntHyeVI3U)(fjxB$6ddhHPv5aq25!LtM#6Ol9H@njhcWkMaXS>Y)ove;KK(hP{?WDf51#$ zlWa8M(w`1|ZJWjQ>Pu`j!PY|m`i}yW-om$U7hg*T3zq|7K$)o!zcv+cMVTNYGgB)^ zKYqGyuL3ifh7!@pRr18W+-CaqjqKg>CwC80z}OZ)97<4_^6~L$4$<}?h^l8LF!=PS zrn$NK`}ghMY;}pSO1JIb$1@O!GJHPuFq-nQW(PqZ`g~GlXIPk-hfD1<#eB~Z&f%^T`59b7M&VH3&WNBZ}mQAO~IvCqtVa5=bf3!Qf&AA-Q5+s zRt%7ajRgJGd%F)ulSkf9Z|P2oarQj6v*YC9;kkK}UY*9u>>`1%+g6A|bX{X)^f!9kp5%G>!xMQNtIMzt7Gb%w~HBP{;&XVF4` z?eKQepj+?nmPSQnnb)sh%T!PcICx=pv!IpZ)mf4S z-*-ujKSxNabKh*a=Hsy)Py9OmQQ7no(Z%-_E3)Ltd@ioE#gsIkTO>u76VxaRNguQnoNKOIt8Ss52cws~X(Yl~)4-rCx# za^K~=*ipVMtzbP=_HA&`eQ}_;ySp1XSjBXd*3m39&fOw`5GYwVbIoqI^Z)(iN(rX%mE~Eka*SlI<_ckg-C#z#tgd|Ziv3KI+nCyj^qjh!+ zVq;_Xw-&E%ML#=m|0XMkYrnlT^zLrCXIYiix17{Uc1Bbn`2O{EKjzV!`eazN`d4FQ z$6zL8H0rYavn2ke@83TvCh|OIaNAnQ))jd)`Wetgr5hqFQ0N^LgdHE&KQNHf_}S+y zZUT?ZULAo*1iT&X7B_csQ4tp>r`7j&)aj_gFO_ai#y{obu19iRiis_!6}@w-f4j}Mm- z(?c*GSMKCU@G#E@>tDs7kpO_R%ZBsVpzoboDX)*bVA@km`7trsf!vB0&1<_+<|IPR z<2^k=P4)E`f(x|sGL=&ak?cOF`MztMoKati9HUNgE;CBu5)iPod3$?<4PkyTj8uwL z8BB>4*1WiBqJb=@b$(ZL-dTACcgeA%wRT<1PyCg@xF=k(T+O$yh2I=*EMy~xn{jes zraI}??U>y^|8dE=DyAd0HQX_%jyyklHCpr4IRd#H=+Rv4UWMWGEQLKxVICYY&U=@` zJ#NQ4VdE&)7&+w>RH4u@M33(N9B7%~-H31(c<> zpa+3!!RvIXT`XMX97#UsP6VMNfP00nX|NyD(@l$%EHVI7exl}CLv5|`=G-^G@A_5l zrRE(8obh>qm_ci-1f2k1L1RH8RgWhc>w}1rlapIoyVIm|kxuov`DhU z-|Cir`lMgx5Hz?Aj!9WYhPBhzbo&0idvqM0?!RG?{27kk)MB?}@hfc6(!Q9*-+e)v z_>??M{%V%Z?d>5imWKAbZp`<+m5-NUBK-F5ZsOWK-*fm`58!QV2dmPpzF-Y==CAt& z1R#CBNWI75-ey{?y1IG`&vQ(R&ZOD-dA)jHiTX(vVb_gc4}`RHHLqDEV1vy#wZ^_x zJc3FtHYw0&V$H>Tik@4-UOhwMCOFycZG!XXnb*r02ghY;Wy_Ovb+@^a{8h5Ha zJz9MyFSFk*yT!mz+t*hj8_oP2b7Ep52vKhFjX>j;108~lH*dhZ%rr+bYQ59H#BD_! z@2E!OU~kVTe0lqFxZ%#SZ}st!pv!3%<&+A~LxFh7oY@-hGnj-R26=gT-xFoiFdb0kmyHQ6Td1eDw=(>XjY~>5+}P!ISdXqX4SQ{ zv`FRo&j;P~_3@#irp_kv|M~N0ZfCP%o*WH;y?)7~Kv_C_wK<28-u1yE3xZ;W%pMPS zcbiQMNB|Kz#fu`4jfYf}dHRf=Cn+yx1YCPMf`|ajZmwT8li7>J`7tb^Ey0!hiZoO-y(9#4H_+Demwk#I zeQJTtE4sCVk5TNup}q}3eQpvziS~`cDMJK%&p%qx`2ra2?w@F1m4RV)wtt`MQ_b+m zM&@tiKP&|S2IIA?(Uct_!OyeF`df;~`TrT~!myuc#>^EzrenQhI_H&K)UWYzJDlf& zi99yw<%_;wBOa`LQCz2c{YrQoHbG8!TwGlGITItJn~rmchCKDuXYVt=E^Y99iAJrD zFR>|8)EUKgh5KSU`X3y)C!FTT4cHduMPE`%EhC-#=UUrJ*d_pFF5}`(^F88-gb+T!TC-LxPX8Umf}c@V_NAb%Y>(lC+GuZdB#Rb)5h{{XZT7t8E_OKgbz+1c8^jY@R`zr#fiy_=KG#1gEz8^x9@KCIUXb=4f0s(JqWIe;g?_UZi&?(PS( zJ(|fuq!2$!~Z=6^a&Uokb=jasaX7Ui)2jR)DMTrFE^ibqPMCxE{?sSFIiX6eU<0$M1 z7ddhs{p`K5u>nrYV^^}~_wibk)>J=XcrZigk|N5Lno{DtGTsmjfJz+@KO}MyPYNOMbz z7#3(kEKN-vWysrgra|ja4}aqVZMq9t)s?S(ga?G2mXctMx#{=SM`iB2YYabo^K|Uj zCR=*B20uNX$Wl#v=Jo+(yS@0+sYaUgn(p)Xc($*0d{pPdn~1!j$H0^U19VCrdwDil zAz;?0_j|$t(=OsJoYxN#zR7YK%{k!pb7If;NKewNr=EmQUP4p)h<1_Ngy3Gm|31N-MkTGxd*6 zHDx+T|LS{^&PudP`&{-FY&Ap0y^z+{Rv%1m%s-PHkje}wOi=691RP5Y<|L!^G-IV!!@AaL)s2?B2rBAiSk* zXPwlb5Q>jxhfWMjml}g7QL3d#vP?u-X_H94?9A}Uv8kbBR>j4!_+&LlAUcSs!x9|z223)wed(b zA2w`Pa^^p4>0L){>ipf8de?fd{l9DX=p-WiE8c;Isnx4I&0nU|E_3HDn*nPnn> z`~2RVyihptpOsqS+S_PyQ|)lsEOHOTe!7Bto}6O)*(XOzLIgbwIO0&$rgvN1`(8?c z#1g~3t~hDk;7;Z@jr8aPIdP5ZGw}jW*fu@Mh|8nu58c1~AhvyaB5A;bjLOLtS-ZCe zw&EmF+B2DofM0f>y>?cTT_IWfZ=G_2`*J*)&z$ogAFtYuRQaKwMlSq*oQ0piwBWJr zz&ni?jA}hQ_rQMQ;>$Z1{@tZ+$6~Xf)X+XR4S(jl-Ll3?DTNn2iA@t?CjtU+2CN%h zbc?ZxNmr^!YJB{zBUjBW85J^=GnkNc`M80BfySmLWN!$ZL9(Co?%L%OZ=sHKt+xkP zCR&P66ZYa0NJ&WazSaBQ)z$UwTQM*~EiEmQJfB?F&7+wWdEA+JPN*QEDKH_XwswnR5onj*j{N-m5}Ti-{r=i^W3_%u zOH09I9PjSr_5qs`?DhdDfG6{Pi!1b?79A5b^3D)BPp9%no-$X1pq`~-De zJjxR+jr6RJqwBlYJbH(V@{btGImMWx?_{ek+Ow1mX1hlAvQ%=YG$t_q7t37@a+9|L7rj)gyg7eRpU zQnkMg@LNPg#A_extanVqN31Xs4^5mc?&#x{Z8CRcMOODf|C2)#-S7%IU2Lya@Pbe0b&J6qwaQ5 z%Fj%oGlEm?qMxSoqm|K`IcuF#J2SYO=)1Q<%L>1bB?eyGx#iQdr%#-32n!4I@o6Vt z6A}_C)xZ9G0W7S2-i4=?A}D+8WAs1YP8k>%3q4DNppjm-86okE*>aHu?ITs0`et=r zl#J&?UEKr)X0%rUvxs3R)o5Z-%F)I@zpeC2G-Y7EX2f&9V`L;%*YoJW1?VcvTe>|N zig)7r{Qf+V%8<^|gCurT6Fx;15BS=ZRsiz}acyr0M1T-eTEWo)DS^xlSC)@Y2vYso ziwgN;V}*=Ehwf-BK=m}HMg68*+Yl=hw$H5Neu^DxiDY)t$i7carVlGky9lajV562R_SUQ z8q)2iS|P$?9N(V^7s-l22XROH%Xi3#&?XP0)@x53b+GVHrggRAn)}7I-kSu3;^N|g zUcfb^58N~d!_?V{bWR=T{C4{kfgxRHuIw`@J9p`?ilzw6igld&t$B}al9F2<-Bp>~ z!J0(-m6J`(or#*nC`*f388(~DHle}8#xBUuSFvd8d#k7J7V-B>lr9BMT#K1g)qzqe zWiw*>wx>a5fX6Vy_$VHuMW}!%i>H*$)yTzM@yI-Pivs_Tv9DHPbtXG+x~R=Q!5NwP z&J|eXzB@L6<^Cvh6<@w+D}P0Dag$OC3#@ektxFh?MbYtYmMmpYEnc|&4ksJK1-*=u zyRrAJ%=(R6??eh6BI_aPl)(1M{^I|9SIV>21ZXqh>HlZDl(qX>K^T{9 zQyG>2^+~YI9W5V-FG%t^BUn&7o)WCiD4IWOG~iRw{LDYsxS@NQYz01b2CNF`P~*Kp zrDQN^FNL&p(_1~{<6lW-U^KY&yYUvCxhv=Hj_gk(0yuvz+VnCl})F zwB+-MOkwAUntK;U8XAxWlGT?gtW5I|Z@2B<0c;8xq-yGMt();%J(9`{un79K&D)3*?aTmjh*K=05M&3UA9kujX9S2#_+M72l+_?Vchh=vS-q67l=PLf>u+` z!p7!inN@sYQ~*Ghb1s^n+wcgCtmE|}V*F8KHOi&PlSN&~exQkw2M^}Y;Zt0|--Kt? z(&aLhlCKZoRpQ6c(}M8 z41Ac)H>x{=doa#JgyY936_Q_2;C(W8EJ5o8;{kQi_Csb|$U+_{YqM+WBl`MMjasQ% z-tCuxd4qh@(9jU1e>mdWM9TYHW3B=n$Zyrl3YX9#!h)Y}!akm+t&{~tQg|9v!&9&s zBOiDshR9z-`&?gd*$y9o8%}-rWO-N!JPHQ~$KU77-f-$qyO&Qe-Vg?V4CzatSCy2M zD36d(fo&njIkZw}@OHGfS5#I8TZ7kAR8U9}L6#;a&YTF~pid^s@Jq7!GnyfZl$DnP z7-!EyS|dg(4M@YZqiWTeC7>&*IZXrSrb8}qLFn+zx(L!nbL=+9vo!@KO;MSu%Z#BE z+;Vbqt>5gl*+~QHTF#nbBr74(Sk3FWkCqI(ept775C)-&sjtViLH1;%%9QJTsXoxV zLqS9=QEWynwMr;>j;Vfo}VpC=ahw2bQky=Ou&G%+AM!NIC zd#{K6aLI6NMHfTlx&fvXt^zl)TFQ#nHBPDPUHlV?#r8oVZD=9vHJcVPD<(Yk^NX1l zD|1=~eDY3(6|yD}e@ZzX!6hiM?pHIFKkz^w-pof)`j~tITa(3px-K#XW#^R#{0_fV z5b)S=RPqN{j~_pV%wmpentwsTD)5C_F-_sLkPtPFyaxUl<+f%0`!IEsFwho;JISQH zb$tgbMEUO8Oa1FWTUB{`pNj7b-Q)djQ6VjCs1;)^07l2w;o{{GWuetkP$zs~ERb?>FkPolKdTFxfEF_8~Qv_V^#TW$E4n zh8tiNDAv%18>X3~t3dpgQ1Vf+fp9m}#525M`NHlyH~!rGCoff2-ecS>>Evkc1i{^l zUjf0>dhU#E%=SS1OZ&&>*1gHZLQ$D=nkwX8_c#}pNC;SJ=9f~&_ba6l;V^Jv?UyeR zns{h~3X_rq$2YVKOlWm`!mAA8`iAzH9K8D%9gB$7umN(nMS#6nWv z(F%XP*JSSOaNYyTxUx?RJPQwX$B}hWW8hU22montHLEwQIVM_O?IOb7T6ZC>d^la3 zY|(62JSzyO#T$hV6wuxyxy!z0tvII7K(B(42_jvrF1OzL{8skm&%T(EEGTWc6k(6K zU%$vNU6PH3D48nw6nckT%|)mApX_|`e308liP%gfD#=E;b0ZWxJw+B>VCJ;tKy@Hl zFf}%|x^zgwU`28UEkC&SlJttouWjQ$It{GMwJCcU<7v{EbwG<$0)878LWyo( z$Ug?BNSIn!=(QX4)_;mKI)1Duu%%tuB3l=HaYCI^=tWeN__Mv9IZrUnf5t}m(<0

#-Z!Mp=`LqSHy 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

B;NSc(+mF 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ĈrH>d|MZT(YMc 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

Added

  • Splatting (like f(x...)) is recognized in restricted settings in nonlinear expressions.

  • Support for deleting constraints and variables.

  • The documentation has been completely rewritten using docstrings and Documenter.

  • Support for modeling mixed conic and quadratic models (for example, conic models with quadratic objectives and bi-linear matrix inequalities).

  • Significantly improved support for modeling new types of constraints and for extending JuMP's macros.

  • Support for providing dual warm starts.

  • Improved support for accessing solver-specific attributes (for example, the irreducible inconsistent subsystem).

  • Explicit control of whether symmetry-enforcing constraints are added to PSD constraints.

  • Support for modeling exponential cones.

  • Significant improvements in internal code quality and testing.

  • Style and naming guidelines.

  • Direct mode and manual mode provide explicit control over when copies of a model are stored or regenerated. See the corresponding documentation.

Regressions

There are known regressions from JuMP 0.18 that will be addressed in a future release (0.19.x or later):

  • Performance regressions in model generation (issue). Please file an issue anyway if you notice a significant performance regression. We have plans to address a number of performance issues, but we might not be aware of all of them.

  • Fast incremental NLP solves are not yet reimplemented (issue).

  • We do not yet have an implementation of solver-specific callbacks.

  • The column generation syntax in @variable has been removed (that is, the objective, coefficients, and inconstraints keyword arguments). Support for column generation will be re-introduced in a future release.

  • The ability to solve the continuous relaxation (that is, via solve(model; relaxation = true)) is not yet reimplemented (issue).

Version 0.18.5 (December 1, 2018)

  • Support views in some derivative evaluation functions.
  • Improved compatibility with PackageCompiler.

Version 0.18.4 (October 8, 2018)

  • Fix a bug in model printing on Julia 0.7 and 1.0.

Version 0.18.3 (October 1, 2018)

  • Add support for Julia v1.0 (Thanks @ExpandingMan)
  • Fix matrix expressions with quadratic functions (#1508)

Version 0.18.2 (June 10, 2018)

  • Fix a bug in second-order derivatives when expressions are present (#1319)
  • Fix a bug in @constraintref (#1330)

Version 0.18.1 (April 9, 2018)

  • Fix for nested tuple destructuring (#1193)
  • Preserve internal model when relaxation=true (#1209)
  • Minor bug fixes and updates for example

Version 0.18.0 (July 27, 2017)

  • Drop support for Julia 0.5.
  • Update for ForwardDiff 0.5.
  • Minor bug fixes.

Version 0.17.1 (June 9, 2017)

  • Use of constructconstraint! in @SDconstraint.
  • Minor bug fixes.

Version 0.17.0 (May 27, 2017)

  • Breaking change: Mixing quadratic and conic constraints is no longer supported.
  • Breaking change: The getvariable and getconstraint functions are replaced by indexing on the corresponding symbol. For instance, to access the variable with name x, one should now write m[:x] instead of getvariable(m, :x). As a consequence, creating a variable and constraint with the same name now triggers a warning, and accessing one of them afterwards throws an error. This change is breaking only in the latter case.
  • Addition of the getobjectivebound function that mirrors the functionality of the MathProgBase getobjbound function except that it takes into account transformations performed by JuMP.
  • Minor bug fixes.

The following changes are primarily of interest to developers of JuMP extensions:

  • The new syntax @constraint(model, expr in Cone) creates the constraint ensuring that expr is inside Cone. The Cone argument is passed to constructconstraint! which enables the call to the dispatched to an extension.
  • The @variable macro now calls constructvariable! instead of directly calling the Variable constructor. Extra arguments and keyword arguments passed to @variable are passed to constructvariable! which enables the call to be dispatched to an extension.
  • Refactor the internal function conicdata (used build the MathProgBase conic model) into smaller sub-functions to make these parts reusable by extensions.

Version 0.16.2 (March 28, 2017)

  • Minor bug fixes and printing tweaks
  • Address deprecation warnings for Julia 0.6

Version 0.16.1 (March 7, 2017)

  • Better support for AbstractArray in JuMP (Thanks @tkoolen)
  • Minor bug fixes

Version 0.16.0 (February 23, 2017)

  • Breaking change: JuMP no longer has a mechanism for selecting solvers by default (the previous mechanism was flawed and incompatible with Julia 0.6). Not specifying a solver before calling solve() will result in an error.
  • Breaking change: User-defined functions are no longer global. The first argument to JuMP.register is now a JuMP Model object within whose scope the function will be registered. Calling JuMP.register without a Model now produces an error.
  • Breaking change: Use the new JuMP.fix method to fix a variable to a value or to update the value to which a variable is fixed. Calling setvalue on a fixed variable now results in an error in order to avoid silent behavior changes. (Thanks @joaquimg)
  • Nonlinear expressions now print out similarly to linear/quadratic expressions (useful for debugging!)
  • New category keyword to @variable. Used for specifying categories of anonymous variables.
  • Compatibility with Julia 0.6-dev.
  • Minor fixes and improvements (Thanks @cossio, @ccoffrin, @blegat)

Version 0.15.1 (January 31, 2017)

  • Bugfix for @LinearConstraints and friends

Version 0.15.0 (December 22, 2016)

  • Julia 0.5.0 is the minimum required version for this release.
  • Document support for BARON solver
  • Enable info callbacks in more states than before, for example, for recording solutions. New when argument to addinfocallback (#814, thanks @yeesian)
  • Improved support for anonymous variables. This includes new warnings for potentially confusing use of the traditional non-anonymous syntax:
    • When multiple variables in a model are given the same name
    • When non-symbols are used as names, for example, @variable(m, x[1][1:N])
  • Improvements in iterating over JuMP containers (#836, thanks @IssamT)
  • Support for writing variable names in .lp file output (Thanks @leethargo)
  • Support for querying duals to SDP problems (Thanks @blegat)
  • The comprehension syntax with curly braces sum{}, prod{}, and norm2{} has been deprecated in favor of Julia's native comprehension syntax sum(), prod() and norm() as previously announced. (For early adopters of the new syntax, norm2() was renamed to norm() without deprecation.)
  • Unit tests rewritten to use Base.Test instead of FactCheck
  • Improved support for operations with matrices of JuMP types (Thanks @ExpandingMan)
  • The syntax to halt a solver from inside a callback has changed from throw(CallbackAbort()) to return JuMP.StopTheSolver
  • Minor bug fixes

Version 0.14.2 (December 12, 2016)

  • Allow singleton anonymous variables (includes bugfix)

Version 0.14.1 (September 12, 2016)

  • More consistent handling of states in informational callbacks, includes a new when parameter to addinfocallback for specifying in which state an informational callback should be called.

Version 0.14.0 (August 7, 2016)

  • Compatibility with Julia 0.5 and ForwardDiff 0.2
  • Support for "anonymous" variables, constraints, expressions, and parameters, for example, x = @variable(m, [1:N]) instead of @variable(m, x[1:N])
  • Support for retrieving constraints from a model by name via getconstraint
  • @NLconstraint now returns constraint references (as expected).
  • Support for vectorized expressions within lazy constraints
  • On Julia 0.5, parse new comprehension syntax sum(x[i] for i in 1:N if isodd(i)) instead of sum{ x[i], i in 1:N; isodd(i) }. The old syntax with curly braces will be deprecated in JuMP 0.15.
  • Now possible to provide nonlinear expressions as "raw" Julia Expr objects instead of using JuMP's nonlinear macros. This input format is useful for programmatically generated expressions.
  • s/Mathematical Programming/Mathematical Optimization/
  • Support for local cuts (Thanks to @madanim, Mehdi Madani)
  • Document Xpress interface developed by @joaquimg, Joaquim Dias Garcia
  • Minor bug and deprecation fixes (Thanks @odow, @jrevels)

Version 0.13.2 (May 16, 2016)

  • Compatibility update for MathProgBase

Version 0.13.1 (May 3, 2016)

  • Fix broken deprecation for registerNLfunction.

Version 0.13.0 (April 29, 2016)

  • Most exported methods and macros have been renamed to avoid camelCase. See the list of changes here. There is a 1-1 mapping from the old names to the new, and it is safe to simply replace the names to update existing models.
  • Specify variable lower/upper bounds in @variable using the lowerbound and upperbound keyword arguments.
  • Change name printed for variable using the basename keyword argument to @variable.
  • New @variables macro allows multi-line declaration of groups of variables.
  • A number of solver methods previously available only through MathProgBase are now exposed directly in JuMP. The fix was recorded live.
  • Compatibility fixes with Julia 0.5.
  • The "end" indexing syntax is no longer supported within JuMPArrays which do not use 1-based indexing until upstream issues are resolved, see here.

Version 0.12.2 (March 9, 2016)

  • Small fixes for nonlinear optimization

Version 0.12.1 (March 1, 2016)

  • Fix a regression in slicing for JuMPArrays (when not using 1-based indexing)

Version 0.12.0 (February 27, 2016)

  • The automatic differentiation functionality has been completely rewritten with a number of user-facing changes:
    • @defExpr and @defNLExpr now take the model as the first argument. The previous one-argument version of @defExpr is deprecated; all expressions should be named. For example, replace @defExpr(2x+y) with @defExpr(jump_model, my_expr, 2x+y).
    • JuMP no longer uses Julia's variable binding rules for efficiently re-solving a sequence of nonlinear models. Instead, we have introduced nonlinear parameters. This is a breaking change, so we have added a warning message when we detect models that may depend on the old behavior.
    • Support for user-defined functions integrated within nonlinear JuMP expressions.
  • Replaced iteration over AffExpr with Number-like scalar iteration; previous iteration behavior is now available via linearterms(::AffExpr).
  • Stopping the solver via throw(CallbackAbort()) from a callback no longer triggers an exception. Instead, solve() returns UserLimit status.
  • getDual() now works for conic problems (Thanks @emreyamangil.)

Version 0.11.3 (February 4, 2016)

  • Bug-fix for problems with quadratic objectives and semidefinite constraints

Version 0.11.2 (January 14, 2016)

  • Compatibility update for Mosek

Version 0.11.1 (December 1, 2015)

  • Remove usage of @compat in tests.
  • Fix updating quadratic objectives for nonlinear models.

Version 0.11.0 (November 30, 2015)

  • Julia 0.4.0 is the minimum required version for this release.
  • Fix for scoping semantics of index variables in sum{}. Index variables no longer leak into the surrounding scope.
  • Addition of the solve(m::Model, relaxation=true) keyword argument to solve the standard continuous relaxation of model m
  • The getConstraintBounds() method allows access to the lower and upper bounds of all constraints in a (nonlinear) model.
  • Update for breaking changes in MathProgBase

Version 0.10.3 (November 20, 2015)

  • Fix a rare error when parsing quadratic expressions
  • Fix Variable() constructor with default arguments
  • Detect unrecognized keywords in solve()

Version 0.10.2 (September 28, 2015)

  • Fix for deprecation warnings

Version 0.10.1 (September 3, 2015)

  • Fixes for ambiguity warnings.
  • Fix for breaking change in precompilation syntax in Julia 0.4-pre

Version 0.10.0 (August 31, 2015)

  • Support (on Julia 0.4 and later) for conditions in indexing @defVar and @addConstraint constructs, for example, @defVar(m, x[i=1:5,j=1:5; i+j >= 3])
  • Support for vectorized operations on Variables and expressions. See the documentation for details.
  • New getVar() method to access variables in a model by name
  • Support for semidefinite programming.
  • Dual solutions are now available for general nonlinear problems. You may call getDual on a reference object for a nonlinear constraint, and getDual on a variable object for Lagrange multipliers from active bounds.
  • Introduce warnings for two common performance traps: too many calls to getValue() on a collection of variables and use of the + operator in a loop to sum expressions.
  • Second-order cone constraints can be written directly with the norm() and norm2{} syntax.
  • Implement MathProgBase interface for querying Hessian-vector products.
  • Iteration over JuMPContainers is deprecated; instead, use the keys and values functions, and zip(keys(d),values(d)) for the old behavior.
  • @defVar returns Array{Variable,N} when each of N index sets are of the form 1:nᵢ.
  • Module precompilation: on Julia 0.4 and later, using JuMP is now much faster.

Version 0.9.3 (August 11, 2015)

  • Fixes for FactCheck testing on julia v0.4.

Version 0.9.2 (June 27, 2015)

  • Fix bug in @addConstraints.

Version 0.9.1 (April 25, 2015)

  • Fix for Julia 0.4-dev.
  • Small infrastructure improvements for extensions.

Version 0.9.0 (April 18, 2015)

  • Comparison operators for constructing constraints (for example, 2x >= 1) have been deprecated. Instead, construct the constraints explicitly in the @addConstraint macro to add them to the model, or in the @LinearConstraint macro to create a stand-alone linear constraint instance.
  • getValue() method implemented to compute the value of a nonlinear subexpression
  • JuMP is now released under the Mozilla Public License version 2.0 (was previously LGPL). MPL is a copyleft license which is less restrictive than LGPL, especially for embedding JuMP within other applications.
  • A number of performance improvements in ReverseDiffSparse for computing derivatives.
  • MathProgBase.getsolvetime(m) now returns the solution time reported by the solver, if available. (Thanks @odow, Oscar Dowson)
  • Formatting fix for LP format output. (Thanks @sbebo, Leonardo Taccari).

Version 0.8.0 (February 17, 2015)

  • Nonlinear subexpressions now supported with the @defNLExpr macro.
  • SCS supported for solving second-order conic problems.
  • setXXXCallback family deprecated in favor of addXXXCallback.
  • Multiple callbacks of the same type can be registered.
  • Added support for informational callbacks via addInfoCallback.
  • A CallbackAbort exception can be thrown from callback to safely exit optimization.

Version 0.7.4 (February 4, 2015)

  • Reduced costs and linear constraint duals are now accessible when quadratic constraints are present.
  • Two-sided nonlinear constraints are supported.
  • Methods for accessing the number of variables and constraints in a model are renamed.
  • New default procedure for setting initial values in nonlinear optimization: project zero onto the variable bounds.
  • Small bug fixes.

Version 0.7.3 (January 14, 2015)

  • Fix a method ambiguity conflict with Compose.jl (cosmetic fix)

Version 0.7.2 (January 9, 2015)

  • Fix a bug in sum(::JuMPDict)
  • Added the setCategory function to change a variables category (for example, continuous or binary)

after construction, and getCategory to retrieve the variable category.

Version 0.7.1 (January 2, 2015)

  • Fix a bug in parsing linear expressions in macros. Affects only Julia 0.4 and later.

Version 0.7.0 (December 29, 2014)

Linear/quadratic/conic programming

  • Breaking change: The syntax for column-wise model generation has been changed to use keyword arguments in @defVar.
  • On Julia 0.4 and later, variables and coefficients may be multiplied in any order within macros. That is, variable*coefficient is now valid syntax.
  • ECOS supported for solving second-order conic problems.

Nonlinear programming

  • Support for skipping model generation when solving a sequence of nonlinear models with changing data.
  • Fix a memory leak when solving a sequence of nonlinear models.
  • The @addNLConstraint macro now supports the three-argument version to define sets of nonlinear constraints.
  • KNITRO supported as a nonlinear solver.
  • Speed improvements for model generation.
  • The @addNLConstraints macro supports adding multiple (groups of) constraints at once. Syntax is similar to @addConstraints.
  • Discrete variables allowed in nonlinear problems for solvers which support them (currently only KNITRO).

General

  • Starting values for variables may now be specified with @defVar(m, x, start=value).
  • The setSolver function allows users to change the solver subsequent to model creation.
  • Support for "fixed" variables via the @defVar(m, x == 1) syntax.
  • Unit tests rewritten to use FactCheck.jl, improved testing across solvers.

Version 0.6.3 (October 19, 2014)

  • Fix a bug in multiplying two AffExpr objects.

Version 0.6.2 (October 11, 2014)

  • Further improvements and bug fixes for printing.
  • Fixed a bug in @defExpr.
  • Support for accessing expression graphs through the MathProgBase NLP interface.

Version 0.6.1 (September 19, 2014)

  • Improvements and bug fixes for printing.

Version 0.6.0 (September 9, 2014)

  • Julia 0.3.0 is the minimum required version for this release.
  • buildInternalModel(m::Model) added to build solver-level model in memory without optimizing.
  • Deprecate load_model_only keyword argument to solve.
  • Add groups of constraints with @addConstraints macro.
  • Unicode operators now supported, including for sum, for prod, and /
  • Quadratic constraints supported in @addConstraint macro.
  • Quadratic objectives supported in @setObjective macro.
  • MathProgBase solver-independent interface replaces Ipopt-specific interface for nonlinear problems
    • Breaking change: IpoptOptions no longer supported to specify solver options, use m = Model(solver=IpoptSolver(options...)) instead.
  • New solver interfaces: ECOS, NLopt, and nonlinear support for MOSEK
  • New option to control whether the lazy constraint callback is executed at each node in the B&B tree or just when feasible solutions are found
  • Add support for semicontinuous and semi-integer variables for those solvers that support them.
  • Add support for index dependencies (for example, triangular indexing) in @defVar, @addConstraint, and @defExpr (for example, @defVar(m, x[i=1:10,j=i:10])).
    • This required some changes to the internal structure of JuMP containers, which may break code that explicitly stored JuMPDict objects.

Version 0.5.8 (September 24, 2014)

  • Fix a bug with specifying solvers (affects Julia 0.2 only)

Version 0.5.7 (September 5, 2014)

  • Fix a bug in printing models

Version 0.5.6 (September 2, 2014)

  • Add support for semicontinuous and semi-integer variables for those solvers that support them.
    • Breaking change: Syntax for Variable() constructor has changed (use of this interface remains discouraged)
  • Update for breaking changes in MathProgBase

Version 0.5.5 (July 6, 2014)

  • Fix bug with problem modification: adding variables that did not appear in existing constraints or objective.

Version 0.5.4 (June 19, 2014)

  • Update for breaking change in MathProgBase which reduces loading times for using JuMP
  • Fix error when MIPs not solved to optimality

Version 0.5.3 (May 21, 2014)

  • Update for breaking change in ReverseDiffSparse

Version 0.5.2 (May 9, 2014)

  • Fix compatibility with Julia 0.3 prerelease

Version 0.5.1 (May 5, 2014)

  • Fix a bug in coefficient handling inside lazy constraints and user cuts

Version 0.5.0 (May 2, 2014)

  • Support for nonlinear optimization with exact, sparse second-order derivatives automatically computed. Ipopt is currently the only solver supported.
  • getValue for AffExpr and QuadExpr
  • Breaking change: getSolverModel replaced by getInternalModel, which returns the internal MathProgBase-level model
  • Groups of constraints can be specified with @addConstraint (see documentation for details). This is not a breaking change.
  • dot(::JuMPDict{Variable},::JuMPDict{Variable}) now returns the corresponding quadratic expression.

Version 0.4.1 (March 24, 2014)

  • Fix bug where change in objective sense was ignored when re-solving a model.
  • Fix issue with handling zero coefficients in AffExpr.

Version 0.4.0 (March 10, 2014)

  • Support for SOS1 and SOS2 constraints.
  • Solver-independent callback for user heuristics.
  • dot and sum implemented for JuMPDict objects. Now you can say @addConstraint(m, dot(a,x) <= b).
  • Developers: support for extensions to JuMP. See definition of Model in src/JuMP.jl for more details.
  • Option to construct the low-level model before optimizing.

Version 0.3.2 (February 17, 2014)

  • Improved model printing
    • Preliminary support for IJulia output

Version 0.3.1 (January 30, 2014)

  • Documentation updates
  • Support for MOSEK
  • CPLEXLink renamed to CPLEX

Version 0.3.0 (January 21, 2014)

  • Unbounded/infeasibility rays: getValue() will return the corresponding components of an unbounded ray when a model is unbounded, if supported by the selected solver. getDual() will return an infeasibility ray (Farkas proof) if a model is infeasible and the selected solver supports this feature.
  • Solver-independent callbacks for user generated cuts.
  • Use new interface for solver-independent QCQP.
  • setlazycallback renamed to setLazyCallback for consistency.

Version 0.2.0 (December 15, 2013)

Breaking

  • Objective sense is specified in setObjective instead of in the Model constructor.
  • lpsolver and mipsolver merged into single solver option.

Added

  • Problem modification with efficient LP restarts and MIP warm-starts.
  • Relatedly, column-wise modeling now supported.
  • Solver-independent callbacks supported. Currently we support only a "lazy constraint" callback, which works with Gurobi, CPLEX, and GLPK. More callbacks coming soon.

Version 0.1.2 (November 16, 2013)

  • Bug fixes for printing, improved error messages.
  • Allow AffExpr to be used in macros; for example, ex = y + z; @addConstraint(m, x + 2*ex <= 3)

Version 0.1.1 (October 23, 2013)

  • Update for solver specification API changes in MathProgBase.

Version 0.1.0 (October 3, 2013)

  • Initial public release.
diff --git a/dev/developers/checklists/index.html b/dev/developers/checklists/index.html index 5631a463bfb..d64db6182b5 100644 --- a/dev/developers/checklists/index.html +++ b/dev/developers/checklists/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Checklists

The purpose of this page is to collate a series of checklists for commonly performed changes to the source code of JuMP.

In each case, copy the checklist into the description of the pull request.

Making a release

In preparation for a release, use the following checklist. These steps can be done in the same commit, or separately. The last commit should have the message "Prep for vX.Y.Z."

## Pre-release
+

Checklists

The purpose of this page is to collate a series of checklists for commonly performed changes to the source code of JuMP.

In each case, copy the checklist into the description of the pull request.

Making a release

In preparation for a release, use the following checklist. These steps can be done in the same commit, or separately. The last commit should have the message "Prep for vX.Y.Z."

## Pre-release
 
  - [ ] Check that the pinned packages in `docs/Project.toml` are updated. We pin
        the versions so that changes in the solvers (changes in printing, small
@@ -69,4 +69,4 @@
  - [ ] Implement `vectorize(data, ::NewShape)::Vector`
  - [ ] Implement `reshape_vector(vector, ::NewShape)`
  - [ ] Implement `dual_shape`, or verify that the shape is self-dual
- - [ ] Add the tests from https://github.com/jump-dev/JuMP.jl/pull/3816
+ - [ ] Add the tests from https://github.com/jump-dev/JuMP.jl/pull/3816
diff --git a/dev/developers/contributing/index.html b/dev/developers/contributing/index.html index 30138e1d83f..50899dd7d0e 100644 --- a/dev/developers/contributing/index.html +++ b/dev/developers/contributing/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

How to contribute to JuMP

Welcome, this document explains some ways you can contribute to JuMP.

Code of Conduct

This project and everyone participating in it is governed by the JuMP Code of Conduct. By participating, you are expected to uphold this code.

Join the community forum

First up, join the community forum.

The forum is a good place to ask questions about how to use JuMP. You can also use the forum to discuss possible feature requests and bugs before raising a GitHub issue (more on this below).

Aside from asking questions, the easiest way you can contribute to JuMP is to help answer questions on the forum.

Join the developer chatroom

If you're interested in contributing code to JuMP, the next place to join is the developer chatroom. Let us know what you have in mind, and we can point you in the right direction.

Improve the documentation

Chances are, if you asked (or answered) a question on the community forum, then it is a sign that the documentation could be improved. Moreover, since it is your question, you are probably the best-placed person to improve it.

The docs are written in Markdown and are built using Documenter.jl. You can find the source of all the docs here.

If your change is small (like fixing typos, or one or two sentence corrections), the easiest way to do this is via GitHub's online editor. (GitHub has help on how to do this.)

If your change is larger, or touches multiple files, you will need to make the change locally and then use Git to submit a pull request. (See Contribute code to JuMP below for more on this.)

Tip

If you need any help, come join the developer chatroom and we will walk you through the process.

File a bug report

Another way to contribute to JuMP is to file bug reports.

Make sure you read the info in the box where you write the body of the issue before posting. You can also find a copy of that info here.

Tip

If you're unsure whether you have a real bug, post on the community forum first. Someone will either help you fix the problem, or let you know the most appropriate place to open a bug report.

Contribute code to JuMP

Finally, you can also contribute code to JuMP.

Warning

If you do not have experience with Git, GitHub, and Julia development, the first steps can be a little daunting. However, there are lots of tutorials available online, including these for:

If you need any help, come join the developer chatroom and we will walk you through the process.

Once you are familiar with Git and GitHub, the workflow for contributing code to JuMP is similar to the following:

Step 1: decide what to work on

The first step is to find an open issue (or open a new one) for the problem you want to solve. Then, before spending too much time on it, discuss what you are planning to do in the issue to see if other contributors are fine with your proposed changes. Getting feedback early can improve code quality, and avoid time spent writing code that does not get merged into JuMP.

Tip

At this point, remember to be patient and polite; you may get a lot of comments on your issue. However, do not be afraid. Comments mean that people are willing to help you improve the code that you are contributing to JuMP.

Step 2: fork JuMP

Go to https://github.com/jump-dev/JuMP.jl and click the "Fork" button in the top-right corner. This will create a copy of JuMP under your GitHub account.

Step 3: install JuMP locally

Open Julia and run:

] dev JuMP

This will download the JuMP Git repository to ~/.julia/dev/JuMP. If you're on Windows, this will be C:\\Users\\<my_name>\\.julia\\dev\\JuMP.

Warning

] command means "first type ] to enter the Julia pkg mode, then type the rest. Don't copy-paste the code directly.

Step 4: checkout a new branch

Note

In the following, replace any instance of GITHUB_ACCOUNT with your GitHub user name.

The next step is to checkout a development branch. In a terminal (or command prompt on Windows), run:

$ cd ~/.julia/dev/JuMP
+

How to contribute to JuMP

Welcome, this document explains some ways you can contribute to JuMP.

Code of Conduct

This project and everyone participating in it is governed by the JuMP Code of Conduct. By participating, you are expected to uphold this code.

Join the community forum

First up, join the community forum.

The forum is a good place to ask questions about how to use JuMP. You can also use the forum to discuss possible feature requests and bugs before raising a GitHub issue (more on this below).

Aside from asking questions, the easiest way you can contribute to JuMP is to help answer questions on the forum.

Join the developer chatroom

If you're interested in contributing code to JuMP, the next place to join is the developer chatroom. Let us know what you have in mind, and we can point you in the right direction.

Improve the documentation

Chances are, if you asked (or answered) a question on the community forum, then it is a sign that the documentation could be improved. Moreover, since it is your question, you are probably the best-placed person to improve it.

The docs are written in Markdown and are built using Documenter.jl. You can find the source of all the docs here.

If your change is small (like fixing typos, or one or two sentence corrections), the easiest way to do this is via GitHub's online editor. (GitHub has help on how to do this.)

If your change is larger, or touches multiple files, you will need to make the change locally and then use Git to submit a pull request. (See Contribute code to JuMP below for more on this.)

Tip

If you need any help, come join the developer chatroom and we will walk you through the process.

File a bug report

Another way to contribute to JuMP is to file bug reports.

Make sure you read the info in the box where you write the body of the issue before posting. You can also find a copy of that info here.

Tip

If you're unsure whether you have a real bug, post on the community forum first. Someone will either help you fix the problem, or let you know the most appropriate place to open a bug report.

Contribute code to JuMP

Finally, you can also contribute code to JuMP.

Warning

If you do not have experience with Git, GitHub, and Julia development, the first steps can be a little daunting. However, there are lots of tutorials available online, including these for:

If you need any help, come join the developer chatroom and we will walk you through the process.

Once you are familiar with Git and GitHub, the workflow for contributing code to JuMP is similar to the following:

Step 1: decide what to work on

The first step is to find an open issue (or open a new one) for the problem you want to solve. Then, before spending too much time on it, discuss what you are planning to do in the issue to see if other contributors are fine with your proposed changes. Getting feedback early can improve code quality, and avoid time spent writing code that does not get merged into JuMP.

Tip

At this point, remember to be patient and polite; you may get a lot of comments on your issue. However, do not be afraid. Comments mean that people are willing to help you improve the code that you are contributing to JuMP.

Step 2: fork JuMP

Go to https://github.com/jump-dev/JuMP.jl and click the "Fork" button in the top-right corner. This will create a copy of JuMP under your GitHub account.

Step 3: install JuMP locally

Open Julia and run:

] dev JuMP

This will download the JuMP Git repository to ~/.julia/dev/JuMP. If you're on Windows, this will be C:\\Users\\<my_name>\\.julia\\dev\\JuMP.

Warning

] command means "first type ] to enter the Julia pkg mode, then type the rest. Don't copy-paste the code directly.

Step 4: checkout a new branch

Note

In the following, replace any instance of GITHUB_ACCOUNT with your GitHub user name.

The next step is to checkout a development branch. In a terminal (or command prompt on Windows), run:

$ cd ~/.julia/dev/JuMP
 
 $ git remote add GITHUB_ACCOUNT https://github.com/GITHUB_ACCOUNT/JuMP.jl.git
 
@@ -25,4 +25,4 @@
 
 $ git checkout master
 
-$ git pull
Note

If you have suggestions to improve this guide, please make a pull request. It's particularly helpful if you do this after your first pull request because you'll know all the parts that could be explained better.

+$ git pull
Note

If you have suggestions to improve this guide, please make a pull request. It's particularly helpful if you do this after your first pull request because you'll know all the parts that could be explained better.

diff --git a/dev/developers/custom_solver_binaries/index.html b/dev/developers/custom_solver_binaries/index.html index 6360c963328..60d8edc71df 100644 --- a/dev/developers/custom_solver_binaries/index.html +++ b/dev/developers/custom_solver_binaries/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

How to use a custom binary

Many solvers are not written in Julia, but instead in languages like C or C++. JuMP interacts with these solvers through binary dependencies.

For many open-source solvers, we automatically install the appropriate binary when you run Pkg.add("Solver"). For example, Pkg.add("ECOS") will also install the ECOS binary.

This page explains how this installation works, and how you can use a custom binary.

Compat

These instructions require Julia 1.6 or later.

Background

Each solver that JuMP supports is structured as a Julia package. For example, the interface for the ECOS solver is provided by the ECOS.jl package.

Tip

This page uses the example of ECOS.jl because it is simple to compile. Other solvers follow similar conventions. For example, the interface to the Clp solver is provided by Clp.jl.

The ECOS.jl package provides an interface between the C API of ECOS and MathOptInterface. However, it does not handle the installation of the solver binary; that is the job for a JLL package.

A JLL is a Julia package that wraps a pre-compiled binary. Binaries are built using Yggdrasil (for example, ECOS) and hosted in the JuliaBinaryWrappers GitHub repository (for example, ECOS_jll.jl).

JLL packages contain little code. Their only job is to dlopen a dynamic library, along with any dependencies.

JLL packages manage their binary dependencies using Julia's artifact system. Each JLL package has an Artifacts.toml file which describes where to find each binary artifact for each different platform that it might be installed on. Here is the Artifacts.toml file for ECOS_jll.jl.

The binaries installed by the JLL package should be sufficient for most users. In rare cases, however, you may require a custom binary. The two main reasons to use a custom binary are:

  • You want a binary with custom compilation settings (for example, debugging)
  • You want a binary with a set of dependencies that are not available on Yggdrasil (for example, a commercial solver like Gurobi or CPLEX).

The following sections explain how to replace the binaries provided by a JLL package with the custom ones you have compiled. As a reminder, we use ECOS as an example for simplicity, but the steps are the same for other solvers.

Explore the JLL you want to override

The first step is to explore the structure and filenames of the JLL package we want to override.

Find the location of the files using .artifact_dir:

julia> using ECOS_jll
+

How to use a custom binary

Many solvers are not written in Julia, but instead in languages like C or C++. JuMP interacts with these solvers through binary dependencies.

For many open-source solvers, we automatically install the appropriate binary when you run Pkg.add("Solver"). For example, Pkg.add("ECOS") will also install the ECOS binary.

This page explains how this installation works, and how you can use a custom binary.

Compat

These instructions require Julia 1.6 or later.

Background

Each solver that JuMP supports is structured as a Julia package. For example, the interface for the ECOS solver is provided by the ECOS.jl package.

Tip

This page uses the example of ECOS.jl because it is simple to compile. Other solvers follow similar conventions. For example, the interface to the Clp solver is provided by Clp.jl.

The ECOS.jl package provides an interface between the C API of ECOS and MathOptInterface. However, it does not handle the installation of the solver binary; that is the job for a JLL package.

A JLL is a Julia package that wraps a pre-compiled binary. Binaries are built using Yggdrasil (for example, ECOS) and hosted in the JuliaBinaryWrappers GitHub repository (for example, ECOS_jll.jl).

JLL packages contain little code. Their only job is to dlopen a dynamic library, along with any dependencies.

JLL packages manage their binary dependencies using Julia's artifact system. Each JLL package has an Artifacts.toml file which describes where to find each binary artifact for each different platform that it might be installed on. Here is the Artifacts.toml file for ECOS_jll.jl.

The binaries installed by the JLL package should be sufficient for most users. In rare cases, however, you may require a custom binary. The two main reasons to use a custom binary are:

  • You want a binary with custom compilation settings (for example, debugging)
  • You want a binary with a set of dependencies that are not available on Yggdrasil (for example, a commercial solver like Gurobi or CPLEX).

The following sections explain how to replace the binaries provided by a JLL package with the custom ones you have compiled. As a reminder, we use ECOS as an example for simplicity, but the steps are the same for other solvers.

Explore the JLL you want to override

The first step is to explore the structure and filenames of the JLL package we want to override.

Find the location of the files using .artifact_dir:

julia> using ECOS_jll
 
 julia> ECOS_jll.artifact_dir
 "/Users/oscar/.julia/artifacts/2addb75332eff5a1657b46bb6bf30d2410bc7ecf"
Tip

This path may be different on other machines.

Here is what it contains:

julia> readdir(ECOS_jll.artifact_dir)
@@ -90,4 +90,4 @@
 libCbc_path = "/usr/local/Cellar/cbc/2.10.5/lib/libCbc.3.10.5"
 libOsiCbc_path = "/usr/local/Cellar/cbc/2.10.5/lib/libOsiCbc.3.10.5"
 libcbcsolver_path = "/usr/local/Cellar/cbc/2.10.5/lib/libCbcSolver.3.10.5"
Info

Note that capitalization matters, so libcbcsolver_path corresponds to libCbcSolver.3.10.5.

Override entire artifact

To use the homebrew install as our custom binary we add the following to ~/.julia/artifacts/Overrides.toml:

# Override for Cbc_jll
-e481bc81db5e229ba1f52b2b4bd57484204b1b06 = "/usr/local/Cellar/cbc/2.10.5"
+e481bc81db5e229ba1f52b2b4bd57484204b1b06 = "/usr/local/Cellar/cbc/2.10.5"
diff --git a/dev/developers/extensions/index.html b/dev/developers/extensions/index.html index 5f2723f0fab..664fe711def 100644 --- a/dev/developers/extensions/index.html +++ b/dev/developers/extensions/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Extensions

JuMP provides a variety of ways to extend the basic modeling functionality.

Tip

This documentation in this section is still a work-in-progress. The best place to look for ideas and help when writing a new JuMP extension are existing JuMP extensions. Examples include:

Compatibility

When writing JuMP extensions, you should carefully consider the compatibility guarantees that JuMP makes. In particular:

  • All functions, structs, and constants which do not begin with an underscore (_) are public. These are always safe to use, and they should all have corresponding documentation.
  • All identifiers beginning with an underscore (_) are private. These are not safe to use, because they may break in any JuMP release, including patch releases.
  • Unless explicitly mentioned in the documentation, all fields of a struct are private. These are not safe to use, because they may break in any JuMP release, including patch releases. An example of a field which is safe to use is the model.ext extension dictionary, which is documented in The extension dictionary.

In general, we strongly encourage you to use only the public API of JuMP. If you are missing a feature, please open a GitHub issue.

However, if you do use the private API (for example, because your feature request has not been implemented yet), then you must carefully restrict the versions of JuMP that your package is compatible with in the Project.toml file. The easiest way to do this is via the hyphen specifiers. For example, if your package supports all JuMP versions between v1.0.0 and v1.1.1, do:

JuMP = "1.0.0 - 1.1.1"

Then, whenever JuMP releases a new version, you should check if your package is still compatible and update the bound accordingly.

Define a new set

To define a new set for JuMP, subtype MOI.AbstractScalarSet or MOI.AbstractVectorSet and implement Base.copy for the set.

julia> struct NewMOIVectorSet <: MOI.AbstractVectorSet
+

Extensions

JuMP provides a variety of ways to extend the basic modeling functionality.

Tip

This documentation in this section is still a work-in-progress. The best place to look for ideas and help when writing a new JuMP extension are existing JuMP extensions. Examples include:

Compatibility

When writing JuMP extensions, you should carefully consider the compatibility guarantees that JuMP makes. In particular:

  • All functions, structs, and constants which do not begin with an underscore (_) are public. These are always safe to use, and they should all have corresponding documentation.
  • All identifiers beginning with an underscore (_) are private. These are not safe to use, because they may break in any JuMP release, including patch releases.
  • Unless explicitly mentioned in the documentation, all fields of a struct are private. These are not safe to use, because they may break in any JuMP release, including patch releases. An example of a field which is safe to use is the model.ext extension dictionary, which is documented in The extension dictionary.

In general, we strongly encourage you to use only the public API of JuMP. If you are missing a feature, please open a GitHub issue.

However, if you do use the private API (for example, because your feature request has not been implemented yet), then you must carefully restrict the versions of JuMP that your package is compatible with in the Project.toml file. The easiest way to do this is via the hyphen specifiers. For example, if your package supports all JuMP versions between v1.0.0 and v1.1.1, do:

JuMP = "1.0.0 - 1.1.1"

Then, whenever JuMP releases a new version, you should check if your package is still compatible and update the bound accordingly.

Define a new set

To define a new set for JuMP, subtype MOI.AbstractScalarSet or MOI.AbstractVectorSet and implement Base.copy for the set.

julia> struct NewMOIVectorSet <: MOI.AbstractVectorSet
            dimension::Int
        end
 
@@ -305,4 +305,4 @@
         _function_barrier(names, model, F, S)
     end
     return names
-end
Note

It is important to explicitly type the F and S arguments. If you leave them untyped, for example, function _function_barrier(names, model, F, S), Julia will not specialize the function calls and performance will not be improved.

+end
Note

It is important to explicitly type the F and S arguments. If you leave them untyped, for example, function _function_barrier(names, model, F, S), Julia will not specialize the function calls and performance will not be improved.

diff --git a/dev/developers/roadmap/index.html b/dev/developers/roadmap/index.html index 4dad0d3cfb4..5aff3e7abf2 100644 --- a/dev/developers/roadmap/index.html +++ b/dev/developers/roadmap/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Development roadmap

The JuMP developers have compiled this roadmap document to share their plans and goals with the JuMP community. Contributions to roadmap issues are especially invited.

Most of these issues will require changes to both JuMP and MathOptInterface, and are non-trivial in their implementation. They are in no particular order, but represent broad themes that we see as areas in which JuMP could be improved.

  • Support nonlinear expressions with vector-valued inputs and outputs. There are a few related components:
    • Representing terms like log(det(X)) as necessary for Convex.jl
    • Automatic differentiation of terms with vector inputs and outputs
    • User-defined functions with vector–as opposed to scalar–inputs, which is particularly useful for optimal control problems
    • User-defined functions with vector outputs, avoiding the need for User-defined operators with vector outputs
  • Add support for modeling with SI units. The UnitJuMP.jl extension is a good proof of concept for what this would look like. We want to make units a first-class concept in JuMP. See #1350 for more details.

Completed

+

Development roadmap

The JuMP developers have compiled this roadmap document to share their plans and goals with the JuMP community. Contributions to roadmap issues are especially invited.

Most of these issues will require changes to both JuMP and MathOptInterface, and are non-trivial in their implementation. They are in no particular order, but represent broad themes that we see as areas in which JuMP could be improved.

  • Support nonlinear expressions with vector-valued inputs and outputs. There are a few related components:
    • Representing terms like log(det(X)) as necessary for Convex.jl
    • Automatic differentiation of terms with vector inputs and outputs
    • User-defined functions with vector–as opposed to scalar–inputs, which is particularly useful for optimal control problems
    • User-defined functions with vector outputs, avoiding the need for User-defined operators with vector outputs
  • Add support for modeling with SI units. The UnitJuMP.jl extension is a good proof of concept for what this would look like. We want to make units a first-class concept in JuMP. See #1350 for more details.

Completed

diff --git a/dev/developers/style/index.html b/dev/developers/style/index.html index e3f2885c8b5..57fe8d90a6e 100644 --- a/dev/developers/style/index.html +++ b/dev/developers/style/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Style guide and design principles

Style guide

This section describes the coding style rules that apply to JuMP code and that we recommend for JuMP models and surrounding Julia code. The motivations for a style guide include:

  • conveying best practices for writing readable and maintainable code
  • reducing the amount of time spent on bike-shedding by establishing basic naming and formatting conventions
  • lowering the barrier for new contributors by codifying the existing practices (for example, you can be more confident your code will pass review if you follow the style guide)

In some cases, the JuMP style guide diverges from the Julia style guide. All such cases will be explicitly noted and justified.

The JuMP style guide adopts many recommendations from the Google style guides.

Info

The style guide is always a work in progress, and not all JuMP code follows the rules. When modifying JuMP, please fix the style violations of the surrounding code (that is, leave the code tidier than when you started). If large changes are needed, consider separating them into another PR.

JuliaFormatter

JuMP uses JuliaFormatter.jl as an auto-formatting tool.

We use the options contained in .JuliaFormatter.toml.

To format code, cd to the JuMP directory, then run:

] add JuliaFormatter@1
+

Style guide and design principles

Style guide

This section describes the coding style rules that apply to JuMP code and that we recommend for JuMP models and surrounding Julia code. The motivations for a style guide include:

  • conveying best practices for writing readable and maintainable code
  • reducing the amount of time spent on bike-shedding by establishing basic naming and formatting conventions
  • lowering the barrier for new contributors by codifying the existing practices (for example, you can be more confident your code will pass review if you follow the style guide)

In some cases, the JuMP style guide diverges from the Julia style guide. All such cases will be explicitly noted and justified.

The JuMP style guide adopts many recommendations from the Google style guides.

Info

The style guide is always a work in progress, and not all JuMP code follows the rules. When modifying JuMP, please fix the style violations of the surrounding code (that is, leave the code tidier than when you started). If large changes are needed, consider separating them into another PR.

JuliaFormatter

JuMP uses JuliaFormatter.jl as an auto-formatting tool.

We use the options contained in .JuliaFormatter.toml.

To format code, cd to the JuMP directory, then run:

] add JuliaFormatter@1
 using JuliaFormatter
 format("docs")
 format("src")
@@ -182,4 +182,4 @@
 
 end # module TestPkg
 
-TestPkg.runtests()

Break the tests into multiple files, with one module per file, so that subsets of the codebase can be tested by calling include with the relevant file.

+TestPkg.runtests()

Break the tests into multiple files, with one module per file, so that subsets of the codebase can be tested by calling include with the relevant file.

diff --git a/dev/extensions/DimensionalData/index.html b/dev/extensions/DimensionalData/index.html index 95df5b580d4..00b3105f790 100644 --- a/dev/extensions/DimensionalData/index.html +++ b/dev/extensions/DimensionalData/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

DimensionalData.jl

DimensionalData.jl provides tools and abstractions for working with rectangular arrays that have named dimensions.

Compat

Using the DimensionalData extension with JuMP requires Julia v1.9 or later.

The DimensionalData extension in JuMP lets you construct a DimensionalData.DimArray as an alternative to Containers.DenseAxisArray in the JuMP macros.

License

DimensionalData.jl is licensed under the MIT license.

Installation

Install DimensionalData using Pkg.add:

import Pkg
+

DimensionalData.jl

DimensionalData.jl provides tools and abstractions for working with rectangular arrays that have named dimensions.

Compat

Using the DimensionalData extension with JuMP requires Julia v1.9 or later.

The DimensionalData extension in JuMP lets you construct a DimensionalData.DimArray as an alternative to Containers.DenseAxisArray in the JuMP macros.

License

DimensionalData.jl is licensed under the MIT license.

Installation

Install DimensionalData using Pkg.add:

import Pkg
 Pkg.add("DimensionalData")

Use with JuMP

Activate the extension by loading both JuMP and DimensionalData:

julia> using JuMP, DimensionalData

Then, pass container = DimensionalData.DimArray in the @variable, @constraint, or @expression macros:

julia> model = Model();
 
 julia> @variable(
@@ -48,4 +48,4 @@
   ↓ j Categorical{String} ["a", "b"] ForwardOrdered
 └──────────────────────────────────────────────────────────────────────────────┘
  "a"  x[2,a] + x[3,a] + x[4,a] ≤ 1
- "b"  x[2,b] + x[3,b] + x[4,b] ≤ 1

Documentation

See the DimensionalData.jl documentation for more details on the syntax and features of DimensionalData.DimArray.

+ "b" x[2,b] + x[3,b] + x[4,b] ≤ 1

Documentation

See the DimensionalData.jl documentation for more details on the syntax and features of DimensionalData.DimArray.

diff --git a/dev/extensions/introduction/index.html b/dev/extensions/introduction/index.html index 960516d795f..b0c8a7ba746 100644 --- a/dev/extensions/introduction/index.html +++ b/dev/extensions/introduction/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Introduction

This section of the documentation contains brief documentation for some popular JuMP extensions. The list of extensions is not exhaustive, but instead is intended to help you discover popular JuMP extensions, and to give you an overview of the types of extensions that are possible to write with JuMP.

Affiliation

Packages beginning with jump-dev/ are developed and maintained by the JuMP developers.

Packages that do not begin with jump-dev/ are developed independently. The developers of these packages requested or consented to the inclusion of their README contents in the JuMP documentation for the benefit of users.

Adding new extensions

Written an extension? Add it to this section of the JuMP documentation by making a pull request to the docs/packages.toml file.

Weak dependencies

Some extensions listed in this section are implemented using the weak dependency feature added to Julia in v1.9. These extensions are activated if and only if you have JuMP and the other package loaded into your current scope with using or import.

Compat

Using a weak dependency requires Julia v1.9 or later.

+

Introduction

This section of the documentation contains brief documentation for some popular JuMP extensions. The list of extensions is not exhaustive, but instead is intended to help you discover popular JuMP extensions, and to give you an overview of the types of extensions that are possible to write with JuMP.

Affiliation

Packages beginning with jump-dev/ are developed and maintained by the JuMP developers.

Packages that do not begin with jump-dev/ are developed independently. The developers of these packages requested or consented to the inclusion of their README contents in the JuMP documentation for the benefit of users.

Adding new extensions

Written an extension? Add it to this section of the JuMP documentation by making a pull request to the docs/packages.toml file.

Weak dependencies

Some extensions listed in this section are implemented using the weak dependency feature added to Julia in v1.9. These extensions are activated if and only if you have JuMP and the other package loaded into your current scope with using or import.

Compat

Using a weak dependency requires Julia v1.9 or later.

diff --git a/dev/index.html b/dev/index.html index 9063eec0174..831c9d96b26 100644 --- a/dev/index.html +++ b/dev/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -
JuMP logo +
JuMP logo JuMP logo

Introduction

Welcome to the documentation for JuMP.

Note

This documentation is also available in PDF format: JuMP.pdf.

What is JuMP?

JuMP is a domain-specific modeling language for mathematical optimization embedded in Julia.

JuMP makes it easy to formulate and solve a range of problem classes, including linear programs, integer programs, conic programs, semidefinite programs, and constrained nonlinear programs. Here’s an example:

julia> using JuMP, Ipopt
 
 julia> function solve_constrained_least_squares_regression(A::Matrix, b::Vector)
@@ -32,4 +32,4 @@
     journal = {Mathematical Programming Computation},
     year = {2023},
     doi = {10.1007/s12532-023-00239-3}
-}

NumFOCUS

NumFOCUS logo

JuMP is a Sponsored Project of NumFOCUS, a 501(c)(3) nonprofit charity in the United States. NumFOCUS provides JuMP with fiscal, legal, and administrative support to help ensure the health and sustainability of the project. Visit numfocus.org for more information.

You can support JuMP by donating.

Donations to JuMP are managed by NumFOCUS. For donors in the United States, your gift is tax-deductible to the extent provided by law. As with any donation, you should consult with your tax adviser about your particular tax situation.

JuMP's largest expense is the annual JuMP-dev workshop. Donations will help us provide travel support for JuMP-dev attendees and take advantage of other opportunities that arise to support JuMP development.

License

JuMP is licensed under the MPL-2.0 software license. Consult the license and the Mozilla FAQ for more information. In addition, JuMP is typically used in conjunction with solver packages and extensions which have their own licences. Consult their package repositories for the specific licenses that apply.

+}

NumFOCUS

NumFOCUS logo

JuMP is a Sponsored Project of NumFOCUS, a 501(c)(3) nonprofit charity in the United States. NumFOCUS provides JuMP with fiscal, legal, and administrative support to help ensure the health and sustainability of the project. Visit numfocus.org for more information.

You can support JuMP by donating.

Donations to JuMP are managed by NumFOCUS. For donors in the United States, your gift is tax-deductible to the extent provided by law. As with any donation, you should consult with your tax adviser about your particular tax situation.

JuMP's largest expense is the annual JuMP-dev workshop. Donations will help us provide travel support for JuMP-dev attendees and take advantage of other opportunities that arise to support JuMP development.

License

JuMP is licensed under the MPL-2.0 software license. Consult the license and the Mozilla FAQ for more information. In addition, JuMP is typically used in conjunction with solver packages and extensions which have their own licences. Consult their package repositories for the specific licenses that apply.

diff --git a/dev/installation/index.html b/dev/installation/index.html index 50f9653eb63..2b94c639281 100644 --- a/dev/installation/index.html +++ b/dev/installation/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Installation Guide

This guide explains how to install Julia and JuMP. If you have installation troubles, read the Common installation issues section below.

Install Julia

JuMP is a package for Julia. To use JuMP, first download and install Julia.

Tip

If you are new to Julia, read our Getting started with Julia tutorial.

Choosing a version

You can install the "Current stable release" or the "Long-term support (LTS) release."

  • The "Current stable release" is the latest release of Julia. It has access to newer features, and is likely faster.
  • The "Long-term support release" is an older version of Julia that has continued to receive bug and security fixes. However, it may not have the latest features or performance improvements.

For most users, you should install the "Current stable release," and whenever Julia releases a new version of the current stable release, you should update your version of Julia. Note that any code you write on one version of the current stable release will continue to work on all subsequent releases.

For users in restricted software environments (for example, your enterprise IT controls what software you can install), you may be better off installing the long-term support release because you will not have to update Julia as frequently.

Install JuMP

JuMP is installed using the built-in Julia package manager. Launch Julia, and then enter the following at the julia> prompt:

julia> import Pkg
+

Installation Guide

This guide explains how to install Julia and JuMP. If you have installation troubles, read the Common installation issues section below.

Install Julia

JuMP is a package for Julia. To use JuMP, first download and install Julia.

Tip

If you are new to Julia, read our Getting started with Julia tutorial.

Choosing a version

You can install the "Current stable release" or the "Long-term support (LTS) release."

  • The "Current stable release" is the latest release of Julia. It has access to newer features, and is likely faster.
  • The "Long-term support release" is an older version of Julia that has continued to receive bug and security fixes. However, it may not have the latest features or performance improvements.

For most users, you should install the "Current stable release," and whenever Julia releases a new version of the current stable release, you should update your version of Julia. Note that any code you write on one version of the current stable release will continue to work on all subsequent releases.

For users in restricted software environments (for example, your enterprise IT controls what software you can install), you may be better off installing the long-term support release because you will not have to update Julia as frequently.

Install JuMP

JuMP is installed using the built-in Julia package manager. Launch Julia, and then enter the following at the julia> prompt:

julia> import Pkg
 
 julia> Pkg.add("JuMP")
Tip

We recommend you create a Pkg environment for each project you use JuMP for, instead of adding lots of packages to the global environment. The Pkg manager documentation has more information on this topic.

When we release a new version of JuMP, you can update with:

julia> import Pkg
 
@@ -28,4 +28,4 @@
   [4076af6c] ↓ JuMP v0.21.5 ⇒ v0.18.6
   [707a9f91] + JuMPeR v0.6.0
 Updating `~/jump_example/Manifest.toml`
-  ... lines omitted ...

JuMPeR gets added at version 0.6.0 (+ JuMPeR v0.6.0), but JuMP gets downgraded from 0.21.5 to 0.18.6 (↓ JuMP v0.21.5 ⇒ v0.18.6)! The reason for this is that JuMPeR doesn't support a version of JuMP newer than 0.18.6.

Tip

Pay careful attention to the output of the package manager when adding new packages, especially when you see a package being downgraded.

+ ... lines omitted ...

JuMPeR gets added at version 0.6.0 (+ JuMPeR v0.6.0), but JuMP gets downgraded from 0.21.5 to 0.18.6 (↓ JuMP v0.21.5 ⇒ v0.18.6)! The reason for this is that JuMPeR doesn't support a version of JuMP newer than 0.18.6.

Tip

Pay careful attention to the output of the package manager when adding new packages, especially when you see a package being downgraded.

diff --git a/dev/manual/callbacks/index.html b/dev/manual/callbacks/index.html index baac2c793b4..1a3409afb28 100644 --- a/dev/manual/callbacks/index.html +++ b/dev/manual/callbacks/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Solver-independent Callbacks

Many mixed-integer (linear, conic, and nonlinear) programming solvers offer the ability to modify the solve process. Examples include changing branching decisions in branch-and-bound, adding custom cutting planes, providing custom heuristics to find feasible solutions, or implementing on-demand separators to add new constraints only when they are violated by the current solution (also known as lazy constraints).

While historically this functionality has been limited to solver-specific interfaces, JuMP provides solver-independent support for three types of callbacks:

  1. lazy constraints
  2. user-cuts
  3. heuristic solutions

Available solvers

Solver-independent callback support is limited to a few solvers. This includes CPLEX, GLPK, Gurobi, Xpress, and SCIP (SCIP does not support lazy constraints).

Warning

While JuMP provides a solver-independent way of accessing callbacks, you should not assume that you will see identical behavior when running the same code on different solvers. For example, some solvers may ignore user-cuts for various reasons, while other solvers may add every user-cut. Read the underlying solver's callback documentation to understand details specific to each solver.

Tip

This page discusses solver-independent callbacks. However, each solver listed above also provides a solver-dependent callback to provide access to the full range of solver-specific features. Consult the solver's README for an example of how to use the solver-dependent callback. This will require you to understand the C interface of the solver.

Things you can and cannot do during solver-independent callbacks

There is a limited range of things you can do during a callback. Only use the functions and macros explicitly stated in this page of the documentation, or in the Callbacks tutorial.

Using any other part of the JuMP API (for example, adding a constraint with @constraint or modifying a variable bound with set_lower_bound) is undefined behavior, and your solver may throw an error, return an incorrect solution, or result in a segfault that aborts Julia.

In each of the three solver-independent callbacks, there are two things you may query:

If you need to query any other information, use a solver-dependent callback instead. Each solver supporting a solver-dependent callback has information on how to use it in the README of their GitHub repository.

If you want to modify the problem in a callback, you must use a lazy constraint.

Warning

You can only set each callback once. Calling set twice will over-write the earlier callback. In addition, if you use a solver-independent callback, you cannot set a solver-dependent callback.

Lazy constraints

Lazy constraints are useful when the full set of constraints is too large to explicitly include in the initial formulation. When a MIP solver reaches a new solution, for example with a heuristic or by solving a problem at a node in the branch-and-bound tree, it will give the user the chance to provide constraints that would make the current solution infeasible. For some more information about lazy constraints, see this blog post by Paul Rubin.

A lazy constraint callback can be set using the following syntax:

julia> import GLPK
+

Solver-independent Callbacks

Many mixed-integer (linear, conic, and nonlinear) programming solvers offer the ability to modify the solve process. Examples include changing branching decisions in branch-and-bound, adding custom cutting planes, providing custom heuristics to find feasible solutions, or implementing on-demand separators to add new constraints only when they are violated by the current solution (also known as lazy constraints).

While historically this functionality has been limited to solver-specific interfaces, JuMP provides solver-independent support for three types of callbacks:

  1. lazy constraints
  2. user-cuts
  3. heuristic solutions

Available solvers

Solver-independent callback support is limited to a few solvers. This includes CPLEX, GLPK, Gurobi, Xpress, and SCIP (SCIP does not support lazy constraints).

Warning

While JuMP provides a solver-independent way of accessing callbacks, you should not assume that you will see identical behavior when running the same code on different solvers. For example, some solvers may ignore user-cuts for various reasons, while other solvers may add every user-cut. Read the underlying solver's callback documentation to understand details specific to each solver.

Tip

This page discusses solver-independent callbacks. However, each solver listed above also provides a solver-dependent callback to provide access to the full range of solver-specific features. Consult the solver's README for an example of how to use the solver-dependent callback. This will require you to understand the C interface of the solver.

Things you can and cannot do during solver-independent callbacks

There is a limited range of things you can do during a callback. Only use the functions and macros explicitly stated in this page of the documentation, or in the Callbacks tutorial.

Using any other part of the JuMP API (for example, adding a constraint with @constraint or modifying a variable bound with set_lower_bound) is undefined behavior, and your solver may throw an error, return an incorrect solution, or result in a segfault that aborts Julia.

In each of the three solver-independent callbacks, there are two things you may query:

If you need to query any other information, use a solver-dependent callback instead. Each solver supporting a solver-dependent callback has information on how to use it in the README of their GitHub repository.

If you want to modify the problem in a callback, you must use a lazy constraint.

Warning

You can only set each callback once. Calling set twice will over-write the earlier callback. In addition, if you use a solver-independent callback, you cannot set a solver-dependent callback.

Lazy constraints

Lazy constraints are useful when the full set of constraints is too large to explicitly include in the initial formulation. When a MIP solver reaches a new solution, for example with a heuristic or by solving a problem at a node in the branch-and-bound tree, it will give the user the chance to provide constraints that would make the current solution infeasible. For some more information about lazy constraints, see this blog post by Paul Rubin.

A lazy constraint callback can be set using the following syntax:

julia> import GLPK
 
 julia> model = Model(GLPK.Optimizer);
 
@@ -84,4 +84,4 @@
        end
 my_callback_function (generic function with 1 method)
 
-julia> set_attribute(model, MOI.HeuristicCallback(), my_callback_function)

The third argument to submit is a vector of JuMP variables, and the fourth argument is a vector of values corresponding to each variable.

MOI.submit returns an enum that depends on whether the solver accepted the solution. The possible return codes are:

  • MOI.HEURISTIC_SOLUTION_ACCEPTED
  • MOI.HEURISTIC_SOLUTION_REJECTED
  • MOI.HEURISTIC_SOLUTION_UNKNOWN
Warning

Some solvers may accept partial solutions. Others require a feasible integer solution for every variable. If in doubt, provide a complete solution.

Info

The heuristic solution callback may be called at fractional nodes in the branch-and-bound tree. There is no guarantee that the callback is called at every fractional primal solution.

+julia> set_attribute(model, MOI.HeuristicCallback(), my_callback_function)

The third argument to submit is a vector of JuMP variables, and the fourth argument is a vector of values corresponding to each variable.

MOI.submit returns an enum that depends on whether the solver accepted the solution. The possible return codes are:

  • MOI.HEURISTIC_SOLUTION_ACCEPTED
  • MOI.HEURISTIC_SOLUTION_REJECTED
  • MOI.HEURISTIC_SOLUTION_UNKNOWN
Warning

Some solvers may accept partial solutions. Others require a feasible integer solution for every variable. If in doubt, provide a complete solution.

Info

The heuristic solution callback may be called at fractional nodes in the branch-and-bound tree. There is no guarantee that the callback is called at every fractional primal solution.

diff --git a/dev/manual/complex/index.html b/dev/manual/complex/index.html index f1f96685153..def99159dfc 100644 --- a/dev/manual/complex/index.html +++ b/dev/manual/complex/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Complex number support

This page explains the complex-valued variables and constraints that JuMP supports. For a worked-example using these features, read the Example: quantum state discrimination tutorial.

Complex-valued variables

Create a complex-valued variable using ComplexPlane:

julia> model = Model();
+

Complex number support

This page explains the complex-valued variables and constraints that JuMP supports. For a worked-example using these features, read the Example: quantum state discrimination tutorial.

Complex-valued variables

Create a complex-valued variable using ComplexPlane:

julia> model = Model();
 
 julia> @variable(model, x in ComplexPlane())
 real(x) + imag(x) im

Note that x is not a VariableRef; instead, it is an affine expression with Complex{Float64}-valued coefficients:

julia> typeof(x)
@@ -197,4 +197,4 @@
 
 julia> @constraint(model, H in HermitianPSDCone())
 [x[1]  im
- -im   -x[2]] ∈ HermitianPSDCone()
Note

The matrix H in H in HermitianPSDCone() must be a LinearAlgebra.Hermitian matrix type. A build_constraint error will be thrown if the matrix is a different matrix type.

+ -im -x[2]] ∈ HermitianPSDCone()
Note

The matrix H in H in HermitianPSDCone() must be a LinearAlgebra.Hermitian matrix type. A build_constraint error will be thrown if the matrix is a different matrix type.

diff --git a/dev/manual/constraints/index.html b/dev/manual/constraints/index.html index d94cd12ee65..fa919c05df0 100644 --- a/dev/manual/constraints/index.html +++ b/dev/manual/constraints/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Constraints

JuMP is based on the MathOptInterface (MOI) API. Because of this, JuMP uses the following standard form to represent problems:

\[\begin{align} +

Constraints

JuMP is based on the MathOptInterface (MOI) API. Because of this, JuMP uses the following standard form to represent problems:

\[\begin{align} & \min_{x \in \mathbb{R}^n} & f_0(x) \\ & \;\;\text{s.t.} & f_i(x) & \in \mathcal{S}_i & i = 1 \ldots m @@ -801,4 +801,4 @@ (x[1] == x[2]) - 0.0 = 0 julia> @constraint(model, x[1] == x[2] := rhs) -x[1] == x[2] = false

+x[1] == x[2] = false
diff --git a/dev/manual/containers/index.html b/dev/manual/containers/index.html index 1868337863d..54889f34508 100644 --- a/dev/manual/containers/index.html +++ b/dev/manual/containers/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Containers

JuMP provides specialized containers similar to AxisArrays that enable multi-dimensional arrays with non-integer indices.

These containers are created automatically by JuMP's macros. Each macro has the same basic syntax:

@macroname(model, name[key1=index1, index2; optional_condition], other stuff)

The containers are generated by the name[key1=index1, index2; optional_condition] syntax. Everything else is specific to the particular macro.

Containers can be named, for example, name[key=index], or unnamed, for example, [key=index]. We call unnamed containers anonymous.

We call the bits inside the square brackets and before the ; the index sets. The index sets can be named, for example, [i = 1:4], or they can be unnamed, for example, [1:4].

We call the bit inside the square brackets and after the ; the condition. Conditions are optional.

In addition to the standard JuMP macros like @variable and @constraint, which construct containers of variables and constraints respectively, you can use Containers.@container to construct containers with arbitrary elements.

We will use this macro to explain the three types of containers that are natively supported by JuMP: Array, Containers.DenseAxisArray, and Containers.SparseAxisArray.

Array

An Array is created when the index sets are rectangular and the index sets are of the form 1:n.

julia> Containers.@container(x[i = 1:2, j = 1:3], (i, j))
+

Containers

JuMP provides specialized containers similar to AxisArrays that enable multi-dimensional arrays with non-integer indices.

These containers are created automatically by JuMP's macros. Each macro has the same basic syntax:

@macroname(model, name[key1=index1, index2; optional_condition], other stuff)

The containers are generated by the name[key1=index1, index2; optional_condition] syntax. Everything else is specific to the particular macro.

Containers can be named, for example, name[key=index], or unnamed, for example, [key=index]. We call unnamed containers anonymous.

We call the bits inside the square brackets and before the ; the index sets. The index sets can be named, for example, [i = 1:4], or they can be unnamed, for example, [1:4].

We call the bit inside the square brackets and after the ; the condition. Conditions are optional.

In addition to the standard JuMP macros like @variable and @constraint, which construct containers of variables and constraints respectively, you can use Containers.@container to construct containers with arbitrary elements.

We will use this macro to explain the three types of containers that are natively supported by JuMP: Array, Containers.DenseAxisArray, and Containers.SparseAxisArray.

Array

An Array is created when the index sets are rectangular and the index sets are of the form 1:n.

julia> Containers.@container(x[i = 1:2, j = 1:3], (i, j))
 2×3 Matrix{Tuple{Int64, Int64}}:
  (1, 1)  (1, 2)  (1, 3)
  (2, 1)  (2, 2)  (2, 3)

The result is a normal Julia Array, so you can do all the usual things.

Slicing

Arrays can be sliced

julia> x[:, 1]
@@ -232,4 +232,4 @@
 julia> Containers.@container([i = 1:2, j = 1:4; condition(i, j)], i + j)
 JuMP.Containers.SparseAxisArray{Int64, 2, Tuple{Int64, Int64}} with 2 entries:
   [1, 2]  =  3
-  [1, 4]  =  5
+ [1, 4] = 5
diff --git a/dev/manual/expressions/index.html b/dev/manual/expressions/index.html index 61672cebead..16c8fb2da33 100644 --- a/dev/manual/expressions/index.html +++ b/dev/manual/expressions/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Expressions

JuMP has three types of expressions: affine, quadratic, and nonlinear. These expressions can be inserted into constraints or into the objective. This is particularly useful if an expression is used in multiple places in the model.

Affine expressions

There are four ways of constructing an affine expression in JuMP: with the @expression macro, with operator overloading, with the AffExpr constructor, and with add_to_expression!.

Macros

The recommended way to create an affine expression is via the @expression macro.

julia> model = Model();
+

Expressions

JuMP has three types of expressions: affine, quadratic, and nonlinear. These expressions can be inserted into constraints or into the objective. This is particularly useful if an expression is used in multiple places in the model.

Affine expressions

There are four ways of constructing an affine expression in JuMP: with the @expression macro, with operator overloading, with the AffExpr constructor, and with add_to_expression!.

Macros

The recommended way to create an affine expression is via the @expression macro.

julia> model = Model();
 
 julia> @variable(model, x)
 x
@@ -227,4 +227,4 @@
 julia> x
 2-element Vector{AffExpr}:
  1.1
- 0

Note that for large expressions this will be slower due to the allocation of additional temporary objects.

+ 0

Note that for large expressions this will be slower due to the allocation of additional temporary objects.

diff --git a/dev/manual/models/index.html b/dev/manual/models/index.html index 5d3a8f07be3..ef02eaa06ae 100644 --- a/dev/manual/models/index.html +++ b/dev/manual/models/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Models

JuMP models are the fundamental building block that we use to construct optimization problems. They hold things like the variables and constraints, as well as which solver to use and even solution information.

Info

JuMP uses "optimizer" as a synonym for "solver." Our convention is to use "solver" to refer to the underlying software, and use "optimizer" to refer to the Julia object that wraps the solver. For example, HiGHS is a solver, and HiGHS.Optimizer is an optimizer.

Tip

See Supported solvers for a list of available solvers.

Create a model

Create a model by passing an optimizer to Model:

julia> model = Model(HiGHS.Optimizer)
+

Models

JuMP models are the fundamental building block that we use to construct optimization problems. They hold things like the variables and constraints, as well as which solver to use and even solution information.

Info

JuMP uses "optimizer" as a synonym for "solver." Our convention is to use "solver" to refer to the underlying software, and use "optimizer" to refer to the Julia object that wraps the solver. For example, HiGHS is a solver, and HiGHS.Optimizer is an optimizer.

Tip

See Supported solvers for a list of available solvers.

Create a model

Create a model by passing an optimizer to Model:

julia> model = Model(HiGHS.Optimizer)
 A JuMP Model
 ├ solver: HiGHS
 ├ objective_sense: FEASIBILITY_SENSE
@@ -64,7 +64,7 @@
 julia> get_attribute(solver, "output_flag")
 false
 
-julia> model = Model(solver);

Changing the number types

By default, the coefficients of affine and quadratic expressions are numbers of type either Float64 or Complex{Float64} (see Complex number support).

The type Float64 can be changed using the GenericModel constructor:

julia> model = GenericModel{Rational{BigInt}}();
+julia> model = Model(solver);

Changing the number types

By default, the coefficients of affine and quadratic expressions are numbers of type either Float64 or Complex{Float64} (see Complex number support).

The type Float64 can be changed using the GenericModel constructor:

julia> model = GenericModel{Rational{BigInt}}();
 
 julia> @variable(model, x)
 x
@@ -313,4 +313,4 @@
 If you expected the solver to support your problem, you may have an error in your formulation. Otherwise, consider using a different solver.
 
 The list of available solvers, along with the problem types they support, is available at https://jump.dev/JuMP.jl/stable/installation/#Supported-solvers.
-Stacktrace:
Warning

Another downside of direct mode is that the behavior of querying solution information after modifying the problem is solver-specific. This can lead to errors, or the solver silently returning an incorrect value. See OptimizeNotCalled errors for more information.

+Stacktrace:
Warning

Another downside of direct mode is that the behavior of querying solution information after modifying the problem is solver-specific. This can lead to errors, or the solver silently returning an incorrect value. See OptimizeNotCalled errors for more information.

diff --git a/dev/manual/nlp/index.html b/dev/manual/nlp/index.html index f073986b57b..3cf193a384c 100644 --- a/dev/manual/nlp/index.html +++ b/dev/manual/nlp/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Nonlinear Modeling (Legacy)

Warning

This page describes the legacy nonlinear interface to JuMP. It has a number of quirks and limitations that prompted the development of a new nonlinear interface. The new interface is documented at Nonlinear Modeling. This legacy interface will remain for all future v1.X releases of JuMP. The two nonlinear interfaces cannot be combined.

JuMP has support for general smooth nonlinear (convex and nonconvex) optimization problems. JuMP is able to provide exact, sparse second-order derivatives to solvers. This information can improve solver accuracy and performance.

There are three main changes to solve nonlinear programs in JuMP.

Info

There are some restrictions on what syntax you can use in the @NLxxx macros. Make sure to read the Syntax notes.

Set a nonlinear objective

Use @NLobjective to set a nonlinear objective.

julia> model = Model();
+

Nonlinear Modeling (Legacy)

Warning

This page describes the legacy nonlinear interface to JuMP. It has a number of quirks and limitations that prompted the development of a new nonlinear interface. The new interface is documented at Nonlinear Modeling. This legacy interface will remain for all future v1.X releases of JuMP. The two nonlinear interfaces cannot be combined.

JuMP has support for general smooth nonlinear (convex and nonconvex) optimization problems. JuMP is able to provide exact, sparse second-order derivatives to solvers. This information can improve solver accuracy and performance.

There are three main changes to solve nonlinear programs in JuMP.

Info

There are some restrictions on what syntax you can use in the @NLxxx macros. Make sure to read the Syntax notes.

Set a nonlinear objective

Use @NLobjective to set a nonlinear objective.

julia> model = Model();
 
 julia> @variable(model, x[1:2]);
 
@@ -344,4 +344,4 @@
  f1(x[1]) - 1.0 ≤ 0
  f2(x[1], x[2]) - 1.0 ≤ 0
  f3(x[2], x[3], x[4]) - 1.0 ≤ 0
- f4(x[1], x[3], x[4], x[5]) - 1.0 ≤ 0

Known performance issues

The macro-based input to JuMP's nonlinear interface can cause a performance issue if you:

  1. write a macro with a large number (hundreds) of terms
  2. call that macro from within a function instead of from the top-level in global scope.

The first issue does not depend on the number of resulting terms in the mathematical expression, but rather the number of terms in the Julia Expr representation of that expression. For example, the expression sum(x[i] for i in 1:1_000_000) contains one million mathematical terms, but the Expr representation is just a single sum.

The most common cause, other than a lot of tedious typing, is if you write a program that automatically writes a JuMP model as a text file, which you later execute. One example is MINLPlib.jl which automatically transpiled models in the GAMS scalar format into JuMP examples.

As a rule of thumb, if you are writing programs to automatically generate expressions for the JuMP macros, you should target the Raw expression input instead. For more information, read MathOptInterface Issue#1997.

+ f4(x[1], x[3], x[4], x[5]) - 1.0 ≤ 0

Known performance issues

The macro-based input to JuMP's nonlinear interface can cause a performance issue if you:

  1. write a macro with a large number (hundreds) of terms
  2. call that macro from within a function instead of from the top-level in global scope.

The first issue does not depend on the number of resulting terms in the mathematical expression, but rather the number of terms in the Julia Expr representation of that expression. For example, the expression sum(x[i] for i in 1:1_000_000) contains one million mathematical terms, but the Expr representation is just a single sum.

The most common cause, other than a lot of tedious typing, is if you write a program that automatically writes a JuMP model as a text file, which you later execute. One example is MINLPlib.jl which automatically transpiled models in the GAMS scalar format into JuMP examples.

As a rule of thumb, if you are writing programs to automatically generate expressions for the JuMP macros, you should target the Raw expression input instead. For more information, read MathOptInterface Issue#1997.

diff --git a/dev/manual/nonlinear/index.html b/dev/manual/nonlinear/index.html index e48cd861e4b..e33f5155fe7 100644 --- a/dev/manual/nonlinear/index.html +++ b/dev/manual/nonlinear/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Nonlinear Modeling

JuMP has support for nonlinear (convex and nonconvex) optimization problems. JuMP is able to automatically provide exact, sparse second-order derivatives to solvers. This information can improve solver accuracy and performance.

Set a nonlinear objective

Use @objective to set a nonlinear objective.

julia> model = Model();
+

Nonlinear Modeling

JuMP has support for nonlinear (convex and nonconvex) optimization problems. JuMP is able to automatically provide exact, sparse second-order derivatives to solvers. This information can improve solver accuracy and performance.

Set a nonlinear objective

Use @objective to set a nonlinear objective.

julia> model = Model();
 
 julia> @variable(model, x[1:2]);
 
@@ -301,4 +301,4 @@
 julia> ForwardDiff.gradient(x -> my_operator_good(x...), [1.0, 2.0])
 2-element Vector{Float64}:
  2.0
- 4.0
+ 4.0
diff --git a/dev/manual/objective/index.html b/dev/manual/objective/index.html index f55932b95a5..eee7256d3b0 100644 --- a/dev/manual/objective/index.html +++ b/dev/manual/objective/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Objectives

This page describes macros and functions related to linear and quadratic objective functions only, unless otherwise indicated. For nonlinear objective functions, see Nonlinear Modeling.

Set a linear objective

Use the @objective macro to set a linear objective function.

Use Min to create a minimization objective:

julia> model = Model();
+

Objectives

This page describes macros and functions related to linear and quadratic objective functions only, unless otherwise indicated. For nonlinear objective functions, see Nonlinear Modeling.

Set a linear objective

Use the @objective macro to set a linear objective function.

Use Min to create a minimization objective:

julia> model = Model();
 
 julia> @variable(model, x);
 
@@ -179,4 +179,4 @@
  2 x[1]
 
 julia> @constraint(model, obj3 <= 2.0)
-x[1] + x[2] ≤ 2
+x[1] + x[2] ≤ 2
diff --git a/dev/manual/solutions/index.html b/dev/manual/solutions/index.html index c564092e5eb..0f639d1f06c 100644 --- a/dev/manual/solutions/index.html +++ b/dev/manual/solutions/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Solutions

This section of the manual describes how to access a solved solution to a problem. It uses the following model as an example:

julia> begin
+

Solutions

This section of the manual describes how to access a solved solution to a problem. It uses the following model as an example:

julia> begin
            model = Model(HiGHS.Optimizer)
            set_silent(model)
            @variable(model, x >= 0)
@@ -434,4 +434,4 @@
   x integer => 0.1

You can also use the functional form, where the first argument is a function that maps variables to their primal values:

julia> optimize!(model)
 
 julia> primal_feasibility_report(v -> value(v), model)
-Dict{Any, Float64}()
+Dict{Any, Float64}()
diff --git a/dev/manual/variables/index.html b/dev/manual/variables/index.html index a288125e69c..0db3662d5ed 100644 --- a/dev/manual/variables/index.html +++ b/dev/manual/variables/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Variables

The term variable in mathematical optimization has many meanings. For example, optimization variables (also called decision variables) are the unknowns $x$ that we are solving for in the problem:

\[\begin{align} +

Variables

The term variable in mathematical optimization has many meanings. For example, optimization variables (also called decision variables) are the unknowns $x$ that we are solving for in the problem:

\[\begin{align} & \min_{x \in \mathbb{R}^n} & f_0(x) \\ & \;\;\text{s.t.} & f_i(x) & \in \mathcal{S}_i & i = 1 \ldots m @@ -639,4 +639,4 @@ p*x julia> typeof(px) -QuadExpr (alias for GenericQuadExpr{Float64, GenericVariableRef{Float64}})

When to use a parameter

Parameters are most useful when solving nonlinear models in a sequence:

julia> using JuMP, Ipopt
julia> model = Model(Ipopt.Optimizer);
julia> set_silent(model)
julia> @variable(model, x)x
julia> @variable(model, p in Parameter(1.0))p
julia> @objective(model, Min, (x - p)^2)x² - 2 p*x + p²
julia> optimize!(model)
julia> value(x)1.0
julia> set_parameter_value(p, 5.0)
julia> optimize!(model)
julia> value(x)5.0

Using parameters can be faster than creating a new model from scratch with updated data because JuMP is able to avoid repeating a number of steps in processing the model before handing it off to the solver.

+QuadExpr (alias for GenericQuadExpr{Float64, GenericVariableRef{Float64}})

When to use a parameter

Parameters are most useful when solving nonlinear models in a sequence:

julia> using JuMP, Ipopt
julia> model = Model(Ipopt.Optimizer);
julia> set_silent(model)
julia> @variable(model, x)x
julia> @variable(model, p in Parameter(1.0))p
julia> @objective(model, Min, (x - p)^2)x² - 2 p*x + p²
julia> optimize!(model)
julia> value(x)1.0
julia> set_parameter_value(p, 5.0)
julia> optimize!(model)
julia> value(x)5.0

Using parameters can be faster than creating a new model from scratch with updated data because JuMP is able to avoid repeating a number of steps in processing the model before handing it off to the solver.

diff --git a/dev/moi/background/duality/index.html b/dev/moi/background/duality/index.html index 70d0030ebdc..11dfd0ac0b6 100644 --- a/dev/moi/background/duality/index.html +++ b/dev/moi/background/duality/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Duality

Conic duality is the starting point for MOI's duality conventions. When all functions are affine (or coordinate projections), and all constraint sets are closed convex cones, the model may be called a conic optimization problem.

For a minimization problem in geometric conic form, the primal is:

\[\begin{align} +

Duality

Conic duality is the starting point for MOI's duality conventions. When all functions are affine (or coordinate projections), and all constraint sets are closed convex cones, the model may be called a conic optimization problem.

For a minimization problem in geometric conic form, the primal is:

\[\begin{align} & \min_{x \in \mathbb{R}^n} & a_0^T x + b_0 \\ & \;\;\text{s.t.} & A_i x + b_i & \in \mathcal{C}_i & i = 1 \ldots m @@ -81,4 +81,4 @@ \max & \sum b_k y_k \\ \text{s.t.} \;\; & C+C^\top - \sum (A_k+A_k^\top) y_k \in \mathcal{S}_+ \\ & C-C^\top - \sum(A_k-A_k^\top) y_k = 0 -\end{align}\]

and we recover $Z = X + X^\top$.

+\end{align}\]

and we recover $Z = X + X^\top$.

diff --git a/dev/moi/background/infeasibility_certificates/index.html b/dev/moi/background/infeasibility_certificates/index.html index 6a2c8db34e8..7acbae36900 100644 --- a/dev/moi/background/infeasibility_certificates/index.html +++ b/dev/moi/background/infeasibility_certificates/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Infeasibility certificates

When given a conic problem that is infeasible or unbounded, some solvers can produce a certificate of infeasibility. This page explains what a certificate of infeasibility is, and the related conventions that MathOptInterface adopts.

Conic duality

MathOptInterface uses conic duality to define infeasibility certificates. A full explanation is given in the section Duality, but here is a brief overview.

Minimization problems

For a minimization problem in geometric conic form, the primal is:

\[\begin{align} +

Infeasibility certificates

When given a conic problem that is infeasible or unbounded, some solvers can produce a certificate of infeasibility. This page explains what a certificate of infeasibility is, and the related conventions that MathOptInterface adopts.

Conic duality

MathOptInterface uses conic duality to define infeasibility certificates. A full explanation is given in the section Duality, but here is a brief overview.

Minimization problems

For a minimization problem in geometric conic form, the primal is:

\[\begin{align} & \min_{x \in \mathbb{R}^n} & a_0^\top x + b_0 \\ & \;\;\text{s.t.} & A_i x + b_i & \in \mathcal{C}_i & i = 1 \ldots m, @@ -29,4 +29,4 @@ \end{align}\]

and:

\[-\sum_{i=1}^m b_i^\top (y_i + \eta d_i) > -\sum_{i=1}^m b_i^\top y_i,\]

for any feasible dual solution $y$. The latter simplifies to $-\sum_{i=1}^m b_i^\top d_i > 0$. For a maximization problem, the inequality is $\sum_{i=1}^m b_i^\top d_i < 0$. (Note that these are the same inequality, modulo a - sign.)

If the solver has found a certificate of primal infeasibility:

Note

The choice of whether to scale the ray $d$ to have magnitude 1 is left to the solver.

Infeasibility certificates of variable bounds

Many linear solvers (for example, Gurobi) do not provide explicit access to the primal infeasibility certificate of a variable bound. However, given a set of linear constraints:

\[\begin{align} l_A \le A x \le u_A \\ l_x \le x \le u_x, -\end{align}\]

the primal certificate of the variable bounds can be computed using the primal certificate associated with the affine constraints, $d$. (Note that $d$ will have one element for each row of the $A$ matrix, and that some or all of the elements in the vectors $l_A$ and $u_A$ may be $\pm \infty$. If both $l_A$ and $u_A$ are finite for some row, the corresponding element in `d must be 0.)

Given $d$, compute $\bar{d} = d^\top A$. If the bound is finite, a certificate for the lower variable bound of $x_i$ is $\max\{\bar{d}_i, 0\}$, and a certificate for the upper variable bound is $\min\{\bar{d}_i, 0\}$.

+\end{align}\]

the primal certificate of the variable bounds can be computed using the primal certificate associated with the affine constraints, $d$. (Note that $d$ will have one element for each row of the $A$ matrix, and that some or all of the elements in the vectors $l_A$ and $u_A$ may be $\pm \infty$. If both $l_A$ and $u_A$ are finite for some row, the corresponding element in `d must be 0.)

Given $d$, compute $\bar{d} = d^\top A$. If the bound is finite, a certificate for the lower variable bound of $x_i$ is $\max\{\bar{d}_i, 0\}$, and a certificate for the upper variable bound is $\min\{\bar{d}_i, 0\}$.

diff --git a/dev/moi/background/motivation/index.html b/dev/moi/background/motivation/index.html index f0ae4ce11ae..b32a59eb72b 100644 --- a/dev/moi/background/motivation/index.html +++ b/dev/moi/background/motivation/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Motivation

MathOptInterface (MOI) is a replacement for MathProgBase, the first-generation abstraction layer for mathematical optimization previously used by JuMP and Convex.jl.

To address a number of limitations of MathProgBase, MOI is designed to:

  • Be simple and extensible
    • unifying linear, quadratic, and conic optimization,
    • seamlessly facilitating extensions to essentially arbitrary constraints and functions (for example, indicator constraints, complementarity constraints, and piecewise-linear functions)
  • Be fast
    • by allowing access to a solver's in-memory representation of a problem without writing intermediate files (when possible)
    • by using multiple dispatch and avoiding requiring containers of non-concrete types
  • Allow a solver to return multiple results (for example, a pool of solutions)
  • Allow a solver to return extra arbitrary information via attributes (for example, variable- and constraint-wise membership in an irreducible inconsistent subset for infeasibility analysis)
  • Provide a greatly expanded set of status codes explaining what happened during the optimization procedure
  • Enable a solver to more precisely specify which problem classes it supports
  • Enable both primal and dual warm starts
  • Enable adding and removing both variables and constraints by indices that are not required to be consecutive
  • Enable any modification that the solver supports to an existing model
  • Avoid requiring the solver wrapper to store an additional copy of the problem data
+

Motivation

MathOptInterface (MOI) is a replacement for MathProgBase, the first-generation abstraction layer for mathematical optimization previously used by JuMP and Convex.jl.

To address a number of limitations of MathProgBase, MOI is designed to:

  • Be simple and extensible
    • unifying linear, quadratic, and conic optimization,
    • seamlessly facilitating extensions to essentially arbitrary constraints and functions (for example, indicator constraints, complementarity constraints, and piecewise-linear functions)
  • Be fast
    • by allowing access to a solver's in-memory representation of a problem without writing intermediate files (when possible)
    • by using multiple dispatch and avoiding requiring containers of non-concrete types
  • Allow a solver to return multiple results (for example, a pool of solutions)
  • Allow a solver to return extra arbitrary information via attributes (for example, variable- and constraint-wise membership in an irreducible inconsistent subset for infeasibility analysis)
  • Provide a greatly expanded set of status codes explaining what happened during the optimization procedure
  • Enable a solver to more precisely specify which problem classes it supports
  • Enable both primal and dual warm starts
  • Enable adding and removing both variables and constraints by indices that are not required to be consecutive
  • Enable any modification that the solver supports to an existing model
  • Avoid requiring the solver wrapper to store an additional copy of the problem data
diff --git a/dev/moi/background/naming_conventions/index.html b/dev/moi/background/naming_conventions/index.html index f65a006b779..0d357870e0c 100644 --- a/dev/moi/background/naming_conventions/index.html +++ b/dev/moi/background/naming_conventions/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Naming conventions

MOI follows several conventions for naming functions and structures. These should also be followed by packages extending MOI.

Sets

Sets encode the structure of constraints. Their names should follow the following conventions:

  • Abstract types in the set hierarchy should begin with Abstract and end in Set, for example, AbstractScalarSet, AbstractVectorSet.
  • Vector-valued conic sets should end with Cone, for example, NormInfinityCone, SecondOrderCone.
  • Vector-valued Cartesian products should be plural and not end in Cone, for example, Nonnegatives, not NonnegativeCone.
  • Matrix-valued conic sets should provide two representations: ConeSquare and ConeTriangle, for example, RootDetConeTriangle and RootDetConeSquare. See Matrix cones for more details.
  • Scalar sets should be singular, not plural, for example, Integer, not Integers.
  • As much as possible, the names should follow established conventions in the domain where this set is used: for instance, convex sets should have names close to those of CVX, and constraint-programming sets should follow MiniZinc's constraints.
+

Naming conventions

MOI follows several conventions for naming functions and structures. These should also be followed by packages extending MOI.

Sets

Sets encode the structure of constraints. Their names should follow the following conventions:

  • Abstract types in the set hierarchy should begin with Abstract and end in Set, for example, AbstractScalarSet, AbstractVectorSet.
  • Vector-valued conic sets should end with Cone, for example, NormInfinityCone, SecondOrderCone.
  • Vector-valued Cartesian products should be plural and not end in Cone, for example, Nonnegatives, not NonnegativeCone.
  • Matrix-valued conic sets should provide two representations: ConeSquare and ConeTriangle, for example, RootDetConeTriangle and RootDetConeSquare. See Matrix cones for more details.
  • Scalar sets should be singular, not plural, for example, Integer, not Integers.
  • As much as possible, the names should follow established conventions in the domain where this set is used: for instance, convex sets should have names close to those of CVX, and constraint-programming sets should follow MiniZinc's constraints.
diff --git a/dev/moi/changelog/index.html b/dev/moi/changelog/index.html index 3c93a34c841..3cae17d196f 100644 --- a/dev/moi/changelog/index.html +++ b/dev/moi/changelog/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

v1.31.2 (August 30, 2024)

Fixed

  • Fixed a bug writing FileFormats.MPS files with MAX_SENSE and quadratic objectives (#2539)

Other

  • Improved the docstrings in src/nlp.jl (#2537)

v1.31.1 (August 7, 2024)

Fixed

  • Fixed NLPBlock when used with bridges (#2524)

Other

  • Use inverse_trimap instead of redefining it (#2522)
  • Improved UnsupportedConstraint error (#2530)

v1.31.0 (June 26, 2024)

Added

  • Added default show(::IO, ::ModelLike) method (#2505) (#2510)
  • Set map bridges can now implement the various map_function methods to use the value of the bridge as the first argument, instead of passing the type of the bridge. (#2509)
  • Added cannot_unbridge argument to Bridges.runtests

Fixed

  • Fixed supports_constraint for IndicatorSOS1Bridge (#2507)
  • Fixed getting ConstraintDual in slack bridges (#2508) (#2514) (#2515)
  • Fixed FileFormats.NL to read linear constraints as ScalarAffineFunction (#2512)
  • Changed default_copy_to to maintain the order of variables during copy_to. This change is marked as non-breaking, but it may cause different (but mathematically equivalent) models to be formulated, particularly conic models with bridges. (#2495) (#2520)

Other

  • Updated solver-tests.yml (#2516) (#2518)

v1.30.0 (May 23, 2024)

Added

  • Added input and output functions to Bridges.runtests (#2497)

Fixed

  • Improved the heuristic of when to write variable cones in FileFormats.CBF (#2494)
  • Fixed Bridges.runtests when model has no variable (#2499)
  • Fixed getting an attribute of an empty vector (#2501)

Other

  • Fixed links in the documentation (#2502)

v1.29.0 (April 19, 2024)

Added

  • Added support for Indicator constraints in FileFormats.LP (#2483)

Fixed

Other

  • Updated versions in CI (#2484) (#2489)
  • Fixed duplicate names in tests (#2485)

v1.28.1 (April 13, 2024)

Fixed

  • Fixed a bug reading MPS files with integer variables and no corresponding entry in the BOUNDS section (#2480)

v1.28.0 (April 11, 2024)

Added

Fixed

  • Fixed a correctness bug getting the set of a constraint that used both variable and constraint bridges (#2464) (#2472)
  • Fixed MethodError in some bridges when called with Complex-valued functions (#2468) (#2475)
  • Fixed reading MPS files that use * as the start of a name and not as a comment (#2470)

Other

  • Updated solver-tests.yml (#2465)
  • Removed two unused methods from MOI.Bridges (#2466)
  • Documentation updates (#2467), (#2473), (#2474)
  • Simplify reading CBF files (#2476)

v1.27.1 (March 27, 2024)

Fixed

  • Fixed passing non-IndexMap in Utilities.pass_attributes (#2458)
  • Fixed getting MOI.ListOfConstraintAttributesSet for VectorOfConstraints (#2459)

Other

  • Updated solver-tests.yml (#2453) (#2455)
  • Fixed path in error message (#2461)

v1.27.0 (February 27, 2024)

Added

  • Added support for sign(x) in Nonlinear (#2444)

Fixed

  • Fixed copy_to to FileFormats.NL when Name is set (#2446)

v1.26.0 (February 22, 2024)

Added

Fixed

  • Fixed writing binary variables with bounds in FileFormats.MPS (#2431)
  • Fixed parsing suffixes in FileFormats.NL (#2436)
  • Fixed writing free constraints in FileFormats.NL (#2437)
  • Fixed potential for unsafe out-of-bounds write in Hessian evaluation (#2441)

Other

  • Fixed formatting of BasisStatusCode docstring (#2430)
  • Refactor test/Fileformats/MPS/MPS.jl (#2433)

v1.25.3 (February 14, 2024)

Fixed

  • Fixed number type in get_fallback (#2414)
  • Fixed error type thrown when a variable bridge cannot un-bridge the function. It used to throw ErrorException. It now throws MOI.GetAttributeNotAllowed{MOI.ConstraintFunction}. This enables Utilities.CachingOptimizer to more uniformly implement fallbacks for common bridges like Bridges.Variable.ZerosBridge. (#2415)
  • Fixed tests on upcoming Julia v1.11 (#2428)

Other

v1.25.2 (January 29, 2024)

Fixed

Other

  • Clarified ordering of nonlinear tape in documentation (#2401)
  • Updated vale.sh (#2403) (#2404)
  • Tidied `src/Utilities/results.jl (#2411)

v1.25.1 (January 11, 2024)

Fixed

Other

  • Removed a duplicated test (#2395)

v1.25.0 (January 5, 2024)

Added

  • Added the AutomaticDifferentiationBackend attribute (#2386)

Fixed

v1.24.0 (January 2, 2024)

Added

  • Added get_fallback for ConstraintDual of variable bounds (#2373)

Fixed

  • Fixed RSOCtoPSDBridge for dimension 2 (#2359)
  • Fixed getting ConstraintFunction in conversion bridge (#2360)
  • Fixed map_indices (#2367)
  • Fixed SlackBridgePrimalDualStart for non-slack bridges (#2365)
  • Fixed test_attribute_TimeLimitSec (#2370)
  • Fixed order of model attributes during copy_to (#2372)
  • Fixed ConstraintIndex conflicts between variable and constraint bridges (#2362)
  • Fixed corner-case deletion in bridges (#2377)
  • Fixed ListOfVariablesWithAttributeSet for variable bridges (#2380)
  • Fixed SlackBridge if scalar constant is not zero (#2382)
  • Fixed setting multiple bounds on a bridged variable (#2383)

Other

  • Minor documentation improvements (#2355), (#2374)
  • Improved side_dimension_for_vectorized_dimension (#2356)
  • Added DiffOpt and ParametricOptInterface to solver-tests.yml (#2368)
  • Refactored SDPAModel into a separate test file and test more widely (#2364), (#2357)

v1.23.0 (November 29, 2023)

Added

Fixed

  • Fixed Test.test_model_Name_VariableName_ConstraintName (#2349)
  • Fixed errors thrown when querying an attribute is not supported, like when Utilities.CachingOptimizer is not attached to an optimizer (#2350)

v1.22.0 (November 6, 2023)

Added

Fixed

Other

  • Fixed typo in docstring of ScalarAffineFunction (#2326)
  • Added Gurobi to solver-tests.yml (#2332)
  • Improved the error message when a bridge does not support an attribute (#2329)
  • Improved documentation for implementing a bridge (#2334)
  • Updated [compat] bounds in Project.toml (#2344)

v1.21.0 (October 25, 2023)

Added

Fixed

  • Fixed test_attribute_TimeLimitSec (#2256)
  • Fixed conversion cost in objective bridges (#2309)

Other

  • Fixed flakey link checking in documentation (#2297)
  • Minor documentation fixes (#2304) (#2313)
  • Fixed [compat] section of Project.toml (#2310)
  • Added MultiObjectiveAlgorithms to solver-tests.yml (#2312)

v1.20.1 (September 24, 2023)

Fixed

Other

  • Added MathOptSetDistances to solver-tests.yml (#2265)
  • Updated Documenter (#2266)
  • Fixed various JET errors (#2267) (#2269) (#2270) (#2271) (#2276) (#2277) (#2289)
  • Various style improvements
    • Replaced using Package with import Package where possible (#2274)
    • Removed Utilities.EMPTYSTRING (#2283)
    • Removed unnecessary const acronyms in Utilities (#2280) (#2281)
    • Removed invalid and unused method (#2286)
  • Refactored src/Utilities/model.jl (#2287)

v1.20.0 (September 7, 2023)

Added

Other

  • Updated dependencies (#2258)
  • Improved performance of ScalarNonlinearFunction utilities (#2259)
  • Fixed docstrings (#2261)

v1.19.0 (August 15, 2023)

Added

Fixed

Other

  • Added extensions to solver-tests.yml (#2229)
  • Refactored test/Benchmarks (#2234)
  • Fixed warnings in tests (#2241) (#2243)
  • Small refactoring of bridges for upcoming VectorNonlinearFunction (#2244) (#2245)
  • Fixed various typos (#2251) (#2255)
  • Partitioned how we run the tests on GitHub actions (#2252) (#2253)

v1.18.0 (June 23, 2023)

Added

Fixed

  • Fixed a missing @require in MOI.Test (#2195) (#2196)
  • Fixed incorrect usage of Utilities.operate! in bridges (#2207) (#2216)
  • Fixed splatting nonlinear expression with univariate operator (#2221)

Other

  • Removed unused argument names (#2199)
  • Reduced memory requirement for tests (#2204)
  • Refactored Utilities.promote_operation (#2206)
  • Improved code style in Utilities/mutable_arithmetics.jl (#2209)
  • Refactored various methods in Utilities/functions.jl (#2208) (#2212) (#2213) (#2214) (#2215)

v1.17.1 (June 6, 2023)

Fixed

Other

  • Added documentation for enum instances (#2186)
  • Updated chatroom links in documentation (#2188)
  • Changed the documentation to build on Julia v1.9 (#2191)

v1.17.0 (June 1, 2023)

Added

Fixed

  • Fixed support for external sets in Utilities.loadfromstring! (#2177)
  • Fixed promote_operation for ScalarNonlinearFunction (#2179)
  • Fixed two issues in FileFormats.LP when reading files with quadratic functions (#2182) (#2184)

v1.16.0 (May 16, 2023)

Added

Fixed

  • Fixed support for Julia v1.9 to work around a bug in the upstream Julia compiler (#2161) (#2163)
  • Fixed a correctness bug in Bridges.Constraint.HermitianToSymmetricPSDBridge (#2171)
  • Fixed convert(::VariableIndex, ::ScalarAffineFunction) when the function has terms with 0coefficients (#2173)

Other

  • Fixed solver-tests.yml (#2157)
  • Updated documentation links to developer chatroom (#2160)
  • Added various tests for bridges (#2156)
  • Added checklists to the developer documentation (#2167) (#2168)

v1.15.1 (April 25, 2023)

Fixed

  • Fixed deleting a variable in a bridged objective (#2150)

v1.15.0 (April 19, 2023)

Added

Fixed

Other

  • Add a test for variables in one-sided open Interval sets (#2133)
  • Minor style fixes in the source code (#2148)

v1.14.1 (April 6, 2023)

Fixed

Other

  • Added a warning when an ambiguous string is passed to exclude in Test.runtests (#2136)

v1.14.0 (April 4, 2023)

Added

Fixed

  • Fixed ResultCount when parsing .sol files in FileFormats.NL (#2130)

v1.13.2 (March 21, 2023)

Fixed

Other

  • Fixed typos in the documentation (#2114)
  • Functions now print to the REPL in algebraic form. This is potentially breaking if you have tests which rely on a specific String form of MOI functions. (#2112) (#2126)

v1.13.1 (March 3, 2023)

Other

  • Added the Google style guide to the documentation linter Vale, and fixed the resulting warnings (#2110)
  • Improved the docstrings in src/functions.jl (#2108)

v1.13.0 (February 28, 2023)

Added

Fixed

Other

  • Added tests for vector-valued objective functions in FileFormats.MOF (#2093)
  • Used and documented preference for import MathOptInterface as MOI (#2096)
  • Fix and test links in the documentation with linkcheck = true (#2098)
  • Improved docstrings of sets in src/sets.jl (#2099)
  • Skip checking flakey links in documentation with linkcheck_ignore (#2103)

v1.12.0 (February 10, 2023)

Added

Fixed

  • Fixed a number of constraint bridges so that Bridges.final_touch can be called multiple times without forcing a rebuild of the reformulation (#2089)

Other

v1.11.5 (January 24, 2023)

Fixed

  • Fixed a bug writing .lp files with an off-diagonal quadratic objective (#2082)

Other

  • Added SnoopPrecompile directives for reduced time-to-first-X in Julia v1.9 (#2080)

v1.11.4 (January 12, 2023)

Fixed

  • Fixed a bug reading .lp files with an Integer section (#2078)

v1.11.3 (January 12, 2023)

Fixed

  • Fixed a performance bug when deleting a vector of constraints (#2072)
  • Fixed a bug reading .lp files with terms like x -1 y (#2076)

Other

  • Documented the two-argument method of optimize! (#2074)

v1.11.2 (January 2, 2023)

Fixed

  • Fixed a bug reading .mof.json files with ConstraintName set for VariableIndex constraints (#2066)
  • Fixed a bug reading .mof.json files with nonlinear objectives and no constraints (#2068)

v1.11.1 (December 22, 2022)

Fixed

  • Fixed a bug reading .mof.json files with integer coefficients for affine and quadratic functions (#2063)

v1.11.0 (December 2, 2022)

Added

Other

  • Tidied these release notes (#2055)

v1.10.0 (November 22, 2022)

Added

Fixed

  • Fixed Bridges.Objective.SlackBridge when the objective function is complex-valued (#2036) (#2038)
  • Fixed docstring of Test.runtests to clarify the warn_unsupported argument (#2037)
  • Fixed reading of free variables in FileFormats.LP (#2044)
  • Fixed numerous edge cases reading files from QPLIB using FileFormats.LP (#2042) (#2044)
  • Fixed situations in which x^y returns a complex value in Nonlinear (#2050)

Other

  • Improved the error message thrown when a user-defined nonlinear function does not accept splatted input (#2032)
  • Removed specialized iterators for keys and values in Utilities.CleverDicts (#2051)

v1.9.0 (October 29, 2022)

Added

  • Added default fallback for getting ListOfConstraintIndices and NumberOfConstraints when the constraint type is unsupported by the model (#2021)
  • Added support for min and max in nonlinear expressions (#2023)
  • Added support for Indicator{EqualTo{T}} constraints in FileFormats.MPS (#2022)
  • Added default fallback for write_to_file and read_from_file (#2029)

Fixed

  • Fixed Constraint.ZeroOneBridge by adding new bounds as affine constraints instead of variable bounds (#1879)
  • Fixed reading free rows in FileFormats.MPS files (#2009)
  • Fixed parsing of OBJSENSE blocks in FileFormats.MPS files (#2016) (#2019)
  • Fixed the parsing of deeply nested nonlinear expressions by removing the use of recursion (#2020)
  • Fixed the requirements check in Test.test_constraint_get_ConstraintIndex (#2024)

v1.8.2 (September 20, 2022)

Documentation

  • Added vale as a documentation linter (#2002)
  • Improved styling of code blocks in the PDF (#1999) (#2000)
  • Fixed a number of typos in the documentation (#2001) (#2003)

v1.8.1 (September 12, 2022)

Fixed

  • Fixed a bug in supports(::AbstractBridgeOptimizer for constraint attributes (#1991) (#1992)

v1.8.0 (September 1, 2022)

Added

Fixed

  • Lazily construct expressions in Nonlinear so that expressions are updated when Nonlinear.Parameter values are updated (#1984)
  • Allow NORM_LIMIT as a TerminationStatus for unbounded problems in Test (#1990)

v1.7.0 (August 16, 2022)

Added

Fixed

  • Fixed some missing promotion rules

Other

  • Improved the performance of Jacobian products in Nonlinear
  • Removed an un-needed copy in Utilities.modify_function
  • Various clean-ups in Bridges/bridge_optimizer.jl

v1.6.1 (July 23, 2022)

Fixed

  • Added support for ExponentialCone in MatrixOfConstraints
  • Fix PSDSquare_3 test to reflect a previously fixed bug getting the ConstraintDual of a PositiveSemidefiniteConeSquare constraint

v1.6.0 (July 2, 2022)

Added

  • Added Bridges.needs_final_touch and Bridges.final_touch
  • Added new bridges from constraint programming sets to mixed-integer linear programs:
    • AllDifferentToCountDistinctBridge
    • CountAtLeastToCountBelongsBridge
    • CountBelongsToMILPBridge
    • CountDistinctToMILPBridge
    • CountGreaterThanToMILPBridge
    • CircuitToMILPBridge

Fixed

  • Relax an instance of ::Vector to ::AbstractVector in MOI.Nonlinear
  • Fix BinPackingToMILPBridge to respect variable bounds
  • Fix SemiToBinaryBridge to throw error if other bounds are set

v1.5.0 (June 27, 2022)

Added

  • Added GetAttributeNotAllowed for solvers to indicate when getting an attribute encounters an error
  • Added Utilities.get_fallback support for ObjectiveValue and DualObjectiveValue
  • Added new bridges:
    • RootDetConeSquare to RootDetConeTriangle
    • LogDetConeSquare to LogDetConeTriangle
    • BinPacking to a mixed-integer linear program
    • Table to a mixed-integer linear program
  • Added Bridges.print_active_bridges to display the current optimal hyper-path in a Bridges.LazyBridgeOptimizer

Fixed

  • Fixed ZeroOne tests with lower and upper bounds
  • Fixed error in FileFormats.LP when reading a malformed file
  • Fixed reading of nonlinear programs in FileFormats.MOF
  • Fixed bug in ConstraintDual when using SquareBridge

Other

  • Improved documentation of nonlinear API
  • Documented duality convention for PositiveSemidefiniteConeSquare sets
  • Fixed typo in Bridges.Constraint.QuadToSOCBridge docstring

v1.4.0 (June 9, 2022)

Added

  • Added a number of sets for constraint programming:
    • AllDifferent
    • BinPacking
    • Circuit
    • CountAtLeast
    • CountBelongs
    • CountDistinct
    • CountGreaterThan
    • Cumulative
    • Path
    • Table
  • Added support for user-defined hessians in Nonlinear
  • Added Bridges.runtests to simplify the testing of bridge implementations

Fixed

  • Fixed a bug in FileFormats.NL when writing univariate *

Other

  • Began a large refactoring of the Bridges submodule, with greatly improved documentation.

v1.3.0 (May 27, 2022)

Added

  • Add MOI.Nonlinear submodule. This is a large new submodule that has been refactored from code that was in JuMP. For now, it should be considered experimental.
  • Add FileFormats.NL.SolFileResults(::IO, ::Model)
  • Add FileFormats.NL.read!(::IO, ::Model)
  • Add MOI.modify that accepts a vector of modifications

Fixed

  • Fixed a bug in Test which attempted to include non-.jl files
  • Fixed a bug in FileFormats for models with open interval constraints

Other

  • Fixed a performance issue in Utilities.DoubleDict
  • Various minor improvements to the documentation

v1.2.0 (April 25, 2022)

Added

  • Add support for the FORMAT_REW/.rew file format in FileFormats.

Fixed

  • Fix bug handling of default variable bounds in FileFormats.LP
  • Fix FileFormats.MPS to not write OBJSENSE by default since this is only supported by some readers.

v1.1.2 (March 31, 2022)

Fixed

  • Fix a range of bugs in FileFormats.LP
  • Fix reading of problem dimensions in FileFormats.SDPA

v1.1.1 (March 23, 2022)

Fixed

  • Fix bug in test_model_UpperBoundAlreadySet
  • Fix bug in test_infeasible_ tests
  • Fix bug in test_objective_ObjectiveFunction_blank
  • Relax restriction of MOI.AbstractOptimizer to MOI.ModelLike in Utilities.CachingOptimizer and instantiate.

New tests

  • Add test_conic_empty_matrix that checks conic solvers support problems with no variables.

v1.1.0 (March 2, 2022)

Added

  • Added MOI.Utilities.throw_unsupported(::UniversalFallback) for simplifying solver wrappers which copy from a UniversalFallback.

v1.0.2 (March 1, 2022)

Fixed

  • Fixed a bug in the test_model_ScalarFunctionConstantNotZero test
  • Fixed the error type when an AbstractFunctionConversionBridge cannot get or set an attribute
  • Identified a correctness bug in RSOCtoPSDBridge. We now thrown an error instead of returning an incorrect result.

v1.0.1 (February 25, 2022)

Fixed

  • Fixed a bug in which OptimizerAttributes were not copied in CachingOptimizer
  • Fixed a bug in which shift_constant did not promote mixed types of coefficients
  • Fixed a bug in which deleting a constraint of a bridged variable threw ErrorException instead of MOI.DeleteNotAllowed
  • Fixed a bug in which add_constraint in MatrixOfConstraints did not canonicalize the function
  • Fixed a bug when modifying scalar constants of a function containing a bridged variable
  • Fixed a bug in which final_touch was not always called with a CachingOptimizer

v1.0.0 (February 17, 2022)

Although tagged as a breaking release, v1.0.0 is v0.10.9 with deprecations removed, similar to how Julia 1.0 was Julia 0.7 with deprecations removed.

Breaking

  • Julia 1.6 is now the minimum supported version
  • All deprecations have been removed

Troubleshooting problems when updating

If you experience problems when updating, you are likely using previously deprecated features. (By default, Julia does not warn when you use deprecated features.)

To find the deprecated features you are using, start Julia with --depwarn=yes:

$ julia --depwarn=yes

Then install MathOptInterface v0.10.9:

julia> using Pkg
+

Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

v1.31.2 (August 30, 2024)

Fixed

  • Fixed a bug writing FileFormats.MPS files with MAX_SENSE and quadratic objectives (#2539)

Other

  • Improved the docstrings in src/nlp.jl (#2537)

v1.31.1 (August 7, 2024)

Fixed

  • Fixed NLPBlock when used with bridges (#2524)

Other

  • Use inverse_trimap instead of redefining it (#2522)
  • Improved UnsupportedConstraint error (#2530)

v1.31.0 (June 26, 2024)

Added

  • Added default show(::IO, ::ModelLike) method (#2505) (#2510)
  • Set map bridges can now implement the various map_function methods to use the value of the bridge as the first argument, instead of passing the type of the bridge. (#2509)
  • Added cannot_unbridge argument to Bridges.runtests

Fixed

  • Fixed supports_constraint for IndicatorSOS1Bridge (#2507)
  • Fixed getting ConstraintDual in slack bridges (#2508) (#2514) (#2515)
  • Fixed FileFormats.NL to read linear constraints as ScalarAffineFunction (#2512)
  • Changed default_copy_to to maintain the order of variables during copy_to. This change is marked as non-breaking, but it may cause different (but mathematically equivalent) models to be formulated, particularly conic models with bridges. (#2495) (#2520)

Other

  • Updated solver-tests.yml (#2516) (#2518)

v1.30.0 (May 23, 2024)

Added

  • Added input and output functions to Bridges.runtests (#2497)

Fixed

  • Improved the heuristic of when to write variable cones in FileFormats.CBF (#2494)
  • Fixed Bridges.runtests when model has no variable (#2499)
  • Fixed getting an attribute of an empty vector (#2501)

Other

  • Fixed links in the documentation (#2502)

v1.29.0 (April 19, 2024)

Added

  • Added support for Indicator constraints in FileFormats.LP (#2483)

Fixed

Other

  • Updated versions in CI (#2484) (#2489)
  • Fixed duplicate names in tests (#2485)

v1.28.1 (April 13, 2024)

Fixed

  • Fixed a bug reading MPS files with integer variables and no corresponding entry in the BOUNDS section (#2480)

v1.28.0 (April 11, 2024)

Added

Fixed

  • Fixed a correctness bug getting the set of a constraint that used both variable and constraint bridges (#2464) (#2472)
  • Fixed MethodError in some bridges when called with Complex-valued functions (#2468) (#2475)
  • Fixed reading MPS files that use * as the start of a name and not as a comment (#2470)

Other

  • Updated solver-tests.yml (#2465)
  • Removed two unused methods from MOI.Bridges (#2466)
  • Documentation updates (#2467), (#2473), (#2474)
  • Simplify reading CBF files (#2476)

v1.27.1 (March 27, 2024)

Fixed

  • Fixed passing non-IndexMap in Utilities.pass_attributes (#2458)
  • Fixed getting MOI.ListOfConstraintAttributesSet for VectorOfConstraints (#2459)

Other

  • Updated solver-tests.yml (#2453) (#2455)
  • Fixed path in error message (#2461)

v1.27.0 (February 27, 2024)

Added

  • Added support for sign(x) in Nonlinear (#2444)

Fixed

  • Fixed copy_to to FileFormats.NL when Name is set (#2446)

v1.26.0 (February 22, 2024)

Added

Fixed

  • Fixed writing binary variables with bounds in FileFormats.MPS (#2431)
  • Fixed parsing suffixes in FileFormats.NL (#2436)
  • Fixed writing free constraints in FileFormats.NL (#2437)
  • Fixed potential for unsafe out-of-bounds write in Hessian evaluation (#2441)

Other

  • Fixed formatting of BasisStatusCode docstring (#2430)
  • Refactor test/Fileformats/MPS/MPS.jl (#2433)

v1.25.3 (February 14, 2024)

Fixed

  • Fixed number type in get_fallback (#2414)
  • Fixed error type thrown when a variable bridge cannot un-bridge the function. It used to throw ErrorException. It now throws MOI.GetAttributeNotAllowed{MOI.ConstraintFunction}. This enables Utilities.CachingOptimizer to more uniformly implement fallbacks for common bridges like Bridges.Variable.ZerosBridge. (#2415)
  • Fixed tests on upcoming Julia v1.11 (#2428)

Other

v1.25.2 (January 29, 2024)

Fixed

Other

  • Clarified ordering of nonlinear tape in documentation (#2401)
  • Updated vale.sh (#2403) (#2404)
  • Tidied `src/Utilities/results.jl (#2411)

v1.25.1 (January 11, 2024)

Fixed

Other

  • Removed a duplicated test (#2395)

v1.25.0 (January 5, 2024)

Added

  • Added the AutomaticDifferentiationBackend attribute (#2386)

Fixed

v1.24.0 (January 2, 2024)

Added

  • Added get_fallback for ConstraintDual of variable bounds (#2373)

Fixed

  • Fixed RSOCtoPSDBridge for dimension 2 (#2359)
  • Fixed getting ConstraintFunction in conversion bridge (#2360)
  • Fixed map_indices (#2367)
  • Fixed SlackBridgePrimalDualStart for non-slack bridges (#2365)
  • Fixed test_attribute_TimeLimitSec (#2370)
  • Fixed order of model attributes during copy_to (#2372)
  • Fixed ConstraintIndex conflicts between variable and constraint bridges (#2362)
  • Fixed corner-case deletion in bridges (#2377)
  • Fixed ListOfVariablesWithAttributeSet for variable bridges (#2380)
  • Fixed SlackBridge if scalar constant is not zero (#2382)
  • Fixed setting multiple bounds on a bridged variable (#2383)

Other

  • Minor documentation improvements (#2355), (#2374)
  • Improved side_dimension_for_vectorized_dimension (#2356)
  • Added DiffOpt and ParametricOptInterface to solver-tests.yml (#2368)
  • Refactored SDPAModel into a separate test file and test more widely (#2364), (#2357)

v1.23.0 (November 29, 2023)

Added

Fixed

  • Fixed Test.test_model_Name_VariableName_ConstraintName (#2349)
  • Fixed errors thrown when querying an attribute is not supported, like when Utilities.CachingOptimizer is not attached to an optimizer (#2350)

v1.22.0 (November 6, 2023)

Added

Fixed

Other

  • Fixed typo in docstring of ScalarAffineFunction (#2326)
  • Added Gurobi to solver-tests.yml (#2332)
  • Improved the error message when a bridge does not support an attribute (#2329)
  • Improved documentation for implementing a bridge (#2334)
  • Updated [compat] bounds in Project.toml (#2344)

v1.21.0 (October 25, 2023)

Added

Fixed

  • Fixed test_attribute_TimeLimitSec (#2256)
  • Fixed conversion cost in objective bridges (#2309)

Other

  • Fixed flakey link checking in documentation (#2297)
  • Minor documentation fixes (#2304) (#2313)
  • Fixed [compat] section of Project.toml (#2310)
  • Added MultiObjectiveAlgorithms to solver-tests.yml (#2312)

v1.20.1 (September 24, 2023)

Fixed

Other

  • Added MathOptSetDistances to solver-tests.yml (#2265)
  • Updated Documenter (#2266)
  • Fixed various JET errors (#2267) (#2269) (#2270) (#2271) (#2276) (#2277) (#2289)
  • Various style improvements
    • Replaced using Package with import Package where possible (#2274)
    • Removed Utilities.EMPTYSTRING (#2283)
    • Removed unnecessary const acronyms in Utilities (#2280) (#2281)
    • Removed invalid and unused method (#2286)
  • Refactored src/Utilities/model.jl (#2287)

v1.20.0 (September 7, 2023)

Added

Other

  • Updated dependencies (#2258)
  • Improved performance of ScalarNonlinearFunction utilities (#2259)
  • Fixed docstrings (#2261)

v1.19.0 (August 15, 2023)

Added

Fixed

Other

  • Added extensions to solver-tests.yml (#2229)
  • Refactored test/Benchmarks (#2234)
  • Fixed warnings in tests (#2241) (#2243)
  • Small refactoring of bridges for upcoming VectorNonlinearFunction (#2244) (#2245)
  • Fixed various typos (#2251) (#2255)
  • Partitioned how we run the tests on GitHub actions (#2252) (#2253)

v1.18.0 (June 23, 2023)

Added

Fixed

  • Fixed a missing @require in MOI.Test (#2195) (#2196)
  • Fixed incorrect usage of Utilities.operate! in bridges (#2207) (#2216)
  • Fixed splatting nonlinear expression with univariate operator (#2221)

Other

  • Removed unused argument names (#2199)
  • Reduced memory requirement for tests (#2204)
  • Refactored Utilities.promote_operation (#2206)
  • Improved code style in Utilities/mutable_arithmetics.jl (#2209)
  • Refactored various methods in Utilities/functions.jl (#2208) (#2212) (#2213) (#2214) (#2215)

v1.17.1 (June 6, 2023)

Fixed

Other

  • Added documentation for enum instances (#2186)
  • Updated chatroom links in documentation (#2188)
  • Changed the documentation to build on Julia v1.9 (#2191)

v1.17.0 (June 1, 2023)

Added

Fixed

  • Fixed support for external sets in Utilities.loadfromstring! (#2177)
  • Fixed promote_operation for ScalarNonlinearFunction (#2179)
  • Fixed two issues in FileFormats.LP when reading files with quadratic functions (#2182) (#2184)

v1.16.0 (May 16, 2023)

Added

Fixed

  • Fixed support for Julia v1.9 to work around a bug in the upstream Julia compiler (#2161) (#2163)
  • Fixed a correctness bug in Bridges.Constraint.HermitianToSymmetricPSDBridge (#2171)
  • Fixed convert(::VariableIndex, ::ScalarAffineFunction) when the function has terms with 0coefficients (#2173)

Other

  • Fixed solver-tests.yml (#2157)
  • Updated documentation links to developer chatroom (#2160)
  • Added various tests for bridges (#2156)
  • Added checklists to the developer documentation (#2167) (#2168)

v1.15.1 (April 25, 2023)

Fixed

  • Fixed deleting a variable in a bridged objective (#2150)

v1.15.0 (April 19, 2023)

Added

Fixed

Other

  • Add a test for variables in one-sided open Interval sets (#2133)
  • Minor style fixes in the source code (#2148)

v1.14.1 (April 6, 2023)

Fixed

Other

  • Added a warning when an ambiguous string is passed to exclude in Test.runtests (#2136)

v1.14.0 (April 4, 2023)

Added

Fixed

  • Fixed ResultCount when parsing .sol files in FileFormats.NL (#2130)

v1.13.2 (March 21, 2023)

Fixed

Other

  • Fixed typos in the documentation (#2114)
  • Functions now print to the REPL in algebraic form. This is potentially breaking if you have tests which rely on a specific String form of MOI functions. (#2112) (#2126)

v1.13.1 (March 3, 2023)

Other

  • Added the Google style guide to the documentation linter Vale, and fixed the resulting warnings (#2110)
  • Improved the docstrings in src/functions.jl (#2108)

v1.13.0 (February 28, 2023)

Added

Fixed

Other

  • Added tests for vector-valued objective functions in FileFormats.MOF (#2093)
  • Used and documented preference for import MathOptInterface as MOI (#2096)
  • Fix and test links in the documentation with linkcheck = true (#2098)
  • Improved docstrings of sets in src/sets.jl (#2099)
  • Skip checking flakey links in documentation with linkcheck_ignore (#2103)

v1.12.0 (February 10, 2023)

Added

Fixed

  • Fixed a number of constraint bridges so that Bridges.final_touch can be called multiple times without forcing a rebuild of the reformulation (#2089)

Other

v1.11.5 (January 24, 2023)

Fixed

  • Fixed a bug writing .lp files with an off-diagonal quadratic objective (#2082)

Other

  • Added SnoopPrecompile directives for reduced time-to-first-X in Julia v1.9 (#2080)

v1.11.4 (January 12, 2023)

Fixed

  • Fixed a bug reading .lp files with an Integer section (#2078)

v1.11.3 (January 12, 2023)

Fixed

  • Fixed a performance bug when deleting a vector of constraints (#2072)
  • Fixed a bug reading .lp files with terms like x -1 y (#2076)

Other

  • Documented the two-argument method of optimize! (#2074)

v1.11.2 (January 2, 2023)

Fixed

  • Fixed a bug reading .mof.json files with ConstraintName set for VariableIndex constraints (#2066)
  • Fixed a bug reading .mof.json files with nonlinear objectives and no constraints (#2068)

v1.11.1 (December 22, 2022)

Fixed

  • Fixed a bug reading .mof.json files with integer coefficients for affine and quadratic functions (#2063)

v1.11.0 (December 2, 2022)

Added

Other

  • Tidied these release notes (#2055)

v1.10.0 (November 22, 2022)

Added

Fixed

  • Fixed Bridges.Objective.SlackBridge when the objective function is complex-valued (#2036) (#2038)
  • Fixed docstring of Test.runtests to clarify the warn_unsupported argument (#2037)
  • Fixed reading of free variables in FileFormats.LP (#2044)
  • Fixed numerous edge cases reading files from QPLIB using FileFormats.LP (#2042) (#2044)
  • Fixed situations in which x^y returns a complex value in Nonlinear (#2050)

Other

  • Improved the error message thrown when a user-defined nonlinear function does not accept splatted input (#2032)
  • Removed specialized iterators for keys and values in Utilities.CleverDicts (#2051)

v1.9.0 (October 29, 2022)

Added

  • Added default fallback for getting ListOfConstraintIndices and NumberOfConstraints when the constraint type is unsupported by the model (#2021)
  • Added support for min and max in nonlinear expressions (#2023)
  • Added support for Indicator{EqualTo{T}} constraints in FileFormats.MPS (#2022)
  • Added default fallback for write_to_file and read_from_file (#2029)

Fixed

  • Fixed Constraint.ZeroOneBridge by adding new bounds as affine constraints instead of variable bounds (#1879)
  • Fixed reading free rows in FileFormats.MPS files (#2009)
  • Fixed parsing of OBJSENSE blocks in FileFormats.MPS files (#2016) (#2019)
  • Fixed the parsing of deeply nested nonlinear expressions by removing the use of recursion (#2020)
  • Fixed the requirements check in Test.test_constraint_get_ConstraintIndex (#2024)

v1.8.2 (September 20, 2022)

Documentation

  • Added vale as a documentation linter (#2002)
  • Improved styling of code blocks in the PDF (#1999) (#2000)
  • Fixed a number of typos in the documentation (#2001) (#2003)

v1.8.1 (September 12, 2022)

Fixed

  • Fixed a bug in supports(::AbstractBridgeOptimizer for constraint attributes (#1991) (#1992)

v1.8.0 (September 1, 2022)

Added

Fixed

  • Lazily construct expressions in Nonlinear so that expressions are updated when Nonlinear.Parameter values are updated (#1984)
  • Allow NORM_LIMIT as a TerminationStatus for unbounded problems in Test (#1990)

v1.7.0 (August 16, 2022)

Added

Fixed

  • Fixed some missing promotion rules

Other

  • Improved the performance of Jacobian products in Nonlinear
  • Removed an un-needed copy in Utilities.modify_function
  • Various clean-ups in Bridges/bridge_optimizer.jl

v1.6.1 (July 23, 2022)

Fixed

  • Added support for ExponentialCone in MatrixOfConstraints
  • Fix PSDSquare_3 test to reflect a previously fixed bug getting the ConstraintDual of a PositiveSemidefiniteConeSquare constraint

v1.6.0 (July 2, 2022)

Added

  • Added Bridges.needs_final_touch and Bridges.final_touch
  • Added new bridges from constraint programming sets to mixed-integer linear programs:
    • AllDifferentToCountDistinctBridge
    • CountAtLeastToCountBelongsBridge
    • CountBelongsToMILPBridge
    • CountDistinctToMILPBridge
    • CountGreaterThanToMILPBridge
    • CircuitToMILPBridge

Fixed

  • Relax an instance of ::Vector to ::AbstractVector in MOI.Nonlinear
  • Fix BinPackingToMILPBridge to respect variable bounds
  • Fix SemiToBinaryBridge to throw error if other bounds are set

v1.5.0 (June 27, 2022)

Added

  • Added GetAttributeNotAllowed for solvers to indicate when getting an attribute encounters an error
  • Added Utilities.get_fallback support for ObjectiveValue and DualObjectiveValue
  • Added new bridges:
    • RootDetConeSquare to RootDetConeTriangle
    • LogDetConeSquare to LogDetConeTriangle
    • BinPacking to a mixed-integer linear program
    • Table to a mixed-integer linear program
  • Added Bridges.print_active_bridges to display the current optimal hyper-path in a Bridges.LazyBridgeOptimizer

Fixed

  • Fixed ZeroOne tests with lower and upper bounds
  • Fixed error in FileFormats.LP when reading a malformed file
  • Fixed reading of nonlinear programs in FileFormats.MOF
  • Fixed bug in ConstraintDual when using SquareBridge

Other

  • Improved documentation of nonlinear API
  • Documented duality convention for PositiveSemidefiniteConeSquare sets
  • Fixed typo in Bridges.Constraint.QuadToSOCBridge docstring

v1.4.0 (June 9, 2022)

Added

  • Added a number of sets for constraint programming:
    • AllDifferent
    • BinPacking
    • Circuit
    • CountAtLeast
    • CountBelongs
    • CountDistinct
    • CountGreaterThan
    • Cumulative
    • Path
    • Table
  • Added support for user-defined hessians in Nonlinear
  • Added Bridges.runtests to simplify the testing of bridge implementations

Fixed

  • Fixed a bug in FileFormats.NL when writing univariate *

Other

  • Began a large refactoring of the Bridges submodule, with greatly improved documentation.

v1.3.0 (May 27, 2022)

Added

  • Add MOI.Nonlinear submodule. This is a large new submodule that has been refactored from code that was in JuMP. For now, it should be considered experimental.
  • Add FileFormats.NL.SolFileResults(::IO, ::Model)
  • Add FileFormats.NL.read!(::IO, ::Model)
  • Add MOI.modify that accepts a vector of modifications

Fixed

  • Fixed a bug in Test which attempted to include non-.jl files
  • Fixed a bug in FileFormats for models with open interval constraints

Other

  • Fixed a performance issue in Utilities.DoubleDict
  • Various minor improvements to the documentation

v1.2.0 (April 25, 2022)

Added

  • Add support for the FORMAT_REW/.rew file format in FileFormats.

Fixed

  • Fix bug handling of default variable bounds in FileFormats.LP
  • Fix FileFormats.MPS to not write OBJSENSE by default since this is only supported by some readers.

v1.1.2 (March 31, 2022)

Fixed

  • Fix a range of bugs in FileFormats.LP
  • Fix reading of problem dimensions in FileFormats.SDPA

v1.1.1 (March 23, 2022)

Fixed

  • Fix bug in test_model_UpperBoundAlreadySet
  • Fix bug in test_infeasible_ tests
  • Fix bug in test_objective_ObjectiveFunction_blank
  • Relax restriction of MOI.AbstractOptimizer to MOI.ModelLike in Utilities.CachingOptimizer and instantiate.

New tests

  • Add test_conic_empty_matrix that checks conic solvers support problems with no variables.

v1.1.0 (March 2, 2022)

Added

  • Added MOI.Utilities.throw_unsupported(::UniversalFallback) for simplifying solver wrappers which copy from a UniversalFallback.

v1.0.2 (March 1, 2022)

Fixed

  • Fixed a bug in the test_model_ScalarFunctionConstantNotZero test
  • Fixed the error type when an AbstractFunctionConversionBridge cannot get or set an attribute
  • Identified a correctness bug in RSOCtoPSDBridge. We now thrown an error instead of returning an incorrect result.

v1.0.1 (February 25, 2022)

Fixed

  • Fixed a bug in which OptimizerAttributes were not copied in CachingOptimizer
  • Fixed a bug in which shift_constant did not promote mixed types of coefficients
  • Fixed a bug in which deleting a constraint of a bridged variable threw ErrorException instead of MOI.DeleteNotAllowed
  • Fixed a bug in which add_constraint in MatrixOfConstraints did not canonicalize the function
  • Fixed a bug when modifying scalar constants of a function containing a bridged variable
  • Fixed a bug in which final_touch was not always called with a CachingOptimizer

v1.0.0 (February 17, 2022)

Although tagged as a breaking release, v1.0.0 is v0.10.9 with deprecations removed, similar to how Julia 1.0 was Julia 0.7 with deprecations removed.

Breaking

  • Julia 1.6 is now the minimum supported version
  • All deprecations have been removed

Troubleshooting problems when updating

If you experience problems when updating, you are likely using previously deprecated features. (By default, Julia does not warn when you use deprecated features.)

To find the deprecated features you are using, start Julia with --depwarn=yes:

$ julia --depwarn=yes

Then install MathOptInterface v0.10.9:

julia> using Pkg
 julia> pkg"add MathOptInterface@0.10"

And then run your code. Apply any suggestions, or search the release notes below for advice on updating a specific deprecated feature.

v0.10.9 (February 16, 2022)

Added

  • Added MOI.Utilities.FreeVariables as a new VariablesConstrainer for conic solvers
  • Added MOI.default_cache for specifying the model used in CachingOptimizer

Fixed

  • Fixed LaTeX printing of MOI.Interval sets

Other

  • Added Aqua.jl as a CI check, and fixed suggested issues
  • The constructors of GeoMeanBridge, StructOfConstraints, and CachingOptimizer were changed from outer to inner constructors. This change is technically breaking, but does not impact users who followed the documented API.

v0.10.8 (February 3, 2022)

Added

  • Added a Base.read! for FileFormats.LP.

Fixed

  • Fixed a bug in MutableSparseMatrix
  • Fixed a bug when calling operate!(vcat, ...) with Number arguments
  • Removed unintended export of deprecated symbols
  • Fixed a bug with PowerCone and DualPowerCone in MatrixOfConstraints.

v0.10.7 (January 5, 2022)

Added

  • Added test for modifying the constant vector in a VectorAffineFunction-in-Zeros constraint.

Fixed

  • Fixed the order in which sets are added to a LazyBridgeOptimizer. Compared to v0.10.6, this may result in bridged models being created with a different number (and order) of variables and constraints. However, it was necessary to fix cases which were previously rejected as unsupported, even though there was a valid bridge transformation.
  • Fixed an error message in FileFormats.CBF
  • Fixed comparison in test_linear_integration_Interval
  • Fixed errors for ConstraintPrimal in a CachingOptimizer
  • Fixed printing of models with non-Float64 coefficients.

Other

  • Various improvements to reduce time-to-first-solve latency
  • Improved error message when an optimizer does not support compute_conflict!

v0.10.6 (November 30, 2021)

Added

  • Added new documentation and tests for infeasibility certificates
  • Added a version control system for the tests in MOI.Test.runtests. Pass exclude_tests_after = v"0.10.5" to run tests added in v0.10.5 and earlier.
  • MOI.Test.runtests now supports generic number types. To specify the number type T, pass MOI.Test.Config(T).
  • Added infeasible_status to MOI.Test.Config for solvers which return LOCALLY_INFEASIBLE
  • CachingOptimizers now use a fallback for ConstraintPrimal. This should enable solvers using a CachingOptimizer to pass tests requiring ConstraintPrimal.

Fixed

  • Fixed a StackOverflow bug in copy_to
  • Fixed error thrown when nonconvex quadratic constraints cannot be bridged
  • Fixed a bug in copy_to for FileFormats.NL.Model
  • Fixed a bug in FileFormats.NL when printing large integers
  • Remove a common test failure for LowerBoundAlreadySet tests
  • Utilities.num_rows is now exported
  • Remove parts of failing test_model_copy_to_xxx tests due to bridges

v0.10.5 (November 7, 2021)

Fixed

  • Fixed getter in UniversalFallback
  • Fixed test_solve_conflict_zeroone_ii

Other

  • Make normalize_and_add_constraint more flexible
  • Update paper BibTeX

v0.10.4 (October 26, 2021)

Added

  • Add SolverVersion attribute
  • Add new tests:
    • test_solve_conflict_zeroone_ii
    • test_nonlinear_objective
  • Utilities.VariablesContainer now supports ConstraintFunction and ConstraintSet
  • The documentation is now available as a PDF

Other

  • Update to MutableArithmetics 0.3
  • Various improvements to the documentation

v0.10.3 (September 18, 2021)

Fixed

  • Fixed bug which prevented callbacks from working through a CachingOptimizer
  • Fixed bug in Test submodule

v0.10.2 (September 16, 2021)

  • Updated MathOptFormat to v1.0
  • Updated JSONSchema to v1.0
  • Added Utilities.set_with_dimension
  • Added two-argument optimize!(::AbstractOptimizer, ::ModelLike)
  • The experimental feature copy_to_and_optimize! has been removed
  • Det bridges now support getting ConstraintFunction and ConstraintSet
  • Various minor bug fixes identified by improved testing

v0.10.1 (September 8, 2021)

  • Various fixes to MOI.Test

v0.10.0 (September 6, 2021)

MOI v0.10 is a significant breaking release. There are a large number of user-visible breaking changes and code refactors, as well as a substantial number of new features.

Breaking in MOI

  • SingleVariable has been removed; use VariableIndex instead
  • SingleVariableConstraintNameError has been renamed to VariableIndexConstraintNameError
  • SettingSingleVariableFunctionNotAllowed has been renamed to SettingVariableIndexFunctionNotAllowed
  • VariableIndex constraints should not support ConstraintName
  • VariableIndex constraints should not support ConstraintBasisStatus; implement VariableBasisStatus instead
  • ListOfConstraints has been renamed to ListOfConstraintTypesPresent
  • ListOfConstraintTypesPresent should now return Tuple{Type,Type} instead of Tuple{DataType,DataType}
  • SolveTime has been renamed to SolveTimeSec
  • IndicatorSet has been renamed to Indicator
  • RawParameter has been renamed to RawOptimizerAttribute and now takes String instead of Any as the only argument
  • The .N field in result attributes has been renamed to .result_index
  • The .variable_index field in ScalarAffineTerm has been renamed to .variable
  • The .variable_index_1 field in ScalarQuadraticTerm has been renamed to .variable_1
  • The .variable_index_2 field in ScalarQuadraticTerm has been renamed to .variable_2
  • The order of affine_terms and quadratic_terms in ScalarQuadraticFunction and VectorQuadraticFunction have been reversed. Both functions now accept quadratic, affine, and constant terms in that order.
  • The index_value function has been removed. Use .value instead.
  • isapprox has been removed for SOS1 and SOS2.
  • The dimension argument to Complements(dimension::Int) should now be the length of the corresponding function, instead of half the length. An ArgumentError is thrown if dimension is not even.
  • copy_to no longer takes keyword arguments:
    • copy_names: now copy names if they are supported by the destination solver
    • filter_constraints: use Utilities.ModelFilter instead
    • warn_attributes: never warn about optimizer attributes

Breaking in Bridges

  • Constraint.RSOCBridge has been renamed to Constraint.RSOCtoSOCBridge
  • Constraint.SOCRBridge has been renamed to Constraint.SOCtoRSOCBridge
  • Bridges now return vectors that can be modified by the user. Previously, some bridges returned views instead of copies.
  • Bridges.IndexInVector has been unified into a single type. Previously, there was a different type for each submodule within Bridges
  • The signature of indicator bridges has been fixed. Use MOI.Bridges.Constraint.IndicatortoSOS1{Float64}(model).

Breaking in FileFormats

  • FileFormats.MOF.Model no longer accepts validate argument. Use the JSONSchema package to validate the MOF file. See the documentation for more information.

Breaking in Utilities

  • The datastructure of Utilities.Model (and models created with Utilities.@model) has been significantly refactored in a breaking way. This includes the way that objective functions and variable-related information is stored.
  • Utilities.supports_default_copy has been renamed to supports_incremental_interface
  • Utilities.automatic_copy_to has been renamed to Utilities.default_copy_to
  • The allocate-load API has been removed
  • CachingOptimizers are now initialized as EMPTY_OPTIMIZER instead of ATTACHED_OPTIMIZER. If your code relies on the optimizer being attached, call MOIU.attach_optimizer(model) after creation.
  • The field names of Utilities.IndexMap have been renamed to var_map and con_map. Accessing these fields directly is considered a private detail that may change. Use the public getindex and setindex! API instead.
  • The size argument to Utilities.CleverDicts.CleverDict(::Integer) has been removed.
  • The size argument to Utilities.IndexMap(::Integer) has been removed.
  • Utilities.DoubleDicts have been significantly refactored. Consult the source code for details.
  • Utilities.test_models_equal has been moved to MOI.Test

Breaking in Test

  • MOI.Test has been renamed to MOI.DeprecatedTest
  • An entirely new MOI.Test submodule has been written. See the documentation for details. The new MOI.Test submodule may find many bugs in the implementations of existing solvers that were previously untested.

Other changes:

  • attribute_value_type has been added
  • copy_to_and_optimize! has been added
  • VariableBasisStatus has been added
  • print(model) now prints a human-readable description of the model
  • Various improvements to the FileFormats submodule
    • FileFormats.CBF was refactored and received bugfixes
    • Support for MathOptFormat v0.6 was added in FileFormats.MOF
    • FileFormats.MPS has had bugfixes and support for more features such as OBJSENSE and objective constants.
    • FileFormats.NL has been added to support nonlinear files
  • Improved type inference throughout to reduce latency

Updating

A helpful script when updating is:

for (root, dirs, files) in walkdir(".")
     for file in files
         if !endswith(file, ".jl")
@@ -31,4 +31,4 @@
         end
         write(path, s)
     end
-end

v0.9.22 (May 22, 2021)

This release contains backports from the ongoing development of the v0.10 release.

  • Improved type inference in Utilities, Bridges and FileFormats submodules to reduce latency.
  • Improved performance of Utilities.is_canonical.
  • Fixed Utilities.pass_nonvariable_constraints with bridged variables.
  • Fixed performance regression of Utilities.Model.
  • Fixed ordering of objective setting in parser.

v0.9.21 (April 23, 2021)

  • Added supports_shift_constant.
  • Improve performance of bridging quadratic constraints.
  • Add precompilation statements.
  • Large improvements to the documentation.
  • Fix a variety of inference issues, benefiting precompilation and reducing initial latency.
  • RawParameters are now ignored when resetting a CachingOptimizer. Previously, changing the underlying optimizer after RawParameters were set would throw an error.
  • Utilities.AbstractModel is being refactored. This may break users interacting with private fields of a model generated using @model.

v0.9.20 (February 20, 2021)

  • Improved performance of Utilities.ScalarFunctionIterator
  • Added support for compute_conflict to MOI layers
  • Added test with zero off-diagonal quadratic term in objective
  • Fixed double deletion of nested bridged SingleVariable/VectorOfVariables constraints
  • Fixed modification of un-set objective
  • Fixed function modification with duplicate terms
  • Made unit tests abort without failing if the problem class is not supported
  • Formatted code with JuliaFormatter
  • Clarified BasisStatusCode's docstring

v0.9.19 (December 1, 2020)

  • Added CallbackNodeStatus attribute
  • Added bridge from GreaterThan or LessThan to Interval
  • Added tests for infeasibility certificates and double optimize
  • Fixed support for Julia v1.6
  • Re-organized MOI docs and added documentation for adding a test

v0.9.18 (November 3, 2020)

  • Various improvements for working with complex numbers
  • Added GeoMeantoRelEntrBridge to bridge a GeometricMeanCone constraint to a relative entropy constraint

v0.9.17 (September 21, 2020)

  • Fixed CleverDict with variable of negative index value
  • Implement supports_add_constrained_variable for MockOptimizer

v0.9.16 (September 17, 2020)

  • Various fixes:
    • 32-bit support
    • CleverDict with abstract value type
    • Checks in test suite

v0.9.15 (September 14, 2020)

  • Bridges improvements:
    • (R)SOCtoNonConvexQuad bridge
    • ZeroOne bridge
    • Use supports_add_constrained_variable in LazyBridgeOptimizer
    • Exposed VariableBridgeCost and ConstraintBridgeCost attributes
    • Prioritize constraining variables on creation according to these costs
    • Refactor bridge debugging
  • Large performance improvements across all submodules
  • Lots of documentation improvements
  • FileFormats improvements:
    • Update MathOptFormat to v0.5
    • Fix supported objectives in FileFormats
  • Testing improvements:
    • Add name option for basic_constraint_test
  • Bug fixes and missing methods
    • Add length for iterators
    • Fix bug with duplicate terms
    • Fix order of LinearOfConstraintIndices

v0.9.14 (May 30, 2020)

  • Add a solver-independent interface for accessing the set of conflicting constraints an Irreducible Inconsistent Subsystem (#1056).
  • Bump JSONSchema dependency from v0.2 to v0.3 (#1090).
  • Documentation improvements:
    • Fix typos (#1054, #1060, #1061, #1064, #1069, #1070).
    • Remove the outdated recommendation for a package implementing MOI for a solver XXX to be called MathOptInterfaceXXX (#1087).
  • Utilities improvements:
    • Fix is_canonical for quadratic functions (#1081, #1089).
    • Implement add_constrained_variable[s] for CachingOptimizer so that it is added as constrained variables to the underlying optimizer (#1084).
    • Add support for custom objective functions for UniversalFallback (#1086).
    • Deterministic ordering of constraints in UniversalFallback (#1088).
  • Testing improvements:
    • Add NormOneCone/NormInfinityCone tests (#1045).
  • Bridges improvements:
    • Add bridges from Semiinteger and Semicontinuous (#1059).
    • Implement getting ConstraintSet for Variable.FlipSignBridge (#1066).
    • Fix setting ConstraintFunction for Constraint.ScalarizeBridge (#1093).
    • Fix NormOne/NormInf bridges with nonzero constants (#1045).
    • Fix StackOverflow in debug (#1063).
  • FileFormats improvements:
    • [SDPA] Implement the extension for integer variables (#1079).
    • [SDPA] Ignore comments after m and nblocks and detect dat-s extension (#1077).
    • [SDPA] No scaling of off-diagonal coefficient (#1076).
    • [SDPA] Add missing negation of constant (#1075).

v0.9.13 (March 24, 2020)

  • Added tests for Semicontinuous and Semiinteger variables (#1033).
  • Added tests for using ExprGraphs from NLP evaluators (#1043).
  • Update version compatibilities of dependencies (#1034, #1051, #1052).
  • Fixed typos in documentation (#1044).

v0.9.12 (February 28, 2020)

  • Fixed writing NLPBlock in MathOptFormat (#1037).
  • Fixed MockOptimizer for result attributes with non-one result index (#1039).
  • Updated test template with instantiate (#1032).

v0.9.11 (February 21, 2020)

  • Add an option for the model created by Utilities.@model to be a subtype of AbstractOptimizer (#1031).
  • Described dual cone in docstrings of GeoMeanCone and RelativeEntropyCone (#1018, #1028).
  • Fixed typos in documentation (#1022, #1024).
  • Fixed warning of unsupported attribute (#1027).
  • Added more rootdet/logdet conic tests (#1026).
  • Implemented ConstraintDual for Constraint.GeoMeanBridge, Constraint.RootDetBridge and Constraint.LogDetBridge and test duals in tests with GeoMeanCone and RootDetConeTriangle and LogDetConeTriangle cones (#1025, #1026).

v0.9.10 (January 31, 2020)

  • Added OptimizerWithAttributes grouping an optimizer constructor and a list of optimizer attributes (#1008).
  • Added RelativeEntropyCone with corresponding bridge into exponential cone constraints (#993).
  • Added NormSpectralCone and NormNuclearCone with corresponding bridges into positive semidefinite constraints (#976).
  • Added supports_constrained_variable(s) (#1004).
  • Added dual_set_type (#1002).
  • Added tests for vector specialized version of delete (#989, #1011).
  • Added PSD3 test (#1007).
  • Clarified dual solution of Tests.pow1v and Tests.pow1f (#1013).
  • Added support for EqualTo and Zero in Bridges.Constraint.SplitIntervalBridge (#1005).
  • Fixed Utilities.vectorize for empty vector (#1003).
  • Fixed free variables in LP writer (#1006).

v0.9.9 (December 29, 2019)

  • Incorporated MathOptFormat.jl as the FileFormats submodule. FileFormats provides readers and writers for a number of standard file formats and MOF, a file format specialized for MOI (#969).
  • Improved performance of deletion of vector of variables in MOI.Utilities.Model (#983).
  • Updated to MutableArithmetics v0.2 (#981).
  • Added MutableArithmetics.promote_operation allocation tests (#975).
  • Fixed inference issue on Julia v1.1 (#982).

v0.9.8 (December 19, 2019)

  • Implemented MutableArithmetics API (#924).
  • Fixed callbacks with CachingOptimizer (#959).
  • Fixed MOI.dimension for MOI.Complements (#948).
  • Added fallback for add_variables (#972).
  • Added is_diagonal_vectorized_index utility (#965).
  • Improved linear constraints display in manual (#963, #964).
  • Bridges improvements:
    • Added IndicatorSet to SOS1 bridge (#877).
    • Added support for starting values for Variable.VectorizeBridge (#944).
    • Fixed MOI.add_constraints with non-bridged variable constraint on bridged variable (#951).
    • Fixed corner cases and docstring of GeoMeanBridge (#961, #962, #966).
    • Fixed choice between variable or constraint bridges for constrained variables (#973).
    • Improve performance of bridge shortest path (#945, #946, #956).
    • Added docstring for test_delete_bridge (#954).
    • Added Variable bridge tests (#952).

v0.9.7 (October 30, 2019)

  • Implemented _result_index_field for NLPBlockDual (#934).
  • Fixed copy of model with starting values for vector constraints (#941).
  • Bridges improvements:
    • Improved performance of add_bridge and added has_bridge (#935).
    • Added AbstractSetMapBridge for bridges between sets S1, S2 such that there is a linear map A such that A*S1 = S2 (#933).
    • Added support for starting values for FlipSignBridge, VectorizeBridge, ScalarizeBridge, SlackBridge, SplitIntervalBridge, RSOCBridge, SOCRBridge NormInfinityBridge, SOCtoPSDBridge and RSOCtoPSDBridge (#933, #936, #937, #938, #939).

v0.9.6 (October 25, 2019)

  • Added complementarity constraints (#913).
  • Allowed ModelLike objects as value of attributes (#928).
  • Testing improvements:
    • Added dual_objective_value option to MOI.Test.TestConfig (#922).
    • Added InvalidIndex tests in basic_constraint_tests (#921).
    • Added tests for the constant term in indicator constraint (#929).
  • Bridges improvements:
    • Added support for starting values for Functionize bridges (#923).
    • Added variable indices context to variable bridges (#920).
    • Fixed a typo in printing o debug_supports (#927).

v0.9.5 (October 9, 2019)

  • Clarified PrimalStatus/DualStatus to be NO_SOLUTION if result_index is out of bounds (#912).
  • Added tolerance for checks and use ResultCount + 1 for the result_index in MOI.Test.solve_result_status (#910, #917).
  • Use 0.5 instead of 2.0 for power in PowerCone in basic_constraint_test (#916).
  • Bridges improvements:
    • Added debug utilities for unsupported variable/constraint/objective (#861).
    • Fixed deletion of variables in bridged VectorOfVariables constraints (#909).
    • Fixed result_index with objective bridges (#911).

v0.9.4 (October 2, 2019)

  • Added solver-independent MIP callbacks (#782).
  • Implements submit for Utilities.CachingOptimizer and Bridges.AbstractBridgeOptimizer (#906).
  • Added tests for result count of solution attributes (#901, #904).
  • Added NumberOfThreads attribute (#892).
  • Added Utilities.get_bounds to get the bounds on a variable (#890).
  • Added a note on duplicate coefficients in documentation (#581).
  • Added result index in ConstraintBasisStatus (#898).
  • Added extension dictionary to Utilities.Model (#884, #895).
  • Fixed deletion of constrained variables for CachingOptimizer (#905).
  • Implemented Utilities.shift_constraint for Test.UnknownScalarSet (#896).
  • Bridges improvements:
    • Added Variable.RSOCtoSOCBridge (#907).
    • Implemented MOI.get for ConstraintFunction/ConstraintSet for Bridges.Constraint.SquareBridge (#899).

v0.9.3 (September 20, 2019)

  • Fixed ambiguity detected in Julia v1.3 (#891, #893).
  • Fixed missing sets from ListOfSupportedConstraints (#880).
  • Fixed copy of VectorOfVariables constraints with duplicate indices (#886).
  • Added extension dictionary to MOIU.Model (#884).
  • Implemented MOI.get for function and set for GeoMeanBridge (#888).
  • Updated documentation for SingleVariable indices and bridges (#885).
  • Testing improvements:
    • Added more comprehensive tests for names (#882).
    • Added tests for SingleVariable duals (#883).
    • Added tests for DualExponentialCone and DualPowerCone (#873).
  • Improvements for arbitrary coefficient type:
    • Fixed == for sets with mutable fields (#887).
    • Removed some Float64 assumptions in bridges (#878).
    • Automatic selection of Constraint.[Scalar|Vector]FunctionizeBridge (#889).

v0.9.2 (September 5, 2019)

  • Implemented model printing for MOI.ModelLike and specialized it for models defined in MOI (864).
  • Generalized contlinear tests for arbitrary coefficient type (#855).
  • Fixed supports_constraint for Semiinteger and Semicontinuous and supports for ObjectiveFunction (#859).
  • Fixed Allocate-Load copy for single variable constraints (#856).
  • Bridges improvements:
    • Add objective bridges (#789).
    • Fixed Variable.RSOCtoPSDBridge for dimension 2 (#869).
    • Added Variable.SOCtoRSOCBridge (#865).
    • Added Constraint.SOCRBridge and disable MOI.Bridges.Constraint.SOCtoPSDBridge (#751).
    • Fixed added_constraint_types for Contraint.LogDetBridge and Constraint.RootDetBridge (#870).

v0.9.1 (August 22, 2019)

  • Fix support for Julia v1.2 (#834).
  • L1 and L∞ norm epigraph cones and corresponding bridges to LP were added (#818).
  • Added tests to MOI.Test.nametest (#833).
  • Fix MOI.Test.soc3test for solvers not supporting infeasibility certificates (#839).
  • Implements operate for operators * and / between vector function and constant (#837).
  • Implements show for MOI.Utilities.IndexMap (#847).
  • Fix corner cases for mapping of variables in MOI.Utilities.CachingOptimizer and substitution of variables in MOI.Bridges.AbstractBridgeOptimizer (#848).
  • Fix transformation of constant terms for MOI.Bridges.Constraint.SOCtoPSDBridge and MOI.Bridges.Constraint.RSOCtoPSDBridge (#840).

v0.9.0 (August 13, 2019)

  • Support for Julia v0.6 and v0.7 was dropped (#714, #717).
  • A MOI.Utilities.Model implementation of ModelLike, this should replace most use cases of MOI.Utilities.@model (#781).
  • add_constrained_variable and add_constrained_variables were added (#759).
  • Support for indicator constraints was added (#709, #712).
  • DualObjectiveValue attribute was added (#473).
  • RawParameter attribute was added (#733).
  • A dual_set function was added (#804).
  • A Benchmarks submodule was added to facilitate solver benchmarking (#769).
  • A submit function was added, this may for instance allow the user to submit solutions or cuts to the solver from a callback (#775).
  • The field of ObjectiveValue was renamed to result_index (#729).
  • The _constant and Utilities.getconstant function were renamed to constant
  • REDUCTION_CERTIFICATE result status was added (#734).
  • Abstract matrix sets were added (#731).
  • Testing improvements:
    • The testing guideline was updated (#728).
    • Quadratic tests were added (#697).
    • Unit tests for RawStatusString, SolveTime, Silent and SolverName were added (#726, #741).
    • A rotated second-order cone test was added (#759).
    • A power cone test was added (#768).
    • Tests for ZeroOne variables with variable bounds were added (#772).
    • An unbounded test was added (#773).
    • Existing tests had a few updates (#702, #703, #763).
  • Documentation improvements:
    • Added a section on CachingOptimizer (#777).
    • Added a section on UniversalFallback, Model and @model (#762).
    • Transition the knapsack example to a doctest with MockOptimizer (#786).
  • Utilities improvements:
    • A CleverDict utility was added for a vector that automatically transform into a dictionary once a first index is removed (#767).
    • The Utilities.constant function was renamed to Utilities.constant_vector (#740).
    • Implement optimizer attributes for CachingOptimizer (#745).
    • Rename Utilities.add_scalar_constraint to Utilities.normalize_and_add_constraint (#801).
    • operate with vcat, SingleVariable and VectorOfVariables now returns a VectorOfVariables (#616).
    • Fix a type piracy of operate (#784).
    • The load_constraint fallback signature was fixed (#760).
    • The set_dot function was extended to work with sparse arrays (#805).
  • Bridges improvements:
    • The bridges no longer store the constraint function and set before it is bridged, the bridges now have to implement ConstraintFunction and ConstraintSet if the user wants to recover them. As a consequence, the @bridge macro was removed (#722).
    • Bridge are now instantiated with a bridge_constraint function instead of using a constructor (#730).
    • Fix constraint attributes for bridges (#699).
    • Constraint bridges were moved to the Bridges/Constraint submodule so they should now inherit from MOI.Bridges.Constraint.Abstract and should implement MOI.Bridges.Constraint.concrete_bridge_type instead of MOI.Bridges.concrete_bridge_type (#756).
    • Variable bridges were added in (#759).
    • Various improvements (#746, #747).

v0.8.4 (March 13, 2019)

  • Performance improvement in default_copy_to and bridge optimizer (#696).
  • Add Silent and implement setting optimizer attributes in caching and mock optimizers (#695).
  • Add Functionize bridges (SingleVariable and VectorOfVariables) (#659).
  • Minor typo fixes (#694).

v0.8.3 (March 6, 2019)

  • Use zero constant in scalar constraint function of MOI.Test.copytest (#691).
  • Fix variable deletion with SingleVariable objective function (#690).
  • Fix LazyBridgeOptimizer with bridges that add no constraints (#689).
  • Error message improvements (#673, #685, #686, #688).
  • Documentation improvements (#682, #683, #687).
  • Basis status:
    • Remove VariableBasisStatus (#679).
    • Test ConstraintBasisStatus and implement it in bridges (#678).
  • Fix inference of NumberOfVariables and NumberOfConstraints (#677).
  • Implement division between a quadratic function and a number (#675).

v0.8.2 (February 7, 2019)

  • Add RawStatusString attribute (#629).
  • Do not set names to the optimizer but only to the cache in CachingOptimizer (#638).
  • Make scalar MOI functions act as scalars in broadcast (#646).
  • Add function utilities:
    • Implement Base.zero (#634), Base.iszero (#643), add missing arithmetic operations (#644, #645) and fix division (#648).
    • Add a vectorize function that turns a vector of ScalarAffineFunction into a VectorAffineFunction (#642).
  • Improve support for starting values:
    • Show a warning in copy when starting values are not supported instead of throwing an error (#630).
    • Fix UniversalFallback for getting an variable or constraint attribute set to no indices (#623).
    • Add a test in contlineartest with partially set VariablePrimalStart.
  • Bridges improvements:
    • Fix StackOverFlow in LazyBridgeOptimizer when there is a cycle in the graph of bridges.
    • Add Slack bridges (#610, #650).
    • Add FlipSign bridges (#658).
  • Add tests with duplicate coefficients in ScalarAffineFunction and VectorAffineFunction (#639).
  • Use tolerance to compare VariablePrimal in rotatedsoc1 test (#632).
  • Use a zero constant in ScalarAffineFunction of constraints in psdt2 (#622).

v0.8.1 (January 7, 2019)

  • Adding an NLP objective now overrides any objective set using the ObjectiveFunction attribute (#619).
  • Rename fullbridgeoptimizer into full_bridge_optimizer (#621).
  • Allow custom constraint types with full_bridge_optimizer (#617).
  • Add Vectorize bridge which transforms scalar linear constraints into vector linear constraints (#615).

v0.8.0 (December 18, 2018)

  • Rename all enum values to follow the JuMP naming guidelines for constants, for example, Optimal becomes OPTIMAL, and DualInfeasible becomes DUAL_INFEASIBLE.
  • Rename CachingOptimizer methods for style compliance.
  • Add an MOI.TerminationStatusCode called ALMOST_DUAL_INFEASIBLE.

v0.7.0 (December 13, 2018)

  • Test that MOI.TerminationStatus is MOI.OptimizeNotCalled before MOI.optimize! is called.
  • Check supports_default_copy_to in tests (#594).
  • Key pieces of information like optimality, infeasibility, etc., are now reported through TerminationStatusCode. It is typically no longer necessary to check the result statuses in addition to the termination status.
  • Add perspective dimension to log-det cone (#593).

v0.6.4 (November 27, 2018)

  • Add OptimizeNotCalled termination status (#577) and improve documentation of other statuses (#575).
  • Add a solver naming guideline (#578).
  • Make FeasibilitySense the default ObjectiveSense (#579).
  • Fix Utilities.@model and Bridges.@bridge macros for functions and sets defined outside MOI (#582).
  • Document solver-specific attributes (#580) and implement them in Utilities.CachingOptimizer (#565).

v0.6.3 (November 16, 2018)

  • Variables and constraints are now allowed to have duplicate names. An error is thrown only on lookup. This change breaks some existing tests. (#549)
  • Attributes may now be partially set (some values could be nothing). (#563)
  • Performance improvements in Utilities.Model (#549, #567, #568)
  • Fix bug in QuadtoSOC (#558).
  • New supports_default_copy_to method that optimizers should implement to control caching behavior.
  • Documentation improvements.

v0.6.2 (October 26, 2018)

  • Improve hygiene of @model macro (#544).
  • Fix bug in copy tests (#543).
  • Fix bug in UniversalFallback attribute getter (#540).
  • Allow all correct solutions for solve_blank_obj unit test (#537).
  • Add errors for Allocate-Load and bad constraints (#534).
  • [performance] Add specialized implementation of hash for VariableIndex (#533).
  • [performance] Construct the name to object dictionaries lazily in model (#535).
  • Add the QuadtoSOC bridge which transforms ScalarQuadraticFunction constraints into RotatedSecondOrderCone (#483).

v0.6.1 (September 22, 2018)

  • Enable PositiveSemidefiniteConeSquare set and quadratic functions in MOIB.fullbridgeoptimizer (#524).
  • Add warning in the bridge between PositiveSemidefiniteConeSquare and PositiveSemidefiniteConeTriangle when the matrix is almost symmetric (#522).
  • Modify MOIT.copytest to not add multiples constraints on the same variable (#521).
  • Add missing keyword argument in one of MOIU.add_scalar_constraint methods (#520).

v0.6.0 (August 30, 2018)

  • The MOIU.@model and MOIB.@bridge macros now support functions and sets defined in external modules. As a consequence, function and set names in the macro arguments need to be prefixed by module name.
  • Rename functions according to the JuMP style guide:
    • copy! with keyword arguments copynames and warnattributes -> copy_to with keyword arguments copy_names and warn_attributes;
    • set! -> set;
    • addvariable[s]! -> add_variable[s];
    • supportsconstraint -> supports_constraint;
    • addconstraint[s]! -> add_constraint[s];
    • isvalid -> is_valid;
    • isempty -> is_empty;
    • Base.delete! -> delete;
    • modify! -> modify;
    • transform! -> transform;
    • initialize! -> initialize;
    • write -> write_to_file; and
    • read! -> read_from_file.
  • Remove free! (use Base.finalize instead).
  • Add the SquarePSD bridge which transforms PositiveSemidefiniteConeTriangle constraints into PositiveSemidefiniteConeTriangle.
  • Add result fallback for ConstraintDual of variable-wise constraint, ConstraintPrimal and ObjectiveValue.
  • Add tests for ObjectiveBound.
  • Add test for empty rows in vector linear constraint.
  • Rework errors: CannotError has been renamed NotAllowedError and the distinction between UnsupportedError and NotAllowedError is now about whether the element is not supported (for example, it cannot be copied a model containing this element) or the operation is not allowed (either because it is not implemented, because it cannot be performed in the current state of the model, or because it cannot be performed for a specific index)
  • canget is removed. NoSolution is added as a result status to indicate that the solver does not have either a primal or dual solution available (See #479).

v0.5.0 (August 5, 2018)

  • Fix names with CachingOptimizer.
  • Cleanup thanks to @mohamed82008.
  • Added a universal fallback for constraints.
  • Fast utilities for function canonicalization thanks to @rdeits.
  • Renamed dimension field to side_dimension in the context of matrix-like sets.
  • New and improved tests for cases like duplicate terms and ObjectiveBound.
  • Removed cantransform, canaddconstraint, canaddvariable, canset, canmodify, and candelete functions from the API. They are replaced by a new set of errors that are thrown: Subtypes of UnsupportedError indicate unsupported operations, while subtypes of CannotError indicate operations that cannot be performed in the current state.
  • The API for copy! is updated to remove the CopyResult type.
  • Updates for the new JuMP style guide.

v0.4.1 (June 28, 2018)

  • Fixes vector function modification on 32 bits.
  • Fixes Bellman-Ford algorithm for bridges.
  • Added an NLP test with FeasibilitySense.
  • Update modification documentation.

v0.4.0 (June 23, 2018)

  • Helper constructors for VectorAffineTerm and VectorQuadraticTerm.
  • Added modify_lhs to TestConfig.
  • Additional unit tests for optimizers.
  • Added a type parameter to CachingOptimizer for the optimizer field.
  • New API for problem modification (#388)
  • Tests pass without deprecation warnings on Julia 0.7.
  • Small fixes and documentation updates.

v0.3.0 (May 25, 2018)

  • Functions have been redefined to use arrays-of-structs instead of structs-of-arrays.
  • Improvements to MockOptimizer.
  • Significant changes to Bridges.
  • New and improved unit tests.
  • Fixes for Julia 0.7.

v0.2.0 (April 24, 2018)

  • Improvements to and better coverage of Tests.
  • Documentation fixes.
  • SolverName attribute.
  • Changes to the NLP interface (new definition of variable order and arrays of structs for bound pairs and sparsity patterns).
  • Addition of NLP tests.
  • Introduction of UniversalFallback.
  • copynames keyword argument to MOI.copy!.
  • Add Bridges submodule.

v0.1.0 (February 28, 2018)

  • Initial public release.
  • The framework for MOI was developed at the JuMP-dev workshop at MIT in June 2017 as a sorely needed replacement for MathProgBase.
+end

v0.9.22 (May 22, 2021)

This release contains backports from the ongoing development of the v0.10 release.

  • Improved type inference in Utilities, Bridges and FileFormats submodules to reduce latency.
  • Improved performance of Utilities.is_canonical.
  • Fixed Utilities.pass_nonvariable_constraints with bridged variables.
  • Fixed performance regression of Utilities.Model.
  • Fixed ordering of objective setting in parser.

v0.9.21 (April 23, 2021)

  • Added supports_shift_constant.
  • Improve performance of bridging quadratic constraints.
  • Add precompilation statements.
  • Large improvements to the documentation.
  • Fix a variety of inference issues, benefiting precompilation and reducing initial latency.
  • RawParameters are now ignored when resetting a CachingOptimizer. Previously, changing the underlying optimizer after RawParameters were set would throw an error.
  • Utilities.AbstractModel is being refactored. This may break users interacting with private fields of a model generated using @model.

v0.9.20 (February 20, 2021)

  • Improved performance of Utilities.ScalarFunctionIterator
  • Added support for compute_conflict to MOI layers
  • Added test with zero off-diagonal quadratic term in objective
  • Fixed double deletion of nested bridged SingleVariable/VectorOfVariables constraints
  • Fixed modification of un-set objective
  • Fixed function modification with duplicate terms
  • Made unit tests abort without failing if the problem class is not supported
  • Formatted code with JuliaFormatter
  • Clarified BasisStatusCode's docstring

v0.9.19 (December 1, 2020)

  • Added CallbackNodeStatus attribute
  • Added bridge from GreaterThan or LessThan to Interval
  • Added tests for infeasibility certificates and double optimize
  • Fixed support for Julia v1.6
  • Re-organized MOI docs and added documentation for adding a test

v0.9.18 (November 3, 2020)

  • Various improvements for working with complex numbers
  • Added GeoMeantoRelEntrBridge to bridge a GeometricMeanCone constraint to a relative entropy constraint

v0.9.17 (September 21, 2020)

  • Fixed CleverDict with variable of negative index value
  • Implement supports_add_constrained_variable for MockOptimizer

v0.9.16 (September 17, 2020)

  • Various fixes:
    • 32-bit support
    • CleverDict with abstract value type
    • Checks in test suite

v0.9.15 (September 14, 2020)

  • Bridges improvements:
    • (R)SOCtoNonConvexQuad bridge
    • ZeroOne bridge
    • Use supports_add_constrained_variable in LazyBridgeOptimizer
    • Exposed VariableBridgeCost and ConstraintBridgeCost attributes
    • Prioritize constraining variables on creation according to these costs
    • Refactor bridge debugging
  • Large performance improvements across all submodules
  • Lots of documentation improvements
  • FileFormats improvements:
    • Update MathOptFormat to v0.5
    • Fix supported objectives in FileFormats
  • Testing improvements:
    • Add name option for basic_constraint_test
  • Bug fixes and missing methods
    • Add length for iterators
    • Fix bug with duplicate terms
    • Fix order of LinearOfConstraintIndices

v0.9.14 (May 30, 2020)

  • Add a solver-independent interface for accessing the set of conflicting constraints an Irreducible Inconsistent Subsystem (#1056).
  • Bump JSONSchema dependency from v0.2 to v0.3 (#1090).
  • Documentation improvements:
    • Fix typos (#1054, #1060, #1061, #1064, #1069, #1070).
    • Remove the outdated recommendation for a package implementing MOI for a solver XXX to be called MathOptInterfaceXXX (#1087).
  • Utilities improvements:
    • Fix is_canonical for quadratic functions (#1081, #1089).
    • Implement add_constrained_variable[s] for CachingOptimizer so that it is added as constrained variables to the underlying optimizer (#1084).
    • Add support for custom objective functions for UniversalFallback (#1086).
    • Deterministic ordering of constraints in UniversalFallback (#1088).
  • Testing improvements:
    • Add NormOneCone/NormInfinityCone tests (#1045).
  • Bridges improvements:
    • Add bridges from Semiinteger and Semicontinuous (#1059).
    • Implement getting ConstraintSet for Variable.FlipSignBridge (#1066).
    • Fix setting ConstraintFunction for Constraint.ScalarizeBridge (#1093).
    • Fix NormOne/NormInf bridges with nonzero constants (#1045).
    • Fix StackOverflow in debug (#1063).
  • FileFormats improvements:
    • [SDPA] Implement the extension for integer variables (#1079).
    • [SDPA] Ignore comments after m and nblocks and detect dat-s extension (#1077).
    • [SDPA] No scaling of off-diagonal coefficient (#1076).
    • [SDPA] Add missing negation of constant (#1075).

v0.9.13 (March 24, 2020)

  • Added tests for Semicontinuous and Semiinteger variables (#1033).
  • Added tests for using ExprGraphs from NLP evaluators (#1043).
  • Update version compatibilities of dependencies (#1034, #1051, #1052).
  • Fixed typos in documentation (#1044).

v0.9.12 (February 28, 2020)

  • Fixed writing NLPBlock in MathOptFormat (#1037).
  • Fixed MockOptimizer for result attributes with non-one result index (#1039).
  • Updated test template with instantiate (#1032).

v0.9.11 (February 21, 2020)

  • Add an option for the model created by Utilities.@model to be a subtype of AbstractOptimizer (#1031).
  • Described dual cone in docstrings of GeoMeanCone and RelativeEntropyCone (#1018, #1028).
  • Fixed typos in documentation (#1022, #1024).
  • Fixed warning of unsupported attribute (#1027).
  • Added more rootdet/logdet conic tests (#1026).
  • Implemented ConstraintDual for Constraint.GeoMeanBridge, Constraint.RootDetBridge and Constraint.LogDetBridge and test duals in tests with GeoMeanCone and RootDetConeTriangle and LogDetConeTriangle cones (#1025, #1026).

v0.9.10 (January 31, 2020)

  • Added OptimizerWithAttributes grouping an optimizer constructor and a list of optimizer attributes (#1008).
  • Added RelativeEntropyCone with corresponding bridge into exponential cone constraints (#993).
  • Added NormSpectralCone and NormNuclearCone with corresponding bridges into positive semidefinite constraints (#976).
  • Added supports_constrained_variable(s) (#1004).
  • Added dual_set_type (#1002).
  • Added tests for vector specialized version of delete (#989, #1011).
  • Added PSD3 test (#1007).
  • Clarified dual solution of Tests.pow1v and Tests.pow1f (#1013).
  • Added support for EqualTo and Zero in Bridges.Constraint.SplitIntervalBridge (#1005).
  • Fixed Utilities.vectorize for empty vector (#1003).
  • Fixed free variables in LP writer (#1006).

v0.9.9 (December 29, 2019)

  • Incorporated MathOptFormat.jl as the FileFormats submodule. FileFormats provides readers and writers for a number of standard file formats and MOF, a file format specialized for MOI (#969).
  • Improved performance of deletion of vector of variables in MOI.Utilities.Model (#983).
  • Updated to MutableArithmetics v0.2 (#981).
  • Added MutableArithmetics.promote_operation allocation tests (#975).
  • Fixed inference issue on Julia v1.1 (#982).

v0.9.8 (December 19, 2019)

  • Implemented MutableArithmetics API (#924).
  • Fixed callbacks with CachingOptimizer (#959).
  • Fixed MOI.dimension for MOI.Complements (#948).
  • Added fallback for add_variables (#972).
  • Added is_diagonal_vectorized_index utility (#965).
  • Improved linear constraints display in manual (#963, #964).
  • Bridges improvements:
    • Added IndicatorSet to SOS1 bridge (#877).
    • Added support for starting values for Variable.VectorizeBridge (#944).
    • Fixed MOI.add_constraints with non-bridged variable constraint on bridged variable (#951).
    • Fixed corner cases and docstring of GeoMeanBridge (#961, #962, #966).
    • Fixed choice between variable or constraint bridges for constrained variables (#973).
    • Improve performance of bridge shortest path (#945, #946, #956).
    • Added docstring for test_delete_bridge (#954).
    • Added Variable bridge tests (#952).

v0.9.7 (October 30, 2019)

  • Implemented _result_index_field for NLPBlockDual (#934).
  • Fixed copy of model with starting values for vector constraints (#941).
  • Bridges improvements:
    • Improved performance of add_bridge and added has_bridge (#935).
    • Added AbstractSetMapBridge for bridges between sets S1, S2 such that there is a linear map A such that A*S1 = S2 (#933).
    • Added support for starting values for FlipSignBridge, VectorizeBridge, ScalarizeBridge, SlackBridge, SplitIntervalBridge, RSOCBridge, SOCRBridge NormInfinityBridge, SOCtoPSDBridge and RSOCtoPSDBridge (#933, #936, #937, #938, #939).

v0.9.6 (October 25, 2019)

  • Added complementarity constraints (#913).
  • Allowed ModelLike objects as value of attributes (#928).
  • Testing improvements:
    • Added dual_objective_value option to MOI.Test.TestConfig (#922).
    • Added InvalidIndex tests in basic_constraint_tests (#921).
    • Added tests for the constant term in indicator constraint (#929).
  • Bridges improvements:
    • Added support for starting values for Functionize bridges (#923).
    • Added variable indices context to variable bridges (#920).
    • Fixed a typo in printing o debug_supports (#927).

v0.9.5 (October 9, 2019)

  • Clarified PrimalStatus/DualStatus to be NO_SOLUTION if result_index is out of bounds (#912).
  • Added tolerance for checks and use ResultCount + 1 for the result_index in MOI.Test.solve_result_status (#910, #917).
  • Use 0.5 instead of 2.0 for power in PowerCone in basic_constraint_test (#916).
  • Bridges improvements:
    • Added debug utilities for unsupported variable/constraint/objective (#861).
    • Fixed deletion of variables in bridged VectorOfVariables constraints (#909).
    • Fixed result_index with objective bridges (#911).

v0.9.4 (October 2, 2019)

  • Added solver-independent MIP callbacks (#782).
  • Implements submit for Utilities.CachingOptimizer and Bridges.AbstractBridgeOptimizer (#906).
  • Added tests for result count of solution attributes (#901, #904).
  • Added NumberOfThreads attribute (#892).
  • Added Utilities.get_bounds to get the bounds on a variable (#890).
  • Added a note on duplicate coefficients in documentation (#581).
  • Added result index in ConstraintBasisStatus (#898).
  • Added extension dictionary to Utilities.Model (#884, #895).
  • Fixed deletion of constrained variables for CachingOptimizer (#905).
  • Implemented Utilities.shift_constraint for Test.UnknownScalarSet (#896).
  • Bridges improvements:
    • Added Variable.RSOCtoSOCBridge (#907).
    • Implemented MOI.get for ConstraintFunction/ConstraintSet for Bridges.Constraint.SquareBridge (#899).

v0.9.3 (September 20, 2019)

  • Fixed ambiguity detected in Julia v1.3 (#891, #893).
  • Fixed missing sets from ListOfSupportedConstraints (#880).
  • Fixed copy of VectorOfVariables constraints with duplicate indices (#886).
  • Added extension dictionary to MOIU.Model (#884).
  • Implemented MOI.get for function and set for GeoMeanBridge (#888).
  • Updated documentation for SingleVariable indices and bridges (#885).
  • Testing improvements:
    • Added more comprehensive tests for names (#882).
    • Added tests for SingleVariable duals (#883).
    • Added tests for DualExponentialCone and DualPowerCone (#873).
  • Improvements for arbitrary coefficient type:
    • Fixed == for sets with mutable fields (#887).
    • Removed some Float64 assumptions in bridges (#878).
    • Automatic selection of Constraint.[Scalar|Vector]FunctionizeBridge (#889).

v0.9.2 (September 5, 2019)

  • Implemented model printing for MOI.ModelLike and specialized it for models defined in MOI (864).
  • Generalized contlinear tests for arbitrary coefficient type (#855).
  • Fixed supports_constraint for Semiinteger and Semicontinuous and supports for ObjectiveFunction (#859).
  • Fixed Allocate-Load copy for single variable constraints (#856).
  • Bridges improvements:
    • Add objective bridges (#789).
    • Fixed Variable.RSOCtoPSDBridge for dimension 2 (#869).
    • Added Variable.SOCtoRSOCBridge (#865).
    • Added Constraint.SOCRBridge and disable MOI.Bridges.Constraint.SOCtoPSDBridge (#751).
    • Fixed added_constraint_types for Contraint.LogDetBridge and Constraint.RootDetBridge (#870).

v0.9.1 (August 22, 2019)

  • Fix support for Julia v1.2 (#834).
  • L1 and L∞ norm epigraph cones and corresponding bridges to LP were added (#818).
  • Added tests to MOI.Test.nametest (#833).
  • Fix MOI.Test.soc3test for solvers not supporting infeasibility certificates (#839).
  • Implements operate for operators * and / between vector function and constant (#837).
  • Implements show for MOI.Utilities.IndexMap (#847).
  • Fix corner cases for mapping of variables in MOI.Utilities.CachingOptimizer and substitution of variables in MOI.Bridges.AbstractBridgeOptimizer (#848).
  • Fix transformation of constant terms for MOI.Bridges.Constraint.SOCtoPSDBridge and MOI.Bridges.Constraint.RSOCtoPSDBridge (#840).

v0.9.0 (August 13, 2019)

  • Support for Julia v0.6 and v0.7 was dropped (#714, #717).
  • A MOI.Utilities.Model implementation of ModelLike, this should replace most use cases of MOI.Utilities.@model (#781).
  • add_constrained_variable and add_constrained_variables were added (#759).
  • Support for indicator constraints was added (#709, #712).
  • DualObjectiveValue attribute was added (#473).
  • RawParameter attribute was added (#733).
  • A dual_set function was added (#804).
  • A Benchmarks submodule was added to facilitate solver benchmarking (#769).
  • A submit function was added, this may for instance allow the user to submit solutions or cuts to the solver from a callback (#775).
  • The field of ObjectiveValue was renamed to result_index (#729).
  • The _constant and Utilities.getconstant function were renamed to constant
  • REDUCTION_CERTIFICATE result status was added (#734).
  • Abstract matrix sets were added (#731).
  • Testing improvements:
    • The testing guideline was updated (#728).
    • Quadratic tests were added (#697).
    • Unit tests for RawStatusString, SolveTime, Silent and SolverName were added (#726, #741).
    • A rotated second-order cone test was added (#759).
    • A power cone test was added (#768).
    • Tests for ZeroOne variables with variable bounds were added (#772).
    • An unbounded test was added (#773).
    • Existing tests had a few updates (#702, #703, #763).
  • Documentation improvements:
    • Added a section on CachingOptimizer (#777).
    • Added a section on UniversalFallback, Model and @model (#762).
    • Transition the knapsack example to a doctest with MockOptimizer (#786).
  • Utilities improvements:
    • A CleverDict utility was added for a vector that automatically transform into a dictionary once a first index is removed (#767).
    • The Utilities.constant function was renamed to Utilities.constant_vector (#740).
    • Implement optimizer attributes for CachingOptimizer (#745).
    • Rename Utilities.add_scalar_constraint to Utilities.normalize_and_add_constraint (#801).
    • operate with vcat, SingleVariable and VectorOfVariables now returns a VectorOfVariables (#616).
    • Fix a type piracy of operate (#784).
    • The load_constraint fallback signature was fixed (#760).
    • The set_dot function was extended to work with sparse arrays (#805).
  • Bridges improvements:
    • The bridges no longer store the constraint function and set before it is bridged, the bridges now have to implement ConstraintFunction and ConstraintSet if the user wants to recover them. As a consequence, the @bridge macro was removed (#722).
    • Bridge are now instantiated with a bridge_constraint function instead of using a constructor (#730).
    • Fix constraint attributes for bridges (#699).
    • Constraint bridges were moved to the Bridges/Constraint submodule so they should now inherit from MOI.Bridges.Constraint.Abstract and should implement MOI.Bridges.Constraint.concrete_bridge_type instead of MOI.Bridges.concrete_bridge_type (#756).
    • Variable bridges were added in (#759).
    • Various improvements (#746, #747).

v0.8.4 (March 13, 2019)

  • Performance improvement in default_copy_to and bridge optimizer (#696).
  • Add Silent and implement setting optimizer attributes in caching and mock optimizers (#695).
  • Add Functionize bridges (SingleVariable and VectorOfVariables) (#659).
  • Minor typo fixes (#694).

v0.8.3 (March 6, 2019)

  • Use zero constant in scalar constraint function of MOI.Test.copytest (#691).
  • Fix variable deletion with SingleVariable objective function (#690).
  • Fix LazyBridgeOptimizer with bridges that add no constraints (#689).
  • Error message improvements (#673, #685, #686, #688).
  • Documentation improvements (#682, #683, #687).
  • Basis status:
    • Remove VariableBasisStatus (#679).
    • Test ConstraintBasisStatus and implement it in bridges (#678).
  • Fix inference of NumberOfVariables and NumberOfConstraints (#677).
  • Implement division between a quadratic function and a number (#675).

v0.8.2 (February 7, 2019)

  • Add RawStatusString attribute (#629).
  • Do not set names to the optimizer but only to the cache in CachingOptimizer (#638).
  • Make scalar MOI functions act as scalars in broadcast (#646).
  • Add function utilities:
    • Implement Base.zero (#634), Base.iszero (#643), add missing arithmetic operations (#644, #645) and fix division (#648).
    • Add a vectorize function that turns a vector of ScalarAffineFunction into a VectorAffineFunction (#642).
  • Improve support for starting values:
    • Show a warning in copy when starting values are not supported instead of throwing an error (#630).
    • Fix UniversalFallback for getting an variable or constraint attribute set to no indices (#623).
    • Add a test in contlineartest with partially set VariablePrimalStart.
  • Bridges improvements:
    • Fix StackOverFlow in LazyBridgeOptimizer when there is a cycle in the graph of bridges.
    • Add Slack bridges (#610, #650).
    • Add FlipSign bridges (#658).
  • Add tests with duplicate coefficients in ScalarAffineFunction and VectorAffineFunction (#639).
  • Use tolerance to compare VariablePrimal in rotatedsoc1 test (#632).
  • Use a zero constant in ScalarAffineFunction of constraints in psdt2 (#622).

v0.8.1 (January 7, 2019)

  • Adding an NLP objective now overrides any objective set using the ObjectiveFunction attribute (#619).
  • Rename fullbridgeoptimizer into full_bridge_optimizer (#621).
  • Allow custom constraint types with full_bridge_optimizer (#617).
  • Add Vectorize bridge which transforms scalar linear constraints into vector linear constraints (#615).

v0.8.0 (December 18, 2018)

  • Rename all enum values to follow the JuMP naming guidelines for constants, for example, Optimal becomes OPTIMAL, and DualInfeasible becomes DUAL_INFEASIBLE.
  • Rename CachingOptimizer methods for style compliance.
  • Add an MOI.TerminationStatusCode called ALMOST_DUAL_INFEASIBLE.

v0.7.0 (December 13, 2018)

  • Test that MOI.TerminationStatus is MOI.OptimizeNotCalled before MOI.optimize! is called.
  • Check supports_default_copy_to in tests (#594).
  • Key pieces of information like optimality, infeasibility, etc., are now reported through TerminationStatusCode. It is typically no longer necessary to check the result statuses in addition to the termination status.
  • Add perspective dimension to log-det cone (#593).

v0.6.4 (November 27, 2018)

  • Add OptimizeNotCalled termination status (#577) and improve documentation of other statuses (#575).
  • Add a solver naming guideline (#578).
  • Make FeasibilitySense the default ObjectiveSense (#579).
  • Fix Utilities.@model and Bridges.@bridge macros for functions and sets defined outside MOI (#582).
  • Document solver-specific attributes (#580) and implement them in Utilities.CachingOptimizer (#565).

v0.6.3 (November 16, 2018)

  • Variables and constraints are now allowed to have duplicate names. An error is thrown only on lookup. This change breaks some existing tests. (#549)
  • Attributes may now be partially set (some values could be nothing). (#563)
  • Performance improvements in Utilities.Model (#549, #567, #568)
  • Fix bug in QuadtoSOC (#558).
  • New supports_default_copy_to method that optimizers should implement to control caching behavior.
  • Documentation improvements.

v0.6.2 (October 26, 2018)

  • Improve hygiene of @model macro (#544).
  • Fix bug in copy tests (#543).
  • Fix bug in UniversalFallback attribute getter (#540).
  • Allow all correct solutions for solve_blank_obj unit test (#537).
  • Add errors for Allocate-Load and bad constraints (#534).
  • [performance] Add specialized implementation of hash for VariableIndex (#533).
  • [performance] Construct the name to object dictionaries lazily in model (#535).
  • Add the QuadtoSOC bridge which transforms ScalarQuadraticFunction constraints into RotatedSecondOrderCone (#483).

v0.6.1 (September 22, 2018)

  • Enable PositiveSemidefiniteConeSquare set and quadratic functions in MOIB.fullbridgeoptimizer (#524).
  • Add warning in the bridge between PositiveSemidefiniteConeSquare and PositiveSemidefiniteConeTriangle when the matrix is almost symmetric (#522).
  • Modify MOIT.copytest to not add multiples constraints on the same variable (#521).
  • Add missing keyword argument in one of MOIU.add_scalar_constraint methods (#520).

v0.6.0 (August 30, 2018)

  • The MOIU.@model and MOIB.@bridge macros now support functions and sets defined in external modules. As a consequence, function and set names in the macro arguments need to be prefixed by module name.
  • Rename functions according to the JuMP style guide:
    • copy! with keyword arguments copynames and warnattributes -> copy_to with keyword arguments copy_names and warn_attributes;
    • set! -> set;
    • addvariable[s]! -> add_variable[s];
    • supportsconstraint -> supports_constraint;
    • addconstraint[s]! -> add_constraint[s];
    • isvalid -> is_valid;
    • isempty -> is_empty;
    • Base.delete! -> delete;
    • modify! -> modify;
    • transform! -> transform;
    • initialize! -> initialize;
    • write -> write_to_file; and
    • read! -> read_from_file.
  • Remove free! (use Base.finalize instead).
  • Add the SquarePSD bridge which transforms PositiveSemidefiniteConeTriangle constraints into PositiveSemidefiniteConeTriangle.
  • Add result fallback for ConstraintDual of variable-wise constraint, ConstraintPrimal and ObjectiveValue.
  • Add tests for ObjectiveBound.
  • Add test for empty rows in vector linear constraint.
  • Rework errors: CannotError has been renamed NotAllowedError and the distinction between UnsupportedError and NotAllowedError is now about whether the element is not supported (for example, it cannot be copied a model containing this element) or the operation is not allowed (either because it is not implemented, because it cannot be performed in the current state of the model, or because it cannot be performed for a specific index)
  • canget is removed. NoSolution is added as a result status to indicate that the solver does not have either a primal or dual solution available (See #479).

v0.5.0 (August 5, 2018)

  • Fix names with CachingOptimizer.
  • Cleanup thanks to @mohamed82008.
  • Added a universal fallback for constraints.
  • Fast utilities for function canonicalization thanks to @rdeits.
  • Renamed dimension field to side_dimension in the context of matrix-like sets.
  • New and improved tests for cases like duplicate terms and ObjectiveBound.
  • Removed cantransform, canaddconstraint, canaddvariable, canset, canmodify, and candelete functions from the API. They are replaced by a new set of errors that are thrown: Subtypes of UnsupportedError indicate unsupported operations, while subtypes of CannotError indicate operations that cannot be performed in the current state.
  • The API for copy! is updated to remove the CopyResult type.
  • Updates for the new JuMP style guide.

v0.4.1 (June 28, 2018)

  • Fixes vector function modification on 32 bits.
  • Fixes Bellman-Ford algorithm for bridges.
  • Added an NLP test with FeasibilitySense.
  • Update modification documentation.

v0.4.0 (June 23, 2018)

  • Helper constructors for VectorAffineTerm and VectorQuadraticTerm.
  • Added modify_lhs to TestConfig.
  • Additional unit tests for optimizers.
  • Added a type parameter to CachingOptimizer for the optimizer field.
  • New API for problem modification (#388)
  • Tests pass without deprecation warnings on Julia 0.7.
  • Small fixes and documentation updates.

v0.3.0 (May 25, 2018)

  • Functions have been redefined to use arrays-of-structs instead of structs-of-arrays.
  • Improvements to MockOptimizer.
  • Significant changes to Bridges.
  • New and improved unit tests.
  • Fixes for Julia 0.7.

v0.2.0 (April 24, 2018)

  • Improvements to and better coverage of Tests.
  • Documentation fixes.
  • SolverName attribute.
  • Changes to the NLP interface (new definition of variable order and arrays of structs for bound pairs and sparsity patterns).
  • Addition of NLP tests.
  • Introduction of UniversalFallback.
  • copynames keyword argument to MOI.copy!.
  • Add Bridges submodule.

v0.1.0 (February 28, 2018)

  • Initial public release.
  • The framework for MOI was developed at the JuMP-dev workshop at MIT in June 2017 as a sorely needed replacement for MathProgBase.
diff --git a/dev/moi/developer/checklists/index.html b/dev/moi/developer/checklists/index.html index 6d5b3f8f3ef..23b958e7f0a 100644 --- a/dev/moi/developer/checklists/index.html +++ b/dev/moi/developer/checklists/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Checklists

The purpose of this page is to collate a series of checklists for commonly performed changes to the source code of MathOptInterface.

In each case, copy the checklist into the description of the pull request.

Making a release

Use this checklist when making a release of the MathOptInterface repository.

## Basic
+

Checklists

The purpose of this page is to collate a series of checklists for commonly performed changes to the source code of MathOptInterface.

In each case, copy the checklist into the description of the pull request.

Making a release

Use this checklist when making a release of the MathOptInterface repository.

## Basic
 
  - [ ] `version` field of `Project.toml` has been updated
        - If a breaking change, increment the MAJOR field and reset others to 0
@@ -112,4 +112,4 @@
 
 ## Documentation
 
- - [ ] The version fields are updated in `docs/src/submodules/FileFormats/overview.md`
+ - [ ] The version fields are updated in `docs/src/submodules/FileFormats/overview.md`
diff --git a/dev/moi/index.html b/dev/moi/index.html index 4169eb6e43a..91654c0225a 100644 --- a/dev/moi/index.html +++ b/dev/moi/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Introduction

Warning

This documentation in this section is a copy of the official MathOptInterface documentation available at https://jump.dev/MathOptInterface.jl/v1.31.2. It is included here to make it easier to link concepts between JuMP and MathOptInterface.

What is MathOptInterface?

MathOptInterface.jl (MOI) is an abstraction layer designed to provide a unified interface to mathematical optimization solvers so that users do not need to understand multiple solver-specific APIs.

Tip

This documentation is aimed at developers writing software interfaces to solvers and modeling languages using the MathOptInterface API. If you are a user interested in solving optimization problems, we encourage you instead to use MOI through a higher-level modeling interface like JuMP or Convex.jl.

How the documentation is structured

Having a high-level overview of how this documentation is structured will help you know where to look for certain things.

  • The Tutorials section contains articles on how to use and implement the MathOptInteraface API. Look here if you want to write a model in MOI, or write an interface to a new solver.
  • The Manual contains short code-snippets that explain how to use the MOI API. Look here for more details on particular areas of MOI.
  • The Background section contains articles on the theory behind MathOptInterface. Look here if you want to understand why, rather than how.
  • The API Reference contains a complete list of functions and types that comprise the MOI API. Look here is you want to know how to use (or implement) a particular function.
  • The Submodules section contains stand-alone documentation for each of the submodules within MOI. These submodules are not required to interface a solver with MOI, but they make the job much easier.

Citing MathOptInterface

If you find MathOptInterface useful in your work, we kindly request that you cite the following paper:

@article{legat2021mathoptinterface,
+

Introduction

Warning

This documentation in this section is a copy of the official MathOptInterface documentation available at https://jump.dev/MathOptInterface.jl/v1.31.2. It is included here to make it easier to link concepts between JuMP and MathOptInterface.

What is MathOptInterface?

MathOptInterface.jl (MOI) is an abstraction layer designed to provide a unified interface to mathematical optimization solvers so that users do not need to understand multiple solver-specific APIs.

Tip

This documentation is aimed at developers writing software interfaces to solvers and modeling languages using the MathOptInterface API. If you are a user interested in solving optimization problems, we encourage you instead to use MOI through a higher-level modeling interface like JuMP or Convex.jl.

How the documentation is structured

Having a high-level overview of how this documentation is structured will help you know where to look for certain things.

  • The Tutorials section contains articles on how to use and implement the MathOptInteraface API. Look here if you want to write a model in MOI, or write an interface to a new solver.
  • The Manual contains short code-snippets that explain how to use the MOI API. Look here for more details on particular areas of MOI.
  • The Background section contains articles on the theory behind MathOptInterface. Look here if you want to understand why, rather than how.
  • The API Reference contains a complete list of functions and types that comprise the MOI API. Look here is you want to know how to use (or implement) a particular function.
  • The Submodules section contains stand-alone documentation for each of the submodules within MOI. These submodules are not required to interface a solver with MOI, but they make the job much easier.

Citing MathOptInterface

If you find MathOptInterface useful in your work, we kindly request that you cite the following paper:

@article{legat2021mathoptinterface,
     title={{MathOptInterface}: a data structure for mathematical optimization problems},
     author={Legat, Beno{\^\i}t and Dowson, Oscar and Garcia, Joaquim Dias and Lubin, Miles},
     journal={INFORMS Journal on Computing},
     year={2021},
     doi={10.1287/ijoc.2021.1067},
     publisher={INFORMS}
-}

A preprint of this paper is freely available.

+}

A preprint of this paper is freely available.

diff --git a/dev/moi/manual/constraints/index.html b/dev/moi/manual/constraints/index.html index 4777617b0ef..0d8b9bc875d 100644 --- a/dev/moi/manual/constraints/index.html +++ b/dev/moi/manual/constraints/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Constraints

Add a constraint

Use add_constraint to add a single constraint.

julia> c = MOI.add_constraint(model, MOI.VectorOfVariables(x), MOI.Nonnegatives(2))
+

Constraints

Add a constraint

Use add_constraint to add a single constraint.

julia> c = MOI.add_constraint(model, MOI.VectorOfVariables(x), MOI.Nonnegatives(2))
 MathOptInterface.ConstraintIndex{MathOptInterface.VectorOfVariables, MathOptInterface.Nonnegatives}(1)

add_constraint returns a ConstraintIndex type, which is used to refer to the added constraint in other calls.

Check if a ConstraintIndex is valid using is_valid.

julia> MOI.is_valid(model, c)
 true

Use add_constraints to add a number of constraints of the same type.

julia> c = MOI.add_constraints(
            model,
@@ -23,4 +23,4 @@
 false

Constraint attributes

The following attributes are available for constraints:

Get and set these attributes using get and set.

julia> MOI.set(model, MOI.ConstraintName(), c, "con_c")
 
 julia> MOI.get(model, MOI.ConstraintName(), c)
-"con_c"

Constraints by function-set pairs

Below is a list of common constraint types and how they are represented as function-set pairs in MOI. In the notation below, $x$ is a vector of decision variables, $x_i$ is a scalar decision variable, $\alpha, \beta$ are scalar constants, $a, b$ are constant vectors, A is a constant matrix and $\mathbb{R}_+$ (resp. $\mathbb{R}_-$) is the set of non-negative (resp. non-positive) real numbers.

Linear constraints

Mathematical ConstraintMOI FunctionMOI Set
$a^Tx \le \beta$ScalarAffineFunctionLessThan
$a^Tx \ge \alpha$ScalarAffineFunctionGreaterThan
$a^Tx = \beta$ScalarAffineFunctionEqualTo
$\alpha \le a^Tx \le \beta$ScalarAffineFunctionInterval
$x_i \le \beta$VariableIndexLessThan
$x_i \ge \alpha$VariableIndexGreaterThan
$x_i = \beta$VariableIndexEqualTo
$\alpha \le x_i \le \beta$VariableIndexInterval
$Ax + b \in \mathbb{R}_+^n$VectorAffineFunctionNonnegatives
$Ax + b \in \mathbb{R}_-^n$VectorAffineFunctionNonpositives
$Ax + b = 0$VectorAffineFunctionZeros

By convention, solvers are not expected to support nonzero constant terms in the ScalarAffineFunctions the first four rows of the preceding table because they are redundant with the parameters of the sets. For example, encode $2x + 1 \le 2$ as $2x \le 1$.

Constraints with VariableIndex in LessThan, GreaterThan, EqualTo, or Interval sets have a natural interpretation as variable bounds. As such, it is typically not natural to impose multiple lower- or upper-bounds on the same variable, and the solver interfaces will throw respectively LowerBoundAlreadySet or UpperBoundAlreadySet.

Moreover, adding two VariableIndex constraints on the same variable with the same set is impossible because they share the same index as it is the index of the variable, see ConstraintIndex.

It is natural, however, to impose upper- and lower-bounds separately as two different constraints on a single variable. The difference between imposing bounds by using a single Interval constraint and by using separate LessThan and GreaterThan constraints is that the latter will allow the solver to return separate dual multipliers for the two bounds, while the former will allow the solver to return only a single dual for the interval constraint.

Conic constraints

Mathematical ConstraintMOI FunctionMOI Set
$\lVert Ax + b\rVert_2 \le c^Tx + d$VectorAffineFunctionSecondOrderCone
$y \ge \lVert x \rVert_2$VectorOfVariablesSecondOrderCone
$2yz \ge \lVert x \rVert_2^2, y,z \ge 0$VectorOfVariablesRotatedSecondOrderCone
$(a_1^Tx + b_1,a_2^Tx + b_2,a_3^Tx + b_3) \in \mathcal{E}$VectorAffineFunctionExponentialCone
$A(x) \in \mathcal{S}_+$VectorAffineFunctionPositiveSemidefiniteConeTriangle
$B(x) \in \mathcal{S}_+$VectorAffineFunctionPositiveSemidefiniteConeSquare
$x \in \mathcal{S}_+$VectorOfVariablesPositiveSemidefiniteConeTriangle
$x \in \mathcal{S}_+$VectorOfVariablesPositiveSemidefiniteConeSquare

where $\mathcal{E}$ is the exponential cone (see ExponentialCone), $\mathcal{S}_+$ is the set of positive semidefinite symmetric matrices, $A$ is an affine map that outputs symmetric matrices and $B$ is an affine map that outputs square matrices.

Quadratic constraints

Mathematical ConstraintMOI FunctionMOI Set
$\frac{1}{2}x^TQx + a^Tx + b \ge 0$ScalarQuadraticFunctionGreaterThan
$\frac{1}{2}x^TQx + a^Tx + b \le 0$ScalarQuadraticFunctionLessThan
$\frac{1}{2}x^TQx + a^Tx + b = 0$ScalarQuadraticFunctionEqualTo
Bilinear matrix inequalityVectorQuadraticFunctionPositiveSemidefiniteCone...
Note

For more details on the internal format of the quadratic functions see ScalarQuadraticFunction or VectorQuadraticFunction.

Discrete and logical constraints

Mathematical ConstraintMOI FunctionMOI Set
$x_i \in \mathbb{Z}$VariableIndexInteger
$x_i \in \{0,1\}$VariableIndexZeroOne
$x_i \in \{0\} \cup [l,u]$VariableIndexSemicontinuous
$x_i \in \{0\} \cup \{l,l+1,\ldots,u-1,u\}$VariableIndexSemiinteger
At most one component of $x$ can be nonzeroVectorOfVariablesSOS1
At most two components of $x$ can be nonzero, and if so they must be adjacent componentsVectorOfVariablesSOS2
$y = 1 \implies a^T x \in S$VectorAffineFunctionIndicator

JuMP mapping

The following bullet points show examples of how JuMP constraints are translated into MOI function-set pairs:

  • @constraint(m, 2x + y <= 10) becomes ScalarAffineFunction-in-LessThan
  • @constraint(m, 2x + y >= 10) becomes ScalarAffineFunction-in-GreaterThan
  • @constraint(m, 2x + y == 10) becomes ScalarAffineFunction-in-EqualTo
  • @constraint(m, 0 <= 2x + y <= 10) becomes ScalarAffineFunction-in-Interval
  • @constraint(m, 2x + y in ArbitrarySet()) becomes ScalarAffineFunction-in-ArbitrarySet.

Variable bounds are handled in a similar fashion:

  • @variable(m, x <= 1) becomes VariableIndex-in-LessThan
  • @variable(m, x >= 1) becomes VariableIndex-in-GreaterThan

One notable difference is that a variable with an upper and lower bound is translated into two constraints, rather than an interval, that is:

  • @variable(m, 0 <= x <= 1) becomes VariableIndex-in-LessThan and VariableIndex-in-GreaterThan.
+"con_c"

Constraints by function-set pairs

Below is a list of common constraint types and how they are represented as function-set pairs in MOI. In the notation below, $x$ is a vector of decision variables, $x_i$ is a scalar decision variable, $\alpha, \beta$ are scalar constants, $a, b$ are constant vectors, A is a constant matrix and $\mathbb{R}_+$ (resp. $\mathbb{R}_-$) is the set of non-negative (resp. non-positive) real numbers.

Linear constraints

Mathematical ConstraintMOI FunctionMOI Set
$a^Tx \le \beta$ScalarAffineFunctionLessThan
$a^Tx \ge \alpha$ScalarAffineFunctionGreaterThan
$a^Tx = \beta$ScalarAffineFunctionEqualTo
$\alpha \le a^Tx \le \beta$ScalarAffineFunctionInterval
$x_i \le \beta$VariableIndexLessThan
$x_i \ge \alpha$VariableIndexGreaterThan
$x_i = \beta$VariableIndexEqualTo
$\alpha \le x_i \le \beta$VariableIndexInterval
$Ax + b \in \mathbb{R}_+^n$VectorAffineFunctionNonnegatives
$Ax + b \in \mathbb{R}_-^n$VectorAffineFunctionNonpositives
$Ax + b = 0$VectorAffineFunctionZeros

By convention, solvers are not expected to support nonzero constant terms in the ScalarAffineFunctions the first four rows of the preceding table because they are redundant with the parameters of the sets. For example, encode $2x + 1 \le 2$ as $2x \le 1$.

Constraints with VariableIndex in LessThan, GreaterThan, EqualTo, or Interval sets have a natural interpretation as variable bounds. As such, it is typically not natural to impose multiple lower- or upper-bounds on the same variable, and the solver interfaces will throw respectively LowerBoundAlreadySet or UpperBoundAlreadySet.

Moreover, adding two VariableIndex constraints on the same variable with the same set is impossible because they share the same index as it is the index of the variable, see ConstraintIndex.

It is natural, however, to impose upper- and lower-bounds separately as two different constraints on a single variable. The difference between imposing bounds by using a single Interval constraint and by using separate LessThan and GreaterThan constraints is that the latter will allow the solver to return separate dual multipliers for the two bounds, while the former will allow the solver to return only a single dual for the interval constraint.

Conic constraints

Mathematical ConstraintMOI FunctionMOI Set
$\lVert Ax + b\rVert_2 \le c^Tx + d$VectorAffineFunctionSecondOrderCone
$y \ge \lVert x \rVert_2$VectorOfVariablesSecondOrderCone
$2yz \ge \lVert x \rVert_2^2, y,z \ge 0$VectorOfVariablesRotatedSecondOrderCone
$(a_1^Tx + b_1,a_2^Tx + b_2,a_3^Tx + b_3) \in \mathcal{E}$VectorAffineFunctionExponentialCone
$A(x) \in \mathcal{S}_+$VectorAffineFunctionPositiveSemidefiniteConeTriangle
$B(x) \in \mathcal{S}_+$VectorAffineFunctionPositiveSemidefiniteConeSquare
$x \in \mathcal{S}_+$VectorOfVariablesPositiveSemidefiniteConeTriangle
$x \in \mathcal{S}_+$VectorOfVariablesPositiveSemidefiniteConeSquare

where $\mathcal{E}$ is the exponential cone (see ExponentialCone), $\mathcal{S}_+$ is the set of positive semidefinite symmetric matrices, $A$ is an affine map that outputs symmetric matrices and $B$ is an affine map that outputs square matrices.

Quadratic constraints

Mathematical ConstraintMOI FunctionMOI Set
$\frac{1}{2}x^TQx + a^Tx + b \ge 0$ScalarQuadraticFunctionGreaterThan
$\frac{1}{2}x^TQx + a^Tx + b \le 0$ScalarQuadraticFunctionLessThan
$\frac{1}{2}x^TQx + a^Tx + b = 0$ScalarQuadraticFunctionEqualTo
Bilinear matrix inequalityVectorQuadraticFunctionPositiveSemidefiniteCone...
Note

For more details on the internal format of the quadratic functions see ScalarQuadraticFunction or VectorQuadraticFunction.

Discrete and logical constraints

Mathematical ConstraintMOI FunctionMOI Set
$x_i \in \mathbb{Z}$VariableIndexInteger
$x_i \in \{0,1\}$VariableIndexZeroOne
$x_i \in \{0\} \cup [l,u]$VariableIndexSemicontinuous
$x_i \in \{0\} \cup \{l,l+1,\ldots,u-1,u\}$VariableIndexSemiinteger
At most one component of $x$ can be nonzeroVectorOfVariablesSOS1
At most two components of $x$ can be nonzero, and if so they must be adjacent componentsVectorOfVariablesSOS2
$y = 1 \implies a^T x \in S$VectorAffineFunctionIndicator

JuMP mapping

The following bullet points show examples of how JuMP constraints are translated into MOI function-set pairs:

  • @constraint(m, 2x + y <= 10) becomes ScalarAffineFunction-in-LessThan
  • @constraint(m, 2x + y >= 10) becomes ScalarAffineFunction-in-GreaterThan
  • @constraint(m, 2x + y == 10) becomes ScalarAffineFunction-in-EqualTo
  • @constraint(m, 0 <= 2x + y <= 10) becomes ScalarAffineFunction-in-Interval
  • @constraint(m, 2x + y in ArbitrarySet()) becomes ScalarAffineFunction-in-ArbitrarySet.

Variable bounds are handled in a similar fashion:

  • @variable(m, x <= 1) becomes VariableIndex-in-LessThan
  • @variable(m, x >= 1) becomes VariableIndex-in-GreaterThan

One notable difference is that a variable with an upper and lower bound is translated into two constraints, rather than an interval, that is:

  • @variable(m, 0 <= x <= 1) becomes VariableIndex-in-LessThan and VariableIndex-in-GreaterThan.
diff --git a/dev/moi/manual/models/index.html b/dev/moi/manual/models/index.html index 6904a294dee..0fb1dcb3661 100644 --- a/dev/moi/manual/models/index.html +++ b/dev/moi/manual/models/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Models

The most significant part of MOI is the definition of the model API that is used to specify an instance of an optimization problem (for example, by adding variables and constraints). Objects that implement the model API must inherit from the ModelLike abstract type.

Notably missing from the model API is the method to solve an optimization problem. ModelLike objects may store an instance (for example, in memory or backed by a file format) without being linked to a particular solver. In addition to the model API, MOI defines AbstractOptimizer and provides methods to solve the model and interact with solutions. See the Solutions section for more details.

Info

Throughout the rest of the manual, model is used as a generic ModelLike, and optimizer is used as a generic AbstractOptimizer.

Tip

MOI does not export functions, but for brevity we often omit qualifying names with the MOI module. Best practice is to have

import MathOptInterface as MOI

and prefix all MOI methods with MOI. in user code. If a name is also available in base Julia, we always explicitly use the module prefix, for example, with MOI.get.

Attributes

Attributes are properties of the model that can be queried and modified. These include constants such as the number of variables in a model NumberOfVariables), and properties of variables and constraints such as the name of a variable (VariableName).

There are four types of attributes:

Some attributes are values that can be queried by the user but not modified, while other attributes can be modified by the user.

All interactions with attributes occur through the get and set functions.

Consult the docstrings of each attribute for information on what it represents.

ModelLike API

The following attributes are available:

AbstractOptimizer API

The following attributes are available:

+

Models

The most significant part of MOI is the definition of the model API that is used to specify an instance of an optimization problem (for example, by adding variables and constraints). Objects that implement the model API must inherit from the ModelLike abstract type.

Notably missing from the model API is the method to solve an optimization problem. ModelLike objects may store an instance (for example, in memory or backed by a file format) without being linked to a particular solver. In addition to the model API, MOI defines AbstractOptimizer and provides methods to solve the model and interact with solutions. See the Solutions section for more details.

Info

Throughout the rest of the manual, model is used as a generic ModelLike, and optimizer is used as a generic AbstractOptimizer.

Tip

MOI does not export functions, but for brevity we often omit qualifying names with the MOI module. Best practice is to have

import MathOptInterface as MOI

and prefix all MOI methods with MOI. in user code. If a name is also available in base Julia, we always explicitly use the module prefix, for example, with MOI.get.

Attributes

Attributes are properties of the model that can be queried and modified. These include constants such as the number of variables in a model NumberOfVariables), and properties of variables and constraints such as the name of a variable (VariableName).

There are four types of attributes:

Some attributes are values that can be queried by the user but not modified, while other attributes can be modified by the user.

All interactions with attributes occur through the get and set functions.

Consult the docstrings of each attribute for information on what it represents.

ModelLike API

The following attributes are available:

AbstractOptimizer API

The following attributes are available:

diff --git a/dev/moi/manual/modification/index.html b/dev/moi/manual/modification/index.html index f6a17aae68c..f55a6258205 100644 --- a/dev/moi/manual/modification/index.html +++ b/dev/moi/manual/modification/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Problem modification

In addition to adding and deleting constraints and variables, MathOptInterface supports modifying, in-place, coefficients in the constraints and the objective function of a model.

These modifications can be grouped into two categories:

  • modifications which replace the set of function of a constraint with a new set or function
  • modifications which change, in-place, a component of a function
Warning

Some ModelLike objects do not support problem modification.

Modify the set of a constraint

Use set and ConstraintSet to modify the set of a constraint by replacing it with a new instance of the same type.

julia> c = MOI.add_constraint(
+

Problem modification

In addition to adding and deleting constraints and variables, MathOptInterface supports modifying, in-place, coefficients in the constraints and the objective function of a model.

These modifications can be grouped into two categories:

  • modifications which replace the set of function of a constraint with a new set or function
  • modifications which change, in-place, a component of a function
Warning

Some ModelLike objects do not support problem modification.

Modify the set of a constraint

Use set and ConstraintSet to modify the set of a constraint by replacing it with a new instance of the same type.

julia> c = MOI.add_constraint(
            model,
            MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0),
            MOI.EqualTo(1.0),
@@ -152,4 +152,4 @@
        );
 
 julia> MOI.get(model, MOI.ConstraintFunction(), c) ≈ new_f
-true
+true
diff --git a/dev/moi/manual/solutions/index.html b/dev/moi/manual/solutions/index.html index e3073a3d132..1d4086b6a20 100644 --- a/dev/moi/manual/solutions/index.html +++ b/dev/moi/manual/solutions/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Solutions

Solving and retrieving the results

Once an optimizer is loaded with the objective function and all of the constraints, we can ask the solver to solve the model by calling optimize!.

MOI.optimize!(optimizer)

Why did the solver stop?

The optimization procedure may stop for a number of reasons. The TerminationStatus attribute of the optimizer returns a TerminationStatusCode object which explains why the solver stopped.

The termination statuses distinguish between proofs of optimality, infeasibility, local convergence, limits, and termination because of something unexpected like invalid problem data or failure to converge.

A typical usage of the TerminationStatus attribute is as follows:

status = MOI.get(optimizer, TerminationStatus())
+

Solutions

Solving and retrieving the results

Once an optimizer is loaded with the objective function and all of the constraints, we can ask the solver to solve the model by calling optimize!.

MOI.optimize!(optimizer)

Why did the solver stop?

The optimization procedure may stop for a number of reasons. The TerminationStatus attribute of the optimizer returns a TerminationStatusCode object which explains why the solver stopped.

The termination statuses distinguish between proofs of optimality, infeasibility, local convergence, limits, and termination because of something unexpected like invalid problem data or failure to converge.

A typical usage of the TerminationStatus attribute is as follows:

status = MOI.get(optimizer, TerminationStatus())
 if status == MOI.OPTIMAL
     # Ok, we solved the problem!
 else
@@ -36,4 +36,4 @@
         end
         rethrow(err)  # Something else went wrong. Rethrow the error
     end
-end
+end
diff --git a/dev/moi/manual/standard_form/index.html b/dev/moi/manual/standard_form/index.html index 7f19c1dbe6a..3c845c3109e 100644 --- a/dev/moi/manual/standard_form/index.html +++ b/dev/moi/manual/standard_form/index.html @@ -3,8 +3,8 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Standard form problem

MathOptInterface represents optimization problems in the standard form:

\[\begin{align} +

Standard form problem

MathOptInterface represents optimization problems in the standard form:

\[\begin{align} & \min_{x \in \mathbb{R}^n} & f_0(x) \\ & \;\;\text{s.t.} & f_i(x) & \in \mathcal{S}_i & i = 1 \ldots m -\end{align}\]

where:

  • the functions $f_0, f_1, \ldots, f_m$ are specified by AbstractFunction objects
  • the sets $\mathcal{S}_1, \ldots, \mathcal{S}_m$ are specified by AbstractSet objects
Tip

For more information on this standard form, read our paper.

MOI defines some commonly used functions and sets, but the interface is extensible to other sets recognized by the solver.

Functions

The function types implemented in MathOptInterface.jl are:

FunctionDescription
VariableIndex$x_j$, the projection onto a single coordinate defined by a variable index $j$.
VectorOfVariablesThe projection onto multiple coordinates (that is, extracting a sub-vector).
ScalarAffineFunction$a^T x + b$, where $a$ is a vector and $b$ scalar.
ScalarNonlinearFunction$f(x)$, where $f$ is a nonlinear function.
VectorAffineFunction$A x + b$, where $A$ is a matrix and $b$ is a vector.
ScalarQuadraticFunction$\frac{1}{2} x^T Q x + a^T x + b$, where $Q$ is a symmetric matrix, $a$ is a vector, and $b$ is a constant.
VectorQuadraticFunctionA vector of scalar-valued quadratic functions.
VectorNonlinearFunction$f(x)$, where $f$ is a vector-valued nonlinear function.

Extensions for nonlinear programming are present but not yet well documented.

One-dimensional sets

The one-dimensional set types implemented in MathOptInterface.jl are:

SetDescription
LessThan(u)$(-\infty, u]$
GreaterThan(l)$[l, \infty)$
EqualTo(v)$\{v\}$
Interval(l, u)$[l, u]$
Integer()$\mathbb{Z}$
ZeroOne()$\{ 0, 1 \}$
Semicontinuous(l, u)$\{ 0\} \cup [l, u]$
Semiinteger(l, u)$\{ 0\} \cup \{l,l+1,\ldots,u-1,u\}$

Vector cones

The vector-valued set types implemented in MathOptInterface.jl are:

SetDescription
Reals(d)$\mathbb{R}^{d}$
Zeros(d)$0^{d}$
Nonnegatives(d)$\{ x \in \mathbb{R}^{d} : x \ge 0 \}$
Nonpositives(d)$\{ x \in \mathbb{R}^{d} : x \le 0 \}$
SecondOrderCone(d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \lVert x \rVert_2 \}$
RotatedSecondOrderCone(d)$\{ (t,u,x) \in \mathbb{R}^{d} : 2tu \ge \lVert x \rVert_2^2, t \ge 0,u \ge 0 \}$
ExponentialCone()$\{ (x,y,z) \in \mathbb{R}^3 : y \exp (x/y) \le z, y > 0 \}$
DualExponentialCone()$\{ (u,v,w) \in \mathbb{R}^3 : -u \exp (v/u) \le \exp(1) w, u < 0 \}$
GeometricMeanCone(d)$\{ (t,x) \in \mathbb{R}^{1+n} : x \ge 0, t \le \sqrt[n]{x_1 x_2 \cdots x_n} \}$ where $n$ is $d - 1$
PowerCone(α)$\{ (x,y,z) \in \mathbb{R}^3 : x^{\alpha} y^{1-\alpha} \ge |z|, x \ge 0,y \ge 0 \}$
DualPowerCone(α)$\{ (u,v,w) \in \mathbb{R}^3 : \left(\frac{u}{\alpha}\right)^{\alpha}\left(\frac{v}{1-\alpha}\right)^{1-\alpha} \ge |w|, u,v \ge 0 \}$
NormOneCone(d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \sum_i \lvert x_i \rvert \}$
NormInfinityCone(d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \max_i \lvert x_i \rvert \}$
RelativeEntropyCone(d)$\{ (u, v, w) \in \mathbb{R}^{d} : u \ge \sum_i w_i \log (\frac{w_i}{v_i}), v_i \ge 0, w_i \ge 0 \}$
HyperRectangle(l, u)$\{x \in \bar{\mathbb{R}}^d: x_i \in [l_i, u_i] \forall i=1,\ldots,d\}$
NormCone(p, d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \left(\sum\limits_i \lvert x_i \rvert^p\right)^{\frac{1}{p}} \}$

Matrix cones

The matrix-valued set types implemented in MathOptInterface.jl are:

SetDescription
RootDetConeTriangle(d)$\{ (t,X) \in \mathbb{R}^{1+d(1+d)/2} : t \le \det(X)^{1/d}, X \mbox{ is the upper triangle of a PSD matrix} \}$
RootDetConeSquare(d)$\{ (t,X) \in \mathbb{R}^{1+d^2} : t \le \det(X)^{1/d}, X \mbox{ is a PSD matrix} \}$
PositiveSemidefiniteConeTriangle(d)$\{ X \in \mathbb{R}^{d(d+1)/2} : X \mbox{ is the upper triangle of a PSD matrix} \}$
PositiveSemidefiniteConeSquare(d)$\{ X \in \mathbb{R}^{d^2} : X \mbox{ is a PSD matrix} \}$
LogDetConeTriangle(d)$\{ (t,u,X) \in \mathbb{R}^{2+d(1+d)/2} : t \le u\log(\det(X/u)), X \mbox{ is the upper triangle of a PSD matrix}, u > 0 \}$
LogDetConeSquare(d)$\{ (t,u,X) \in \mathbb{R}^{2+d^2} : t \le u \log(\det(X/u)), X \mbox{ is a PSD matrix}, u > 0 \}$
NormSpectralCone(r, c)$\{ (t, X) \in \mathbb{R}^{1 + r \times c} : t \ge \sigma_1(X), X \mbox{ is a } r\times c\mbox{ matrix} \}$
NormNuclearCone(r, c)$\{ (t, X) \in \mathbb{R}^{1 + r \times c} : t \ge \sum_i \sigma_i(X), X \mbox{ is a } r\times c\mbox{ matrix} \}$
HermitianPositiveSemidefiniteConeTriangle(d)The cone of Hermitian positive semidefinite matrices, with
side_dimension rows and columns.
Scaled(S)The set S scaled so that Utilities.set_dot corresponds to LinearAlgebra.dot

Some of these cones can take two forms: XXXConeTriangle and XXXConeSquare.

In XXXConeTriangle sets, the matrix is assumed to be symmetric, and the elements are provided by a vector, in which the entries of the upper-right triangular part of the matrix are given column by column (or equivalently, the entries of the lower-left triangular part are given row by row).

In XXXConeSquare sets, the entries of the matrix are given column by column (or equivalently, row by row), and the matrix is constrained to be symmetric. As an example, given a 2-by-2 matrix of variables X and a one-dimensional variable t, we can specify a root-det constraint as [t, X11, X12, X22] ∈ RootDetConeTriangle or [t, X11, X12, X21, X22] ∈ RootDetConeSquare.

We provide both forms to enable flexibility for solvers who may natively support one or the other. Transformations between XXXConeTriangle and XXXConeSquare are handled by bridges, which removes the chance of conversion mistakes by users or solver developers.

Multi-dimensional sets with combinatorial structure

Other sets are vector-valued, with a particular combinatorial structure. Read their docstrings for more information on how to interpret them.

SetDescription
SOS1A Special Ordered Set (SOS) of Type I
SOS2A Special Ordered Set (SOS) of Type II
IndicatorA set to specify an indicator constraint
ComplementsA set to specify a mixed complementarity constraint
AllDifferentThe all_different global constraint
BinPackingThe bin_packing global constraint
CircuitThe circuit global constraint
CountAtLeastThe at_least global constraint
CountBelongsThe nvalue global constraint
CountDistinctThe distinct global constraint
CountGreaterThanThe count_gt global constraint
CumulativeThe cumulative global constraint
PathThe path global constraint
TableThe table global constraint
+\end{align}\]

where:

  • the functions $f_0, f_1, \ldots, f_m$ are specified by AbstractFunction objects
  • the sets $\mathcal{S}_1, \ldots, \mathcal{S}_m$ are specified by AbstractSet objects
Tip

For more information on this standard form, read our paper.

MOI defines some commonly used functions and sets, but the interface is extensible to other sets recognized by the solver.

Functions

The function types implemented in MathOptInterface.jl are:

FunctionDescription
VariableIndex$x_j$, the projection onto a single coordinate defined by a variable index $j$.
VectorOfVariablesThe projection onto multiple coordinates (that is, extracting a sub-vector).
ScalarAffineFunction$a^T x + b$, where $a$ is a vector and $b$ scalar.
ScalarNonlinearFunction$f(x)$, where $f$ is a nonlinear function.
VectorAffineFunction$A x + b$, where $A$ is a matrix and $b$ is a vector.
ScalarQuadraticFunction$\frac{1}{2} x^T Q x + a^T x + b$, where $Q$ is a symmetric matrix, $a$ is a vector, and $b$ is a constant.
VectorQuadraticFunctionA vector of scalar-valued quadratic functions.
VectorNonlinearFunction$f(x)$, where $f$ is a vector-valued nonlinear function.

Extensions for nonlinear programming are present but not yet well documented.

One-dimensional sets

The one-dimensional set types implemented in MathOptInterface.jl are:

SetDescription
LessThan(u)$(-\infty, u]$
GreaterThan(l)$[l, \infty)$
EqualTo(v)$\{v\}$
Interval(l, u)$[l, u]$
Integer()$\mathbb{Z}$
ZeroOne()$\{ 0, 1 \}$
Semicontinuous(l, u)$\{ 0\} \cup [l, u]$
Semiinteger(l, u)$\{ 0\} \cup \{l,l+1,\ldots,u-1,u\}$

Vector cones

The vector-valued set types implemented in MathOptInterface.jl are:

SetDescription
Reals(d)$\mathbb{R}^{d}$
Zeros(d)$0^{d}$
Nonnegatives(d)$\{ x \in \mathbb{R}^{d} : x \ge 0 \}$
Nonpositives(d)$\{ x \in \mathbb{R}^{d} : x \le 0 \}$
SecondOrderCone(d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \lVert x \rVert_2 \}$
RotatedSecondOrderCone(d)$\{ (t,u,x) \in \mathbb{R}^{d} : 2tu \ge \lVert x \rVert_2^2, t \ge 0,u \ge 0 \}$
ExponentialCone()$\{ (x,y,z) \in \mathbb{R}^3 : y \exp (x/y) \le z, y > 0 \}$
DualExponentialCone()$\{ (u,v,w) \in \mathbb{R}^3 : -u \exp (v/u) \le \exp(1) w, u < 0 \}$
GeometricMeanCone(d)$\{ (t,x) \in \mathbb{R}^{1+n} : x \ge 0, t \le \sqrt[n]{x_1 x_2 \cdots x_n} \}$ where $n$ is $d - 1$
PowerCone(α)$\{ (x,y,z) \in \mathbb{R}^3 : x^{\alpha} y^{1-\alpha} \ge |z|, x \ge 0,y \ge 0 \}$
DualPowerCone(α)$\{ (u,v,w) \in \mathbb{R}^3 : \left(\frac{u}{\alpha}\right)^{\alpha}\left(\frac{v}{1-\alpha}\right)^{1-\alpha} \ge |w|, u,v \ge 0 \}$
NormOneCone(d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \sum_i \lvert x_i \rvert \}$
NormInfinityCone(d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \max_i \lvert x_i \rvert \}$
RelativeEntropyCone(d)$\{ (u, v, w) \in \mathbb{R}^{d} : u \ge \sum_i w_i \log (\frac{w_i}{v_i}), v_i \ge 0, w_i \ge 0 \}$
HyperRectangle(l, u)$\{x \in \bar{\mathbb{R}}^d: x_i \in [l_i, u_i] \forall i=1,\ldots,d\}$
NormCone(p, d)$\{ (t,x) \in \mathbb{R}^{d} : t \ge \left(\sum\limits_i \lvert x_i \rvert^p\right)^{\frac{1}{p}} \}$

Matrix cones

The matrix-valued set types implemented in MathOptInterface.jl are:

SetDescription
RootDetConeTriangle(d)$\{ (t,X) \in \mathbb{R}^{1+d(1+d)/2} : t \le \det(X)^{1/d}, X \mbox{ is the upper triangle of a PSD matrix} \}$
RootDetConeSquare(d)$\{ (t,X) \in \mathbb{R}^{1+d^2} : t \le \det(X)^{1/d}, X \mbox{ is a PSD matrix} \}$
PositiveSemidefiniteConeTriangle(d)$\{ X \in \mathbb{R}^{d(d+1)/2} : X \mbox{ is the upper triangle of a PSD matrix} \}$
PositiveSemidefiniteConeSquare(d)$\{ X \in \mathbb{R}^{d^2} : X \mbox{ is a PSD matrix} \}$
LogDetConeTriangle(d)$\{ (t,u,X) \in \mathbb{R}^{2+d(1+d)/2} : t \le u\log(\det(X/u)), X \mbox{ is the upper triangle of a PSD matrix}, u > 0 \}$
LogDetConeSquare(d)$\{ (t,u,X) \in \mathbb{R}^{2+d^2} : t \le u \log(\det(X/u)), X \mbox{ is a PSD matrix}, u > 0 \}$
NormSpectralCone(r, c)$\{ (t, X) \in \mathbb{R}^{1 + r \times c} : t \ge \sigma_1(X), X \mbox{ is a } r\times c\mbox{ matrix} \}$
NormNuclearCone(r, c)$\{ (t, X) \in \mathbb{R}^{1 + r \times c} : t \ge \sum_i \sigma_i(X), X \mbox{ is a } r\times c\mbox{ matrix} \}$
HermitianPositiveSemidefiniteConeTriangle(d)The cone of Hermitian positive semidefinite matrices, with
side_dimension rows and columns.
Scaled(S)The set S scaled so that Utilities.set_dot corresponds to LinearAlgebra.dot

Some of these cones can take two forms: XXXConeTriangle and XXXConeSquare.

In XXXConeTriangle sets, the matrix is assumed to be symmetric, and the elements are provided by a vector, in which the entries of the upper-right triangular part of the matrix are given column by column (or equivalently, the entries of the lower-left triangular part are given row by row).

In XXXConeSquare sets, the entries of the matrix are given column by column (or equivalently, row by row), and the matrix is constrained to be symmetric. As an example, given a 2-by-2 matrix of variables X and a one-dimensional variable t, we can specify a root-det constraint as [t, X11, X12, X22] ∈ RootDetConeTriangle or [t, X11, X12, X21, X22] ∈ RootDetConeSquare.

We provide both forms to enable flexibility for solvers who may natively support one or the other. Transformations between XXXConeTriangle and XXXConeSquare are handled by bridges, which removes the chance of conversion mistakes by users or solver developers.

Multi-dimensional sets with combinatorial structure

Other sets are vector-valued, with a particular combinatorial structure. Read their docstrings for more information on how to interpret them.

SetDescription
SOS1A Special Ordered Set (SOS) of Type I
SOS2A Special Ordered Set (SOS) of Type II
IndicatorA set to specify an indicator constraint
ComplementsA set to specify a mixed complementarity constraint
AllDifferentThe all_different global constraint
BinPackingThe bin_packing global constraint
CircuitThe circuit global constraint
CountAtLeastThe at_least global constraint
CountBelongsThe nvalue global constraint
CountDistinctThe distinct global constraint
CountGreaterThanThe count_gt global constraint
CumulativeThe cumulative global constraint
PathThe path global constraint
TableThe table global constraint
diff --git a/dev/moi/manual/variables/index.html b/dev/moi/manual/variables/index.html index b2ca6556939..c1fa5cb9423 100644 --- a/dev/moi/manual/variables/index.html +++ b/dev/moi/manual/variables/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Variables

Add a variable

Use add_variable to add a single variable.

julia> x = MOI.add_variable(model)
+

Variables

Add a variable

Use add_variable to add a single variable.

julia> x = MOI.add_variable(model)
 MOI.VariableIndex(1)

add_variable returns a VariableIndex type, which is used to refer to the added variable in other calls.

Check if a VariableIndex is valid using is_valid.

julia> MOI.is_valid(model, x)
 true

Use add_variables to add a number of variables.

julia> y = MOI.add_variables(model, 2)
 2-element Vector{MathOptInterface.VariableIndex}:
@@ -14,4 +14,4 @@
 false
Warning

Not all ModelLike models support deleting variables. A DeleteNotAllowed error is thrown if this is not supported.

Variable attributes

The following attributes are available for variables:

Get and set these attributes using get and set.

julia> MOI.set(model, MOI.VariableName(), x, "var_x")
 
 julia> MOI.get(model, MOI.VariableName(), x)
-"var_x"
+"var_x"
diff --git a/dev/moi/reference/callbacks/index.html b/dev/moi/reference/callbacks/index.html index c800e61471b..a85421f6695 100644 --- a/dev/moi/reference/callbacks/index.html +++ b/dev/moi/reference/callbacks/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Callbacks

MathOptInterface.AbstractCallbackType
abstract type AbstractCallback <: AbstractModelAttribute end

Abstract type for a model attribute representing a callback function. The value set to subtypes of AbstractCallback is a function that may be called during optimize!. As optimize! is in progress, the result attributes (that is, the attributes attr such that is_set_by_optimize(attr)) may not be accessible from the callback, hence trying to get result attributes might throw a OptimizeInProgress error.

At most one callback of each type can be registered. If an optimizer already has a function for a callback type, and the user registers a new function, then the old one is replaced.

The value of the attribute should be a function taking only one argument, commonly called callback_data, that can be used for instance in LazyConstraintCallback, HeuristicCallback and UserCutCallback.

source
MathOptInterface.submitFunction
submit(
+

Callbacks

MathOptInterface.AbstractCallbackType
abstract type AbstractCallback <: AbstractModelAttribute end

Abstract type for a model attribute representing a callback function. The value set to subtypes of AbstractCallback is a function that may be called during optimize!. As optimize! is in progress, the result attributes (that is, the attributes attr such that is_set_by_optimize(attr)) may not be accessible from the callback, hence trying to get result attributes might throw a OptimizeInProgress error.

At most one callback of each type can be registered. If an optimizer already has a function for a callback type, and the user registers a new function, then the old one is replaced.

The value of the attribute should be a function taking only one argument, commonly called callback_data, that can be used for instance in LazyConstraintCallback, HeuristicCallback and UserCutCallback.

source
MathOptInterface.submitFunction
submit(
     optimizer::AbstractOptimizer,
     sub::AbstractSubmittable,
     values...,
@@ -33,4 +33,4 @@
         MOI.submit(optimizer, MOI.HeuristicSolution(callback_data), x,
                    values)
     end
-end
source
MathOptInterface.HeuristicSolutionType
HeuristicSolution(callback_data)

Heuristically obtained feasible solution. The solution is submitted as variables, values where values[i] gives the value of variables[i], similarly to set. The submit call returns a HeuristicSolutionStatus indicating whether the provided solution was accepted or rejected.

This can be submitted only from the HeuristicCallback. The field callback_data is a solver-specific callback type that is passed as the argument to the heuristic callback.

Some solvers require a complete solution, others only partial solutions.

source
+end
source
MathOptInterface.HeuristicSolutionType
HeuristicSolution(callback_data)

Heuristically obtained feasible solution. The solution is submitted as variables, values where values[i] gives the value of variables[i], similarly to set. The submit call returns a HeuristicSolutionStatus indicating whether the provided solution was accepted or rejected.

This can be submitted only from the HeuristicCallback. The field callback_data is a solver-specific callback type that is passed as the argument to the heuristic callback.

Some solvers require a complete solution, others only partial solutions.

source
diff --git a/dev/moi/reference/constraints/index.html b/dev/moi/reference/constraints/index.html index d70587c96a3..bb94b4b32c2 100644 --- a/dev/moi/reference/constraints/index.html +++ b/dev/moi/reference/constraints/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Constraints

Types

MathOptInterface.ConstraintIndexType
ConstraintIndex{F, S}

A type-safe wrapper for Int64 for use in referencing F-in-S constraints in a model. The parameter F is the type of the function in the constraint, and the parameter S is the type of set in the constraint. To allow for deletion, indices need not be consecutive. Indices within a constraint type (that is, F-in-S) must be unique, but non-unique indices across different constraint types are allowed. If F is VariableIndex then the index is equal to the index of the variable. That is for an index::ConstraintIndex{VariableIndex}, we always have

index.value == MOI.get(model, MOI.ConstraintFunction(), index).value
source

Functions

MathOptInterface.is_validMethod
is_valid(model::ModelLike, index::Index)::Bool

Return a Bool indicating whether this index refers to a valid object in the model model.

source
MathOptInterface.add_constraintFunction
MOI.add_constraint(map::Map, vi::MOI.VariableIndex, set::MOI.AbstractScalarSet)

Record that a constraint vi-in-set is added and throws if a lower or upper bound is set by this constraint and such bound has already been set for vi.

source
add_constraint(model::ModelLike, func::F, set::S)::ConstraintIndex{F,S} where {F,S}

Add the constraint $f(x) \in \mathcal{S}$ where $f$ is defined by func, and $\mathcal{S}$ is defined by set.

add_constraint(model::ModelLike, v::VariableIndex, set::S)::ConstraintIndex{VariableIndex,S} where {S}
+

Constraints

Types

MathOptInterface.ConstraintIndexType
ConstraintIndex{F, S}

A type-safe wrapper for Int64 for use in referencing F-in-S constraints in a model. The parameter F is the type of the function in the constraint, and the parameter S is the type of set in the constraint. To allow for deletion, indices need not be consecutive. Indices within a constraint type (that is, F-in-S) must be unique, but non-unique indices across different constraint types are allowed. If F is VariableIndex then the index is equal to the index of the variable. That is for an index::ConstraintIndex{VariableIndex}, we always have

index.value == MOI.get(model, MOI.ConstraintFunction(), index).value
source

Functions

MathOptInterface.is_validMethod
is_valid(model::ModelLike, index::Index)::Bool

Return a Bool indicating whether this index refers to a valid object in the model model.

source
MathOptInterface.add_constraintFunction
MOI.add_constraint(map::Map, vi::MOI.VariableIndex, set::MOI.AbstractScalarSet)

Record that a constraint vi-in-set is added and throws if a lower or upper bound is set by this constraint and such bound has already been set for vi.

source
add_constraint(model::ModelLike, func::F, set::S)::ConstraintIndex{F,S} where {F,S}

Add the constraint $f(x) \in \mathcal{S}$ where $f$ is defined by func, and $\mathcal{S}$ is defined by set.

add_constraint(model::ModelLike, v::VariableIndex, set::S)::ConstraintIndex{VariableIndex,S} where {S}
 add_constraint(model::ModelLike, vec::Vector{VariableIndex}, set::S)::ConstraintIndex{VectorOfVariables,S} where {S}

Add the constraint $v \in \mathcal{S}$ where $v$ is the variable (or vector of variables) referenced by v and $\mathcal{S}$ is defined by set.

source
MathOptInterface.add_constraintsFunction
add_constraints(model::ModelLike, funcs::Vector{F}, sets::Vector{S})::Vector{ConstraintIndex{F,S}} where {F,S}

Add the set of constraints specified by each function-set pair in funcs and sets. F and S should be concrete types. This call is equivalent to add_constraint.(model, funcs, sets) but may be more efficient.

source
MathOptInterface.transformFunction

Transform Constraint Set

transform(model::ModelLike, c::ConstraintIndex{F,S1}, newset::S2)::ConstraintIndex{F,S2}

Replace the set in constraint c with newset. The constraint index c will no longer be valid, and the function returns a new constraint index with the correct type.

Solvers may only support a subset of constraint transforms that they perform efficiently (for example, changing from a LessThan to GreaterThan set). In addition, set modification (where S1 = S2) should be performed via the modify function.

Typically, the user should delete the constraint and add a new one.

Examples

If c is a ConstraintIndex{ScalarAffineFunction{Float64},LessThan{Float64}},

c2 = transform(model, c, GreaterThan(0.0))
 transform(model, c, LessThan(0.0)) # errors
source
MathOptInterface.supports_constraintFunction
MOI.supports_constraint(
     BT::Type{<:AbstractBridge},
@@ -13,4 +13,4 @@
     model::ModelLike,
     ::Type{F},
     ::Type{S},
-)::Bool where {F<:AbstractFunction,S<:AbstractSet}

Return a Bool indicating whether model supports F-in-S constraints, that is, copy_to(model, src) does not throw UnsupportedConstraint when src contains F-in-S constraints. If F-in-S constraints are only not supported in specific circumstances, for example, F-in-S constraints cannot be combined with another type of constraint, it should still return true.

source

Attributes

MathOptInterface.ConstraintNameType
ConstraintName()

A constraint attribute for a string identifying the constraint.

It is valid for constraints variables to have the same name; however, constraints with duplicate names cannot be looked up using get, regardless of whether they have the same F-in-S type.

ConstraintName has a default value of "" if not set.

Notes

You should not implement ConstraintName for VariableIndex constraints.

source
MathOptInterface.ConstraintPrimalType
ConstraintPrimal(result_index::Int = 1)

A constraint attribute for the assignment to some constraint's primal value in result result_index.

If the constraint is f(x) in S, then in most cases the ConstraintPrimal is the value of f, evaluated at the corresponding VariablePrimal solution.

However, some conic solvers reformulate b - Ax in S to s = b - Ax, s in S. These solvers may return the value of s for ConstraintPrimal, rather than b - Ax. (Although these are constrained by an equality constraint, due to numerical tolerances they may not be identical.)

If the solver does not have a primal value for the constraint because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ConstraintPrimal attribute.

If result_index is omitted, it is 1 by default. See ResultCount for information on how the results are ordered.

source
MathOptInterface.ConstraintDualType
ConstraintDual(result_index::Int = 1)

A constraint attribute for the assignment to some constraint's dual value in result result_index. If result_index is omitted, it is 1 by default.

If the solver does not have a dual value for the variable because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a primal solution is available), the result is undefined. Users should first check DualStatus before accessing the ConstraintDual attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.ConstraintBasisStatusType
ConstraintBasisStatus(result_index::Int = 1)

A constraint attribute for the BasisStatusCode of some constraint in result result_index, with respect to an available optimal solution basis. If result_index is omitted, it is 1 by default.

If the solver does not have a basis status for the constraint because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ConstraintBasisStatus attribute.

See ResultCount for information on how the results are ordered.

Notes

For the basis status of a variable, query VariableBasisStatus.

ConstraintBasisStatus does not apply to VariableIndex constraints. You can infer the basis status of a VariableIndex constraint by looking at the result of VariableBasisStatus.

source
MathOptInterface.ConstraintFunctionType
ConstraintFunction()

A constraint attribute for the AbstractFunction object used to define the constraint.

It is guaranteed to be equivalent but not necessarily identical to the function provided by the user.

source
MathOptInterface.CanonicalConstraintFunctionType
CanonicalConstraintFunction()

A constraint attribute for a canonical representation of the AbstractFunction object used to define the constraint.

Getting this attribute is guaranteed to return a function that is equivalent but not necessarily identical to the function provided by the user.

By default, MOI.get(model, MOI.CanonicalConstraintFunction(), ci) fallbacks to MOI.Utilities.canonical(MOI.get(model, MOI.ConstraintFunction(), ci)). However, if model knows that the constraint function is canonical then it can implement a specialized method that directly return the function without calling Utilities.canonical. Therefore, the value returned cannot be assumed to be a copy of the function stored in model. Moreover, Utilities.Model checks with Utilities.is_canonical whether the function stored internally is already canonical and if it's the case, then it returns the function stored internally instead of a copy.

source
MathOptInterface.BasisStatusCodeType
BasisStatusCode

An Enum of possible values for the ConstraintBasisStatus and VariableBasisStatus attributes, explaining the status of a given element with respect to an optimal solution basis.

Notes

  • NONBASIC_AT_LOWER and NONBASIC_AT_UPPER should be used only for constraints with the Interval set. In this case, they are necessary to distinguish which side of the constraint is active. One-sided constraints (for example, LessThan and GreaterThan) should use NONBASIC instead of the NONBASIC_AT_* values. This restriction does not apply to VariableBasisStatus, which should return NONBASIC_AT_* regardless of whether the alternative bound exists.

  • In linear programs, SUPER_BASIC occurs when a variable with no bounds is not in the basis.

Values

Possible values are:

source
+)::Bool where {F<:AbstractFunction,S<:AbstractSet}

Return a Bool indicating whether model supports F-in-S constraints, that is, copy_to(model, src) does not throw UnsupportedConstraint when src contains F-in-S constraints. If F-in-S constraints are only not supported in specific circumstances, for example, F-in-S constraints cannot be combined with another type of constraint, it should still return true.

source

Attributes

MathOptInterface.ConstraintNameType
ConstraintName()

A constraint attribute for a string identifying the constraint.

It is valid for constraints variables to have the same name; however, constraints with duplicate names cannot be looked up using get, regardless of whether they have the same F-in-S type.

ConstraintName has a default value of "" if not set.

Notes

You should not implement ConstraintName for VariableIndex constraints.

source
MathOptInterface.ConstraintPrimalType
ConstraintPrimal(result_index::Int = 1)

A constraint attribute for the assignment to some constraint's primal value in result result_index.

If the constraint is f(x) in S, then in most cases the ConstraintPrimal is the value of f, evaluated at the corresponding VariablePrimal solution.

However, some conic solvers reformulate b - Ax in S to s = b - Ax, s in S. These solvers may return the value of s for ConstraintPrimal, rather than b - Ax. (Although these are constrained by an equality constraint, due to numerical tolerances they may not be identical.)

If the solver does not have a primal value for the constraint because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ConstraintPrimal attribute.

If result_index is omitted, it is 1 by default. See ResultCount for information on how the results are ordered.

source
MathOptInterface.ConstraintDualType
ConstraintDual(result_index::Int = 1)

A constraint attribute for the assignment to some constraint's dual value in result result_index. If result_index is omitted, it is 1 by default.

If the solver does not have a dual value for the variable because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a primal solution is available), the result is undefined. Users should first check DualStatus before accessing the ConstraintDual attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.ConstraintBasisStatusType
ConstraintBasisStatus(result_index::Int = 1)

A constraint attribute for the BasisStatusCode of some constraint in result result_index, with respect to an available optimal solution basis. If result_index is omitted, it is 1 by default.

If the solver does not have a basis status for the constraint because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ConstraintBasisStatus attribute.

See ResultCount for information on how the results are ordered.

Notes

For the basis status of a variable, query VariableBasisStatus.

ConstraintBasisStatus does not apply to VariableIndex constraints. You can infer the basis status of a VariableIndex constraint by looking at the result of VariableBasisStatus.

source
MathOptInterface.ConstraintFunctionType
ConstraintFunction()

A constraint attribute for the AbstractFunction object used to define the constraint.

It is guaranteed to be equivalent but not necessarily identical to the function provided by the user.

source
MathOptInterface.CanonicalConstraintFunctionType
CanonicalConstraintFunction()

A constraint attribute for a canonical representation of the AbstractFunction object used to define the constraint.

Getting this attribute is guaranteed to return a function that is equivalent but not necessarily identical to the function provided by the user.

By default, MOI.get(model, MOI.CanonicalConstraintFunction(), ci) fallbacks to MOI.Utilities.canonical(MOI.get(model, MOI.ConstraintFunction(), ci)). However, if model knows that the constraint function is canonical then it can implement a specialized method that directly return the function without calling Utilities.canonical. Therefore, the value returned cannot be assumed to be a copy of the function stored in model. Moreover, Utilities.Model checks with Utilities.is_canonical whether the function stored internally is already canonical and if it's the case, then it returns the function stored internally instead of a copy.

source
MathOptInterface.BasisStatusCodeType
BasisStatusCode

An Enum of possible values for the ConstraintBasisStatus and VariableBasisStatus attributes, explaining the status of a given element with respect to an optimal solution basis.

Notes

  • NONBASIC_AT_LOWER and NONBASIC_AT_UPPER should be used only for constraints with the Interval set. In this case, they are necessary to distinguish which side of the constraint is active. One-sided constraints (for example, LessThan and GreaterThan) should use NONBASIC instead of the NONBASIC_AT_* values. This restriction does not apply to VariableBasisStatus, which should return NONBASIC_AT_* regardless of whether the alternative bound exists.

  • In linear programs, SUPER_BASIC occurs when a variable with no bounds is not in the basis.

Values

Possible values are:

source
diff --git a/dev/moi/reference/errors/index.html b/dev/moi/reference/errors/index.html index ceb2c9e997d..5fae9bd082d 100644 --- a/dev/moi/reference/errors/index.html +++ b/dev/moi/reference/errors/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Errors

When an MOI call fails on a model, precise errors should be thrown when possible instead of simply calling error with a message. The docstrings for the respective methods describe the errors that the implementation should throw in certain situations. This error-reporting system allows code to distinguish between internal errors (that should be shown to the user) and unsupported operations which may have automatic workarounds.

When an invalid index is used in an MOI call, an InvalidIndex is thrown:

MathOptInterface.InvalidIndexType
struct InvalidIndex{IndexType<:Index} <: Exception
+

Errors

When an MOI call fails on a model, precise errors should be thrown when possible instead of simply calling error with a message. The docstrings for the respective methods describe the errors that the implementation should throw in certain situations. This error-reporting system allows code to distinguish between internal errors (that should be shown to the user) and unsupported operations which may have automatic workarounds.

When an invalid index is used in an MOI call, an InvalidIndex is thrown:

When an invalid result index is used to retrieve an attribute, a ResultIndexBoundsError is thrown:

MathOptInterface.ResultIndexBoundsErrorType
struct ResultIndexBoundsError{AttrType} <: Exception
     attr::AttrType
@@ -57,4 +57,4 @@
 julia> throw(MOI.UnsupportedNonlinearOperator(:black_box))
 ERROR: MathOptInterface.UnsupportedNonlinearOperator: The nonlinear operator `:black_box` is not supported by the model.
 Stacktrace:
-[...]
source

Note that setting the ConstraintFunction of a VariableIndex constraint is not allowed:

+[...]
source

Note that setting the ConstraintFunction of a VariableIndex constraint is not allowed:

diff --git a/dev/moi/reference/models/index.html b/dev/moi/reference/models/index.html index 242f1052e3b..ce871fb2a5e 100644 --- a/dev/moi/reference/models/index.html +++ b/dev/moi/reference/models/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Models

Attribute interface

MathOptInterface.is_set_by_optimizeFunction
is_set_by_optimize(::AnyAttribute)

Return a Bool indicating whether the value of the attribute is set during an optimize! call, that is, the attribute is used to query the result of the optimization.

If an attribute can be set by the user, define is_copyable instead.

An attribute cannot be both is_copyable and is_set_by_optimize.

Default fallback

This function returns false by default so it should be implemented for attributes that are set by optimize!.

Undefined behavior

Querying the value of the attribute that is_set_by_optimize before a call to optimize! is undefined and depends on solver-specific behavior.

source
MathOptInterface.is_copyableFunction
is_copyable(::AnyAttribute)

Return a Bool indicating whether the value of the attribute may be copied during copy_to using set.

If an attribute is_copyable, then it cannot be modified by the optimizer, and get must always return the value that was set by the user.

If an attribute is the result of an optimization, define is_set_by_optimize instead.

An attribute cannot be both is_set_by_optimize and is_copyable.

Default fallback

By default is_copyable(attr) returns !is_set_by_optimize(attr), which is most probably true.

If an attribute should not be copied, define is_copyable(::MyAttribute) = false.

source
MathOptInterface.getFunction
MOI.get(b::AbstractBridge, ::MOI.NumberOfVariables)::Int64

Return the number of variables created by the bridge b in the model.

See also MOI.NumberOfConstraints.

Implementation notes

  • There is a default fallback, so you need only implement this if the bridge adds new variables.
source
MOI.get(b::AbstractBridge, ::MOI.ListOfVariableIndices)

Return the list of variables created by the bridge b.

See also MOI.ListOfVariableIndices.

Implementation notes

  • There is a default fallback, so you need only implement this if the bridge adds new variables.
source
MOI.get(b::AbstractBridge, ::MOI.NumberOfConstraints{F,S})::Int64 where {F,S}

Return the number of constraints of the type F-in-S created by the bridge b.

See also MOI.NumberOfConstraints.

Implementation notes

  • There is a default fallback, so you need only implement this for the constraint types returned by added_constraint_types.
source
MOI.get(b::AbstractBridge, ::MOI.ListOfConstraintIndices{F,S}) where {F,S}

Return a Vector{ConstraintIndex{F,S}} with indices of all constraints of type F-in-S created by the bride b.

See also MOI.ListOfConstraintIndices.

Implementation notes

  • There is a default fallback, so you need only implement this for the constraint types returned by added_constraint_types.
source
function MOI.get(
+

Models

Attribute interface

MathOptInterface.is_set_by_optimizeFunction
is_set_by_optimize(::AnyAttribute)

Return a Bool indicating whether the value of the attribute is set during an optimize! call, that is, the attribute is used to query the result of the optimization.

If an attribute can be set by the user, define is_copyable instead.

An attribute cannot be both is_copyable and is_set_by_optimize.

Default fallback

This function returns false by default so it should be implemented for attributes that are set by optimize!.

Undefined behavior

Querying the value of the attribute that is_set_by_optimize before a call to optimize! is undefined and depends on solver-specific behavior.

source
MathOptInterface.is_copyableFunction
is_copyable(::AnyAttribute)

Return a Bool indicating whether the value of the attribute may be copied during copy_to using set.

If an attribute is_copyable, then it cannot be modified by the optimizer, and get must always return the value that was set by the user.

If an attribute is the result of an optimization, define is_set_by_optimize instead.

An attribute cannot be both is_set_by_optimize and is_copyable.

Default fallback

By default is_copyable(attr) returns !is_set_by_optimize(attr), which is most probably true.

If an attribute should not be copied, define is_copyable(::MyAttribute) = false.

source
MathOptInterface.getFunction
MOI.get(b::AbstractBridge, ::MOI.NumberOfVariables)::Int64

Return the number of variables created by the bridge b in the model.

See also MOI.NumberOfConstraints.

Implementation notes

  • There is a default fallback, so you need only implement this if the bridge adds new variables.
source
MOI.get(b::AbstractBridge, ::MOI.ListOfVariableIndices)

Return the list of variables created by the bridge b.

See also MOI.ListOfVariableIndices.

Implementation notes

  • There is a default fallback, so you need only implement this if the bridge adds new variables.
source
MOI.get(b::AbstractBridge, ::MOI.NumberOfConstraints{F,S})::Int64 where {F,S}

Return the number of constraints of the type F-in-S created by the bridge b.

See also MOI.NumberOfConstraints.

Implementation notes

  • There is a default fallback, so you need only implement this for the constraint types returned by added_constraint_types.
source
MOI.get(b::AbstractBridge, ::MOI.ListOfConstraintIndices{F,S}) where {F,S}

Return a Vector{ConstraintIndex{F,S}} with indices of all constraints of type F-in-S created by the bride b.

See also MOI.ListOfConstraintIndices.

Implementation notes

  • There is a default fallback, so you need only implement this for the constraint types returned by added_constraint_types.
source
function MOI.get(
     model::MOI.ModelLike,
     attr::MOI.AbstractConstraintAttribute,
     bridge::AbstractBridge,
-)

Return the value of the attribute attr of the model model for the constraint bridged by bridge.

source
get(model::GenericModel, attr::MathOptInterface.AbstractOptimizerAttribute)

Return the value of the attribute attr from the model's MOI backend.

source
get(model::GenericModel, attr::MathOptInterface.AbstractModelAttribute)

Return the value of the attribute attr from the model's MOI backend.

source
get(optimizer::AbstractOptimizer, attr::AbstractOptimizerAttribute)

Return an attribute attr of the optimizer optimizer.

get(model::ModelLike, attr::AbstractModelAttribute)

Return an attribute attr of the model model.

get(model::ModelLike, attr::AbstractVariableAttribute, v::VariableIndex)

If the attribute attr is set for the variable v in the model model, return its value, return nothing otherwise. If the attribute attr is not supported by model then an error should be thrown instead of returning nothing.

get(model::ModelLike, attr::AbstractVariableAttribute, v::Vector{VariableIndex})

Return a vector of attributes corresponding to each variable in the collection v in the model model.

get(model::ModelLike, attr::AbstractConstraintAttribute, c::ConstraintIndex)

If the attribute attr is set for the constraint c in the model model, return its value, return nothing otherwise. If the attribute attr is not supported by model then an error should be thrown instead of returning nothing.

get(
+)

Return the value of the attribute attr of the model model for the constraint bridged by bridge.

source
get(model::GenericModel, attr::MathOptInterface.AbstractOptimizerAttribute)

Return the value of the attribute attr from the model's MOI backend.

source
get(model::GenericModel, attr::MathOptInterface.AbstractModelAttribute)

Return the value of the attribute attr from the model's MOI backend.

source
get(optimizer::AbstractOptimizer, attr::AbstractOptimizerAttribute)

Return an attribute attr of the optimizer optimizer.

get(model::ModelLike, attr::AbstractModelAttribute)

Return an attribute attr of the model model.

get(model::ModelLike, attr::AbstractVariableAttribute, v::VariableIndex)

If the attribute attr is set for the variable v in the model model, return its value, return nothing otherwise. If the attribute attr is not supported by model then an error should be thrown instead of returning nothing.

get(model::ModelLike, attr::AbstractVariableAttribute, v::Vector{VariableIndex})

Return a vector of attributes corresponding to each variable in the collection v in the model model.

get(model::ModelLike, attr::AbstractConstraintAttribute, c::ConstraintIndex)

If the attribute attr is set for the constraint c in the model model, return its value, return nothing otherwise. If the attribute attr is not supported by model then an error should be thrown instead of returning nothing.

get(
     model::ModelLike,
     attr::AbstractConstraintAttribute,
     c::Vector{ConstraintIndex{F,S}},
@@ -131,4 +131,4 @@
 MOI.get(model, MOI.RelativeGapTolerance())  # returns 1e-3
 # ... and the relative gap of the obtained solution is smaller or equal to the
 # tolerance
-MOI.get(model, MOI.RelativeGap())  # should return something ≤ 1e-3
Warning

The mathematical definition of "relative gap", and its allowed range, are solver-dependent. Typically, solvers expect a value between 0.0 and 1.0.

source

List of attributes useful for optimizers

MathOptInterface.TerminationStatusCodeType
TerminationStatusCode

An Enum of possible values for the TerminationStatus attribute. This attribute is meant to explain the reason why the optimizer stopped executing in the most recent call to optimize!.

Values

Possible values are:

  • OPTIMIZE_NOT_CALLED: The algorithm has not started.
  • OPTIMAL: The algorithm found a globally optimal solution.
  • INFEASIBLE: The algorithm concluded that no feasible solution exists.
  • DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem. If, additionally, a feasible (primal) solution is known to exist, this status typically implies that the problem is unbounded, with some technical exceptions.
  • LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, could not find directions for improvement, or otherwise completed its search without global guarantees.
  • LOCALLY_INFEASIBLE: The algorithm converged to an infeasible point or otherwise completed its search without finding a feasible solution, without guarantees that no feasible solution exists.
  • INFEASIBLE_OR_UNBOUNDED: The algorithm stopped because it decided that the problem is infeasible or unbounded; this occasionally happens during MIP presolve.
  • ALMOST_OPTIMAL: The algorithm found a globally optimal solution to relaxed tolerances.
  • ALMOST_INFEASIBLE: The algorithm concluded that no feasible solution exists within relaxed tolerances.
  • ALMOST_DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem within relaxed tolerances.
  • ALMOST_LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, or could not find directions for improvement within relaxed tolerances.
  • ITERATION_LIMIT: An iterative algorithm stopped after conducting the maximum number of iterations.
  • TIME_LIMIT: The algorithm stopped after a user-specified computation time.
  • NODE_LIMIT: A branch-and-bound algorithm stopped because it explored a maximum number of nodes in the branch-and-bound tree.
  • SOLUTION_LIMIT: The algorithm stopped because it found the required number of solutions. This is often used in MIPs to get the solver to return the first feasible solution it encounters.
  • MEMORY_LIMIT: The algorithm stopped because it ran out of memory.
  • OBJECTIVE_LIMIT: The algorithm stopped because it found a solution better than a minimum limit set by the user.
  • NORM_LIMIT: The algorithm stopped because the norm of an iterate became too large.
  • OTHER_LIMIT: The algorithm stopped due to a limit not covered by one of the _LIMIT_ statuses above.
  • SLOW_PROGRESS: The algorithm stopped because it was unable to continue making progress towards the solution.
  • NUMERICAL_ERROR: The algorithm stopped because it encountered unrecoverable numerical error.
  • INVALID_MODEL: The algorithm stopped because the model is invalid.
  • INVALID_OPTION: The algorithm stopped because it was provided an invalid option.
  • INTERRUPTED: The algorithm stopped because of an interrupt signal.
  • OTHER_ERROR: The algorithm stopped because of an error not covered by one of the statuses defined above.
source
MathOptInterface.DUAL_INFEASIBLEConstant
DUAL_INFEASIBLE::TerminationStatusCode

An instance of the TerminationStatusCode enum.

DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem. If, additionally, a feasible (primal) solution is known to exist, this status typically implies that the problem is unbounded, with some technical exceptions.

source
MathOptInterface.LOCALLY_SOLVEDConstant
LOCALLY_SOLVED::TerminationStatusCode

An instance of the TerminationStatusCode enum.

LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, could not find directions for improvement, or otherwise completed its search without global guarantees.

source
MathOptInterface.LOCALLY_INFEASIBLEConstant
LOCALLY_INFEASIBLE::TerminationStatusCode

An instance of the TerminationStatusCode enum.

LOCALLY_INFEASIBLE: The algorithm converged to an infeasible point or otherwise completed its search without finding a feasible solution, without guarantees that no feasible solution exists.

source
MathOptInterface.SOLUTION_LIMITConstant
SOLUTION_LIMIT::TerminationStatusCode

An instance of the TerminationStatusCode enum.

SOLUTION_LIMIT: The algorithm stopped because it found the required number of solutions. This is often used in MIPs to get the solver to return the first feasible solution it encounters.

source
MathOptInterface.DualStatusType
DualStatus(result_index::Int = 1)

A model attribute for the ResultStatusCode of the dual result result_index. If result_index is omitted, it defaults to 1.

See ResultCount for information on how the results are ordered.

If result_index is larger than the value of ResultCount then NO_SOLUTION is returned.

source
MathOptInterface.ResultCountType
ResultCount()

A model attribute for the number of results available.

Order of solutions

A number of attributes contain an index, result_index, which is used to refer to one of the available results. Thus, result_index must be an integer between 1 and the number of available results.

As a general rule, the first result (result_index=1) is the most important result (for example, an optimal solution or an infeasibility certificate). Other results will typically be alternate solutions that the solver found during the search for the first result.

If a (local) optimal solution is available, that is, TerminationStatus is OPTIMAL or LOCALLY_SOLVED, the first result must correspond to the (locally) optimal solution. Other results may be alternative optimal solutions, or they may be other suboptimal solutions; use ObjectiveValue to distinguish between them.

If a primal or dual infeasibility certificate is available, that is, TerminationStatus is INFEASIBLE or DUAL_INFEASIBLE and the corresponding PrimalStatus or DualStatus is INFEASIBILITY_CERTIFICATE, then the first result must be a certificate. Other results may be alternate certificates, or infeasible points.

source
MathOptInterface.ObjectiveValueType
ObjectiveValue(result_index::Int = 1)

A model attribute for the objective value of the primal solution result_index.

If the solver does not have a primal value for the objective because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ObjectiveValue attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.DualObjectiveValueType
DualObjectiveValue(result_index::Int = 1)

A model attribute for the value of the objective function of the dual problem for the result_indexth dual result.

If the solver does not have a dual value for the objective because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a primal solution is available), the result is undefined. Users should first check DualStatus before accessing the DualObjectiveValue attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.RelativeGapType
RelativeGap()

A model attribute for the final relative optimality gap.

Warning

The definition of this gap is solver-dependent. However, most solvers implementing this attribute define the relative gap as some variation of $\frac{|b-f|}{|f|}$, where $b$ is the best bound and $f$ is the best feasible objective value.

source
MathOptInterface.SimplexIterationsType
SimplexIterations()

A model attribute for the cumulative number of simplex iterations during the optimization process.

For a mixed-integer program (MIP), the return value is the total simplex iterations for all nodes.

source
MathOptInterface.NodeCountType
NodeCount()

A model attribute for the total number of branch-and-bound nodes explored while solving a mixed-integer program (MIP).

source

ResultStatusCode

MathOptInterface.ResultStatusCodeType
ResultStatusCode

An Enum of possible values for the PrimalStatus and DualStatus attributes.

The values indicate how to interpret the result vector.

Values

Possible values are:

  • NO_SOLUTION: the result vector is empty.
  • FEASIBLE_POINT: the result vector is a feasible point.
  • NEARLY_FEASIBLE_POINT: the result vector is feasible if some constraint tolerances are relaxed.
  • INFEASIBLE_POINT: the result vector is an infeasible point.
  • INFEASIBILITY_CERTIFICATE: the result vector is an infeasibility certificate. If the PrimalStatus is INFEASIBILITY_CERTIFICATE, then the primal result vector is a certificate of dual infeasibility. If the DualStatus is INFEASIBILITY_CERTIFICATE, then the dual result vector is a proof of primal infeasibility.
  • NEARLY_INFEASIBILITY_CERTIFICATE: the result satisfies a relaxed criterion for a certificate of infeasibility.
  • REDUCTION_CERTIFICATE: the result vector is an ill-posed certificate; see this article for details. If the PrimalStatus is REDUCTION_CERTIFICATE, then the primal result vector is a proof that the dual problem is ill-posed. If the DualStatus is REDUCTION_CERTIFICATE, then the dual result vector is a proof that the primal is ill-posed.
  • NEARLY_REDUCTION_CERTIFICATE: the result satisfies a relaxed criterion for an ill-posed certificate.
  • UNKNOWN_RESULT_STATUS: the result vector contains a solution with an unknown interpretation.
  • OTHER_RESULT_STATUS: the result vector contains a solution with an interpretation not covered by one of the statuses defined above
source
MathOptInterface.INFEASIBILITY_CERTIFICATEConstant
INFEASIBILITY_CERTIFICATE::ResultStatusCode

An instance of the ResultStatusCode enum.

INFEASIBILITY_CERTIFICATE: the result vector is an infeasibility certificate. If the PrimalStatus is INFEASIBILITY_CERTIFICATE, then the primal result vector is a certificate of dual infeasibility. If the DualStatus is INFEASIBILITY_CERTIFICATE, then the dual result vector is a proof of primal infeasibility.

source
MathOptInterface.REDUCTION_CERTIFICATEConstant
REDUCTION_CERTIFICATE::ResultStatusCode

An instance of the ResultStatusCode enum.

REDUCTION_CERTIFICATE: the result vector is an ill-posed certificate; see this article for details. If the PrimalStatus is REDUCTION_CERTIFICATE, then the primal result vector is a proof that the dual problem is ill-posed. If the DualStatus is REDUCTION_CERTIFICATE, then the dual result vector is a proof that the primal is ill-posed.

source

Conflict Status

MathOptInterface.compute_conflict!Function
compute_conflict!(optimizer::AbstractOptimizer)

Computes a minimal subset of constraints such that the model with the other constraint removed is still infeasible.

Some solvers call a set of conflicting constraints an Irreducible Inconsistent Subsystem (IIS).

See also ConflictStatus and ConstraintConflictStatus.

Note

If the model is modified after a call to compute_conflict!, the implementor is not obliged to purge the conflict. Any calls to the above attributes may return values for the original conflict without a warning. Similarly, when modifying the model, the conflict can be discarded.

source
MathOptInterface.ConflictStatusCodeType
ConflictStatusCode

An Enum of possible values for the ConflictStatus attribute. This attribute is meant to explain the reason why the conflict finder stopped executing in the most recent call to compute_conflict!.

Possible values are:

  • COMPUTE_CONFLICT_NOT_CALLED: the function compute_conflict! has not yet been called
  • NO_CONFLICT_EXISTS: there is no conflict because the problem is feasible
  • NO_CONFLICT_FOUND: the solver could not find a conflict
  • CONFLICT_FOUND: at least one conflict could be found
source
MathOptInterface.ConflictParticipationStatusCodeType
ConflictParticipationStatusCode

An Enum of possible values for the ConstraintConflictStatus attribute. This attribute is meant to indicate whether a given constraint participates or not in the last computed conflict.

Values

Possible values are:

  • NOT_IN_CONFLICT: the constraint does not participate in the conflict
  • IN_CONFLICT: the constraint participates in the conflict
  • MAYBE_IN_CONFLICT: the constraint may participate in the conflict, the solver was not able to prove that the constraint can be excluded from the conflict
source
+MOI.get(model, MOI.RelativeGap()) # should return something ≤ 1e-3
Warning

The mathematical definition of "relative gap", and its allowed range, are solver-dependent. Typically, solvers expect a value between 0.0 and 1.0.

source

List of attributes useful for optimizers

MathOptInterface.TerminationStatusCodeType
TerminationStatusCode

An Enum of possible values for the TerminationStatus attribute. This attribute is meant to explain the reason why the optimizer stopped executing in the most recent call to optimize!.

Values

Possible values are:

  • OPTIMIZE_NOT_CALLED: The algorithm has not started.
  • OPTIMAL: The algorithm found a globally optimal solution.
  • INFEASIBLE: The algorithm concluded that no feasible solution exists.
  • DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem. If, additionally, a feasible (primal) solution is known to exist, this status typically implies that the problem is unbounded, with some technical exceptions.
  • LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, could not find directions for improvement, or otherwise completed its search without global guarantees.
  • LOCALLY_INFEASIBLE: The algorithm converged to an infeasible point or otherwise completed its search without finding a feasible solution, without guarantees that no feasible solution exists.
  • INFEASIBLE_OR_UNBOUNDED: The algorithm stopped because it decided that the problem is infeasible or unbounded; this occasionally happens during MIP presolve.
  • ALMOST_OPTIMAL: The algorithm found a globally optimal solution to relaxed tolerances.
  • ALMOST_INFEASIBLE: The algorithm concluded that no feasible solution exists within relaxed tolerances.
  • ALMOST_DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem within relaxed tolerances.
  • ALMOST_LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, or could not find directions for improvement within relaxed tolerances.
  • ITERATION_LIMIT: An iterative algorithm stopped after conducting the maximum number of iterations.
  • TIME_LIMIT: The algorithm stopped after a user-specified computation time.
  • NODE_LIMIT: A branch-and-bound algorithm stopped because it explored a maximum number of nodes in the branch-and-bound tree.
  • SOLUTION_LIMIT: The algorithm stopped because it found the required number of solutions. This is often used in MIPs to get the solver to return the first feasible solution it encounters.
  • MEMORY_LIMIT: The algorithm stopped because it ran out of memory.
  • OBJECTIVE_LIMIT: The algorithm stopped because it found a solution better than a minimum limit set by the user.
  • NORM_LIMIT: The algorithm stopped because the norm of an iterate became too large.
  • OTHER_LIMIT: The algorithm stopped due to a limit not covered by one of the _LIMIT_ statuses above.
  • SLOW_PROGRESS: The algorithm stopped because it was unable to continue making progress towards the solution.
  • NUMERICAL_ERROR: The algorithm stopped because it encountered unrecoverable numerical error.
  • INVALID_MODEL: The algorithm stopped because the model is invalid.
  • INVALID_OPTION: The algorithm stopped because it was provided an invalid option.
  • INTERRUPTED: The algorithm stopped because of an interrupt signal.
  • OTHER_ERROR: The algorithm stopped because of an error not covered by one of the statuses defined above.
source
MathOptInterface.DUAL_INFEASIBLEConstant
DUAL_INFEASIBLE::TerminationStatusCode

An instance of the TerminationStatusCode enum.

DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem. If, additionally, a feasible (primal) solution is known to exist, this status typically implies that the problem is unbounded, with some technical exceptions.

source
MathOptInterface.LOCALLY_SOLVEDConstant
LOCALLY_SOLVED::TerminationStatusCode

An instance of the TerminationStatusCode enum.

LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, could not find directions for improvement, or otherwise completed its search without global guarantees.

source
MathOptInterface.LOCALLY_INFEASIBLEConstant
LOCALLY_INFEASIBLE::TerminationStatusCode

An instance of the TerminationStatusCode enum.

LOCALLY_INFEASIBLE: The algorithm converged to an infeasible point or otherwise completed its search without finding a feasible solution, without guarantees that no feasible solution exists.

source
MathOptInterface.SOLUTION_LIMITConstant
SOLUTION_LIMIT::TerminationStatusCode

An instance of the TerminationStatusCode enum.

SOLUTION_LIMIT: The algorithm stopped because it found the required number of solutions. This is often used in MIPs to get the solver to return the first feasible solution it encounters.

source
MathOptInterface.DualStatusType
DualStatus(result_index::Int = 1)

A model attribute for the ResultStatusCode of the dual result result_index. If result_index is omitted, it defaults to 1.

See ResultCount for information on how the results are ordered.

If result_index is larger than the value of ResultCount then NO_SOLUTION is returned.

source
MathOptInterface.ResultCountType
ResultCount()

A model attribute for the number of results available.

Order of solutions

A number of attributes contain an index, result_index, which is used to refer to one of the available results. Thus, result_index must be an integer between 1 and the number of available results.

As a general rule, the first result (result_index=1) is the most important result (for example, an optimal solution or an infeasibility certificate). Other results will typically be alternate solutions that the solver found during the search for the first result.

If a (local) optimal solution is available, that is, TerminationStatus is OPTIMAL or LOCALLY_SOLVED, the first result must correspond to the (locally) optimal solution. Other results may be alternative optimal solutions, or they may be other suboptimal solutions; use ObjectiveValue to distinguish between them.

If a primal or dual infeasibility certificate is available, that is, TerminationStatus is INFEASIBLE or DUAL_INFEASIBLE and the corresponding PrimalStatus or DualStatus is INFEASIBILITY_CERTIFICATE, then the first result must be a certificate. Other results may be alternate certificates, or infeasible points.

source
MathOptInterface.ObjectiveValueType
ObjectiveValue(result_index::Int = 1)

A model attribute for the objective value of the primal solution result_index.

If the solver does not have a primal value for the objective because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ObjectiveValue attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.DualObjectiveValueType
DualObjectiveValue(result_index::Int = 1)

A model attribute for the value of the objective function of the dual problem for the result_indexth dual result.

If the solver does not have a dual value for the objective because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a primal solution is available), the result is undefined. Users should first check DualStatus before accessing the DualObjectiveValue attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.RelativeGapType
RelativeGap()

A model attribute for the final relative optimality gap.

Warning

The definition of this gap is solver-dependent. However, most solvers implementing this attribute define the relative gap as some variation of $\frac{|b-f|}{|f|}$, where $b$ is the best bound and $f$ is the best feasible objective value.

source
MathOptInterface.SimplexIterationsType
SimplexIterations()

A model attribute for the cumulative number of simplex iterations during the optimization process.

For a mixed-integer program (MIP), the return value is the total simplex iterations for all nodes.

source
MathOptInterface.NodeCountType
NodeCount()

A model attribute for the total number of branch-and-bound nodes explored while solving a mixed-integer program (MIP).

source

ResultStatusCode

MathOptInterface.ResultStatusCodeType
ResultStatusCode

An Enum of possible values for the PrimalStatus and DualStatus attributes.

The values indicate how to interpret the result vector.

Values

Possible values are:

  • NO_SOLUTION: the result vector is empty.
  • FEASIBLE_POINT: the result vector is a feasible point.
  • NEARLY_FEASIBLE_POINT: the result vector is feasible if some constraint tolerances are relaxed.
  • INFEASIBLE_POINT: the result vector is an infeasible point.
  • INFEASIBILITY_CERTIFICATE: the result vector is an infeasibility certificate. If the PrimalStatus is INFEASIBILITY_CERTIFICATE, then the primal result vector is a certificate of dual infeasibility. If the DualStatus is INFEASIBILITY_CERTIFICATE, then the dual result vector is a proof of primal infeasibility.
  • NEARLY_INFEASIBILITY_CERTIFICATE: the result satisfies a relaxed criterion for a certificate of infeasibility.
  • REDUCTION_CERTIFICATE: the result vector is an ill-posed certificate; see this article for details. If the PrimalStatus is REDUCTION_CERTIFICATE, then the primal result vector is a proof that the dual problem is ill-posed. If the DualStatus is REDUCTION_CERTIFICATE, then the dual result vector is a proof that the primal is ill-posed.
  • NEARLY_REDUCTION_CERTIFICATE: the result satisfies a relaxed criterion for an ill-posed certificate.
  • UNKNOWN_RESULT_STATUS: the result vector contains a solution with an unknown interpretation.
  • OTHER_RESULT_STATUS: the result vector contains a solution with an interpretation not covered by one of the statuses defined above
source
MathOptInterface.INFEASIBILITY_CERTIFICATEConstant
INFEASIBILITY_CERTIFICATE::ResultStatusCode

An instance of the ResultStatusCode enum.

INFEASIBILITY_CERTIFICATE: the result vector is an infeasibility certificate. If the PrimalStatus is INFEASIBILITY_CERTIFICATE, then the primal result vector is a certificate of dual infeasibility. If the DualStatus is INFEASIBILITY_CERTIFICATE, then the dual result vector is a proof of primal infeasibility.

source
MathOptInterface.REDUCTION_CERTIFICATEConstant
REDUCTION_CERTIFICATE::ResultStatusCode

An instance of the ResultStatusCode enum.

REDUCTION_CERTIFICATE: the result vector is an ill-posed certificate; see this article for details. If the PrimalStatus is REDUCTION_CERTIFICATE, then the primal result vector is a proof that the dual problem is ill-posed. If the DualStatus is REDUCTION_CERTIFICATE, then the dual result vector is a proof that the primal is ill-posed.

source

Conflict Status

MathOptInterface.compute_conflict!Function
compute_conflict!(optimizer::AbstractOptimizer)

Computes a minimal subset of constraints such that the model with the other constraint removed is still infeasible.

Some solvers call a set of conflicting constraints an Irreducible Inconsistent Subsystem (IIS).

See also ConflictStatus and ConstraintConflictStatus.

Note

If the model is modified after a call to compute_conflict!, the implementor is not obliged to purge the conflict. Any calls to the above attributes may return values for the original conflict without a warning. Similarly, when modifying the model, the conflict can be discarded.

source
MathOptInterface.ConflictStatusCodeType
ConflictStatusCode

An Enum of possible values for the ConflictStatus attribute. This attribute is meant to explain the reason why the conflict finder stopped executing in the most recent call to compute_conflict!.

Possible values are:

  • COMPUTE_CONFLICT_NOT_CALLED: the function compute_conflict! has not yet been called
  • NO_CONFLICT_EXISTS: there is no conflict because the problem is feasible
  • NO_CONFLICT_FOUND: the solver could not find a conflict
  • CONFLICT_FOUND: at least one conflict could be found
source
MathOptInterface.ConflictParticipationStatusCodeType
ConflictParticipationStatusCode

An Enum of possible values for the ConstraintConflictStatus attribute. This attribute is meant to indicate whether a given constraint participates or not in the last computed conflict.

Values

Possible values are:

  • NOT_IN_CONFLICT: the constraint does not participate in the conflict
  • IN_CONFLICT: the constraint participates in the conflict
  • MAYBE_IN_CONFLICT: the constraint may participate in the conflict, the solver was not able to prove that the constraint can be excluded from the conflict
source
diff --git a/dev/moi/reference/modification/index.html b/dev/moi/reference/modification/index.html index 1202ad28c2f..bcc5d8f0f2c 100644 --- a/dev/moi/reference/modification/index.html +++ b/dev/moi/reference/modification/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Modifications

MathOptInterface.modifyFunction

Constraint Function

modify(model::ModelLike, ci::ConstraintIndex, change::AbstractFunctionModification)

Apply the modification specified by change to the function of constraint ci.

An ModifyConstraintNotAllowed error is thrown if modifying constraints is not supported by the model model.

Examples

modify(model, ci, ScalarConstantChange(10.0))

Objective Function

modify(model::ModelLike, ::ObjectiveFunction, change::AbstractFunctionModification)

Apply the modification specified by change to the objective function of model. To change the function completely, call set instead.

An ModifyObjectiveNotAllowed error is thrown if modifying objectives is not supported by the model model.

Examples

modify(model, ObjectiveFunction{ScalarAffineFunction{Float64}}(), ScalarConstantChange(10.0))

Multiple modifications in Constraint Functions

modify(
+

Modifications

MathOptInterface.modifyFunction

Constraint Function

modify(model::ModelLike, ci::ConstraintIndex, change::AbstractFunctionModification)

Apply the modification specified by change to the function of constraint ci.

An ModifyConstraintNotAllowed error is thrown if modifying constraints is not supported by the model model.

Examples

modify(model, ci, ScalarConstantChange(10.0))

Objective Function

modify(model::ModelLike, ::ObjectiveFunction, change::AbstractFunctionModification)

Apply the modification specified by change to the objective function of model. To change the function completely, call set instead.

An ModifyObjectiveNotAllowed error is thrown if modifying objectives is not supported by the model model.

Examples

modify(model, ObjectiveFunction{ScalarAffineFunction{Float64}}(), ScalarConstantChange(10.0))

Multiple modifications in Constraint Functions

modify(
     model::ModelLike,
     cis::AbstractVector{<:ConstraintIndex},
     changes::AbstractVector{<:AbstractFunctionModification},
@@ -32,4 +32,4 @@
 )

A struct used to request a change in the quadratic coefficient of a ScalarQuadraticFunction.

Scaling factors

A ScalarQuadraticFunction has an implicit 0.5 scaling factor in front of the Q matrix. This modification applies to terms in the Q matrix.

If variable_1 == variable_2, this modification sets the corresponding diagonal element of the Q matrix to new_coefficient.

If variable_1 != variable_2, this modification is equivalent to setting both the corresponding upper- and lower-triangular elements of the Q matrix to new_coefficient.

As a consequence:

  • to modify the term x^2 to become 2x^2, new_coefficient must be 4
  • to modify the term xy to become 2xy, new_coefficient must be 2
source
+) where {T}

A struct used to request a change in the linear coefficients of a single variable in a vector-valued function.

New coefficients are specified by (output_index, coefficient) tuples.

Applicable to VectorAffineFunction and VectorQuadraticFunction.

source
diff --git a/dev/moi/reference/nonlinear/index.html b/dev/moi/reference/nonlinear/index.html index 590484eecfb..c047d575622 100644 --- a/dev/moi/reference/nonlinear/index.html +++ b/dev/moi/reference/nonlinear/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Nonlinear programming

Types

MathOptInterface.AbstractNLPEvaluatorType
AbstractNLPEvaluator

Abstract supertype for the callback object that is used to query function values, derivatives, and expression graphs.

It is used in NLPBlockData.

Example

This example uses the Test.HS071 evaluator.

julia> import MathOptInterface as MOI
+

Nonlinear programming

Types

MathOptInterface.AbstractNLPEvaluatorType
AbstractNLPEvaluator

Abstract supertype for the callback object that is used to query function values, derivatives, and expression graphs.

It is used in NLPBlockData.

Example

This example uses the Test.HS071 evaluator.

julia> import MathOptInterface as MOI
 
 julia> evaluator = MOI.Test.HS071(true);
 
@@ -425,4 +425,4 @@
 :(x[MOI.VariableIndex(1)] * x[MOI.VariableIndex(2)] * x[MOI.VariableIndex(3)] * x[MOI.VariableIndex(4)] >= 25.0)
 
 julia> MOI.constraint_expr(evaluator, 2)
-:(x[MOI.VariableIndex(1)] ^ 2 + x[MOI.VariableIndex(2)] ^ 2 + x[MOI.VariableIndex(3)] ^ 2 + x[MOI.VariableIndex(4)] ^ 2 == 40.0)
source
+:(x[MOI.VariableIndex(1)] ^ 2 + x[MOI.VariableIndex(2)] ^ 2 + x[MOI.VariableIndex(3)] ^ 2 + x[MOI.VariableIndex(4)] ^ 2 == 40.0)
source
diff --git a/dev/moi/reference/standard_form/index.html b/dev/moi/reference/standard_form/index.html index fa2340e8c8e..f405f24791b 100644 --- a/dev/moi/reference/standard_form/index.html +++ b/dev/moi/reference/standard_form/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Standard form

Functions

MathOptInterface.AbstractFunctionType
AbstractFunction

Abstract supertype for function objects.

Required methods

All functions must implement:

Abstract subtypes of AbstractFunction may require additional methods to be implemented.

source
MathOptInterface.constantFunction
constant(f::AbstractFunction[, ::Type{T}]) where {T}

Returns the constant term of a scalar-valued function, or the constant vector of a vector-valued function.

If f is untyped and T is provided, returns zero(T).

source
constant(set::Union{EqualTo,GreaterThan,LessThan,Parameter})

Returns the constant term of the set set.

Example

julia> import MathOptInterface as MOI
+

Standard form

Functions

MathOptInterface.AbstractFunctionType
AbstractFunction

Abstract supertype for function objects.

Required methods

All functions must implement:

Abstract subtypes of AbstractFunction may require additional methods to be implemented.

source
MathOptInterface.constantFunction
constant(f::AbstractFunction[, ::Type{T}]) where {T}

Returns the constant term of a scalar-valued function, or the constant vector of a vector-valued function.

If f is untyped and T is provided, returns zero(T).

source
constant(set::Union{EqualTo,GreaterThan,LessThan,Parameter})

Returns the constant term of the set set.

Example

julia> import MathOptInterface as MOI
 
 julia> MOI.constant(MOI.GreaterThan(1.0))
 1.0
@@ -944,4 +944,4 @@
            MOI.VectorOfVariables([t; vec(X)]),
            MOI.RootDetConeSquare(2),
        )
-MathOptInterface.ConstraintIndex{MathOptInterface.VectorOfVariables, MathOptInterface.RootDetConeSquare}(1)
source
+MathOptInterface.ConstraintIndex{MathOptInterface.VectorOfVariables, MathOptInterface.RootDetConeSquare}(1)
source
diff --git a/dev/moi/reference/variables/index.html b/dev/moi/reference/variables/index.html index 168d12683ef..b5ff4a7f539 100644 --- a/dev/moi/reference/variables/index.html +++ b/dev/moi/reference/variables/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Variables

Functions

MathOptInterface.add_variablesFunction
add_variables(model::ModelLike, n::Int)::Vector{VariableIndex}

Add n scalar variables to the model, returning a vector of variable indices.

A AddVariableNotAllowed error is thrown if adding variables cannot be done in the current state of the model model.

source
MathOptInterface.add_constrained_variableFunction
add_constrained_variable(
+

Variables

Functions

MathOptInterface.add_variablesFunction
add_variables(model::ModelLike, n::Int)::Vector{VariableIndex}

Add n scalar variables to the model, returning a vector of variable indices.

A AddVariableNotAllowed error is thrown if adding variables cannot be done in the current state of the model model.

source
MathOptInterface.add_constrained_variableFunction
add_constrained_variable(
     model::ModelLike,
     set::AbstractScalarSet
 )::Tuple{MOI.VariableIndex,
@@ -25,4 +25,4 @@
 )::Bool

Return a Bool indicating whether model supports constraining a variable to belong to a set of type S either on creation of the variable with add_constrained_variable or after the variable is created with add_constraint.

By default, this function falls back to supports_add_constrained_variables(model, Reals) && supports_constraint(model, MOI.VariableIndex, S) which is the correct definition for most models.

Example

Suppose that a solver supports only two kind of variables: binary variables and continuous variables with a lower bound. If the solver decides not to support VariableIndex-in-Binary and VariableIndex-in-GreaterThan constraints, it only has to implement add_constrained_variable for these two sets which prevents the user to add both a binary constraint and a lower bound on the same variable. Moreover, if the user adds a VariableIndex-in-GreaterThan constraint, implementing this interface (that is, supports_add_constrained_variables) enables the constraint to be transparently bridged into a supported constraint.

source
MathOptInterface.supports_add_constrained_variablesFunction
supports_add_constrained_variables(
     model::ModelLike,
     S::Type{<:AbstractVectorSet}
-)::Bool

Return a Bool indicating whether model supports constraining a vector of variables to belong to a set of type S either on creation of the vector of variables with add_constrained_variables or after the variable is created with add_constraint.

By default, if S is Reals then this function returns true and otherwise, it falls back to supports_add_constrained_variables(model, Reals) && supports_constraint(model, MOI.VectorOfVariables, S) which is the correct definition for most models.

Example

In the standard conic form (see Duality), the variables are grouped into several cones and the constraints are affine equality constraints. If Reals is not one of the cones supported by the solvers then it needs to implement supports_add_constrained_variables(::Optimizer, ::Type{Reals}) = false as free variables are not supported. The solvers should then implement supports_add_constrained_variables(::Optimizer, ::Type{<:SupportedCones}) = true where SupportedCones is the union of all cone types that are supported; it does not have to implement the method supports_constraint(::Type{VectorOfVariables}, Type{<:SupportedCones}) as it should return false and it's the default. This prevents the user to constrain the same variable in two different cones. When a VectorOfVariables-in-S is added, the variables of the vector have already been created so they already belong to given cones. If bridges are enabled, the constraint will therefore be bridged by adding slack variables in S and equality constraints ensuring that the slack variables are equal to the corresponding variables of the given constraint function.

Note that there may also be sets for which !supports_add_constrained_variables(model, S) and supports_constraint(model, MOI.VectorOfVariables, S). For instance, suppose a solver supports positive semidefinite variable constraints and two types of variables: binary variables and nonnegative variables. Then the solver should support adding VectorOfVariables-in-PositiveSemidefiniteConeTriangle constraints, but it should not support creating variables constrained to belong to the PositiveSemidefiniteConeTriangle because the variables in PositiveSemidefiniteConeTriangle should first be created as either binary or non-negative.

source
MathOptInterface.is_validMethod
is_valid(model::ModelLike, index::Index)::Bool

Return a Bool indicating whether this index refers to a valid object in the model model.

source
MathOptInterface.deleteMethod
delete(model::ModelLike, index::Index)

Delete the referenced object from the model. Throw DeleteNotAllowed if if index cannot be deleted.

The following modifications also take effect if Index is VariableIndex:

  • If index used in the objective function, it is removed from the function, that is, it is substituted for zero.
  • For each func-in-set constraint of the model:
    • If func isa VariableIndex and func == index then the constraint is deleted.
    • If func isa VectorOfVariables and index in func.variables then
      • if length(func.variables) == 1 is one, the constraint is deleted;
      • if length(func.variables) > 1 and supports_dimension_update(set) then then the variable is removed from func and set is replaced by update_dimension(set, MOI.dimension(set) - 1).
      • Otherwise, a DeleteNotAllowed error is thrown.
    • Otherwise, the variable is removed from func, that is, it is substituted for zero.
source
MathOptInterface.deleteMethod
delete(model::ModelLike, indices::Vector{R<:Index}) where {R}

Delete the referenced objects in the vector indices from the model. It may be assumed that R is a concrete type. The default fallback sequentially deletes the individual items in indices, although specialized implementations may be more efficient.

source

Attributes

MathOptInterface.VariableNameType
VariableName()

A variable attribute for a string identifying the variable. It is valid for two variables to have the same name; however, variables with duplicate names cannot be looked up using get. It has a default value of "" if not set`.

source
MathOptInterface.VariablePrimalStartType
VariablePrimalStart()

A variable attribute for the initial assignment to some primal variable's value that the optimizer may use to warm-start the solve. May be a number or nothing (unset).

source
MathOptInterface.VariablePrimalType
VariablePrimal(result_index::Int = 1)

A variable attribute for the assignment to some primal variable's value in result result_index. If result_index is omitted, it is 1 by default.

If the solver does not have a primal value for the variable because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the VariablePrimal attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.VariableBasisStatusType
VariableBasisStatus(result_index::Int = 1)

A variable attribute for the BasisStatusCode of a variable in result result_index, with respect to an available optimal solution basis.

If the solver does not have a basis status for the variable because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the VariableBasisStatus attribute.

See ResultCount for information on how the results are ordered.

source
+)::Bool

Return a Bool indicating whether model supports constraining a vector of variables to belong to a set of type S either on creation of the vector of variables with add_constrained_variables or after the variable is created with add_constraint.

By default, if S is Reals then this function returns true and otherwise, it falls back to supports_add_constrained_variables(model, Reals) && supports_constraint(model, MOI.VectorOfVariables, S) which is the correct definition for most models.

Example

In the standard conic form (see Duality), the variables are grouped into several cones and the constraints are affine equality constraints. If Reals is not one of the cones supported by the solvers then it needs to implement supports_add_constrained_variables(::Optimizer, ::Type{Reals}) = false as free variables are not supported. The solvers should then implement supports_add_constrained_variables(::Optimizer, ::Type{<:SupportedCones}) = true where SupportedCones is the union of all cone types that are supported; it does not have to implement the method supports_constraint(::Type{VectorOfVariables}, Type{<:SupportedCones}) as it should return false and it's the default. This prevents the user to constrain the same variable in two different cones. When a VectorOfVariables-in-S is added, the variables of the vector have already been created so they already belong to given cones. If bridges are enabled, the constraint will therefore be bridged by adding slack variables in S and equality constraints ensuring that the slack variables are equal to the corresponding variables of the given constraint function.

Note that there may also be sets for which !supports_add_constrained_variables(model, S) and supports_constraint(model, MOI.VectorOfVariables, S). For instance, suppose a solver supports positive semidefinite variable constraints and two types of variables: binary variables and nonnegative variables. Then the solver should support adding VectorOfVariables-in-PositiveSemidefiniteConeTriangle constraints, but it should not support creating variables constrained to belong to the PositiveSemidefiniteConeTriangle because the variables in PositiveSemidefiniteConeTriangle should first be created as either binary or non-negative.

source
MathOptInterface.is_validMethod
is_valid(model::ModelLike, index::Index)::Bool

Return a Bool indicating whether this index refers to a valid object in the model model.

source
MathOptInterface.deleteMethod
delete(model::ModelLike, index::Index)

Delete the referenced object from the model. Throw DeleteNotAllowed if if index cannot be deleted.

The following modifications also take effect if Index is VariableIndex:

  • If index used in the objective function, it is removed from the function, that is, it is substituted for zero.
  • For each func-in-set constraint of the model:
    • If func isa VariableIndex and func == index then the constraint is deleted.
    • If func isa VectorOfVariables and index in func.variables then
      • if length(func.variables) == 1 is one, the constraint is deleted;
      • if length(func.variables) > 1 and supports_dimension_update(set) then then the variable is removed from func and set is replaced by update_dimension(set, MOI.dimension(set) - 1).
      • Otherwise, a DeleteNotAllowed error is thrown.
    • Otherwise, the variable is removed from func, that is, it is substituted for zero.
source
MathOptInterface.deleteMethod
delete(model::ModelLike, indices::Vector{R<:Index}) where {R}

Delete the referenced objects in the vector indices from the model. It may be assumed that R is a concrete type. The default fallback sequentially deletes the individual items in indices, although specialized implementations may be more efficient.

source

Attributes

MathOptInterface.VariableNameType
VariableName()

A variable attribute for a string identifying the variable. It is valid for two variables to have the same name; however, variables with duplicate names cannot be looked up using get. It has a default value of "" if not set`.

source
MathOptInterface.VariablePrimalStartType
VariablePrimalStart()

A variable attribute for the initial assignment to some primal variable's value that the optimizer may use to warm-start the solve. May be a number or nothing (unset).

source
MathOptInterface.VariablePrimalType
VariablePrimal(result_index::Int = 1)

A variable attribute for the assignment to some primal variable's value in result result_index. If result_index is omitted, it is 1 by default.

If the solver does not have a primal value for the variable because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the VariablePrimal attribute.

See ResultCount for information on how the results are ordered.

source
MathOptInterface.VariableBasisStatusType
VariableBasisStatus(result_index::Int = 1)

A variable attribute for the BasisStatusCode of a variable in result result_index, with respect to an available optimal solution basis.

If the solver does not have a basis status for the variable because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the VariableBasisStatus attribute.

See ResultCount for information on how the results are ordered.

source
diff --git a/dev/moi/release_notes/index.html b/dev/moi/release_notes/index.html index 6390a50c918..d8a9378f0f2 100644 --- a/dev/moi/release_notes/index.html +++ b/dev/moi/release_notes/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

v1.31.2 (August 30, 2024)

Fixed

  • Fixed a bug writing FileFormats.MPS files with MAX_SENSE and quadratic objectives (#2539)

Other

  • Improved the docstrings in src/nlp.jl (#2537)

v1.31.1 (August 7, 2024)

Fixed

  • Fixed NLPBlock when used with bridges (#2524)

Other

  • Use inverse_trimap instead of redefining it (#2522)
  • Improved UnsupportedConstraint error (#2530)

v1.31.0 (June 26, 2024)

Added

  • Added default show(::IO, ::ModelLike) method (#2505) (#2510)
  • Set map bridges can now implement the various map_function methods to use the value of the bridge as the first argument, instead of passing the type of the bridge. (#2509)
  • Added cannot_unbridge argument to Bridges.runtests

Fixed

  • Fixed supports_constraint for IndicatorSOS1Bridge (#2507)
  • Fixed getting ConstraintDual in slack bridges (#2508) (#2514) (#2515)
  • Fixed FileFormats.NL to read linear constraints as ScalarAffineFunction (#2512)
  • Changed default_copy_to to maintain the order of variables during copy_to. This change is marked as non-breaking, but it may cause different (but mathematically equivalent) models to be formulated, particularly conic models with bridges. (#2495) (#2520)

Other

v1.30.0 (May 23, 2024)

Added

  • Added input and output functions to Bridges.runtests (#2497)

Fixed

  • Improved the heuristic of when to write variable cones in FileFormats.CBF (#2494)
  • Fixed Bridges.runtests when model has no variable (#2499)
  • Fixed getting an attribute of an empty vector (#2501)

Other

  • Fixed links in the documentation (#2502)

v1.29.0 (April 19, 2024)

Added

Fixed

Other

  • Updated versions in CI (#2484) (#2489)
  • Fixed duplicate names in tests (#2485)

v1.28.1 (April 13, 2024)

Fixed

  • Fixed a bug reading MPS files with integer variables and no corresponding entry in the BOUNDS section (#2480)

v1.28.0 (April 11, 2024)

Added

Fixed

  • Fixed a correctness bug getting the set of a constraint that used both variable and constraint bridges (#2464) (#2472)
  • Fixed MethodError in some bridges when called with Complex-valued functions (#2468) (#2475)
  • Fixed reading MPS files that use * as the start of a name and not as a comment (#2470)

Other

  • Updated solver-tests.yml (#2465)
  • Removed two unused methods from MOI.Bridges (#2466)
  • Documentation updates (#2467), (#2473), (#2474)
  • Simplify reading CBF files (#2476)

v1.27.1 (March 27, 2024)

Fixed

  • Fixed passing non-IndexMap in Utilities.pass_attributes (#2458)
  • Fixed getting MOI.ListOfConstraintAttributesSet for VectorOfConstraints (#2459)

Other

  • Updated solver-tests.yml (#2453) (#2455)
  • Fixed path in error message (#2461)

v1.27.0 (February 27, 2024)

Added

  • Added support for sign(x) in Nonlinear (#2444)

Fixed

v1.26.0 (February 22, 2024)

Added

Fixed

  • Fixed writing binary variables with bounds in FileFormats.MPS (#2431)
  • Fixed parsing suffixes in FileFormats.NL (#2436)
  • Fixed writing free constraints in FileFormats.NL (#2437)
  • Fixed potential for unsafe out-of-bounds write in Hessian evaluation (#2441)

Other

v1.25.3 (February 14, 2024)

Fixed

  • Fixed number type in get_fallback (#2414)
  • Fixed error type thrown when a variable bridge cannot un-bridge the function. It used to throw ErrorException. It now throws MOI.GetAttributeNotAllowed{MOI.ConstraintFunction}. This enables Utilities.CachingOptimizer to more uniformly implement fallbacks for common bridges like Bridges.Variable.ZerosBridge. (#2415)
  • Fixed tests on upcoming Julia v1.11 (#2428)

Other

v1.25.2 (January 29, 2024)

Fixed

Other

  • Clarified ordering of nonlinear tape in documentation (#2401)
  • Updated vale.sh (#2403) (#2404)
  • Tidied `src/Utilities/results.jl (#2411)

v1.25.1 (January 11, 2024)

Fixed

Other

  • Removed a duplicated test (#2395)

v1.25.0 (January 5, 2024)

Added

  • Added the AutomaticDifferentiationBackend attribute (#2386)

Fixed

v1.24.0 (January 2, 2024)

Added

  • Added get_fallback for ConstraintDual of variable bounds (#2373)

Fixed

  • Fixed RSOCtoPSDBridge for dimension 2 (#2359)
  • Fixed getting ConstraintFunction in conversion bridge (#2360)
  • Fixed map_indices (#2367)
  • Fixed SlackBridgePrimalDualStart for non-slack bridges (#2365)
  • Fixed test_attribute_TimeLimitSec (#2370)
  • Fixed order of model attributes during copy_to (#2372)
  • Fixed ConstraintIndex conflicts between variable and constraint bridges (#2362)
  • Fixed corner-case deletion in bridges (#2377)
  • Fixed ListOfVariablesWithAttributeSet for variable bridges (#2380)
  • Fixed SlackBridge if scalar constant is not zero (#2382)
  • Fixed setting multiple bounds on a bridged variable (#2383)

Other

  • Minor documentation improvements (#2355), (#2374)
  • Improved side_dimension_for_vectorized_dimension (#2356)
  • Added DiffOpt and ParametricOptInterface to solver-tests.yml (#2368)
  • Refactored SDPAModel into a separate test file and test more widely (#2364), (#2357)

v1.23.0 (November 29, 2023)

Added

Fixed

  • Fixed Test.test_model_Name_VariableName_ConstraintName (#2349)
  • Fixed errors thrown when querying an attribute is not supported, like when Utilities.CachingOptimizer is not attached to an optimizer (#2350)

v1.22.0 (November 6, 2023)

Added

Fixed

Other

  • Fixed typo in docstring of ScalarAffineFunction (#2326)
  • Added Gurobi to solver-tests.yml (#2332)
  • Improved the error message when a bridge does not support an attribute (#2329)
  • Improved documentation for implementing a bridge (#2334)
  • Updated [compat] bounds in Project.toml (#2344)

v1.21.0 (October 25, 2023)

Added

Fixed

  • Fixed test_attribute_TimeLimitSec (#2256)
  • Fixed conversion cost in objective bridges (#2309)

Other

  • Fixed flakey link checking in documentation (#2297)
  • Minor documentation fixes (#2304) (#2313)
  • Fixed [compat] section of Project.toml (#2310)
  • Added MultiObjectiveAlgorithms to solver-tests.yml (#2312)

v1.20.1 (September 24, 2023)

Fixed

Other

  • Added MathOptSetDistances to solver-tests.yml (#2265)
  • Updated Documenter (#2266)
  • Fixed various JET errors (#2267) (#2269) (#2270) (#2271) (#2276) (#2277) (#2289)
  • Various style improvements
    • Replaced using Package with import Package where possible (#2274)
    • Removed Utilities.EMPTYSTRING (#2283)
    • Removed unnecessary const acronyms in Utilities (#2280) (#2281)
    • Removed invalid and unused method (#2286)
  • Refactored src/Utilities/model.jl (#2287)

v1.20.0 (September 7, 2023)

Added

Other

v1.19.0 (August 15, 2023)

Added

Fixed

Other

  • Added extensions to solver-tests.yml (#2229)
  • Refactored test/Benchmarks (#2234)
  • Fixed warnings in tests (#2241) (#2243)
  • Small refactoring of bridges for upcoming VectorNonlinearFunction (#2244) (#2245)
  • Fixed various typos (#2251) (#2255)
  • Partitioned how we run the tests on GitHub actions (#2252) (#2253)

v1.18.0 (June 23, 2023)

Added

Fixed

  • Fixed a missing @require in MOI.Test (#2195) (#2196)
  • Fixed incorrect usage of Utilities.operate! in bridges (#2207) (#2216)
  • Fixed splatting nonlinear expression with univariate operator (#2221)

Other

  • Removed unused argument names (#2199)
  • Reduced memory requirement for tests (#2204)
  • Refactored Utilities.promote_operation (#2206)
  • Improved code style in Utilities/mutable_arithmetics.jl (#2209)
  • Refactored various methods in Utilities/functions.jl (#2208) (#2212) (#2213) (#2214) (#2215)

v1.17.1 (June 6, 2023)

Fixed

Other

  • Added documentation for enum instances (#2186)
  • Updated chatroom links in documentation (#2188)
  • Changed the documentation to build on Julia v1.9 (#2191)

v1.17.0 (June 1, 2023)

Added

Fixed

  • Fixed support for external sets in Utilities.loadfromstring! (#2177)
  • Fixed promote_operation for ScalarNonlinearFunction (#2179)
  • Fixed two issues in FileFormats.LP when reading files with quadratic functions (#2182) (#2184)

v1.16.0 (May 16, 2023)

Added

Fixed

Other

  • Fixed solver-tests.yml (#2157)
  • Updated documentation links to developer chatroom (#2160)
  • Added various tests for bridges (#2156)
  • Added checklists to the developer documentation (#2167) (#2168)

v1.15.1 (April 25, 2023)

Fixed

  • Fixed deleting a variable in a bridged objective (#2150)

v1.15.0 (April 19, 2023)

Added

Fixed

Other

  • Add a test for variables in one-sided open Interval sets (#2133)
  • Minor style fixes in the source code (#2148)

v1.14.1 (April 6, 2023)

Fixed

Other

v1.14.0 (April 4, 2023)

Added

Fixed

v1.13.2 (March 21, 2023)

Fixed

Other

  • Fixed typos in the documentation (#2114)
  • Functions now print to the REPL in algebraic form. This is potentially breaking if you have tests which rely on a specific String form of MOI functions. (#2112) (#2126)

v1.13.1 (March 3, 2023)

Other

  • Added the Google style guide to the documentation linter Vale, and fixed the resulting warnings (#2110)
  • Improved the docstrings in src/functions.jl (#2108)

v1.13.0 (February 28, 2023)

Added

Fixed

Other

  • Added tests for vector-valued objective functions in FileFormats.MOF (#2093)
  • Used and documented preference for import MathOptInterface as MOI (#2096)
  • Fix and test links in the documentation with linkcheck = true (#2098)
  • Improved docstrings of sets in src/sets.jl (#2099)
  • Skip checking flakey links in documentation with linkcheck_ignore (#2103)

v1.12.0 (February 10, 2023)

Added

Fixed

  • Fixed a number of constraint bridges so that Bridges.final_touch can be called multiple times without forcing a rebuild of the reformulation (#2089)

Other

v1.11.5 (January 24, 2023)

Fixed

  • Fixed a bug writing .lp files with an off-diagonal quadratic objective (#2082)

Other

  • Added SnoopPrecompile directives for reduced time-to-first-X in Julia v1.9 (#2080)

v1.11.4 (January 12, 2023)

Fixed

  • Fixed a bug reading .lp files with an Integer section (#2078)

v1.11.3 (January 12, 2023)

Fixed

  • Fixed a performance bug when deleting a vector of constraints (#2072)
  • Fixed a bug reading .lp files with terms like x -1 y (#2076)

Other

v1.11.2 (January 2, 2023)

Fixed

  • Fixed a bug reading .mof.json files with ConstraintName set for VariableIndex constraints (#2066)
  • Fixed a bug reading .mof.json files with nonlinear objectives and no constraints (#2068)

v1.11.1 (December 22, 2022)

Fixed

  • Fixed a bug reading .mof.json files with integer coefficients for affine and quadratic functions (#2063)

v1.11.0 (December 2, 2022)

Added

Other

  • Tidied these release notes (#2055)

v1.10.0 (November 22, 2022)

Added

Fixed

  • Fixed Bridges.Objective.SlackBridge when the objective function is complex-valued (#2036) (#2038)
  • Fixed docstring of Test.runtests to clarify the warn_unsupported argument (#2037)
  • Fixed reading of free variables in FileFormats.LP (#2044)
  • Fixed numerous edge cases reading files from QPLIB using FileFormats.LP (#2042) (#2044)
  • Fixed situations in which x^y returns a complex value in Nonlinear (#2050)

Other

  • Improved the error message thrown when a user-defined nonlinear function does not accept splatted input (#2032)
  • Removed specialized iterators for keys and values in Utilities.CleverDicts (#2051)

v1.9.0 (October 29, 2022)

Added

Fixed

  • Fixed Constraint.ZeroOneBridge by adding new bounds as affine constraints instead of variable bounds (#1879)
  • Fixed reading free rows in FileFormats.MPS files (#2009)
  • Fixed parsing of OBJSENSE blocks in FileFormats.MPS files (#2016) (#2019)
  • Fixed the parsing of deeply nested nonlinear expressions by removing the use of recursion (#2020)
  • Fixed the requirements check in Test.test_constraint_get_ConstraintIndex (#2024)

v1.8.2 (September 20, 2022)

Documentation

  • Added vale as a documentation linter (#2002)
  • Improved styling of code blocks in the PDF (#1999) (#2000)
  • Fixed a number of typos in the documentation (#2001) (#2003)

v1.8.1 (September 12, 2022)

Fixed

  • Fixed a bug in supports(::AbstractBridgeOptimizer for constraint attributes (#1991) (#1992)

v1.8.0 (September 1, 2022)

Added

Fixed

  • Lazily construct expressions in Nonlinear so that expressions are updated when Nonlinear.Parameter values are updated (#1984)
  • Allow NORM_LIMIT as a TerminationStatus for unbounded problems in Test (#1990)

v1.7.0 (August 16, 2022)

Added

Fixed

  • Fixed some missing promotion rules

Other

  • Improved the performance of Jacobian products in Nonlinear
  • Removed an un-needed copy in Utilities.modify_function
  • Various clean-ups in Bridges/bridge_optimizer.jl

v1.6.1 (July 23, 2022)

Fixed

  • Added support for ExponentialCone in MatrixOfConstraints
  • Fix PSDSquare_3 test to reflect a previously fixed bug getting the ConstraintDual of a PositiveSemidefiniteConeSquare constraint

v1.6.0 (July 2, 2022)

Added

  • Added Bridges.needs_final_touch and Bridges.final_touch
  • Added new bridges from constraint programming sets to mixed-integer linear programs:
    • AllDifferentToCountDistinctBridge
    • CountAtLeastToCountBelongsBridge
    • CountBelongsToMILPBridge
    • CountDistinctToMILPBridge
    • CountGreaterThanToMILPBridge
    • CircuitToMILPBridge

Fixed

  • Relax an instance of ::Vector to ::AbstractVector in MOI.Nonlinear
  • Fix BinPackingToMILPBridge to respect variable bounds
  • Fix SemiToBinaryBridge to throw error if other bounds are set

v1.5.0 (June 27, 2022)

Added

  • Added GetAttributeNotAllowed for solvers to indicate when getting an attribute encounters an error
  • Added Utilities.get_fallback support for ObjectiveValue and DualObjectiveValue
  • Added new bridges:
    • RootDetConeSquare to RootDetConeTriangle
    • LogDetConeSquare to LogDetConeTriangle
    • BinPacking to a mixed-integer linear program
    • Table to a mixed-integer linear program
  • Added Bridges.print_active_bridges to display the current optimal hyper-path in a Bridges.LazyBridgeOptimizer

Fixed

  • Fixed ZeroOne tests with lower and upper bounds
  • Fixed error in FileFormats.LP when reading a malformed file
  • Fixed reading of nonlinear programs in FileFormats.MOF
  • Fixed bug in ConstraintDual when using SquareBridge

Other

  • Improved documentation of nonlinear API
  • Documented duality convention for PositiveSemidefiniteConeSquare sets
  • Fixed typo in Bridges.Constraint.QuadToSOCBridge docstring

v1.4.0 (June 9, 2022)

Added

  • Added a number of sets for constraint programming:
    • AllDifferent
    • BinPacking
    • Circuit
    • CountAtLeast
    • CountBelongs
    • CountDistinct
    • CountGreaterThan
    • Cumulative
    • Path
    • Table
  • Added support for user-defined hessians in Nonlinear
  • Added Bridges.runtests to simplify the testing of bridge implementations

Fixed

  • Fixed a bug in FileFormats.NL when writing univariate *

Other

  • Began a large refactoring of the Bridges submodule, with greatly improved documentation.

v1.3.0 (May 27, 2022)

Added

  • Add MOI.Nonlinear submodule. This is a large new submodule that has been refactored from code that was in JuMP. For now, it should be considered experimental.
  • Add FileFormats.NL.SolFileResults(::IO, ::Model)
  • Add FileFormats.NL.read!(::IO, ::Model)
  • Add MOI.modify that accepts a vector of modifications

Fixed

  • Fixed a bug in Test which attempted to include non-.jl files
  • Fixed a bug in FileFormats for models with open interval constraints

Other

  • Fixed a performance issue in Utilities.DoubleDict
  • Various minor improvements to the documentation

v1.2.0 (April 25, 2022)

Added

  • Add support for the FORMAT_REW/.rew file format in FileFormats.

Fixed

  • Fix bug handling of default variable bounds in FileFormats.LP
  • Fix FileFormats.MPS to not write OBJSENSE by default since this is only supported by some readers.

v1.1.2 (March 31, 2022)

Fixed

  • Fix a range of bugs in FileFormats.LP
  • Fix reading of problem dimensions in FileFormats.SDPA

v1.1.1 (March 23, 2022)

Fixed

  • Fix bug in test_model_UpperBoundAlreadySet
  • Fix bug in test_infeasible_ tests
  • Fix bug in test_objective_ObjectiveFunction_blank
  • Relax restriction of MOI.AbstractOptimizer to MOI.ModelLike in Utilities.CachingOptimizer and instantiate.

New tests

  • Add test_conic_empty_matrix that checks conic solvers support problems with no variables.

v1.1.0 (March 2, 2022)

Added

  • Added MOI.Utilities.throw_unsupported(::UniversalFallback) for simplifying solver wrappers which copy from a UniversalFallback.

v1.0.2 (March 1, 2022)

Fixed

  • Fixed a bug in the test_model_ScalarFunctionConstantNotZero test
  • Fixed the error type when an AbstractFunctionConversionBridge cannot get or set an attribute
  • Identified a correctness bug in RSOCtoPSDBridge. We now thrown an error instead of returning an incorrect result.

v1.0.1 (February 25, 2022)

Fixed

  • Fixed a bug in which OptimizerAttributes were not copied in CachingOptimizer
  • Fixed a bug in which shift_constant did not promote mixed types of coefficients
  • Fixed a bug in which deleting a constraint of a bridged variable threw ErrorException instead of MOI.DeleteNotAllowed
  • Fixed a bug in which add_constraint in MatrixOfConstraints did not canonicalize the function
  • Fixed a bug when modifying scalar constants of a function containing a bridged variable
  • Fixed a bug in which final_touch was not always called with a CachingOptimizer

v1.0.0 (February 17, 2022)

Although tagged as a breaking release, v1.0.0 is v0.10.9 with deprecations removed, similar to how Julia 1.0 was Julia 0.7 with deprecations removed.

Breaking

  • Julia 1.6 is now the minimum supported version
  • All deprecations have been removed

Troubleshooting problems when updating

If you experience problems when updating, you are likely using previously deprecated features. (By default, Julia does not warn when you use deprecated features.)

To find the deprecated features you are using, start Julia with --depwarn=yes:

$ julia --depwarn=yes

Then install MathOptInterface v0.10.9:

julia> using Pkg
+

Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

v1.31.2 (August 30, 2024)

Fixed

  • Fixed a bug writing FileFormats.MPS files with MAX_SENSE and quadratic objectives (#2539)

Other

  • Improved the docstrings in src/nlp.jl (#2537)

v1.31.1 (August 7, 2024)

Fixed

  • Fixed NLPBlock when used with bridges (#2524)

Other

  • Use inverse_trimap instead of redefining it (#2522)
  • Improved UnsupportedConstraint error (#2530)

v1.31.0 (June 26, 2024)

Added

  • Added default show(::IO, ::ModelLike) method (#2505) (#2510)
  • Set map bridges can now implement the various map_function methods to use the value of the bridge as the first argument, instead of passing the type of the bridge. (#2509)
  • Added cannot_unbridge argument to Bridges.runtests

Fixed

  • Fixed supports_constraint for IndicatorSOS1Bridge (#2507)
  • Fixed getting ConstraintDual in slack bridges (#2508) (#2514) (#2515)
  • Fixed FileFormats.NL to read linear constraints as ScalarAffineFunction (#2512)
  • Changed default_copy_to to maintain the order of variables during copy_to. This change is marked as non-breaking, but it may cause different (but mathematically equivalent) models to be formulated, particularly conic models with bridges. (#2495) (#2520)

Other

v1.30.0 (May 23, 2024)

Added

  • Added input and output functions to Bridges.runtests (#2497)

Fixed

  • Improved the heuristic of when to write variable cones in FileFormats.CBF (#2494)
  • Fixed Bridges.runtests when model has no variable (#2499)
  • Fixed getting an attribute of an empty vector (#2501)

Other

  • Fixed links in the documentation (#2502)

v1.29.0 (April 19, 2024)

Added

Fixed

Other

  • Updated versions in CI (#2484) (#2489)
  • Fixed duplicate names in tests (#2485)

v1.28.1 (April 13, 2024)

Fixed

  • Fixed a bug reading MPS files with integer variables and no corresponding entry in the BOUNDS section (#2480)

v1.28.0 (April 11, 2024)

Added

Fixed

  • Fixed a correctness bug getting the set of a constraint that used both variable and constraint bridges (#2464) (#2472)
  • Fixed MethodError in some bridges when called with Complex-valued functions (#2468) (#2475)
  • Fixed reading MPS files that use * as the start of a name and not as a comment (#2470)

Other

  • Updated solver-tests.yml (#2465)
  • Removed two unused methods from MOI.Bridges (#2466)
  • Documentation updates (#2467), (#2473), (#2474)
  • Simplify reading CBF files (#2476)

v1.27.1 (March 27, 2024)

Fixed

  • Fixed passing non-IndexMap in Utilities.pass_attributes (#2458)
  • Fixed getting MOI.ListOfConstraintAttributesSet for VectorOfConstraints (#2459)

Other

  • Updated solver-tests.yml (#2453) (#2455)
  • Fixed path in error message (#2461)

v1.27.0 (February 27, 2024)

Added

  • Added support for sign(x) in Nonlinear (#2444)

Fixed

v1.26.0 (February 22, 2024)

Added

Fixed

  • Fixed writing binary variables with bounds in FileFormats.MPS (#2431)
  • Fixed parsing suffixes in FileFormats.NL (#2436)
  • Fixed writing free constraints in FileFormats.NL (#2437)
  • Fixed potential for unsafe out-of-bounds write in Hessian evaluation (#2441)

Other

v1.25.3 (February 14, 2024)

Fixed

  • Fixed number type in get_fallback (#2414)
  • Fixed error type thrown when a variable bridge cannot un-bridge the function. It used to throw ErrorException. It now throws MOI.GetAttributeNotAllowed{MOI.ConstraintFunction}. This enables Utilities.CachingOptimizer to more uniformly implement fallbacks for common bridges like Bridges.Variable.ZerosBridge. (#2415)
  • Fixed tests on upcoming Julia v1.11 (#2428)

Other

v1.25.2 (January 29, 2024)

Fixed

Other

  • Clarified ordering of nonlinear tape in documentation (#2401)
  • Updated vale.sh (#2403) (#2404)
  • Tidied `src/Utilities/results.jl (#2411)

v1.25.1 (January 11, 2024)

Fixed

Other

  • Removed a duplicated test (#2395)

v1.25.0 (January 5, 2024)

Added

  • Added the AutomaticDifferentiationBackend attribute (#2386)

Fixed

v1.24.0 (January 2, 2024)

Added

  • Added get_fallback for ConstraintDual of variable bounds (#2373)

Fixed

  • Fixed RSOCtoPSDBridge for dimension 2 (#2359)
  • Fixed getting ConstraintFunction in conversion bridge (#2360)
  • Fixed map_indices (#2367)
  • Fixed SlackBridgePrimalDualStart for non-slack bridges (#2365)
  • Fixed test_attribute_TimeLimitSec (#2370)
  • Fixed order of model attributes during copy_to (#2372)
  • Fixed ConstraintIndex conflicts between variable and constraint bridges (#2362)
  • Fixed corner-case deletion in bridges (#2377)
  • Fixed ListOfVariablesWithAttributeSet for variable bridges (#2380)
  • Fixed SlackBridge if scalar constant is not zero (#2382)
  • Fixed setting multiple bounds on a bridged variable (#2383)

Other

  • Minor documentation improvements (#2355), (#2374)
  • Improved side_dimension_for_vectorized_dimension (#2356)
  • Added DiffOpt and ParametricOptInterface to solver-tests.yml (#2368)
  • Refactored SDPAModel into a separate test file and test more widely (#2364), (#2357)

v1.23.0 (November 29, 2023)

Added

Fixed

  • Fixed Test.test_model_Name_VariableName_ConstraintName (#2349)
  • Fixed errors thrown when querying an attribute is not supported, like when Utilities.CachingOptimizer is not attached to an optimizer (#2350)

v1.22.0 (November 6, 2023)

Added

Fixed

Other

  • Fixed typo in docstring of ScalarAffineFunction (#2326)
  • Added Gurobi to solver-tests.yml (#2332)
  • Improved the error message when a bridge does not support an attribute (#2329)
  • Improved documentation for implementing a bridge (#2334)
  • Updated [compat] bounds in Project.toml (#2344)

v1.21.0 (October 25, 2023)

Added

Fixed

  • Fixed test_attribute_TimeLimitSec (#2256)
  • Fixed conversion cost in objective bridges (#2309)

Other

  • Fixed flakey link checking in documentation (#2297)
  • Minor documentation fixes (#2304) (#2313)
  • Fixed [compat] section of Project.toml (#2310)
  • Added MultiObjectiveAlgorithms to solver-tests.yml (#2312)

v1.20.1 (September 24, 2023)

Fixed

Other

  • Added MathOptSetDistances to solver-tests.yml (#2265)
  • Updated Documenter (#2266)
  • Fixed various JET errors (#2267) (#2269) (#2270) (#2271) (#2276) (#2277) (#2289)
  • Various style improvements
    • Replaced using Package with import Package where possible (#2274)
    • Removed Utilities.EMPTYSTRING (#2283)
    • Removed unnecessary const acronyms in Utilities (#2280) (#2281)
    • Removed invalid and unused method (#2286)
  • Refactored src/Utilities/model.jl (#2287)

v1.20.0 (September 7, 2023)

Added

Other

v1.19.0 (August 15, 2023)

Added

Fixed

Other

  • Added extensions to solver-tests.yml (#2229)
  • Refactored test/Benchmarks (#2234)
  • Fixed warnings in tests (#2241) (#2243)
  • Small refactoring of bridges for upcoming VectorNonlinearFunction (#2244) (#2245)
  • Fixed various typos (#2251) (#2255)
  • Partitioned how we run the tests on GitHub actions (#2252) (#2253)

v1.18.0 (June 23, 2023)

Added

Fixed

  • Fixed a missing @require in MOI.Test (#2195) (#2196)
  • Fixed incorrect usage of Utilities.operate! in bridges (#2207) (#2216)
  • Fixed splatting nonlinear expression with univariate operator (#2221)

Other

  • Removed unused argument names (#2199)
  • Reduced memory requirement for tests (#2204)
  • Refactored Utilities.promote_operation (#2206)
  • Improved code style in Utilities/mutable_arithmetics.jl (#2209)
  • Refactored various methods in Utilities/functions.jl (#2208) (#2212) (#2213) (#2214) (#2215)

v1.17.1 (June 6, 2023)

Fixed

Other

  • Added documentation for enum instances (#2186)
  • Updated chatroom links in documentation (#2188)
  • Changed the documentation to build on Julia v1.9 (#2191)

v1.17.0 (June 1, 2023)

Added

Fixed

  • Fixed support for external sets in Utilities.loadfromstring! (#2177)
  • Fixed promote_operation for ScalarNonlinearFunction (#2179)
  • Fixed two issues in FileFormats.LP when reading files with quadratic functions (#2182) (#2184)

v1.16.0 (May 16, 2023)

Added

Fixed

Other

  • Fixed solver-tests.yml (#2157)
  • Updated documentation links to developer chatroom (#2160)
  • Added various tests for bridges (#2156)
  • Added checklists to the developer documentation (#2167) (#2168)

v1.15.1 (April 25, 2023)

Fixed

  • Fixed deleting a variable in a bridged objective (#2150)

v1.15.0 (April 19, 2023)

Added

Fixed

Other

  • Add a test for variables in one-sided open Interval sets (#2133)
  • Minor style fixes in the source code (#2148)

v1.14.1 (April 6, 2023)

Fixed

Other

v1.14.0 (April 4, 2023)

Added

Fixed

v1.13.2 (March 21, 2023)

Fixed

Other

  • Fixed typos in the documentation (#2114)
  • Functions now print to the REPL in algebraic form. This is potentially breaking if you have tests which rely on a specific String form of MOI functions. (#2112) (#2126)

v1.13.1 (March 3, 2023)

Other

  • Added the Google style guide to the documentation linter Vale, and fixed the resulting warnings (#2110)
  • Improved the docstrings in src/functions.jl (#2108)

v1.13.0 (February 28, 2023)

Added

Fixed

Other

  • Added tests for vector-valued objective functions in FileFormats.MOF (#2093)
  • Used and documented preference for import MathOptInterface as MOI (#2096)
  • Fix and test links in the documentation with linkcheck = true (#2098)
  • Improved docstrings of sets in src/sets.jl (#2099)
  • Skip checking flakey links in documentation with linkcheck_ignore (#2103)

v1.12.0 (February 10, 2023)

Added

Fixed

  • Fixed a number of constraint bridges so that Bridges.final_touch can be called multiple times without forcing a rebuild of the reformulation (#2089)

Other

v1.11.5 (January 24, 2023)

Fixed

  • Fixed a bug writing .lp files with an off-diagonal quadratic objective (#2082)

Other

  • Added SnoopPrecompile directives for reduced time-to-first-X in Julia v1.9 (#2080)

v1.11.4 (January 12, 2023)

Fixed

  • Fixed a bug reading .lp files with an Integer section (#2078)

v1.11.3 (January 12, 2023)

Fixed

  • Fixed a performance bug when deleting a vector of constraints (#2072)
  • Fixed a bug reading .lp files with terms like x -1 y (#2076)

Other

v1.11.2 (January 2, 2023)

Fixed

  • Fixed a bug reading .mof.json files with ConstraintName set for VariableIndex constraints (#2066)
  • Fixed a bug reading .mof.json files with nonlinear objectives and no constraints (#2068)

v1.11.1 (December 22, 2022)

Fixed

  • Fixed a bug reading .mof.json files with integer coefficients for affine and quadratic functions (#2063)

v1.11.0 (December 2, 2022)

Added

Other

  • Tidied these release notes (#2055)

v1.10.0 (November 22, 2022)

Added

Fixed

  • Fixed Bridges.Objective.SlackBridge when the objective function is complex-valued (#2036) (#2038)
  • Fixed docstring of Test.runtests to clarify the warn_unsupported argument (#2037)
  • Fixed reading of free variables in FileFormats.LP (#2044)
  • Fixed numerous edge cases reading files from QPLIB using FileFormats.LP (#2042) (#2044)
  • Fixed situations in which x^y returns a complex value in Nonlinear (#2050)

Other

  • Improved the error message thrown when a user-defined nonlinear function does not accept splatted input (#2032)
  • Removed specialized iterators for keys and values in Utilities.CleverDicts (#2051)

v1.9.0 (October 29, 2022)

Added

Fixed

  • Fixed Constraint.ZeroOneBridge by adding new bounds as affine constraints instead of variable bounds (#1879)
  • Fixed reading free rows in FileFormats.MPS files (#2009)
  • Fixed parsing of OBJSENSE blocks in FileFormats.MPS files (#2016) (#2019)
  • Fixed the parsing of deeply nested nonlinear expressions by removing the use of recursion (#2020)
  • Fixed the requirements check in Test.test_constraint_get_ConstraintIndex (#2024)

v1.8.2 (September 20, 2022)

Documentation

  • Added vale as a documentation linter (#2002)
  • Improved styling of code blocks in the PDF (#1999) (#2000)
  • Fixed a number of typos in the documentation (#2001) (#2003)

v1.8.1 (September 12, 2022)

Fixed

  • Fixed a bug in supports(::AbstractBridgeOptimizer for constraint attributes (#1991) (#1992)

v1.8.0 (September 1, 2022)

Added

Fixed

  • Lazily construct expressions in Nonlinear so that expressions are updated when Nonlinear.Parameter values are updated (#1984)
  • Allow NORM_LIMIT as a TerminationStatus for unbounded problems in Test (#1990)

v1.7.0 (August 16, 2022)

Added

Fixed

  • Fixed some missing promotion rules

Other

  • Improved the performance of Jacobian products in Nonlinear
  • Removed an un-needed copy in Utilities.modify_function
  • Various clean-ups in Bridges/bridge_optimizer.jl

v1.6.1 (July 23, 2022)

Fixed

  • Added support for ExponentialCone in MatrixOfConstraints
  • Fix PSDSquare_3 test to reflect a previously fixed bug getting the ConstraintDual of a PositiveSemidefiniteConeSquare constraint

v1.6.0 (July 2, 2022)

Added

  • Added Bridges.needs_final_touch and Bridges.final_touch
  • Added new bridges from constraint programming sets to mixed-integer linear programs:
    • AllDifferentToCountDistinctBridge
    • CountAtLeastToCountBelongsBridge
    • CountBelongsToMILPBridge
    • CountDistinctToMILPBridge
    • CountGreaterThanToMILPBridge
    • CircuitToMILPBridge

Fixed

  • Relax an instance of ::Vector to ::AbstractVector in MOI.Nonlinear
  • Fix BinPackingToMILPBridge to respect variable bounds
  • Fix SemiToBinaryBridge to throw error if other bounds are set

v1.5.0 (June 27, 2022)

Added

  • Added GetAttributeNotAllowed for solvers to indicate when getting an attribute encounters an error
  • Added Utilities.get_fallback support for ObjectiveValue and DualObjectiveValue
  • Added new bridges:
    • RootDetConeSquare to RootDetConeTriangle
    • LogDetConeSquare to LogDetConeTriangle
    • BinPacking to a mixed-integer linear program
    • Table to a mixed-integer linear program
  • Added Bridges.print_active_bridges to display the current optimal hyper-path in a Bridges.LazyBridgeOptimizer

Fixed

  • Fixed ZeroOne tests with lower and upper bounds
  • Fixed error in FileFormats.LP when reading a malformed file
  • Fixed reading of nonlinear programs in FileFormats.MOF
  • Fixed bug in ConstraintDual when using SquareBridge

Other

  • Improved documentation of nonlinear API
  • Documented duality convention for PositiveSemidefiniteConeSquare sets
  • Fixed typo in Bridges.Constraint.QuadToSOCBridge docstring

v1.4.0 (June 9, 2022)

Added

  • Added a number of sets for constraint programming:
    • AllDifferent
    • BinPacking
    • Circuit
    • CountAtLeast
    • CountBelongs
    • CountDistinct
    • CountGreaterThan
    • Cumulative
    • Path
    • Table
  • Added support for user-defined hessians in Nonlinear
  • Added Bridges.runtests to simplify the testing of bridge implementations

Fixed

  • Fixed a bug in FileFormats.NL when writing univariate *

Other

  • Began a large refactoring of the Bridges submodule, with greatly improved documentation.

v1.3.0 (May 27, 2022)

Added

  • Add MOI.Nonlinear submodule. This is a large new submodule that has been refactored from code that was in JuMP. For now, it should be considered experimental.
  • Add FileFormats.NL.SolFileResults(::IO, ::Model)
  • Add FileFormats.NL.read!(::IO, ::Model)
  • Add MOI.modify that accepts a vector of modifications

Fixed

  • Fixed a bug in Test which attempted to include non-.jl files
  • Fixed a bug in FileFormats for models with open interval constraints

Other

  • Fixed a performance issue in Utilities.DoubleDict
  • Various minor improvements to the documentation

v1.2.0 (April 25, 2022)

Added

  • Add support for the FORMAT_REW/.rew file format in FileFormats.

Fixed

  • Fix bug handling of default variable bounds in FileFormats.LP
  • Fix FileFormats.MPS to not write OBJSENSE by default since this is only supported by some readers.

v1.1.2 (March 31, 2022)

Fixed

  • Fix a range of bugs in FileFormats.LP
  • Fix reading of problem dimensions in FileFormats.SDPA

v1.1.1 (March 23, 2022)

Fixed

  • Fix bug in test_model_UpperBoundAlreadySet
  • Fix bug in test_infeasible_ tests
  • Fix bug in test_objective_ObjectiveFunction_blank
  • Relax restriction of MOI.AbstractOptimizer to MOI.ModelLike in Utilities.CachingOptimizer and instantiate.

New tests

  • Add test_conic_empty_matrix that checks conic solvers support problems with no variables.

v1.1.0 (March 2, 2022)

Added

  • Added MOI.Utilities.throw_unsupported(::UniversalFallback) for simplifying solver wrappers which copy from a UniversalFallback.

v1.0.2 (March 1, 2022)

Fixed

  • Fixed a bug in the test_model_ScalarFunctionConstantNotZero test
  • Fixed the error type when an AbstractFunctionConversionBridge cannot get or set an attribute
  • Identified a correctness bug in RSOCtoPSDBridge. We now thrown an error instead of returning an incorrect result.

v1.0.1 (February 25, 2022)

Fixed

  • Fixed a bug in which OptimizerAttributes were not copied in CachingOptimizer
  • Fixed a bug in which shift_constant did not promote mixed types of coefficients
  • Fixed a bug in which deleting a constraint of a bridged variable threw ErrorException instead of MOI.DeleteNotAllowed
  • Fixed a bug in which add_constraint in MatrixOfConstraints did not canonicalize the function
  • Fixed a bug when modifying scalar constants of a function containing a bridged variable
  • Fixed a bug in which final_touch was not always called with a CachingOptimizer

v1.0.0 (February 17, 2022)

Although tagged as a breaking release, v1.0.0 is v0.10.9 with deprecations removed, similar to how Julia 1.0 was Julia 0.7 with deprecations removed.

Breaking

  • Julia 1.6 is now the minimum supported version
  • All deprecations have been removed

Troubleshooting problems when updating

If you experience problems when updating, you are likely using previously deprecated features. (By default, Julia does not warn when you use deprecated features.)

To find the deprecated features you are using, start Julia with --depwarn=yes:

$ julia --depwarn=yes

Then install MathOptInterface v0.10.9:

julia> using Pkg
 julia> pkg"add MathOptInterface@0.10"

And then run your code. Apply any suggestions, or search the release notes below for advice on updating a specific deprecated feature.

v0.10.9 (February 16, 2022)

Added

  • Added MOI.Utilities.FreeVariables as a new VariablesConstrainer for conic solvers
  • Added MOI.default_cache for specifying the model used in CachingOptimizer

Fixed

  • Fixed LaTeX printing of MOI.Interval sets

Other

  • Added Aqua.jl as a CI check, and fixed suggested issues
  • The constructors of GeoMeanBridge, StructOfConstraints, and CachingOptimizer were changed from outer to inner constructors. This change is technically breaking, but does not impact users who followed the documented API.

v0.10.8 (February 3, 2022)

Added

  • Added a Base.read! for FileFormats.LP.

Fixed

  • Fixed a bug in MutableSparseMatrix
  • Fixed a bug when calling operate!(vcat, ...) with Number arguments
  • Removed unintended export of deprecated symbols
  • Fixed a bug with PowerCone and DualPowerCone in MatrixOfConstraints.

v0.10.7 (January 5, 2022)

Added

  • Added test for modifying the constant vector in a VectorAffineFunction-in-Zeros constraint.

Fixed

  • Fixed the order in which sets are added to a LazyBridgeOptimizer. Compared to v0.10.6, this may result in bridged models being created with a different number (and order) of variables and constraints. However, it was necessary to fix cases which were previously rejected as unsupported, even though there was a valid bridge transformation.
  • Fixed an error message in FileFormats.CBF
  • Fixed comparison in test_linear_integration_Interval
  • Fixed errors for ConstraintPrimal in a CachingOptimizer
  • Fixed printing of models with non-Float64 coefficients.

Other

  • Various improvements to reduce time-to-first-solve latency
  • Improved error message when an optimizer does not support compute_conflict!

v0.10.6 (November 30, 2021)

Added

  • Added new documentation and tests for infeasibility certificates
  • Added a version control system for the tests in MOI.Test.runtests. Pass exclude_tests_after = v"0.10.5" to run tests added in v0.10.5 and earlier.
  • MOI.Test.runtests now supports generic number types. To specify the number type T, pass MOI.Test.Config(T).
  • Added infeasible_status to MOI.Test.Config for solvers which return LOCALLY_INFEASIBLE
  • CachingOptimizers now use a fallback for ConstraintPrimal. This should enable solvers using a CachingOptimizer to pass tests requiring ConstraintPrimal.

Fixed

  • Fixed a StackOverflow bug in copy_to
  • Fixed error thrown when nonconvex quadratic constraints cannot be bridged
  • Fixed a bug in copy_to for FileFormats.NL.Model
  • Fixed a bug in FileFormats.NL when printing large integers
  • Remove a common test failure for LowerBoundAlreadySet tests
  • Utilities.num_rows is now exported
  • Remove parts of failing test_model_copy_to_xxx tests due to bridges

v0.10.5 (November 7, 2021)

Fixed

  • Fixed getter in UniversalFallback
  • Fixed test_solve_conflict_zeroone_ii

Other

  • Make normalize_and_add_constraint more flexible
  • Update paper BibTeX

v0.10.4 (October 26, 2021)

Added

  • Add SolverVersion attribute
  • Add new tests:
    • test_solve_conflict_zeroone_ii
    • test_nonlinear_objective
  • Utilities.VariablesContainer now supports ConstraintFunction and ConstraintSet
  • The documentation is now available as a PDF

Other

  • Update to MutableArithmetics 0.3
  • Various improvements to the documentation

v0.10.3 (September 18, 2021)

Fixed

  • Fixed bug which prevented callbacks from working through a CachingOptimizer
  • Fixed bug in Test submodule

v0.10.2 (September 16, 2021)

  • Updated MathOptFormat to v1.0
  • Updated JSONSchema to v1.0
  • Added Utilities.set_with_dimension
  • Added two-argument optimize!(::AbstractOptimizer, ::ModelLike)
  • The experimental feature copy_to_and_optimize! has been removed
  • Det bridges now support getting ConstraintFunction and ConstraintSet
  • Various minor bug fixes identified by improved testing

v0.10.1 (September 8, 2021)

  • Various fixes to MOI.Test

v0.10.0 (September 6, 2021)

MOI v0.10 is a significant breaking release. There are a large number of user-visible breaking changes and code refactors, as well as a substantial number of new features.

Breaking in MOI

  • SingleVariable has been removed; use VariableIndex instead
  • SingleVariableConstraintNameError has been renamed to VariableIndexConstraintNameError
  • SettingSingleVariableFunctionNotAllowed has been renamed to SettingVariableIndexFunctionNotAllowed
  • VariableIndex constraints should not support ConstraintName
  • VariableIndex constraints should not support ConstraintBasisStatus; implement VariableBasisStatus instead
  • ListOfConstraints has been renamed to ListOfConstraintTypesPresent
  • ListOfConstraintTypesPresent should now return Tuple{Type,Type} instead of Tuple{DataType,DataType}
  • SolveTime has been renamed to SolveTimeSec
  • IndicatorSet has been renamed to Indicator
  • RawParameter has been renamed to RawOptimizerAttribute and now takes String instead of Any as the only argument
  • The .N field in result attributes has been renamed to .result_index
  • The .variable_index field in ScalarAffineTerm has been renamed to .variable
  • The .variable_index_1 field in ScalarQuadraticTerm has been renamed to .variable_1
  • The .variable_index_2 field in ScalarQuadraticTerm has been renamed to .variable_2
  • The order of affine_terms and quadratic_terms in ScalarQuadraticFunction and VectorQuadraticFunction have been reversed. Both functions now accept quadratic, affine, and constant terms in that order.
  • The index_value function has been removed. Use .value instead.
  • isapprox has been removed for SOS1 and SOS2.
  • The dimension argument to Complements(dimension::Int) should now be the length of the corresponding function, instead of half the length. An ArgumentError is thrown if dimension is not even.
  • copy_to no longer takes keyword arguments:
    • copy_names: now copy names if they are supported by the destination solver
    • filter_constraints: use Utilities.ModelFilter instead
    • warn_attributes: never warn about optimizer attributes

Breaking in Bridges

  • Constraint.RSOCBridge has been renamed to Constraint.RSOCtoSOCBridge
  • Constraint.SOCRBridge has been renamed to Constraint.SOCtoRSOCBridge
  • Bridges now return vectors that can be modified by the user. Previously, some bridges returned views instead of copies.
  • Bridges.IndexInVector has been unified into a single type. Previously, there was a different type for each submodule within Bridges
  • The signature of indicator bridges has been fixed. Use MOI.Bridges.Constraint.IndicatortoSOS1{Float64}(model).

Breaking in FileFormats

  • FileFormats.MOF.Model no longer accepts validate argument. Use the JSONSchema package to validate the MOF file. See the documentation for more information.

Breaking in Utilities

  • The datastructure of Utilities.Model (and models created with Utilities.@model) has been significantly refactored in a breaking way. This includes the way that objective functions and variable-related information is stored.
  • Utilities.supports_default_copy has been renamed to supports_incremental_interface
  • Utilities.automatic_copy_to has been renamed to Utilities.default_copy_to
  • The allocate-load API has been removed
  • CachingOptimizers are now initialized as EMPTY_OPTIMIZER instead of ATTACHED_OPTIMIZER. If your code relies on the optimizer being attached, call MOIU.attach_optimizer(model) after creation.
  • The field names of Utilities.IndexMap have been renamed to var_map and con_map. Accessing these fields directly is considered a private detail that may change. Use the public getindex and setindex! API instead.
  • The size argument to Utilities.CleverDicts.CleverDict(::Integer) has been removed.
  • The size argument to Utilities.IndexMap(::Integer) has been removed.
  • Utilities.DoubleDicts have been significantly refactored. Consult the source code for details.
  • Utilities.test_models_equal has been moved to MOI.Test

Breaking in Test

  • MOI.Test has been renamed to MOI.DeprecatedTest
  • An entirely new MOI.Test submodule has been written. See the documentation for details. The new MOI.Test submodule may find many bugs in the implementations of existing solvers that were previously untested.

Other changes:

  • attribute_value_type has been added
  • copy_to_and_optimize! has been added
  • VariableBasisStatus has been added
  • print(model) now prints a human-readable description of the model
  • Various improvements to the FileFormats submodule
    • FileFormats.CBF was refactored and received bugfixes
    • Support for MathOptFormat v0.6 was added in FileFormats.MOF
    • FileFormats.MPS has had bugfixes and support for more features such as OBJSENSE and objective constants.
    • FileFormats.NL has been added to support nonlinear files
  • Improved type inference throughout to reduce latency

Updating

A helpful script when updating is:

for (root, dirs, files) in walkdir(".")
     for file in files
         if !endswith(file, ".jl")
@@ -31,4 +31,4 @@
         end
         write(path, s)
     end
-end

v0.9.22 (May 22, 2021)

This release contains backports from the ongoing development of the v0.10 release.

  • Improved type inference in Utilities, Bridges and FileFormats submodules to reduce latency.
  • Improved performance of Utilities.is_canonical.
  • Fixed Utilities.pass_nonvariable_constraints with bridged variables.
  • Fixed performance regression of Utilities.Model.
  • Fixed ordering of objective setting in parser.

v0.9.21 (April 23, 2021)

  • Added supports_shift_constant.
  • Improve performance of bridging quadratic constraints.
  • Add precompilation statements.
  • Large improvements to the documentation.
  • Fix a variety of inference issues, benefiting precompilation and reducing initial latency.
  • RawParameters are now ignored when resetting a CachingOptimizer. Previously, changing the underlying optimizer after RawParameters were set would throw an error.
  • Utilities.AbstractModel is being refactored. This may break users interacting with private fields of a model generated using @model.

v0.9.20 (February 20, 2021)

  • Improved performance of Utilities.ScalarFunctionIterator
  • Added support for compute_conflict to MOI layers
  • Added test with zero off-diagonal quadratic term in objective
  • Fixed double deletion of nested bridged SingleVariable/VectorOfVariables constraints
  • Fixed modification of un-set objective
  • Fixed function modification with duplicate terms
  • Made unit tests abort without failing if the problem class is not supported
  • Formatted code with JuliaFormatter
  • Clarified BasisStatusCode's docstring

v0.9.19 (December 1, 2020)

  • Added CallbackNodeStatus attribute
  • Added bridge from GreaterThan or LessThan to Interval
  • Added tests for infeasibility certificates and double optimize
  • Fixed support for Julia v1.6
  • Re-organized MOI docs and added documentation for adding a test

v0.9.18 (November 3, 2020)

  • Various improvements for working with complex numbers
  • Added GeoMeantoRelEntrBridge to bridge a GeometricMeanCone constraint to a relative entropy constraint

v0.9.17 (September 21, 2020)

  • Fixed CleverDict with variable of negative index value
  • Implement supports_add_constrained_variable for MockOptimizer

v0.9.16 (September 17, 2020)

  • Various fixes:
    • 32-bit support
    • CleverDict with abstract value type
    • Checks in test suite

v0.9.15 (September 14, 2020)

  • Bridges improvements:
    • (R)SOCtoNonConvexQuad bridge
    • ZeroOne bridge
    • Use supports_add_constrained_variable in LazyBridgeOptimizer
    • Exposed VariableBridgeCost and ConstraintBridgeCost attributes
    • Prioritize constraining variables on creation according to these costs
    • Refactor bridge debugging
  • Large performance improvements across all submodules
  • Lots of documentation improvements
  • FileFormats improvements:
    • Update MathOptFormat to v0.5
    • Fix supported objectives in FileFormats
  • Testing improvements:
    • Add name option for basic_constraint_test
  • Bug fixes and missing methods
    • Add length for iterators
    • Fix bug with duplicate terms
    • Fix order of LinearOfConstraintIndices

v0.9.14 (May 30, 2020)

  • Add a solver-independent interface for accessing the set of conflicting constraints an Irreducible Inconsistent Subsystem (#1056).
  • Bump JSONSchema dependency from v0.2 to v0.3 (#1090).
  • Documentation improvements:
    • Fix typos (#1054, #1060, #1061, #1064, #1069, #1070).
    • Remove the outdated recommendation for a package implementing MOI for a solver XXX to be called MathOptInterfaceXXX (#1087).
  • Utilities improvements:
    • Fix is_canonical for quadratic functions (#1081, #1089).
    • Implement add_constrained_variable[s] for CachingOptimizer so that it is added as constrained variables to the underlying optimizer (#1084).
    • Add support for custom objective functions for UniversalFallback (#1086).
    • Deterministic ordering of constraints in UniversalFallback (#1088).
  • Testing improvements:
    • Add NormOneCone/NormInfinityCone tests (#1045).
  • Bridges improvements:
    • Add bridges from Semiinteger and Semicontinuous (#1059).
    • Implement getting ConstraintSet for Variable.FlipSignBridge (#1066).
    • Fix setting ConstraintFunction for Constraint.ScalarizeBridge (#1093).
    • Fix NormOne/NormInf bridges with nonzero constants (#1045).
    • Fix StackOverflow in debug (#1063).
  • FileFormats improvements:
    • [SDPA] Implement the extension for integer variables (#1079).
    • [SDPA] Ignore comments after m and nblocks and detect dat-s extension (#1077).
    • [SDPA] No scaling of off-diagonal coefficient (#1076).
    • [SDPA] Add missing negation of constant (#1075).

v0.9.13 (March 24, 2020)

  • Added tests for Semicontinuous and Semiinteger variables (#1033).
  • Added tests for using ExprGraphs from NLP evaluators (#1043).
  • Update version compatibilities of dependencies (#1034, #1051, #1052).
  • Fixed typos in documentation (#1044).

v0.9.12 (February 28, 2020)

  • Fixed writing NLPBlock in MathOptFormat (#1037).
  • Fixed MockOptimizer for result attributes with non-one result index (#1039).
  • Updated test template with instantiate (#1032).

v0.9.11 (February 21, 2020)

  • Add an option for the model created by Utilities.@model to be a subtype of AbstractOptimizer (#1031).
  • Described dual cone in docstrings of GeoMeanCone and RelativeEntropyCone (#1018, #1028).
  • Fixed typos in documentation (#1022, #1024).
  • Fixed warning of unsupported attribute (#1027).
  • Added more rootdet/logdet conic tests (#1026).
  • Implemented ConstraintDual for Constraint.GeoMeanBridge, Constraint.RootDetBridge and Constraint.LogDetBridge and test duals in tests with GeoMeanCone and RootDetConeTriangle and LogDetConeTriangle cones (#1025, #1026).

v0.9.10 (January 31, 2020)

  • Added OptimizerWithAttributes grouping an optimizer constructor and a list of optimizer attributes (#1008).
  • Added RelativeEntropyCone with corresponding bridge into exponential cone constraints (#993).
  • Added NormSpectralCone and NormNuclearCone with corresponding bridges into positive semidefinite constraints (#976).
  • Added supports_constrained_variable(s) (#1004).
  • Added dual_set_type (#1002).
  • Added tests for vector specialized version of delete (#989, #1011).
  • Added PSD3 test (#1007).
  • Clarified dual solution of Tests.pow1v and Tests.pow1f (#1013).
  • Added support for EqualTo and Zero in Bridges.Constraint.SplitIntervalBridge (#1005).
  • Fixed Utilities.vectorize for empty vector (#1003).
  • Fixed free variables in LP writer (#1006).

v0.9.9 (December 29, 2019)

  • Incorporated MathOptFormat.jl as the FileFormats submodule. FileFormats provides readers and writers for a number of standard file formats and MOF, a file format specialized for MOI (#969).
  • Improved performance of deletion of vector of variables in MOI.Utilities.Model (#983).
  • Updated to MutableArithmetics v0.2 (#981).
  • Added MutableArithmetics.promote_operation allocation tests (#975).
  • Fixed inference issue on Julia v1.1 (#982).

v0.9.8 (December 19, 2019)

  • Implemented MutableArithmetics API (#924).
  • Fixed callbacks with CachingOptimizer (#959).
  • Fixed MOI.dimension for MOI.Complements (#948).
  • Added fallback for add_variables (#972).
  • Added is_diagonal_vectorized_index utility (#965).
  • Improved linear constraints display in manual (#963, #964).
  • Bridges improvements:
    • Added IndicatorSet to SOS1 bridge (#877).
    • Added support for starting values for Variable.VectorizeBridge (#944).
    • Fixed MOI.add_constraints with non-bridged variable constraint on bridged variable (#951).
    • Fixed corner cases and docstring of GeoMeanBridge (#961, #962, #966).
    • Fixed choice between variable or constraint bridges for constrained variables (#973).
    • Improve performance of bridge shortest path (#945, #946, #956).
    • Added docstring for test_delete_bridge (#954).
    • Added Variable bridge tests (#952).

v0.9.7 (October 30, 2019)

  • Implemented _result_index_field for NLPBlockDual (#934).
  • Fixed copy of model with starting values for vector constraints (#941).
  • Bridges improvements:
    • Improved performance of add_bridge and added has_bridge (#935).
    • Added AbstractSetMapBridge for bridges between sets S1, S2 such that there is a linear map A such that A*S1 = S2 (#933).
    • Added support for starting values for FlipSignBridge, VectorizeBridge, ScalarizeBridge, SlackBridge, SplitIntervalBridge, RSOCBridge, SOCRBridge NormInfinityBridge, SOCtoPSDBridge and RSOCtoPSDBridge (#933, #936, #937, #938, #939).

v0.9.6 (October 25, 2019)

  • Added complementarity constraints (#913).
  • Allowed ModelLike objects as value of attributes (#928).
  • Testing improvements:
    • Added dual_objective_value option to MOI.Test.TestConfig (#922).
    • Added InvalidIndex tests in basic_constraint_tests (#921).
    • Added tests for the constant term in indicator constraint (#929).
  • Bridges improvements:
    • Added support for starting values for Functionize bridges (#923).
    • Added variable indices context to variable bridges (#920).
    • Fixed a typo in printing o debug_supports (#927).

v0.9.5 (October 9, 2019)

  • Clarified PrimalStatus/DualStatus to be NO_SOLUTION if result_index is out of bounds (#912).
  • Added tolerance for checks and use ResultCount + 1 for the result_index in MOI.Test.solve_result_status (#910, #917).
  • Use 0.5 instead of 2.0 for power in PowerCone in basic_constraint_test (#916).
  • Bridges improvements:
    • Added debug utilities for unsupported variable/constraint/objective (#861).
    • Fixed deletion of variables in bridged VectorOfVariables constraints (#909).
    • Fixed result_index with objective bridges (#911).

v0.9.4 (October 2, 2019)

  • Added solver-independent MIP callbacks (#782).
  • Implements submit for Utilities.CachingOptimizer and Bridges.AbstractBridgeOptimizer (#906).
  • Added tests for result count of solution attributes (#901, #904).
  • Added NumberOfThreads attribute (#892).
  • Added Utilities.get_bounds to get the bounds on a variable (#890).
  • Added a note on duplicate coefficients in documentation (#581).
  • Added result index in ConstraintBasisStatus (#898).
  • Added extension dictionary to Utilities.Model (#884, #895).
  • Fixed deletion of constrained variables for CachingOptimizer (#905).
  • Implemented Utilities.shift_constraint for Test.UnknownScalarSet (#896).
  • Bridges improvements:
    • Added Variable.RSOCtoSOCBridge (#907).
    • Implemented MOI.get for ConstraintFunction/ConstraintSet for Bridges.Constraint.SquareBridge (#899).

v0.9.3 (September 20, 2019)

  • Fixed ambiguity detected in Julia v1.3 (#891, #893).
  • Fixed missing sets from ListOfSupportedConstraints (#880).
  • Fixed copy of VectorOfVariables constraints with duplicate indices (#886).
  • Added extension dictionary to MOIU.Model (#884).
  • Implemented MOI.get for function and set for GeoMeanBridge (#888).
  • Updated documentation for SingleVariable indices and bridges (#885).
  • Testing improvements:
    • Added more comprehensive tests for names (#882).
    • Added tests for SingleVariable duals (#883).
    • Added tests for DualExponentialCone and DualPowerCone (#873).
  • Improvements for arbitrary coefficient type:
    • Fixed == for sets with mutable fields (#887).
    • Removed some Float64 assumptions in bridges (#878).
    • Automatic selection of Constraint.[Scalar|Vector]FunctionizeBridge (#889).

v0.9.2 (September 5, 2019)

  • Implemented model printing for MOI.ModelLike and specialized it for models defined in MOI (864).
  • Generalized contlinear tests for arbitrary coefficient type (#855).
  • Fixed supports_constraint for Semiinteger and Semicontinuous and supports for ObjectiveFunction (#859).
  • Fixed Allocate-Load copy for single variable constraints (#856).
  • Bridges improvements:
    • Add objective bridges (#789).
    • Fixed Variable.RSOCtoPSDBridge for dimension 2 (#869).
    • Added Variable.SOCtoRSOCBridge (#865).
    • Added Constraint.SOCRBridge and disable MOI.Bridges.Constraint.SOCtoPSDBridge (#751).
    • Fixed added_constraint_types for Contraint.LogDetBridge and Constraint.RootDetBridge (#870).

v0.9.1 (August 22, 2019)

  • Fix support for Julia v1.2 (#834).
  • L1 and L∞ norm epigraph cones and corresponding bridges to LP were added (#818).
  • Added tests to MOI.Test.nametest (#833).
  • Fix MOI.Test.soc3test for solvers not supporting infeasibility certificates (#839).
  • Implements operate for operators * and / between vector function and constant (#837).
  • Implements show for MOI.Utilities.IndexMap (#847).
  • Fix corner cases for mapping of variables in MOI.Utilities.CachingOptimizer and substitution of variables in MOI.Bridges.AbstractBridgeOptimizer (#848).
  • Fix transformation of constant terms for MOI.Bridges.Constraint.SOCtoPSDBridge and MOI.Bridges.Constraint.RSOCtoPSDBridge (#840).

v0.9.0 (August 13, 2019)

  • Support for Julia v0.6 and v0.7 was dropped (#714, #717).
  • A MOI.Utilities.Model implementation of ModelLike, this should replace most use cases of MOI.Utilities.@model (#781).
  • add_constrained_variable and add_constrained_variables were added (#759).
  • Support for indicator constraints was added (#709, #712).
  • DualObjectiveValue attribute was added (#473).
  • RawParameter attribute was added (#733).
  • A dual_set function was added (#804).
  • A Benchmarks submodule was added to facilitate solver benchmarking (#769).
  • A submit function was added, this may for instance allow the user to submit solutions or cuts to the solver from a callback (#775).
  • The field of ObjectiveValue was renamed to result_index (#729).
  • The _constant and Utilities.getconstant function were renamed to constant
  • REDUCTION_CERTIFICATE result status was added (#734).
  • Abstract matrix sets were added (#731).
  • Testing improvements:
    • The testing guideline was updated (#728).
    • Quadratic tests were added (#697).
    • Unit tests for RawStatusString, SolveTime, Silent and SolverName were added (#726, #741).
    • A rotated second-order cone test was added (#759).
    • A power cone test was added (#768).
    • Tests for ZeroOne variables with variable bounds were added (#772).
    • An unbounded test was added (#773).
    • Existing tests had a few updates (#702, #703, #763).
  • Documentation improvements:
    • Added a section on CachingOptimizer (#777).
    • Added a section on UniversalFallback, Model and @model (#762).
    • Transition the knapsack example to a doctest with MockOptimizer (#786).
  • Utilities improvements:
    • A CleverDict utility was added for a vector that automatically transform into a dictionary once a first index is removed (#767).
    • The Utilities.constant function was renamed to Utilities.constant_vector (#740).
    • Implement optimizer attributes for CachingOptimizer (#745).
    • Rename Utilities.add_scalar_constraint to Utilities.normalize_and_add_constraint (#801).
    • operate with vcat, SingleVariable and VectorOfVariables now returns a VectorOfVariables (#616).
    • Fix a type piracy of operate (#784).
    • The load_constraint fallback signature was fixed (#760).
    • The set_dot function was extended to work with sparse arrays (#805).
  • Bridges improvements:
    • The bridges no longer store the constraint function and set before it is bridged, the bridges now have to implement ConstraintFunction and ConstraintSet if the user wants to recover them. As a consequence, the @bridge macro was removed (#722).
    • Bridge are now instantiated with a bridge_constraint function instead of using a constructor (#730).
    • Fix constraint attributes for bridges (#699).
    • Constraint bridges were moved to the Bridges/Constraint submodule so they should now inherit from MOI.Bridges.Constraint.Abstract and should implement MOI.Bridges.Constraint.concrete_bridge_type instead of MOI.Bridges.concrete_bridge_type (#756).
    • Variable bridges were added in (#759).
    • Various improvements (#746, #747).

v0.8.4 (March 13, 2019)

  • Performance improvement in default_copy_to and bridge optimizer (#696).
  • Add Silent and implement setting optimizer attributes in caching and mock optimizers (#695).
  • Add Functionize bridges (SingleVariable and VectorOfVariables) (#659).
  • Minor typo fixes (#694).

v0.8.3 (March 6, 2019)

  • Use zero constant in scalar constraint function of MOI.Test.copytest (#691).
  • Fix variable deletion with SingleVariable objective function (#690).
  • Fix LazyBridgeOptimizer with bridges that add no constraints (#689).
  • Error message improvements (#673, #685, #686, #688).
  • Documentation improvements (#682, #683, #687).
  • Basis status:
    • Remove VariableBasisStatus (#679).
    • Test ConstraintBasisStatus and implement it in bridges (#678).
  • Fix inference of NumberOfVariables and NumberOfConstraints (#677).
  • Implement division between a quadratic function and a number (#675).

v0.8.2 (February 7, 2019)

  • Add RawStatusString attribute (#629).
  • Do not set names to the optimizer but only to the cache in CachingOptimizer (#638).
  • Make scalar MOI functions act as scalars in broadcast (#646).
  • Add function utilities:
    • Implement Base.zero (#634), Base.iszero (#643), add missing arithmetic operations (#644, #645) and fix division (#648).
    • Add a vectorize function that turns a vector of ScalarAffineFunction into a VectorAffineFunction (#642).
  • Improve support for starting values:
    • Show a warning in copy when starting values are not supported instead of throwing an error (#630).
    • Fix UniversalFallback for getting an variable or constraint attribute set to no indices (#623).
    • Add a test in contlineartest with partially set VariablePrimalStart.
  • Bridges improvements:
    • Fix StackOverFlow in LazyBridgeOptimizer when there is a cycle in the graph of bridges.
    • Add Slack bridges (#610, #650).
    • Add FlipSign bridges (#658).
  • Add tests with duplicate coefficients in ScalarAffineFunction and VectorAffineFunction (#639).
  • Use tolerance to compare VariablePrimal in rotatedsoc1 test (#632).
  • Use a zero constant in ScalarAffineFunction of constraints in psdt2 (#622).

v0.8.1 (January 7, 2019)

  • Adding an NLP objective now overrides any objective set using the ObjectiveFunction attribute (#619).
  • Rename fullbridgeoptimizer into full_bridge_optimizer (#621).
  • Allow custom constraint types with full_bridge_optimizer (#617).
  • Add Vectorize bridge which transforms scalar linear constraints into vector linear constraints (#615).

v0.8.0 (December 18, 2018)

  • Rename all enum values to follow the JuMP naming guidelines for constants, for example, Optimal becomes OPTIMAL, and DualInfeasible becomes DUAL_INFEASIBLE.
  • Rename CachingOptimizer methods for style compliance.
  • Add an MOI.TerminationStatusCode called ALMOST_DUAL_INFEASIBLE.

v0.7.0 (December 13, 2018)

  • Test that MOI.TerminationStatus is MOI.OptimizeNotCalled before MOI.optimize! is called.
  • Check supports_default_copy_to in tests (#594).
  • Key pieces of information like optimality, infeasibility, etc., are now reported through TerminationStatusCode. It is typically no longer necessary to check the result statuses in addition to the termination status.
  • Add perspective dimension to log-det cone (#593).

v0.6.4 (November 27, 2018)

  • Add OptimizeNotCalled termination status (#577) and improve documentation of other statuses (#575).
  • Add a solver naming guideline (#578).
  • Make FeasibilitySense the default ObjectiveSense (#579).
  • Fix Utilities.@model and Bridges.@bridge macros for functions and sets defined outside MOI (#582).
  • Document solver-specific attributes (#580) and implement them in Utilities.CachingOptimizer (#565).

v0.6.3 (November 16, 2018)

  • Variables and constraints are now allowed to have duplicate names. An error is thrown only on lookup. This change breaks some existing tests. (#549)
  • Attributes may now be partially set (some values could be nothing). (#563)
  • Performance improvements in Utilities.Model (#549, #567, #568)
  • Fix bug in QuadtoSOC (#558).
  • New supports_default_copy_to method that optimizers should implement to control caching behavior.
  • Documentation improvements.

v0.6.2 (October 26, 2018)

  • Improve hygiene of @model macro (#544).
  • Fix bug in copy tests (#543).
  • Fix bug in UniversalFallback attribute getter (#540).
  • Allow all correct solutions for solve_blank_obj unit test (#537).
  • Add errors for Allocate-Load and bad constraints (#534).
  • [performance] Add specialized implementation of hash for VariableIndex (#533).
  • [performance] Construct the name to object dictionaries lazily in model (#535).
  • Add the QuadtoSOC bridge which transforms ScalarQuadraticFunction constraints into RotatedSecondOrderCone (#483).

v0.6.1 (September 22, 2018)

  • Enable PositiveSemidefiniteConeSquare set and quadratic functions in MOIB.fullbridgeoptimizer (#524).
  • Add warning in the bridge between PositiveSemidefiniteConeSquare and PositiveSemidefiniteConeTriangle when the matrix is almost symmetric (#522).
  • Modify MOIT.copytest to not add multiples constraints on the same variable (#521).
  • Add missing keyword argument in one of MOIU.add_scalar_constraint methods (#520).

v0.6.0 (August 30, 2018)

  • The MOIU.@model and MOIB.@bridge macros now support functions and sets defined in external modules. As a consequence, function and set names in the macro arguments need to be prefixed by module name.
  • Rename functions according to the JuMP style guide:
    • copy! with keyword arguments copynames and warnattributes -> copy_to with keyword arguments copy_names and warn_attributes;
    • set! -> set;
    • addvariable[s]! -> add_variable[s];
    • supportsconstraint -> supports_constraint;
    • addconstraint[s]! -> add_constraint[s];
    • isvalid -> is_valid;
    • isempty -> is_empty;
    • Base.delete! -> delete;
    • modify! -> modify;
    • transform! -> transform;
    • initialize! -> initialize;
    • write -> write_to_file; and
    • read! -> read_from_file.
  • Remove free! (use Base.finalize instead).
  • Add the SquarePSD bridge which transforms PositiveSemidefiniteConeTriangle constraints into PositiveSemidefiniteConeTriangle.
  • Add result fallback for ConstraintDual of variable-wise constraint, ConstraintPrimal and ObjectiveValue.
  • Add tests for ObjectiveBound.
  • Add test for empty rows in vector linear constraint.
  • Rework errors: CannotError has been renamed NotAllowedError and the distinction between UnsupportedError and NotAllowedError is now about whether the element is not supported (for example, it cannot be copied a model containing this element) or the operation is not allowed (either because it is not implemented, because it cannot be performed in the current state of the model, or because it cannot be performed for a specific index)
  • canget is removed. NoSolution is added as a result status to indicate that the solver does not have either a primal or dual solution available (See #479).

v0.5.0 (August 5, 2018)

  • Fix names with CachingOptimizer.
  • Cleanup thanks to @mohamed82008.
  • Added a universal fallback for constraints.
  • Fast utilities for function canonicalization thanks to @rdeits.
  • Renamed dimension field to side_dimension in the context of matrix-like sets.
  • New and improved tests for cases like duplicate terms and ObjectiveBound.
  • Removed cantransform, canaddconstraint, canaddvariable, canset, canmodify, and candelete functions from the API. They are replaced by a new set of errors that are thrown: Subtypes of UnsupportedError indicate unsupported operations, while subtypes of CannotError indicate operations that cannot be performed in the current state.
  • The API for copy! is updated to remove the CopyResult type.
  • Updates for the new JuMP style guide.

v0.4.1 (June 28, 2018)

  • Fixes vector function modification on 32 bits.
  • Fixes Bellman-Ford algorithm for bridges.
  • Added an NLP test with FeasibilitySense.
  • Update modification documentation.

v0.4.0 (June 23, 2018)

  • Helper constructors for VectorAffineTerm and VectorQuadraticTerm.
  • Added modify_lhs to TestConfig.
  • Additional unit tests for optimizers.
  • Added a type parameter to CachingOptimizer for the optimizer field.
  • New API for problem modification (#388)
  • Tests pass without deprecation warnings on Julia 0.7.
  • Small fixes and documentation updates.

v0.3.0 (May 25, 2018)

  • Functions have been redefined to use arrays-of-structs instead of structs-of-arrays.
  • Improvements to MockOptimizer.
  • Significant changes to Bridges.
  • New and improved unit tests.
  • Fixes for Julia 0.7.

v0.2.0 (April 24, 2018)

  • Improvements to and better coverage of Tests.
  • Documentation fixes.
  • SolverName attribute.
  • Changes to the NLP interface (new definition of variable order and arrays of structs for bound pairs and sparsity patterns).
  • Addition of NLP tests.
  • Introduction of UniversalFallback.
  • copynames keyword argument to MOI.copy!.
  • Add Bridges submodule.

v0.1.0 (February 28, 2018)

  • Initial public release.
  • The framework for MOI was developed at the JuMP-dev workshop at MIT in June 2017 as a sorely needed replacement for MathProgBase.
+end

v0.9.22 (May 22, 2021)

This release contains backports from the ongoing development of the v0.10 release.

  • Improved type inference in Utilities, Bridges and FileFormats submodules to reduce latency.
  • Improved performance of Utilities.is_canonical.
  • Fixed Utilities.pass_nonvariable_constraints with bridged variables.
  • Fixed performance regression of Utilities.Model.
  • Fixed ordering of objective setting in parser.

v0.9.21 (April 23, 2021)

  • Added supports_shift_constant.
  • Improve performance of bridging quadratic constraints.
  • Add precompilation statements.
  • Large improvements to the documentation.
  • Fix a variety of inference issues, benefiting precompilation and reducing initial latency.
  • RawParameters are now ignored when resetting a CachingOptimizer. Previously, changing the underlying optimizer after RawParameters were set would throw an error.
  • Utilities.AbstractModel is being refactored. This may break users interacting with private fields of a model generated using @model.

v0.9.20 (February 20, 2021)

  • Improved performance of Utilities.ScalarFunctionIterator
  • Added support for compute_conflict to MOI layers
  • Added test with zero off-diagonal quadratic term in objective
  • Fixed double deletion of nested bridged SingleVariable/VectorOfVariables constraints
  • Fixed modification of un-set objective
  • Fixed function modification with duplicate terms
  • Made unit tests abort without failing if the problem class is not supported
  • Formatted code with JuliaFormatter
  • Clarified BasisStatusCode's docstring

v0.9.19 (December 1, 2020)

  • Added CallbackNodeStatus attribute
  • Added bridge from GreaterThan or LessThan to Interval
  • Added tests for infeasibility certificates and double optimize
  • Fixed support for Julia v1.6
  • Re-organized MOI docs and added documentation for adding a test

v0.9.18 (November 3, 2020)

  • Various improvements for working with complex numbers
  • Added GeoMeantoRelEntrBridge to bridge a GeometricMeanCone constraint to a relative entropy constraint

v0.9.17 (September 21, 2020)

  • Fixed CleverDict with variable of negative index value
  • Implement supports_add_constrained_variable for MockOptimizer

v0.9.16 (September 17, 2020)

  • Various fixes:
    • 32-bit support
    • CleverDict with abstract value type
    • Checks in test suite

v0.9.15 (September 14, 2020)

  • Bridges improvements:
    • (R)SOCtoNonConvexQuad bridge
    • ZeroOne bridge
    • Use supports_add_constrained_variable in LazyBridgeOptimizer
    • Exposed VariableBridgeCost and ConstraintBridgeCost attributes
    • Prioritize constraining variables on creation according to these costs
    • Refactor bridge debugging
  • Large performance improvements across all submodules
  • Lots of documentation improvements
  • FileFormats improvements:
    • Update MathOptFormat to v0.5
    • Fix supported objectives in FileFormats
  • Testing improvements:
    • Add name option for basic_constraint_test
  • Bug fixes and missing methods
    • Add length for iterators
    • Fix bug with duplicate terms
    • Fix order of LinearOfConstraintIndices

v0.9.14 (May 30, 2020)

  • Add a solver-independent interface for accessing the set of conflicting constraints an Irreducible Inconsistent Subsystem (#1056).
  • Bump JSONSchema dependency from v0.2 to v0.3 (#1090).
  • Documentation improvements:
    • Fix typos (#1054, #1060, #1061, #1064, #1069, #1070).
    • Remove the outdated recommendation for a package implementing MOI for a solver XXX to be called MathOptInterfaceXXX (#1087).
  • Utilities improvements:
    • Fix is_canonical for quadratic functions (#1081, #1089).
    • Implement add_constrained_variable[s] for CachingOptimizer so that it is added as constrained variables to the underlying optimizer (#1084).
    • Add support for custom objective functions for UniversalFallback (#1086).
    • Deterministic ordering of constraints in UniversalFallback (#1088).
  • Testing improvements:
    • Add NormOneCone/NormInfinityCone tests (#1045).
  • Bridges improvements:
    • Add bridges from Semiinteger and Semicontinuous (#1059).
    • Implement getting ConstraintSet for Variable.FlipSignBridge (#1066).
    • Fix setting ConstraintFunction for Constraint.ScalarizeBridge (#1093).
    • Fix NormOne/NormInf bridges with nonzero constants (#1045).
    • Fix StackOverflow in debug (#1063).
  • FileFormats improvements:
    • [SDPA] Implement the extension for integer variables (#1079).
    • [SDPA] Ignore comments after m and nblocks and detect dat-s extension (#1077).
    • [SDPA] No scaling of off-diagonal coefficient (#1076).
    • [SDPA] Add missing negation of constant (#1075).

v0.9.13 (March 24, 2020)

  • Added tests for Semicontinuous and Semiinteger variables (#1033).
  • Added tests for using ExprGraphs from NLP evaluators (#1043).
  • Update version compatibilities of dependencies (#1034, #1051, #1052).
  • Fixed typos in documentation (#1044).

v0.9.12 (February 28, 2020)

  • Fixed writing NLPBlock in MathOptFormat (#1037).
  • Fixed MockOptimizer for result attributes with non-one result index (#1039).
  • Updated test template with instantiate (#1032).

v0.9.11 (February 21, 2020)

  • Add an option for the model created by Utilities.@model to be a subtype of AbstractOptimizer (#1031).
  • Described dual cone in docstrings of GeoMeanCone and RelativeEntropyCone (#1018, #1028).
  • Fixed typos in documentation (#1022, #1024).
  • Fixed warning of unsupported attribute (#1027).
  • Added more rootdet/logdet conic tests (#1026).
  • Implemented ConstraintDual for Constraint.GeoMeanBridge, Constraint.RootDetBridge and Constraint.LogDetBridge and test duals in tests with GeoMeanCone and RootDetConeTriangle and LogDetConeTriangle cones (#1025, #1026).

v0.9.10 (January 31, 2020)

  • Added OptimizerWithAttributes grouping an optimizer constructor and a list of optimizer attributes (#1008).
  • Added RelativeEntropyCone with corresponding bridge into exponential cone constraints (#993).
  • Added NormSpectralCone and NormNuclearCone with corresponding bridges into positive semidefinite constraints (#976).
  • Added supports_constrained_variable(s) (#1004).
  • Added dual_set_type (#1002).
  • Added tests for vector specialized version of delete (#989, #1011).
  • Added PSD3 test (#1007).
  • Clarified dual solution of Tests.pow1v and Tests.pow1f (#1013).
  • Added support for EqualTo and Zero in Bridges.Constraint.SplitIntervalBridge (#1005).
  • Fixed Utilities.vectorize for empty vector (#1003).
  • Fixed free variables in LP writer (#1006).

v0.9.9 (December 29, 2019)

  • Incorporated MathOptFormat.jl as the FileFormats submodule. FileFormats provides readers and writers for a number of standard file formats and MOF, a file format specialized for MOI (#969).
  • Improved performance of deletion of vector of variables in MOI.Utilities.Model (#983).
  • Updated to MutableArithmetics v0.2 (#981).
  • Added MutableArithmetics.promote_operation allocation tests (#975).
  • Fixed inference issue on Julia v1.1 (#982).

v0.9.8 (December 19, 2019)

  • Implemented MutableArithmetics API (#924).
  • Fixed callbacks with CachingOptimizer (#959).
  • Fixed MOI.dimension for MOI.Complements (#948).
  • Added fallback for add_variables (#972).
  • Added is_diagonal_vectorized_index utility (#965).
  • Improved linear constraints display in manual (#963, #964).
  • Bridges improvements:
    • Added IndicatorSet to SOS1 bridge (#877).
    • Added support for starting values for Variable.VectorizeBridge (#944).
    • Fixed MOI.add_constraints with non-bridged variable constraint on bridged variable (#951).
    • Fixed corner cases and docstring of GeoMeanBridge (#961, #962, #966).
    • Fixed choice between variable or constraint bridges for constrained variables (#973).
    • Improve performance of bridge shortest path (#945, #946, #956).
    • Added docstring for test_delete_bridge (#954).
    • Added Variable bridge tests (#952).

v0.9.7 (October 30, 2019)

  • Implemented _result_index_field for NLPBlockDual (#934).
  • Fixed copy of model with starting values for vector constraints (#941).
  • Bridges improvements:
    • Improved performance of add_bridge and added has_bridge (#935).
    • Added AbstractSetMapBridge for bridges between sets S1, S2 such that there is a linear map A such that A*S1 = S2 (#933).
    • Added support for starting values for FlipSignBridge, VectorizeBridge, ScalarizeBridge, SlackBridge, SplitIntervalBridge, RSOCBridge, SOCRBridge NormInfinityBridge, SOCtoPSDBridge and RSOCtoPSDBridge (#933, #936, #937, #938, #939).

v0.9.6 (October 25, 2019)

  • Added complementarity constraints (#913).
  • Allowed ModelLike objects as value of attributes (#928).
  • Testing improvements:
    • Added dual_objective_value option to MOI.Test.TestConfig (#922).
    • Added InvalidIndex tests in basic_constraint_tests (#921).
    • Added tests for the constant term in indicator constraint (#929).
  • Bridges improvements:
    • Added support for starting values for Functionize bridges (#923).
    • Added variable indices context to variable bridges (#920).
    • Fixed a typo in printing o debug_supports (#927).

v0.9.5 (October 9, 2019)

  • Clarified PrimalStatus/DualStatus to be NO_SOLUTION if result_index is out of bounds (#912).
  • Added tolerance for checks and use ResultCount + 1 for the result_index in MOI.Test.solve_result_status (#910, #917).
  • Use 0.5 instead of 2.0 for power in PowerCone in basic_constraint_test (#916).
  • Bridges improvements:
    • Added debug utilities for unsupported variable/constraint/objective (#861).
    • Fixed deletion of variables in bridged VectorOfVariables constraints (#909).
    • Fixed result_index with objective bridges (#911).

v0.9.4 (October 2, 2019)

  • Added solver-independent MIP callbacks (#782).
  • Implements submit for Utilities.CachingOptimizer and Bridges.AbstractBridgeOptimizer (#906).
  • Added tests for result count of solution attributes (#901, #904).
  • Added NumberOfThreads attribute (#892).
  • Added Utilities.get_bounds to get the bounds on a variable (#890).
  • Added a note on duplicate coefficients in documentation (#581).
  • Added result index in ConstraintBasisStatus (#898).
  • Added extension dictionary to Utilities.Model (#884, #895).
  • Fixed deletion of constrained variables for CachingOptimizer (#905).
  • Implemented Utilities.shift_constraint for Test.UnknownScalarSet (#896).
  • Bridges improvements:
    • Added Variable.RSOCtoSOCBridge (#907).
    • Implemented MOI.get for ConstraintFunction/ConstraintSet for Bridges.Constraint.SquareBridge (#899).

v0.9.3 (September 20, 2019)

  • Fixed ambiguity detected in Julia v1.3 (#891, #893).
  • Fixed missing sets from ListOfSupportedConstraints (#880).
  • Fixed copy of VectorOfVariables constraints with duplicate indices (#886).
  • Added extension dictionary to MOIU.Model (#884).
  • Implemented MOI.get for function and set for GeoMeanBridge (#888).
  • Updated documentation for SingleVariable indices and bridges (#885).
  • Testing improvements:
    • Added more comprehensive tests for names (#882).
    • Added tests for SingleVariable duals (#883).
    • Added tests for DualExponentialCone and DualPowerCone (#873).
  • Improvements for arbitrary coefficient type:
    • Fixed == for sets with mutable fields (#887).
    • Removed some Float64 assumptions in bridges (#878).
    • Automatic selection of Constraint.[Scalar|Vector]FunctionizeBridge (#889).

v0.9.2 (September 5, 2019)

  • Implemented model printing for MOI.ModelLike and specialized it for models defined in MOI (864).
  • Generalized contlinear tests for arbitrary coefficient type (#855).
  • Fixed supports_constraint for Semiinteger and Semicontinuous and supports for ObjectiveFunction (#859).
  • Fixed Allocate-Load copy for single variable constraints (#856).
  • Bridges improvements:
    • Add objective bridges (#789).
    • Fixed Variable.RSOCtoPSDBridge for dimension 2 (#869).
    • Added Variable.SOCtoRSOCBridge (#865).
    • Added Constraint.SOCRBridge and disable MOI.Bridges.Constraint.SOCtoPSDBridge (#751).
    • Fixed added_constraint_types for Contraint.LogDetBridge and Constraint.RootDetBridge (#870).

v0.9.1 (August 22, 2019)

  • Fix support for Julia v1.2 (#834).
  • L1 and L∞ norm epigraph cones and corresponding bridges to LP were added (#818).
  • Added tests to MOI.Test.nametest (#833).
  • Fix MOI.Test.soc3test for solvers not supporting infeasibility certificates (#839).
  • Implements operate for operators * and / between vector function and constant (#837).
  • Implements show for MOI.Utilities.IndexMap (#847).
  • Fix corner cases for mapping of variables in MOI.Utilities.CachingOptimizer and substitution of variables in MOI.Bridges.AbstractBridgeOptimizer (#848).
  • Fix transformation of constant terms for MOI.Bridges.Constraint.SOCtoPSDBridge and MOI.Bridges.Constraint.RSOCtoPSDBridge (#840).

v0.9.0 (August 13, 2019)

  • Support for Julia v0.6 and v0.7 was dropped (#714, #717).
  • A MOI.Utilities.Model implementation of ModelLike, this should replace most use cases of MOI.Utilities.@model (#781).
  • add_constrained_variable and add_constrained_variables were added (#759).
  • Support for indicator constraints was added (#709, #712).
  • DualObjectiveValue attribute was added (#473).
  • RawParameter attribute was added (#733).
  • A dual_set function was added (#804).
  • A Benchmarks submodule was added to facilitate solver benchmarking (#769).
  • A submit function was added, this may for instance allow the user to submit solutions or cuts to the solver from a callback (#775).
  • The field of ObjectiveValue was renamed to result_index (#729).
  • The _constant and Utilities.getconstant function were renamed to constant
  • REDUCTION_CERTIFICATE result status was added (#734).
  • Abstract matrix sets were added (#731).
  • Testing improvements:
    • The testing guideline was updated (#728).
    • Quadratic tests were added (#697).
    • Unit tests for RawStatusString, SolveTime, Silent and SolverName were added (#726, #741).
    • A rotated second-order cone test was added (#759).
    • A power cone test was added (#768).
    • Tests for ZeroOne variables with variable bounds were added (#772).
    • An unbounded test was added (#773).
    • Existing tests had a few updates (#702, #703, #763).
  • Documentation improvements:
    • Added a section on CachingOptimizer (#777).
    • Added a section on UniversalFallback, Model and @model (#762).
    • Transition the knapsack example to a doctest with MockOptimizer (#786).
  • Utilities improvements:
    • A CleverDict utility was added for a vector that automatically transform into a dictionary once a first index is removed (#767).
    • The Utilities.constant function was renamed to Utilities.constant_vector (#740).
    • Implement optimizer attributes for CachingOptimizer (#745).
    • Rename Utilities.add_scalar_constraint to Utilities.normalize_and_add_constraint (#801).
    • operate with vcat, SingleVariable and VectorOfVariables now returns a VectorOfVariables (#616).
    • Fix a type piracy of operate (#784).
    • The load_constraint fallback signature was fixed (#760).
    • The set_dot function was extended to work with sparse arrays (#805).
  • Bridges improvements:
    • The bridges no longer store the constraint function and set before it is bridged, the bridges now have to implement ConstraintFunction and ConstraintSet if the user wants to recover them. As a consequence, the @bridge macro was removed (#722).
    • Bridge are now instantiated with a bridge_constraint function instead of using a constructor (#730).
    • Fix constraint attributes for bridges (#699).
    • Constraint bridges were moved to the Bridges/Constraint submodule so they should now inherit from MOI.Bridges.Constraint.Abstract and should implement MOI.Bridges.Constraint.concrete_bridge_type instead of MOI.Bridges.concrete_bridge_type (#756).
    • Variable bridges were added in (#759).
    • Various improvements (#746, #747).

v0.8.4 (March 13, 2019)

  • Performance improvement in default_copy_to and bridge optimizer (#696).
  • Add Silent and implement setting optimizer attributes in caching and mock optimizers (#695).
  • Add Functionize bridges (SingleVariable and VectorOfVariables) (#659).
  • Minor typo fixes (#694).

v0.8.3 (March 6, 2019)

  • Use zero constant in scalar constraint function of MOI.Test.copytest (#691).
  • Fix variable deletion with SingleVariable objective function (#690).
  • Fix LazyBridgeOptimizer with bridges that add no constraints (#689).
  • Error message improvements (#673, #685, #686, #688).
  • Documentation improvements (#682, #683, #687).
  • Basis status:
    • Remove VariableBasisStatus (#679).
    • Test ConstraintBasisStatus and implement it in bridges (#678).
  • Fix inference of NumberOfVariables and NumberOfConstraints (#677).
  • Implement division between a quadratic function and a number (#675).

v0.8.2 (February 7, 2019)

  • Add RawStatusString attribute (#629).
  • Do not set names to the optimizer but only to the cache in CachingOptimizer (#638).
  • Make scalar MOI functions act as scalars in broadcast (#646).
  • Add function utilities:
    • Implement Base.zero (#634), Base.iszero (#643), add missing arithmetic operations (#644, #645) and fix division (#648).
    • Add a vectorize function that turns a vector of ScalarAffineFunction into a VectorAffineFunction (#642).
  • Improve support for starting values:
    • Show a warning in copy when starting values are not supported instead of throwing an error (#630).
    • Fix UniversalFallback for getting an variable or constraint attribute set to no indices (#623).
    • Add a test in contlineartest with partially set VariablePrimalStart.
  • Bridges improvements:
    • Fix StackOverFlow in LazyBridgeOptimizer when there is a cycle in the graph of bridges.
    • Add Slack bridges (#610, #650).
    • Add FlipSign bridges (#658).
  • Add tests with duplicate coefficients in ScalarAffineFunction and VectorAffineFunction (#639).
  • Use tolerance to compare VariablePrimal in rotatedsoc1 test (#632).
  • Use a zero constant in ScalarAffineFunction of constraints in psdt2 (#622).

v0.8.1 (January 7, 2019)

  • Adding an NLP objective now overrides any objective set using the ObjectiveFunction attribute (#619).
  • Rename fullbridgeoptimizer into full_bridge_optimizer (#621).
  • Allow custom constraint types with full_bridge_optimizer (#617).
  • Add Vectorize bridge which transforms scalar linear constraints into vector linear constraints (#615).

v0.8.0 (December 18, 2018)

  • Rename all enum values to follow the JuMP naming guidelines for constants, for example, Optimal becomes OPTIMAL, and DualInfeasible becomes DUAL_INFEASIBLE.
  • Rename CachingOptimizer methods for style compliance.
  • Add an MOI.TerminationStatusCode called ALMOST_DUAL_INFEASIBLE.

v0.7.0 (December 13, 2018)

  • Test that MOI.TerminationStatus is MOI.OptimizeNotCalled before MOI.optimize! is called.
  • Check supports_default_copy_to in tests (#594).
  • Key pieces of information like optimality, infeasibility, etc., are now reported through TerminationStatusCode. It is typically no longer necessary to check the result statuses in addition to the termination status.
  • Add perspective dimension to log-det cone (#593).

v0.6.4 (November 27, 2018)

  • Add OptimizeNotCalled termination status (#577) and improve documentation of other statuses (#575).
  • Add a solver naming guideline (#578).
  • Make FeasibilitySense the default ObjectiveSense (#579).
  • Fix Utilities.@model and Bridges.@bridge macros for functions and sets defined outside MOI (#582).
  • Document solver-specific attributes (#580) and implement them in Utilities.CachingOptimizer (#565).

v0.6.3 (November 16, 2018)

  • Variables and constraints are now allowed to have duplicate names. An error is thrown only on lookup. This change breaks some existing tests. (#549)
  • Attributes may now be partially set (some values could be nothing). (#563)
  • Performance improvements in Utilities.Model (#549, #567, #568)
  • Fix bug in QuadtoSOC (#558).
  • New supports_default_copy_to method that optimizers should implement to control caching behavior.
  • Documentation improvements.

v0.6.2 (October 26, 2018)

  • Improve hygiene of @model macro (#544).
  • Fix bug in copy tests (#543).
  • Fix bug in UniversalFallback attribute getter (#540).
  • Allow all correct solutions for solve_blank_obj unit test (#537).
  • Add errors for Allocate-Load and bad constraints (#534).
  • [performance] Add specialized implementation of hash for VariableIndex (#533).
  • [performance] Construct the name to object dictionaries lazily in model (#535).
  • Add the QuadtoSOC bridge which transforms ScalarQuadraticFunction constraints into RotatedSecondOrderCone (#483).

v0.6.1 (September 22, 2018)

  • Enable PositiveSemidefiniteConeSquare set and quadratic functions in MOIB.fullbridgeoptimizer (#524).
  • Add warning in the bridge between PositiveSemidefiniteConeSquare and PositiveSemidefiniteConeTriangle when the matrix is almost symmetric (#522).
  • Modify MOIT.copytest to not add multiples constraints on the same variable (#521).
  • Add missing keyword argument in one of MOIU.add_scalar_constraint methods (#520).

v0.6.0 (August 30, 2018)

  • The MOIU.@model and MOIB.@bridge macros now support functions and sets defined in external modules. As a consequence, function and set names in the macro arguments need to be prefixed by module name.
  • Rename functions according to the JuMP style guide:
    • copy! with keyword arguments copynames and warnattributes -> copy_to with keyword arguments copy_names and warn_attributes;
    • set! -> set;
    • addvariable[s]! -> add_variable[s];
    • supportsconstraint -> supports_constraint;
    • addconstraint[s]! -> add_constraint[s];
    • isvalid -> is_valid;
    • isempty -> is_empty;
    • Base.delete! -> delete;
    • modify! -> modify;
    • transform! -> transform;
    • initialize! -> initialize;
    • write -> write_to_file; and
    • read! -> read_from_file.
  • Remove free! (use Base.finalize instead).
  • Add the SquarePSD bridge which transforms PositiveSemidefiniteConeTriangle constraints into PositiveSemidefiniteConeTriangle.
  • Add result fallback for ConstraintDual of variable-wise constraint, ConstraintPrimal and ObjectiveValue.
  • Add tests for ObjectiveBound.
  • Add test for empty rows in vector linear constraint.
  • Rework errors: CannotError has been renamed NotAllowedError and the distinction between UnsupportedError and NotAllowedError is now about whether the element is not supported (for example, it cannot be copied a model containing this element) or the operation is not allowed (either because it is not implemented, because it cannot be performed in the current state of the model, or because it cannot be performed for a specific index)
  • canget is removed. NoSolution is added as a result status to indicate that the solver does not have either a primal or dual solution available (See #479).

v0.5.0 (August 5, 2018)

  • Fix names with CachingOptimizer.
  • Cleanup thanks to @mohamed82008.
  • Added a universal fallback for constraints.
  • Fast utilities for function canonicalization thanks to @rdeits.
  • Renamed dimension field to side_dimension in the context of matrix-like sets.
  • New and improved tests for cases like duplicate terms and ObjectiveBound.
  • Removed cantransform, canaddconstraint, canaddvariable, canset, canmodify, and candelete functions from the API. They are replaced by a new set of errors that are thrown: Subtypes of UnsupportedError indicate unsupported operations, while subtypes of CannotError indicate operations that cannot be performed in the current state.
  • The API for copy! is updated to remove the CopyResult type.
  • Updates for the new JuMP style guide.

v0.4.1 (June 28, 2018)

  • Fixes vector function modification on 32 bits.
  • Fixes Bellman-Ford algorithm for bridges.
  • Added an NLP test with FeasibilitySense.
  • Update modification documentation.

v0.4.0 (June 23, 2018)

  • Helper constructors for VectorAffineTerm and VectorQuadraticTerm.
  • Added modify_lhs to TestConfig.
  • Additional unit tests for optimizers.
  • Added a type parameter to CachingOptimizer for the optimizer field.
  • New API for problem modification (#388)
  • Tests pass without deprecation warnings on Julia 0.7.
  • Small fixes and documentation updates.

v0.3.0 (May 25, 2018)

  • Functions have been redefined to use arrays-of-structs instead of structs-of-arrays.
  • Improvements to MockOptimizer.
  • Significant changes to Bridges.
  • New and improved unit tests.
  • Fixes for Julia 0.7.

v0.2.0 (April 24, 2018)

  • Improvements to and better coverage of Tests.
  • Documentation fixes.
  • SolverName attribute.
  • Changes to the NLP interface (new definition of variable order and arrays of structs for bound pairs and sparsity patterns).
  • Addition of NLP tests.
  • Introduction of UniversalFallback.
  • copynames keyword argument to MOI.copy!.
  • Add Bridges submodule.

v0.1.0 (February 28, 2018)

  • Initial public release.
  • The framework for MOI was developed at the JuMP-dev workshop at MIT in June 2017 as a sorely needed replacement for MathProgBase.
diff --git a/dev/moi/submodules/Benchmarks/overview/index.html b/dev/moi/submodules/Benchmarks/overview/index.html index 248c125a290..a016820c91e 100644 --- a/dev/moi/submodules/Benchmarks/overview/index.html +++ b/dev/moi/submodules/Benchmarks/overview/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

The Benchmarks submodule

To aid the development of efficient solver wrappers, MathOptInterface provides benchmarking capability. Benchmarking a wrapper follows a two-step process.

First, prior to making changes, create a baseline for the benchmark results on a given benchmark suite as follows:

using SolverPackage  # Replace with your choice of solver.
+

The Benchmarks submodule

To aid the development of efficient solver wrappers, MathOptInterface provides benchmarking capability. Benchmarking a wrapper follows a two-step process.

First, prior to making changes, create a baseline for the benchmark results on a given benchmark suite as follows:

using SolverPackage  # Replace with your choice of solver.
 import MathOptInterface as MOI
 
 suite = MOI.Benchmarks.suite() do
@@ -21,4 +21,4 @@
 
 MOI.Benchmarks.compare_against_baseline(
     suite, "current"; directory = "/tmp", verbose = true
-)

This comparison will create a report detailing improvements and regressions.

+)

This comparison will create a report detailing improvements and regressions.

diff --git a/dev/moi/submodules/Benchmarks/reference/index.html b/dev/moi/submodules/Benchmarks/reference/index.html index c620cde7098..4bdd92675f7 100644 --- a/dev/moi/submodules/Benchmarks/reference/index.html +++ b/dev/moi/submodules/Benchmarks/reference/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Benchmarks

Functions to help benchmark the performance of solver wrappers. See The Benchmarks submodule for more details.

MathOptInterface.Benchmarks.suiteFunction
suite(
+

Benchmarks

Functions to help benchmark the performance of solver wrappers. See The Benchmarks submodule for more details.

MathOptInterface.Benchmarks.suiteFunction
suite(
     new_model::Function;
     exclude::Vector{Regex} = Regex[]
 )

Create a suite of benchmarks. new_model should be a function that takes no arguments, and returns a new instance of the optimizer you wish to benchmark.

Use exclude to exclude a subset of benchmarks.

Examples

suite() do
@@ -18,4 +18,4 @@
 )

Run all benchmarks in suite and compare against files called name in directory that were created by a call to create_baseline.

A report summarizing the comparison is written to report_filename in directory.

Extra kwargs are based to BenchmarkTools.run.

Examples

my_suite = suite(() -> GLPK.Optimizer())
 compare_against_baseline(
     my_suite, "glpk_master"; directory = "/tmp", verbose = true
-)
source
+)
source
diff --git a/dev/moi/submodules/Bridges/implementation/index.html b/dev/moi/submodules/Bridges/implementation/index.html index 7b3505c0c90..9d1c2cab1cd 100644 --- a/dev/moi/submodules/Bridges/implementation/index.html +++ b/dev/moi/submodules/Bridges/implementation/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Implementing a bridge

The easiest way to implement a bridge is to follow an existing example. There are three locations of bridges in the source code:

  • Constraint bridges are stored in src/Bridges/Constraint/bridges
  • Objective bridges are stored in src/Bridges/Objective/bridges
  • Variable bridges are stored in src/Bridges/Variable/bridges

The Implementing a constraint bridge tutorial has a more detailed guide on what is required to implement a bridge.

When opening a pull request that adds a new bridge, use the checklist Adding a new bridge.

If you need help or advice, please contact the Developer Chatroom.

SetMap bridges

For constraint and variable bridges, a common reformulation is that $f(x) \in F$ is reformulated to $g(x) \in G$. In this case, no additional variables and constraints are added, and the bridge needs only a way to map between the functions f and g and the sets F and G.

To implementation a bridge of this form, subtype the abstract type Bridges.Constraint.SetMapBridge or Bridges.Variable.SetMapBridge and implement the API described in the docstring of each type.

final_touch

Some bridges require information from other parts of the model. One set of examples are the various combinatorial ToMILP bridges, such as Bridges.Constraint.SOS1ToMILPBridge, which require knowledge of the variable bounds.

Bridges requiring information from other parts of the model should implement Bridges.final_touch and Bridges.needs_final_touch.

During the bridge's construction, store the function and set and make no changes to the underlying model. Then, in Bridges.final_touch, query the additional information and add the reformulated problem to the model.

When implementing, you must consider that:

  • Bridges.final_touch may be called multiple times, so that your reformulation should be applied only if necessary. Sometimes the additional data will be the same, and sometimes it may be different.
  • We do not currently support final_touch bridges that introduce constraints which also require a final_touch bridge. Therefore, you should implement final_touch only if necessary, and we recommend that you contact the Developer Chatroom for advice before doing so.

Testing

Use the Bridges.runtests function to test a bridge. It takes three arguments: the type of the bridge, the input model as a string, and the output model as a string.

Here is an example:

julia> MOI.Bridges.runtests(
+

Implementing a bridge

The easiest way to implement a bridge is to follow an existing example. There are three locations of bridges in the source code:

  • Constraint bridges are stored in src/Bridges/Constraint/bridges
  • Objective bridges are stored in src/Bridges/Objective/bridges
  • Variable bridges are stored in src/Bridges/Variable/bridges

The Implementing a constraint bridge tutorial has a more detailed guide on what is required to implement a bridge.

When opening a pull request that adds a new bridge, use the checklist Adding a new bridge.

If you need help or advice, please contact the Developer Chatroom.

SetMap bridges

For constraint and variable bridges, a common reformulation is that $f(x) \in F$ is reformulated to $g(x) \in G$. In this case, no additional variables and constraints are added, and the bridge needs only a way to map between the functions f and g and the sets F and G.

To implementation a bridge of this form, subtype the abstract type Bridges.Constraint.SetMapBridge or Bridges.Variable.SetMapBridge and implement the API described in the docstring of each type.

final_touch

Some bridges require information from other parts of the model. One set of examples are the various combinatorial ToMILP bridges, such as Bridges.Constraint.SOS1ToMILPBridge, which require knowledge of the variable bounds.

Bridges requiring information from other parts of the model should implement Bridges.final_touch and Bridges.needs_final_touch.

During the bridge's construction, store the function and set and make no changes to the underlying model. Then, in Bridges.final_touch, query the additional information and add the reformulated problem to the model.

When implementing, you must consider that:

  • Bridges.final_touch may be called multiple times, so that your reformulation should be applied only if necessary. Sometimes the additional data will be the same, and sometimes it may be different.
  • We do not currently support final_touch bridges that introduce constraints which also require a final_touch bridge. Therefore, you should implement final_touch only if necessary, and we recommend that you contact the Developer Chatroom for advice before doing so.

Testing

Use the Bridges.runtests function to test a bridge. It takes three arguments: the type of the bridge, the input model as a string, and the output model as a string.

Here is an example:

julia> MOI.Bridges.runtests(
            MOI.Bridges.Constraint.GreaterToLessBridge,
            """
            variables: x
@@ -33,4 +33,4 @@
 Subject to:
 
 ScalarAffineFunction{Int64}-in-LessThan{Int64}
- (0) - (1) x <= (-1)
+ (0) - (1) x <= (-1)
diff --git a/dev/moi/submodules/Bridges/list_of_bridges/index.html b/dev/moi/submodules/Bridges/list_of_bridges/index.html index 90de9da1d90..8b6e0dd38fb 100644 --- a/dev/moi/submodules/Bridges/list_of_bridges/index.html +++ b/dev/moi/submodules/Bridges/list_of_bridges/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

List of bridges

This section describes the Bridges.AbstractBridges that are implemented in MathOptInterface.

Constraint bridges

These bridges are subtypes of Bridges.Constraint.AbstractBridge.

MathOptInterface.Bridges.Constraint.AllDifferentToCountDistinctBridgeType
AllDifferentToCountDistinctBridge{T,F} <: Bridges.Constraint.AbstractBridge

AllDifferentToCountDistinctBridge implements the following reformulations:

  • $x \in \textsf{AllDifferent}(d)$ to $(n, x) \in \textsf{CountDistinct}(1+d)$ and $n = d$
  • $f(x) \in \textsf{AllDifferent}(d)$ to $(d, f(x)) \in \textsf{CountDistinct}(1+d)$

Source node

AllDifferentToCountDistinctBridge supports:

where F is MOI.VectorOfVariables or MOI.VectorAffineFunction{T}.

Target nodes

AllDifferentToCountDistinctBridge creates:

source
MathOptInterface.Bridges.Constraint.BinPackingToMILPBridgeType
BinPackingToMILPBridge{T,F} <: Bridges.Constraint.AbstractBridge

BinPackingToMILPBridge implements the following reformulation:

  • $x \in BinPacking(c, w)$ into a mixed-integer linear program.

Reformulation

The reformulation is non-trivial, and it depends on the finite domain of each variable $x_i$, which we as define $S_i = \{l_i,\ldots,u_i\}$.

First, we introduce new binary variables $z_{ij}$, which are $1$ if variable $x_i$ takes the value $j$ in the optimal solution and $0$ otherwise:

\[\begin{aligned} +

List of bridges

This section describes the Bridges.AbstractBridges that are implemented in MathOptInterface.

Constraint bridges

These bridges are subtypes of Bridges.Constraint.AbstractBridge.

MathOptInterface.Bridges.Constraint.AllDifferentToCountDistinctBridgeType
AllDifferentToCountDistinctBridge{T,F} <: Bridges.Constraint.AbstractBridge

AllDifferentToCountDistinctBridge implements the following reformulations:

  • $x \in \textsf{AllDifferent}(d)$ to $(n, x) \in \textsf{CountDistinct}(1+d)$ and $n = d$
  • $f(x) \in \textsf{AllDifferent}(d)$ to $(d, f(x)) \in \textsf{CountDistinct}(1+d)$

Source node

AllDifferentToCountDistinctBridge supports:

where F is MOI.VectorOfVariables or MOI.VectorAffineFunction{T}.

Target nodes

AllDifferentToCountDistinctBridge creates:

source
MathOptInterface.Bridges.Constraint.BinPackingToMILPBridgeType
BinPackingToMILPBridge{T,F} <: Bridges.Constraint.AbstractBridge

BinPackingToMILPBridge implements the following reformulation:

  • $x \in BinPacking(c, w)$ into a mixed-integer linear program.

Reformulation

The reformulation is non-trivial, and it depends on the finite domain of each variable $x_i$, which we as define $S_i = \{l_i,\ldots,u_i\}$.

First, we introduce new binary variables $z_{ij}$, which are $1$ if variable $x_i$ takes the value $j$ in the optimal solution and $0$ otherwise:

\[\begin{aligned} z_{ij} \in \{0, 1\} & \;\; \forall i \in 1\ldots d, j \in S_i \\ x_i - \sum\limits_{j\in S_i} j \cdot z_{ij} = 0 & \;\; \forall i \in 1\ldots d \\ \sum\limits_{j\in S_i} z_{ij} = 1 & \;\; \forall i \in 1\ldots d \\ @@ -128,4 +128,4 @@ & & & x_{11} & x_{12} & x_{13} \\ & & & & x_{22} & x_{23} \\ & & & & & x_{33} -\end{bmatrix}\]

is positive semidefinite.

The bridge achieves this reformulation by adding a new set of variables in MOI.PositiveSemidefiniteConeTriangle(6), and then adding three groups of equality constraints to:

  • constrain the two x blocks to be equal
  • force the diagonal of the y blocks to be 0
  • force the lower triangular of the y block to be the negative of the upper triangle.
source
MathOptInterface.Bridges.Variable.RSOCtoPSDBridgeType
RSOCtoPSDBridge{T} <: Bridges.Variable.AbstractBridge

RSOCtoPSDBridge implements the following reformulation:

  • $||x||_2^2 \le 2tu$ where $t, u \ge 0$ into $Y \succeq 0$, with the substitution rule: $Y = \left[\begin{array}{c c}t & x^\top \\ x & 2u \mathbf{I}\end{array}\right].$

Additional bounds are added to ensure the off-diagonals of the $2uI$ submatrix are 0, and linear constraints are added to ensure the diagonal of $2uI$ takes the same values.

As a special case, if $|x|| = 0$, then RSOCtoPSDBridge reformulates into $(t, u) \in \mathbb{R}_+$.

Source node

RSOCtoPSDBridge supports:

Target nodes

RSOCtoPSDBridge creates:

source
MathOptInterface.Bridges.Variable.RSOCtoSOCBridgeType
RSOCtoSOCBridge{T} <: Bridges.Variable.AbstractBridge

RSOCtoSOCBridge implements the following reformulation:

  • $||x||_2^2 \le 2tu$ into $||v||_2 \le w$, with the substitution rules $t = \frac{w}{\sqrt 2} + \frac{v_1}{\sqrt 2}$, $u = \frac{w}{\sqrt 2} - \frac{v_1}{\sqrt 2}$, and $x = (v_2,\ldots,v_N)$.

Source node

RSOCtoSOCBridge supports:

Target node

RSOCtoSOCBridge creates:

source
MathOptInterface.Bridges.Variable.SOCtoRSOCBridgeType
SOCtoRSOCBridge{T} <: Bridges.Variable.AbstractBridge

SOCtoRSOCBridge implements the following reformulation:

  • $||x||_2 \le t$ into $2uv \ge ||w||_2^2$, with the substitution rules $t = \frac{u}{\sqrt 2} + \frac{v}{\sqrt 2}$, $x = (\frac{u}{\sqrt 2} - \frac{v}{\sqrt 2}, w)$.

Assumptions

  • SOCtoRSOCBridge assumes that $|x| \ge 1$.

Source node

SOCtoRSOCBridge supports:

Target node

SOCtoRSOCBridge creates:

source
MathOptInterface.Bridges.Variable.SetMapBridgeType
abstract type SetMapBridge{T,S1,S2} <: AbstractBridge end

Consider two type of sets, S1 and S2, and a linear mapping A such that the image of a set of type S1 under A is a set of type S2.

A SetMapBridge{T,S1,S2} is a bridge that substitutes constrained variables in S2 into the image through A of constrained variables in S1.

The linear map A is described by:

Implementing a method for these two functions is sufficient to bridge constrained variables. However, in order for the getters and setters of attributes such as dual solutions and starting values to work as well, a method for the following functions must be implemented:

See the docstrings of each function to see which feature would be missing if it was not implemented for a given bridge.

source
MathOptInterface.Bridges.Variable.VectorizeBridgeType
VectorizeBridge{T,S} <: Bridges.Variable.AbstractBridge

VectorizeBridge implements the following reformulations:

  • $x \ge a$ into $[y] \in \mathbb{R}_+$ with the substitution rule $x = a + y$
  • $x \le a$ into $[y] \in \mathbb{R}_-$ with the substitution rule $x = a + y$
  • $x == a$ into $[y] \in \{0\}$ with the substitution rule $x = a + y$

where T is the coefficient type of a + y.

Source node

VectorizeBridge supports:

Target nodes

VectorizeBridge creates:

source
MathOptInterface.Bridges.Variable.ZerosBridgeType
ZerosBridge{T} <: Bridges.Variable.AbstractBridge

ZerosBridge implements the following reformulation:

  • $x \in \{0\}$ into the substitution rule $x = 0$,

where T is the coefficient type of 0.

Source node

ZerosBridge supports:

Target nodes

ZerosBridge does not create target nodes. It replaces all instances of x with 0 via substitution. This means that no variables are created in the underlying model.

Caveats

The bridged variables are similar to parameters with zero values. Parameters with non-zero values can be created with constrained variables in MOI.EqualTo by combining a VectorizeBridge and this bridge.

However, functions modified by ZerosBridge cannot be unbridged. That is, for a given function, we cannot determine if the bridged variables were used.

A related implication is that this bridge does not support MOI.ConstraintDual. However, if a MOI.Utilities.CachingOptimizer is used, the dual can be determined by the bridged optimizer using MOI.Utilities.get_fallback because the caching optimizer records the unbridged function.

source
+\end{bmatrix}\]

is positive semidefinite.

The bridge achieves this reformulation by adding a new set of variables in MOI.PositiveSemidefiniteConeTriangle(6), and then adding three groups of equality constraints to:

  • constrain the two x blocks to be equal
  • force the diagonal of the y blocks to be 0
  • force the lower triangular of the y block to be the negative of the upper triangle.
source
MathOptInterface.Bridges.Variable.RSOCtoPSDBridgeType
RSOCtoPSDBridge{T} <: Bridges.Variable.AbstractBridge

RSOCtoPSDBridge implements the following reformulation:

  • $||x||_2^2 \le 2tu$ where $t, u \ge 0$ into $Y \succeq 0$, with the substitution rule: $Y = \left[\begin{array}{c c}t & x^\top \\ x & 2u \mathbf{I}\end{array}\right].$

Additional bounds are added to ensure the off-diagonals of the $2uI$ submatrix are 0, and linear constraints are added to ensure the diagonal of $2uI$ takes the same values.

As a special case, if $|x|| = 0$, then RSOCtoPSDBridge reformulates into $(t, u) \in \mathbb{R}_+$.

Source node

RSOCtoPSDBridge supports:

Target nodes

RSOCtoPSDBridge creates:

source
MathOptInterface.Bridges.Variable.RSOCtoSOCBridgeType
RSOCtoSOCBridge{T} <: Bridges.Variable.AbstractBridge

RSOCtoSOCBridge implements the following reformulation:

  • $||x||_2^2 \le 2tu$ into $||v||_2 \le w$, with the substitution rules $t = \frac{w}{\sqrt 2} + \frac{v_1}{\sqrt 2}$, $u = \frac{w}{\sqrt 2} - \frac{v_1}{\sqrt 2}$, and $x = (v_2,\ldots,v_N)$.

Source node

RSOCtoSOCBridge supports:

Target node

RSOCtoSOCBridge creates:

source
MathOptInterface.Bridges.Variable.SOCtoRSOCBridgeType
SOCtoRSOCBridge{T} <: Bridges.Variable.AbstractBridge

SOCtoRSOCBridge implements the following reformulation:

  • $||x||_2 \le t$ into $2uv \ge ||w||_2^2$, with the substitution rules $t = \frac{u}{\sqrt 2} + \frac{v}{\sqrt 2}$, $x = (\frac{u}{\sqrt 2} - \frac{v}{\sqrt 2}, w)$.

Assumptions

  • SOCtoRSOCBridge assumes that $|x| \ge 1$.

Source node

SOCtoRSOCBridge supports:

Target node

SOCtoRSOCBridge creates:

source
MathOptInterface.Bridges.Variable.SetMapBridgeType
abstract type SetMapBridge{T,S1,S2} <: AbstractBridge end

Consider two type of sets, S1 and S2, and a linear mapping A such that the image of a set of type S1 under A is a set of type S2.

A SetMapBridge{T,S1,S2} is a bridge that substitutes constrained variables in S2 into the image through A of constrained variables in S1.

The linear map A is described by:

Implementing a method for these two functions is sufficient to bridge constrained variables. However, in order for the getters and setters of attributes such as dual solutions and starting values to work as well, a method for the following functions must be implemented:

See the docstrings of each function to see which feature would be missing if it was not implemented for a given bridge.

source
MathOptInterface.Bridges.Variable.VectorizeBridgeType
VectorizeBridge{T,S} <: Bridges.Variable.AbstractBridge

VectorizeBridge implements the following reformulations:

  • $x \ge a$ into $[y] \in \mathbb{R}_+$ with the substitution rule $x = a + y$
  • $x \le a$ into $[y] \in \mathbb{R}_-$ with the substitution rule $x = a + y$
  • $x == a$ into $[y] \in \{0\}$ with the substitution rule $x = a + y$

where T is the coefficient type of a + y.

Source node

VectorizeBridge supports:

Target nodes

VectorizeBridge creates:

source
MathOptInterface.Bridges.Variable.ZerosBridgeType
ZerosBridge{T} <: Bridges.Variable.AbstractBridge

ZerosBridge implements the following reformulation:

  • $x \in \{0\}$ into the substitution rule $x = 0$,

where T is the coefficient type of 0.

Source node

ZerosBridge supports:

Target nodes

ZerosBridge does not create target nodes. It replaces all instances of x with 0 via substitution. This means that no variables are created in the underlying model.

Caveats

The bridged variables are similar to parameters with zero values. Parameters with non-zero values can be created with constrained variables in MOI.EqualTo by combining a VectorizeBridge and this bridge.

However, functions modified by ZerosBridge cannot be unbridged. That is, for a given function, we cannot determine if the bridged variables were used.

A related implication is that this bridge does not support MOI.ConstraintDual. However, if a MOI.Utilities.CachingOptimizer is used, the dual can be determined by the bridged optimizer using MOI.Utilities.get_fallback because the caching optimizer records the unbridged function.

source
diff --git a/dev/moi/submodules/Bridges/overview/index.html b/dev/moi/submodules/Bridges/overview/index.html index 780656b7e9b..425274e2472 100644 --- a/dev/moi/submodules/Bridges/overview/index.html +++ b/dev/moi/submodules/Bridges/overview/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

The Bridges submodule

The Bridges module simplifies the process of converting models between equivalent formulations.

Tip

Read our paper for more details on how bridges are implemented.

Why bridges?

A constraint can often be written in a number of equivalent formulations. For example, the constraint $l \le a^\top x \le u$ (ScalarAffineFunction-in-Interval) could be re-formulated as two constraints: $a^\top x \ge l$ (ScalarAffineFunction-in-GreaterThan) and $a^\top x \le u$ (ScalarAffineFunction-in-LessThan). An alternative re-formulation is to add a dummy variable y with the constraints $l \le y \le u$ (VariableIndex-in-Interval) and $a^\top x - y = 0$ (ScalarAffineFunction-in-EqualTo).

To avoid each solver having to code these transformations manually, MathOptInterface provides bridges.

A bridge is a small transformation from one constraint type to another (potentially collection of) constraint type.

Because these bridges are included in MathOptInterface, they can be re-used by any optimizer. Some bridges also implement constraint modifications and constraint primal and dual translations.

Several bridges can be used in combination to transform a single constraint into a form that the solver may understand. Choosing the bridges to use takes the form of finding a shortest path in the hyper-graph of bridges. The methodology is detailed in the MOI paper.

The three types of bridges

There are three types of bridges in MathOptInterface:

  1. Constraint bridges
  2. Variable bridges
  3. Objective bridges

Constraint bridges

Constraint bridges convert constraints formulated by the user into an equivalent form supported by the solver. Constraint bridges are subtypes of Bridges.Constraint.AbstractBridge.

The equivalent formulation may add constraints (and possibly also variables) in the underlying model.

In particular, constraint bridges can focus on rewriting the function of a constraint, and do not change the set. Function bridges are subtypes of Bridges.Constraint.AbstractFunctionConversionBridge.

Read the list of implemented constraint bridges for more details on the types of transformations that are available. Function bridges are Bridges.Constraint.ScalarFunctionizeBridge and Bridges.Constraint.VectorFunctionizeBridge.

Variable bridges

Variable bridges convert variables added by the user, either free with add_variable/add_variables, or constrained with add_constrained_variable/add_constrained_variables, into an equivalent form supported by the solver. Variable bridges are subtypes of Bridges.Variable.AbstractBridge.

The equivalent formulation may add constraints (and possibly also variables) in the underlying model.

Read the list of implemented variable bridges for more details on the types of transformations that are available.

Objective bridges

Objective bridges convert the ObjectiveFunction set by the user into an equivalent form supported by the solver. Objective bridges are subtypes of Bridges.Objective.AbstractBridge.

The equivalent formulation may add constraints (and possibly also variables) in the underlying model.

Read the list of implemented objective bridges for more details on the types of transformations that are available.

Bridges.full_bridge_optimizer

Tip

Unless you have an advanced use-case, this is probably the only function you need to care about.

To enable the full power of MathOptInterface's bridges, wrap an optimizer in a Bridges.full_bridge_optimizer.

julia> inner_optimizer = MOI.Utilities.Model{Float64}()
+

The Bridges submodule

The Bridges module simplifies the process of converting models between equivalent formulations.

Tip

Read our paper for more details on how bridges are implemented.

Why bridges?

A constraint can often be written in a number of equivalent formulations. For example, the constraint $l \le a^\top x \le u$ (ScalarAffineFunction-in-Interval) could be re-formulated as two constraints: $a^\top x \ge l$ (ScalarAffineFunction-in-GreaterThan) and $a^\top x \le u$ (ScalarAffineFunction-in-LessThan). An alternative re-formulation is to add a dummy variable y with the constraints $l \le y \le u$ (VariableIndex-in-Interval) and $a^\top x - y = 0$ (ScalarAffineFunction-in-EqualTo).

To avoid each solver having to code these transformations manually, MathOptInterface provides bridges.

A bridge is a small transformation from one constraint type to another (potentially collection of) constraint type.

Because these bridges are included in MathOptInterface, they can be re-used by any optimizer. Some bridges also implement constraint modifications and constraint primal and dual translations.

Several bridges can be used in combination to transform a single constraint into a form that the solver may understand. Choosing the bridges to use takes the form of finding a shortest path in the hyper-graph of bridges. The methodology is detailed in the MOI paper.

The three types of bridges

There are three types of bridges in MathOptInterface:

  1. Constraint bridges
  2. Variable bridges
  3. Objective bridges

Constraint bridges

Constraint bridges convert constraints formulated by the user into an equivalent form supported by the solver. Constraint bridges are subtypes of Bridges.Constraint.AbstractBridge.

The equivalent formulation may add constraints (and possibly also variables) in the underlying model.

In particular, constraint bridges can focus on rewriting the function of a constraint, and do not change the set. Function bridges are subtypes of Bridges.Constraint.AbstractFunctionConversionBridge.

Read the list of implemented constraint bridges for more details on the types of transformations that are available. Function bridges are Bridges.Constraint.ScalarFunctionizeBridge and Bridges.Constraint.VectorFunctionizeBridge.

Variable bridges

Variable bridges convert variables added by the user, either free with add_variable/add_variables, or constrained with add_constrained_variable/add_constrained_variables, into an equivalent form supported by the solver. Variable bridges are subtypes of Bridges.Variable.AbstractBridge.

The equivalent formulation may add constraints (and possibly also variables) in the underlying model.

Read the list of implemented variable bridges for more details on the types of transformations that are available.

Objective bridges

Objective bridges convert the ObjectiveFunction set by the user into an equivalent form supported by the solver. Objective bridges are subtypes of Bridges.Objective.AbstractBridge.

The equivalent formulation may add constraints (and possibly also variables) in the underlying model.

Read the list of implemented objective bridges for more details on the types of transformations that are available.

Bridges.full_bridge_optimizer

Tip

Unless you have an advanced use-case, this is probably the only function you need to care about.

To enable the full power of MathOptInterface's bridges, wrap an optimizer in a Bridges.full_bridge_optimizer.

julia> inner_optimizer = MOI.Utilities.Model{Float64}()
 MOIU.Model{Float64}
 ├ ObjectiveSense: FEASIBILITY_SENSE
 ├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}
@@ -66,4 +66,4 @@
 
 julia> MOI.get(inner_optimizer, MOI.ListOfConstraintTypesPresent())
 1-element Vector{Tuple{Type, Type}}:
- (MathOptInterface.VariableIndex, MathOptInterface.Interval{Float64})
+ (MathOptInterface.VariableIndex, MathOptInterface.Interval{Float64})
diff --git a/dev/moi/submodules/Bridges/reference/index.html b/dev/moi/submodules/Bridges/reference/index.html index fba68623de6..1d85aeba868 100644 --- a/dev/moi/submodules/Bridges/reference/index.html +++ b/dev/moi/submodules/Bridges/reference/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Bridges

AbstractBridge API

MathOptInterface.Bridges.AbstractBridgeType
abstract type AbstractBridge end

An abstract type representing a bridged constraint or variable in a MOI.Bridges.AbstractBridgeOptimizer.

All bridges must implement:

Subtypes of AbstractBridge may have additional requirements. Consult their docstrings for details.

In addition, all subtypes may optionally implement the following constraint attributes with the bridge in place of the constraint index:

source
MathOptInterface.Bridges.added_constrained_variable_typesFunction
added_constrained_variable_types(
+

Bridges

AbstractBridge API

MathOptInterface.Bridges.AbstractBridgeType
abstract type AbstractBridge end

An abstract type representing a bridged constraint or variable in a MOI.Bridges.AbstractBridgeOptimizer.

All bridges must implement:

Subtypes of AbstractBridge may have additional requirements. Consult their docstrings for details.

In addition, all subtypes may optionally implement the following constraint attributes with the bridge in place of the constraint index:

source
MathOptInterface.Bridges.added_constrained_variable_typesFunction
added_constrained_variable_types(
     BT::Type{<:AbstractBridge},
 )::Vector{Tuple{Type}}

Return a list of the types of constrained variables that bridges of concrete type BT add.

Implementation notes

  • This method depends only on the type of the bridge, not the runtime value. If the bridge may add a constrained variable, the type must be included in the return vector.
  • If the bridge adds a free variable via MOI.add_variable or MOI.add_variables, the return vector must include (MOI.Reals,).

Example

julia> MOI.Bridges.added_constrained_variable_types(
            MOI.Bridges.Variable.NonposToNonnegBridge{Float64},
@@ -219,4 +219,4 @@
     cost::Int,
 )

As an alternative to variable_node, add a virtual edge to graph that represents adding a free variable, followed by a constraint of type constraint_node, with bridging cost cost.

Why is this needed?

Variables can either be added as a variable constrained on creation, or as a free variable which then has a constraint added to it.

source
MathOptInterface.Bridges.bridge_indexFunction
bridge_index(graph::Graph, node::VariableNode)::Int
 bridge_index(graph::Graph, node::ConstraintNode)::Int
-bridge_index(graph::Graph, node::ObjectiveNode)::Int

Return the optimal index of the bridge to chose from node.

source
MathOptInterface.Bridges.is_variable_edge_bestFunction
is_variable_edge_best(graph::Graph, node::VariableNode)::Bool

Return a Bool indicating whether node should be added as a variable constrained on creation, or as a free variable followed by a constraint.

source
+bridge_index(graph::Graph, node::ObjectiveNode)::Int

Return the optimal index of the bridge to chose from node.

source
MathOptInterface.Bridges.is_variable_edge_bestFunction
is_variable_edge_best(graph::Graph, node::VariableNode)::Bool

Return a Bool indicating whether node should be added as a variable constrained on creation, or as a free variable followed by a constraint.

source
diff --git a/dev/moi/submodules/FileFormats/overview/index.html b/dev/moi/submodules/FileFormats/overview/index.html index be4d9a84f85..f6b50648eeb 100644 --- a/dev/moi/submodules/FileFormats/overview/index.html +++ b/dev/moi/submodules/FileFormats/overview/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

The FileFormats submodule

The FileFormats module provides functions for reading and writing MOI models using write_to_file and read_from_file.

Supported file types

You must read and write files to a FileFormats.Model object. Specific the file-type by passing a FileFormats.FileFormat enum. For example:

The Conic Benchmark Format

julia> model = MOI.FileFormats.Model(format = MOI.FileFormats.FORMAT_CBF)
+

The FileFormats submodule

The FileFormats module provides functions for reading and writing MOI models using write_to_file and read_from_file.

Supported file types

You must read and write files to a FileFormats.Model object. Specific the file-type by passing a FileFormats.FileFormat enum. For example:

The Conic Benchmark Format

julia> model = MOI.FileFormats.Model(format = MOI.FileFormats.FORMAT_CBF)
 MOI.FileFormats.CBF.Model
 ├ ObjectiveSense: FEASIBILITY_SENSE
 ├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}
@@ -158,4 +158,4 @@
 path:         [variables][1]
 instance:     Dict{String, Any}("NaMe" => "x")
 schema key:   required
-schema value: Any["name"]
+schema value: Any["name"]
diff --git a/dev/moi/submodules/FileFormats/reference/index.html b/dev/moi/submodules/FileFormats/reference/index.html index 38b1e52c370..5ef3e3db937 100644 --- a/dev/moi/submodules/FileFormats/reference/index.html +++ b/dev/moi/submodules/FileFormats/reference/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

File Formats

Functions to help read and write MOI models to/from various file formats. See The FileFormats submodule for more details.

MathOptInterface.FileFormats.ModelFunction
Model(
+

File Formats

Functions to help read and write MOI models to/from various file formats. See The FileFormats submodule for more details.

MathOptInterface.FileFormats.ModelFunction
Model(
     ;
     format::FileFormat = FORMAT_AUTOMATIC,
     filename::Union{Nothing, String} = nothing,
@@ -19,4 +19,4 @@
 \end{align}\]

In other words, the standard conic form contains nonnegative and positive semidefinite variables with equality constraints. That is, in the MathOptInterface's terminology, MOI.VectorOfVariables-in-MOI.Nonnegatives, MOI.VectorOfVariables-in-MOI.PositiveSemidefiniteConeTriangle and MOI.ScalarAffineFunction-in-MOI.EqualTo constraints.

If a model is in standard conic form, use Dualization.jl to transform it into the geometric conic form before writting it. Otherwise, the nonnegative (resp. positive semidefinite) variables will be bridged into free variables with affine constraints constraining them to belong to the nonnegative orthant (resp. positive semidefinite cone) by the MOI.Bridges.Constraint.VectorFunctionizeBridge. Moreover, equality constraints will be bridged into pairs of affine constraints in the nonnegative orthant by the MOI.Bridges.Constraint.SplitIntervalBridge and then the MOI.Bridges.Constraint.VectorizeBridge.

If a solver is in standard conic form, use Dualization.jl to transform the model read into standard conic form before copying it to the solver. Otherwise, the free variables will be bridged into pairs of variables in the nonnegative orthant by the MOI.Bridges.Variable.FreeBridge and affine constraints will be bridged into equality constraints by creating a slack variable by the MOI.Bridges.Constraint.VectorSlackBridge.

source

Other helpers

MathOptInterface.FileFormats.NL.SolFileResultsType
SolFileResults(filename::String, model::Model)

Parse the .sol file filename created by solving model and return a SolFileResults struct.

The returned struct supports the MOI.get API for querying result attributes such as MOI.TerminationStatus, MOI.VariablePrimal, and MOI.ConstraintDual.

source
SolFileResults(
     raw_status::String,
     termination_status::MOI.TerminationStatusCode,
-)

Return a SolFileResults struct with MOI.RawStatusString set to raw_status, MOI.TerminationStatus set to termination_status, and MOI.PrimalStatus and MOI.DualStatus set to NO_SOLUTION.

All other attributes are un-set.

source
+)

Return a SolFileResults struct with MOI.RawStatusString set to raw_status, MOI.TerminationStatus set to termination_status, and MOI.PrimalStatus and MOI.DualStatus set to NO_SOLUTION.

All other attributes are un-set.

source
diff --git a/dev/moi/submodules/Nonlinear/overview/index.html b/dev/moi/submodules/Nonlinear/overview/index.html index 3ab40a9b941..6f510886feb 100644 --- a/dev/moi/submodules/Nonlinear/overview/index.html +++ b/dev/moi/submodules/Nonlinear/overview/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Nonlinear

Warning

The Nonlinear submodule is experimental. Until this message is removed, breaking changes may be introduced in any minor or patch release of MathOptInterface.

The Nonlinear submodule contains data structures and functions for working with a nonlinear optimization problem in the form of an expression graph. This page explains the API and describes the rationale behind its design.

Standard form

Nonlinear programs (NLPs) are a class of optimization problems in which some of the constraints or the objective function are nonlinear:

\[\begin{align} +

Nonlinear

Warning

The Nonlinear submodule is experimental. Until this message is removed, breaking changes may be introduced in any minor or patch release of MathOptInterface.

The Nonlinear submodule contains data structures and functions for working with a nonlinear optimization problem in the form of an expression graph. This page explains the API and describes the rationale behind its design.

Standard form

Nonlinear programs (NLPs) are a class of optimization problems in which some of the constraints or the objective function are nonlinear:

\[\begin{align} \min_{x \in \mathbb{R}^n} & f_0(x) \\ \;\;\text{s.t.} & l_j \le f_j(x) \le u_j & j = 1 \ldots m \end{align}\]

There may be additional constraints, as well as things like variable bounds and integrality restrictions, but we do not consider them here because they are best dealt with by other components of MathOptInterface.

API overview

The core element of the Nonlinear submodule is Nonlinear.Model:

julia> const Nonlinear = MOI.Nonlinear;
@@ -184,4 +184,4 @@
                Node(NODE_VARIABLE, 1, 1),
            ],
            [2.0],
-       );

The ordering of the nodes in the tape must satisfy two rules:

  • The children of a node must appear after the parent. This means that the tape is ordered topologically, so that a reverse pass of the nodes evaluates all children nodes before their parent
  • The arguments for a CALL node are ordered in the tape based on the order in which they appear in the function call.

Design goals

This is less readable than the other options, but does this data structure meet our design goals?

Instead of a heap-allocated object for each node, we only have two Vectors for each expression, nodes and values, as well as two constant vectors for the OPERATORS. In addition, all fields are concretely typed, and there are no Union or Any types.

For our third goal, it is not easy to identify the children of a node, but it is easy to identify the parent of any node. Therefore, we can use Nonlinear.adjacency_matrix to compute a sparse matrix that maps parents to their children.

The design in practice

In practice, Node and Expression are exactly Nonlinear.Node and Nonlinear.Expression. However, Nonlinear.NodeType has more fields to account for comparison operators such as :>= and :<=, logic operators such as :&& and :||, nonlinear parameters, and nested subexpressions.

Moreover, instead of storing the operators as global constants, they are stored in Nonlinear.OperatorRegistry, and it also stores a vector of logic operators and a vector of comparison operators. In addition to Nonlinear.DEFAULT_UNIVARIATE_OPERATORS and Nonlinear.DEFAULT_MULTIVARIATE_OPERATORS, you can register user-defined functions using Nonlinear.register_operator.

Nonlinear.Model is a struct that stores the Nonlinear.OperatorRegistry, as well as a list of parameters and subexpressions in the model.

ReverseAD

Nonlinear.ReverseAD is a submodule for computing derivatives of a nonlinear optimization problem using sparse reverse-mode automatic differentiation (AD).

This section does not attempt to explain how sparse reverse-mode AD works, but instead explains why MOI contains its own implementation, and highlights notable differences from similar packages.

Warning

Don't use the API in ReverseAD to compute derivatives. Instead, create a Nonlinear.Evaluator object with Nonlinear.SparseReverseMode as the backend, and then query the MOI API methods.

Design goals

The JuliaDiff organization maintains a list of packages for doing AD in Julia. At last count, there were at least ten packages——not including ReverseAD——for reverse-mode AD in Julia. ReverseAD exists because it has a different set of design goals.

  • Goal: handle scale and sparsity. The types of nonlinear optimization problems that MOI represents can be large scale (10^5 or more functions across 10^5 or more variables) with very sparse derivatives. The ability to compute a sparse Hessian matrix is essential. To the best of our knowledge, ReverseAD is the only reverse-mode AD system in Julia that handles sparsity by default.
  • Goal: limit the scope to improve robustness. Most other AD packages accept arbitrary Julia functions as input and then trace an expression graph using operator overloading. This means they must deal (or detect and ignore) with control flow, I/O, and other vagaries of Julia. In contrast, ReverseAD only accepts functions in the form of Nonlinear.Expression, which greatly limits the range of syntax that it must deal with. By reducing the scope of what we accept as input to functions relevant for mathematical optimization, we can provide a simpler implementation with various performance optimizations.
  • Goal: provide outputs which match what solvers expect. Other AD packages focus on differentiating individual Julia functions. In contrast, ReverseAD has a very specific use-case: to generate outputs needed by the MOI nonlinear API. This means it needs to efficiently compute sparse Hessians, and it needs subexpression handling to avoid recomputing subexpressions that are shared between functions.

History

ReverseAD started life as ReverseDiffSparse.jl, development of which began in early 2014(!). This was well before the other AD packages started development. Because we had a well-tested, working AD in JuMP, there was less motivation to contribute to and explore other AD packages. The lack of historical interaction also meant that other packages were not optimized for the types of problems that JuMP is built for (that is, large-scale sparse problems). When we first created MathOptInterface, we kept the AD in JuMP to simplify the transition, and post-poned the development of a first-class nonlinear interface in MathOptInterface.

Prior to the introduction of Nonlinear, JuMP's nonlinear implementation was a confusing mix of functions and types spread across the code base and in the private _Derivatives submodule. This made it hard to swap the AD system for another. The main motivation for refactoring JuMP to create the Nonlinear submodule in MathOptInterface was to abstract the interface between JuMP and the AD system, allowing us to swap-in and test new AD systems in the future.

+ );

The ordering of the nodes in the tape must satisfy two rules:

  • The children of a node must appear after the parent. This means that the tape is ordered topologically, so that a reverse pass of the nodes evaluates all children nodes before their parent
  • The arguments for a CALL node are ordered in the tape based on the order in which they appear in the function call.

Design goals

This is less readable than the other options, but does this data structure meet our design goals?

Instead of a heap-allocated object for each node, we only have two Vectors for each expression, nodes and values, as well as two constant vectors for the OPERATORS. In addition, all fields are concretely typed, and there are no Union or Any types.

For our third goal, it is not easy to identify the children of a node, but it is easy to identify the parent of any node. Therefore, we can use Nonlinear.adjacency_matrix to compute a sparse matrix that maps parents to their children.

The design in practice

In practice, Node and Expression are exactly Nonlinear.Node and Nonlinear.Expression. However, Nonlinear.NodeType has more fields to account for comparison operators such as :>= and :<=, logic operators such as :&& and :||, nonlinear parameters, and nested subexpressions.

Moreover, instead of storing the operators as global constants, they are stored in Nonlinear.OperatorRegistry, and it also stores a vector of logic operators and a vector of comparison operators. In addition to Nonlinear.DEFAULT_UNIVARIATE_OPERATORS and Nonlinear.DEFAULT_MULTIVARIATE_OPERATORS, you can register user-defined functions using Nonlinear.register_operator.

Nonlinear.Model is a struct that stores the Nonlinear.OperatorRegistry, as well as a list of parameters and subexpressions in the model.

ReverseAD

Nonlinear.ReverseAD is a submodule for computing derivatives of a nonlinear optimization problem using sparse reverse-mode automatic differentiation (AD).

This section does not attempt to explain how sparse reverse-mode AD works, but instead explains why MOI contains its own implementation, and highlights notable differences from similar packages.

Warning

Don't use the API in ReverseAD to compute derivatives. Instead, create a Nonlinear.Evaluator object with Nonlinear.SparseReverseMode as the backend, and then query the MOI API methods.

Design goals

The JuliaDiff organization maintains a list of packages for doing AD in Julia. At last count, there were at least ten packages——not including ReverseAD——for reverse-mode AD in Julia. ReverseAD exists because it has a different set of design goals.

  • Goal: handle scale and sparsity. The types of nonlinear optimization problems that MOI represents can be large scale (10^5 or more functions across 10^5 or more variables) with very sparse derivatives. The ability to compute a sparse Hessian matrix is essential. To the best of our knowledge, ReverseAD is the only reverse-mode AD system in Julia that handles sparsity by default.
  • Goal: limit the scope to improve robustness. Most other AD packages accept arbitrary Julia functions as input and then trace an expression graph using operator overloading. This means they must deal (or detect and ignore) with control flow, I/O, and other vagaries of Julia. In contrast, ReverseAD only accepts functions in the form of Nonlinear.Expression, which greatly limits the range of syntax that it must deal with. By reducing the scope of what we accept as input to functions relevant for mathematical optimization, we can provide a simpler implementation with various performance optimizations.
  • Goal: provide outputs which match what solvers expect. Other AD packages focus on differentiating individual Julia functions. In contrast, ReverseAD has a very specific use-case: to generate outputs needed by the MOI nonlinear API. This means it needs to efficiently compute sparse Hessians, and it needs subexpression handling to avoid recomputing subexpressions that are shared between functions.

History

ReverseAD started life as ReverseDiffSparse.jl, development of which began in early 2014(!). This was well before the other AD packages started development. Because we had a well-tested, working AD in JuMP, there was less motivation to contribute to and explore other AD packages. The lack of historical interaction also meant that other packages were not optimized for the types of problems that JuMP is built for (that is, large-scale sparse problems). When we first created MathOptInterface, we kept the AD in JuMP to simplify the transition, and post-poned the development of a first-class nonlinear interface in MathOptInterface.

Prior to the introduction of Nonlinear, JuMP's nonlinear implementation was a confusing mix of functions and types spread across the code base and in the private _Derivatives submodule. This made it hard to swap the AD system for another. The main motivation for refactoring JuMP to create the Nonlinear submodule in MathOptInterface was to abstract the interface between JuMP and the AD system, allowing us to swap-in and test new AD systems in the future.

diff --git a/dev/moi/submodules/Nonlinear/reference/index.html b/dev/moi/submodules/Nonlinear/reference/index.html index 943300b8b53..28db00bf3da 100644 --- a/dev/moi/submodules/Nonlinear/reference/index.html +++ b/dev/moi/submodules/Nonlinear/reference/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Nonlinear Modeling

More information can be found in the Nonlinear section of the manual.

MathOptInterface.NonlinearModule
Nonlinear
Warning

The Nonlinear submodule is experimental. Until this message is removed, breaking changes may be introduced in any minor or patch release of MathOptInterface.

source
MathOptInterface.Nonlinear.ModelType
Model()

The core datastructure for representing a nonlinear optimization problem.

It has the following fields:

  • objective::Union{Nothing,Expression} : holds the nonlinear objective function, if one exists, otherwise nothing.
  • expressions::Vector{Expression} : a vector of expressions in the model.
  • constraints::OrderedDict{ConstraintIndex,Constraint} : a map from ConstraintIndex to the corresponding Constraint. An OrderedDict is used instead of a Vector to support constraint deletion.
  • parameters::Vector{Float64} : holds the current values of the parameters.
  • operators::OperatorRegistry : stores the operators used in the model.
source

Expressions

MathOptInterface.Nonlinear.add_expressionFunction
add_expression(model::Model, expr)::ExpressionIndex

Parse expr into a Expression and add to model. Returns an ExpressionIndex that can be interpolated into other input expressions.

expr must be a type that is supported by parse_expression.

Examples

model = Model()
+

Nonlinear Modeling

More information can be found in the Nonlinear section of the manual.

MathOptInterface.NonlinearModule
Nonlinear
Warning

The Nonlinear submodule is experimental. Until this message is removed, breaking changes may be introduced in any minor or patch release of MathOptInterface.

source
MathOptInterface.Nonlinear.ModelType
Model()

The core datastructure for representing a nonlinear optimization problem.

It has the following fields:

  • objective::Union{Nothing,Expression} : holds the nonlinear objective function, if one exists, otherwise nothing.
  • expressions::Vector{Expression} : a vector of expressions in the model.
  • constraints::OrderedDict{ConstraintIndex,Constraint} : a map from ConstraintIndex to the corresponding Constraint. An OrderedDict is used instead of a Vector to support constraint deletion.
  • parameters::Vector{Float64} : holds the current values of the parameters.
  • operators::OperatorRegistry : stores the operators used in the model.
source

Expressions

Parameters

MathOptInterface.Nonlinear.add_parameterFunction
add_parameter(model::Model, value::Float64)::ParameterIndex

Add a new parameter to model with the default value value. Returns a ParameterIndex that can be interpolated into other input expressions and used to modify the value of the parameter.

Examples

model = Model()
@@ -148,4 +148,4 @@
 delete(model, c1)
 evaluator = Evaluator(model)
 MOI.initialize(evaluator, Symbol[])
-ordinal_index(model, c2)  # Returns 1
source
+ordinal_index(model, c2) # Returns 1
source
diff --git a/dev/moi/submodules/Test/overview/index.html b/dev/moi/submodules/Test/overview/index.html index 286f18a7134..154242b5b2d 100644 --- a/dev/moi/submodules/Test/overview/index.html +++ b/dev/moi/submodules/Test/overview/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

The Test submodule

The Test submodule provides tools to help solvers implement unit tests in order to ensure they implement the MathOptInterface API correctly, and to check for solver-correctness.

We use a centralized repository of tests, so that if we find a bug in one solver, instead of adding a test to that particular repository, we add it here so that all solvers can benefit.

How to test a solver

The skeleton below can be used for the wrapper test file of a solver named FooBar.

# ============================ /test/MOI_wrapper.jl ============================
+

The Test submodule

The Test submodule provides tools to help solvers implement unit tests in order to ensure they implement the MathOptInterface API correctly, and to check for solver-correctness.

We use a centralized repository of tests, so that if we find a bug in one solver, instead of adding a test to that particular repository, we add it here so that all solvers can benefit.

How to test a solver

The skeleton below can be used for the wrapper test file of a solver named FooBar.

# ============================ /test/MOI_wrapper.jl ============================
 module TestFooBar
 
 import FooBar
@@ -167,4 +167,4 @@
         ),
     )
     return
-end

Finally, you also need to implement Test.version_added. If we added this test when the latest released version of MOI was v0.10.5, define:

version_added(::typeof(test_unit_optimize!_twice)) = v"0.10.6"

Step 6

Commit the changes to git from ~/.julia/dev/MathOptInterface and submit the PR for review.

Tip

If you need help writing a test, open an issue on GitHub, or ask the Developer Chatroom.

+end

Finally, you also need to implement Test.version_added. If we added this test when the latest released version of MOI was v0.10.5, define:

version_added(::typeof(test_unit_optimize!_twice)) = v"0.10.6"

Step 6

Commit the changes to git from ~/.julia/dev/MathOptInterface and submit the PR for review.

Tip

If you need help writing a test, open an issue on GitHub, or ask the Developer Chatroom.

diff --git a/dev/moi/submodules/Test/reference/index.html b/dev/moi/submodules/Test/reference/index.html index cd2c01338a0..7dd3d3b0d7c 100644 --- a/dev/moi/submodules/Test/reference/index.html +++ b/dev/moi/submodules/Test/reference/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

The Test submodule

Functions to help test implementations of MOI. See The Test submodule for more details.

MathOptInterface.Test.ConfigType
Config(
+

The Test submodule

Functions to help test implementations of MOI. See The Test submodule for more details.

MathOptInterface.Test.ConfigType
Config(
     ::Type{T} = Float64;
     atol::Real = Base.rtoldefault(T),
     rtol::Real = Base.rtoldefault(T),
@@ -61,4 +61,4 @@
 \text{subject to}\ & x_1 * x_2 * x_3 * x_4 \ge 25 \\
                      & x_1^2 + x_2^2 + x_3^2 + x_4^2 = 40 \\
                      & 1 \le x_1, x_2, x_3, x_4 \le 5
-\end{aligned}\]

The optimal solution is [1.000, 4.743, 3.821, 1.379].

source
+\end{aligned}\]

The optimal solution is [1.000, 4.743, 3.821, 1.379].

source
diff --git a/dev/moi/submodules/Utilities/overview/index.html b/dev/moi/submodules/Utilities/overview/index.html index 02453453640..73cd5178542 100644 --- a/dev/moi/submodules/Utilities/overview/index.html +++ b/dev/moi/submodules/Utilities/overview/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

The Utilities submodule

The Utilities submodule provides a variety of functions and datastructures for managing MOI.ModelLike objects.

Utilities.Model

Utilities.Model provides an implementation of a ModelLike that efficiently supports all functions and sets defined within MOI. However, given the extensibility of MOI, this might not cover all use cases.

Create a model as follows:

julia> model = MOI.Utilities.Model{Float64}()
+

The Utilities submodule

The Utilities submodule provides a variety of functions and datastructures for managing MOI.ModelLike objects.

Utilities.Model

Utilities.Model provides an implementation of a ModelLike that efficiently supports all functions and sets defined within MOI. However, given the extensibility of MOI, this might not cover all use cases.

Create a model as follows:

julia> model = MOI.Utilities.Model{Float64}()
 MOIU.Model{Float64}
 ├ ObjectiveSense: FEASIBILITY_SENSE
 ├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}
@@ -378,4 +378,4 @@
 index_map = MOI.copy_to(dest, src)
 for (F, S) in MOI.get(src, MOI.ListOfConstraintTypesPresent())
     function_barrier(dest, src, index_map[F, S])
-end
+end
diff --git a/dev/moi/submodules/Utilities/reference/index.html b/dev/moi/submodules/Utilities/reference/index.html index b12cd2da7d1..4007b6e3e8c 100644 --- a/dev/moi/submodules/Utilities/reference/index.html +++ b/dev/moi/submodules/Utilities/reference/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Utilities.Model

MathOptInterface.Utilities.ModelType
MOI.Utilities.Model{T}() where {T}

An implementation of ModelLike that supports all functions and sets defined in MOI. It is parameterized by the coefficient type.

Examples

julia> import MathOptInterface as MOI
+

Utilities.Model

MathOptInterface.Utilities.ModelType
MOI.Utilities.Model{T}() where {T}

An implementation of ModelLike that supports all functions and sets defined in MOI. It is parameterized by the coefficient type.

Examples

julia> import MathOptInterface as MOI
 
 julia> model = MOI.Utilities.Model{Float64}()
 MOIU.Model{Float64}
@@ -21,7 +21,7 @@
     vector_functions,
     typed_vector_functions,
     is_optimizer = false
-)

Creates a type model_name implementing the MOI model interface and supporting all combinations of the provided functions and sets.

Each typed_ scalar/vector sets/functions argument is a tuple of types. A type is "typed" if it has a coefficient {T} as the first type parameter.

Tuple syntax

To give no set/function, write (). To give one set or function X, write (X,).

is_optimizer

If is_optimizer = true, the resulting struct is a of GenericOptimizer, which is a subtype of MOI.AbstractOptimizer, otherwise, it is a GenericModel, which is a subtype of MOI.ModelLike.

VariableIndex

Examples

The model describing a linear program would be:

@model(
+)

Creates a type model_name implementing the MOI model interface and supporting all combinations of the provided functions and sets.

Each typed_ scalar/vector sets/functions argument is a tuple of types. A type is "typed" if it has a coefficient {T} as the first type parameter.

Tuple syntax

To give no set/function, write (). To give one set or function X, write (X,).

is_optimizer

If is_optimizer = true, the resulting struct is a of GenericOptimizer, which is a subtype of MOI.AbstractOptimizer, otherwise, it is a GenericModel, which is a subtype of MOI.ModelLike.

VariableIndex

Examples

The model describing a linear program would be:

@model(
     LPModel,                                          # model_name
     (),                                               # untyped scalar sets
     (MOI.EqualTo, MOI.GreaterThan, MOI.LessThan, MOI.Interval), #   typed scalar sets
@@ -39,7 +39,7 @@
 end

A struct for storing variables and VariableIndex-related constraints. Used in MOI.Utilities.Model by default.

source
MathOptInterface.Utilities.FreeVariablesType
mutable struct FreeVariables <: MOI.ModelLike
     n::Int64
     FreeVariables() = new(0)
-end

A struct for storing free variables that can be used as the variables field of GenericModel or GenericModel. It represents a model that does not support any constraint nor objective function.

Example

The following model type represents a conic model in geometric form. As opposed to VariablesContainer, FreeVariables does not support constraint bounds so they are bridged into an affine constraint in the MOI.Nonnegatives cone as expected for the geometric conic form.

julia> MOI.Utilities.@product_of_sets(
+end

A struct for storing free variables that can be used as the variables field of GenericModel or GenericModel. It represents a model that does not support any constraint nor objective function.

Example

The following model type represents a conic model in geometric form. As opposed to VariablesContainer, FreeVariables does not support constraint bounds so they are bridged into an affine constraint in the MOI.Nonnegatives cone as expected for the geometric conic form.

julia> MOI.Utilities.@product_of_sets(
     Cones,
     MOI.Zeros,
     MOI.Nonnegatives,
@@ -91,7 +91,7 @@
         typeof(CleverDicts.key_to_index),
         typeof(CleverDicts.index_to_key),
     }
-end

A struct storing F-in-S constraints as a mapping between the constraint indices to the corresponding tuple of function and set.

source
MathOptInterface.Utilities.@struct_of_constraints_by_function_typesMacro
Utilities.@struct_of_constraints_by_function_types(name, func_types...)

Given a vector of n function types (F1, F2,..., Fn) in func_types, defines a subtype of StructOfConstraints of name name and which type parameters {T, C1, C2, ..., Cn}. It contains n field where the ith field has type Ci and stores the constraints of function type Fi.

The expression Fi can also be a union in which case any constraint for which the function type is in the union is stored in the field with type Ci.

source
MathOptInterface.Utilities.@struct_of_constraints_by_set_typesMacro
Utilities.@struct_of_constraints_by_set_types(name, func_types...)

Given a vector of n set types (S1, S2,..., Sn) in func_types, defines a subtype of StructOfConstraints of name name and which type parameters {T, C1, C2, ..., Cn}. It contains n field where the ith field has type Ci and stores the constraints of set type Si. The expression Si can also be a union in which case any constraint for which the set type is in the union is stored in the field with type Ci. This can be useful if Ci is a MatrixOfConstraints in order to concatenate the coefficients of constraints of several different set types in the same matrix.

source
MathOptInterface.Utilities.struct_of_constraint_codeFunction
struct_of_constraint_code(struct_name, types, field_types = nothing)

Given a vector of n Union{SymbolFun,_UnionSymbolFS{SymbolFun}} or Union{SymbolSet,_UnionSymbolFS{SymbolSet}} in types, defines a subtype of StructOfConstraints of name name and which type parameters {T, F1, F2, ..., Fn} if field_types is nothing and a {T} otherwise. It contains n field where the ith field has type Ci if field_types is nothing and type field_types[i] otherwise. If types is vector of Union{SymbolFun,_UnionSymbolFS{SymbolFun}} (resp. Union{SymbolSet,_UnionSymbolFS{SymbolSet}}) then the constraints of that function (resp. set) type are stored in the corresponding field.

This function is used by the macros @model, @struct_of_constraints_by_function_types and @struct_of_constraints_by_set_types.

source

Caching optimizer

MathOptInterface.Utilities.CachingOptimizerType
CachingOptimizer

CachingOptimizer is an intermediate layer that stores a cache of the model and links it with an optimizer. It supports incremental model construction and modification even when the optimizer doesn't.

Constructors

    CachingOptimizer(cache::MOI.ModelLike, optimizer::AbstractOptimizer)

Creates a CachingOptimizer in AUTOMATIC mode, with the optimizer optimizer.

The type of the optimizer returned is CachingOptimizer{typeof(optimizer), typeof(cache)} so it does not support the function reset_optimizer(::CachingOptimizer, new_optimizer) if the type of new_optimizer is different from the type of optimizer.

    CachingOptimizer(cache::MOI.ModelLike, mode::CachingOptimizerMode)

Creates a CachingOptimizer in the NO_OPTIMIZER state and mode mode.

The type of the optimizer returned is CachingOptimizer{MOI.AbstractOptimizer,typeof(cache)} so it does support the function reset_optimizer(::CachingOptimizer, new_optimizer) if the type of new_optimizer is different from the type of optimizer.

About the type

States

A CachingOptimizer may be in one of three possible states (CachingOptimizerState):

  • NO_OPTIMIZER: The CachingOptimizer does not have any optimizer.
  • EMPTY_OPTIMIZER: The CachingOptimizer has an empty optimizer. The optimizer is not synchronized with the cached model.
  • ATTACHED_OPTIMIZER: The CachingOptimizer has an optimizer, and it is synchronized with the cached model.

Modes

A CachingOptimizer has two modes of operation (CachingOptimizerMode):

  • MANUAL: The only methods that change the state of the CachingOptimizer are Utilities.reset_optimizer, Utilities.drop_optimizer, and Utilities.attach_optimizer. Attempting to perform an operation in the incorrect state results in an error.
  • AUTOMATIC: The CachingOptimizer changes its state when necessary. For example, optimize! will automatically call attach_optimizer (an optimizer must have been previously set). Attempting to add a constraint or perform a modification not supported by the optimizer results in a drop to EMPTY_OPTIMIZER mode.
source
MathOptInterface.Utilities.attach_optimizerFunction
attach_optimizer(model::CachingOptimizer)

Attaches the optimizer to model, copying all model data into it. Can be called only from the EMPTY_OPTIMIZER state. If the copy succeeds, the CachingOptimizer will be in state ATTACHED_OPTIMIZER after the call, otherwise an error is thrown; see MOI.copy_to for more details on which errors can be thrown.

source
MOIU.attach_optimizer(model::GenericModel)

Call MOIU.attach_optimizer on the backend of model.

Cannot be called in direct mode.

source
MathOptInterface.Utilities.reset_optimizerFunction
reset_optimizer(m::CachingOptimizer, optimizer::MOI.AbstractOptimizer)

Sets or resets m to have the given empty optimizer optimizer.

Can be called from any state. An assertion error will be thrown if optimizer is not empty.

The CachingOptimizer m will be in state EMPTY_OPTIMIZER after the call.

source
reset_optimizer(m::CachingOptimizer)

Detaches and empties the current optimizer. Can be called from ATTACHED_OPTIMIZER or EMPTY_OPTIMIZER state. The CachingOptimizer will be in state EMPTY_OPTIMIZER after the call.

source
MOIU.reset_optimizer(model::GenericModel, optimizer::MOI.AbstractOptimizer)

Call MOIU.reset_optimizer on the backend of model.

Cannot be called in direct mode.

source
MOIU.reset_optimizer(model::GenericModel)

Call MOIU.reset_optimizer on the backend of model.

Cannot be called in direct mode.

source
MathOptInterface.Utilities.drop_optimizerFunction
drop_optimizer(m::CachingOptimizer)

Drops the optimizer, if one is present. Can be called from any state. The CachingOptimizer will be in state NO_OPTIMIZER after the call.

source
MOIU.drop_optimizer(model::GenericModel)

Call MOIU.drop_optimizer on the backend of model.

Cannot be called in direct mode.

source

Mock optimizer

Printing

MathOptInterface.Utilities.latex_formulationFunction
latex_formulation(model::MOI.ModelLike; kwargs...)

Wrap model in a type so that it can be pretty-printed as text/latex in a notebook like IJulia, or in Documenter.

To render the model, end the cell with latex_formulation(model), or call display(latex_formulation(model)) in to force the display of the model from inside a function.

Possible keyword arguments are:

  • simplify_coefficients : Simplify coefficients if possible by omitting them or removing trailing zeros.
  • default_name : The name given to variables with an empty name.
  • print_types : Print the MOI type of each function and set for clarity.
source

Copy utilities

MathOptInterface.Utilities.ModelFilterType
ModelFilter(filter::Function, model::MOI.ModelLike)

A layer to filter out various components of model.

The filter function takes a single argument, which is each element from the list returned by the attributes below. It returns true if the element should be visible in the filtered model and false otherwise.

The components that are filtered are:

  • Entire constraint types via:
    • MOI.ListOfConstraintTypesPresent
  • Individual constraints via:
    • MOI.ListOfConstraintIndices{F,S}
  • Specific attributes via:
    • MOI.ListOfModelAttributesSet
    • MOI.ListOfConstraintAttributesSet
    • MOI.ListOfVariableAttributesSet
Warning

The list of attributes filtered may change in a future release. You should write functions that are generic and not limited to the five types listed above. Thus, you should probably define a fallback filter(::Any) = true.

See below for examples of how this works.

Note

This layer has a limited scope. It is intended by be used in conjunction with MOI.copy_to.

Example: copy model excluding integer constraints

Use the do syntax to provide a single function.

filtered_src = MOI.Utilities.ModelFilter(src) do item
+end

A struct storing F-in-S constraints as a mapping between the constraint indices to the corresponding tuple of function and set.

source
MathOptInterface.Utilities.@struct_of_constraints_by_function_typesMacro
Utilities.@struct_of_constraints_by_function_types(name, func_types...)

Given a vector of n function types (F1, F2,..., Fn) in func_types, defines a subtype of StructOfConstraints of name name and which type parameters {T, C1, C2, ..., Cn}. It contains n field where the ith field has type Ci and stores the constraints of function type Fi.

The expression Fi can also be a union in which case any constraint for which the function type is in the union is stored in the field with type Ci.

source
MathOptInterface.Utilities.@struct_of_constraints_by_set_typesMacro
Utilities.@struct_of_constraints_by_set_types(name, func_types...)

Given a vector of n set types (S1, S2,..., Sn) in func_types, defines a subtype of StructOfConstraints of name name and which type parameters {T, C1, C2, ..., Cn}. It contains n field where the ith field has type Ci and stores the constraints of set type Si. The expression Si can also be a union in which case any constraint for which the set type is in the union is stored in the field with type Ci. This can be useful if Ci is a MatrixOfConstraints in order to concatenate the coefficients of constraints of several different set types in the same matrix.

source
MathOptInterface.Utilities.struct_of_constraint_codeFunction
struct_of_constraint_code(struct_name, types, field_types = nothing)

Given a vector of n Union{SymbolFun,_UnionSymbolFS{SymbolFun}} or Union{SymbolSet,_UnionSymbolFS{SymbolSet}} in types, defines a subtype of StructOfConstraints of name name and which type parameters {T, F1, F2, ..., Fn} if field_types is nothing and a {T} otherwise. It contains n field where the ith field has type Ci if field_types is nothing and type field_types[i] otherwise. If types is vector of Union{SymbolFun,_UnionSymbolFS{SymbolFun}} (resp. Union{SymbolSet,_UnionSymbolFS{SymbolSet}}) then the constraints of that function (resp. set) type are stored in the corresponding field.

This function is used by the macros @model, @struct_of_constraints_by_function_types and @struct_of_constraints_by_set_types.

source

Caching optimizer

MathOptInterface.Utilities.CachingOptimizerType
CachingOptimizer

CachingOptimizer is an intermediate layer that stores a cache of the model and links it with an optimizer. It supports incremental model construction and modification even when the optimizer doesn't.

Constructors

    CachingOptimizer(cache::MOI.ModelLike, optimizer::AbstractOptimizer)

Creates a CachingOptimizer in AUTOMATIC mode, with the optimizer optimizer.

The type of the optimizer returned is CachingOptimizer{typeof(optimizer), typeof(cache)} so it does not support the function reset_optimizer(::CachingOptimizer, new_optimizer) if the type of new_optimizer is different from the type of optimizer.

    CachingOptimizer(cache::MOI.ModelLike, mode::CachingOptimizerMode)

Creates a CachingOptimizer in the NO_OPTIMIZER state and mode mode.

The type of the optimizer returned is CachingOptimizer{MOI.AbstractOptimizer,typeof(cache)} so it does support the function reset_optimizer(::CachingOptimizer, new_optimizer) if the type of new_optimizer is different from the type of optimizer.

About the type

States

A CachingOptimizer may be in one of three possible states (CachingOptimizerState):

  • NO_OPTIMIZER: The CachingOptimizer does not have any optimizer.
  • EMPTY_OPTIMIZER: The CachingOptimizer has an empty optimizer. The optimizer is not synchronized with the cached model.
  • ATTACHED_OPTIMIZER: The CachingOptimizer has an optimizer, and it is synchronized with the cached model.

Modes

A CachingOptimizer has two modes of operation (CachingOptimizerMode):

  • MANUAL: The only methods that change the state of the CachingOptimizer are Utilities.reset_optimizer, Utilities.drop_optimizer, and Utilities.attach_optimizer. Attempting to perform an operation in the incorrect state results in an error.
  • AUTOMATIC: The CachingOptimizer changes its state when necessary. For example, optimize! will automatically call attach_optimizer (an optimizer must have been previously set). Attempting to add a constraint or perform a modification not supported by the optimizer results in a drop to EMPTY_OPTIMIZER mode.
source
MathOptInterface.Utilities.attach_optimizerFunction
attach_optimizer(model::CachingOptimizer)

Attaches the optimizer to model, copying all model data into it. Can be called only from the EMPTY_OPTIMIZER state. If the copy succeeds, the CachingOptimizer will be in state ATTACHED_OPTIMIZER after the call, otherwise an error is thrown; see MOI.copy_to for more details on which errors can be thrown.

source
MOIU.attach_optimizer(model::GenericModel)

Call MOIU.attach_optimizer on the backend of model.

Cannot be called in direct mode.

source
MathOptInterface.Utilities.reset_optimizerFunction
reset_optimizer(m::CachingOptimizer, optimizer::MOI.AbstractOptimizer)

Sets or resets m to have the given empty optimizer optimizer.

Can be called from any state. An assertion error will be thrown if optimizer is not empty.

The CachingOptimizer m will be in state EMPTY_OPTIMIZER after the call.

source
reset_optimizer(m::CachingOptimizer)

Detaches and empties the current optimizer. Can be called from ATTACHED_OPTIMIZER or EMPTY_OPTIMIZER state. The CachingOptimizer will be in state EMPTY_OPTIMIZER after the call.

source
MOIU.reset_optimizer(model::GenericModel, optimizer::MOI.AbstractOptimizer)

Call MOIU.reset_optimizer on the backend of model.

Cannot be called in direct mode.

source
MOIU.reset_optimizer(model::GenericModel)

Call MOIU.reset_optimizer on the backend of model.

Cannot be called in direct mode.

source
MathOptInterface.Utilities.drop_optimizerFunction
drop_optimizer(m::CachingOptimizer)

Drops the optimizer, if one is present. Can be called from any state. The CachingOptimizer will be in state NO_OPTIMIZER after the call.

source
MOIU.drop_optimizer(model::GenericModel)

Call MOIU.drop_optimizer on the backend of model.

Cannot be called in direct mode.

source

Mock optimizer

Printing

MathOptInterface.Utilities.latex_formulationFunction
latex_formulation(model::MOI.ModelLike; kwargs...)

Wrap model in a type so that it can be pretty-printed as text/latex in a notebook like IJulia, or in Documenter.

To render the model, end the cell with latex_formulation(model), or call display(latex_formulation(model)) in to force the display of the model from inside a function.

Possible keyword arguments are:

  • simplify_coefficients : Simplify coefficients if possible by omitting them or removing trailing zeros.
  • default_name : The name given to variables with an empty name.
  • print_types : Print the MOI type of each function and set for clarity.
source

Copy utilities

MathOptInterface.Utilities.ModelFilterType
ModelFilter(filter::Function, model::MOI.ModelLike)

A layer to filter out various components of model.

The filter function takes a single argument, which is each element from the list returned by the attributes below. It returns true if the element should be visible in the filtered model and false otherwise.

The components that are filtered are:

  • Entire constraint types via:
    • MOI.ListOfConstraintTypesPresent
  • Individual constraints via:
    • MOI.ListOfConstraintIndices{F,S}
  • Specific attributes via:
    • MOI.ListOfModelAttributesSet
    • MOI.ListOfConstraintAttributesSet
    • MOI.ListOfVariableAttributesSet
Warning

The list of attributes filtered may change in a future release. You should write functions that are generic and not limited to the five types listed above. Thus, you should probably define a fallback filter(::Any) = true.

See below for examples of how this works.

Note

This layer has a limited scope. It is intended by be used in conjunction with MOI.copy_to.

Example: copy model excluding integer constraints

Use the do syntax to provide a single function.

filtered_src = MOI.Utilities.ModelFilter(src) do item
     return item != (MOI.VariableIndex, MOI.Integer)
 end
 MOI.copy_to(dest, filtered_src)

Example: copy model excluding names

Use type dispatch to simplify the implementation:

my_filter(::Any) = true  # Note the generic fallback
@@ -316,4 +316,4 @@
 For performance, it is recommended that the inner loop lies in a separate
 function to guarantee type-stability.
 
-If you want an iterator of all current outer keys, use [`outer_keys`](@ref).
source
+If you want an iterator of all current outer keys, use [`outer_keys`](@ref).
source
diff --git a/dev/moi/tutorials/bridging_constraint/index.html b/dev/moi/tutorials/bridging_constraint/index.html index 156069edd98..3b4e49c1aa4 100644 --- a/dev/moi/tutorials/bridging_constraint/index.html +++ b/dev/moi/tutorials/bridging_constraint/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Implementing a constraint bridge

This guide outlines the basic steps to create a new bridge from a constraint expressed in the formalism Function-in-Set.

Preliminaries

First, decide on the set you want to bridge. Then, study its properties: the most important one is whether the set is scalar or vector, which impacts the dimensionality of the functions that can be used with the set.

  • A scalar function only has one dimension. MOI defines three types of scalar functions: a variable (VariableIndex), an affine function (ScalarAffineFunction), or a quadratic function (ScalarQuadraticFunction).
  • A vector function has several dimensions (at least one). MOI defines three types of vector functions: several variables (VectorOfVariables), an affine function (VectorAffineFunction), or a quadratic function (VectorQuadraticFunction). The main difference with scalar functions is that the order of dimensions can be very important: for instance, in an indicator constraint (Indicator), the first dimension indicates whether the constraint about the second dimension is active.

To explain how to implement a bridge, we present the example of Bridges.Constraint.FlipSignBridge. This bridge maps <= (LessThan) constraints to >= (GreaterThan) constraints. This corresponds to reversing the sign of the inequality. We focus on scalar affine functions (we disregard the cases of a single variable or of quadratic functions). This example is a simplified version of the code included in MOI.

Four mandatory parts in a constraint bridge

The first part of a constraint bridge is a new concrete subtype of Bridges.Constraint.AbstractBridge. This type must have fields to store all the new variables and constraints that the bridge will add. Typically, these types are parametrized by the type of the coefficients in the model.

Then, three sets of functions must be defined:

  1. Bridges.Constraint.bridge_constraint: this function implements the bridge and creates the required variables and constraints.
  2. supports_constraint: these functions must return true when the combination of function and set is supported by the bridge. By default, the base implementation always returns false and the bridge does not have to provide this implementation.
  3. Bridges.added_constrained_variable_types and Bridges.added_constraint_types: these functions return the types of variables and constraints that this bridge adds. They are used to compute the set of other bridges that are required to use the one you are defining, if need be.

More functions can be implemented, for instance to retrieve properties from the bridge or deleting a bridged constraint.

1. Structure for the bridge

A typical struct behind a bridge depends on the type of the coefficients that are used for the model (typically Float64, but coefficients might also be integers or complex numbers).

This structure must hold a reference to all the variables and the constraints that are created as part of the bridge.

The type of this structure is used throughout MOI as an identifier for the bridge. It is passed as argument to most functions related to bridges.

The best practice is to have the name of this type end with Bridge.

In our example, the bridge maps any ScalarAffineFunction{T}-in-LessThan{T} constraint to a single ScalarAffineFunction{T}-in-GreaterThan{T} constraint. The affine function has coefficients of type T. The bridge is parametrized with T, so that the constraint that the bridge creates also has coefficients of type T.

struct SignBridge{T<:Number} <: Bridges.Constraint.AbstractBridge
+

Implementing a constraint bridge

This guide outlines the basic steps to create a new bridge from a constraint expressed in the formalism Function-in-Set.

Preliminaries

First, decide on the set you want to bridge. Then, study its properties: the most important one is whether the set is scalar or vector, which impacts the dimensionality of the functions that can be used with the set.

  • A scalar function only has one dimension. MOI defines three types of scalar functions: a variable (VariableIndex), an affine function (ScalarAffineFunction), or a quadratic function (ScalarQuadraticFunction).
  • A vector function has several dimensions (at least one). MOI defines three types of vector functions: several variables (VectorOfVariables), an affine function (VectorAffineFunction), or a quadratic function (VectorQuadraticFunction). The main difference with scalar functions is that the order of dimensions can be very important: for instance, in an indicator constraint (Indicator), the first dimension indicates whether the constraint about the second dimension is active.

To explain how to implement a bridge, we present the example of Bridges.Constraint.FlipSignBridge. This bridge maps <= (LessThan) constraints to >= (GreaterThan) constraints. This corresponds to reversing the sign of the inequality. We focus on scalar affine functions (we disregard the cases of a single variable or of quadratic functions). This example is a simplified version of the code included in MOI.

Four mandatory parts in a constraint bridge

The first part of a constraint bridge is a new concrete subtype of Bridges.Constraint.AbstractBridge. This type must have fields to store all the new variables and constraints that the bridge will add. Typically, these types are parametrized by the type of the coefficients in the model.

Then, three sets of functions must be defined:

  1. Bridges.Constraint.bridge_constraint: this function implements the bridge and creates the required variables and constraints.
  2. supports_constraint: these functions must return true when the combination of function and set is supported by the bridge. By default, the base implementation always returns false and the bridge does not have to provide this implementation.
  3. Bridges.added_constrained_variable_types and Bridges.added_constraint_types: these functions return the types of variables and constraints that this bridge adds. They are used to compute the set of other bridges that are required to use the one you are defining, if need be.

More functions can be implemented, for instance to retrieve properties from the bridge or deleting a bridged constraint.

1. Structure for the bridge

A typical struct behind a bridge depends on the type of the coefficients that are used for the model (typically Float64, but coefficients might also be integers or complex numbers).

This structure must hold a reference to all the variables and the constraints that are created as part of the bridge.

The type of this structure is used throughout MOI as an identifier for the bridge. It is passed as argument to most functions related to bridges.

The best practice is to have the name of this type end with Bridge.

In our example, the bridge maps any ScalarAffineFunction{T}-in-LessThan{T} constraint to a single ScalarAffineFunction{T}-in-GreaterThan{T} constraint. The affine function has coefficients of type T. The bridge is parametrized with T, so that the constraint that the bridge creates also has coefficients of type T.

struct SignBridge{T<:Number} <: Bridges.Constraint.AbstractBridge
     constraint::ConstraintIndex{ScalarAffineFunction{T}, GreaterThan{T}}
 end

2. Bridge creation

The function Bridges.Constraint.bridge_constraint is called whenever the bridge is instantiated for a specific model, with the given function and set. The arguments to bridge_constraint are similar to add_constraint, with the exception of the first argument: it is the Type of the struct defined in the first step (for our example, Type{SignBridge{T}}).

bridge_constraint returns an instance of the struct defined in the first step. the first step.

In our example, the bridge constraint could be defined as:

function Bridges.Constraint.bridge_constraint(
     ::Type{SignBridge{T}}, # Bridge to use.
@@ -103,4 +103,4 @@
 end

Bridge deletion

When a bridge is deleted, the constraints it added must be deleted too.

function delete(model::ModelLike, bridge::SignBridge)
     delete(model, bridge.constraint)
     return
-end
+end
diff --git a/dev/moi/tutorials/example/index.html b/dev/moi/tutorials/example/index.html index 6bca271bea8..84821bbc589 100644 --- a/dev/moi/tutorials/example/index.html +++ b/dev/moi/tutorials/example/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Solving a problem using MathOptInterface

In this tutorial we demonstrate how to use MathOptInterface to solve the binary-constrained knapsack problem:

\[\begin{aligned} +

Solving a problem using MathOptInterface

In this tutorial we demonstrate how to use MathOptInterface to solve the binary-constrained knapsack problem:

\[\begin{aligned} \max \; & c^\top x \\ s.t. \; & w^\top x \le C \\ & x_i \in \{0,1\},\quad \forall i=1,\ldots,n @@ -46,4 +46,4 @@ 3-element Vector{Float64}: 1.0 1.0 - 1.0

+ 1.0
diff --git a/dev/moi/tutorials/implementing/index.html b/dev/moi/tutorials/implementing/index.html index 18a273185ad..39398299cb1 100644 --- a/dev/moi/tutorials/implementing/index.html +++ b/dev/moi/tutorials/implementing/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Implementing a solver interface

This guide outlines the basic steps to implement an interface to MathOptInterface for a new solver.

Danger

Implementing an interface to MathOptInterface for a new solver is a lot of work. Before starting, we recommend that you join the Developer chatroom and explain a little bit about the solver you are wrapping. If you have questions that are not answered by this guide, please ask them in the Developer chatroom so we can improve this guide.

A note on the API

The API of MathOptInterface is large and varied. In order to support the diversity of solvers and use-cases, we make heavy use of duck-typing. That is, solvers are not expected to implement the full API, nor is there a well-defined minimal subset of what must be implemented. Instead, you should implement the API as necessary to make the solver function as you require.

The main reason for using duck-typing is that solvers work in different ways and target different use-cases.

For example:

  • Some solvers support incremental problem construction, support modification after a solve, and have native support for things like variable names.
  • Other solvers are "one-shot" solvers that require all of the problem data to construct and solve the problem in a single function call. They do not support modification or things like variable names.
  • Other "solvers" are not solvers at all, but things like file readers. These may only support functions like read_from_file, and may not even support the ability to add variables or constraints directly.
  • Finally, some "solvers" are layers which take a problem as input, transform it according to some rules, and pass the transformed problem to an inner solver.

Preliminaries

Before starting on your wrapper, you should do some background research and make the solver accessible via Julia.

Decide if MathOptInterface is right for you

The first step in writing a wrapper is to decide whether implementing an interface is the right thing to do.

MathOptInterface is an abstraction layer for unifying constrained mathematical optimization solvers. If your solver doesn't fit in the category, for example, it implements a derivative-free algorithm for unconstrained objective functions, MathOptInterface may not be the right tool for the job.

Tip

If you're not sure whether you should write an interface, ask in the Developer chatroom.

Find a similar solver already wrapped

The next step is to find (if possible) a similar solver that is already wrapped. Although not strictly necessary, this will be a good place to look for inspiration when implementing your wrapper.

The JuMP documentation has a good list of solvers, along with the problem classes they support.

Tip

If you're not sure which solver is most similar, ask in the Developer chatroom.

Create a low-level interface

Before writing a MathOptInterface wrapper, you first need to be able to call the solver from Julia.

Wrapping solvers written in Julia

If your solver is written in Julia, there's nothing to do here. Go to the next section.

Wrapping solvers written in C

Julia is well suited to wrapping solvers written in C.

Info

This is not true for C++. If you have a solver written in C++, first write a C interface, then wrap the C interface.

Before writing a MathOptInterface wrapper, there are a few extra steps.

Create a JLL

If the C code is publicly available under an open source license, create a JLL package via Yggdrasil. The easiest way to do this is to copy an existing solver. Good examples to follow are the COIN-OR solvers.

Warning

Building the solver via Yggdrasil is non-trivial. Please ask the Developer chatroom for help.

If the code is commercial or not publicly available, the user will need to manually install the solver. See Gurobi.jl or CPLEX.jl for examples of how to structure this.

Use Clang.jl to wrap the C API

The next step is to use Clang.jl to automatically wrap the C API. The easiest way to do this is to follow an example. Good examples to follow are Cbc.jl and HiGHS.jl.

Sometimes, you will need to make manual modifications to the resulting files.

Solvers written in other languages

Ask the Developer chatroom for advice. You may be able to use one of the JuliaInterop packages to call out to the solver.

For example, SeDuMi.jl uses MATLAB.jl to call the SeDuMi solver written in MATLAB.

Structuring the package

Structure your wrapper as a Julia package. Consult the Julia documentation if you haven't done this before.

MOI solver interfaces may be in the same package as the solver itself (either the C wrapper if the solver is accessible through C, or the Julia code if the solver is written in Julia, for example), or in a separate package which depends on the solver package.

Note

The JuMP core contributors request that you do not use "JuMP" in the name of your package without prior consent.

Your package should have the following structure:

/.github
+

Implementing a solver interface

This guide outlines the basic steps to implement an interface to MathOptInterface for a new solver.

Danger

Implementing an interface to MathOptInterface for a new solver is a lot of work. Before starting, we recommend that you join the Developer chatroom and explain a little bit about the solver you are wrapping. If you have questions that are not answered by this guide, please ask them in the Developer chatroom so we can improve this guide.

A note on the API

The API of MathOptInterface is large and varied. In order to support the diversity of solvers and use-cases, we make heavy use of duck-typing. That is, solvers are not expected to implement the full API, nor is there a well-defined minimal subset of what must be implemented. Instead, you should implement the API as necessary to make the solver function as you require.

The main reason for using duck-typing is that solvers work in different ways and target different use-cases.

For example:

  • Some solvers support incremental problem construction, support modification after a solve, and have native support for things like variable names.
  • Other solvers are "one-shot" solvers that require all of the problem data to construct and solve the problem in a single function call. They do not support modification or things like variable names.
  • Other "solvers" are not solvers at all, but things like file readers. These may only support functions like read_from_file, and may not even support the ability to add variables or constraints directly.
  • Finally, some "solvers" are layers which take a problem as input, transform it according to some rules, and pass the transformed problem to an inner solver.

Preliminaries

Before starting on your wrapper, you should do some background research and make the solver accessible via Julia.

Decide if MathOptInterface is right for you

The first step in writing a wrapper is to decide whether implementing an interface is the right thing to do.

MathOptInterface is an abstraction layer for unifying constrained mathematical optimization solvers. If your solver doesn't fit in the category, for example, it implements a derivative-free algorithm for unconstrained objective functions, MathOptInterface may not be the right tool for the job.

Tip

If you're not sure whether you should write an interface, ask in the Developer chatroom.

Find a similar solver already wrapped

The next step is to find (if possible) a similar solver that is already wrapped. Although not strictly necessary, this will be a good place to look for inspiration when implementing your wrapper.

The JuMP documentation has a good list of solvers, along with the problem classes they support.

Tip

If you're not sure which solver is most similar, ask in the Developer chatroom.

Create a low-level interface

Before writing a MathOptInterface wrapper, you first need to be able to call the solver from Julia.

Wrapping solvers written in Julia

If your solver is written in Julia, there's nothing to do here. Go to the next section.

Wrapping solvers written in C

Julia is well suited to wrapping solvers written in C.

Info

This is not true for C++. If you have a solver written in C++, first write a C interface, then wrap the C interface.

Before writing a MathOptInterface wrapper, there are a few extra steps.

Create a JLL

If the C code is publicly available under an open source license, create a JLL package via Yggdrasil. The easiest way to do this is to copy an existing solver. Good examples to follow are the COIN-OR solvers.

Warning

Building the solver via Yggdrasil is non-trivial. Please ask the Developer chatroom for help.

If the code is commercial or not publicly available, the user will need to manually install the solver. See Gurobi.jl or CPLEX.jl for examples of how to structure this.

Use Clang.jl to wrap the C API

The next step is to use Clang.jl to automatically wrap the C API. The easiest way to do this is to follow an example. Good examples to follow are Cbc.jl and HiGHS.jl.

Sometimes, you will need to make manual modifications to the resulting files.

Solvers written in other languages

Ask the Developer chatroom for advice. You may be able to use one of the JuliaInterop packages to call out to the solver.

For example, SeDuMi.jl uses MATLAB.jl to call the SeDuMi solver written in MATLAB.

Structuring the package

Structure your wrapper as a Julia package. Consult the Julia documentation if you haven't done this before.

MOI solver interfaces may be in the same package as the solver itself (either the C wrapper if the solver is accessible through C, or the Julia code if the solver is written in Julia, for example), or in a separate package which depends on the solver package.

Note

The JuMP core contributors request that you do not use "JuMP" in the name of your package without prior consent.

Your package should have the following structure:

/.github
     /workflows
         ci.yml
         format_check.yml
@@ -115,4 +115,4 @@
     n = # Code to get NumberOfObjectives
     return n
 end

Then, the user can write:

model = Gurobi.Optimizer()
-MOI.set(model, Gurobi.NumberofObjectives(), 3)
+MOI.set(model, Gurobi.NumberofObjectives(), 3)
diff --git a/dev/moi/tutorials/latency/index.html b/dev/moi/tutorials/latency/index.html index b993d00524c..d0b0c5644d5 100644 --- a/dev/moi/tutorials/latency/index.html +++ b/dev/moi/tutorials/latency/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Latency

MathOptInterface suffers the "time-to-first-solve" problem of start-up latency.

This hurts both the user- and developer-experience of MathOptInterface. In the first case, because simple models have a multi-second delay before solving, and in the latter, because our tests take so long to run.

This page contains some advice on profiling and fixing latency-related problems in the MathOptInterface.jl repository.

Background

Before reading this part of the documentation, you should familiarize yourself with the reasons for latency in Julia and how to fix them.

Causes

There are three main causes of latency in MathOptInterface:

  1. A large number of types
  2. Lack of method ownership
  3. Type-instability in the bridge layer

A large number of types

Julia is very good at specializing method calls based on the input type. Each specialization has a compilation cost, but the benefit of faster run-time performance.

The best-case scenario is for a method to be called a large number of times with a single set of argument types. The worst-case scenario is for a method to be called a single time for a large set of argument types.

Because of MathOptInterface's function-in-set formulation, we fall into the worst-case situation.

This is a fundamental limitation of Julia, so there isn't much we can do about it. However, if we can precompile MathOptInterface, much of the cost can be shifted from start-up latency to the time it takes to precompile a package on installation.

However, there are two things which make MathOptInterface hard to precompile.

Lack of method ownership

Lack of method ownership happens when a call is made using a mix of structs and methods from different modules. Because of this, no single module "owns" the method that is being dispatched, and so it cannot be precompiled.

Tip

This is a slightly simplified explanation. Read the precompilation tutorial for a more in-depth discussion on back-edges.

Unfortunately, the design of MOI means that this is a frequent occurrence: we have a bunch of types in MOI.Utilities that wrap types defined in external packages (for example, the Optimizers), which implement methods of functions defined in MOI (for example, add_variable, add_constraint).

Here's a simple example of method-ownership in practice:

module MyMOI
+

Latency

MathOptInterface suffers the "time-to-first-solve" problem of start-up latency.

This hurts both the user- and developer-experience of MathOptInterface. In the first case, because simple models have a multi-second delay before solving, and in the latter, because our tests take so long to run.

This page contains some advice on profiling and fixing latency-related problems in the MathOptInterface.jl repository.

Background

Before reading this part of the documentation, you should familiarize yourself with the reasons for latency in Julia and how to fix them.

Causes

There are three main causes of latency in MathOptInterface:

  1. A large number of types
  2. Lack of method ownership
  3. Type-instability in the bridge layer

A large number of types

Julia is very good at specializing method calls based on the input type. Each specialization has a compilation cost, but the benefit of faster run-time performance.

The best-case scenario is for a method to be called a large number of times with a single set of argument types. The worst-case scenario is for a method to be called a single time for a large set of argument types.

Because of MathOptInterface's function-in-set formulation, we fall into the worst-case situation.

This is a fundamental limitation of Julia, so there isn't much we can do about it. However, if we can precompile MathOptInterface, much of the cost can be shifted from start-up latency to the time it takes to precompile a package on installation.

However, there are two things which make MathOptInterface hard to precompile.

Lack of method ownership

Lack of method ownership happens when a call is made using a mix of structs and methods from different modules. Because of this, no single module "owns" the method that is being dispatched, and so it cannot be precompiled.

Tip

This is a slightly simplified explanation. Read the precompilation tutorial for a more in-depth discussion on back-edges.

Unfortunately, the design of MOI means that this is a frequent occurrence: we have a bunch of types in MOI.Utilities that wrap types defined in external packages (for example, the Optimizers), which implement methods of functions defined in MOI (for example, add_variable, add_constraint).

Here's a simple example of method-ownership in practice:

module MyMOI
 struct Wrapper{T}
     inner::T
 end
@@ -130,4 +130,4 @@
 end

You can create a flame-graph via

using SnoopCompile
 tinf = @snoopi_deep example_diet(GLPK.Optimizer, true)
 using ProfileView
-ProfileView.view(flamegraph(tinf))

Here's how things looked in mid-August 2021: flamegraph

There are a few opportunities for improvement (non-red flames, particularly on the right). But the main problem is a large red (non-precompilable due to method ownership) flame.

+ProfileView.view(flamegraph(tinf))

Here's how things looked in mid-August 2021: flamegraph

There are a few opportunities for improvement (non-red flames, particularly on the right). But the main problem is a large red (non-precompilable due to method ownership) flame.

diff --git a/dev/moi/tutorials/manipulating_expressions/index.html b/dev/moi/tutorials/manipulating_expressions/index.html index e699c941a75..479b63d4915 100644 --- a/dev/moi/tutorials/manipulating_expressions/index.html +++ b/dev/moi/tutorials/manipulating_expressions/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Manipulating expressions

This guide highlights a syntactically appealing way to build expressions at the MOI level, but also to look at their contents. It may be especially useful when writing models or bridge code.

Creating functions

This section details the ways to create functions with MathOptInterface.

Creating scalar affine functions

The simplest scalar function is simply a variable:

julia> x = MOI.add_variable(model) # Create the variable x
+

Manipulating expressions

This guide highlights a syntactically appealing way to build expressions at the MOI level, but also to look at their contents. It may be especially useful when writing models or bridge code.

Creating functions

This section details the ways to create functions with MathOptInterface.

Creating scalar affine functions

The simplest scalar function is simply a variable:

julia> x = MOI.add_variable(model) # Create the variable x
 MOI.VariableIndex(1)

This type of function is extremely simple; to express more complex functions, other types must be used. For instance, a ScalarAffineFunction is a sum of linear terms (a factor times a variable) and a constant. Such an object can be built using the standard constructor:

julia> f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1, x)], 2) # x + 2
 (2) + (1) MOI.VariableIndex(1)

However, you can also use operators to build the same scalar function:

julia> f = x + 2
 (2) + (1) MOI.VariableIndex(1)

Creating scalar quadratic functions

Scalar quadratic functions are stored in ScalarQuadraticFunction objects, in a way that is highly similar to scalar affine functions. You can obtain a quadratic function as a product of affine functions:

julia> 1 * x * x
@@ -23,4 +23,4 @@
 2-element Vector{MathOptInterface.ScalarAffineFunction{Int64}}:
  (2) + (1) MOI.VariableIndex(1)
  (4) + (2) MOI.VariableIndex(1)
Note

Utilities.eachscalar returns an iterator on the dimensions, which serves the same purpose as Utilities.scalarize.

output_dimension returns the number of dimensions of the output of a function:

julia> MOI.output_dimension(g)
-2
+2
diff --git a/dev/moi/tutorials/mathprogbase/index.html b/dev/moi/tutorials/mathprogbase/index.html index 094789c4606..83a542c2c70 100644 --- a/dev/moi/tutorials/mathprogbase/index.html +++ b/dev/moi/tutorials/mathprogbase/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Transitioning from MathProgBase

MathOptInterface is a replacement for MathProgBase.jl. However, it is not a direct replacement.

Transitioning a solver interface

MathOptInterface is more extensive than MathProgBase which may make its implementation seem daunting at first. There are however numerous utilities in MathOptInterface that the simplify implementation process.

For more information, read Implementing a solver interface.

Transitioning the high-level functions

MathOptInterface doesn't provide replacements for the high-level interfaces in MathProgBase. We recommend you use JuMP as a modeling interface instead.

Tip

If you haven't used JuMP before, start with the tutorial Getting started with JuMP

linprog

Here is one way of transitioning from linprog:

using JuMP
+

Transitioning from MathProgBase

MathOptInterface is a replacement for MathProgBase.jl. However, it is not a direct replacement.

Transitioning a solver interface

MathOptInterface is more extensive than MathProgBase which may make its implementation seem daunting at first. There are however numerous utilities in MathOptInterface that the simplify implementation process.

For more information, read Implementing a solver interface.

Transitioning the high-level functions

MathOptInterface doesn't provide replacements for the high-level interfaces in MathProgBase. We recommend you use JuMP as a modeling interface instead.

Tip

If you haven't used JuMP before, start with the tutorial Getting started with JuMP

linprog

Here is one way of transitioning from linprog:

using JuMP
 
 function linprog(c, A, sense, b, l, u, solver)
     N = length(c)
@@ -55,4 +55,4 @@
         objval = objective_value(model),
         sol = value.(x)
     )
-end
+end
diff --git a/dev/objects.inv b/dev/objects.inv index 5c02cd06764243666a041804379b63bbcef02470..16706f7b9395b36e5697519cd908fd8252153c4c 100644 GIT binary patch delta 50366 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 z
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 DY-UF1 delta 50250 zcmV({K+?Z~ngi~b1CV-u+j8SZwl;W=r^pVsBU}-U5@k_ROivQRyvZUQb{qhIoCw7kTa|F)O2S(3zy&-tY-*7)5?!BGMo33|LrkgTO zR&+|hgkmapy|s#eF3)|!I6}t}F|O-P&y!7p7g{fJp?}w#uITdIG>pTW7UODedY;~I zA0J!ammGdTPQ^cKv~Ti7S|qDkTDDWK#vhP7B@4f0wOyt~HcJ*HE6Z(K*8Zk4dtAlq zWV1<&RT)3zMZ8Fg$Fzu-`8-{;yqQKd@C;xG5km+aLf8<0!iLn`c;S@=?2!MYc+lqQ%PY80cNl`PeV3WL+k+ zFSQEAAbPuhPbrZi{ArT(YqDG~(yH=#mTqbl!vLlfhjN8gMYCkJN{iQ8U3?5vCj`72 zACeh8@*0=3r*ytuq_wK;!R#9RD3L0>&w);_O;&pa9KqD$Kf_tRq#t0mc_j~v{Kfw} zaC9t3$E$Snk{9)_(<8$!FBEjU4ft+xW#7;x?u%!CDR7UamxaXxmPmG>s(qcMv-Bk^ z)0iEoRc{YIAd@w{@2?sCPv*yuqg5Y5ymH4M) zw!#If_9|@50r`agpr_ax4L?dOY*o#VY5rIw>!)lM&lcN~F7w{KvQ7eaYH^reSe>X| zk!%nFVQ+!`J1;g3uYi3O`TZX$ofOY$+-ha? z2_2A2{C?yaxoS3Fm@gyskIpAV9gPhB!M|U1eKDYV{c=0cziex-#)eSc_+Q5>5C7bz z>8jyv^Fj1Qhri&z91A`D8tDt8J6KF#6rFE>%VpDab&DL36M39y$6b5NVsW1|En0FE zRV@Bl)wNht!yNbXXZY^x6q-Znqt)b+RkC<3vy$WwBq4mY;yFCnRQKsWwwsz+hoyn>)JSY%**u_7uF4IFe7%@5y<67#j1T@l#rsS>js= z8icGz@iRZ{yy_|~!L5`AeZ%#v;jq_#zybQxHrX=!%h(#+7o=-f@e1a9+n-nw(7%=1 z-$sotI@y-=g(QXdTl5Y;AZKj0eqf&D4Yhb-xmYw^%p9#C6S|`-q zEuXfV4P9Oey7z6UJ3)7+KT_^PG^|Sv^4d+>w+0@4LZ+aAOql}06%eIByK5?#&04I< z)p6eSm`(>J}pza@>VW?iLs0LIazFddsTJZ0l6vgje`dTKaRX4#WKVp)rZt- zLv#+6n_-zQGhCyyO{$w#u3eI8TI7#eNq;Y$xsL^`eDzP#F2b-YOadX1HTSL69c8-y^j_{`SKX+l3rI*&{GLvAYWucnCZ7Ynpl=z+gl z{Az3b0l8%dh*03z{WbA*Qczcl-eb9Jyp%SUE_mt>UGsXq;ARIMpTAHGvwWpip3ge; zkEd6FKgpE+>AMEsYGWpgQH$maRfP`7HQ%%G7=}N5mwZX@;R|nnaUDJq9LwSvch2-4 zRsip>*}UWsJAX`Z5DH(sBJu`d1NiE^ zbv(m-AsDjSF7N52FSlzj=!F7hYFAY#vzT1TVZuO^3KnaZ=wj^>B0pTDkIC%yU68D^ z13PIfjvcV1ulV!*iSrdXPBTI6KmZTxvBeZeWgexM<3pR-&y zd3r)W(yNQ#=q8*NPI-O60r_LQT!-||jKlB$SSW=bC%4yEPEB}5Q-OaQvL`neXa8}^ z;u%dA|2Ac(r#EgFROc%SKnNsF|@}nQur50;L>eP3Wr{+zb+BbRX zc70vvbv5d!q3!JCdg@dICp3BZ(-8dW;^yB@K{%la!k?z#mKutgTNF>}!g#sx$p_oQ>HXMV2j@keA0IV zQ}}LR%BH8=OZRHSPU+Hkz!3irTKP_Kc1jax2h6SE`sU8PH_#Jw1E>ER-fXFcBHx#nr`>+Z1?z z)cozIrx)41``6kdRe=;pY1(AYCYlk)rEWaW~ZnQ_FwiNbH|-{E)ORT$j$Wn_9D5* zzsyH5x%-(tZTG{Frw_>N>B|e<{na6V(}0-#;;}sFi32iE3UG|`CH`$l-qFYGwsr6f zl`V(!CHun=yvV`PPMxCs+yVKL&!}skhy#X#$ztu3XQvLp@mYibu;WJz`G0L!+1m5u z_&HqzKV&}tBLC{M+4#8w>U$Ph{#52$x_a}2=4UnaJbO5CK=Sg>HU883k~~X)J)EFI zUmx;fE>c)<%vyt{m+lFNXDae=(6VpoTe(l&-=H{IQNxd0Th_Vz*TabeQqD3oqTnx( z(_BDbipn#@=i;1Z4-eO#wUM9GZDw}F+O&&gnL?_Ho}m{>i-%<9o|x{T#-{EXU|voD z+%7PR;k)ljbGp`fG=OK`JM8b^MU|X1B}hhv}c&q)6Snr9MF4a<#+eB9)bY zAY|`3y>Wws8ipQ_r#Us6=F!MAz_jaEEXU=0z}oo(lJP%au4*St-#1%;)9!t++Ijjo z^5oBLwtUo&S{9IJ;eiwM)0^in_)qi2E|PNTu`lt|0a@dJ*=xmrTA$s2DWt>TpUL7B zaQf~q&l+_=isT{r^Dp~2=w9a8L1vfOz(Mnag(F&QYMIk_SMhkggCLkJ{*9_sIGd*} zZ8envEc6L8E|JjZZ3%y0CTL^G&(*p>Ch!;5Z1s<#KV6rh51DQ9ndb^idIJz$zfa1V z-=U9kBhTpo_!>Ua0oD~7?u%>=wGvv6$$ufo;L0!3^x*L7Pomo`!t#@k4Ji#NMNdy$PFkWjL7>4d)08j8{H!~G-UH?YoH5#nv~f+1ALPb z4k`n}|EQBc4mS)(G+RH!nZ-NYqbvAB2UdH(crKp;>zL}E13a7InDaFd5JZXrc{ z2oI`3$rF$#o1CF%1tj#ZDg)C6vefk?}p`5sf?76<+#BMz((Rt z9zSIEFEX$8E1h{%e;|zB58g-N57TtLNdZk3_K)B*>-VkCO#8%4QTnCn!t7(~_u*sX z0|^c!>KcSzgWxp+w#mk>`Uc0V@RWhU>SonJ|4u*ji2mRI`r&D_S(hIU4p{o>{VZP| zs2sT!e0u-KLTm@+!6tb;;9B144~RXV$gvEWd%}0$AAaQWf8QUT(#M2%^8H})eg6~v zKXpI!4{=BIpN@N?N5x&yf71J+|0^{2kIgqAUO>cGI~b%tdiLa_cY*YcFy2FFw=8b< z%$Uo6Uo`CtYFhQ)k6~K<3xW;BYuLx7`>=UVF**8+q$FRx5A_L!qlnN>`nZT6z6%i8 zHV=RQQ7u&ef9r=I=?d`9yZCBx*YCJEeQ)0ndrAd+d-M=h1b4xP5$z%YPqBEO52j=A z@%*lS=ji>Qesc1tb!9?QK{_9=XPX?}cXW)8c4+;=>QpqY++{-Y`|wOcP{!t4aUR%tMlCf9f6fG5T7bqxb!zZ(l8#7W#H3 z>mplli=}VB8_!a~gx_MR;F{TM61T?J34BR>1Y!5hts;8g0mpZOy-~L`@YQy_m(_Os zPOTe<&b_E^tsTGFT07^$^ElnihOTJZ|;hpfBaIaWW*y1bc@8v7$ z8#YNa>THzs-|R!_SB#QqRJBU_x>Z8&pPMBYf7B(k-*21mAPj!tMdKlGHO#{E6@C}h z+2YsMl6Z|?OV-o5bqx684<`xgBl!7IeF587L+VKu`7`>GwH~Ku ze{W@4h^~b`A$UvRdLqs&guqXOr-LHsUZM!ZiUN)G<2Ho?n7VK8HcjRseTyMFNZ^w5 z%K0`fq#i~AMd)atBJj<#JhL zUca`^vP$X6`E@~OU{!@-e5GMoDQ)$o z6Dnn~xR0Sv0u0YoGw!eK3S^!Wb_G(sf|hpx+q(bl?+}$p|GhuN_4lZ)Ro#D^*T)p= z-aEW9T!oLgJ>AFE7e7vV(*$oCCw4U4M^po}$fq*$TAa>F4YF@DsZq23e^^GgSvyo~ z)=1d3P`(si(AC1WXI)iK;2P4u2pbVKK@L$5%90J{|-Ni<9&FW$Ck5s=*`19zl!6xay5?~p5|dC*=P8fha%l~n$Nc2 zjiiN4Imgu`o&Gv81=lV|e>kPmgAV`RkQ@wAF4kHn5><6V*s$60in zCl>fcX@Lj^U7q|)kEmJB;;j^KTtf6@hl&6FeWEH+U+N9>Jj zg4Pr}f_E-XljumA!CG{r(H`;!W|$F#(bFTR{Zkv2>1YErL}irW!|q47d9;uW+CCW6 zJ(6b6=gCDZaAy~_Krq{$c9vDifPt^b^C0)yR5fZOsVnu|@jQ@ZU? zk2(|)jK76XdH$spT)~q3z8^7JdYpRDL~0~(G+@j;q23XbrY(adz$&nN?^k39@J03YnaV`*(P&fL95RoQfDvPOQI@HZsetjQbwt$lK55)t|N=8UE$IqXY2DL@O^_#5_kB9CzM05|` zWsevee?(6U97b*z+x>}fxT_}Y-4FEeUL<{Cc%nTE1UPJ&RzyJ)0ywnamW4oL0V;T3 zPe~bTbi8#hisLKVAVW;E0j0X5Hm)~M^tZ^cve#5>X5;~!CMY8+My*+li*<}m1-@dQ zxptp$>|pDP5$2oT(IHGQEhF##;N2_WA)8^kf3#;AJcKExrS;{fsTpC1?~it~!KmQ7 z>Ll$1eWNP&XNQ3@JN_givljS`j;($J0DoiN;U1!NBQ#Lun%UVoe4`-UNZP9E)+)YX zUt7(kYj~PIB=n;SD~%qjA0H<=gTyiuGHjMWFSD4QT}^B4-k;NANxiFN)$$vgpnJvQ ze;lDz;a$mjXqA$X{zBJ^mnCXwQrzYTd)ej(xXnxRsejyYpC7#0K0lEAymoi?)-f=w zy8f|PPJX=KW{bI9Q16a)RfdL`mPU{PYtP}ISe(L$r=SsDAVmU6P}Nx95(Yrn5UMKs zx4nSA7K^09qSWOyC-wjjES&0hriEAPxl|^PEohRj3*ob;cuc6ilNw{@CsaNT9h)!&vvskZTDL3~`L`32~2m?IqXBwqm; zj&}l8Yw+fX!sK#+#IKw+rdQBde`lG1bRNnw8{gZkL|vq;(KJWAM))A0yo^@A2o~rVv<$@ag@FrMVR&2&SX5*nJS(^$-3iz0O1Y7TB!%Z*36}}Z zS74qkblkje9yN6jpsKkx9VQ=qTI9%g6RvZ52YZ>UGT$e36Vxr|snzl@f0P}Xgb!N# zJ6+wLz-F=f7<$@1!IVgsEMT?7bho?YKw z#uw+8=XZ4z8#s*G2Bk2(56J69_80xoi>F#_@%buTFX$T%f!IC4ube)Br+n^Ry_&l8 z;PSwvXQrcZ;@DL4AS`JC~wR1^bJ&gEDJ=58atyI#Qe7Ly-rDvOHWNbIk0B z2iRy>LNy+)j3_5Z=()QiE3X`lTjlMJ9C_tvY~}2Zth_SS9ejjSMl=Gh7jxW756!n`j;HEu^{-CJ}!1pLX@||=YoH2pAX942-dl;yVJq>HADPcjTcXp>VP zavDA9aAqeRKI#!D?mY-BbA1GQ36Ul(yeu0ZliwdQ0$L=K6CgnXcCwRJAT|NNlZ_x4 z1Hb#blc*q8fBrnZ2!ANjKerjsg-8oNWCS(z>^sjZ6%00@fL^~&1>6b!50TeVEhmV& zPN1!5bEnnsOwb6zcg^N(^y_^l=aKb#$DKXTj_!QD(Rt)}yJNTOd1Subu>*r_;XIvF z*A2p}z&yK6vB|~d_4F>jzPUTUoLtmxQ!Ih)iQ>Cfe_ocomIA>QU53)Rk+_n~SIrr$ z6-viK0GCTVWF)Ordvx{M2fBsckJ^J92BwMLkK9hyK)2ERk?^xbcvkyz9OYtGei+Dp z!bfOyi?MlTfYGOvt!CM}5|ek)1hHPZr~*Us+zeDI=#v3=AGRu2pxN11gX(2c1f_yg zeqWsHe-v`AA>%p?weAEhlA^6hQ&0I%;DaD1OV}W`nUtn?Kibv1ADJ-H9X$NeK0W+V z6-Dav@<#@URLsC^ z9Qy%faE$~s23iRv=V_$74%G8!t9dr_q)RP(NYlZ|7?}>jb?BCGzmd1ZX9@QiS;=K0 ze{(fmtl)k}x{`V;xUV=$*!{T8lYXDMlrjrM=gMVDCqr9+i?h1#lPDzLisb(;5CNfu zNG-ZGoD@a!+Un&`aAa`CVjv&FB`_Eyi!fa*=*`>rW`}C%=$MZLMq<=K-%VAE&`O1u}I#RoE2I?<^`SkPlBxZ~S0^}<8! zC2p;lV3AM#;5+?lFojxPPl=KK2f~E})PQ6UfJ>w{XF-pF5U^s*bv8z7(I$)6e=7CMj{cGD=Z}0a4#UqM>2SY+QE**T^kX6Z23ECo`+^)+FF9j~ zafkc6t7XPYCz)Q(r@~m08mspi>_n%UaHlVwa2AtlqHn>PS+TiiJH_1=)mPkjv+z^PJy2JDYTvgJ^NFrOoE>IDacvCK7|)*0>Y{b zG{G2H7X^Z{30(nOW&608e2h zWPupQ)z#gI>anx|tne1RT#ND4#+Gk+20NW=245@3RY__#o*rTE_c%+2sJ(B+P|@#6 zjto^FZ;?~<1%I?Ce~mwW7o0<^B;g_KF26$x8b9NAwsRlup+JOc(VCRhkY%__M5y>1 zm56|5vr9>ZjswPMX$)Bw%V}sXn_QcG9cK^JVQH+4kbX?vz|X6a`Woc}bISR5jg*x1 z$8YGDYx}=;v7w=W=n9BXAZc4qT9q~#5Y0m!RqO;6`@o%teiFb$Mh5u|6 zGEo9XY4R=*f1K0J)+y=+v}fh&!*G5fz%M`9!di89K40v&EO_2W*HquXHz&? zg~|32S#RgzMe`T`N50Mu#9NJu6tBGnP4PMCCT_Yy!UPuWJrWy1;}<_ASB zO?6)T!-Xs>9jktr>lA5jnpFwU+=3P)gq1RQ;TC9Qei(-X<;NwrM);ll@g?|c3#QcQU4+Zz zag}Yh^Y+1{O}?PE{c6U`7C{S9S{MOr_>g3aZP8xoJiXsOKI-hRM5r*xMH?HEc*#Xs z6A}p#XSVgI3&Ci|MkEacqpJCcx+lKQjVip0e|-(O&TRLQ0eLzyU^yKSPe&Fk#{+me zGGI9(si^508&N>FvF^Tuu@wj$dSbz2BOWMCYG{#O0K^AY?E>;Fn~WOpHMn0S+>CkG zMPZd;sE4Z}OcfETf)n}`R&dAd8m8$5BGIn3G9dY`1;D?yN+jB6$qZ_%bf7bWsz&9) zf6!e*aFVZIzb&5(8nj&UrKDz}3%w#>uiZ75noO+8U_e(pN3?SRFo{AfI9RH$p>%ra zMkUXLH!NvZhClpr^2<%>FnnC4U7a-3=a0JKfg6HE6I5r25G4GTn8Uu8#yrtT0VTS& zFL|?`JkiKROjLkABMFs|$sIGZziR|?f2cPZ+o5u~E2CFqUf*gm=4II(YBZ{d`k6ocLb)p;;mAZt`CD(mV2+)W7q?YF)Iae{=ky zv9-#+@xL3fmK}>5BfVMkvC{>tHM%;sYi=;Q>=w<(-jI>R{~ZhGQg1R0ZWXl@3Kzw< z3*Dl35H@9l>6dJchCDVlC^kIxnr?n8lJ&a2NQ#GB_t2xyGLQYN1ionN8};aOn8^;} zgT8H?a_H=M9~;|PU&(8lXE>kCfB3C-wz0jSx9rbxLroY#!r~=7*eLkpX>I(0N=0Dy*z+|@GGW+ihGUh4+29#|5C%z53KDRodtHJlU7ZjsDd_2nwWx!t07f1<;612Dg3 zhwIV1O4EQ&4X!(3^gA`U7J&UqR|1`FXjExO08i)!$mhc8Yq_b3JsGrhjIOR^61ZN& z0m4-T41XSJ(F1o;kpt~>$f^6JU=`OMX}-NIC8GO5S|7e?*&ojgp6uE(H!>-XJ?$kL zq9^-onj2M_jXSrkfS6hHf5)w8CX?cE>*~?%DA!W_l2Qmw=;`UrWG{GqP-Fo1C)>@F zoo=u8_znY=65?P}=pWMxZsefIl3e_fB~(#Lu|?bkha8Cu5TB)Y$) z*<-rGeS`rmOTp70GIIZpv3@PU-1-VK)XXJ_l3=J!DM6S-aFaY|f1A9fSrwjF#@t>! z@ezl5E?#Tkcus5O&HV6@2KZdOR=|EE#lR!%6mB`(ERy=(=-T?WGXV?ZUlD6GU);JB ztL>G6MG>&5JMtAvYI_G?*XZ7Xb3GII3@_Pe8)M6Z^3ay`!<`+&L-VOePFknhE#+{p zzTsi@xeG*r%@}2Df7-kg`}mz&vt)mRknu=9r^pP6oDA6}ZBGlSty1lE%4JH55FtWz z5zQR`{ka8AUz@e($m(O;?{!;&IuiD^UxAJsjcofpYaKc=`78T9u^K_e?%RKzsLvM{$1Z?bymu`^KJJxpx|f1|BXv>tHAaI?w$vtv4> zk1IzL-%xEfq`z0rtiD`2cIPoNNGqFJFFkb){cobD1dF%}IWH_5d+DJvP=MWWw*}+P znx_m*#9tV2y^ekDefIO@n{}vxD zUL5~ZVs(D!eBFB})gSA8fPN}*cb)#Y+sf9VPJe7O1Gb|pXLWk_Ntw;Qtzb#4I}AR{ z6tW$$BX*gQsr)H7DXrM9NJ}VsiW!Y(-P*^=UM{XreycZyg$j}c-O~S%$yCZ5q|EDfmn;({4Vvh9i3PrnrJ%)`V#D+j6r4yT!|%J z3%6Yn$qQI<3drnyeTh9BoM>oe=_ND{O$sYOq~G(K?-%I*C+$G|f}a z#nlm|PVSCK@+GS_M=d|bqxV|P=E(XEkKW6Qf6bBjQAJ931B9toIgzavgxOC&*L1|d z)1uZV0kSR(UV8bK?Eoh-D<_OnNn=?4t;moakty5cZB(I*)V0Z(Ci=a-IC@RR<#xGj zh-jZcw>7p>@oAYqu=)l!V|S(Z6v(p`i_ft9fz>%k=I+}RoLGQ*z-4aJa=Wniv5I~5 zf0)AZuzt#B@oce$8YvD3mCEp%TvtNg&5l;dwI zvd5=Q_=HVAG7qz=VRi^D5X-62Bhs56_@a)#Sq&mED7c(leXb{%GpMrbdA2>9$8a}7 zY%l}&(hjlD5LES`R=*kiW(^Vh3QFZff6ekCHE>xB0_YXfkvs9~BTP1nrlX!W(4eQi zBAFhYzAo?c_N;RC+yStfviK)KMz%NI}|L4Dc-JXVZftircl ztNUY}^h*@u+WEp`h5cdWxR5LSoi*9s$Gq<0yjEtJJHF$e*}XTL**!V4wY#f!e;PO1 zPs`ZRbW?0+n{6Sc0$*0^Y+#!NSW|&-pQ}Jqh5ws#F?cKHyUpG^brDY5P{=|?#;}3R zky<|}FRWa0Mhbbxq=B@NntX7lSJW_b;&O6#G5NTMf*eCPvpSe=-S9o$)h|3ozfho! zqRt3_<9)h@$I>;FH{|=82MPrhe~Hg|A_`=}0`j%#v(1KJPE?HebB<}gqvNZVWj0bv z(1QGRofPyDxx1H|BasHYV{k*G#R~u>P}B8|p5?~y^ujadd@Yd!A~3w!)+Qe$PaJ#& z)&7$Xu!Q7<;}U_QLg~uxq_|JC(yZ;OOditso^R0CQ9kIm-eZi74BE%X*u&pL4zh!t!%&x3!X^kYv3 ztvl4vBJXEkuDKka*NRKDuPu!dIj6CS_T{3;adSh~zKME*e{0&~__*);5q55(&fni; z#daBsRkJag&INGI5`R#~e{qp~Wo-}(KQp@SXVdXS8y}pnWTkt!Ex}{}hMYYA8cwh-M)*E2NqFdMox<(j;ciu+tjTf9>?88a#NS6TECP zHo3g>djKUgKE`C7STXGT%`uQ)SJmkB4-VHJQU_cKX^hXvW83yIyT zY@1a8QiYQB4u>+romZV|Xw2F;b?hNI7G0cbT1bvfGzfqJe`mb@dvGQqy+7cfV`WxH zXljSbEW1(Qf53_qMOufzL6yCAY)}>)wg)+lEy{vJH^ymf#9$A_4NwyRzMR=+@fts} zcFSlE)Ta8WS@pVve%>O@vZv^&R4nNaOCOU*?RKk$0NikXW!Ke23q<6qk)8~0ae>w` zZnt$q5oWVMW4xLs@fhAO={+@H*Ai&6V60V;__#`6f4G&2ZBmlZMSI%a{-kQTd5Qf{ z5*M4QZXgUfMPE&Ax7$D%N|wGIYOpZ?le>RrV^efvi*Ga$oGamod6hfv<+AdAKo26?yFV+iaMl--xU3g6&tr)P7!Um#gq67DKA!m>T+KlNB~9Jw3qP z0nxb+R=NjtY*i>ImK!rJIwy4`KpY+V&qh2P!Q_0@(~$si47I@XPWuaV;XQMdTnI_%YD9 zH(S3+E~ke)Z{WGCluzQOmV4S<|=wHCrsGPSBh}}s-!)d+v8Q#1Sm}}3@Ty;ll^&`7 zo|8a0L?7Y}NGig?BF9BAegf`n(Rzn!AWTDmJZ+p<8dg1QN0XyCFA8SE2AiDUS@g}B zBMjaM4$fm`?4Cw_%`IsSLJ5w@4YF**D+`%1Z#6a|0lXN{W3~xd`fQN#2m96IKSCg?87zN+%v72Ta9#f zPiJ3kX|MHF6>rq{rmTB9OKK%!y<@S?F`K9iMt!tH#(IyHI>%~$^84{+tQENXNQ7U{ z=xUTN>GC(vs1LC5`wI0uDnbnrYE&wmu2NpkD8oGZ#0N5xK+ckalxu$oX@MfF#}&8) zEy>+i>E%f`RUqYiNPt&n}I)#61PUwu(!nRs0F`lZGBruxNt*#+fhBOtU(`B&n_GFwDRrd?V${=Yn1SR}yvQFD#5#0_4AH4Y*YP5JN*90YrgBPsK{X%)sDf}6 z!R2 z9;tDgfD4)1-F>u6$zd#N3LEZ%ez04dsoycZ5L)qThB4&)1K}eOyCp`T!4cd{Ppbew zGiX=E2%Z4xjns55{&ceu!B4)@lDCT4#-y%^81|Sl0E^()*6=CX6x)!uVRnJcFm-T z;ChwP3{rm$jL6Sf2_HjQ`)0i)37`gvkqtG$Z;TI$!#l8mtu43?7yzhUK~-Tq_cula z#X%lu-lC>pnE;=zN(Rumy4n3?Gpg<%P^1)7F&EvSM&jVoNZo`2akd~+oZ62%|j^c{cgBLZ<`AjUdFB#z!H{%}+Qj#WVt zM>=3k!Xz}KZv?iL%&iSOU`$8MxKgqnoGCJ7$o$+;Rf8eA<=bBnRr0PK_Qv^wsQBBw zAW&>KQEUtEnH2XKb#1Vhn`phsjL{Tek+lYCB4lGJi{^wlOypsrR0gN4fESl@&TnU4 z#?60!r->1MIJkiHg^ik)+tA7N^b&U=G3@{QzyGiQGx+J^=HE3y5qg$=*7xaZPH!Qe zry2=;%+`{bpQKk?TAdm|`A2qw7$+EkFWW9~r?^icJs(QkMniDJh#X<^BU!{Of&`%% z1WT$b;3mSZKyuZKoP|1mrmg_qLdm#)JkNg$H%)|{(DA5{kB1iJQQeBZ%)ZjK7H}e6 zuq0TMcX8{h$bfUI9Pel!)t^TeQYz}$75wO}>OYShkg3S-4Sr-|r6SoOd_t#6I+@K< z=pM51eLfnU$~66R3nmox13q3%rZ_h)CO4Cle>cf0Ndl5MOPC~ehSF7dzs(kNMtFbm zO=b(#MT9PDzi5Wb4KyHT8S1L;N=6z-vz#-ftFjCGh>&ZH?s`aRXZD(iRrV{BwsU$Z+AD)iq)PhLJ$b^22;foH zwgmZe8q!}|6n^OpK#kp*ybM4+kx3T)HM=x)?Anj1fdQzeCy-UkPOG6~Uxa^PMYqml zUzY3AEz8<-6>{pHz}2oNfJ%Y#WPG(?vj6AXkUFIiS)Sf*Q8cf4fa}yi%jr z$3wm$JWI;ga58^}9%b|Jr$v5GO^EAeP>;x6V0t4YpoR!FgsCCAn&2||iv2k0j}M=- zB&610=UO7J10EouItbOl`Uro?7LiR&By_@azmWkhWiUuc{xLqt1-)-fCi%tVirjjr9D z{m}a+g1aZ5ypB)^b%cMyHvk(9r9?j)d|uBJPJ4_$@RJ9AA|p=+h`|TC2-YZp%M(LB zXvyTR>cFl&D@dy{FeQwQBjBpFHM6@z4~2SOO8bl@{QH>B5l&}m-gbZka7p#ab1v~^k{z*S0nPg33Q&W(;0+m zkVJ%97FfJMt%o~mxrF^TKv}MVa1E?3f!Ye7f%I8xl*2Z4oOW}R!|p|vcjuR9&5e*W zP|MDkmLqGSb#H8Spq9O2T8&Tt;u(*;(D(itHaC`V{2ayJPcQn)k7qG*$BlWEimZKhO z$V)vM{mWFwvk+g&I_T~a&XS54z!DXyY;AZmJw;gb;d6FA!GU_i7apz>Dcv28ae;N%d10F;r6l%T7KZTuA+NMi(V(UEucbvq$;@ zSu*tly%B#pGhu0xr!tY!07V0Gz>dq2r0X38IZA#!UohZ1`f?J9iw1 zm#35l08l`$zqfgruI`I`_N9q+QJGrXl0J1#jubzo*j$9u$OvVUbCHucGvJe{+QawE zz)Qg=WN{RT?PWcGiBV!@ND6$C+CMyHkdEAd+$vNFq>P?_zsEFLj44T02am55hy)G796^0otC ztVJvraceGId8O7=;?y{n++Z5tHJyS%AqmkL>_9ZW&t!^>2B|yp@r*|rW@sR2#_9Zj zPFbrYAb<~l>GFmzY7@?D$Wiy>e2Xh1FFcV~CcIFcUpY{%0pgqM^Q&4H>3q2^@@M!p zYgQ$jRA4i%^^zKGaI>OHgyScfCZcHyIQxbSTr^SR{BA(!2RlwVDrw-cdfiiaRK*@= z9cZ(GSUqnkz(5CN^+Xa65J;l=$2?s_#)r;2(e%520VQDc1_w>V)#F*-uT?AH4SBl@$PPHiqF#aX*%*L-jSNW`UfpT?IP;AG{?`->BTVP5 z1X^T&RdmE7;q6)g_06V)GEQwb0qX12c|2O(xAFvRhi!sAnW+U72^dA)9rcUPH_ccg zMfw%er?P&kC)VgjBgQn^bQ^cu0+9a?Kyl)0C#gIZ7)|JC!bW2a3N#DP9=EKW8pbUl zr3vZSrn1-F7>eeIxKWoR{F0cxRVA{BPHqQ(thQs8N8g5ewpZA`yW601*4m3~-_sV* zTxMZi~&L zFxj>u>!Nl*A|XYZJQ4B%gh~X!u}JBE(vm*ccE#|OX>mOm*;RUs9vDXTC?`fAIBhvM z5M`iv(FfiFQBI3K5cU=?>Zadww)R%n@v~ZKH$MU(o{eg!!!RqZzOXydR89p$0qZ4* z@D$!j)?nOd;OlTcEwf)@7h;WTR_G97p+g9T4&P88!Icp_O5kXv?5!5im6czA!UT#N zsmYA?EB*zzokTU$^GA-2JKVhFu;@Of^nY{u(14^IBbD?bgk6NNix7ShVq8RbWrn-r zJBPUb@vdaO&YhBn`^0w+<)SC<$88S{85Iq7N$Uw?=(hq~mrah@v7Pc_r~x7}puyl# zXw0#Cc@!f4c=^iGtw(Uj#A*Y7heD)1UAba88aec|6$`dniGENiLXU}9jZac{327)d;a2aivKxvExbylBy79hoH@1pKBd|YBMTed{LW$ zRtY1+Hrf+uY)a>QAcvB0!|k)yJ&cY`=<1)vp~1G{ae@y8*M@X|O+uqxXT?~q(7f2U zBcahg=fv1pqGf?^mC%T<(Y(fY3`P)r@!AY|$aq z+=T|5p|?}_PSr4q0mB&$#))X3*#%6bxHGsaq`^254K#z>oRN`ydsj2A$Zqwowdx~n=d#Q*BMFH}_GYZX?)eI(M7d5!!mhfJG9wc94rJSnPZiwar+SG zfW_rCS@-IWOiBvkI2LRCCm^Q*Ob1x@+%Gk*+L{;W?*w!~zwiQVe5Q+iZ+@--S^pje z48!5Yyj0n7nShReXMr&0(YLpdMI}0vb=-|b1=|qlA$hu+WWF(fjH=>T&18_kVFlChQq{&5JNzK9;m{NsG*?M z9j)TK(XNH3H>zm3MHQn}VjS|!*e)1NCTXBDy)_n0fm}v;?RE6NKQ_zF+HT?fv0ZCs z@8bQjS!5dT?2fAt-C2E z>zS$+kJ=)xv&rqnf8+L$tE=nN7PTv<=FOhFQ!_1pet#I?mIl8D;A6F~!`-v5-m?F5 zo2)i;Q=J1Up1KYziGKC8?!#heoyWgr2~U6LzGi*a*i3M+_PY1`-fLU4zUpfxZ^=WS zKG3|qLC?WUJ9N<#w9G_R(y29FKOIyB5KubBPe<5E>BhTF$*wxQ6AOq5dnny7U^t?u zd5|D~Tj3taL9>hGwVuq8&a8AbdzEl-O%-6~VKd~&SyaVZfb}ZgNvjrMJ*R7;wE*i? zd=lhV;v5{xS9d~zD|niU9D;wdGJeRu+U+UKZ)dwIc-4R1D438|UA>#Q*1YmGeM?}}QQAW%qgmIs#QQ{Q4{NB*+OJSZ z9(Kt+`)@Lsz^OumX}!od!rVs61))B;JiENU{crQ;KDoay(&x-YAgisJ<>qz4y^(8w zx^>g_i}|FS&2^F8BbTDrGr$=bGj}rv)I^c7kcQHx7+txxfUQ5VL`Ag5O|U-#z0G)s z@SV2+$7owFqj-xo_U@(M=raU@i?qr{XmzfHR3S4>!Wm?23va)#lj$i6X(B|3nCOpw zE%CSy{?XrsApCUl%Z-28g0t**e#(n~m!z13^|*tj$e8wk+&e5^so(gud2TX7JrE&G z#4y=*B#?>(fmBl?!CIqjk1SG=&LXvYgF;>yx`$3ppv7oP)azUw`bO=VP_x~XNZ7Yp ziKt;0^hBNLC9kLSmO(3wr!tW)d2OTsqunHh-Hg_2iiYMV-D^no`abI3t|?i6yFjb~ z?CR*gZWo7f+CL29Z&EMFw+%8}SERYee=O(*;VyJ)wf~%brCVshVpRXSxFE0jmb@fD zubGpa?M*2UdpA@7wF`R>B%)!|HRj!^2&hZUdtd+>MwNi~Kt#hvBHE2GX%$!bX2i7? zqEQJS&6wP|+YhIK(hd7gwO4z8ZTF+mKbanb9l~ZjP`cj$0c=(cn?1zyte{^R=7{R- z3>mQ&X;lEszBX^gmVgn$HqOu$a+OoR_9>e+rK{WU11fDYa}5=~MKaH@@vwl;hS1-G zzAS2fLN9Xep1V?OZ6V^uWdypGK<5v78ETh8r*iJP^Q;?UoDTN_ayn#x0U@2;wmo;& z;hVvn4pm^t}#)a(Affdv$l+V>opFl=8t-f17Z98oI?zac{SL;mw#gD zSwZ@dy+23~D$vX?R+U<@El=d%ax(d^TZicg(6_fv>$27-MwQLs87F!5$3HXY* z084<03lM$*0v8}~fq<3e9%^O6WA6kqKO7X(OL@oE>xBVY3GY~cykHT^`}hr10HzL% z1sb^O22{4wejSQNo}J;-lG1sVEK_D>P(u$Q3oQUA(+#{ef};PR-sAF~ZbdWkH})am zx`NXTV_j%Lep3)fs{+>j)ScZ_yxAS^{IXN zx?H9kJD}uintZ{3BJM4N@+{1Jq!ocgZDY(wMhQq{2bhnv;*Uu9*}&SeK{kdOU|NR~ z7p{+>K0yG(3UVqOFuP7jrIpjgXm!fb`>}j*ZW<_Gr}eS+>-eMB6?5ZYl*~Rt zyYd>imB2NE+f?Q;fic6$J+<2e(-pg$uQvL^-q1dCfJH@M2tA zi3k=X2+Dti4=i$lA3E=toPJGb+f9|Hv(g>eqZDqbUab_A;VyPJgp1*-!5b?pvEaRb z2bk2Zzl*WOj{%N|R?cw;fcTgJ5t*E~dQtG%91D2(`D&IIkd<+BeAJOh-P5l^LY}#n z3d0BMQ^9|a2RrU2s_C4d?xM$L3p9Qj1DC;{~he}Ff=_q ztpVJ?Sz$Fs@B4>)>9}~vd>5XkbOT=eJr@t(tm)#R@?XTg*-^MdoXb3UD&a1llpp;e zWLv-J9Lpn105*Ec{4qLDuWn5-?0fa9^}8T!sOU$_16G6&Rqf)>p3`qsNR8{)ICGSw+xNml`Ks>>5lglB7+T!>LL?F`U6@qBtpAc0t8~FR!#jQ~ z%!p?iICpqJO;lfLu(=FMiWT~Q;*0F-^eL%tba#ghL4EM(pR=ESo^lB69HPS#o#c*` z={y5K>X@t~3W@sl^EA9);!hIl;q5#gKXaA`3;86HKdQTjNi%1MujnCu9si&!u?O#*MfAc+t(rfL&A?q`gE7X+f)gL>Z_tNtPc3#qm#3%hO}==2O6LVOFoA$esm30PmRE?8e2rY2z2#$V$M8GWno#!4X2=~;$9 z6zQMajCvuVgs6s>$^7c#2G76qJYhEE;5(*-K8|`d@MQ2GL|%``fkeNa**|N?+Pfn} zS~YQE)%VZZW9{9ML|E-iwWZpZ;!e@7mG=oJS8v$D+d%e&DzTS;8<5Q%`HaR^|GnBJZZprY7maTU;&NX1Od*K3#CLI$k&L}eD}f!cHlFW~11)x)g0 z;07ZaA=q{F8A5$NZeM!rjbWkf(DNGL-2%*(N6&QCP#C}(ojM84n$zxHtwd-IPEJpz{?!f6ikhyLoWWu6 z+f%XuFsO)pcyXnzTqyQVY@Glgg=2sl6=9Ko2B&nQwIG9Yx8nm@7r`5^`Nb5D|4GRV z53l$Y!-F4x>BOIG@+dC7|}NPR7XM?w(+MT+8( z)$z5fLbMZZeTzAub%mhWA!^r7JU!$>(_j#8Qu2ltQTuGi(~~r4`dxW@MD-1jhNL|| zp{7=U$<~->KD^eW7vmv&%f<(+I&Ux73#m#2U)-LZem=Q7zrKo3&Tj9{Kb@aU?#^oM z2{0Ua&an^L!buc-vq1iXa<{>N14O$fW!O@~h~7MDwiKD9>?twhn_wME2j*bM>f~7zFm% zTa+h69vtKnjY%#)W3c4P-GMQ9k8b6mNtEkj3>GxG!j%N$KX#A|y5M8cXfKU0M}i5n4$)AQT2lUhm`X!N|+>_~Kf7BAlCfW@+aaC}QgJB>DZ_f9uWPYguEIy?Fv>h` zy1&;(kdJJ=2Aspc$4{Zy@W+XoRNTm^i8+MMOI z@hZ$sd!ny4T~RaOfi5UZ@M^H%HY_CF>p+_{N_UQrA=v|AV~DzHaLIsV;WO2-T=G8z zefVCou>1<-ncji8f*>eY%biGj&kQ#A7VJYtzFb?nd2P=FK+gd3A?y4GGVNzCDa|r4{$$Us8md( zoJ}oR_luc5C}DDkEnD0k@^VBjWtDOqYL%6Tq5|P_nX+}3t!VKd3tucsEqPRiEu~5Z zVC(6hTZGBh{V=dKcr(n}01oHPDS0LIu^yLkSF$=wp)E=zqvVv2(Bm?Hql%G2ea5uN zme@iYyL;9XcTRSnK-U)1&FG`yVLcy2<=y1+<6N3w|4 zSQRM^{FOU)JZr31C=IGbHDgtpG>|1Vzhg)GJ(RsgmK)QtOKHcJVeS3J$l=Y{ok}Cq zi;;y}JOrYLeZcNYG`qZO*h3EhfpwK=M!MoMzy&lZisZG0Z+c39t)g`DH7h455OAtE z-F+Xo4088-Hk@T_1-TiqoN}zkBFH@nu?aE{Il*JvyslkbV$SOP2|;Nde1Zpq(nc$f zNFkF49jGOEw@W4JYviGkFAaJsi9e%`W0@i`g}0fFi;xl}36qp@_M0r7r7u~TGHN9{ zg=?5#D`UA;1@)|d;o~;5@d2)yR~$@maPU#@0mH-nU_3suEu&p@zOE^ZegT1VRu_;_ zdxot&O&8fR1ArQsa^Gg9JFDjz7*}3~;AMgdi)VT{?D?y-!pKa@;H1A|X$oxY*=Xqd zQX5Q?`Q_uMG^uYT1SU4P z>*+nT4E5fL(J7P;j_CpBPNF=ahoBp1359%+U}u>Eq=x^hR@oo2)e73g>TN^cHT?Ls z_+Da>nX0`6T@xG^L2Q~7W6LuYQ)@Q6Gqa)TyWmrnEQxPc2wa_!tWvAr9^&R|Yx^;`;A0D@sTr4f+3)Uv zPS@!SdNgBSFKqM0A{xlg-bYVuyI!~Hqg6IJuP2{RCpGBFpKd-kVJA^T9dwfFfXNBt zYH*WqC5?ZfF=y~`a(jK{--GZpAL$6lb%PCt!7nm@*R?}K9Vu+YHCfVQxR0F2P;aQ- zwT5N*R_TtR-A}z@*lU~vePP#gf>Yc*{&jH?zUJEy2u|TM7X+tX>){)DQ_q00lJT}J zvN;g9x+j+`m_q@^)y4#Zi{vjo`rRJ0>SL`3h1$Fk$W;NPYm81!Wv6RDLc&J7D;Wb9 zp?t@G`1&^feD(4A^VR9uX;W0dxyF zM+dA{EPA`%ZXEu*^OY4ja!$oh;B~W=LMkRoF<~KJs+fEFP|*F6PT891x1=_eW{&nE zc+ymP3dg%*IgSy^!KhWnolzXe`vh?uOAH5pza3x0`o18184KXXN6E9?%^%U>Fr%H@ z*^aFE!JvCj+tFTo+KwE7gMp_s-0Cqh5cT0kMRR1hQ>X1!n12 zkyrB-3uybU5nT|1LX&!dRXO#zJ%J%bc0Altanz#A7rn;tcP z3c_RqQU2I(8#o`R+Q+^fHXlgLg$$bOz2A23A`tbo=H1;ZPolkc5QutK?`~fSXirfZ z%A%7?yB9;d9MJF2Z605%3O)8HB|`>p64bsoe8*?mp-fLbSMBcX2J!e%C4mQTMAT=j zM!=ua{pm7EGLQv9fAf8ZV!-$P$Xv01>59>S7pmcS80jSI$GfmRbOH%AvOEZ2kh&-D zGC9(i){iCA!%hTejLhD_Qg)Kiy)$FYs_6t`ZN;!dc@2J0CCV93gc#52uB1XD1`siT zH~KYT8w?>Jz5Xs}ifI+M!H@t_8-lxArmVo%ZmjKPVWy437Gef<-W?Zdh-=t?NFL9} zdq!U zHT4*9nnx=HL>Ih6G_Ntny}{a{1lSS%MO_^+ECSpM4kN!3wA;h#B7P-OZo=990-ppV~GIpL%FMKWmvgm7IZ$ z+3T^#9eQs_g)&BOC=9N0&u_F_i0M4w4NV2Rk&2t01{r|l`r)K5X4HlzN+tZM$GI-^ zY;HcwhO|Elr7;sRbN(KED)TP}n9rJ3Z@|(q4_^QXB?<6fk}@pP&9+#7+0=#Rvdz;k zvaADj5zwXh@To2$bOlo=q+lx_FrKYuHN*g7FT!zbeU;KgO6!%V0}am-4LTH~4h&FB zH1O1;4s_n|f!@@r(erE*103mO>O9HVI)&ZQ{cIlt9NDbuGKVR=myz~Zc<%B@`FvW9 zE9|DwelGQJ75eP~sf=iU$_O^5OS%2Q*xR#NOTZUHtA3RZX3bF3A*y$$+`KnEox{D0 z+oKl(972$1@ydHRwc45vS)&Ff=7akm64c8ZEkP6Z6{8BH{<=G}XqAd(E1gXp|TXMTxL1UCtAa&s z%XDt@d~=#^PHI|zJ}^_l87VOzW5ZkU_0#U{`m~Uw82f0eQcxL%cjmQuSun~$BW+a# zD&)B32HQ_fxDid3q?pG5*JZE;kRm7r6q^MrX;^Sls`YCHe%e5Ur&MriDpX+v_!^sf zc>{chR@-9cxO9v1b?oQW5al~`v@I51QDx6NG}{(4*9hZ(eE{?c=KxnNaWMuDv1Bk} zdPk5IWDh*_G-9lM#kO*A3QLAJHk1>oJopJb%WQTlZ2HS&-Nt4Bf)=gI_pviSEdJM0QJtV=G#$Ix-xKII-sbhWD=u$OM6#b&}QK61}kNlH9)%T@gV= z!Q}Gh0us*DU2sM&>>6%0UPdiWV58dw=7E9+#N+DhdfMe~)Od9_NU!?XK6Z1T6h)R6 zE!oqsZmPD_BYGdH&S?I`g~d6ccSWn@6I3@enM(M74LCj+3;_`zK*tU@VU=Z>Kn0%= ztGr5Ad^ln~fV~|R2B#SB=HV^YwcAnf;ca>>#4*yvI(V~EkRO}sB!K}^3<-nxZM(~O zgF?UM#TQwJ2tAfQ71ee!`@o~}3$aa3T}VZxl;vd?tRm>V$Y)>Djqkn`_JfU!xvUYV zYIg++8MRU-om~No$aRxYYaoARk(C=gSemeKDZLd1OBRb-3^?+-FY~jD2Zx(EJdc2& zliE&7pIziP+??Tj222Sq1jl-i%-{OeS__WN2w9~s>#-ghlZ{zr7ZaZ0;B*fA>uJLC z9GuQUk!(ne)6MnyRc+ldE7w2P$p51DO%qItzNktApwl}?!b9gN*ByT_r99=@x1(K? z`5!r5gPL(5Olg9c= zQNOZGmw55*b)?Bc6@2_Y$tcd8@zfYD+FSCT}R48)k4B0WtD zFMM}{NW47>O+LbYmvFC5N!a&Ad`)J;z6|PGK+Adnkv{G&`$_yQ!+OBNd_v5&s|OI@<9>g(B-#H=*HCPqmu;4n9%XH} zQcyya5@cz3$iBw&tfY@;llqu5n*jR2+~C$@?9C%1XxL?g9$67R-v???aLFvmFHoC+ zMhR<+BtZ`?aSkYt)(4Z9KnEmT@|9*=0UMDbh-ZLj>yk}?r+WfIuqbSD@=_#gyqgmQ ztC-}FJFb7kksZ?=?7|JX#}zqpMREu3fOurZa|a?Oep95pE6zL=)~;t+ozRDVb@5vP z;Wu2Ml_(LS)f(1WV)L4qZ#{Y+PDMHaEjXBjK1OCW18@ZR!0J+xb+(-O3ely~~aW$FX@c75Z zsv~{=CO*q=gn)YaENvj@?<{t^2RyuHBzJ|vzZnwVGL_o|trhq1C9hL<@BVJaVIdR9 zh$^d;dxHS3yaKDDD}&4H^Y^M1EcLMfjeh4BXAWe^YIr-~hnEh^f=bv(?9B({LVj>;cu0gR{dY<>KQ!s#>X43LDY7Ez=+r zJ9QGgL-4i&QK$eSq}qVlAuaqak{V;x3r2sO+x!O)jT=^P*>9pbBUs%tm(I z3zrbzp80){4y`@pB@l)qFG0j5f>Y5J7s9C974kAb9IUQLxwf^gR0wfYsgRd1!*_o( zRB%#1Y{GIFhdP$jMl*196@o}5kU@UtK7034@{xs{4DU!=j0Www@Q#diVqk2)Y=E{* z48#^}M(uV)LV=_#b&Ph3+U*eqh1&F5$H*VGi^L0yjHn%UWnLJ>oAt0hM;9VkIyF6# z18Hhnn+~5q^yPj>r=*UU$Qd_LL*LaGCjAQqsle%aa za}1@>5hOa2orxudn`iOZsY%k`iPWpDD|DBH_~8O0myIk*^@VB;G0ZA^S5u*y^7zV% z@wpFo59-A_k;H{ig1hCNx4wVb1r^U#=oC(;bbaHt^>C`gm!3@0q=QMg%)U}Xi!Vd< zOBP0&|5DgLg0h6m2A?u&J|-bu*fQARcn9-j0bQA2Lx`5H>r2{f?*kM<9EB+qeayK+ z!W9NLFh_Sp-b>QhI%YMvNtN`h@SxGttujAaxDq`5r43?kQ!GgrT>yVSL%8{dULIJk z=^012a{rWDE4dit@N-kgSP%1!>PZQLn{DmB$HK8t(o1binR95U`+@#)yt!57F|;ml zVvtd;Czx*1bqI`kk^m1#uf)5tVcD$-^SD}o(fJg^5CUv@asVU<)Bq8vJ>E;8_V`^Z z$doTkd;Df$+GD$OYFmF;mRzWsN{Br@3ms9xUj>`F0?HDk$h$!)UO{Z>n?m%KW9JvJpHCG^;h^({i@lw`s;_vN)CUYEDm8l;9|A7Pm^Vn z16bRN7M(z@NO^!baYFno>(bq99Kmr$4FF~>7J0tj%aqoQ3Cvr7W__N3qbS+Mah9~G zyzL1LyOiW}WMIt^a1(<#g`0Bbi+D2cux&BAWpx zHwMzKi|jFj>M4I@Hw6G@?&X2dSnatA43r5KL{|~02;I%}w8gz+u{B25W!#Ml8uxuY z{iO!#0%zsEEfSi0G<0>)9W!+yjHBXnp3Ybf7IQs5XSS|lXGOS2^{b)=FtBCfQ$o9< z(H7=kJKSl>&0rwL)HFzo`0C>33~HboyFdN=B z`2U;x*5<~M?8@)_74X^}cE>hrL{iV*jc`+ss@7Pq5vgv^%tkOE5|S`Q5gd>#mAv8q zzIpG>Cy)tb0+82V?CBEn0tE7LALpK9%o(AK#`Yo~6fyx8 z(jjjlgw}si>V=f^XK>=1;62bM(BPz);XP0@XmBD$UenEd8KuMzdlPY-J$W!tB#$zAaKYY8_KKp;n{~XMztB667k}GrNHj?=7R|Gbo6ETx z+azuji5t;}Q8zLQN_ZpgtJOm2DI@|LXI?dv`wV{>vnC09qy=(8m%~JJ1aE+Gtp*k+ z%~Q6Z>0*fDw(Psl5VgyKx_M;*M}rqmaEGsYa>yF9tw`M2Sv*+r<;e%gKlS_{?61a= z-4M2fRk>;>p%SyyDSLpd$~E#mxWGLe;Zogxx2&dIvgSv)o;@7oQp{c$>Q$z2>~4oq zKplS$8&_+F679>yJ%egB!%k~8Lj&+D)jW&kgrR`^ayid^7Ba?V9%h>k2A0*1VXKwl z%8{qC&M|GZYFvSU`xv%a8QvU8WgWedeAH|~v4MJ-dp{Tj$P9G1qQF?8&b{yIi63c& z?tK9Oyvj0cwT!o>5#-n&k0#<(l6bexs*WDmREX3_*3m{|EwL9uCwy1j| zht9Z35#I6tj0$%!ggwa7xk|q#c8)Z=IvQM$sXnUu`JH*1hrTLzv(~C{;TU%OF#jq6 z**qP>`1p<{eJlzChRPANoPz-(@Mdlk`>@3(sUQY#_Tl~Wo^?eqt>6Qmqe@{N_=kVI zJpRze+7BL#L{t{+KpZ_&UlGv?r3L*sKmK&k@H}TDOG(BOAzI~$&Mb6zq=PkkZjq?a zv_t(EShdU)Ba%8(`myGPcxGS^e)OQ3s>;Czy_=vMtawi@9xHy8oxn*u zv(-Ou`>zD7-CXKVR-3hQwrR8uwXL z6^zT^rXpo3Vx}TyifwzaeJ6-KLh7=Hj9r?Yi0qh5iGu>upf^+Ez(NIRVM-hnC;`D; z0(lJi4JymB9-11Lh9T+`3aIl>%H{pRr-nM}IM7&)p)%@dp*xpWfi|^AvWb7F4~TkR zEkl`;;#5wB^p{uqVqnRCY3YkWApyqD95$6_lHtEH`d+fwvj3QU|B1baoQ1&zMaYxn zr+$|AcPoQy(%FV*Qjkca@T>*1@K4o-)gwh}Y=n;#WqD+bH2eD$U&N*^7B_SzRF~PY zRi?t8vpF;x%|zCwtRTdBKl*9+x|;t#s2GWs zhfVc?KdX{+f6Z?1NWc7Xw@TLpZq`ObFoFnqwi$BjAR}gGXCSJ{As`LUHbeRy(~MD} z8E6CyK_!}jL66|flMFPH1eqwgWBh4rT5}HwJ1~}=Y8Q?^x!K|QYv9|)8d{`^MNs$oKmj*_sM_{pQ zDSk8ex;z0qrN^cSu{9}KBdY|Ks%^NLS}+oX&|ED$1&}Nm>gjEO?t(_KSr8JZK zjM$|SUK-J*C5R7pF1nO-oV`9pa1VAYYKl5Y5aQ?#vB1=k_(LO-F&K0k%4oqz2_PR@ zgQ*%hkq(8l(3*}PAL`+gK?6LL?vxCm4A^KT=G2}+*ppjw5H^35pXtY)oax6udbJ?9 zj`ZUXJJOGfN4j^L14X@^h(!+edG?$KZy{m-hiOF)_O&#+3=Oq_f1mQ_JRsC&>fqCf z>IAUMg5DQlU&WY**kaFSaCiy!!GV^!^4o@{%s*z6`DJRFCkFxtX#{^cA zL!D`(k#cfm*64rw^6E~n0M%qGt>QgkLofc&;h84B!rO4EJSx*f$!Tjp^1#Shl0cRx znCqaBv=sVPB{bK8k+mclD}ZxxTA}{DL?=?m&P=K>Fs>&unw)mC*t!vx1-+C;xZ0;q z_SIm$M0AsdiW!lL?67g}+vZcB?V&6LuCIFIh=`4dXoS*; zdr8@OoqS&>%)?Ap-_kr=y(TX3pjy;Y6%NKnG(OVD_ddq};@JStMnZUKsc8gYlqzf( z9~#M_O2P<+B0mzsmCkShxdXz<*+ek)AnHh7-}8Ufdr!8rW>O{+Tp30S3gijfjM#XI z-IM(n##pXzEHCB9C~zihvq)Kh{{jmp)@;BbA9j6n7uIYbp&3Ib)=WS%qy+h|=`*Mg zuJdG`qNx}U>;&|%E0bSw{+P0vpTE!KSp0UY z19*J!Wz4?GQ_6n{I?;f};s&6l_LV){Ys!Dt`PT$C$Yg~|nzX;~be1|hL%A)DNme6a zH3F*#Ttx{B8u=1k!B zF3d)+<-YXsw>VvrH)><^7UeiL!61JOqCNpJL{rMZtw&Gu-lf|oHi!<6vKydiTy}Z( zm})zXp5^66=msr>noj5*XZIb@NJ zj4X#Fa=E%AzwW$*b15KW*xvy>k}f>+MeJYRXPfy;0-GH!FSvuUpr6@_5X*n>&?bp4 zsMkX`|4)c%=8zlFRM*ZT zOhlRqI5*Tzq#lahTy15(!~lQBkt&%WHj?avu%|U-AGE{-Qs-rQThZ7QbGnr#-(JWcb{&) z0-$WO%iU-(qhV(ImceQFoFJt6C1%rYj;9>66bVb{=jwo!Y9=f#Cz^j}OYDk$fi7k8 zbim~`U^7I5^*R0C->r5V1iRHVE_=BeAmoP4StyDmIUK%6bQi6U8L{&Nl}hyo=`%Qe70qlXKXX28cTmsEwP|TLLU*mHV0!;GqN|bi!PgDRDv1(8h;N#-g9XE42Hky`tN*c}dqi*sXG+o9_y6o~TQ+dY#{!}IqJ&4`WEFp!rIu~6l)98crL^ze z#eaj;PgX(g&##aj6~g}_!bSkmpaA&8#2PN$*F$m~>W zI4Xf$feaplxz7-?Y)eA3_C7A{L)47zOVLTiOxBaq6Yth-iSM$DiKH(A`pX=Ot^hqKhYXHPiG$ZXa) z4i=~idgVcYmQiUH3DA$8K^qy(8pl$kiubmaTQ3~0CwF3J)UyqTD01iU1~zQ8;6Ry9 zijM=Gsdp64Q}ki=$3c;`cVyuy(g=G;lBY;-z-`=rOJskkRQnv-3*wa>xSclODy~%V zK=xjRq1IJ0ly&#Nnz{Xk=)a-4EjlU+l?cFLm-`}GD|%C*l?wH6hX!)##9wdauz*}T zv7fMq26E{{9Iz8r;bvhl9es!(y}GN9eYL@n7>vNttGk}aYO*h}NIdA_q|E6?5=}b- z&T`&KlQ4g^jh2F?@{d}SsV&xqp8kMCD5}75RZF!)AAg|XCW0|{6V4-yNVZUZ8!;Fm zY?9jMm&8SpX$bb}SM}MT)$SE>43qcQ$81^W^?`xH2sDAf2KonMof$=}poLZ_V>wrv zQOuG{jh~vG9Gbb2@FaC+Fk}_;)!7~Q9LjxCx$Xv+&_!)JcCg;?0Nf87hYzM@v?tg zFA{%vF(%gWaiq*dUKQOm5OH5%1b;*!Iz~k5ty?t91*?P+{S}m5=XVWubweDQ7b<+!k)cS9FWpu4y zx>ON*`1qvKdjhGw4A|P!KXlz0Dvmb9z?)rO5rPgZxKU;g}hQJBP*8@F?*qDD9 zZ&37_TU9iHru%ALN?H$eSv13NV8!IWPqdZ{{6T#LA(~}3FZB<$@xmj|XL<6>y(6SFliVCG}8L)`%wL=tV9%=@)fQ~r{4rCvP6NE z=Olm3VA8|3zbV$=J&=yNk%$}VjaRFTpt6(;V7^TTeFyXYDK*plbKmHuad<~(cUKqx z{)d08wf4jCs9;YUg82kFBoYr083RC7AYRR(zeq4X*H&-^xCTciRE6e7B4K|-6>k5W z?fP#qNOWcrkcgXsVuU43n|+rv`7Hh^V&)<+2PkY|4p+XShb0`F+}2UIe|S*xzs$wTuhCq8xlRohyjm7LYewLRQg03E?#@WD zR!JS9Bl6zBYvGoZ>=9Y&ea?UKIh&Z8PJ?5mN&;UR5osfO{C+S?U0|eQ14zU#2FT9= zb#<*0u3hfY)^#A-x^PgTuj_#Nx>gC-DMu=yP)dpQU?A+2gPu9UGj)Hp3< z4IFX;{nH;EFH?w7(N);q1t8kfAA2_s*BAGfXXC5c#r^&5eI-~5(EfHcfGse)+6bfKbC?zQ&WCtSbSX*BE9bA*iuZ4kBQ?)e!IpWqw*++QHA9n?1n zJ&LZ~76k!cUm$#k5{r?_%sQu#OOrkx@kj^>Bq^>=3I7;?Jsc2VT!!7jI{;0K9h}9M-q9 z_faor&w{@%9#DHG?p~f!EVA0onSTXZI8}3Ow|YvyS6#qDiuKJ&r?9Xiai)0?#z8X`Z zXtpBFR*wSSeJ_kqVdB8B8vM?_4Zrh%8LV}j$IB&)&o-17$L1Y~MS~GDNDXQ&WnyHLT9p_K_Mw22t#Ovuek|E09WN*cNH#Ry^WN}NpO=E? z)~c~rOgj7|D#5}CEM>|Sl)8#bK{51#8|{RB3zIP4e&sbh6o%$-qh$~|x{}_Ltco6g z-WBs7r)+lrCCRHBD>42PIbY}5QK=kDHbkPAMWJ645bevJh?_)GFRLxH>b$peFOyAZ zC*K+@%<}5qSv*HZ?^Z-D+=#~2a+*Fa(+sn)g@vpoeIB)oia_$O$y-}Axyyutlp9y* zxN@ws)HL$>p?!~Z)x5n>xNlHHUkKcPS2XvjM=Mp&jx^=GJyAV_Y9-qt1rQa0abSJTWzWKIaCL26&FdRe}It9rCw znA2weS_b}Kzp77U^l^PE;S7OTr)&dxd5!b0eQFb}+at2<{-3T^!1AL;*N0@lkKzc-sX zbhV(32jq;pI-;w4ckDFCYZ7&T)`&?H8PP=6Y8)Q7GMgqlqWwinzbWNg%KZ9aGIZrz zk^LWVN%pLZBpYHdAPYFTUbL;-(`cEhKr{MawZ^0{B@|@bBu?GNlMhXARj(m%m7wLfNa7s~wx;ccrzKN*g=VUtO>cSjC)KTqI)aqYTSrHmgR z6q$pNt4kDQ*^5i&I}3ZFG&bEW(>2HMs5-71*87rVUa~gv4>( z&)!y?PQfqD0>i=gqv4SpF7Twt-P8(8Dl7?S4b(i;nbD|a0!b)0yA?-)-=iaqJ3dom~w%-NN#&33u?CTDHnZX9gmz%yP>pb!b zk4kiK{mnX=!+UZ{MOpac6dbi+M3;>ERDPqr8AWOn=|Fjb8Ii4+p=8!<>_>HpDB%Tq zuu_xAzU1qXRMv#*21;jae~=DmWrmdPBk7tK(`JROSs0ASp!7O_Hz+&K7TxG)LDdEh zr1cjMA9dOt9jOk&%|$_F#)?L zB=4THE%qFsmd+BSbpM12y}QZzzt&9hMn)k)_@J$e2nJ#?98!gBAoePtTn`M4{)Fj6 zc$(g=(>HhbI&xfp;IK^c;)8V@+NoGnxHc?vu&{afi$*o>_TjaQ`n}Cd_NL>seBd7% zt)r~?+f^E^ko|#H^miyJ4rJ|LiYR{J>{fhVr!E$(q{7D+EmW;e2}?uPKSlh$5xvB4sUzz1@_r$4O zpffUX8!R;Cp}q^x32A6a>Nr-30h7~+DmV?PUJr3XNt|^9s@KC#sa_A|G*ZvxpnAo! zmBfHcs@KhbOT1v4+&V8Q+L;psDUZ_?Z7PV|w7^nYmI{&kI9<^Of=Ew-viucwP&$BN z9#a1Y>Z}Awec{lL*$NI->jynoNdRUb1Yo4XmuR00?w(_A6o5Nsr4}pmGD2>-fz1Vs zKYyATbB1dbMKpS^LdW;WKRHrv`X1RcB*otEkw}w&uoru5GH47uQF+Hj`iw#0gB_c^ z83Xare!01-XVS$iqIOwd#`RUiS5@F55#l4`)fFtc{%icaO1Ha3(#O`vhQi-yE0VS% zvcmd4$&ic$BDZpZigo52EbuXjQY4eduIuPO~hlVPu8BcqhMD~=*>FLHwlZs zH?}r^aVz%)ju^8MW9sVu(=N&14Sg6}CcF{#s4%V2revBts7@qehg?;O`bSR!-KP&z zh#hLOO8n7^z7xqRQBUiMaGcK4e7;Ma-KDj;UTgWLuK|%7m2x7@0MS0z3h8hTo(?Dj z!HUc@aEB&@x9)@J0@1RbYmk18*8DY+3gY{JBHs%>FKk56F`~75v5=^))vB^UZJ3QT zv#QU^NPnLwB{D0Ii3@9MD23@fCPte3Lz!%;K5UAgDdO&T&W-%kqEk9@^J2$K3Kz=Z2z9<>7v}%(k0S zKT#KniavRKM#gDqr(U$Ve1(+LaIfU^89Aq+Bu3Qa)g&gM0eD3NsUVK+dw;dVC*d;j zj!%G>iq2~GKO-6y@lnXT1YU5VIk%*LHEW?=A}_eqn@dWwbU~>#7c^$g`eYsVYDIw( z30Ku8*|+YqHC4(m*45fFrKDQb9?Q9j4~!^bUu@*3yJwL#!Q9;<-OP8kvZd-+PV#yB zjeT#ZMeUwNz63LH+Gt9-?rYf#?}Y2VkzgpLTlclRf=IS%byv2)vsVBBrp%px1_+i< z36xlSH}9J*@4?gRvD{!J3{s!ws7{aFt50);+U(rr7z9$ojlz`K1DZ5PQl(uyS`k<} zf*pu^Lj#fA`Hc(fu<+yh_OmTx;|VNLh9YK&r)BOF5Ozw&=M6SAJx@Lynfvmmx{Yu?`_EXKEcar09sflr%%%$UdR`wBHa`O z?O*GhC~r#y z$$v)(zQSYbkp+8PdD|Y*oQX)B;xvzAn)gkJQH3*lsA6P_px}Tu#N_2?*bCC2*FM9Z zeosSzUVetX@~sa(9n}j!Snm!a+bA_W=n|MpX{p|M)(1vvU=Q%qmFZK6SsaEEYFl0D_{Ko_5bEsWHL3juOL=3pEe4GTcS zQCVfYv^iDs*$2Mr8bbS#OJ3Y^`W0oyVdK-i@mdGU>5S`66Bls};Qd|fFyHuCMv8tHmtqq6rbg~mq0dA`mz$=7L?Ez21RRdbft@G2=JW(2>0 zmX>c&UJ<4QYJEpC$jq2I4F0{PzvnEf63?^VJ+c6+%qFA>%3tD{Bt{XDE{-DpAe2Y^ z&6-bgNLDGC@k*2Flqr9a=J8W%$-9_2GMs*qU9uE2N1E?XNhV_8+pV@=NEB~c>H-O> zZ=5GvC`#}d194s-D!Pj75)c`^7HX{k zx@d9>qp9vEfO;NWBCK~3RoBWAplV-~M5;)H&3sEJ)DnOAhLXS@%}L@fA~iqQ*6#kV=zN^uUkKtkfVqXh<~%f{h=o(x^!@5}Mfqf?X7C z-4De_Ll4*^n@M%8*J0i!w1R?KmzghVTSTAupEb8?+fvO|q4Osx|G0e62=)~-5&4_*)~^d!*Tx9SR( z2z2*LvVw4Y@A5oZZI|y@E@j{KXP39h87oTz*qe{!KSsieQg0!)54J5=WBg>5JG5C! z4m4c#FXQV;pO|#}w>H{cg&DnnM=3;z*_2=2;&F72pT>$$+1bVY^z!rN*?4+UwI961n;B%% zYSNd`kFvWRZ-r#isEGC)C|7DUC>|*Tn0p4u)d3l|w}KoLQLavK z_kn*2b5-zeWeo|;Zf|FiizZsFU1sBovpE!-Q#uQENX~fi4GyHm&zMsu zdCdhT2filx3V2~F%Z(1f4q+9Ep)2jm`$vELIxM!rtf1>ejZ(`5?L>EGWuC&t-=fk% z(oPRg=$S>>uh=8OjtI=1l#k;+&&ydqh~5H0CL)W8h?}r!Xk0=hQ}t{DMvkAsadO;F z{$zB8_pmIs|}o=U!{+Zmq&l3mwkV^ zN`cOgMM25BzX45@nxL8wh+sej19}tYY8L2-kTwH(!IEYCogl3iaj24(g|MVJiI7qQ z3Bkyc3=)3_-doQT?lv>)%c-X-MpmWQ7Fa_E!yKo9eya) z$3MAH#3@#c6V1?gr_0pqagE3(fc+!6MrvN<87^4KGk^9 zho!kNjUgukf}BuuXt*l-pi_Uq$v^>4_yait(h}lmD?b!>?Er z8E5lqU0sBa@115Dd%#s_?8%3jA?L&N_If1o#Q2j%&x*X;*#f^ung0jQ{H=)rV4lynxn09*LADNxHSm$Cw+uII(qLXX-2YaO9# z5CdN5sG?yTV3k8-VdL$Jt&@agl(YP$I^SxF zb2RRsIrz~-6Qrhp=AeJm_L+lHpcAe&f>4<8_KMkW)8>nx>O?PioOpN36p9ijg&Ob) zv~Q|n#ED)8UZK9nJSU#=rAxxjOqfdj9scxCI4Bs>1nac81J2^&Zs(DhrjgbSub{S# zx$)w@he>H90>gY-#r9oJlNbYy-CJ7~4LvP^pO(mtL9l<{p{swTL#Ndf***M`fh8FT zAOCZ@+!8?`kXD5N5&c0E;vSK_hyEpMGc&F)QOw2=^FYwI2u#RSe+yd@MomfM!ppIs4x%j3m5u(xiC__XdpGV#q6eV-A;1@3> zI{fi+d7eID5~zR8-mf39!^W8SA?1XG5QM$exbk=%c8ZE0sE_I;4a~g=}T! zYM8CbEy>D{Uh*0)G0YDkxa5`#Z^>7}gTT=mL=AC~Rj5uHp@Gg27uhqK?1H&-w5~e+ zd_2d-B$87o5eYd9ur!JU6M#O*%BGC0V97R49S~MMLuh|xRYuA$G(gNX$DJ_O9P7+A zp-S(^AI4mBTx6~(>AW9n%r#Qw{XB_L;1j`1^DGBU?J6l&@@&a7K9ZnI+Q{AmJI8Yb zM)%)d-Zid$5U5_Si!zPQNuumT%#KE~A8|Xq>v&a(>ZZSQST`G=V{a+7<9@cY#d@@w zq9trCr3QapX$knKQE3A(=l%I|2YR6O6!6b-)J%;b5=><-Qh!3dtAT-Jw8N7vdRK!2 zl<}aj2@MAZmQmt|FINBYUIe3i2<(s$K`f+t>Ka#SibfEC2wSRi1@6Gt3AG1McfnIT zwFAQL(I zKjk>R$wq5z4+)_8sb{g$o95XLN|G;GRwmTdpa5qRdLV=I&zaUKkp6A(mptyCQ35`O zNS=TA;n{Mj?4l}@ZgL~^tN4Ea_n5NCTSum4-M>;281+G}u5TyP+4;lxN@5DHDod>A z=?0RUed?*{!zXOjAjs`SyhjJ^^{y{(>WjS-;ChE09~RZm&@j|Tem%H_d(!KQ)qnU$ z!v;z#nO6AUBf1B)6-DZ=MuYp1TD9$wt)qXneJDDq9kJ&Dff3&$8FYffibR*x-09se z$yqM>sG+*`?cEe?$MfP@H!hQGWjkOuoAG~x z#J!Ta_EmL@p26fG9G(rGNnDBmwUIr54FjvLo?jyVU&aT7wc<4y}Y#~Sy?vBO7YSJ9DmEWA?_lhw3g<+zBN7#xLRvbttN>iXM5UA4r+WW=v6O4mYUDFpOhMJ#%Dtmuh^|c6<`Y|2e zB)LvFCep@Gk0$5l97tlRp+7h0KqG$|mbp0xlJsdPxjD6{rM4XDidqDnvc?)760-yr zAgf~*okiK83NJ(~oK0CH3^%&Jfg(#s7I}*{@u3Fr$12^l$7#3}{znQpp?Hnf8S!-$ zuQ#AsSe=tbIIPxRCx(CFeq@@A#NP}DYt*zv4Sngei@&U#tkU?)%v^sJ051V1a9dT8;up|E zU9c#94zG+F0^h;qOWA>mTwV1w5~AToAXd)ht%OD1V)zb@pS0Nfon3~RUm2U%d~bc# z^TAqhZlXR%)v~@W*yl(!l!VCdLica@TA_quk~lPW=xe;}?AEij5CQk) zW;c3`q=YyJ5$}J=b9`j)2C_kj_q20-v{wQUEAqyX?AE!2?uGP;Q%iAYG^vk!iY+#p zok-cy!=34`7x%OKi^;>)bT*lerw@}#?+;SqR*m^eG(@r4TTS3Icvpgxj1%8ez+|(h zIv>S2w9BdQaU2#S#i|i)lznS+dgWq+3Zy)#MK>llBbk5tIm}VKP7Hll3vORIySO`I{zjp($rI#8w6 zk|v{tL8~my2rdQ0YNgI|zXMu-tA~wy5f60&`{VG$*I}p4h=)bq`eR4t>rkVwKNhJk zGbP$wDuRE{Gmdc%1-W;t5ur^niJP_@rF*=E;!vEVVma4%1Wt&DSjJ*c<#4r7d>KL3 zbY$88NtVmm0MvnY>`&N`(~Snv4+m#{rtzvsyUHp{ghV8=0lwn+QXn@>Tf({XFIUNP zJTEdP>gShb5c|k93_h*`zKOp_!f0>2SdhC1l*50UvhYBeK^RG+x+wg19K%hlU z-Xa{>lfRHEBbB~32@KVWBAHcE911n9}CB%>VQzQpC zYJHy0oPGy;rLU(F-Dfd!Dcss;lCwG8u6=76$2~RY# zm^^>|98$Uf=d|y|dfv{;y`n&!j#g|*k<2!j5VV{=&5~<<6t85O5 z|J~yzU8LY(^Ybbu1VW9%H}3;OBkXO|n++_epmb7&cd>?D$B^1w=lykCFRj6|5x{YU`-SsG%7r3RQaHV zIOM2t9CD-@5{6CC8AqK)B1dK)!q9&S&^VIq2t!dx9nZh6vbSZjc*ex0E0O){`+B7F>A5emdI>F9qYWKhP2`s1$b|eb+A+S~a3zB>E zJl(99%!dZzk))LVDHGoF>mzYJ+e+X3gg_0XU@g+nN&&fF#jIQl31nYv+XsJj*K|u& z@Qn^T%bwVTeJxdbeRToBc%+O+@kYm`Wls?q_dx?@yKNZ`XbY_^=^GD(AUEG*gV-xx zCNuW$Rp0IM=C|?H<@xOPZhCopQ*|ZjRX~+~wq(cKmYolkmZv(@1(T{T>GMl}3CFqo zFqIGmwk^Iu<0Q~a;DN7O#B_hFvM9gC#w@l<4Hr9kysOZv$+!%iMOH<5BqpH{yYs+$ zxODN@kNifV`y^)j6Zk#sew-|^$EyHrMid-5SKEX2dX8_E1>FEiir>-=Fl7D*at11j zy)x-{P!(CTseSsni0*a(xNa*szwO}7P;*|Y}#V%VE#Jr6%c;$rdNu!o9E zduLQbM0F73F~DD>5+VGJpmIPg$z4^xC8}_)Vn2Yh=sAb?^#@MQDzS1vFexn3E~uh7 zwI86a4;G~cAg4c)Wc6ka zzbUlhP@|b^fL-mB`e1Na;F)t_R}a;uE3vD$avSp1HIpO6Msc@{H?LX6Hi~~Qxpvq9 zB73;^13Ww42BO9~9J_(hCBHBHIz1OOpxkPZdgVYQSDm_*9L0Yk6)W-kjUQoCnQx^y z*WZ>uqr6ga_rj|+OfkDodP~-8!L`u&kE;fh(ikdldY#R`s-&rUI&V79qG|CJ$aevZTC#D(l51m8tftjSM-9J{ykwHR#mOb&~aO1eQ zJvwz;*V|?bFB5-Xz-bC883-O4y#l#XKgEm1EM6|f;}^_1eskUDy}@$*?bDf7pmKd) zRq?kO5^nn^NP2w%SK}6l8JzFUf%4#QE!`ySC|SQirz1l_q$GrD$P{{p%%Conv*qeVWgGyzB(r=iskCZ~!4qJ09 z4qP~YK$7Q~)5;a|5>O>C;C15jWp7aDpbp%iFR7;B4HQYjXI{m=iaGOl87EXPKIiU= zzYkU0w4i4O#HnGwRQ9@Bo}+GlDcVOi7B7ieJa3&;tKI8NA-Lw|7SU=qN6_pf*q=9FQt$RJ_ZCd7E{tAuB?5ZWIwzt_x#7h&~(x*uZ*$nz;j}zYa01zHc zQN$|QPS^&V2mJ_IzOpoqMJ=rtqjnRcJMss>0=>(wRP@38I zliRax#{N&Yj-0s9YrOW{x2ry54vHa&t=$y&iSX@@CuAyj9?$10K!1VNwBA!vyEH75uyxY&Imcp;h8uBY)ez)l=(1A*`mn{2Q|K7%V z9>0GFuA2M!P43oXu@`!|*mz5^NMsMS_l-~EJWrGSax1$ad~S**ym_{M?@xE@W%7T; zUV#O?{{$0UFsM{YRD*svIyHv0LYCFYW9ypA> z1sGwU`)V`0Bf-Plr%BT2MECjmmxM8xW`9ZY>~@v3ce$^}HxJ{hu;l=xiGX8ESG#{~ z*DlIdksfX$fJ2>op7H*{pWL=VXK8G>v3`5E7LzM7eEz*@Th4OJeqJA-i%Iof{mOl~Jb|8q>7(M4~?{_>r}9d3-C?Yp`9bS<(D&2oK~ zf+8BK^(;^zjIcmC$?rAH|BBt`QqX_Dbg-ka_!^w0$9L&3c{~63@iU)XrAuV46C9n`TMI0QH(p{Wy(|Ni^kCeXaSvj)y{3M07JIR*tFZao2x2!r!L*9{ESb%?rVjEz* z{LE#Hx>#A4(~J8tz)ogYm)DmqW~X{i%74HY(KC$v9XCx`!VUn`kqd<5NKV6`nM`wQ z`~=vY&)QMl*a-lCLZByGITKfRr^~GLLH(0O${T?ajc-uz?}&&!{mee|v=pVTz~z&9 z`8CO3K@oE`&1C-XZgSr3+82N6SstX6{*GJPRr)pgsf66s_9i^g%29TOglH-k?HGvhH11q za#h`~OAdBG@d|iaKmC#?f8V7!y#!K=FFhz+SQ*Enr62b9q%EtHa({o__5`@TxW2vr zb6YDIPH6{+OslUcY-yELzsnFapXluQP$vm5G&trwE=KHv9HPwP)}0Z9tB6 zn%yC;xYK1YEg(|DU!&$m0MZqE|68~X1!!$hw%|U?w&%&VqxoSJa+|tB6;_v7ynxaO z!AEVOYTXUIjXMHab$NgC9leFNwd(S^5Ks&?oooHL`Zc0GcRYXLD8i1O*s}f*m5_Y_ z)MD4mj~rYrVS+RLCfh>Rt=U#&`2o1dr`h!-^IBVHVjL&EB|%XFExaUgb-}%u0z>%H zVu9#&cF4r}v#U~7N`TQ5Ae1?#^okt=WqE+I)=_26%dU7-;qiYHp>jh{pV!N0=@UDV zy|P4{5;!REx=-R|J3kI4aF7N5F6G)6u=<8@p7V>(W8lPjxVijoe1AEfUa%ttBIn!t ziN)7x6lDFH>~bVC=q$?moaP&EY+~Kx@yvbjN3gIkSFZDPH6tWy`1iU1z~0oo(}l$1 z_29X%pjee)EbU4!pyoARu~lxsXpHg>&|@_UnvIHggF?SC-oH9> z@qNua*MtDGoI}A8>O}<)2Kft4PYF=-%N3?j->2CmVJ~KJn=gNG_H_X7xxATP+}}UkO)t(X zSDUdt*M!zJKnyEvX#s=;S>8dTKxM@=u8ZKSr#|Xp)Sew;smULhEN)lSK5Hb<0;2$# zp~s#Ob`mE|a`kkQyUGyWfjS*MIkupCI5*V}9Q1Q7(hWIGuEksPXgrSeg^y5hcKXK) zw&(nI;qiYiXzRno-?L0>st zRn_ctIRvncEC0(C)O)}563Ji(kPc-XQZ^7aFS^8HO^7&7Y$j+ruv1TEATIxMF#~`U zoV+zVeZ}u28Wt-)uf_c3R_U~$N4C&o2R-t5x6OZEftx_avMFx9r>aFcJjw&dHeG3W zCjX5lThFM;mGA=oKcr0orkKepFiU!7vC08M?R=_v8TT0+!;69|Qyoy==^H@kj(d(0 zv*#fA_X(Gg`iIL^Ge@}MZs~??eepAvKD6YaEuih-Zh7|BG`Chh-Fb(2eSdUV*B1u7 z_aA@O^;JSOviIHbom3>S*`;+ZWPsampQG#mWsCG{^4{5(l_+n7Of<#{aox7MKG zLuKC6V376Be)7zSt&6f@;#1r75|ewpqg8)mAh7QyT_Uh|>jgXWn)}2S$AEe9rR}!ZKP*m+^BB0yWK0i~@V|>Q_>*95#QY zf^A0}1rio6?@(WMtjA+fd355$)3$W~Qal2ZSvO7jzZ6O^Vo4QJk8FwP7uHP0v(q+h zHhe2xzc(qn$lg)v!>Oo6`|LoMD}=lYK+D4>t~k;wacDOW*BAGfEUcSd+~42chedX< zrNVAn(ehYIrd5{?c=XKO%xz{l1U!F_tlf%sLscEx{&460Um!4o5_CCS2a@~x~ zNGs=l)7a|jO06gc8vHSq#}&)f;TdnY@%%+OjR7nI!B(v#1CGjT*fO)0 zyPDD(8E6#SMpTEd$(}iGd&>JhgFR6!0D30h-O`5*i}GMlZU)-vy{ZL{hjxEi%g|5e zv8EXZ(Y22QwG`E+->n;KeTL5@_#+BfTZ4r6-ozJ!yy$|r)q3)(sQ!Q^^Q_|M z(VnSzZoA4}s5@l&0z3CTT=42wcyl|O++IC|cURatQwS43&G0JbIdmJdK_w1*UP57N z_(PZM(Z0`gE%~6ejdXK)_7-NG*5J6MGUBHtq8S5}os?J*u}W7{t+c}^Kj)R`$2wpR zwd@B?w*vXs`iwqR+;irr{0Ah=YCs3-LVwu7WX+Co9Nk6v@QH9vTX-0i2-ILI@7k?=z@6*lA%Gk+ar@(Zx+xywW&FSsK&3Qn@u4+o7 z>$%*$w&F--7dH>;im-<9_9}@t0=Uf6qa8F)Q3g!B%gd|F>7Qq37x&Z4&n#4)2I3Sc z?;?wA-GI_9Z$vT?bxiP)=JQ<|l&>hdslUv13}P{rV>qbAp_Jg^gSEh*34h~C0btcC zMOQk9%dBQv>YOeFjhV&JRxYLr+1r zy#~=?kDYHa8=%OBoTm-s{^I-rF|N%w4?TT3IlmisnM*Iy-~}&n@)i6P6EK%Xw?z(3+huoAFPjC2iI2bR3;W%L)`=DcD?E#O-q>gFb_BXc60mtO&eUCD+cX)PG{bc70CXI?!2$ zk*+Wx?Ez_G3GQzd$QZEYR+h*w?hgN=h2Ri>%S3u()^@C(0H$h@0{8XILS#}GV%!2S z^Ushn{H;x}Cnne;dE7nEgiG53N^o^&bbAIQ)Ua*C-vL zDG9XGRndEKgMBgB0)Jy2CC~&mucHz_05oeVPWhhv`12lj>CzcbSx$t{>G!(6&vGIg z89&;7MVPUj_HJu!X_(0Gz8eh#O99|xu4x^v(<{c*+OT#k&`7ttie{g%hD2T%2`MDX zc+yw4qz1v!IA#K>rT5otx2cbY?7;{I*g&$gd#xyidc-8ExPM=dE~?(Q77K%nq}B34 zCJI1)w38x{=@_G6o^;hKT4u1hX8-5oIBe*o>FzC4PV%-SU$JSOkThL~wn8Wsy9(5P zC|vbuKx+l$&Xddi4Dj!}NVRivRB7T}R`u`P$QEm*nz5ROne zC1`8zEco>8Sby^Q>C=qD5LsC3_8r)1hiZylh-FN^Z)w%c7V$O?4YeC1%cXzMZ`#Pe z*NLZFqq+?cHRvIKL?;8BMzu+yCb_@LIH?{RT*m0h9lSQL((t8x^udfF9}2SzD2Ctj zH_?#Xh(5FqKP)yd1#ZF=`e;SV$;Hhiu;QRGdeuO4ntwMQ+KGic9cZId+zICL+@j;f z-!jO3w??g(KOqNadj`FAJSTExUNM)gsgEXmce;ji;K_c&#bmz2A@?zTLGYV%$%0$S?Ucu*5ahG%vjdV7AYN#CoHt>Bc(-8M!%S zd*9h?Jb#^C-Tr=2jkC7b!w7XOwwEBeW=kfV$}Fu`+jFvY=_`m;VTzzx#1>2l3MS~2 zO=}@H`D8ZH1^cr(6d0_}=YY{$b|3Q|^?QytJObYk4sPQoh#BbmjJ$4BC4o_xC^fgR zeGh&U$4eE56^P+__#B19ss^rKxoD7n6a^dqA%9fp5l8(n9E3Dsh%F*)XK-xWatbug z2FiAX$M**42yptPU+|mQpTaj^t)f+pE~$=}N$Lz!GHZ&#YcRa!0ksYL_6kMQC;sK; z%Agu@gO~IRJzb(?d!AvonE6}nYqEfe%9~aH!D&jGrmm`@9=77~<9%4>O@*VpQ>;o% zHh(+~M@1znzdpGF2zw4r968>(I3O5pNOh*OZ8qL%*i`og>KRwMO7k3g+t#&dNc6!* zYWz`?ujv|hE(||%)!X)a9EyV zX7>MUDzdhcFW&wo-prs7mCqgp*HBHz1X2GsW&JH54IdzCskQ+&>1I!wZbTOwfZ2i6 zY6sPe>^xt)c}btPvx?Z>zy8sR^w$OG?xqpjX45YM0A}43gOtjn#~)h+ZV-q#wSN{r zDCbqoT$SHJUsbKF%U8J8WI!w-SoSYgTlR_G8})?h+|>b$x>VHSi?vC<#+rs`n9pLr z=ysK~M*pa3HWwmYZI-lw5({)g)uYHTzwI_-EechnSpDlj;+XitJiwRWj1ayn8Spik zN~Qjwk8F5UQD+r=!=CRH7?7I`RexyfRD{^B`%LZRv+YZ~Vlin$rc+DA%$1PZ$I39v zJNbI3Ez2`B5JAr#lZG{6d@kPn@u*m7t6in@%lnIx8bIBntL~=i6kctPs}@2PvOtTW zH}T+%zo(mVp2zQ&Nmq|xv$hp0_WW+wn8C~3YD?FjvC;A9mhkYL)=#_TQh#voWPXiy zm0VqB5!Rhp(5|zczLH)hTox4Xuw1h+9XwS}C<||!xLd|`bi@Ye#m8`&gxNQ{f50IPqQdftoseDf!?$~s1khP~hG(cj8HfhKh zHF*KbKXM6Fg}G|katGsPn}6NwYhACim`eNwRAnPAS%3o1d2`HP7bk_sHh)ven^v_| zNfwg2<^Z{VHt8}L+=h7-Hh8z5ZEGC{XJ!R!&kB9jz>SffJ`Hy9tOZwzz)9;`{$QHE z60~KK%$rR=O-7s^AOHedoedJ)3DYq9uHkKgxQWA;YM<^+A@AAbl!$7=6DUgZlp znhZaZf>^ti>}ZrsT2~-8&ElVqQM@!UXe&-un*h)si_1KCtMp6f+vWR=J>v!gxn_=} zjBY>YN!J|wcISSwW^*%d*|{u&F*e!R3uitL>^rj!Z9MH*X^1T4Bj%-C^ypj!GRR8g zBS(jjQylZObx}_*HmoEncp9 z0NW-dAHlIN8IR$ZIAVjlE%j(OEl3-vGg3HCH*hYtYl|c2S^V2I;p9C1TFTgjHm|x< zJXNZQk#Fk-RDJ!j zGK*g`wH!LP;Zt_Z)ZGR4l8PvSPvp`>2wB}8noTu}VXMjjjpUH7;{SNJMgsM%BUO1X zSIA8>s9D=YWl5+(ir92UJ6tmwf4%KNwQ_m#DS3pI%*v@rmi^gqR zoquEUg(EmR_s_M7{dt+LC+Ty$!aaFG)II9kR9U*())aC^6J|f%ZsT%UEIhrV zV-z&4oR0)56v>|(QM_plxtn;+wxRDR`hV5cBr5?~K1f7I@pZNkQZ?(DjZhJa+2%D| z!`KHQQIlkvUS50ae-iMHFXm^_#}nGkg&ue~zbPT5!XyPuXVI#iXBohYNZv#OMk9YM zP(Z)53ins$Yi*BpoT#ehy-ce&jt34}JWjJw@x{dgKc{1PS8!%@(!2))tzwKVv0l&rC#?{D^ufiCAoCoq_ z>I>s<>>pP1civpp_0phY`i5QrysuMr?zF3(XbmG(LR0qrDWqj+BbX7YKL=1{K;75_ z4EQS)WwZ7u`Onq2;?3LNTw_24LjnvUbQ+MuHl ztg7n%foWNpqfn6k-Fjg!ri6VbETo&r#YRP1%r$*Zm)maS(uh{O(s%XRz2NM6ln*muh>ZeA%I0Yq~>L?=pkM` z?;xQB&(nIT6fz1;QeSkKsV0KZ{aI{LRiqq^qtYv=I-SCt885+)ey>UxS7z%83i|&I zrLNz;BaAwJxCiK|#1~XYp%p^2{oT?1P(u>hsPQ3Bp4oRu@|n&@&}}ii6Y@W6GHa=D@tSU-DhbmzcZof6+Ef4`aKqxF5Up z4diTx-jM10y5dWJ_)qXV-4koQdD9nPbX))ti)0x;=gj4S|Ji(%6!Ndlrl2fYcrh%8 zdf)O01ou9cgl;YBwUD1~+|r~K3^p489EshwPE6Q;7GB=W&Tel$UtN|s5o^3>Q!>o4 z`!~y&wdJeyN;!Q@LzYISoWhHoqwH>n>V(8o*ip^d*Rr{Tru&LM!hp?Uk#)AE z*>}gf!kB}9V%1jegz?w4g;!26@tYRu`ne<;haa>)C5t-(cHcftIA*+U($Yd$4smLO z58!E9(}6M1c@vpk)6Sjd%=2ynigYDI+w&;kgFSb_7g)lTx9k~D0VlYAuVwbET%+*6 zo?Au~cU(ml6fhSF)-I89e~MYpmf9NPW%&!P;uj--PL9WP<;B?wb>N1wP`_S0++R+n zmuFHrbH;Igm0nie$Gu!3yG1q6wVwIp5SZ-EC^dPr)@EzPLfD>8Uc{ENXSUlQQ$;xf z$1>h+vsdVXJ5Qf*EI0|}jCiAfN8QcfFlyBFS-|48fN03Tvx5#zD%8rHdtFMIBeQ-R zUtOMm&#rIJF9Kmc6Umh0x0auExs0&4rM}piq2=AW#<;_V5aQ3L?8MpRtlN`&f_W3& zCF|HVD8Xnt3*po~2;$?U_G*5I6)!{sG^v*EqO?)&R!=1iWoY*xG%BxmTau>h*tN3V zLUXYm<2+B9ClUhryPRI!kMVr+?EJX8qltZg&T0JpeB1l@jh5I%!izm4PJ@vq7@1t4 z66hpFs&_2%2RXw=K7c*6-*LIS`%H);54V>(PYg%J-F2ca^YdE9XJ;3+^)=tH6=-PM zrpjb6;Tb~se8w)av=z(N0b%jR5_TndE{J~MBdqq#zfUvl6Ye%4RVAs}4m~RCO4CeMIomQpdSR&%Vtd0+k?$}y+Mgo7++6u8 z{}@+RJTjD^x`e7dB{9_hHnaF!oGxpB6Bc#d$d)%-hdTRGLJbg%yw&$CB6h}eG-qR}egU#se^CPV&f6F}k zP(zhc&oC3T6&bqSDAjMat<5UaV~uwpRiJW^l~uzwt20MV-vL_2Z>y`Om2*pO=pR~- zu8N@ki-hnK1Lns@y1mibn%Q)gV8 zNuW)`1y0olQWg$UW5Wo2&i8%4fB1=NHyChjW>8y%d_wREYSP#@;>X^+#Ea~0#)9#= zM+E1qp6B@0o($S*iwdP?HnDW6fFE>HN|n82fz5V>k_DU(!R1ZEe~4f7lvsVy z(GL4Sxa6f#v-YbEBd*CtVdVjDs(4X4{WzBH)IW3)$XT`6y8wrYS-DD*1!y9A(xZCU zGdD?o4t`UzsEw{Y8ZHggl;E^)1HO5}-hL-wFKAxFZVHT`jkM-(Pa(R!{H+mLk5RX& zWstNefIyX|34?=3{9Ufte@5{PR=sxnihR3ZWWUE|qx{{yc*2Rv%AGzP(&D%r%Obqb z$~MNfBv_;g3&R@iL(H*5!Gp?Et~#*~!)?eTj|O5K>&O+C%21u~b(f3Mi-kH@1v9U| z=W+9JeR0oxw5!?0{rzn*DHIGC?;

Alpine, a global solver for non-convex MINLPs

CI codecov Documentation version

ALPINE (glob(AL) o(P)timization for mixed-(I)nteger programs with (N)onlinear (E)quations), is a novel global optimization solver that uses an adaptive, piecewise convexification scheme and constraint programming methods to solve non-convex Mixed-Integer Non-Linear Programs (MINLPs) efficiently. MINLPs are typically "hard" optimization problems which appear in numerous applications (see MINLPLib.jl).

Alpine is entirely built upon JuMP and MathOptInterface in Julia, which provides incredible flexibility for usage and further development.

Alpine globally solves a given MINLP by:

  • Analyzing the problem's expressions (objective & constraints) and applies appropriate convex relaxations and polyhedral outer-approximations

  • Performing sequential optimization-based bound tightening (OBBT) and an iterative MIP-based adaptive partitioning scheme via piecewise polyhedral relaxations with a guarantee of global convergence

Upon Alpine's convergence, for a given relative gap tolerance ε, the user is guaranteed that the global optimal solution is in the ε-neighborhood of the solution found by the solver.

Installation

Install Alpine using the Julia package manager:

import Pkg
+

Alpine, a global solver for non-convex MINLPs

CI codecov Documentation version

ALPINE (glob(AL) o(P)timization for mixed-(I)nteger programs with (N)onlinear (E)quations), is a novel global optimization solver that uses an adaptive, piecewise convexification scheme and constraint programming methods to solve non-convex Mixed-Integer Non-Linear Programs (MINLPs) efficiently. MINLPs are typically "hard" optimization problems which appear in numerous applications (see MINLPLib.jl).

Alpine is entirely built upon JuMP and MathOptInterface in Julia, which provides incredible flexibility for usage and further development.

Alpine globally solves a given MINLP by:

  • Analyzing the problem's expressions (objective & constraints) and applies appropriate convex relaxations and polyhedral outer-approximations

  • Performing sequential optimization-based bound tightening (OBBT) and an iterative MIP-based adaptive partitioning scheme via piecewise polyhedral relaxations with a guarantee of global convergence

Upon Alpine's convergence, for a given relative gap tolerance ε, the user is guaranteed that the global optimal solution is in the ε-neighborhood of the solution found by the solver.

Installation

Install Alpine using the Julia package manager:

import Pkg
 Pkg.add("Alpine")

Usage with JuMP

Use Alpine with JuMP as follows:

using JuMP, Alpine, Ipopt, HiGHS
 ipopt = optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 0)
 highs = optimizer_with_attributes(HiGHS.Optimizer, "output_flag" => false)
@@ -46,4 +46,4 @@
   author={Kim, Jongeun and Richard, Jean-Philippe P. and Tawarmalani, Mohit},
   eprinttype={Optimization Online},
   date={2022}
-}
+}
diff --git a/dev/packages/AmplNLWriter/index.html b/dev/packages/AmplNLWriter/index.html index 5f6686bd2ca..cc412b7fad8 100644 --- a/dev/packages/AmplNLWriter/index.html +++ b/dev/packages/AmplNLWriter/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

AmplNLWriter.jl

Build Status MINLPTests codecov

AmplNLWriter.jl is an interface between MathOptInterface.jl and AMPL-enabled solvers.

Affiliation

This wrapper is maintained by the JuMP community and has no official connection with the AMPL modeling language or AMPL Optimization Inc.

Installation

Install AmplNLWriter using Pkg.add:

import Pkg
+

AmplNLWriter.jl

Build Status MINLPTests codecov

AmplNLWriter.jl is an interface between MathOptInterface.jl and AMPL-enabled solvers.

Affiliation

This wrapper is maintained by the JuMP community and has no official connection with the AMPL modeling language or AMPL Optimization Inc.

Installation

Install AmplNLWriter using Pkg.add:

import Pkg
 Pkg.add("AmplNLWriter")

Use with JuMP

AmplNLWriter requires an AMPL compatible solver binary to function.

Pass a string pointing to any AMPL-compatible solver binary as the first positional argument to AmplNLWriter.

For example, if the bonmin executable is on the system path, use:

using JuMP, AmplNLWriter
 model = Model(() -> AmplNLWriter.Optimizer("bonmin"))

If the solver is not on the system path, pass the full path to the solver:

using JuMP, AmplNLWriter
 model = Model(() -> AmplNLWriter.Optimizer("/Users/Oscar/ampl.macos64/bonmin"))

Precompiled binaries

To simplify the process of installing solver binaries, a number of Julia packages provide precompiled binaries that are compatible with AmplNLWriter. These are generally the name of the solver, followed by _jll. For example, bomin is provided by the Bonmin_jll package.

To call Bonmin via AmplNLWriter.jl, install the Bonmin_jll package, then run:

using JuMP, AmplNLWriter, Bonmin_jll
@@ -12,4 +12,4 @@
 import Bonmin_jll
 model = Model(() -> AmplNLWriter.Optimizer(Bonmin_jll.amplexe))
 set_attribute(model, "bonmin.nlp_log_level", 0)

opt files

Some options need to be specified via an .opt file.

This file must be located in the current working directory whenever the model is solved.

The .opt file must be named after the name of the solver, for example, bonmin.opt, and each line must contain an option name and the desired value, separated by a space.

For example, to set the absolute and relative tolerances in Couenne to 1 and 0.05 respectively, the couenne.opt file should contain:

allowable_gap 1
-allowable_fraction_gap 0.05
+allowable_fraction_gap 0.05
diff --git a/dev/packages/BARON/index.html b/dev/packages/BARON/index.html index e22e2886056..e8c455e1a48 100644 --- a/dev/packages/BARON/index.html +++ b/dev/packages/BARON/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

BARON.jl

Build Status codecov

BARON.jl is a wrapper for BARON by The Optimization Firm.

Affiliation

This wrapper is maintained by the JuMP community and is not officially supported by The Optimization Firm.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

BARON.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must obtain a license from The Optimization Firm, although a small trial version is available for free.

Installation

First, download a copy of the BARON solver and unpack the executable in a location of your choosing.

Once installed, set the BARON_EXEC environment variable pointing to the BARON executable (full path, including file name as it differs across platforms), and run Pkg.add("BARON"). For example:

ENV["BARON_EXEC"] = "/path/to/baron.exe"
+

BARON.jl

Build Status codecov

BARON.jl is a wrapper for BARON by The Optimization Firm.

Affiliation

This wrapper is maintained by the JuMP community and is not officially supported by The Optimization Firm.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

BARON.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must obtain a license from The Optimization Firm, although a small trial version is available for free.

Installation

First, download a copy of the BARON solver and unpack the executable in a location of your choosing.

Once installed, set the BARON_EXEC environment variable pointing to the BARON executable (full path, including file name as it differs across platforms), and run Pkg.add("BARON"). For example:

ENV["BARON_EXEC"] = "/path/to/baron.exe"
 using Pkg
 Pkg.add("BARON")

The baronlice.txt license file should be placed in the same directory as the BARON executable, or in your current working directory.

Use with JuMP

using JuMP, BARON
-model = Model(BARON.Optimizer)

MathOptInterface API

The BARON optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

+model = Model(BARON.Optimizer)

MathOptInterface API

The BARON optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

diff --git a/dev/packages/BilevelJuMP/index.html b/dev/packages/BilevelJuMP/index.html index 5ab4f5861f0..197c7845a91 100644 --- a/dev/packages/BilevelJuMP/index.html +++ b/dev/packages/BilevelJuMP/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

BilevelJuMP.jl

Build Status Codecov branch Docs dev Docs stable

BilevelJuMP.jl is a JuMP extension for modeling and solving bilevel optimization problems.

License

BilevelJuMP.jl is licensed under the MIT license.

Documentation

You can find the documentation at https://joaquimg.github.io/BilevelJuMP.jl/stable/.

Help

If you need help, please open a GitHub issue.

Example

Install

import Pkg
+

BilevelJuMP.jl

Build Status Codecov branch Docs dev Docs stable

BilevelJuMP.jl is a JuMP extension for modeling and solving bilevel optimization problems.

License

BilevelJuMP.jl is licensed under the MIT license.

Documentation

You can find the documentation at https://joaquimg.github.io/BilevelJuMP.jl/stable/.

Help

If you need help, please open a GitHub issue.

Example

Install

import Pkg
 Pkg.add("BilevelJuMP")
 Pkg.add("HiGHS")

Run

using BilevelJuMP, HiGHS
 
@@ -34,4 +34,4 @@
 
 objective_value(model) # = 3 * (3.5 * 8/15) + 8/15 # = 6.13...
 value(x) # = 3.5 * 8/15 # = 1.86...
-value(y) # = 8/15 # = 0.53...
+value(y) # = 8/15 # = 0.53...
diff --git a/dev/packages/CDCS/index.html b/dev/packages/CDCS/index.html index 06c3f5348ae..1e23d7d3dab 100644 --- a/dev/packages/CDCS/index.html +++ b/dev/packages/CDCS/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

CDCS.jl

CDCS.jl is a wrapper for the CDCS solver.

The wrapper has two components:

  • an exported cdcs function that is a thin wrapper on top of the cdcs MATLAB function
  • an interface to MathOptInterface

License

CDCS.jl is licensed under the MIT license.

The underlying solver oxfordcontrol/CDCS is licensed under the LGPL v3 license.

In addition, CDCS requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Installation

First, make sure that you satisfy the requirements of the MATLAB.jl Julia package and that the CDCS software is installed in your MATLAB™ installation.

Then, install CDCS.jl using Pkg.add:

import Pkg
+

CDCS.jl

CDCS.jl is a wrapper for the CDCS solver.

The wrapper has two components:

  • an exported cdcs function that is a thin wrapper on top of the cdcs MATLAB function
  • an interface to MathOptInterface

License

CDCS.jl is licensed under the MIT license.

The underlying solver oxfordcontrol/CDCS is licensed under the LGPL v3 license.

In addition, CDCS requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Installation

First, make sure that you satisfy the requirements of the MATLAB.jl Julia package and that the CDCS software is installed in your MATLAB™ installation.

Then, install CDCS.jl using Pkg.add:

import Pkg
 Pkg.add("CDCS")

Use with JuMP

To use CDCS with JuMP, do:

using JuMP, CDCS
 model = Model(CDCS.Optimizer)
 set_attribute(model, "verbose", 0)

Troubleshooting

If you get the error:

Undefined function or variable 'cdcs'.
@@ -27,4 +27,4 @@
            mat"cdcsInstall"
        end
 
-julia> mat"savepath"
+julia> mat"savepath"
diff --git a/dev/packages/CDDLib/index.html b/dev/packages/CDDLib/index.html index 267aa533bbd..f584aa5c4e1 100644 --- a/dev/packages/CDDLib/index.html +++ b/dev/packages/CDDLib/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

CDDLib

CDDLib.jl is a wrapper for cddlib.

CDDLib.jl can be used with C API of cddlib, the higher level interface of Polyhedra.jl, or as a linear programming solver with JuMP or MathOptInterface.

Problem description

As written in the README of cddlib:

The C-library cddlib is a C implementation of the Double Description Method of Motzkin et al. for generating all vertices (that is, extreme points) and extreme rays of a general convex polyhedron in R^d given by a system of linear inequalities:

P = { x=(x1, ..., xd)^T :  b - A  x  >= 0 }

where A is a given m x d real matrix, b is a given m-vector and 0 is the m-vector of all zeros.

The program can be used for the reverse operation (that is, convex hull computation). This means that one can move back and forth between an inequality representation and a generator (that is, vertex and ray) representation of a polyhedron with cdd. Also, cdd can solve a linear programming problem, that is, a problem of maximizing and minimizing a linear function over P.

License

CDDLib.jl is licensed under the GPL v2 license.

The underlying solver, cddlib/cddlib is also licensed under the GPL v2 license.

Installation

Install CDDLib.jl using the Julia package manager:

import Pkg
+

CDDLib

CDDLib.jl is a wrapper for cddlib.

CDDLib.jl can be used with C API of cddlib, the higher level interface of Polyhedra.jl, or as a linear programming solver with JuMP or MathOptInterface.

Problem description

As written in the README of cddlib:

The C-library cddlib is a C implementation of the Double Description Method of Motzkin et al. for generating all vertices (that is, extreme points) and extreme rays of a general convex polyhedron in R^d given by a system of linear inequalities:

P = { x=(x1, ..., xd)^T :  b - A  x  >= 0 }

where A is a given m x d real matrix, b is a given m-vector and 0 is the m-vector of all zeros.

The program can be used for the reverse operation (that is, convex hull computation). This means that one can move back and forth between an inequality representation and a generator (that is, vertex and ray) representation of a polyhedron with cdd. Also, cdd can solve a linear programming problem, that is, a problem of maximizing and minimizing a linear function over P.

License

CDDLib.jl is licensed under the GPL v2 license.

The underlying solver, cddlib/cddlib is also licensed under the GPL v2 license.

Installation

Install CDDLib.jl using the Julia package manager:

import Pkg
 Pkg.add("CDDLib")

Building the package will download binaries of cddlib that are provided by cddlib_jll.jl.

Use with JuMP

Use CDDLib.Optimizer{Float64} to use CDDLib.jl with JuMP:

using JuMP, CDDLib
 model = Model(CDDLib.Optimizer{Float64})

When using CDDLib.jl with MathOptInterface, you can pass a different number type:

using MathOptInterface, CDDLib
-model = CDDLib.Optimizer{Rational{BigInt}}()

Debugging

CDDLib.jl uses two global Boolean variables to enable debugging outputs: debug and log.

You can query the value of debug and log with get_debug and get_log, and set their values with set_debug and set_log.

+model = CDDLib.Optimizer{Rational{BigInt}}()

Debugging

CDDLib.jl uses two global Boolean variables to enable debugging outputs: debug and log.

You can query the value of debug and log with get_debug and get_log, and set their values with set_debug and set_log.

diff --git a/dev/packages/COPT/index.html b/dev/packages/COPT/index.html index 77bf085d695..cd01f8f1461 100644 --- a/dev/packages/COPT/index.html +++ b/dev/packages/COPT/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

COPT.jl

COPT.jl is a wrapper for the COPT (Cardinal Optimizer), a mathematical optimization solver for large-scale optimization problems.

COPT includes high-performance solvers for LP, MIP, SOCP, convex QP/QCP and SDP.

License

COPT.jl is licensed under the MIT license.

The underlying solver is a closed-source commercial product for which you must obtain a license.

Note

When COPT is upgraded to a newer version, you may see an error message such as ERROR: COPT error 4: Unable to create COPT environment, which indicates that you will need to reapply and upgrade your COPT license files as well.

Installation

Install COPT using the Julia package manager

import Pkg
+

COPT.jl

COPT.jl is a wrapper for the COPT (Cardinal Optimizer), a mathematical optimization solver for large-scale optimization problems.

COPT includes high-performance solvers for LP, MIP, SOCP, convex QP/QCP and SDP.

License

COPT.jl is licensed under the MIT license.

The underlying solver is a closed-source commercial product for which you must obtain a license.

Note

When COPT is upgraded to a newer version, you may see an error message such as ERROR: COPT error 4: Unable to create COPT environment, which indicates that you will need to reapply and upgrade your COPT license files as well.

Installation

Install COPT using the Julia package manager

import Pkg
 Pkg.add("COPT")

When there is no local version of COPT installed, installing COPT.jl will automatically download the necessary solver binaries.

Without a license, you can solve small models for non-commercial purpose. We strongly recommend that you apply for a license by following the link above.

Note

MacOS Apple M1/ARM: on MacOS with Apple M1 chips, Intel based programs can run via Rosetta. When you installed the COPT binaries manually, then please make sure that the COPT build matches the Julia build. We recommend the Intel based COPT and Julia build, as the Apple M1/ARM build of Julia is experimental.

Use with JuMP

To use COPT with JuMP, use COPT.Optimizer:

using JuMP
 using COPT
 model = Model(COPT.Optimizer)
@@ -39,4 +39,4 @@
 @show value.(X)
 @show value.(z)
 @show shadow_price(c1)
-@show shadow_price(c2)
+@show shadow_price(c2)
diff --git a/dev/packages/COSMO/index.html b/dev/packages/COSMO/index.html index 9c8d3afdd84..86ae5fb04bc 100644 --- a/dev/packages/COSMO/index.html +++ b/dev/packages/COSMO/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -
+

@@ -34,4 +34,4 @@ publisher = {Springer}, doi = {10.1007/s10957-021-01896-x}, url = {https://doi.org/10.1007/s10957-021-01896-x} -}

The article is available under Open Access here.

Contributing

  • Contributions are always welcome. Our style guide can be found here.
  • Current issues, tasks and future ideas are listed in Issues. Please report any issues or bugs that you encounter.
  • As an open source project we are also interested in any projects and applications that use COSMO. Please let us know by opening a GitHub issue.

Python - Interface

COSMO can also be called from Python. Take a look at: cosmo-python

Licence 🔍

This project is licensed under the Apache License - see the LICENSE.md file for details.

+}

The article is available under Open Access here.

Contributing

  • Contributions are always welcome. Our style guide can be found here.
  • Current issues, tasks and future ideas are listed in Issues. Please report any issues or bugs that you encounter.
  • As an open source project we are also interested in any projects and applications that use COSMO. Please let us know by opening a GitHub issue.

Python - Interface

COSMO can also be called from Python. Take a look at: cosmo-python

Licence 🔍

This project is licensed under the Apache License - see the LICENSE.md file for details.

diff --git a/dev/packages/CPLEX/index.html b/dev/packages/CPLEX/index.html index 0fd89c73da3..9364ac7184c 100644 --- a/dev/packages/CPLEX/index.html +++ b/dev/packages/CPLEX/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

CPLEX.jl

Build Status codecov

CPLEX.jl is a wrapper for the IBM® ILOG® CPLEX® Optimization Studio.

CPLEX.jl has two components:

The C API can be accessed via CPLEX.CPXxx functions, where the names and arguments are identical to the C API. See the CPLEX documentation for details.

Affiliation

This wrapper is maintained by the JuMP community and is not officially supported by IBM. However, we thank IBM for providing us with a CPLEX license to test CPLEX.jl on GitHub. If you are a commercial customer interested in official support for CPLEX in Julia, let them know.

License

CPLEX.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must purchase a license.

Free CPLEX licenses are available for academics and students.

Installation

CPLEX.jl requires CPLEX version 12.10, 20.1, or 22.1.

First, obtain a license of CPLEX and install CPLEX solver, following the instructions on IBM's website.

Once installed, set the CPLEX_STUDIO_BINARIES environment variable as appropriate and run Pkg.add("CPLEX"). For example:

# On Windows, this might be:
+

CPLEX.jl

Build Status codecov

CPLEX.jl is a wrapper for the IBM® ILOG® CPLEX® Optimization Studio.

CPLEX.jl has two components:

The C API can be accessed via CPLEX.CPXxx functions, where the names and arguments are identical to the C API. See the CPLEX documentation for details.

Affiliation

This wrapper is maintained by the JuMP community and is not officially supported by IBM. However, we thank IBM for providing us with a CPLEX license to test CPLEX.jl on GitHub. If you are a commercial customer interested in official support for CPLEX in Julia, let them know.

License

CPLEX.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must purchase a license.

Free CPLEX licenses are available for academics and students.

Installation

CPLEX.jl requires CPLEX version 12.10, 20.1, or 22.1.

First, obtain a license of CPLEX and install CPLEX solver, following the instructions on IBM's website.

Once installed, set the CPLEX_STUDIO_BINARIES environment variable as appropriate and run Pkg.add("CPLEX"). For example:

# On Windows, this might be:
 ENV["CPLEX_STUDIO_BINARIES"] = "C:\\Program Files\\CPLEX_Studio1210\\cplex\\bin\\x86-64_win\\"
 # On OSX, this might be:
 ENV["CPLEX_STUDIO_BINARIES"] = "/Applications/CPLEX_Studio1210/cplex/bin/x86-64_osx/"
@@ -163,4 +163,4 @@
     x_optimal = value.(x)
     y_optimal = value.(y)
     println("x: $(x_optimal), y: $(y_optimal)")
-end
+end
diff --git a/dev/packages/CSDP/index.html b/dev/packages/CSDP/index.html index 277b8194ee9..2e5a6de00bd 100644 --- a/dev/packages/CSDP/index.html +++ b/dev/packages/CSDP/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

CSDP.jl

Build Status codecov

CSDP.jl is a wrapper for the COIN-OR SemiDefinite Programming solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

The original algorithm is described by B. Borchers (1999). CSDP, A C Library for Semidefinite Programming. Optimization Methods and Software. 11(1), 613-623. [preprint]

License

CSDP.jl is licensed under the MIT License.

The underlying solver, coin-or/Csdp, is licensed under the Eclipse public license.

Installation

Install CSDP using Pkg.add:

import Pkg
+

CSDP.jl

Build Status codecov

CSDP.jl is a wrapper for the COIN-OR SemiDefinite Programming solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

The original algorithm is described by B. Borchers (1999). CSDP, A C Library for Semidefinite Programming. Optimization Methods and Software. 11(1), 613-623. [preprint]

License

CSDP.jl is licensed under the MIT License.

The underlying solver, coin-or/Csdp, is licensed under the Eclipse public license.

Installation

Install CSDP using Pkg.add:

import Pkg
 Pkg.add("CSDP")

In addition to installing the CSDP.jl package, this will also download and install the CSDP binaries. You do not need to install CSDP separately.

Use with JuMP

To use CSDP with JuMP, use CSDP.Optimizer:

using JuMP, CSDP
 model = Model(CSDP.Optimizer)
 set_attribute(model, "maxiter", 1000)

MathOptInterface API

The CSDP optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

The CSDP options are listed in the table below.

NameDefault ValueExplanation
axtol1.0e-8Tolerance for primal feasibility
atytol1.0e-8Tolerance for dual feasibility
objtol1.0e-8Tolerance for relative duality gap
pinftol1.0e8Tolerance for determining primal infeasibility
dinftol1.0e8Tolerance for determining dual infeasibility
maxiter100Limit for the total number of iterations
minstepfrac0.90The minstepfrac and maxstepfrac parameters determine how close to the edge of the feasible region CSDP will step
maxstepfrac0.97The minstepfrac and maxstepfrac parameters determine how close to the edge of the feasible region CSDP will step
minstepp1.0e-8If the primal step is shorter than minstepp then CSDP declares a line search failure
minstepd1.0e-8If the dual step is shorter than minstepd then CSDP declares a line search failure
usexzgap1If usexzgap is 0 then CSDP will use the objective duality gap d - p instead of the XY duality gap ⟨Z, X⟩
tweakgap0If tweakgap is set to 1, and usexzgap is set to 0, then CSDP will attempt to "fix" negative duality gaps
affine0If affine is set to 1, then CSDP will take only primal-dual affine steps and not make use of the barrier term. This can be useful for some problems that do not have feasible solutions that are strictly in the interior of the cone of semidefinite matrices
perturbobj1The perturbobj parameter determines whether the objective function will be perturbed to help deal with problems that have unbounded optimal solution sets. If perturbobj is 0, then the objective will not be perturbed. If perturbobj is 1, then the objective function will be perturbed by a default amount. Larger values of perturbobj (for example, 100) increase the size of the perturbation. This can be helpful in solving some difficult problems.
fastmode0The fastmode parameter determines whether or not CSDP will skip certain time consuming operations that slightly improve the accuracy of the solutions. If fastmode is set to 1, then CSDP may be somewhat faster, but also somewhat less accurate
printlevel1The printlevel parameter determines how much debugging information is output. Use a printlevel of 0 for no output and a printlevel of 1 for normal output. Higher values of printlevel will generate more debugging output

Problem representation

The primal is represented internally by CSDP as follows:

max ⟨C, X⟩
       A(X) = a
          X ⪰ 0

where A(X) = [⟨A_1, X⟩, ..., ⟨A_m, X⟩]. The corresponding dual is:

min ⟨a, y⟩
      A'(y) - C = Z
-             Z ⪰ 0

where A'(y) = y_1A_1 + ... + y_mA_m

Termination criteria

CSDP will terminate successfully (or partially) in the following cases:

  • If CSDP finds X, Z ⪰ 0 such that the following 3 tolerances are satisfied:
    • primal feasibility tolerance: ||A(x) - a||_2 / (1 + ||a||_2) < axtol
    • dual feasibility tolerance: ||A'(y) - C - Z||_F / (1 + ||C||_F) < atytol
    • relative duality gap tolerance: gap / (1 + |⟨a, y⟩| + |⟨C, X⟩|) < objtol
      • objective duality gap: if usexygap is 0, gap = ⟨a, y⟩ - ⟨C, X⟩
      • XY duality gap: if usexygap is 1, gap = ⟨Z, X⟩
    then it returns 0.
  • If CSDP finds y and Z ⪰ 0 such that -⟨a, y⟩ / ||A'(y) - Z||_F > pinftol, it returns 1 with y such that ⟨a, y⟩ = -1.
  • If CSDP finds X ⪰ 0 such that ⟨C, X⟩ / ||A(X)||_2 > dinftol, it returns 2 with X such that ⟨C, X⟩ = 1.
  • If CSDP finds X, Z ⪰ 0 such that the following 3 tolerances are satisfied with 1000*axtol, 1000*atytol and 1000*objtol but at least one of them is not satisfied with axtol, atytol and objtol and cannot make progress, then it returns 3.

In addition, if the printlevel option is at least 1, the following will be printed:

  • If the return code is 1, CSDP will print ⟨a, y⟩ and ||A'(y) - Z||_F
  • If the return code is 2, CSDP will print ⟨C, X⟩ and ||A(X)||_F
  • Otherwise, CSDP will print
    • the primal/dual objective value,
    • the relative primal/dual infeasibility,
    • the objective duality gap ⟨a, y⟩ - ⟨C, X⟩ and objective relative duality gap (⟨a, y⟩ - ⟨C, X⟩) / (1 + |⟨a, y⟩| + |⟨C, X⟩|),
    • the XY duality gap ⟨Z, X⟩ and XY relative duality gap ⟨Z, X⟩ / (1 + |⟨a, y⟩| + |⟨C, X⟩|)
    • and the DIMACS error measures.

In theory, for feasible primal and dual solutions, ⟨a, y⟩ - ⟨C, X⟩ = ⟨Z, X⟩, so the objective and XY duality gap should be equivalent. However, in practice, there are sometimes solution which satisfy primal and dual feasibility tolerances but have objective duality gap which are not close to XY duality gap. In some cases, the objective duality gap may even become negative (hence the tweakgap option). This is the reason usexygap is 1 by default.

CSDP considers that X ⪰ 0 (resp. Z ⪰ 0) is satisfied when the Cholesky factorizations can be computed. In practice, this is somewhat more conservative than simply requiring all eigenvalues to be nonnegative.

Status

The table below shows how the different CSDP statuses are converted to the MathOptInterface statuses.

CSDP codeStateDescriptionMOI status
0SuccessSDP solvedMOI.OPTIMAL
1SuccessThe problem is primal infeasible, and we have a certificateMOI.INFEASIBLE
2SuccessThe problem is dual infeasible, and we have a certificateMOI.DUAL_INFEASIBLE
3Partial SuccessA solution has been found, but full accuracy was not achievedMOI.ALMOST_OPTIMAL
4FailureMaximum iterations reachedMOI.ITERATION_LIMIT
5FailureStuck at edge of primal feasibilityMOI.SLOW_PROGRESS
6FailureStuck at edge of dual infeasibilityMOI.SLOW_PROGRESS
7FailureLack of progressMOI.SLOW_PROGRESS
8FailureX, Z, or O was singularMOI.NUMERICAL_ERROR
9FailureDetected NaN or Inf valuesMOI.NUMERICAL_ERROR
+ Z ⪰ 0

where A'(y) = y_1A_1 + ... + y_mA_m

Termination criteria

CSDP will terminate successfully (or partially) in the following cases:

  • If CSDP finds X, Z ⪰ 0 such that the following 3 tolerances are satisfied:
    • primal feasibility tolerance: ||A(x) - a||_2 / (1 + ||a||_2) < axtol
    • dual feasibility tolerance: ||A'(y) - C - Z||_F / (1 + ||C||_F) < atytol
    • relative duality gap tolerance: gap / (1 + |⟨a, y⟩| + |⟨C, X⟩|) < objtol
      • objective duality gap: if usexygap is 0, gap = ⟨a, y⟩ - ⟨C, X⟩
      • XY duality gap: if usexygap is 1, gap = ⟨Z, X⟩
    then it returns 0.
  • If CSDP finds y and Z ⪰ 0 such that -⟨a, y⟩ / ||A'(y) - Z||_F > pinftol, it returns 1 with y such that ⟨a, y⟩ = -1.
  • If CSDP finds X ⪰ 0 such that ⟨C, X⟩ / ||A(X)||_2 > dinftol, it returns 2 with X such that ⟨C, X⟩ = 1.
  • If CSDP finds X, Z ⪰ 0 such that the following 3 tolerances are satisfied with 1000*axtol, 1000*atytol and 1000*objtol but at least one of them is not satisfied with axtol, atytol and objtol and cannot make progress, then it returns 3.

In addition, if the printlevel option is at least 1, the following will be printed:

  • If the return code is 1, CSDP will print ⟨a, y⟩ and ||A'(y) - Z||_F
  • If the return code is 2, CSDP will print ⟨C, X⟩ and ||A(X)||_F
  • Otherwise, CSDP will print
    • the primal/dual objective value,
    • the relative primal/dual infeasibility,
    • the objective duality gap ⟨a, y⟩ - ⟨C, X⟩ and objective relative duality gap (⟨a, y⟩ - ⟨C, X⟩) / (1 + |⟨a, y⟩| + |⟨C, X⟩|),
    • the XY duality gap ⟨Z, X⟩ and XY relative duality gap ⟨Z, X⟩ / (1 + |⟨a, y⟩| + |⟨C, X⟩|)
    • and the DIMACS error measures.

In theory, for feasible primal and dual solutions, ⟨a, y⟩ - ⟨C, X⟩ = ⟨Z, X⟩, so the objective and XY duality gap should be equivalent. However, in practice, there are sometimes solution which satisfy primal and dual feasibility tolerances but have objective duality gap which are not close to XY duality gap. In some cases, the objective duality gap may even become negative (hence the tweakgap option). This is the reason usexygap is 1 by default.

CSDP considers that X ⪰ 0 (resp. Z ⪰ 0) is satisfied when the Cholesky factorizations can be computed. In practice, this is somewhat more conservative than simply requiring all eigenvalues to be nonnegative.

Status

The table below shows how the different CSDP statuses are converted to the MathOptInterface statuses.

CSDP codeStateDescriptionMOI status
0SuccessSDP solvedMOI.OPTIMAL
1SuccessThe problem is primal infeasible, and we have a certificateMOI.INFEASIBLE
2SuccessThe problem is dual infeasible, and we have a certificateMOI.DUAL_INFEASIBLE
3Partial SuccessA solution has been found, but full accuracy was not achievedMOI.ALMOST_OPTIMAL
4FailureMaximum iterations reachedMOI.ITERATION_LIMIT
5FailureStuck at edge of primal feasibilityMOI.SLOW_PROGRESS
6FailureStuck at edge of dual infeasibilityMOI.SLOW_PROGRESS
7FailureLack of progressMOI.SLOW_PROGRESS
8FailureX, Z, or O was singularMOI.NUMERICAL_ERROR
9FailureDetected NaN or Inf valuesMOI.NUMERICAL_ERROR
diff --git a/dev/packages/Cbc/index.html b/dev/packages/Cbc/index.html index e2817d65b08..0d10d886c23 100644 --- a/dev/packages/Cbc/index.html +++ b/dev/packages/Cbc/index.html @@ -3,10 +3,10 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Cbc.jl

Build Status codecov

Cbc.jl is a wrapper for the COIN-OR Branch and Cut (Cbc) solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

License

Cbc.jl is licensed under the MIT License.

The underlying solver, coin-or/Cbc, is licensed under the Eclipse public license.

Installation

Install Cbc using Pkg.add:

import Pkg
+

Cbc.jl

Build Status codecov

Cbc.jl is a wrapper for the COIN-OR Branch and Cut (Cbc) solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

License

Cbc.jl is licensed under the MIT License.

The underlying solver, coin-or/Cbc, is licensed under the Eclipse public license.

Installation

Install Cbc using Pkg.add:

import Pkg
 Pkg.add("Cbc")

In addition to installing the Cbc.jl package, this will also download and install the Cbc binaries. You do not need to install Cbc separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use Cbc with JuMP, use Cbc.Optimizer:

using JuMP, Cbc
 model = Model(Cbc.Optimizer)
 set_attribute(model, "logLevel", 1)

MathOptInterface API

The COIN Branch-and-Cut (Cbc) optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

List of supported optimizer attributes:

List of supported variable attributes:

List of supported constraint attributes:

Options

Options are, unfortunately, not well documented.

The following options are likely to be the most useful:

ParameterExampleExplanation
seconds60.0Solution timeout limit
logLevel2Set to 0 to disable solution output
maxSolutions1Terminate after this many feasible solutions have been found
maxNodes1Terminate after this many branch-and-bound nodes have been evaluated
allowableGap0.05Terminate after optimality gap is less than this value (on an absolute scale)
ratioGap0.05Terminate after optimality gap is smaller than this relative fraction
threads1Set the number of threads to use for parallel branch & bound

The complete list of parameters can be found by running the cbc executable and typing ? at the prompt.

Start the cbc executable from Julia as follows:

using Cbc_jll
 Cbc_jll.cbc() do exe
     run(`$(exe)`)
-end
+end
diff --git a/dev/packages/Clarabel/index.html b/dev/packages/Clarabel/index.html index dfe83cf5822..9d3fde1c448 100644 --- a/dev/packages/Clarabel/index.html +++ b/dev/packages/Clarabel/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

+

@@ -33,4 +33,4 @@

eprint={2405.12762}, archivePrefix={arXiv}, primaryClass={math.OC} -}

License 🔍

This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.

+}

License 🔍

This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.

diff --git a/dev/packages/Clp/index.html b/dev/packages/Clp/index.html index 508a85600d3..f1a7bf639b9 100644 --- a/dev/packages/Clp/index.html +++ b/dev/packages/Clp/index.html @@ -3,8 +3,8 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Clp.jl

Build Status codecov

Clp.jl is a wrapper for the COIN-OR Linear Programming solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Clp.jl is licensed under the MIT License.

The underlying solver, coin-or/Clp, is licensed under the Eclipse public license.

Installation

Install Clp using Pkg.add:

import Pkg
+

Clp.jl

Build Status codecov

Clp.jl is a wrapper for the COIN-OR Linear Programming solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Clp.jl is licensed under the MIT License.

The underlying solver, coin-or/Clp, is licensed under the Eclipse public license.

Installation

Install Clp using Pkg.add:

import Pkg
 Pkg.add("Clp")

In addition to installing the Clp.jl package, this will also download and install the Clp binaries. You do not need to install Clp separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use Clp with JuMP, use Clp.Optimizer:

using JuMP, Clp
 model = Model(Clp.Optimizer)
 set_attribute(model, "LogLevel", 1)
-set_attribute(model, "Algorithm", 4)

MathOptInterface API

The Clp optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

Options are, unfortunately, not well documented.

The following options are likely to be the most useful:

ParameterExampleExplanation
PrimalTolerance1e-7Primal feasibility tolerance
DualTolerance1e-7Dual feasibility tolerance
DualObjectiveLimit1e308When using dual simplex (where the objective is monotonically changing), terminate when the objective exceeds this limit
MaximumIterations2147483647Terminate after performing this number of simplex iterations
MaximumSeconds-1.0Terminate after this many seconds have passed. A negative value means no time limit
LogLevel1Set to 1, 2, 3, or 4 for increasing output. Set to 0 to disable output
PresolveType0Set to 1 to disable presolve
SolveType5Solution method: dual simplex (0), primal simplex (1), sprint (2), barrier with crossover (3), barrier without crossover (4), automatic (5)
InfeasibleReturn0Set to 1 to return as soon as the problem is found to be infeasible (by default, an infeasibility proof is computed as well)
Scaling30 -off, 1 equilibrium, 2 geometric, 3 auto, 4 dynamic(later)
Perturbation100switch on perturbation (50), automatic (100), don't try perturbing (102)

C API

The C API can be accessed via Clp.Clp_XXX functions, where the names and arguments are identical to the C API.

+set_attribute(model, "Algorithm", 4)

MathOptInterface API

The Clp optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

Options are, unfortunately, not well documented.

The following options are likely to be the most useful:

ParameterExampleExplanation
PrimalTolerance1e-7Primal feasibility tolerance
DualTolerance1e-7Dual feasibility tolerance
DualObjectiveLimit1e308When using dual simplex (where the objective is monotonically changing), terminate when the objective exceeds this limit
MaximumIterations2147483647Terminate after performing this number of simplex iterations
MaximumSeconds-1.0Terminate after this many seconds have passed. A negative value means no time limit
LogLevel1Set to 1, 2, 3, or 4 for increasing output. Set to 0 to disable output
PresolveType0Set to 1 to disable presolve
SolveType5Solution method: dual simplex (0), primal simplex (1), sprint (2), barrier with crossover (3), barrier without crossover (4), automatic (5)
InfeasibleReturn0Set to 1 to return as soon as the problem is found to be infeasible (by default, an infeasibility proof is computed as well)
Scaling30 -off, 1 equilibrium, 2 geometric, 3 auto, 4 dynamic(later)
Perturbation100switch on perturbation (50), automatic (100), don't try perturbing (102)

C API

The C API can be accessed via Clp.Clp_XXX functions, where the names and arguments are identical to the C API.

diff --git a/dev/packages/DAQP/index.html b/dev/packages/DAQP/index.html index cc78b550997..ddff58de7a5 100644 --- a/dev/packages/DAQP/index.html +++ b/dev/packages/DAQP/index.html @@ -3,6 +3,6 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

DAQP.jl

DAQP.jl is a Julia wrapper for the Quadratic Programming solver DAQP.

License

DAQP.jl is licensed under the MIT license.

The underlying solver, darnstrom/daqp is licensed under the MIT license.

Installation

Install DAQP.jl using the Julia package manager:

import Pkg
+

DAQP.jl

DAQP.jl is a Julia wrapper for the Quadratic Programming solver DAQP.

License

DAQP.jl is licensed under the MIT license.

The underlying solver, darnstrom/daqp is licensed under the MIT license.

Installation

Install DAQP.jl using the Julia package manager:

import Pkg
 Pkg.add("DAQP")

Use with JuMP

To use DAQP with JuMP, do:

using JuMP, DAQP
-model = Model(DAQP.Optimizer)

Documentation

General information about the solver is available at https://darnstrom.github.io/daqp/, and specifics for the Julia interface are available at https://darnstrom.github.io/daqp/start/julia.

+model = Model(DAQP.Optimizer)

Documentation

General information about the solver is available at https://darnstrom.github.io/daqp/, and specifics for the Julia interface are available at https://darnstrom.github.io/daqp/start/julia.

diff --git a/dev/packages/DSDP/index.html b/dev/packages/DSDP/index.html index 97af6c7040d..9d30a5dacfa 100644 --- a/dev/packages/DSDP/index.html +++ b/dev/packages/DSDP/index.html @@ -3,9 +3,9 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

DSDP.jl

Build Status codecov

DSDP.jl is a wrapper for the DSDP solver.

It has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not an official project of the DSDP developers.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

Installation

Install DSDP as follows:

import Pkg
+

DSDP.jl

Build Status codecov

DSDP.jl is a wrapper for the DSDP solver.

It has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not an official project of the DSDP developers.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

Installation

Install DSDP as follows:

import Pkg
 Pkg.add("DSDP")

In addition to installing the DSDP.jl package, this will also download and install the DSDP binaries. You do not need to install DSDP separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use DSDP with JuMP, use DSDP.Optimizer:

using JuMP, DSDP
 model = Model(DSDP.Optimizer)

MathOptInterface API

The DSDP optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Compile your own binaries

In order to compile your own libdsdp.so to be used of DSDP.jl, use the following

OB_DIR=$(julia --project=. -e 'import OpenBLAS32_jll; println(OpenBLAS32_jll.OpenBLAS32_jll.artifact_dir)')
 OB="-L${LIBOB_DIR}/lib -lopenblas"
 make DSDPCFLAGS="-g -Wall -fPIC -DPIC" LAPACKBLAS="$OB" dsdplibrary
-make DSDPCFLAGS="-g -Wall -fPIC -DPIC" LAPACKBLAS="$OB" SH_LD="${CC} ${CFLAGS} -Wall -fPIC -DPIC -shared $OB" oshared
+make DSDPCFLAGS="-g -Wall -fPIC -DPIC" LAPACKBLAS="$OB" SH_LD="${CC} ${CFLAGS} -Wall -fPIC -DPIC -shared $OB" oshared
diff --git a/dev/packages/DiffOpt/index.html b/dev/packages/DiffOpt/index.html index 62ec4a4c3a6..c97cc9a9b33 100644 --- a/dev/packages/DiffOpt/index.html +++ b/dev/packages/DiffOpt/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

DiffOpt.jl

stable docs development docs Build Status Coverage

DiffOpt.jl is a package for differentiating convex optimization programs with respect to the program parameters. DiffOpt currently supports linear, quadratic, and conic programs.

License

DiffOpt.jl is licensed under the MIT License.

Installation

Install DiffOpt using Pkg.add:

import Pkg
+

DiffOpt.jl

stable docs development docs Build Status Coverage

DiffOpt.jl is a package for differentiating convex optimization programs with respect to the program parameters. DiffOpt currently supports linear, quadratic, and conic programs.

License

DiffOpt.jl is licensed under the MIT License.

Installation

Install DiffOpt using Pkg.add:

import Pkg
 Pkg.add("DiffOpt")

Documentation

The documentation for DiffOpt.jl includes a detailed description of the theory behind the package, along with examples, tutorials, and an API reference.

Use with JuMP

Use DiffOpt with JuMP by following this brief example:

using JuMP, DiffOpt, HiGHS
 # Create a model using the wrapper
 model = Model(() -> DiffOpt.diff_optimizer(HiGHS.Optimizer))
@@ -20,4 +20,4 @@
 # fetch the gradients
 grad_exp = MOI.get(model, DiffOpt.ReverseConstraintFunction(), cons)  # -3 x - 1
 constant(grad_exp)        # -1
-coefficient(grad_exp, x)  # -3

GSOC2020

DiffOpt began as a NumFOCUS sponsored Google Summer of Code (2020) project

+coefficient(grad_exp, x) # -3

GSOC2020

DiffOpt began as a NumFOCUS sponsored Google Summer of Code (2020) project

diff --git a/dev/packages/DisjunctiveProgramming/index.html b/dev/packages/DisjunctiveProgramming/index.html index 67b230716c0..d5a439729b8 100644 --- a/dev/packages/DisjunctiveProgramming/index.html +++ b/dev/packages/DisjunctiveProgramming/index.html @@ -3,9 +3,9 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Logo

DisjunctiveProgramming.jl is a JuMP extension for expressing and solving Generalized Disjunctive Programs. Generalized Disjunctive Programming (GDP) is a modeling paradigm for easily modeling logical conditions which can be reformulated into a variety of mixed-integer programs.

Current VersionDocumentationBuild StatusCitation
Build Status codecov.ioarXiv

DisjunctiveProgramming builds upon JuMP to add support GDP modeling objects which include:

  • Logical variables ($Y \in \{\text{False}, \text{True}\}$)
  • Disjunctions
  • Logical constraints (also known as propositions)
  • Cardinality constraints

It also supports automatic conversion of the GDP model into a regular mixed-integer JuMP model via a variety of reformulations which include:

  • Big-M
  • Hull
  • Indicator constraints

Moreover, DisjunctiveProgramming provides an extension API to easily add new reformulation methods.

License

InfiniteOpt is licensed under the MIT "Expat" license.

Installation

DisjunctiveProgramming.jl is a registered Julia package and can be installed by entering the following in the REPL.

julia> import Pkg; Pkg.add("DisjunctiveProgramming")

Documentation

Please visit our documentation pages to learn more.

Citing

arXiv

If you use DisjunctiveProgramming.jl in your research, we would greatly appreciate your citing it.

@article{perez2023disjunctiveprogramming,
+

Logo

DisjunctiveProgramming.jl is a JuMP extension for expressing and solving Generalized Disjunctive Programs. Generalized Disjunctive Programming (GDP) is a modeling paradigm for easily modeling logical conditions which can be reformulated into a variety of mixed-integer programs.

Current VersionDocumentationBuild StatusCitation
Build Status codecov.ioarXiv

DisjunctiveProgramming builds upon JuMP to add support GDP modeling objects which include:

  • Logical variables ($Y \in \{\text{False}, \text{True}\}$)
  • Disjunctions
  • Logical constraints (also known as propositions)
  • Cardinality constraints

It also supports automatic conversion of the GDP model into a regular mixed-integer JuMP model via a variety of reformulations which include:

  • Big-M
  • Hull
  • Indicator constraints

Moreover, DisjunctiveProgramming provides an extension API to easily add new reformulation methods.

License

InfiniteOpt is licensed under the MIT "Expat" license.

Installation

DisjunctiveProgramming.jl is a registered Julia package and can be installed by entering the following in the REPL.

julia> import Pkg; Pkg.add("DisjunctiveProgramming")

Documentation

Please visit our documentation pages to learn more.

Citing

arXiv

If you use DisjunctiveProgramming.jl in your research, we would greatly appreciate your citing it.

@article{perez2023disjunctiveprogramming,
   title={DisjunctiveProgramming. jl: Generalized Disjunctive Programming Models and Algorithms for JuMP},
   author={Perez, Hector D and Joshi, Shivank and Grossmann, Ignacio E},
   journal={arXiv preprint arXiv:2304.10492},
   year={2023}
-}
+}
diff --git a/dev/packages/Dualization/index.html b/dev/packages/Dualization/index.html index b4866fc3f28..c5e2a31c988 100644 --- a/dev/packages/Dualization/index.html +++ b/dev/packages/Dualization/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Dualization.jl

Build Status codecov DOI

Dualization.jl is an extension package for MathOptInterface.jl that formulates the dual of conic optimization problems.

Dualization.jl has two main features:

  • The Dualization.dualize function that computes the dual formulation of either a MathOptInterface.jl or a JuMP model.
  • The Dualization.dual_optimizer function that creates a MathOptInterface-compatible optimizer that solves the dual of the problem instead of the primal.

License

Dualization.jl is licensed under the MIT License.

Installation

Install Dualization using Pkg.add:

import Pkg
+

Dualization.jl

Build Status codecov DOI

Dualization.jl is an extension package for MathOptInterface.jl that formulates the dual of conic optimization problems.

Dualization.jl has two main features:

  • The Dualization.dualize function that computes the dual formulation of either a MathOptInterface.jl or a JuMP model.
  • The Dualization.dual_optimizer function that creates a MathOptInterface-compatible optimizer that solves the dual of the problem instead of the primal.

License

Dualization.jl is licensed under the MIT License.

Installation

Install Dualization using Pkg.add:

import Pkg
 Pkg.add("Dualization")

Use with JuMP

To compute the dual formulation of a JuMP model, use dualize:

using JuMP, Dualization
 model = Model()
 # ... build model ...
 dual_model = dualize(model)

To solve the dual formulation of a JuMP model, create a dual_optimizer:

using JuMP, Dualization, SCS
 model = Model(dual_optimizer(SCS.Optimizer))
 # ... build model ...
-optimize!(model)  # Solves the dual instead of the primal

Documentation

The documentation for Dualization.jl includes a detailed description of the dual reformulation, along with examples and an API reference.

+optimize!(model) # Solves the dual instead of the primal

Documentation

The documentation for Dualization.jl includes a detailed description of the dual reformulation, along with examples and an API reference.

diff --git a/dev/packages/EAGO/index.html b/dev/packages/EAGO/index.html index cae222ff9d5..5d727276cf4 100644 --- a/dev/packages/EAGO/index.html +++ b/dev/packages/EAGO/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

EAGO - Easy Advanced Global Optimization

EAGO is an open-source development environment for robust and global optimization in Julia. See the full README for more information.

PSOR LabCurrent VersionBuild StatusDocumentation
Build Status codecov

EAGO is a deterministic global optimizer designed to address a wide variety of optimization problems, emphasizing nonlinear programs (NLPs), by propagating McCormick relaxations along the factorable structure of each expression in the NLP. Most operators supported by modern automatic differentiation (AD) packages are supported by EAGO and a number utilities for sanitizing native Julia code and generating relaxations on a wide variety of user-defined functions have been included. Currently, EAGO supports problems that have a priori variable bounds defined and have differentiable constraints. That is, problems should be specified in the generic form below:

\[\begin{aligned} +

EAGO - Easy Advanced Global Optimization

EAGO is an open-source development environment for robust and global optimization in Julia. See the full README for more information.

PSOR LabCurrent VersionBuild StatusDocumentation
Build Status codecov

EAGO is a deterministic global optimizer designed to address a wide variety of optimization problems, emphasizing nonlinear programs (NLPs), by propagating McCormick relaxations along the factorable structure of each expression in the NLP. Most operators supported by modern automatic differentiation (AD) packages are supported by EAGO and a number utilities for sanitizing native Julia code and generating relaxations on a wide variety of user-defined functions have been included. Currently, EAGO supports problems that have a priori variable bounds defined and have differentiable constraints. That is, problems should be specified in the generic form below:

\[\begin{aligned} f^{*} = & \min_{\mathbf y \in Y \subset \mathbb R^{n_{y}}} f(\mathbf y) \\ {\rm s.t.} \; \; & \mathbf h(\mathbf y) = \mathbf 0 \\ & \mathbf g(\mathbf y) \leq \mathbf 0 \\ @@ -71,4 +71,4 @@ doi = {10.1080/10556788.2020.1786566}, URL = {https://doi.org/10.1080/10556788.2020.1786566}, eprint = {https://doi.org/10.1080/10556788.2020.1786566} -}

References

  1. Mitsos, A., Chachuat, B., and Barton, P.I. McCormick-based relaxations of algorithms. SIAM Journal on Optimization. 20(2): 573—601 (2009).
  2. Khan, K.A., Watson, H.A.J., and Barton, P.I. Differentiable McCormick relaxations. Journal of Global Optimization. 67(4): 687—729 (2017).
  3. Stuber, M.D., Scott, J.K., and Barton, P.I.: Convex and concave relaxations of implicit functions. Optimization Methods and Software 30(3): 424—460 (2015).
  4. Wechsung, A., Scott, J.K., Watson, H.A.J., and Barton, P.I. Reverse propagation of McCormick relaxations. Journal of Global Optimization 63(1): 1—36 (2015).
  5. Bracken, J., and McCormick, G.P. Selected Applications of Nonlinear Programming. John Wiley and Sons, New York (1968).
+}

References

  1. Mitsos, A., Chachuat, B., and Barton, P.I. McCormick-based relaxations of algorithms. SIAM Journal on Optimization. 20(2): 573—601 (2009).
  2. Khan, K.A., Watson, H.A.J., and Barton, P.I. Differentiable McCormick relaxations. Journal of Global Optimization. 67(4): 687—729 (2017).
  3. Stuber, M.D., Scott, J.K., and Barton, P.I.: Convex and concave relaxations of implicit functions. Optimization Methods and Software 30(3): 424—460 (2015).
  4. Wechsung, A., Scott, J.K., Watson, H.A.J., and Barton, P.I. Reverse propagation of McCormick relaxations. Journal of Global Optimization 63(1): 1—36 (2015).
  5. Bracken, J., and McCormick, G.P. Selected Applications of Nonlinear Programming. John Wiley and Sons, New York (1968).
diff --git a/dev/packages/ECOS/index.html b/dev/packages/ECOS/index.html index 44f4e84895a..8b19590ff28 100644 --- a/dev/packages/ECOS/index.html +++ b/dev/packages/ECOS/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

ECOS.jl

Build Status codecov

ECOS.jl is a wrapper for the ECOS solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a product of Embotech AG.

License

ECOS.jl is licensed under the MIT License.

The underlying solver, embotech/ecos, is licensed under the GPL v3 license.

Installation

Install ECOS.jl using Pkg.add:

import Pkg
+

ECOS.jl

Build Status codecov

ECOS.jl is a wrapper for the ECOS solver.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not a product of Embotech AG.

License

ECOS.jl is licensed under the MIT License.

The underlying solver, embotech/ecos, is licensed under the GPL v3 license.

Installation

Install ECOS.jl using Pkg.add:

import Pkg
 Pkg.add("ECOS")

In addition to installing the ECOS.jl package, this will also download and install the ECOS binaries. You do not need to install ECOS separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use ECOS with JuMP, use ECOS.Optimizer:

using JuMP, ECOS
 model = Model(ECOS.Optimizer)
-set_attribute(model, "maxit", 100)

MathOptInterface API

The ECOS optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

The following options are supported:

ParameterExplanation
gammascaling the final step length
deltaregularization parameter
epsregularization threshold
feastolprimal/dual infeasibility tolerance
abstolabsolute tolerance on duality gap
reltolrelative tolerance on duality gap
feastol_inaccprimal/dual infeasibility relaxed tolerance
abstol_inaccabsolute relaxed tolerance on duality gap
reltol_inaccrelative relaxed tolerance on duality gap
nitrefnumber of iterative refinement steps
maxitmaximum number of iterations
verboseverbosity bool for PRINTLEVEL < 3
+set_attribute(model, "maxit", 100)

MathOptInterface API

The ECOS optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

The following options are supported:

ParameterExplanation
gammascaling the final step length
deltaregularization parameter
epsregularization threshold
feastolprimal/dual infeasibility tolerance
abstolabsolute tolerance on duality gap
reltolrelative tolerance on duality gap
feastol_inaccprimal/dual infeasibility relaxed tolerance
abstol_inaccabsolute relaxed tolerance on duality gap
reltol_inaccrelative relaxed tolerance on duality gap
nitrefnumber of iterative refinement steps
maxitmaximum number of iterations
verboseverbosity bool for PRINTLEVEL < 3
diff --git a/dev/packages/GAMS/index.html b/dev/packages/GAMS/index.html index 58fb9c3ed9b..582db3efa5a 100644 --- a/dev/packages/GAMS/index.html +++ b/dev/packages/GAMS/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

GAMS.jl

GAMS.jl provides a MathOptInterface Optimizer to solve JuMP models using GAMS.

GAMS comes with dozens of supported solvers. Among them are: ALPHAECP, ANTIGONE, BARON, CBC, CONOPT, CPLEX, DICOPT, GUROBI, IPOPT, KNITRO, LINDO, LINDOGLOBAL, MINOS, MOSEK, NLPEC, PATH, QUADMINOS, SBB, SHOT, SCIP, SNOPT, SOPLEX, XPRESS. Find a complete list here.

GAMS.jl supports the following JuMP features:

  • linear, quadratic and nonlinear (convex and non-convex) objective and constraints
  • continuous, binary, integer, semi-continuous and semi-integer variables
  • SOS1 and SOS2 sets
  • complementarity constraints

Installation

  1. Download GAMS and obtain a GAMS license. Please note that GAMS also offers a free community license.
  2. (optional) Add the GAMS system directory to the PATH variable in order to find GAMS automatically.
  3. Install GAMS.jl using the Julia package manager:
    using Pkg
    +

    GAMS.jl

    GAMS.jl provides a MathOptInterface Optimizer to solve JuMP models using GAMS.

    GAMS comes with dozens of supported solvers. Among them are: ALPHAECP, ANTIGONE, BARON, CBC, CONOPT, CPLEX, DICOPT, GUROBI, IPOPT, KNITRO, LINDO, LINDOGLOBAL, MINOS, MOSEK, NLPEC, PATH, QUADMINOS, SBB, SHOT, SCIP, SNOPT, SOPLEX, XPRESS. Find a complete list here.

    GAMS.jl supports the following JuMP features:

    • linear, quadratic and nonlinear (convex and non-convex) objective and constraints
    • continuous, binary, integer, semi-continuous and semi-integer variables
    • SOS1 and SOS2 sets
    • complementarity constraints

    Installation

    1. Download GAMS and obtain a GAMS license. Please note that GAMS also offers a free community license.
    2. (optional) Add the GAMS system directory to the PATH variable in order to find GAMS automatically.
    3. Install GAMS.jl using the Julia package manager:
      using Pkg
       Pkg.add("GAMS")

    Usage

    Using GAMS as optimizer for your JuMP model:

    using GAMS, JuMP
     model = Model(GAMS.Optimizer)

    GAMS System

    If the GAMS system directory has been added to the PATH variable (you can check this with print(ENV["PATH"])), GAMS.jl will find it automatically. Otherwise, or if you like to switch between systems, the system directory can be specified by (one of the following):

    set_optimizer_attribute(model, "SysDir", "<gams_system_dir>")
     set_optimizer_attribute(model, GAMS.SysDir(), "<gams_system_dir>")

    Analogously, you can specify a working directory with "WorkDir" or GAMS.WorkDir(). If no working directory has been set, GAMS.jl will create a temporary one.

    If you want to use the same GAMS workspace (same system and working directory) for multiple models, you can create a GAMSWorkspace first with either of the following

    ws = GAMS.GAMSWorkspace()
    @@ -22,4 +22,4 @@
     
     MOI.get(model, GAMS.GeneratedConstraintName(), c[2]) # returns eq2
     MOI.get(model, GAMS.OriginalConstraintName("eq1"))   # returns c[1]
    -MOI.get(model, GAMS.OriginalConstraintName("eq10"))  # returns nothing

    Note that JuMP direct-mode is used.

    +MOI.get(model, GAMS.OriginalConstraintName("eq10")) # returns nothing

    Note that JuMP direct-mode is used.

diff --git a/dev/packages/GLPK/index.html b/dev/packages/GLPK/index.html index 4e16e9d41b9..280aa46e8f7 100644 --- a/dev/packages/GLPK/index.html +++ b/dev/packages/GLPK/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

GLPK.jl

Build Status codecov

GLPK.jl is a wrapper for the GNU Linear Programming Kit library.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not an GNU project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

GLPK.jl is licensed under the GPL v3 license.

Installation

Install GLPK using Pkg.add:

import Pkg
+

GLPK.jl

Build Status codecov

GLPK.jl is a wrapper for the GNU Linear Programming Kit library.

The wrapper has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not an GNU project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

GLPK.jl is licensed under the GPL v3 license.

Installation

Install GLPK using Pkg.add:

import Pkg
 Pkg.add("GLPK")

In addition to installing the GLPK.jl package, this will also download and install the GLPK binaries. You do not need to install GLPK separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use GLPK with JuMP, use GLPK.Optimizer:

using JuMP, GLPK
 model = Model(GLPK.Optimizer)
 set_attribute(model, "tm_lim", 60 * 1_000)
@@ -36,4 +36,4 @@
 @test primal_status(model) == MOI.FEASIBLE_POINT
 @test value(x) == 1
 @test value(y) == 2
-@show reasons

C API

The C API can be accessed via GLPK.glp_XXX functions, where the names and arguments are identical to the C API. See the /tests folder for inspiration.

Thread safety

GLPK is not thread-safe and should not be used with multithreading.

+@show reasons

C API

The C API can be accessed via GLPK.glp_XXX functions, where the names and arguments are identical to the C API. See the /tests folder for inspiration.

Thread safety

GLPK is not thread-safe and should not be used with multithreading.

diff --git a/dev/packages/Gurobi/index.html b/dev/packages/Gurobi/index.html index e2053217fff..d7d0b1cd2de 100644 --- a/dev/packages/Gurobi/index.html +++ b/dev/packages/Gurobi/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Gurobi.jl

Build Status codecov

Gurobi.jl is a wrapper for the Gurobi Optimizer.

It has two components:

Affiliation

This wrapper is maintained by the JuMP community with help from Gurobi.

Getting help

If you are a commercial customer, please contact Gurobi directly through the Gurobi Help Center.

Otherwise, you should ask a question on the JuMP community forum. with the gurobi tag, or post in Gurobi’s Community Forum

If you have a reproducible example of a bug, please open a GitHub issue.

License

Gurobi.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must obtain a license.

Free Gurobi licenses are available for academics and students.

Installation

To use Gurobi, you need a license. To install the license, first obtain a key from gurobi.com, then run:

import Pkg
+

Gurobi.jl

Build Status codecov

Gurobi.jl is a wrapper for the Gurobi Optimizer.

It has two components:

Affiliation

This wrapper is maintained by the JuMP community with help from Gurobi.

Getting help

If you are a commercial customer, please contact Gurobi directly through the Gurobi Help Center.

Otherwise, you should ask a question on the JuMP community forum. with the gurobi tag, or post in Gurobi’s Community Forum

If you have a reproducible example of a bug, please open a GitHub issue.

License

Gurobi.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must obtain a license.

Free Gurobi licenses are available for academics and students.

Installation

To use Gurobi, you need a license. To install the license, first obtain a key from gurobi.com, then run:

import Pkg
 Pkg.add("Gurobi_jll")
 import Gurobi_jll
 # Replace the contents xxxxx with your actual key
@@ -169,4 +169,4 @@
     println(lower_bound(x[i]))
 end

Common errors

Using Gurobi v9.0 and you got an error like Q not PSD?

You need to set the NonConvex parameter:

model = Model(Gurobi.Optimizer)
 set_optimizer_attribute(model, "NonConvex", 2)

Gurobi Error 1009: Version number is XX.X, license is for version XX.X

Make sure that your license is correct for your Gurobi version. See the Gurobi documentation for details.

Once you are sure that the license and Gurobi versions match, re-install Gurobi.jl by running:

import Pkg
-Pkg.build("Gurobi")
+Pkg.build("Gurobi")
diff --git a/dev/packages/HiGHS/index.html b/dev/packages/HiGHS/index.html index 748fe16bf9e..2e8450979e5 100644 --- a/dev/packages/HiGHS/index.html +++ b/dev/packages/HiGHS/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

HiGHS.jl

Build Status codecov

HiGHS.jl is a wrapper for the HiGHS solver.

It has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not an official project of the HiGHS developers.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

HiGHS.jl is licensed under the MIT License.

The underlying solver, ERGO-Code/HiGHS, is licensed under the MIT license.

Installation

Install HiGHS as follows:

import Pkg
+

HiGHS.jl

Build Status codecov

HiGHS.jl is a wrapper for the HiGHS solver.

It has two components:

Affiliation

This wrapper is maintained by the JuMP community and is not an official project of the HiGHS developers.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

HiGHS.jl is licensed under the MIT License.

The underlying solver, ERGO-Code/HiGHS, is licensed under the MIT license.

Installation

Install HiGHS as follows:

import Pkg
 Pkg.add("HiGHS")

In addition to installing the HiGHS.jl package, this will also download and install the HiGHS binaries. You do not need to install HiGHS separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use HiGHS with JuMP, use HiGHS.Optimizer:

using JuMP, HiGHS
 model = Model(HiGHS.Optimizer)
 set_attribute(model, "presolve", "on")
 set_attribute(model, "time_limit", 60.0)

MathOptInterface API

The HiGHS optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

See the HiGHS documentation for a full list of the available options.

C API

The C API can be accessed via HiGHS.Highs_xxx functions, where the names and arguments are identical to the C API.

Threads

HiGHS uses a global scheduler that is shared between threads.

Before changing the number of threads using MOI.Threads(), you must call Highs_resetGlobalScheduler(1):

using JuMP, HiGHS
 model = Model(HiGHS.Optimizer)
 Highs_resetGlobalScheduler(1)
-set_attribute(model, MOI.NumberOfThreads(), 1)

If modifying the number of HiGHS threads across different Julia threads, be sure to read the docstring of Highs_resetGlobalScheduler. In particular, resetting the scheduler is not thread-safe.

+set_attribute(model, MOI.NumberOfThreads(), 1)

If modifying the number of HiGHS threads across different Julia threads, be sure to read the docstring of Highs_resetGlobalScheduler. In particular, resetting the scheduler is not thread-safe.

diff --git a/dev/packages/Hypatia/index.html b/dev/packages/Hypatia/index.html index 82f6a494f03..d8a325b5c35 100644 --- a/dev/packages/Hypatia/index.html +++ b/dev/packages/Hypatia/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -
Hypatia logo

Build Status codecov

Hypatia is a highly customizable open source interior point solver for generic conic optimization problems, written in Julia.

For more information on Hypatia, please see:

and preprints of our papers:

and corresponding raw results CSV files generated by our run scripts in the benchmarks folder.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Hypatia is licensed under the MIT License (see LICENSE).

Installation

To use Hypatia, install Julia, then at the Julia REPL, type:

using Hypatia
+
Hypatia logo

Build Status codecov

Hypatia is a highly customizable open source interior point solver for generic conic optimization problems, written in Julia.

For more information on Hypatia, please see:

and preprints of our papers:

and corresponding raw results CSV files generated by our run scripts in the benchmarks folder.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Hypatia is licensed under the MIT License (see LICENSE).

Installation

To use Hypatia, install Julia, then at the Julia REPL, type:

using Hypatia
 using Pkg
 Pkg.add("Hypatia")

Hypatia is an experimental solver and a work in progress, and may not run with older releases of Julia. Default options/parameters are not well-tuned, so we encourage you to experiment with these.

Usage

Hypatia can be accessed through a low-level native Julia interface or through open-source modeling tools such as JuMP and Convex.jl. The native interface is more expressive, allowing Hypatia to solve conic models expressed with generic real floating point types and structured matrices or linear operators, for example. However, it is typically sufficient and more convenient to use JuMP.

Using JuMP, we can model a simple D-optimal experiment design problem and call Hypatia:

using LinearAlgebra
 using JuMP
@@ -42,4 +42,4 @@
     volume={15},
     pages={53--101},
     doi={https://doi.org/10.1007/s12532-022-00226-0}
-}
+}
diff --git a/dev/packages/InfiniteOpt/index.html b/dev/packages/InfiniteOpt/index.html index 961c854e64c..ae7483c52b9 100644 --- a/dev/packages/InfiniteOpt/index.html +++ b/dev/packages/InfiniteOpt/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Logo

InfiniteOpt.jl is a JuMP extension for expressing and solving infinite-dimensional optimization problems. Such areas include stochastic programming, dynamic programming, space-time optimization, and more. InfiniteOpt serves as an easy-to-use modeling interface for these advanced problem types that can be used by those with little background in these areas. It also it contains a wealth of capabilities making it a powerful and convenient tool for advanced users.

Current VersionDocumentationBuild StatusCitation
Build Status codecov.ioDOI

InfiniteOpt builds upon JuMP to add support for many complex modeling objects which include:

  • Infinite parameters (for example, time, space, and/or uncertainty)
  • Finite parameters (similar to ParameterJuMP)
  • Infinite variables (decision functions) (for example, $y(t, x)$)
  • Derivatives (for example, $\frac{\partial y(t, x)}{\partial t}$)
  • Measures (for example, $\int_{t \in T}y(t, x)dt$ and $\mathbb{E}[y(\xi)]$)
  • First class nonlinear modeling

The unifying modeling abstraction behind InfiniteOpt captures a wide spectrum of disciplines which include dynamic, PDE, stochastic, and semi-infinite optimization. Moreover, we facilitate transferring techniques between these to synthesize new optimization paradigms.

License

InfiniteOpt is licensed under the MIT "Expat" license.

Installation

InfiniteOpt.jl is a registered Julia package and can be installed by entering the following in the REPL.

julia> import Pkg; Pkg.add("InfiniteOpt")

Documentation

Please visit our documentation pages to learn more. These pages are quite extensive and feature overviews, guides, manuals, tutorials, examples, and more.

Questions

For additional help please visit and post in our discussion forum.

Citing

DOI DOI

If you use InfiniteOpt.jl in your research, we would greatly appreciate your citing it.

@article{pulsipher2022unifying,
+

Logo

InfiniteOpt.jl is a JuMP extension for expressing and solving infinite-dimensional optimization problems. Such areas include stochastic programming, dynamic programming, space-time optimization, and more. InfiniteOpt serves as an easy-to-use modeling interface for these advanced problem types that can be used by those with little background in these areas. It also it contains a wealth of capabilities making it a powerful and convenient tool for advanced users.

Current VersionDocumentationBuild StatusCitation
Build Status codecov.ioDOI

InfiniteOpt builds upon JuMP to add support for many complex modeling objects which include:

  • Infinite parameters (for example, time, space, and/or uncertainty)
  • Finite parameters (similar to ParameterJuMP)
  • Infinite variables (decision functions) (for example, $y(t, x)$)
  • Derivatives (for example, $\frac{\partial y(t, x)}{\partial t}$)
  • Measures (for example, $\int_{t \in T}y(t, x)dt$ and $\mathbb{E}[y(\xi)]$)
  • First class nonlinear modeling

The unifying modeling abstraction behind InfiniteOpt captures a wide spectrum of disciplines which include dynamic, PDE, stochastic, and semi-infinite optimization. Moreover, we facilitate transferring techniques between these to synthesize new optimization paradigms.

License

InfiniteOpt is licensed under the MIT "Expat" license.

Installation

InfiniteOpt.jl is a registered Julia package and can be installed by entering the following in the REPL.

julia> import Pkg; Pkg.add("InfiniteOpt")

Documentation

Please visit our documentation pages to learn more. These pages are quite extensive and feature overviews, guides, manuals, tutorials, examples, and more.

Questions

For additional help please visit and post in our discussion forum.

Citing

DOI DOI

If you use InfiniteOpt.jl in your research, we would greatly appreciate your citing it.

@article{pulsipher2022unifying,
       title = {A unifying modeling abstraction for infinite-dimensional optimization},
       journal = {Computers & Chemical Engineering},
       volume = {156},
@@ -12,4 +12,4 @@
       doi = {https://doi.org/10.1016/j.compchemeng.2021.107567},
       url = {https://www.sciencedirect.com/science/article/pii/S0098135421003458},
       author = {Joshua L. Pulsipher and Weiqi Zhang and Tyler J. Hongisto and Victor M. Zavala},
-}

A pre-print version is freely available though arXiv.

+}

A pre-print version is freely available though arXiv.

diff --git a/dev/packages/Ipopt/index.html b/dev/packages/Ipopt/index.html index 59215b32897..b46e020a500 100644 --- a/dev/packages/Ipopt/index.html +++ b/dev/packages/Ipopt/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Ipopt.jl

Build Status codecov

Ipopt.jl is a wrapper for the Ipopt solver.

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Ipopt.jl is licensed under the MIT License.

The underlying solver, coin-or/Ipopt, is licensed under the Eclipse public license.

Installation

Install Ipopt.jl using the Julia package manager:

import Pkg
+

Ipopt.jl

Build Status codecov

Ipopt.jl is a wrapper for the Ipopt solver.

Affiliation

This wrapper is maintained by the JuMP community and is not a COIN-OR project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Ipopt.jl is licensed under the MIT License.

The underlying solver, coin-or/Ipopt, is licensed under the Eclipse public license.

Installation

Install Ipopt.jl using the Julia package manager:

import Pkg
 Pkg.add("Ipopt")

In addition to installing the Ipopt.jl package, this will also download and install the Ipopt binaries. You do not need to install Ipopt separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

For details on using a different linear solver, see the Linear Solvers section below. You do not need a custom binary to change the linear solver.

Use with JuMP

You can use Ipopt with JuMP as follows:

using JuMP, Ipopt
 model = Model(Ipopt.Optimizer)
 set_attribute(model, "max_cpu_time", 60.0)
@@ -124,4 +124,4 @@
 LinearAlgebra.BLAS.lbt_forward(liblapack32)
 using Ipopt

AppleAccelerate

If you are using macOS ≥ v13.4 and you have AppleAccelerate.jl installed, add using AppleAccelerate to your code:

using AppleAccelerate
 using Ipopt

Display backends

Check what backends are loaded using:

import LinearAlgebra
-LinearAlgebra.BLAS.lbt_get_config()
+LinearAlgebra.BLAS.lbt_get_config()
diff --git a/dev/packages/Juniper/index.html b/dev/packages/Juniper/index.html index 7b797b58eae..8a3115c21a9 100644 --- a/dev/packages/Juniper/index.html +++ b/dev/packages/Juniper/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Juniper

CI codecov Documentation

Juniper (Jump Nonlinear Integer Program solver) is a solver for mixed-integer nonlinear programs.

It is a heuristic which is not guaranteed to find the global optimum. If you need the global optimum, check out Alpine.

Installation

Install Juniper using the Julia package manager:

import Pkg
+

Juniper

CI codecov Documentation

Juniper (Jump Nonlinear Integer Program solver) is a solver for mixed-integer nonlinear programs.

It is a heuristic which is not guaranteed to find the global optimum. If you need the global optimum, check out Alpine.

Installation

Install Juniper using the Julia package manager:

import Pkg
 Pkg.add("JuMP")

Use with JuMP

Use Juniper with JuMP as follows:

using JuMP, Juniper, Ipopt
 ipopt = optimizer_with_attributes(Ipopt.Optimizer, "print_level"=>0)
 optimizer = optimizer_with_attributes(Juniper.Optimizer, "nl_solver"=>ipopt)
@@ -33,4 +33,4 @@
      year="2018",
      publisher="Springer International Publishing",
      isbn="978-3-319-93031-2"
-}
+}
diff --git a/dev/packages/KNITRO/index.html b/dev/packages/KNITRO/index.html index d18aa94c825..e6d37c1e9da 100644 --- a/dev/packages/KNITRO/index.html +++ b/dev/packages/KNITRO/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

KNITRO.jl

Build Status codecov

KNITRO.jl is a wrapper for the Artelys Knitro solver.

It has two components:

KNITRO.jl v0.14.0 introduced a number of breaking changes to the low-level C API. See the Low-level wrapper section for details.

Affiliation

This wrapper is maintained by the JuMP community with help from Artelys.

Contact Artelys support if you encounter any problem with this interface or the solver.

License

KNITRO.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must purchase a license.

Installation

First, obtain a license and install a copy of KNITRO from Artelys.

Then, install KNITRO.jl using the Julia package manager:

import Pkg
+

KNITRO.jl

Build Status codecov

KNITRO.jl is a wrapper for the Artelys Knitro solver.

It has two components:

KNITRO.jl v0.14.0 introduced a number of breaking changes to the low-level C API. See the Low-level wrapper section for details.

Affiliation

This wrapper is maintained by the JuMP community with help from Artelys.

Contact Artelys support if you encounter any problem with this interface or the solver.

License

KNITRO.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must purchase a license.

Installation

First, obtain a license and install a copy of KNITRO from Artelys.

Then, install KNITRO.jl using the Julia package manager:

import Pkg
 Pkg.add("KNITRO")

If you are having trouble installing KNITRO.jl, here are several things to try:

  • Make sure that you have defined your global variables correctly, for example with export KNITRODIR="/path/to/knitro-vXXX-$OS-64" and export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$KNITRODIR/lib". You can check that KNITRO.jl sees your library with using KNITRO; KNITRO.has_knitro().
  • If KNITRO.has_knitro() returns false but you are confident that your paths are correct, try running Pkg.build("KNITRO") and restarting Julia. In at least one user's experience, installing and using KNITRO in a temporary Julia environment (activated with ] activate --temp) does not work and the need to manually build is likely the reason why.

Use with JuMP

To use KNITRO with JuMP, use KNITRO.Optimizer:

using JuMP, KNITRO
 model = Model(KNITRO.Optimizer)
 set_attribute(model, "outlev", 1)
 set_attribute(model, "algorithm", 4)

Use with AMPL

To use KNITRO with AmplNLWriter.jl, use KNITRO.amplexe:

using JuMP
 import AmplNLWriter
 import KNITRO
-model = Model(() -> AmplNLWriter.Optimizer(KNITRO.amplexe, ["outlev=3"]))

Use with other packages

A variety of packages extend KNITRO.jl to support other optimization modeling systems. These include:

MathOptInterface API

The Knitro optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

A list of available options is provided in the KNITRO reference manual.

Low-level wrapper

The complete C API can be accessed via KNITRO.KN_xx functions, where the names and arguments are identical to the C API.

See the KNITRO documentation for details.

As general rules when converting from Julia to C:

  • When KNITRO requires a Ptr{T} that holds one element, like double *, use a Ref{T}().
  • When KNITRO requires a Ptr{T} that holds multiple elements, use a Vector{T}.
  • When KNITRO requires a double, use Cdouble
  • When KNITRO requires an int, use Cint
  • When KNITRO requires a NULL, use C_NULL

Extensive examples using the C wrapper can be found in examples/.

Breaking changes

KNITRO.jl v0.14.0 introduced a number of breaking changes to the low-level C API. The main changes were:

  1. removing Julia-specific functions like KN_set_param. Use the C API functions like KN_set_int_param and KN_set_double_param_by_name.
  2. removing intermediate methods that tried to make the C API more Julia-like. For example, we have removed the KN_add_var method that returned the index of the variable. There is now only the method from the C API.

If you have trouble updating, please open a GitHub issue.

Multi-threading

Due to limitations in the interaction between Julia and C, KNITRO.jl disables multi-threading if the problem is nonlinear. This will override any options such as par_numthreads that you may have set.

If you are using the low-level API, opt-in to enable multi-threading by calling KN_solve(model.env) instead of KN_solve(model), where model is the value returned by model = KN_new(). Note that calling KN_solve(model.env) is an advanced operation because it requires all callbacks you provide to be threadsafe.

Read GitHub issue #93 for more details.

+model = Model(() -> AmplNLWriter.Optimizer(KNITRO.amplexe, ["outlev=3"]))

Use with other packages

A variety of packages extend KNITRO.jl to support other optimization modeling systems. These include:

MathOptInterface API

The Knitro optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

A list of available options is provided in the KNITRO reference manual.

Low-level wrapper

The complete C API can be accessed via KNITRO.KN_xx functions, where the names and arguments are identical to the C API.

See the KNITRO documentation for details.

As general rules when converting from Julia to C:

  • When KNITRO requires a Ptr{T} that holds one element, like double *, use a Ref{T}().
  • When KNITRO requires a Ptr{T} that holds multiple elements, use a Vector{T}.
  • When KNITRO requires a double, use Cdouble
  • When KNITRO requires an int, use Cint
  • When KNITRO requires a NULL, use C_NULL

Extensive examples using the C wrapper can be found in examples/.

Breaking changes

KNITRO.jl v0.14.0 introduced a number of breaking changes to the low-level C API. The main changes were:

  1. removing Julia-specific functions like KN_set_param. Use the C API functions like KN_set_int_param and KN_set_double_param_by_name.
  2. removing intermediate methods that tried to make the C API more Julia-like. For example, we have removed the KN_add_var method that returned the index of the variable. There is now only the method from the C API.

If you have trouble updating, please open a GitHub issue.

Multi-threading

Due to limitations in the interaction between Julia and C, KNITRO.jl disables multi-threading if the problem is nonlinear. This will override any options such as par_numthreads that you may have set.

If you are using the low-level API, opt-in to enable multi-threading by calling KN_solve(model.env) instead of KN_solve(model), where model is the value returned by model = KN_new(). Note that calling KN_solve(model.env) is an advanced operation because it requires all callbacks you provide to be threadsafe.

Read GitHub issue #93 for more details.

diff --git a/dev/packages/Loraine/index.html b/dev/packages/Loraine/index.html index bf1904ef2c2..4b0ebb97063 100644 --- a/dev/packages/Loraine/index.html +++ b/dev/packages/Loraine/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Loraine.jl

Sweet Lor(r)aine, let the party carry on[1]...

Loraine.jl is a Julia implementation of an interior point method algorithm for linear semidefinite optimization problems.

Special features of Loraine:

  • Use of an iterative solver for linear systems. This is to be used for problems with (very) low rank solution matrix. Standard (non-low-rank) problems and linear programs can be solved using the direct solver; then the user gets a standard IP method akin SDPT3.
  • Use of high-precision arithmetic (by means of MultiFloats.jl). Only to be used with a direct solver (and relatively small problems). (New in version 0.2.0.)

There is also a MATLAB version of the code at kocvara/Loraine.m.

License and Original Contributors

Loraine is licensed under the MIT License.

Loraine was developed by Soodeh Habibi and Michal Kočvara, University of Birmingham, and Michael Stingl, University of Erlangen, for H2020 ITN POEMA.

The JuMP interface was provided by Benoît Legat. His help is greatly acknowledged.

Installation

Install Loraine using Pkg.add:

import Pkg
+

Loraine.jl

Sweet Lor(r)aine, let the party carry on[1]...

Loraine.jl is a Julia implementation of an interior point method algorithm for linear semidefinite optimization problems.

Special features of Loraine:

  • Use of an iterative solver for linear systems. This is to be used for problems with (very) low rank solution matrix. Standard (non-low-rank) problems and linear programs can be solved using the direct solver; then the user gets a standard IP method akin SDPT3.
  • Use of high-precision arithmetic (by means of MultiFloats.jl). Only to be used with a direct solver (and relatively small problems). (New in version 0.2.0.)

There is also a MATLAB version of the code at kocvara/Loraine.m.

License and Original Contributors

Loraine is licensed under the MIT License.

Loraine was developed by Soodeh Habibi and Michal Kočvara, University of Birmingham, and Michael Stingl, University of Erlangen, for H2020 ITN POEMA.

The JuMP interface was provided by Benoît Legat. His help is greatly acknowledged.

Installation

Install Loraine using Pkg.add:

import Pkg
 Pkg.add("Loraine")

Use with JuMP

To use Loraine with JuMP, use Loraine.Optimizer (for a standard double-precision solver) or Loraine.Optimizer{Float64xN}, with N = 2,...,8 ; for instance:

using JuMP, Loraine
 model = Model(Loraine.Optimizer)
 set_attribute(model, "maxit", 100)

or, for high-precision arithmetics,

using JuMP, Loraine
@@ -37,4 +37,4 @@
   www={https://hal.science/hal-04076509/}
   note={Preprint hal-04076509}
   year={2023}
-}
  • 1https://www.youtube.com/watch?v=0D2wNf1lVrI
+}
  • 1https://www.youtube.com/watch?v=0D2wNf1lVrI
diff --git a/dev/packages/MAiNGO/index.html b/dev/packages/MAiNGO/index.html index e54eecc57a2..b5f2ea27262 100644 --- a/dev/packages/MAiNGO/index.html +++ b/dev/packages/MAiNGO/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

MAiNGO.jl

What is MAiNGO?

MAiNGO (McCormick-based Algorithm for mixed-integer Nonlinear Global Optimization) is a deterministic global optimization solver for nonconvex mixed-integer nonlinear programs (MINLPs). For more information on MAiNGO, including installation, usage, and licensing, please see the repository and the documentation.

MAiNGO.jl is a wrapper for using MAiNGO in Julia. It requires a working installation of MAiNGO, either the standalone version with parser support (Mode A), or the shared parser library version (Mode B). When building MAiNGO from source this is configurable in the CMake configuration of MAiNGO. Per default, precompiled version of MAiNGO is used that operates in Mode B.

Using the precompiled version of MAiNGO from the Julia Package Manager

A Julia package containing a precompiled version of MAiNGO is available (MAiNGO_jll). This version is used by default on supported platforms (Linux/MacOs/Windows), but this can be changed (see here). The precompiled version contains only open-source components. If you would like to use commercial subsolvers with MAiNGO (for example CPLEX or KNITRO), it might still make sense to compile MAiNGO yourself and use this version rather than the precompiled one.

Quick start

using MAiNGO # if this fails, you need to add the package first manually
+

MAiNGO.jl

What is MAiNGO?

MAiNGO (McCormick-based Algorithm for mixed-integer Nonlinear Global Optimization) is a deterministic global optimization solver for nonconvex mixed-integer nonlinear programs (MINLPs). For more information on MAiNGO, including installation, usage, and licensing, please see the repository and the documentation.

MAiNGO.jl is a wrapper for using MAiNGO in Julia. It requires a working installation of MAiNGO, either the standalone version with parser support (Mode A), or the shared parser library version (Mode B). When building MAiNGO from source this is configurable in the CMake configuration of MAiNGO. Per default, precompiled version of MAiNGO is used that operates in Mode B.

Using the precompiled version of MAiNGO from the Julia Package Manager

A Julia package containing a precompiled version of MAiNGO is available (MAiNGO_jll). This version is used by default on supported platforms (Linux/MacOs/Windows), but this can be changed (see here). The precompiled version contains only open-source components. If you would like to use commercial subsolvers with MAiNGO (for example CPLEX or KNITRO), it might still make sense to compile MAiNGO yourself and use this version rather than the precompiled one.

Quick start

using MAiNGO # if this fails, you need to add the package first manually
 using JuMP
 #Set options in constructor
 model=Model(optimizer_with_attributes(MAiNGO.Optimizer, "epsilonA"=> 1e-8))
@@ -94,4 +94,4 @@
 findMAiNGO(preferred=MAiNGO.C_API)
 # switch back to MAiNGO_jll
 findMAiNGO(preferred=MAiNGO.MAINGO_JLL)

The findMAiNGO() function takes several optional arguments, which can be passed as keyword-arguments:

  • verbose: boolean, whether or not progress on finding MAiNGO is reported. (Default value: false)
  • preferred: either MAiNGO.MAINGOJLL or MAiNGO.CAPI, determines whether jll binaries or custom installation of MAiNGO is preferred. Note that the C-API is always preferred to the standalone version. If a custom standalone version should be used, set this value to C-API and pass an empty string as the capi argument (see next). (Default value: MAINGOJLL)
  • capi: string, path to C-API file. If set, this overrides the environment variable MAINGOLIB.
  • standalone: string, path to standalone executable file. If set, this overrides the environment variable MAINGO_EXEC.

For example, to use the C-API at a new location, one could call:

using MAiNGO
-findMAiNGO(preferred=MAiNGO.C_API, c_api="path\\to\\c\\api\\shared_parser.dll")

Currently working:

  • Integer and binary variables.
  • Affine, Quadratic and nonlinear constraints and objectives.
  • Operations: min,max,*,/,+,-,-(unary), exp,log,abs,sqrt,^
    • Other operations are easy to add if supported by MathOptInterface,ALE and MAiNGO.
  • Writing problem defined in JuMP syntax to an ALE problem.txt and calling MAiNGO.exe on a specified path.
  • Alternatively using a C-API to call MAiNGO.

Restrictions compared to using the Python or C++ interface

It is assumed that all variables are bounded. This interface assumes that integer variables are bounded between -1e6 and 1e6. For real variables these bounds are -1e8 and 1e8.

Other functionality such as special support for growing datasets or MPI parallelization is not currently supported via this wrapper. Additionally, constraint formulations are simply passed from their representation in JuMP/MathOptInterface to MAiNGO. As such, there is no way to make use of advanced techniques such as defining constraints that are only used for the relaxations, using special relaxations for functions used in thermodynamics and process engineering or formulating reduced space formulations.

Tests

A subset of test cases for MathOptInterface solvers can be run by running the script ./test/runtests.jl. The current release was tested in the following combinations:

  • Julia 1.8.5 and MathOptInterface v1.18.0
  • Julia 1.9.4 and MathOptInterface v1.23.0.
+findMAiNGO(preferred=MAiNGO.C_API, c_api="path\\to\\c\\api\\shared_parser.dll")

Currently working:

  • Integer and binary variables.
  • Affine, Quadratic and nonlinear constraints and objectives.
  • Operations: min,max,*,/,+,-,-(unary), exp,log,abs,sqrt,^
    • Other operations are easy to add if supported by MathOptInterface,ALE and MAiNGO.
  • Writing problem defined in JuMP syntax to an ALE problem.txt and calling MAiNGO.exe on a specified path.
  • Alternatively using a C-API to call MAiNGO.

Restrictions compared to using the Python or C++ interface

It is assumed that all variables are bounded. This interface assumes that integer variables are bounded between -1e6 and 1e6. For real variables these bounds are -1e8 and 1e8.

Other functionality such as special support for growing datasets or MPI parallelization is not currently supported via this wrapper. Additionally, constraint formulations are simply passed from their representation in JuMP/MathOptInterface to MAiNGO. As such, there is no way to make use of advanced techniques such as defining constraints that are only used for the relaxations, using special relaxations for functions used in thermodynamics and process engineering or formulating reduced space formulations.

Tests

A subset of test cases for MathOptInterface solvers can be run by running the script ./test/runtests.jl. The current release was tested in the following combinations:

  • Julia 1.8.5 and MathOptInterface v1.18.0
  • Julia 1.9.4 and MathOptInterface v1.23.0.
diff --git a/dev/packages/MadNLP/index.html b/dev/packages/MadNLP/index.html index e9f271894e8..c17e520317a 100644 --- a/dev/packages/MadNLP/index.html +++ b/dev/packages/MadNLP/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

logo

A nonlinear programming solver based on the filter line-search interior point method (as in Ipopt) that can handle/exploit diverse classes of data structures, either on host or device memories.


LicenseDocumentationBuild StatusCoverageDOI
License: MITdoc docbuildcodecovDOI

Installation

pkg> add MadNLP

Optionally, various extension packages can be installed together:

pkg> add MadNLPHSL, MadNLPPardiso, MadNLPMumps, MadNLPGPU

These packages are stored in the lib subdirectory within the main MadNLP repository. Some extension packages may require additional dependencies or specific hardware. For the instructions for the build procedure, see the following links:

Usage

Interfaces

MadNLP is interfaced with modeling packages:

Users can pass various options to MadNLP also through the modeling packages. The interface-specific syntax are shown below. To see the list of MadNLP solver options, check the documentation.

JuMP interface

using MadNLP, JuMP
+

logo

A nonlinear programming solver based on the filter line-search interior point method (as in Ipopt) that can handle/exploit diverse classes of data structures, either on host or device memories.


LicenseDocumentationBuild StatusCoverageDOI
License: MITdoc docbuildcodecovDOI

Installation

pkg> add MadNLP

Optionally, various extension packages can be installed together:

pkg> add MadNLPHSL, MadNLPPardiso, MadNLPMumps, MadNLPGPU

These packages are stored in the lib subdirectory within the main MadNLP repository. Some extension packages may require additional dependencies or specific hardware. For the instructions for the build procedure, see the following links:

Usage

Interfaces

MadNLP is interfaced with modeling packages:

Users can pass various options to MadNLP also through the modeling packages. The interface-specific syntax are shown below. To see the list of MadNLP solver options, check the documentation.

JuMP interface

using MadNLP, JuMP
 model = Model(()->MadNLP.Optimizer(print_level=MadNLP.INFO, max_iter=100))
 @variable(model, x, start = 0.0)
 @variable(model, y, start = 0.0)
@@ -43,4 +43,4 @@
   author={Shin, Sungho and Coffrin, Carleton and Sundar, Kaarthik and Zavala, Victor M},
   journal={arXiv preprint arXiv:2010.02404},
   year={2020}
-}

Supporting MadNLP.jl

+}

Supporting MadNLP.jl

diff --git a/dev/packages/Manopt/index.html b/dev/packages/Manopt/index.html index 9b015ddbc01..f18131145c8 100644 --- a/dev/packages/Manopt/index.html +++ b/dev/packages/Manopt/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Manopt.jl

Optimization Algorithm on Riemannian Manifolds.

Code Style: Blue CI codecov Aqua QA

DOI DOI

For a function $f: ℳ → ℝ$ that maps from a Riemannian manifold ℳ to the real line, this package aims to solve

Find the minimizer p on ℳ, that is, the (or a) point where f attains its minimum.

Manopt.jl provides

  • A framework to implement arbitrary optimization algorithms on Riemannian Manifolds
  • A library of optimization algorithms on Riemannian manifolds
  • an easy-to-use interface for (debug) output and recording values during an algorithm run.
  • several tools to investigate the algorithms, gradients, and optimality criteria

Getting started

In Julia you can get started by just typing

using Pkg; Pkg.add("Manopt");

and then checkout the Get started: optimize! tutorial.

Manopt.jl is based on ManifoldsBase.jl, hence the algorithms can be used with any manifold following this interface for defining a Riemannian manifold.

The following packages are related to Manopt.jl

Citation

If you use Manopt.jl in your work, please cite the following

@article{Bergmann2022,
+

Manopt.jl

Optimization Algorithm on Riemannian Manifolds.

Code Style: Blue CI codecov Aqua QA

DOI DOI

For a function $f: ℳ → ℝ$ that maps from a Riemannian manifold ℳ to the real line, this package aims to solve

Find the minimizer p on ℳ, that is, the (or a) point where f attains its minimum.

Manopt.jl provides

  • A framework to implement arbitrary optimization algorithms on Riemannian Manifolds
  • A library of optimization algorithms on Riemannian manifolds
  • an easy-to-use interface for (debug) output and recording values during an algorithm run.
  • several tools to investigate the algorithms, gradients, and optimality criteria

Getting started

In Julia you can get started by just typing

using Pkg; Pkg.add("Manopt");

and then checkout the Get started: optimize! tutorial.

Manopt.jl is based on ManifoldsBase.jl, hence the algorithms can be used with any manifold following this interface for defining a Riemannian manifold.

The following packages are related to Manopt.jl

Citation

If you use Manopt.jl in your work, please cite the following

@article{Bergmann2022,
     Author    = {Ronny Bergmann},
     Doi       = {10.21105/joss.03866},
     Journal   = {Journal of Open Source Software},
@@ -30,4 +30,4 @@
     TITLE     = {Manifolds.jl: An Extensible Julia Framework for Data Analysis on Manifolds},
     VOLUME    = {49},
     YEAR      = {2023}
-}

as well. Note that all citations are in BibLaTeX format.

Manopt.jl belongs to the Manopt family:

Did you use Manopt.jl somewhere? Let us know! We'd love to collect those here as well.

+}

as well. Note that all citations are in BibLaTeX format.

Manopt.jl belongs to the Manopt family:

Did you use Manopt.jl somewhere? Let us know! We'd love to collect those here as well.

diff --git a/dev/packages/MiniZinc/index.html b/dev/packages/MiniZinc/index.html index 0408c8a0a6e..9d9f206ae71 100644 --- a/dev/packages/MiniZinc/index.html +++ b/dev/packages/MiniZinc/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

MiniZinc.jl

MiniZinc.jl is a wrapper for the MiniZinc constraint modeling language.

It provides a way to write MathOptInterface models to .mzn files, and a way to interact with libminizinc.

Affiliation

This wrapper is maintained by the JuMP community and is not part of the MiniZinc project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

MiniZinc.jl is licensed under the MIT License.

The underlying project, MiniZinc/libminizinc, is licensed under the MPL 2.0 license.

Install

Install MiniZinc.jl using the Julia package manager:

import Pkg
+

MiniZinc.jl

MiniZinc.jl is a wrapper for the MiniZinc constraint modeling language.

It provides a way to write MathOptInterface models to .mzn files, and a way to interact with libminizinc.

Affiliation

This wrapper is maintained by the JuMP community and is not part of the MiniZinc project.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

MiniZinc.jl is licensed under the MIT License.

The underlying project, MiniZinc/libminizinc, is licensed under the MPL 2.0 license.

Install

Install MiniZinc.jl using the Julia package manager:

import Pkg
 Pkg.add("MiniZinc")

Windows

On Linux and macOS, this package automatically installs libminizinc. However, we're still working out problems with the install on Windows. To use MiniZinc.jl, you'll need to manually install a copy of libminizinc from minizinc.org or compile one yourself from MiniZinc/libminizinc.

To teach MiniZinc.jl where to look for libminizinc, set the JULIA_LIBMINIZINC_DIR environment variable. For example:

ENV["JULIA_LIBMINIZINC_DIR"] = "C:\\Program Files\\MiniZinc"

Use with MathOptInterface

MiniZinc.jl supports the constraint programming sets defined in MathOptInterface, as well as (in)equality constraints.

The following example solves the following constraint program:

xᵢ ∈ {1, 2, 3} ∀i=1,2,3
 zⱼ ∈ {0, 1}    ∀j=1,2
 z₁ <-> x₁ != x₂
@@ -53,4 +53,4 @@
 @constraint(model, x in MOI.AllDifferent(3))
 @objective(model, Max, sum(i * x[i] for i in 1:3))
 optimize!(model)
-@show value.(x)

MathOptInterface API

The MiniZinc Optimizer{T} supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

Set options using MOI.RawOptimizerAttribute in MOI or set_attribute in JuMP.

MiniZinc.jl supports the following options:

  • model_filename::String = "": the location at which to write out the .mzn file during optimization. This option can be helpful during debugging. If left empty, a temporary file will be used instead.

  • MOI.SolutionLimit: set this option to a positive integer to return up to the limit number of solutions.

+@show value.(x)

MathOptInterface API

The MiniZinc Optimizer{T} supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Options

Set options using MOI.RawOptimizerAttribute in MOI or set_attribute in JuMP.

MiniZinc.jl supports the following options:

  • model_filename::String = "": the location at which to write out the .mzn file during optimization. This option can be helpful during debugging. If left empty, a temporary file will be used instead.

  • MOI.SolutionLimit: set this option to a positive integer to return up to the limit number of solutions.

diff --git a/dev/packages/MosekTools/index.html b/dev/packages/MosekTools/index.html index 4ede2035c4a..f466fc48e35 100644 --- a/dev/packages/MosekTools/index.html +++ b/dev/packages/MosekTools/index.html @@ -3,8 +3,8 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

MosekTools.jl

MosekTools.jl is the MathOptInterface.jl implementation for the MOSEK solver.

The low-level solver API for MOSEK is found in the package Mosek.jl.

Affiliation

MosekTools.jl is maintained by the JuMP community and is not officially supported by MOSEK. However, Mosek.jl is an officially supported product of MOSEK.

License

MosekTools.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must obtain a license.

Installation

The latest release of this package and the master branch are to be used with the latest release of Mosek.jl (which uses MOSEK v10).

To use MOSEK v9 (resp. v8), use the v0.12.x (resp. v0.7.x) releases of this package, and the mosekv9 (resp. mosekv8) branch and v1.2.x (resp. v0.9.x) releases of Mosek.jl.

See the following table for a summary:

MOSEKMosek.jlMosekTools.jl releaseMosekTools.jl branch
v10v10v0.13master
v9v0.12v0.12mosekv9
v8v0.9v0.7mosekv8

Use with JuMP

using JuMP
+

MosekTools.jl

MosekTools.jl is the MathOptInterface.jl implementation for the MOSEK solver.

The low-level solver API for MOSEK is found in the package Mosek.jl.

Affiliation

MosekTools.jl is maintained by the JuMP community and is not officially supported by MOSEK. However, Mosek.jl is an officially supported product of MOSEK.

License

MosekTools.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must obtain a license.

Installation

The latest release of this package and the master branch are to be used with the latest release of Mosek.jl (which uses MOSEK v10).

To use MOSEK v9 (resp. v8), use the v0.12.x (resp. v0.7.x) releases of this package, and the mosekv9 (resp. mosekv8) branch and v1.2.x (resp. v0.9.x) releases of Mosek.jl.

See the following table for a summary:

MOSEKMosek.jlMosekTools.jl releaseMosekTools.jl branch
v10v10v0.13master
v9v0.12v0.12mosekv9
v8v0.9v0.7mosekv8

Use with JuMP

using JuMP
 using MosekTools
 model = Model(Mosek.Optimizer)
 set_attribute(model, "QUIET", true)
-set_attribute(model, "INTPNT_CO_TOL_DFEAS", 1e-7)

Options

The parameter QUIET is a special parameter that when set to true disables all Mosek printing output.

All other parameters can be found in the Mosek documentation.

Note that the prefix MSK_IPAR_ (for integer parameters), MSK_DPAR_ (for floating point parameters) or MSK_SPAR_ (for string parameters) are optional. If they are not given, they are inferred from the type of the value. For example, in the example above, as 1e-7 is a floating point number, the parameters name used is MSK_DPAR_INTPNT_CO_TOL_DFEAS.

+set_attribute(model, "INTPNT_CO_TOL_DFEAS", 1e-7)

Options

The parameter QUIET is a special parameter that when set to true disables all Mosek printing output.

All other parameters can be found in the Mosek documentation.

Note that the prefix MSK_IPAR_ (for integer parameters), MSK_DPAR_ (for floating point parameters) or MSK_SPAR_ (for string parameters) are optional. If they are not given, they are inferred from the type of the value. For example, in the example above, as 1e-7 is a floating point number, the parameters name used is MSK_DPAR_INTPNT_CO_TOL_DFEAS.

diff --git a/dev/packages/MultiObjectiveAlgorithms/index.html b/dev/packages/MultiObjectiveAlgorithms/index.html index 88c522dd444..73570b725a5 100644 --- a/dev/packages/MultiObjectiveAlgorithms/index.html +++ b/dev/packages/MultiObjectiveAlgorithms/index.html @@ -3,10 +3,10 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -
An image of the Moa bird. Licensed into the Public Domain by https://freesvg.org/moa

MultiObjectiveAlgorithms.jl

Build Status codecov

MultiObjectiveAlgorithms.jl (MOA) is a collection of algorithms for multi-objective optimization.

License

MultiObjectiveAlgorithms.jl is licensed under the MPL 2.0 License.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

Installation

Install MOA using Pkg.add:

import Pkg
+
An image of the Moa bird. Licensed into the Public Domain by https://freesvg.org/moa

MultiObjectiveAlgorithms.jl

Build Status codecov

MultiObjectiveAlgorithms.jl (MOA) is a collection of algorithms for multi-objective optimization.

License

MultiObjectiveAlgorithms.jl is licensed under the MPL 2.0 License.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

Installation

Install MOA using Pkg.add:

import Pkg
 Pkg.add("MultiObjectiveAlgorithms")

Use with JuMP

Use MultiObjectiveAlgorithms with JuMP as follows:

using JuMP
 import HiGHS
 import MultiObjectiveAlgorithms as MOA
 model = JuMP.Model(() -> MOA.Optimizer(HiGHS.Optimizer))
 set_attribute(model, MOA.Algorithm(), MOA.Dichotomy())
-set_attribute(model, MOA.SolutionLimit(), 4)

Replace HiGHS.Optimizer with an optimizer capable of solving a single-objective instance of your optimization problem.

You may set additional optimizer attributes, the supported attributes depend on the choice of solution algorithm.

Algorithm

Set the algorithm using the MOA.Algorithm() attribute.

The value must be one of the algorithms supported by MOA:

  • MOA.Chalmet()
  • MOA.Dichotomy()
  • MOA.DominguezRios()
  • MOA.EpsilonConstraint()
  • MOA.Hierarchical()
  • MOA.KirlikSayin()
  • MOA.Lexicographic() [default]
  • MOA.TambyVanderpooten()

Consult their docstrings for details.

Other optimizer attributes

There are a number of optimizer attributes supported by the algorithms in MOA.

Each algorithm supports only a subset of the attributes. Consult the algorithm's docstring for details on which attributes it supports, and how it uses them in the solution process.

  • MOA.EpsilonConstraintStep()
  • MOA.LexicographicAllPermutations()
  • MOA.ObjectiveAbsoluteTolerance(index::Int)
  • MOA.ObjectivePriority(index::Int)
  • MOA.ObjectiveRelativeTolerance(index::Int)
  • MOA.ObjectiveWeight(index::Int)
  • MOA.SolutionLimit()
  • MOI.TimeLimitSec()
+set_attribute(model, MOA.SolutionLimit(), 4)

Replace HiGHS.Optimizer with an optimizer capable of solving a single-objective instance of your optimization problem.

You may set additional optimizer attributes, the supported attributes depend on the choice of solution algorithm.

Algorithm

Set the algorithm using the MOA.Algorithm() attribute.

The value must be one of the algorithms supported by MOA:

  • MOA.Chalmet()
  • MOA.Dichotomy()
  • MOA.DominguezRios()
  • MOA.EpsilonConstraint()
  • MOA.Hierarchical()
  • MOA.KirlikSayin()
  • MOA.Lexicographic() [default]
  • MOA.TambyVanderpooten()

Consult their docstrings for details.

Other optimizer attributes

There are a number of optimizer attributes supported by the algorithms in MOA.

Each algorithm supports only a subset of the attributes. Consult the algorithm's docstring for details on which attributes it supports, and how it uses them in the solution process.

  • MOA.EpsilonConstraintStep()
  • MOA.LexicographicAllPermutations()
  • MOA.ObjectiveAbsoluteTolerance(index::Int)
  • MOA.ObjectivePriority(index::Int)
  • MOA.ObjectiveRelativeTolerance(index::Int)
  • MOA.ObjectiveWeight(index::Int)
  • MOA.SolutionLimit()
  • MOI.TimeLimitSec()
diff --git a/dev/packages/NEOSServer/index.html b/dev/packages/NEOSServer/index.html index c3333ef21dc..77e1f2aaf26 100644 --- a/dev/packages/NEOSServer/index.html +++ b/dev/packages/NEOSServer/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

NEOSServer.jl

Build Status codecov

NEOSServer.jl is a wrapper for the NEOS Server, a free internet-based service for solving numerical optimization problems.

See here for the full list of solvers and input formats that NEOS supports.

Affiliation

This wrapper is maintained by the JuMP community and is not an official interface of the NEOS Server.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

NEOSServer.jl is licensed under the MIT License.

Use of the NEOS Server requires you to comply with NEOS Server terms of use.

In particular, the commercial solvers are to be used solely for academic, non-commercial research purposes.

Installation

Install NEOSServer.jl using the package manager:

import Pkg
+

NEOSServer.jl

Build Status codecov

NEOSServer.jl is a wrapper for the NEOS Server, a free internet-based service for solving numerical optimization problems.

See here for the full list of solvers and input formats that NEOS supports.

Affiliation

This wrapper is maintained by the JuMP community and is not an official interface of the NEOS Server.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

NEOSServer.jl is licensed under the MIT License.

Use of the NEOS Server requires you to comply with NEOS Server terms of use.

In particular, the commercial solvers are to be used solely for academic, non-commercial research purposes.

Installation

Install NEOSServer.jl using the package manager:

import Pkg
 Pkg.add("NEOSServer")

The NEOS API

This package contains an interface for the NEOS XML-RPC API.

The following example shows how you can interact with the API. Wrapped XML-RPC functions begin with neos_ and are exported.

using NEOSServer
 
 # Create a server. You must supply a valid email:
@@ -27,4 +27,4 @@
 results = neos_getFinalResults(server, job)

Use with JuMP

Use NEOSServer.jl with JuMP as follows:

using JuMP, NEOSServer
 model = Model() do
     return NEOSServer.Optimizer(; email = "me@mydomain.com", solver = "Ipopt")
-end

Note: NEOSServer.Optimizer is limited to the following solvers:

  • "CPLEX"
  • "FICO-Xpress"
  • "Ipopt"
  • "Knitro"
  • "MOSEK"
  • "OCTERACT"
  • "SNOPT"

NEOS Limits

NEOS currently limits jobs to an 8 hour time limit, 3 GB of memory, and a 16 MB submission file. If your model exceeds these limits, NEOSServer.jl may be unable to return useful information to the user.

+end

Note: NEOSServer.Optimizer is limited to the following solvers:

  • "CPLEX"
  • "FICO-Xpress"
  • "Ipopt"
  • "Knitro"
  • "MOSEK"
  • "OCTERACT"
  • "SNOPT"

NEOS Limits

NEOS currently limits jobs to an 8 hour time limit, 3 GB of memory, and a 16 MB submission file. If your model exceeds these limits, NEOSServer.jl may be unable to return useful information to the user.

diff --git a/dev/packages/NLopt/index.html b/dev/packages/NLopt/index.html index a94ef192cfc..772291e9932 100644 --- a/dev/packages/NLopt/index.html +++ b/dev/packages/NLopt/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

NLopt.jl

Build Status codecov

NLopt.jl is a wrapper for the NLopt library for nonlinear optimization.

NLopt provides a common interface for many different optimization algorithms, including:

  • Both global and local optimization
  • Algorithms using function values only (derivative-free) and also algorithms exploiting user-supplied gradients.
  • Algorithms for unconstrained optimization, bound-constrained optimization, and general nonlinear inequality/equality constraints.

License

NLopt.jl is licensed under the MIT License.

The underlying solver, stevengj/nlopt, is licensed under the LGPL v3.0 license.

Installation

Install NLopt.jl using the Julia package manager:

import Pkg
+

NLopt.jl

Build Status codecov

NLopt.jl is a wrapper for the NLopt library for nonlinear optimization.

NLopt provides a common interface for many different optimization algorithms, including:

  • Both global and local optimization
  • Algorithms using function values only (derivative-free) and also algorithms exploiting user-supplied gradients.
  • Algorithms for unconstrained optimization, bound-constrained optimization, and general nonlinear inequality/equality constraints.

License

NLopt.jl is licensed under the MIT License.

The underlying solver, stevengj/nlopt, is licensed under the LGPL v3.0 license.

Installation

Install NLopt.jl using the Julia package manager:

import Pkg
 Pkg.add("NLopt")

In addition to installing the NLopt.jl package, this will also download and install the NLopt binaries. You do not need to install NLopt separately.

Tutorial

The following example code solves the nonlinearly constrained minimization problem from the NLopt Tutorial.

using NLopt
 function my_objective_fn(x::Vector, grad::Vector)
     if length(grad) > 0
@@ -120,4 +120,4 @@
     opt = Opt(:LD_MMA, 2)
     # Define problem
     solutions[i] = optimize(opt, rand(2))
-end

Author

This module was initially written by Steven G. Johnson, with subsequent contributions by several other authors (see the git history).

+end

Author

This module was initially written by Steven G. Johnson, with subsequent contributions by several other authors (see the git history).

diff --git a/dev/packages/OSQP/index.html b/dev/packages/OSQP/index.html index bf94416e376..8ff292cf403 100644 --- a/dev/packages/OSQP/index.html +++ b/dev/packages/OSQP/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

OSQP.jl

Build Status codecov.io

OSQP.jl is a Julia wrapper for OSQP: the Operator Splitting QP Solver.

License

OSQP.jl is licensed under the Apache-2.0 license.

The upstream solver, osqp/osqp is also licensed under the Apache-2.0 license.

Installation

Install OSQP.jl using the Julia package manager

import Pkg
+

OSQP.jl

Build Status codecov.io

OSQP.jl is a Julia wrapper for OSQP: the Operator Splitting QP Solver.

License

OSQP.jl is licensed under the Apache-2.0 license.

The upstream solver, osqp/osqp is also licensed under the Apache-2.0 license.

Installation

Install OSQP.jl using the Julia package manager

import Pkg
 Pkg.add("OSQP")

Problem class

The OSQP (Operator Splitting Quadratic Program) solver is a numerical optimization package for solving problems in the form

minimize        0.5 x' P x + q' x
 
-subject to      l <= A x <= u

where x in R^n is the optimization variable. The objective function is defined by a positive semidefinite matrix P in S^n_+ and vector q in R^n. The linear constraints are defined by matrix A in R^{m x n} and vectors l in R^m U {-inf}^m, u in R^m U {+inf}^m.

Documentation

Detailed documentation is available at https://osqp.org/.

+subject to l <= A x <= u

where x in R^n is the optimization variable. The objective function is defined by a positive semidefinite matrix P in S^n_+ and vector q in R^n. The linear constraints are defined by matrix A in R^{m x n} and vectors l in R^m U {-inf}^m, u in R^m U {+inf}^m.

Documentation

Detailed documentation is available at https://osqp.org/.

diff --git a/dev/packages/Optim/index.html b/dev/packages/Optim/index.html index 5f133df0449..0ae29c98251 100644 --- a/dev/packages/Optim/index.html +++ b/dev/packages/Optim/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Optim.jl

Build Status Build Status Build Status Codecov branch JOSS

Univariate and multivariate optimization in Julia.

Optim.jl is part of the JuliaNLSolvers family.

Help and support

For help and support, please post on the Optimization (Mathematical) section of the Julia discourse or the #math-optimization channel of the Julia slack.

Installation

Install Optim.jl using the Julia package manager:

import Pkg
+

Optim.jl

Build Status Build Status Build Status Codecov branch JOSS

Univariate and multivariate optimization in Julia.

Optim.jl is part of the JuliaNLSolvers family.

Help and support

For help and support, please post on the Optimization (Mathematical) section of the Julia discourse or the #math-optimization channel of the Julia slack.

Installation

Install Optim.jl using the Julia package manager:

import Pkg
 Pkg.add("Optim")

Documentation

The online documentation is available at https://julianlsolvers.github.io/Optim.jl/stable.

Example

To minimize the Rosenbrock function, do:

julia> using Optim
 
 julia> rosenbrock(x) =  (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
@@ -105,4 +105,4 @@
   number  = {24},
   pages   = {615},
   doi     = {10.21105/joss.00615}
-}
+}
diff --git a/dev/packages/PATHSolver/index.html b/dev/packages/PATHSolver/index.html index 24e450d741f..db61894fe48 100644 --- a/dev/packages/PATHSolver/index.html +++ b/dev/packages/PATHSolver/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

PATHSolver.jl

Build Status codecov

PATHSolver.jl is a wrapper for the PATH solver.

The wrapper has two components:

You can solve any complementarity problem using the wrapper around the C API, although you must manually provide the callback functions, including the Jacobian.

The MathOptInterface wrapper is more limited, supporting only linear complementarity problems, but it enables PATHSolver to be used with JuMP.

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of PATH. However, we are in close contact with the PATH developers, and they have given us permission to re-distribute the PATH binaries for automatic installation.

License

PATHSolver.jl is licensed under the MIT License.

The underlying solver, path is closed source and requires a license.

Without a license, the PATH Solver can solve problem instances up to with up to 300 variables and 2000 non-zeros. For larger problems, this web page provides a temporary license that is valid for a year.

You can either store the license in the PATH_LICENSE_STRING environment variable, or you can use the PATHSolver.c_api_License_SetString function immediately after importing the PATHSolver package:

import PATHSolver
+

PATHSolver.jl

Build Status codecov

PATHSolver.jl is a wrapper for the PATH solver.

The wrapper has two components:

You can solve any complementarity problem using the wrapper around the C API, although you must manually provide the callback functions, including the Jacobian.

The MathOptInterface wrapper is more limited, supporting only linear complementarity problems, but it enables PATHSolver to be used with JuMP.

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of PATH. However, we are in close contact with the PATH developers, and they have given us permission to re-distribute the PATH binaries for automatic installation.

License

PATHSolver.jl is licensed under the MIT License.

The underlying solver, path is closed source and requires a license.

Without a license, the PATH Solver can solve problem instances up to with up to 300 variables and 2000 non-zeros. For larger problems, this web page provides a temporary license that is valid for a year.

You can either store the license in the PATH_LICENSE_STRING environment variable, or you can use the PATHSolver.c_api_License_SetString function immediately after importing the PATHSolver package:

import PATHSolver
 PATHSolver.c_api_License_SetString("<LICENSE STRING>")

where <LICENSE STRING> is replaced by the current license string.

Installation

Install PATHSolver.jl as follows:

import Pkg
 Pkg.add("PATHSolver")

By default, PATHSolver.jl will download a copy of the underlying PATH solver. To use a different version of PATH, see the Manual Installation section below.

Use with JuMP

julia> using JuMP, PATHSolver
 
@@ -165,4 +165,4 @@
  0.8
  1.2

Thread safety

PATH is not thread-safe and there are no known work-arounds. Do not run it in parallel using Threads.@threads. See issue #62 for more details.

Factorization methods

By default, PATHSolver.jl will download the LUSOL shared library. To use LUSOL, set the following options:

model = Model(PATHSolver.Optimizer)
 set_optimizer_attribute(model, "factorization_method", "blu_lusol")
-set_optimizer_attribute(model, "factorization_library_name", PATHSolver.LUSOL_LIBRARY_PATH)

To use factorization_method umfpack you will need the umfpack shared library that is available directly from the developers of that code for academic use.

Manual installation

By default PATHSolver.jl will download a copy of the libpath library. If you already have one installed and want to use that, set the PATH_JL_LOCATION environment variable to point to the libpath50.xx library.

+set_optimizer_attribute(model, "factorization_library_name", PATHSolver.LUSOL_LIBRARY_PATH)

To use factorization_method umfpack you will need the umfpack shared library that is available directly from the developers of that code for academic use.

Manual installation

By default PATHSolver.jl will download a copy of the libpath library. If you already have one installed and want to use that, set the PATH_JL_LOCATION environment variable to point to the libpath50.xx library.

diff --git a/dev/packages/Pajarito/index.html b/dev/packages/Pajarito/index.html index 506d34235b9..65ff54d7f30 100644 --- a/dev/packages/Pajarito/index.html +++ b/dev/packages/Pajarito/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Pajarito.jl

Build Status codecov

Pajarito is a mixed-integer convex programming (MICP) solver package written in Julia.

MICP problems are convex except for restrictions that some variables take binary or integer values.

Pajarito solves MICP problems in conic form, by constructing sequential polyhedral outer approximations of the conic feasible set.

The underlying algorithm has theoretical finite-time convergence under reasonable assumptions.

Pajarito accesses state-of-the-art MILP solvers and continuous conic solvers through MathOptInterface.

Pavito

For algorithms that use a derivative-based nonlinear programming (NLP) solver (for example, Ipopt) instead of a conic solver, use Pavito.

Pavito is a convex mixed-integer nonlinear programming (convex MINLP) solver. Because Pavito relies on gradient cuts, it can fail near points of non-differentiability. Pajarito may be more robust than Pavito on non-smooth problems.

License

Pajarito.jl is licensed under the MPL 2.0 license.

Installation

Install Pajarito using Pkg.add:

import Pkg
+

Pajarito.jl

Build Status codecov

Pajarito is a mixed-integer convex programming (MICP) solver package written in Julia.

MICP problems are convex except for restrictions that some variables take binary or integer values.

Pajarito solves MICP problems in conic form, by constructing sequential polyhedral outer approximations of the conic feasible set.

The underlying algorithm has theoretical finite-time convergence under reasonable assumptions.

Pajarito accesses state-of-the-art MILP solvers and continuous conic solvers through MathOptInterface.

Pavito

For algorithms that use a derivative-based nonlinear programming (NLP) solver (for example, Ipopt) instead of a conic solver, use Pavito.

Pavito is a convex mixed-integer nonlinear programming (convex MINLP) solver. Because Pavito relies on gradient cuts, it can fail near points of non-differentiability. Pajarito may be more robust than Pavito on non-smooth problems.

License

Pajarito.jl is licensed under the MPL 2.0 license.

Installation

Install Pajarito using Pkg.add:

import Pkg
 Pkg.add("Pajarito")

MIP and continuous solvers

The algorithm implemented by Pajarito itself is relatively simple, and most of the hard work is performed by the MIP outer approximation (OA) solver and the continuous conic solver.

Therefore, in addition to installing Pajarito, you must also install a mixed-integer linear programming solver and a continuous conic solver.

The performance of Pajarito depends on these two types of solvers.

The OA solver (typically a mixed-integer linear solver) is specified by the oa_solver option. You must first load the Julia package that provides this solver, for example, using Gurobi. The continuous conic solver is specified by the conic_solver option.

See JuMP's list of supported solvers.

Use with JuMP

To use Pajarito with JuMP, use:

using JuMP, Pajarito, HiGHS, Hypatia
 model = Model(
     optimizer_with_attributes(
@@ -27,4 +27,4 @@
     pages={249--293},
     year={2020},
     publisher={Springer}
-}

Note this paper describes a legacy MathProgBase version of Pajarito, which is available on the mathprogbase branch of this repository. Starting with version v0.8.0, Pajarito supports MathOptInterface instead of MathProgBase.

+}

Note this paper describes a legacy MathProgBase version of Pajarito, which is available on the mathprogbase branch of this repository. Starting with version v0.8.0, Pajarito supports MathOptInterface instead of MathProgBase.

diff --git a/dev/packages/ParametricOptInterface/index.html b/dev/packages/ParametricOptInterface/index.html index 1a413776056..308ac371ff6 100644 --- a/dev/packages/ParametricOptInterface/index.html +++ b/dev/packages/ParametricOptInterface/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

ParametricOptInterface.jl

stable docs development docs Build Status Coverage

ParametricOptInterface.jl is a package that adds parameters to models in JuMP and MathOptInterface.

License

ParametricOptInterface.jl is licensed under the MIT License.

Installation

Install ParametricOptInterface using Pkg.add:

import Pkg
+

ParametricOptInterface.jl

stable docs development docs Build Status Coverage

ParametricOptInterface.jl is a package that adds parameters to models in JuMP and MathOptInterface.

License

ParametricOptInterface.jl is licensed under the MIT License.

Installation

Install ParametricOptInterface using Pkg.add:

import Pkg
 Pkg.add("ParametricOptInterface")

Documentation

The documentation for ParametricOptInterface.jl includes a detailed description of the theory behind the package, along with examples, tutorials, and an API reference.

Use with JuMP

Use ParametricOptInterface with JuMP by following this brief example:

using JuMP, HiGHS
 import ParametricOptInterface as POI
 model = Model(() -> POI.Optimizer(HiGHS.Optimizer()))
@@ -13,4 +13,4 @@
 @objective(model, Min, 2x)
 optimize!(model)
 MOI.set(model, POI.ParameterValue(), p, 2.0)
-optimize!(model)

GSOC2020

ParametricOptInterface began as a NumFOCUS sponsored Google Summer of Code (2020) project.

+optimize!(model)

GSOC2020

ParametricOptInterface began as a NumFOCUS sponsored Google Summer of Code (2020) project.

diff --git a/dev/packages/Pavito/index.html b/dev/packages/Pavito/index.html index 74a888192f7..e52e9cff5ad 100644 --- a/dev/packages/Pavito/index.html +++ b/dev/packages/Pavito/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Pavito.jl

Build Status Coverage

Pavito.jl is a mixed-integer convex programming (MICP) solver package written in Julia.

MICP problems are convex, except for restrictions that some variables take binary or integer values.

Pavito solves MICP problems by constructing sequential polyhedral outer-approximations of the convex feasible set, similar to Bonmin.

Pavito accesses state-of-the-art MILP solvers and continuous, derivative-based nonlinear programming (NLP) solvers through MathOptInterface.

For algorithms that use a conic solver instead of an NLP solver, use Pajarito. Pajarito is a robust mixed-integer conic solver that can handle such established problem classes as mixed-integer second-order cone programming (MISOCP) and mixed-integer semidefinite programming (MISDP).

License

Pavito.jl is licensed under the MPL 2.0 license.

Installation

Install Pavito using Pkg.add:

import Pkg
+

Pavito.jl

Build Status Coverage

Pavito.jl is a mixed-integer convex programming (MICP) solver package written in Julia.

MICP problems are convex, except for restrictions that some variables take binary or integer values.

Pavito solves MICP problems by constructing sequential polyhedral outer-approximations of the convex feasible set, similar to Bonmin.

Pavito accesses state-of-the-art MILP solvers and continuous, derivative-based nonlinear programming (NLP) solvers through MathOptInterface.

For algorithms that use a conic solver instead of an NLP solver, use Pajarito. Pajarito is a robust mixed-integer conic solver that can handle such established problem classes as mixed-integer second-order cone programming (MISOCP) and mixed-integer semidefinite programming (MISDP).

License

Pavito.jl is licensed under the MPL 2.0 license.

Installation

Install Pavito using Pkg.add:

import Pkg
 Pkg.add("Pavito")

Use with JuMP

To use Pavito with JuMP, use Pavito.Optimizer:

using JuMP, Pavito
 import GLPK, Ipopt
 model = Model(
@@ -13,4 +13,4 @@
         "cont_solver" =>
             optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 0),
     ),
-)

The algorithm implemented by Pavito itself is relatively simple; most of the hard work is performed by the MILP solver passed as mip_solver and the NLP solver passed as cont_solver.

The performance of Pavito depends on these two types of solvers.

For better performance, you should use a commercial MILP solver such as CPLEX or Gurobi.

Options

The following optimizer attributes can set to a Pavito.Optimizer to modify its behavior:

  • log_level::Int Verbosity flag: 0 for quiet, higher for basic solve info
  • timeout::Float64 Time limit for algorithm (in seconds)
  • rel_gap::Float64 Relative optimality gap termination condition
  • mip_solver_drives::Bool Let MILP solver manage convergence ("branch and cut")
  • mip_solver::MOI.OptimizerWithAttributes MILP solver
  • cont_solver::MOI.OptimizerWithAttributes Continuous NLP solver

Pavito is not yet numerically robust and may require tuning of parameters to improve convergence.

If the default parameters don't work for you, please let us know by opening an issue.

For improved Pavito performance, MILP solver integrality tolerance and feasibility tolerances should typically be tightened, for example to 1e-8.

Bug reports and support

Please report any issues via the GitHub issue tracker. All types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc. The Optimization (Mathematical) category on Discourse is appropriate for general discussion.

+)

The algorithm implemented by Pavito itself is relatively simple; most of the hard work is performed by the MILP solver passed as mip_solver and the NLP solver passed as cont_solver.

The performance of Pavito depends on these two types of solvers.

For better performance, you should use a commercial MILP solver such as CPLEX or Gurobi.

Options

The following optimizer attributes can set to a Pavito.Optimizer to modify its behavior:

  • log_level::Int Verbosity flag: 0 for quiet, higher for basic solve info
  • timeout::Float64 Time limit for algorithm (in seconds)
  • rel_gap::Float64 Relative optimality gap termination condition
  • mip_solver_drives::Bool Let MILP solver manage convergence ("branch and cut")
  • mip_solver::MOI.OptimizerWithAttributes MILP solver
  • cont_solver::MOI.OptimizerWithAttributes Continuous NLP solver

Pavito is not yet numerically robust and may require tuning of parameters to improve convergence.

If the default parameters don't work for you, please let us know by opening an issue.

For improved Pavito performance, MILP solver integrality tolerance and feasibility tolerances should typically be tightened, for example to 1e-8.

Bug reports and support

Please report any issues via the GitHub issue tracker. All types of issues are welcome and encouraged; this includes bug reports, documentation typos, feature requests, etc. The Optimization (Mathematical) category on Discourse is appropriate for general discussion.

diff --git a/dev/packages/Percival/index.html b/dev/packages/Percival/index.html index 1a41eec6b1a..df92508efe9 100644 --- a/dev/packages/Percival/index.html +++ b/dev/packages/Percival/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Percival.jl - An augmented Lagrangian solver

CI codecov.io docs-stable docs-dev DOI

Percival is an implementation of the augmented Lagrangian solver described in

S. Arreckx, A. Lambe, Martins, J. R. R. A., & Orban, D. (2016).
+

Percival.jl - An augmented Lagrangian solver

CI codecov.io docs-stable docs-dev DOI

Percival is an implementation of the augmented Lagrangian solver described in

S. Arreckx, A. Lambe, Martins, J. R. R. A., & Orban, D. (2016).
 A Matrix-Free Augmented Lagrangian Algorithm with Application to Large-Scale Structural Design Optimization.
 Optimization And Engineering, 17, 359–384. doi:10.1007/s11081-015-9287-9

with internal solver tron from JSOSolvers.jl. To use Percival, you have to pass it an NLPModel.

How to Cite

If you use Percival.jl in your work, please cite using the format given in CITATION.bib.

Install

Use ] to enter pkg> mode of Julia, then

pkg> add Percival

Examples

Consider the following 2-dimensional optimization problem with an equality constraint

\[\begin{equation} \min_{(x_1,x_2)} \quad (x_1 - 1)^2 + 100 (x_2 - x_1^2)^2 \quad \text{s.to} \quad x_1^2 + x_2^2 = 1. @@ -22,4 +22,4 @@ [1.0], [1.0], ) -output = percival(nlp, verbose = 1)

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

If you want to ask a question not suited for a bug report, feel free to start a discussion here. This forum is for general discussion about this repository and the JuliaSmoothOptimizers, so questions about any of our packages are welcome.

+output = percival(nlp, verbose = 1)

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

If you want to ask a question not suited for a bug report, feel free to start a discussion here. This forum is for general discussion about this repository and the JuliaSmoothOptimizers, so questions about any of our packages are welcome.

diff --git a/dev/packages/PiecewiseLinearOpt/index.html b/dev/packages/PiecewiseLinearOpt/index.html index 6857539453e..8d1413980f9 100644 --- a/dev/packages/PiecewiseLinearOpt/index.html +++ b/dev/packages/PiecewiseLinearOpt/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

PiecewiseLinearOpt.jl

Build Status codecov

PiecewiseLinearOpt.jl is a JuMP extension for modeling optimization problems containing piecewise linear functions.

This package is an accompaniment to a paper entitled Nonconvex piecewise linear functions: Advanced formulations and simple modeling tools, by Joey Huchette and Juan Pablo Vielma.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

PiecewiseLinearOpt.jl is licensed under the MIT license.

Installation

Install PiecewiseLinearOpt using Pkg.add:

import Pkg
+

PiecewiseLinearOpt.jl

Build Status codecov

PiecewiseLinearOpt.jl is a JuMP extension for modeling optimization problems containing piecewise linear functions.

This package is an accompaniment to a paper entitled Nonconvex piecewise linear functions: Advanced formulations and simple modeling tools, by Joey Huchette and Juan Pablo Vielma.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

PiecewiseLinearOpt.jl is licensed under the MIT license.

Installation

Install PiecewiseLinearOpt using Pkg.add:

import Pkg
 Pkg.add("PiecewiseLinearOpt")

Use with JuMP

Current support is limited to modeling the graph of a continuous piecewise linear function, either univariate or bivariate, with the goal of adding support for the epigraphs of lower semicontinuous piecewise linear functions.

Univariate

Consider a piecewise linear function f. The function is described a domain d, which is a set of breakpoints between pieces, and the function value fd at those breakpoints:

julia> f(x) = sin(x)
 f (generic function with 1 method)
 
@@ -41,4 +41,4 @@
     (u, v) -> exp(u + v);
     method = :DisaggLogarithmic,
 )
-@objective(model, Min, z)

Methods

Supported univariate formulations:

  • Convex combination (:CC)
  • Multiple choice (:MC)
  • Native SOS2 branching (:SOS2)
  • Incremental (:Incremental)
  • Logarithmic (:Logarithmic; default)
  • Disaggregated Logarithmic (:DisaggLogarithmic)
  • Binary zig-zag (:ZigZag)
  • General integer zig-zag (:ZigZagInteger)

Supported bivariate formulations for entire constraint:

  • Convex combination (:CC)
  • Multiple choice (:MC)
  • Disaggregated Logarithmic (:DisaggLogarithmic)

Also, you can use any univariate formulation for bivariate functions as well. They will be used to impose two axis-aligned SOS2 constraints, along with the "6-stencil" formulation for the triangle selection portion of the constraint. See the associated paper for more details. In particular, the following are also acceptable bivariate formulation choices:

  • Native SOS2 branching (:SOS2)
  • Incremental (:Incremental)
  • Logarithmic (:Logarithmic)
  • Binary zig-zag (:ZigZag)
  • General integer zig-zag (:ZigZagInteger)
+@objective(model, Min, z)

Methods

Supported univariate formulations:

  • Convex combination (:CC)
  • Multiple choice (:MC)
  • Native SOS2 branching (:SOS2)
  • Incremental (:Incremental)
  • Logarithmic (:Logarithmic; default)
  • Disaggregated Logarithmic (:DisaggLogarithmic)
  • Binary zig-zag (:ZigZag)
  • General integer zig-zag (:ZigZagInteger)

Supported bivariate formulations for entire constraint:

  • Convex combination (:CC)
  • Multiple choice (:MC)
  • Disaggregated Logarithmic (:DisaggLogarithmic)

Also, you can use any univariate formulation for bivariate functions as well. They will be used to impose two axis-aligned SOS2 constraints, along with the "6-stencil" formulation for the triangle selection portion of the constraint. See the associated paper for more details. In particular, the following are also acceptable bivariate formulation choices:

  • Native SOS2 branching (:SOS2)
  • Incremental (:Incremental)
  • Logarithmic (:Logarithmic)
  • Binary zig-zag (:ZigZag)
  • General integer zig-zag (:ZigZagInteger)
diff --git a/dev/packages/Plasmo/index.html b/dev/packages/Plasmo/index.html index de8600997db..5bfcf133e1e 100644 --- a/dev/packages/Plasmo/index.html +++ b/dev/packages/Plasmo/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

CI codecov DOI

Plasmo.jl

(Platform for Scalable Modeling and Optimization)

[!NOTE] Plasmo.jl has undergone significant refactorization with the release of version 0.6. While most syntax should still work, we advise checking out the documentation for the latest updates and filing an issue if a v0.5 model produces errors.

Plasmo.jl is a graph-based algebraic modeling framework for building, managing, and solving optimization problems that utilizes graph-theoretic concepts and modular data structures. The package extends JuMP.jl to offer concise syntax, interfaces with MathOptInterface.jl to access standard optimization solvers, and utilizes Graphs.jl to provide graph analysis and processing methods. Plasmo.jl facilitates developing optimization models for networked systems such as supply chains, power systems, industrial processes, or any coupled system that involves multiple components and connections. The package also acts as a high-level platform to develop customized optimization-based decomposition techniques and meta-algorithms to optimize problems over large systems.

Overview

The core object in Plasmo.jl is the OptiGraph, a graph data structure that represents optimization problems as a set of optinodes and optiedges. Optinodes encapsulate variables, expressions, and constraints (and objective functions) as modular models and edges encapsulate linking constraints that couple variables across optinodes. Optigraphs can be embedded within other optigraphs to induce nested hierarchical structures, or they can be partitioned using different graph projections and partitioning algorithms to create new decomposition structures.

The core data structure in Plasmo.jl is the OptiGraph. The optigraph contains a set of optinodes which represent self-contained optimization problems and optiedges that represent coupling between optinodes (which produces an underlying hypergraph structure of optinodes and optiedges). Optigraphs can further be embedded within other optigraphs to create nested hierarchical graph structures. The graph structures obtained using Plasmo.jl can be used for simple model and data management, but they can also be used to perform graph partitioning or develop interfaces to structured optimization solvers.

License

Plasmo.jl is licensed under the MPL 2.0 license.

Installation

Install Plasmo using Pkg.add:

import Pkg
+

CI codecov DOI

Plasmo.jl

(Platform for Scalable Modeling and Optimization)

[!NOTE] Plasmo.jl has undergone significant refactorization with the release of version 0.6. While most syntax should still work, we advise checking out the documentation for the latest updates and filing an issue if a v0.5 model produces errors.

Plasmo.jl is a graph-based algebraic modeling framework for building, managing, and solving optimization problems that utilizes graph-theoretic concepts and modular data structures. The package extends JuMP.jl to offer concise syntax, interfaces with MathOptInterface.jl to access standard optimization solvers, and utilizes Graphs.jl to provide graph analysis and processing methods. Plasmo.jl facilitates developing optimization models for networked systems such as supply chains, power systems, industrial processes, or any coupled system that involves multiple components and connections. The package also acts as a high-level platform to develop customized optimization-based decomposition techniques and meta-algorithms to optimize problems over large systems.

Overview

The core object in Plasmo.jl is the OptiGraph, a graph data structure that represents optimization problems as a set of optinodes and optiedges. Optinodes encapsulate variables, expressions, and constraints (and objective functions) as modular models and edges encapsulate linking constraints that couple variables across optinodes. Optigraphs can be embedded within other optigraphs to induce nested hierarchical structures, or they can be partitioned using different graph projections and partitioning algorithms to create new decomposition structures.

The core data structure in Plasmo.jl is the OptiGraph. The optigraph contains a set of optinodes which represent self-contained optimization problems and optiedges that represent coupling between optinodes (which produces an underlying hypergraph structure of optinodes and optiedges). Optigraphs can further be embedded within other optigraphs to create nested hierarchical graph structures. The graph structures obtained using Plasmo.jl can be used for simple model and data management, but they can also be used to perform graph partitioning or develop interfaces to structured optimization solvers.

License

Plasmo.jl is licensed under the MPL 2.0 license.

Installation

Install Plasmo using Pkg.add:

import Pkg
 Pkg.add("Plasmo")

Documentation

The current documentation is available through GitHub Pages. Additional examples can be found in the examples folder.

Simple Example

using Plasmo
 using Ipopt
 
@@ -50,4 +50,4 @@
 volume = {125},
 year = {2019},
 doi = {10.1016/j.compchemeng.2019.03.009}
-}

A pre-print of this paper can be found here

+}

A pre-print of this paper can be found here

diff --git a/dev/packages/PolyJuMP/index.html b/dev/packages/PolyJuMP/index.html index 3e32f6b888d..224655b22cb 100644 --- a/dev/packages/PolyJuMP/index.html +++ b/dev/packages/PolyJuMP/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

PolyJuMP.jl

Build Status codecov

PolyJuMP.jl is a JuMP extension for formulating and solving polynomial optimization problems. This extension includes the following:

  • Polynomial functions on JuMP decisions variables. These can be solved with the PolyJuMP.QCQP.Optimizer or PolyJuMP.KKT.Optimizer.
  • Constraints that a polynomial is nonnegative where the coefficients of the polynomials depend on JuMP decision variables. These nonnegativity constraints can be reformulated using sufficient conditions using PolyJuMP.RelativeEntropy submodule or SumOfSquares.jl.

License

PolyJuMP.jl is licensed under the MIT license.

Installation

Install PolyJuMP using Pkg.add:

import Pkg
+

PolyJuMP.jl

Build Status codecov

PolyJuMP.jl is a JuMP extension for formulating and solving polynomial optimization problems. This extension includes the following:

  • Polynomial functions on JuMP decisions variables. These can be solved with the PolyJuMP.QCQP.Optimizer or PolyJuMP.KKT.Optimizer.
  • Constraints that a polynomial is nonnegative where the coefficients of the polynomials depend on JuMP decision variables. These nonnegativity constraints can be reformulated using sufficient conditions using PolyJuMP.RelativeEntropy submodule or SumOfSquares.jl.

License

PolyJuMP.jl is licensed under the MIT license.

Installation

Install PolyJuMP using Pkg.add:

import Pkg
 Pkg.add("PolyJuMP")

Use with JuMP

Polynomial nonnegativity constraints

PolyJuMP allows encoding a constraint that a polynomial should be nonnegative for all values of some symbolic variables defined with DynamicPolynomials.@polyvar or TypedPolynomials.@polyvar as follows. For instance, the following constrains the JuMP decision variable a to be such that a * x * y^2 + y^3 - a * x is nonnegative for all real values of x and y:

using DynamicPolynomials
 @polyvar x y
 using JuMP
@@ -17,4 +17,4 @@
 model = Model(optimizer_with_attributes(
     PolyJuMP.KKT.Optimizer,
     "solver" => HomotopyContinuation.SemialgebraicSetsHCSolver(),
-))

Documentation

Documentation for PolyJuMP.jl is included in the documentation for SumOfSquares.jl.

+))

Documentation

Documentation for PolyJuMP.jl is included in the documentation for SumOfSquares.jl.

diff --git a/dev/packages/ProxSDP/index.html b/dev/packages/ProxSDP/index.html index 9abd2084448..f8469922cef 100644 --- a/dev/packages/ProxSDP/index.html +++ b/dev/packages/ProxSDP/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -
logo

ProxSDP is an open-source semidefinite programming (SDP) solver based on the paper "Exploiting Low-Rank Structure in Semidefinite Programming by Approximate Operator Splitting".

The main advantage of ProxSDP over other state-of-the-art solvers is the ability to exploit the low-rank structure inherent to several SDP problems.

Overview of problems ProxSDP can solve

License

ProxSDP is licensed under the MIT License.

Installation

Install ProxSDP using Julia package manager:

import Pkg
+
logo

ProxSDP is an open-source semidefinite programming (SDP) solver based on the paper "Exploiting Low-Rank Structure in Semidefinite Programming by Approximate Operator Splitting".

The main advantage of ProxSDP over other state-of-the-art solvers is the ability to exploit the low-rank structure inherent to several SDP problems.

Overview of problems ProxSDP can solve

License

ProxSDP is licensed under the MIT License.

Installation

Install ProxSDP using Julia package manager:

import Pkg
 Pkg.add("ProxSDP")

Documentation

The online documentation is available at https://mariohsouto.github.io/ProxSDP.jl/latest/.

Usage

Consider the semidefinite programming relaxation of the max-cut problem, as in:

max   0.25 * W•X
 s.t.  diag(X) = 1,
       X ≽ 0,

JuMP

This problem can be solved by the following code using ProxSDP and JuMP.

# Load packages
@@ -56,4 +56,4 @@
   publisher = {Taylor & Francis},
   doi = {10.1080/02331934.2020.1823387},
   URL = {https://doi.org/10.1080/02331934.2020.1823387}
-}

The preprint version of the paper can be found here.

Disclaimer

  • ProxSDP is a research software, therefore it should not be used in production.
  • Please open an issue if you find any problems, developers will try to fix and find alternatives.
  • There is no continuous development for 32-bit systems, the package should work, but might reach some issues.
  • ProxSDP assumes primal and dual feasibility.

ROAD MAP

  • Support for exponential and power cones
  • Warm start
+}

The preprint version of the paper can be found here.

Disclaimer

  • ProxSDP is a research software, therefore it should not be used in production.
  • Please open an issue if you find any problems, developers will try to fix and find alternatives.
  • There is no continuous development for 32-bit systems, the package should work, but might reach some issues.
  • ProxSDP assumes primal and dual feasibility.

ROAD MAP

  • Support for exponential and power cones
  • Warm start
diff --git a/dev/packages/SCIP/index.html b/dev/packages/SCIP/index.html index ca13f3cc01e..8ed0c8cd05e 100644 --- a/dev/packages/SCIP/index.html +++ b/dev/packages/SCIP/index.html @@ -3,11 +3,11 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SCIP.jl

Build Status codecov Genie Downloads

SCIP.jl is a Julia interface to the SCIP solver.

Affiliation

This wrapper is maintained by the SCIP project with the help of the JuMP community.

License

SCIP.jl is licensed under the MIT License.

The underlying solver, scipopt/scip, is licensed under the Apache 2.0 license.

Installation

Install SCIP.jl using Pkg.add:

import Pkg
+

SCIP.jl

Build Status codecov Genie Downloads

SCIP.jl is a Julia interface to the SCIP solver.

Affiliation

This wrapper is maintained by the SCIP project with the help of the JuMP community.

License

SCIP.jl is licensed under the MIT License.

The underlying solver, scipopt/scip, is licensed under the Apache 2.0 license.

Installation

Install SCIP.jl using Pkg.add:

import Pkg
 Pkg.add("SCIP")

On MacOS and Linux, installing the SCIP Julia package will work out of the box and install the SCIP_jll.jl and SCIP_PaPILO_jll.jl dependencies.

On Windows, a separate installation of SCIP is still mandatory, as detailed in the "Custom installation" section below.

Custom installations

If you use an older Julia version, Windows, or you want a custom SCIP installation, you must manually install the SCIP binaries.

Once installed, set the SCIPOPTDIR environment variable to point to the installation path, that is, depending on your operating system, $SCIPOPTDIR/lib/libscip.so, $SCIPOPTDIR/lib/libscip.dylib, or $SCIPOPTDIR/bin/scip.dll must exist.

Then, install SCIP.jl using Pkg.add and Pkg.build:

ENV["SCIPOPTDIR"] = "/Users/Oscar/code/SCIP"
 import Pkg
 Pkg.add("SCIP")
 Pkg.build("SCIP")

Use with JuMP

Use SCIP with JuMP as follows:

using JuMP, SCIP
 model = Model(SCIP.Optimizer)
 set_attribute(model, "display/verblevel", 0)
-set_attribute(model, "limits/gap", 0.05)

Options

See the SCIP documentation for a list of supported options.

MathOptInterface API

The SCIP optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Design considerations

Wrapping the public API

All of the public API methods are wrapped and available within the SCIP package. This includes the scip_*.h and pub_*.h headers that are collected in scip.h, as well as all default constraint handlers (cons_*.h.)

The wrapped functions do not transform any data structures and work on the raw pointers (for example, SCIP* in C, Ptr{SCIP_} in Julia). Convenience wrapper functions based on Julia types are added as needed.

Memory management

Programming with SCIP requires dealing with variable and constraint objects that use reference counting for memory management.

The SCIP.Optimizer wrapper type collects lists of SCIP_VAR* and SCIP_CONS* under the hood, and it releases all references when it is garbage collected itself (via finalize).

When adding a variable (add_variable) or a constraint (add_linear_constraint), an integer index is returned. This index can be used to retrieve the SCIP_VAR* or SCIP_CONS* pointer via get_var and get_cons respectively.

Supported nonlinear operators

Supported operators in nonlinear expressions are as follows:

  • +
  • -
  • *
  • /
  • ^
  • sqrt
  • exp
  • log
  • abs
  • cos
  • sin
+set_attribute(model, "limits/gap", 0.05)

Options

See the SCIP documentation for a list of supported options.

MathOptInterface API

The SCIP optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Design considerations

Wrapping the public API

All of the public API methods are wrapped and available within the SCIP package. This includes the scip_*.h and pub_*.h headers that are collected in scip.h, as well as all default constraint handlers (cons_*.h.)

The wrapped functions do not transform any data structures and work on the raw pointers (for example, SCIP* in C, Ptr{SCIP_} in Julia). Convenience wrapper functions based on Julia types are added as needed.

Memory management

Programming with SCIP requires dealing with variable and constraint objects that use reference counting for memory management.

The SCIP.Optimizer wrapper type collects lists of SCIP_VAR* and SCIP_CONS* under the hood, and it releases all references when it is garbage collected itself (via finalize).

When adding a variable (add_variable) or a constraint (add_linear_constraint), an integer index is returned. This index can be used to retrieve the SCIP_VAR* or SCIP_CONS* pointer via get_var and get_cons respectively.

Supported nonlinear operators

Supported operators in nonlinear expressions are as follows:

  • +
  • -
  • *
  • /
  • ^
  • sqrt
  • exp
  • log
  • abs
  • cos
  • sin
diff --git a/dev/packages/SCS/index.html b/dev/packages/SCS/index.html index 20477006017..597b29d0951 100644 --- a/dev/packages/SCS/index.html +++ b/dev/packages/SCS/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SCS.jl

Build Status codecov

SCS.jl is a wrapper for the SCS splitting cone solver.

SCS can solve linear programs, second-order cone programs, semidefinite programs, exponential cone programs, and power cone programs.

Affiliation

This wrapper is maintained by the JuMP community and is not a project of the SCS developers.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

SCS.jl is licensed under the MIT License.

The underlying solver, cvxgrp/scs, is licensed under the MIT License.

Installation

Install SCS.jl using the Julia package manager:

import Pkg
+

SCS.jl

Build Status codecov

SCS.jl is a wrapper for the SCS splitting cone solver.

SCS can solve linear programs, second-order cone programs, semidefinite programs, exponential cone programs, and power cone programs.

Affiliation

This wrapper is maintained by the JuMP community and is not a project of the SCS developers.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

SCS.jl is licensed under the MIT License.

The underlying solver, cvxgrp/scs, is licensed under the MIT License.

Installation

Install SCS.jl using the Julia package manager:

import Pkg
 Pkg.add("SCS")

In addition to installing the SCS.jl package, this will also download and install the SCS binaries. (You do not need to install SCS separately.)

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with Convex.jl

This example shows how we can model a simple knapsack problem with Convex and use SCS to solve it.

using Convex, SCS
 items  = [:Gold, :Silver, :Bronze]
 values = [5.0, 3.0, 1.0]
@@ -53,4 +53,4 @@
 julia> SCS.is_available(SCS.GpuIndirectSolver)
 true

The GpuIndirectSolver is available on Linux x86_64 platform only.

Low-level wrapper

SCS.jl provides a low-level interface to solve a problem directly, without interfacing through MathOptInterface.

This is an advanced interface with a risk of incorrect usage. For new users, we recommend that you use the JuMP or Convex interfaces instead.

SCS solves a problem of the form:

minimize        1/2 * x' * P * x + c' * x
 subject to      A * x + s = b
-                s in K

where K is a product cone of:

  • zero cone
  • positive orthant { x | x ≥ 0 }
  • box cone { (t,x) | t*l ≤ x ≤ t*u}
  • second-order cone (SOC) { (t,x) | ||x||_2 ≤ t }
  • semi-definite cone (SDC) { X | X is psd }
  • exponential cone { (x,y,z) | y e^(x/y) ≤ z, y>0 }
  • power cone { (x,y,z) | x^a * y^(1-a) ≥ |z|, x ≥ 0, y ≥ 0 }
  • dual power cone { (u,v,w) | (u/a)^a * (v/(1-a))^(1-a) ≥ |w|, u ≥ 0, v ≥ 0 }.

To solve this problem with SCS, call SCS.scs_solve; see the docstring for details.

+ s in K

where K is a product cone of:

  • zero cone
  • positive orthant { x | x ≥ 0 }
  • box cone { (t,x) | t*l ≤ x ≤ t*u}
  • second-order cone (SOC) { (t,x) | ||x||_2 ≤ t }
  • semi-definite cone (SDC) { X | X is psd }
  • exponential cone { (x,y,z) | y e^(x/y) ≤ z, y>0 }
  • power cone { (x,y,z) | x^a * y^(1-a) ≥ |z|, x ≥ 0, y ≥ 0 }
  • dual power cone { (u,v,w) | (u/a)^a * (v/(1-a))^(1-a) ≥ |w|, u ≥ 0, v ≥ 0 }.

To solve this problem with SCS, call SCS.scs_solve; see the docstring for details.

diff --git a/dev/packages/SDDP/index.html b/dev/packages/SDDP/index.html index 4a794b43363..db70cebac2f 100644 --- a/dev/packages/SDDP/index.html +++ b/dev/packages/SDDP/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -
+
diff --git a/dev/packages/SDPA/index.html b/dev/packages/SDPA/index.html index 17d842b8672..193ec20104b 100644 --- a/dev/packages/SDPA/index.html +++ b/dev/packages/SDPA/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SDPA.jl

Build Status codecov

SDPA.jl is a wrapper for the SDPA semidefinite programming solver in double precision floating point arithmetic.

Affiliation

This wrapper is maintained by the JuMP community and is not a product of the SDPA developers.

License

SDPA.jl is licensed under the MIT License.

The underlying solver, SDPA is licensed under the GPL v2 license.

Installation

Install SDPA using Pkg.add:

import Pkg
+

SDPA.jl

Build Status codecov

SDPA.jl is a wrapper for the SDPA semidefinite programming solver in double precision floating point arithmetic.

Affiliation

This wrapper is maintained by the JuMP community and is not a product of the SDPA developers.

License

SDPA.jl is licensed under the MIT License.

The underlying solver, SDPA is licensed under the GPL v2 license.

Installation

Install SDPA using Pkg.add:

import Pkg
 Pkg.add("SDPA")

In addition to installing the SDPA.jl package, this will also download and install the SDPA binaries. (You do not need to install SDPA separately.)

If you see an error similar to:

INFO: Precompiling module GZip.
 ERROR: LoadError: LoadError: error compiling anonymous: could not load library "libz"

please see GZip.jl#54 or Flux.jl#343. In particular, in Ubuntu this issue may be resolved by running

sudo apt-get install zlib1g-dev

See SDPAFamily for the other solvers, SDPA-GMP, SDPA-DD, and SDPA-QD of the family.

Use with JuMP

using JuMP, SDPA
 model = Model(SDPA.Optimizer)
@@ -12,4 +12,4 @@
 set_attribute(model, "Mode", SDPA.PARAMETER_STABLE_BUT_SLOW)

Note that the parameters are set in the order they are given, so you can set a mode and then modify parameters from this mode.

using JuMP, SDPA
 model = Model(SDPA.Optimizer)
 set_attribute(model, "Mode", SDPA.PARAMETER_STABLE_BUT_SLOW)
-set_attribute(model, "MaxIteration", 100)

The choice of parameter mode has a large impact on the performance and stability of SDPA, and not necessarily in the way implied by the names of the modes; for example, PARAMETER_UNSTABLE_BUT_FAST can be more stable than the other modes for some problems. You should try each mode to see how it performs on your specific problem. See SDPA.jl#17 for more details.

+set_attribute(model, "MaxIteration", 100)

The choice of parameter mode has a large impact on the performance and stability of SDPA, and not necessarily in the way implied by the names of the modes; for example, PARAMETER_UNSTABLE_BUT_FAST can be more stable than the other modes for some problems. You should try each mode to see how it performs on your specific problem. See SDPA.jl#17 for more details.

diff --git a/dev/packages/SDPLR/index.html b/dev/packages/SDPLR/index.html index 1ff6e9846fd..fcbc9a9b6ad 100644 --- a/dev/packages/SDPLR/index.html +++ b/dev/packages/SDPLR/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SDPLR

Build Status codecov

SDPLR.jl is a wrapper for the SDPLR semidefinite programming solver.

License

SDPLR.jl is licensed under the MIT License.

The underlying solver, SDPLR, is licensed under the GPL v2 license.

Installation

Install SDPLR.jl using Pkg.add:

import Pkg
+

SDPLR

Build Status codecov

SDPLR.jl is a wrapper for the SDPLR semidefinite programming solver.

License

SDPLR.jl is licensed under the MIT License.

The underlying solver, SDPLR, is licensed under the GPL v2 license.

Installation

Install SDPLR.jl using Pkg.add:

import Pkg
 Pkg.add("SDPLR")

In addition to installing the SDPLR.jl package, this will also download and install the SDPLR binaries. You do not need to install SDPLR separately.

To use a custom binary, read the Custom solver binaries section of the JuMP documentation.

Use with JuMP

To use SDPLR with JuMP, use SDPLR.Optimizer:

using JuMP, SDPLR
 model = Model(SDPLR.Optimizer)

MathOptInterface API

The SDPLR optimizer supports the following constraints and attributes.

List of supported objective functions:

List of supported variable types:

List of supported constraint types:

List of supported model attributes:

Attributes

The algorithm is parametrized by the attributes that can be used both with JuMP.set_attributes and JuMP.get_attributes and have the following types and default values:

rho_f::Cdouble = 1.0e-5
 rho_c::Cdouble = 1.0e-1
@@ -50,4 +50,4 @@
         sigma *= 2
     end
     lambdaupdate = 0
-end
+end
diff --git a/dev/packages/SDPNAL/index.html b/dev/packages/SDPNAL/index.html index 45e2110063c..8d62b5fae4f 100644 --- a/dev/packages/SDPNAL/index.html +++ b/dev/packages/SDPNAL/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SDPNAL.jl

SDPNAL.jl is wrapper for the SDPNALplus solver.

The wrapper has two components:

  • an exported sdpnalplus function that is a thin wrapper on top of the sdpnalplus MATLAB function
  • an interface to MathOptInterface

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of SDPNALplus.

License

SDPNAL.jl is licensed under the MIT License.

The underlying solver, SDPNALplus is licensed under the Creative Commons Attribution-ShareAlike 4.0 International Public License.

In addition, SDPNAL requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Use with JuMP

To use SDPNAL with JuMP, do:

using JuMP, SDPNAL
+

SDPNAL.jl

SDPNAL.jl is wrapper for the SDPNALplus solver.

The wrapper has two components:

  • an exported sdpnalplus function that is a thin wrapper on top of the sdpnalplus MATLAB function
  • an interface to MathOptInterface

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of SDPNALplus.

License

SDPNAL.jl is licensed under the MIT License.

The underlying solver, SDPNALplus is licensed under the Creative Commons Attribution-ShareAlike 4.0 International Public License.

In addition, SDPNAL requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Use with JuMP

To use SDPNAL with JuMP, do:

using JuMP, SDPNAL
 model = Model(SDPNAL.Optimizer)
 set_attribute(model, "printlevel", 0)

Note that, contrary to implementation of other solver-independent interfaces, using SDPNAL from JuMP or MOI fully exploits the particular structures of the SDPNAL interface and does not create superfluous slack variables and equality constraints as discussed in the SDPNAL guide:

A new interface is necessary to facilitate the modeling of an SDP problem for SDPNAL+ because of latter’s flexibility to directly accept inequality constraints of the form “l ≤ B(X) ≤ u”, and bound constraints of the form “L ≤ X ≤ U”. The flexibility can significantly simplify the generation of the data in the SDPNAL+ format as compared to what need to be done in CVX or YALMIP to reformulate them as equality constraints through introducing extra variables. In addition, the final number of equality constraints present in the data input to SDPNAL+ can also be substantially fewer than those present in CVX or YALMIP. It is important to note here that the number of equality constraints present in the generated problem data can greatly affect the computational efficiency of the solvers, especially for interior-point based solvers.

Installation

First, make sure that you satisfy the requirements of the MATLAB.jl Julia package, and that the SDPNALplus software is installed in your MATLAB™ installation.

Then, install SDPNAL.jl using Pkg.add:

import Pkg
 Pkg.add("SDPNAL")

There is a startup.m file at the root of the SDPNAL folder. This adds all subdirectories recursively when MATLAB starts. However, the interface directory contains a .git subdirectory which contains a very large number of files. Because of this, MATLAB crashes if SDPNAL is in its path because the startup.m requests MATLAB to try to parse all the files in the .git folder. To resolve this problem, delete the startup.m file and .git folder, and add the subdirectories manually your toolbox/local/pathdef.m file as follows:

function p = pathdef
@@ -18,4 +18,4 @@
 '/path/to/SDPNALv1.0/solver:', ...
 '/path/to/SDPNALv1.0/solver_main_default:', ...
 '/path/to/SDPNALv1.0/util:', ...
-% (...)

If you have SDPT3 in addition to SDPNAL in the MATLAB path (that is, the toolbox/local/pathdef.m file) then you might have issues because both solvers define a validate function, and this might make SDPNAL call SDPT3's validate function instead of SDPT3's validate function.

+% (...)

If you have SDPT3 in addition to SDPNAL in the MATLAB path (that is, the toolbox/local/pathdef.m file) then you might have issues because both solvers define a validate function, and this might make SDPNAL call SDPT3's validate function instead of SDPT3's validate function.

diff --git a/dev/packages/SDPT3/index.html b/dev/packages/SDPT3/index.html index 3a3a782f02d..974ae411e24 100644 --- a/dev/packages/SDPT3/index.html +++ b/dev/packages/SDPT3/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SDPT3.jl

SDPT3.jl is wrapper for the SDPT3 solver.

The wrapper has two components:

  • an exported sdpt3 function that is a thin wrapper on top of the sdpt3 MATLAB function
  • an interface to MathOptInterface

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of SDPT3.

License

SDPT3.jl is licensed under the MIT License.

The underlying solver, SDPT3 is licensed under the GPL v2 License.

In addition, SDPT3 requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Use with JuMP

To use SDPT3 with JuMP, do:

using JuMP, SDPT3
+

SDPT3.jl

SDPT3.jl is wrapper for the SDPT3 solver.

The wrapper has two components:

  • an exported sdpt3 function that is a thin wrapper on top of the sdpt3 MATLAB function
  • an interface to MathOptInterface

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of SDPT3.

License

SDPT3.jl is licensed under the MIT License.

The underlying solver, SDPT3 is licensed under the GPL v2 License.

In addition, SDPT3 requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Use with JuMP

To use SDPT3 with JuMP, do:

using JuMP, SDPT3
 model = Model(SDPT3.Optimizer)
 set_attribute(model, "printlevel", 0)

Installation

First, make sure that you satisfy the requirements of the MATLAB.jl Julia package, and that the SeDuMi software is installed in your MATLAB™ installation.

Then, install SDPT3.jl using Pkg.add:

import Pkg
 Pkg.add("SDPT3")

SDPT3 not in PATH

If you get the error:

Error using save
@@ -29,4 +29,4 @@
 
 julia> MATLAB.restoredefaultpath()
 
-julia> MATLAB.mat"savepath"
+julia> MATLAB.mat"savepath"
diff --git a/dev/packages/SeDuMi/index.html b/dev/packages/SeDuMi/index.html index 699e283232b..727b1dc85a2 100644 --- a/dev/packages/SeDuMi/index.html +++ b/dev/packages/SeDuMi/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SeDuMi.jl

SeDuMi.jl is wrapper for the SeDuMi solver.

The wrapper has two components:

  • an exported sedumi function that is a thin wrapper on top of the sedumi MATLAB function
  • an interface to MathOptInterface

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of SeDuMi.

License

SeDuMi.jl is licensed under the MIT License.

The underlying solver, sqlp/sedumi is licensed under the GPL v2 license.

In addition, SeDuMi requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Use with JuMP

To use SeDuMi with JuMP, do:

using JuMP, SeDuMi
+

SeDuMi.jl

SeDuMi.jl is wrapper for the SeDuMi solver.

The wrapper has two components:

  • an exported sedumi function that is a thin wrapper on top of the sedumi MATLAB function
  • an interface to MathOptInterface

Affiliation

This wrapper is maintained by the JuMP community and is not an official wrapper of SeDuMi.

License

SeDuMi.jl is licensed under the MIT License.

The underlying solver, sqlp/sedumi is licensed under the GPL v2 license.

In addition, SeDuMi requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.

Use with JuMP

To use SeDuMi with JuMP, do:

using JuMP, SeDuMi
 model = Model(SeDuMi.Optimizer)
 set_attribute(model, "fid", 0)

Installation

First, make sure that you satisfy the requirements of the MATLAB.jl Julia package, and that the SeDuMi software is installed in your MATLAB™ installation.

Then, install SeDuMi.jl using Pkg.add:

import Pkg
 Pkg.add("SeDuMi")

If you get the error:

Undefined function or variable 'sedumi'.
@@ -17,4 +17,4 @@
            MATLAB.mat"install_sedumi"
        end
 
-julia> MATLAB.mat"savepath"
+julia> MATLAB.mat"savepath"
diff --git a/dev/packages/SumOfSquares/index.html b/dev/packages/SumOfSquares/index.html index 789e160bccb..a1df696bf0b 100644 --- a/dev/packages/SumOfSquares/index.html +++ b/dev/packages/SumOfSquares/index.html @@ -3,5 +3,5 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

SumOfSquares.jl

Build Status codecov

SumOfSquares.jl is a JuMP extension that, when used in conjunction with MultivariatePolynomial and PolyJuMP, implements a sum of squares reformulation for polynomial optimization.

License

SumOfSquares.jl is licensed under the MIT license.

Installation

Install SumOfSquares using Pkg.add:

import Pkg
-Pkg.add("SumOfSquares")

Documentation

See https://jump.dev/SumOfSquares.jl/stable for the most recently tagged version of the documentation.

See https://jump.dev/SumOfSquares.jl/dev for the in-development version of the documentation.

Presentations

Some presentations on, or using, SumOfSquares (see blegat/SumOfSquaresSlides for the source code of the presentations):

Citing

See CITATION.bib.

+

SumOfSquares.jl

Build Status codecov

SumOfSquares.jl is a JuMP extension that, when used in conjunction with MultivariatePolynomial and PolyJuMP, implements a sum of squares reformulation for polynomial optimization.

License

SumOfSquares.jl is licensed under the MIT license.

Installation

Install SumOfSquares using Pkg.add:

import Pkg
+Pkg.add("SumOfSquares")

Documentation

See https://jump.dev/SumOfSquares.jl/stable for the most recently tagged version of the documentation.

See https://jump.dev/SumOfSquares.jl/dev for the in-development version of the documentation.

Presentations

Some presentations on, or using, SumOfSquares (see blegat/SumOfSquaresSlides for the source code of the presentations):

Citing

See CITATION.bib.

diff --git a/dev/packages/Tulip/index.html b/dev/packages/Tulip/index.html index 617d93e4537..c5c84ddf0ea 100644 --- a/dev/packages/Tulip/index.html +++ b/dev/packages/Tulip/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Tulip

DOI

Tulip is an open-source interior-point solver for linear optimization, written in pure Julia. It implements the homogeneous primal-dual interior-point algorithm with multiple centrality corrections, and therefore handles unbounded and infeasible problems. Tulip’s main feature is that its algorithmic framework is disentangled from linear algebra implementations. This allows to seamlessly integrate specialized routines for structured problems.

License

Tulip is licensed under the MPL 2.0 license.

Installation

Install Tulip using the Julia package manager:

import Pkg
+

Tulip

DOI

Tulip is an open-source interior-point solver for linear optimization, written in pure Julia. It implements the homogeneous primal-dual interior-point algorithm with multiple centrality corrections, and therefore handles unbounded and infeasible problems. Tulip’s main feature is that its algorithmic framework is disentangled from linear algebra implementations. This allows to seamlessly integrate specialized routines for structured problems.

License

Tulip is licensed under the MPL 2.0 license.

Installation

Install Tulip using the Julia package manager:

import Pkg
 Pkg.add("Tulip")

Usage

The recommended way of using Tulip is through JuMP or MathOptInterface (MOI).

The low-level interface is still under development and is likely change in the future. The MOI interface is more stable.

Using with JuMP

Tulip follows the syntax convention PackageName.Optimizer:

using JuMP
 import Tulip
 model = Model(Tulip.Optimizer)

Linear objectives, linear constraints and lower/upper bounds on variables are supported.

Using with MOI

The type Tulip.Optimizer is parametrized by the model's arithmetic, for example, Float64 or BigFloat. This allows to solve problem in higher numerical precision. See the documentation for more details.

import MathOptInterface as MOI
@@ -28,4 +28,4 @@
   language = {en},
   url      = {https://doi.org/10.1007/s12532-020-00200-8},
   urldate  = {2021-03-07},
-}
+}
diff --git a/dev/packages/Xpress/index.html b/dev/packages/Xpress/index.html index f3d4c3501da..5c89433e2f8 100644 --- a/dev/packages/Xpress/index.html +++ b/dev/packages/Xpress/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Xpress.jl

Build Status codecov

Xpress.jl is a wrapper for the FICO Xpress Solver.

It has two components:

Affiliation

The Xpress wrapper for Julia is community driven and not officially supported by FICO Xpress. If you are a commercial customer interested in official support for Julia from FICO Xpress, let them know.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Xpress.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must purchase a license.

Installation

First, obtain a license of Xpress and install Xpress solver, following the instructions on the FICO website. Ensure that the XPRESSDIR license variable is set to the install location by checking the output of:

julia> ENV["XPRESSDIR"]

Then, install this package using:

import Pkg
+

Xpress.jl

Build Status codecov

Xpress.jl is a wrapper for the FICO Xpress Solver.

It has two components:

Affiliation

The Xpress wrapper for Julia is community driven and not officially supported by FICO Xpress. If you are a commercial customer interested in official support for Julia from FICO Xpress, let them know.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

Xpress.jl is licensed under the MIT License.

The underlying solver is a closed-source commercial product for which you must purchase a license.

Installation

First, obtain a license of Xpress and install Xpress solver, following the instructions on the FICO website. Ensure that the XPRESSDIR license variable is set to the install location by checking the output of:

julia> ENV["XPRESSDIR"]

Then, install this package using:

import Pkg
 Pkg.add("Xpress")

If you encounter an error, make sure that the XPRESSDIR environmental variable is set to the path of the Xpress directory. This should be part of a standard installation. The Xpress library will be searched for in XPRESSDIR/lib on Unix platforms and XPRESSDIR/bin on Windows.

For example, on macOS, you may need:

ENV["XPRESSDIR"] = "/Applications/FICO Xpress/xpressmp/"
 import Pkg
 Pkg.add("Xpress")

Skipping installation

By default, building Xpress.jl will fail if the Xpress library is not found.

This may not be desirable in certain cases, for example when part of a package's test suite uses Xpress as an optional test dependency, but Xpress cannot be installed on a CI server running the test suite.

To skip the error, set the XPRESS_JL_SKIP_LIB_CHECK environment variable to true to make Xpress.jl installable (but not usable).

ENV["XPRESS_JL_SKIP_LIB_CHECK"] = true
@@ -58,4 +58,4 @@
 @test termination_status(model) == MOI.OPTIMAL
 @test primal_status(model) == MOI.FEASIBLE_POINT
 @test value(x) == 1
-@test value(y) == 2

Environment variables

  • XPRESS_JL_SKIP_LIB_CHECK: Used to skip build lib check as previously described.
  • XPRESS_JL_NO_INFO: Disable license info log.
  • XPRESS_JL_NO_DEPS_ERROR: Disable error when do deps.jl file is found.
  • XPRESS_JL_NO_AUTO_INIT: Disable automatic run of Xpress.initialize(). Specially useful for explicitly loading the dynamic library.
  • XPRESS_JL_LIBRARY: Provide a custom path to libxprs
  • XPAUTH_PATH: Provide a custom path to the license file

C API

The C API can be accessed via Xpress.Lib.XPRSxx functions, where the names and arguments are identical to the C API.

See the Xpress documentation for details.

Documentation

For more information, consult the FICO optimizer manual.

+@test value(y) == 2

Environment variables

  • XPRESS_JL_SKIP_LIB_CHECK: Used to skip build lib check as previously described.
  • XPRESS_JL_NO_INFO: Disable license info log.
  • XPRESS_JL_NO_DEPS_ERROR: Disable error when do deps.jl file is found.
  • XPRESS_JL_NO_AUTO_INIT: Disable automatic run of Xpress.initialize(). Specially useful for explicitly loading the dynamic library.
  • XPRESS_JL_LIBRARY: Provide a custom path to libxprs
  • XPAUTH_PATH: Provide a custom path to the license file

C API

The C API can be accessed via Xpress.Lib.XPRSxx functions, where the names and arguments are identical to the C API.

See the Xpress documentation for details.

Documentation

For more information, consult the FICO optimizer manual.

diff --git a/dev/packages/solvers/index.html b/dev/packages/solvers/index.html index 4b0d9b3a2fe..84b35bf46a8 100644 --- a/dev/packages/solvers/index.html +++ b/dev/packages/solvers/index.html @@ -3,4 +3,4 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Introduction

This section of the documentation contains brief documentation for some of the solvers that JuMP supports. The list of solvers is not exhaustive, but instead is intended to help you discover commonly used solvers.

Affiliation

Packages beginning with jump-dev/ are developed and maintained by the JuMP developers. In many cases, these packages wrap external solvers that are not developed by the JuMP developers and, while the Julia packages are all open-source, in some cases the solvers themselves are closed source commercial products.

Packages that do not begin with jump-dev/ are developed independently. The developers of these packages requested or consented to the inclusion of their README contents in the JuMP documentation for the benefit of users.

Adding new solvers

Written a solver? Add it to this section of the JuMP documentation by making a pull request to the docs/packages.toml file.

+

Introduction

This section of the documentation contains brief documentation for some of the solvers that JuMP supports. The list of solvers is not exhaustive, but instead is intended to help you discover commonly used solvers.

Affiliation

Packages beginning with jump-dev/ are developed and maintained by the JuMP developers. In many cases, these packages wrap external solvers that are not developed by the JuMP developers and, while the Julia packages are all open-source, in some cases the solvers themselves are closed source commercial products.

Packages that do not begin with jump-dev/ are developed independently. The developers of these packages requested or consented to the inclusion of their README contents in the JuMP documentation for the benefit of users.

Adding new solvers

Written a solver? Add it to this section of the JuMP documentation by making a pull request to the docs/packages.toml file.

diff --git a/dev/release_notes/index.html b/dev/release_notes/index.html index f1a59fb44da..ff5f4fc2ae1 100644 --- a/dev/release_notes/index.html +++ b/dev/release_notes/index.html @@ -3,7 +3,7 @@ function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-0RZ8X3D3D0', {'page_path': location.pathname + location.search + location.hash}); -

Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Version 1.23.2 (September 13, 2024)

Fixed

  • Fixed an illegal simplification in MA.operate!! for NonlinearExpr (#3826)

Other

Version 1.23.1 (August 30, 2024)

Fixed

  • Fixed a bug with indicator constraints and the in set syntax (#3813)

Other

Version 1.23.0 (August 13, 2024)

Added

  • Added set inequality syntax for matrices (#3766)
  • Improved matrix inequality support (#3778) (#3805)

Fixed

  • Fixed a method for calling value on a ::Number (#3776)
  • Fixed querying dual of Symmetric and Hermitian equality constraints (#3797)
  • Fixed read_from_file for coefficient types other than Float64 (#3801)

Other

  • Documentation improvements
    • Fixed missing character in installation instructions (#3777)
    • Added a section of querying the Jacobian (#3779)
    • Clarify that SCIP does not support lazy constraints (#3784)
    • Fixed typo in knapsack.jl (#3792)
    • Added a warning to docs about tolerances in Bin and Int variables (#3794)
    • Clarify where to type installation commands (#3795)
  • Improve error message for common incorrect syntax in constraint macro (#3781)
  • Changed show(::IO, ::GenericModel) to a more informative tree structure (#3803)

Version 1.22.2 (June 17, 2024)

Fixed

  • Fixed printing to omit terms when printing a large array of expressions (#3759)
  • Fixed bug in printing when show is called on an invalid variable or constraint (#3763)

Other

  • Improved error message for unsupported kwargs in variable macro (#3751)
  • Improved error message for unsupported container syntax like x[A][B] (#3756)
  • Docstring improvements (#3758), (#3760), (#3761), (#3767)
  • Added warning to documentation about Y <= X, Set() syntax (#3769)
  • Work-around change on nightly (#3753), (#3754)
  • Improved printing of symmetric matrices when used in constraints (#3768)
  • Fixed a test for upcoming printing change in MOI (#3772)
  • Updated should_i_use.md (#3773)

Version 1.22.1 (May 17, 2024)

Fixed

  • Fixed bug including non-.jl files in src/macros.jl (#3747)

Other

  • Added DSDP to the list of supported solvers (#3745)
  • Updated YALMIP migration guide (#3748)

Version 1.22.0 (May 12, 2024)

Added

  • Added Base.complex(r, i) where r and i may be real-valued variables or affine or quadratic expressions (#3734)
  • Added @force_nonlinear for controlling when affine and quadratic expressions are instead parsed as nonlinear expressions. This can be useful for advanced users in a limited set of circumstances. (#3732)
  • Added support for returning the variable coefficients of a vector-valued constraint via normalized_coefficient. In addition, set_normalized_coefficients has been softly deprecated (no warning is thrown and old code will still work for all future 1.X releases of JuMP) in favor of set_normalized_coefficient. This change was made to unify how we get and set variable coefficients. (#3743)

Fixed

  • Fixed missing promote_operation method that resulted in slow code (#3730)
  • Improved performance of getindex for Containers.DenseAxisArray (#3731)
  • Fixed the error message when the legacy nonlinear API is mixed with the new nonlinear API. In particular, we now uniformly throw an error message when unexpected objects occur in nonlinear expressions. (#3741)

Other

Version 1.21.1 (April 11, 2024)

Fixed

  • Fixed behavior of complex-value related functions like real, imag, conj and abs2 when called on GenericNonlinearExpr. This fixes a method error when calling x' where x is an array of nonlinear expressions. As a related consequence, we now always error when creating nonlinear expressions with complex components. Previously, only some constructors were checked for complex expressionns. (#3724)

Other

Version 1.21.0 (March 31, 2024)

Added

  • Added support for matrix inequality constraints with the HermitianPSDCone (#3705)
  • Added batched modification methods for set_normalized_rhs, set_objective_coefficient and set_normalized_coefficient. Using these methods can be more efficient for some solvers (#3716)
  • Added the private constant _CONSTRAINT_LIMIT_FOR_PRINTING, which controls how many constraints are printed to the screen during print(model). The main purpose of this is to prevent large quantities of text being printed when print(model) is accidentally called on a large model. (#3686)

Fixed

  • Changed Containers.SparseAxisArray to use an OrderedDict as the backing data structure. Iterating over the elements in a SparseAxisArray now iterates in the order that the elements were created. Previously, the order was undefined behavior. (#3681)
  • Fixed complex variables for non-Float64 coefficient types (#3691)
  • Fixed LinearAlgebra.hermitan(::AbstractJuMPScalar) (#3693)
  • Fixed multiplying real scalar by Hermitian matrix (#3695)

Other

Version 1.20.0 (February 15, 2024)

Added

Fixed

  • Fixed compat of DimensionalData (#3666)
  • Fixed convert(::Type{NonlinearExpr}, ::Number)(#3672)

Other

  • Added Optim to list of solvers (#3624)
  • Improved linking within documentation (#3669)

Version 1.19.0 (February 1, 2024)

Added

  • Added support for modifying quadratic coefficients (#3658)

Fixed

  • Fixed short circuiting of && and || in macros (#3655)

Other

  • Added SDPLR to list of solvers (#3644)
  • Added new roadmap items (#3645)
  • Fixed vale.sh version (#3650)
  • Improve error messages in macros (#3653)
  • Refactoring of set_normalized_coefficient (#3660) (#3661)
  • Update docs/packages.toml (#3662)

Version 1.18.1 (January 6, 2024)

Fixed

Version 1.18.0 (January 2, 2024)

Added

Fixed

Other

  • Added DisjunctiveProgrammingto extension-tests (#3597)
  • Added DisjunctiveProgrammingto docs (#3598)
  • Added DocumenterCitations to the docs (#3596), (#3630)
  • Migrate from SnoopPrecompile to PrecompileTools (#3608)
  • Minor documentation updates (#3623), (#3628), (#3635), (#3640), (#3643)

Version 1.17.0 (December 4, 2023)

Added

Fixed

Other

Version 1.16.0 (October 24, 2023)

Added

  • Added := operator for Boolean satisfiability problems (#3530)

Fixed

Other

Version 1.15.1 (September 24, 2023)

Fixed

Other

Version 1.15.0 (September 15, 2023)

This is a large minor release because it adds an entirely new data structure and API path for working with nonlinear programs. The previous nonlinear interface remains unchanged and is documented at Nonlinear Modeling (Legacy). The new interface is a treated as a non-breaking feature addition and is documented at Nonlinear Modeling.

Breaking

Although the new nonlinear interface is a feature addition, there are two changes which might be breaking for a very small number of users.

  • The syntax inside JuMP macros is parsed using a different code path, even for linear and quadratic expressions. We made this change to unify how we parse linear, quadratic, and nonlinear expressions. In all cases, the new code returns equivalent expressions, but because of the different order of operations, there are three changes to be aware of when updating:
    • The printed form of the expression may change, for example from x * y to y * x. This can cause tests which test the String representation of a model to fail.
    • Some coefficients may change slightly due to floating point round-off error.
    • Particularly when working with a JuMP extension, you may encounter a MethodError due to a missing or ambiguous method. These errors are due to previously existing bugs that were not triggered by the previous parsing code. If you encounter such an error, please open a GitHub issue.
  • The methods for Base.:^(x::VariableRef, n::Integer) and Base.:^(x::AffExpr, n::Integer) have changed. Previously, these methods supported only n = 0, 1, 2 and they always returned a QuadExpr, even for the case when n = 0 or n = 1. Now:
    • x^0 returns one(T), where T is the value_type of the model (defaults to Float64)
    • x^1 returns x
    • x^2 returns a QuadExpr
    • x^n where !(0 <= n <= 2) returns a NonlinearExpr.
    We made this change to support nonlinear expressions and to align the mathematical definition of the operation with their return type. (Previously, users were surprised that x^1 returned a QuadExpr.) As a consequence of this change, the methods are now not type-stable. This means that the compiler cannot prove that x^2 returns a QuadExpr. If benchmarking shows that this is a performance problem, you can use the type-stable x * x instead of x^2.

Added

Fixed

Other

Version 1.14.1 (September 2, 2023)

Fixed

  • Fix links in Documentation (#3478)

Version 1.14.0 (August 27, 2023)

Added

Fixed

  • Fixed model_convert for BridgeableConstraint (#3437)
  • Fixed printing models with integer coefficients larger than typemax(Int) (#3447)
  • Fixed support for constant left-hand side functions in a complementarity constraint (#3452)

Other

  • Updated packages used in documentation (#3444) (#3455)
  • Fixed docstring tests (#3445)
  • Fixed printing change for MathOptInterface (#3446)
  • Fixed typos in documentation (#3448) (#3457)
  • Added SCIP to callback documentation (#3449)

Version 1.13.0 (July 27, 2023)

Added

Fixed

Other

  • Added Loraine.jl to the installation table (#3426)
  • Removed Penopt.jl from packages.toml (#3428)
  • Improved problem statement in cannery example of tutorial (#3430)
  • Minor cleanups in Containers.DenseAxisArray implementation (#3429)
  • Changed nested_problems.jl: outer/inner to upper/lower (#3433)
  • Removed second SDP relaxation in OPF tutorial (#3432)

Version 1.12.0 (June 19, 2023)

Added

Fixed

Other

Version 1.11.1 (May 19, 2023)

Fixed

  • Fixed a poor error message when sum(::DenseAxisArray; dims) was called (#3338)
  • Fixed support for dependent sets in the @variable macro (#3344)
  • Fixed a performance bug in constraints with sparse symmetric matrices (#3349)

Other

  • Improved the printing of complex numbers (#3332)
  • When printing, sets which contain constants ending in .0 now print as integers. This follows the behavior of constants in functions (#3341)
  • Added InfiniteOpt to the extensions documentation (#3343)
  • Added more documentation for the exponential cone (#3345) (#3347)
  • Added checklists for developers (#3346) (#3355)
  • Fixed test support upcoming Julia nightly (#3351)
  • Fixed extension-tests.yml action (#3353)
  • Add more solvers to the documentation (#3359) (#3361) (#3362)

Version 1.11.0 (May 3, 2023)

Added

Fixed

  • Fixed tests for MOI v1.14.0 release (#3312)
  • Fixed indexing containers when an axis is Vector{Any} that contains a Vector{Any} element (#3280)
  • Fixed getindex(::AbstractJuMPScalar) which is called for an expression like x[] (#3314)
  • Fixed bug in set_string_names_on_creation with a vector of variables (#3322)
  • Fixed bug in memoize function in nonlinear documentation (#3337)

Other

  • Fixed typos in the documentation (#3317) (#3318) (#3328)
  • Added a test for the order of setting start values (#3315)
  • Added READMEs of solvers and extensions to the docs (#3309) (#3320) (#3327) (#3329) (#3333)
  • Style improvements to src/variables.jl (#3324)
  • Clarify that column generation does not find global optimum (#3325)
  • Add a GitHub actions workflow for testing extensions prior to release (#3331)
  • Document the release process for JuMP (#3334)
  • Fix links to discourse and chatroom (#3335)

Version 1.10.0 (April 3, 2023)

Added

Fixed

  • Fixed [compat] bound for MathOptInterface in Project.toml (#3272)

Other

Version 1.9.0 (March 7, 2023)

Added

Fixed

  • The matrix returned by a variable in HermitianPSDCone is now a LinearAlgebra.Hermitian matrix. This is potentially breaking if you have written code to assume the return is a Matrix. (#3245) (#3246)
  • Fixed missing support for Base.isreal of expressions (#3252)

Other

Version 1.8.2 (February 27, 2023)

Fixed

  • Fixed dot product between complex JuMP expression and number (#3244)

Other

  • Polish simple SDP examples (#3232)

Version 1.8.1 (February 23, 2023)

Fixed

  • Fixed support for init in nonlinear generator expressions (#3226)

Other

  • Use and document import MathOptInterface as MOI (#3222)
  • Removed references in documentation to multiobjective optimization being unsupported (#3223)
  • Added tutorial on multi-objective portfolio optimization (#3227)
  • Refactored some of the conic tutorials (#3229)
  • Fixed typos in the documentation (#3230)
  • Added tutorial on parallelism (#3231)

Version 1.8.0 (February 16, 2023)

Added

  • Added --> syntax support for indicator constraints. The old syntax of => remains supported (#3207)
  • Added <--> syntax for reified constraints. For now, few solvers support reified constraints (#3206)
  • Added fix_discrete_variables. This is most useful for computing the dual of a mixed-integer program (#3208)
  • Added support for vector-valued objectives. For details, see the Multi-objective knapsack tutorial (#3176)

Fixed

  • Fixed a bug in lp_sensitivity_report by switching to an explicit LU factorization of the basis matrix (#3182)
  • Fixed a bug that prevented [; kwarg] arguments in macros (#3220)

Other

Version 1.7.0 (January 25, 2023)

Added

Other

  • Large refactoring of the tests (#3166) (#3167) (#3168) (#3169) (#3170) (#3171)
  • Remove unreachable code due to VERSION checks (#3172)
  • Document how to test JuMP extensions (#3174)
  • Fix method ambiguities in Containers (#3173)
  • Improve error message that is thrown when = is used instead of == in the @constraint macro (#3178)
  • Improve the error message when Bool is used instead of Bin in the @variable macro (#3180)
  • Update versions of the documentation (#3185)
  • Tidy the import of packages and remove unnecessary prefixes (#3186) (#3187)
  • Refactor src/JuMP.jl by moving methods into more relevant files (#3188)
  • Fix docstring of Model not appearing in the documentation (#3198)

Version 1.6.0 (January 1, 2023)

Added

Fixed

  • Fixed promotion of complex expressions (#3150) (#3164)

Other

  • Added Benders tutorial with in-place resolves (#3145)
  • Added more Tips and tricks for linear programs (#3144) (#3163)
  • Clarified documentation that start can depend on the indices of a variable container (#3148)
  • Replace instances of length and size by the recommended eachindex and axes (#3149)
  • Added a warning explaining why the model is dirty when accessing solution results from a modified model (#3156)
  • Clarify documentation that PSD ensures a symmetric matrix (#3159)
  • Maintenance of the JuMP test suite (#3146) (#3158) (#3162)

Version 1.5.0 (December 8, 2022)

Added

Fixed

Other

Version 1.4.0 (October 29, 2022)

Added

Fixed

  • Fixed a bug in copy_to(dest::Model, src::MOI.ModelLike) when src has nonlinear components (#3101)
  • Fixed the printing of (-1.0 + 0.0im) coefficients in complex expressions (#3112)
  • Fixed a parsing bug in nonlinear expressions with generator statements that contain multiple for statements (#3116)

Other

  • Converted the multi-commodity flow tutorial to use an SQLite database (#3098)
  • Fixed a number of typos in the documentation (#3103) (#3107) (#3018)
  • Improved various style aspects of the PDF documentation (#3095) (#3098) (#3102)

Version 1.3.1 (September 28, 2022)

Fixed

  • Fixed a performance issue in relax_integrality (#3087)
  • Fixed the type stability of operators with Complex arguments (#3072)
  • Fixed a bug which added additional +() terms to some nonlinear expressions (#3091)
  • Fixed potential method ambiguities with AffExpr and QuadExpr objects (#3092)

Other

Version 1.3.0 (September 5, 2022)

Added

  • Support slicing in SparseAxisArray (#3031)

Fixed

  • Fixed a bug introduced in v1.2.0 that prevented DenseAxisArrays with Vector keys (#3064)

Other

Version 1.2.1 (August 22, 2022)

Fixed

  • Fixed a bug when parsing two-sided nonlinear constraints (#3045)

Version 1.2.0 (August 16, 2022)

Breaking

This is a large minor release because it significantly refactors the internal code for handling nonlinear programs to use the MathOptInterface.Nonlinear submodule that was introduced in MathOptInterface v1.3.0. As a consequence, the internal datastructure in model.nlp_data has been removed, as has the JuMP._Derivatives submodule. Despite the changes, the public API for nonlinear programming has not changed, and any code that uses only the public API and that worked with v1.1.1 will continue to work with v1.2.0.

Added

  • Added all_constraints(model; include_variable_in_set_constraints) which simplifies returning a list of all constraint indices in the model.
  • Added the ability to delete nonlinear constraints via delete(::Model, ::NonlinearConstraintRef).
  • Added the ability to provide an explicit Hessian for a multivariate user-defined function.
  • Added support for querying the primal value of a nonlinear constraint via value(::NonlinearConstraintRef)

Fixed

  • Fixed a bug in Containers.DenseAxisArray so that it now supports indexing with keys that hash to the same value, even if they are different types, for example, Int32 and Int64.
  • Fixed a bug printing the model when the solver does not support MOI.Name.

Other

  • Added a constraint programming formulation to the Sudoku tutorial.
  • Added newly supported solvers Pajarito, Clarabel, and COPT to the installation table.
  • Fixed a variety of other miscellaneous issues in the documentation.

Version 1.1.1 (June 14, 2022)

Other

  • Fixed problem displaying LaTeX in the documentation
  • Minor updates to the style guide
  • Updated to MOI v1.4.0 in the documentation

Version 1.1.0 (May 25, 2022)

Added

  • Added num_constraints(::Model; count_variable_in_set_constraints) to simplify the process of counting the number of constraints in a model
  • Added VariableRef(::ConstraintRef) for querying the variable associated with a bound or integrality constraint.
  • Added set_normalized_coefficients for modifying the variable coefficients of a vector-valued constraint.
  • Added set_string_names_on_creation to disable creating String names for variables and constraints. This can improve performance.

Fixed

  • Fixed a bug passing nothing to the start keyword of @variable

Other

  • New tutorials:
    • Sensitivity analysis of a linear program
    • Serving web apps
  • Minimal ellipse SDP tutorial refactored and improved
  • Docs updated to the latest version of each package
  • Lots of minor fixes and improvements to the documentation

Version 1.0.0 (March 24, 2022)

Read more about this release, along with an acknowledgement of all the contributors in our JuMP 1.0.0 is released blog post.

Breaking

  • The previously deprecated functions (v0.23.0, v0.23.1) have been removed. Deprecation was to improve consistency of function names:
    • num_nl_constraints (see num_nonlinear_constraints)
    • all_nl_constraints (see all_nonlinear_constraints)
    • add_NL_expression (see add_nonlinear_expression)
    • set_NL_objective (see set_nonlinear_objective)
    • add_NL_constraint (see add_nonlinear_constraint)
    • nl_expr_string (see nonlinear_expr_string)
    • nl_constraint_string (see nonlinear_constraint_string)
    • SymMatrixSpace (see SymmetricMatrixSpace)
  • The unintentionally exported variable JuMP.op_hint has been renamed to the unexported JuMP._OP_HINT

Fixed

  • Fixed a bug writing .nl files
  • Fixed a bug broadcasting SparseAxisArrays

Version 0.23.2 (March 14, 2022)

Added

  • Added relative_gap to solution_summary
  • register now throws an informative error if the function is not differentiable using ForwardDiff. In some cases, the check in register will encounter a false negative, and the informative error will be thrown at run-time. This usually happens when the function is non-differentiable in a subset of the domain.

Fixed

  • Fixed a scoping issue when extending the container keyword of containers

Other

  • Docs updated to the latest version of each package

Version 0.23.1 (March 2, 2022)

Deprecated

  • nl_expr_string and nl_constraint_string have been renamed to nonlinear_expr_string and nonlinear_constraint_string. The old methods still exist with deprecation warnings. This change should impact very few users because to call them you must rely on private internals of the nonlinear API. Users are encouraged to use sprint(show, x) instead, where x is the nonlinear expression or constraint of interest.

Added

  • Added support for Base.abs2(x) where x is a variable or affine expression. This is mainly useful for complex-valued constraints.

Fixed

  • Fixed addition of complex and real affine expressions
  • Fixed arithmetic for Complex-valued quadratic expressions
  • Fixed variable bounds passed as Rational{Int}(Inf)
  • Fixed printing of the coefficient (0 + 1im)
  • Fixed a bug when solution_summary is called prior to optimize!

Version 0.23.0 (February 25, 2022)

JuMP v0.23.0 is a breaking release. It is also a release-candidate for JuMP v1.0.0. That is, if no issues are found with the v0.23.0 release, then it will be re-tagged as v1.0.0.

Breaking

  • Julia 1.6 is now the minimum supported version
  • MathOptInterface has been updated to v1.0.0
  • All previously deprecated functionality has been removed
  • PrintMode, REPLMode and IJuliaMode have been removed in favor of the MIME types MIME"text/plain" and MIME"text/latex". Replace instances of ::Type{REPLMode} with ::MIME"text/plain", REPLMode with MIME("text/plain"), ::Type{IJuliaMode} with ::MIME"text/latex", and IJuliaMode with MIME("text/latex").
  • Functions containing the nl_ acronym have been renamed to the more explicit nonlinear_. For example, num_nl_constraints is now num_nonlinear_constraints and set_NL_objective is now set_nonlinear_objective. Calls to the old functions throw an error explaining the new name.
  • SymMatrixSpace has been renamed to SymmetricMatrixSpace

Added

  • Added nonlinear_dual_start_value and set_nonlinear_dual_start_value
  • Added preliminary support for Complex coefficient types

Fixed

  • Fixed a bug in solution_summary

Other

  • MILP examples have been migrated from GLPK to HiGHS
  • Fixed various typos
  • Improved section on setting constraint start values

Troubleshooting problems when updating

If you experience problems when updating, you are likely using previously deprecated functionality. (By default, Julia does not warn when you use deprecated features.)

To find the deprecated features you are using, start Julia with --depwarn=yes:

$ julia --depwarn=yes

Then install JuMP v0.22.3:

julia> using Pkg
+

Release notes

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Version 1.23.2 (September 13, 2024)

Fixed

  • Fixed an illegal simplification in MA.operate!! for NonlinearExpr (#3826)

Other

Version 1.23.1 (August 30, 2024)

Fixed

  • Fixed a bug with indicator constraints and the in set syntax (#3813)

Other

Version 1.23.0 (August 13, 2024)

Added

  • Added set inequality syntax for matrices (#3766)
  • Improved matrix inequality support (#3778) (#3805)

Fixed

  • Fixed a method for calling value on a ::Number (#3776)
  • Fixed querying dual of Symmetric and Hermitian equality constraints (#3797)
  • Fixed read_from_file for coefficient types other than Float64 (#3801)

Other

  • Documentation improvements
    • Fixed missing character in installation instructions (#3777)
    • Added a section of querying the Jacobian (#3779)
    • Clarify that SCIP does not support lazy constraints (#3784)
    • Fixed typo in knapsack.jl (#3792)
    • Added a warning to docs about tolerances in Bin and Int variables (#3794)
    • Clarify where to type installation commands (#3795)
  • Improve error message for common incorrect syntax in constraint macro (#3781)
  • Changed show(::IO, ::GenericModel) to a more informative tree structure (#3803)

Version 1.22.2 (June 17, 2024)

Fixed

  • Fixed printing to omit terms when printing a large array of expressions (#3759)
  • Fixed bug in printing when show is called on an invalid variable or constraint (#3763)

Other

  • Improved error message for unsupported kwargs in variable macro (#3751)
  • Improved error message for unsupported container syntax like x[A][B] (#3756)
  • Docstring improvements (#3758), (#3760), (#3761), (#3767)
  • Added warning to documentation about Y <= X, Set() syntax (#3769)
  • Work-around change on nightly (#3753), (#3754)
  • Improved printing of symmetric matrices when used in constraints (#3768)
  • Fixed a test for upcoming printing change in MOI (#3772)
  • Updated should_i_use.md (#3773)

Version 1.22.1 (May 17, 2024)

Fixed

  • Fixed bug including non-.jl files in src/macros.jl (#3747)

Other

  • Added DSDP to the list of supported solvers (#3745)
  • Updated YALMIP migration guide (#3748)

Version 1.22.0 (May 12, 2024)

Added

  • Added Base.complex(r, i) where r and i may be real-valued variables or affine or quadratic expressions (#3734)
  • Added @force_nonlinear for controlling when affine and quadratic expressions are instead parsed as nonlinear expressions. This can be useful for advanced users in a limited set of circumstances. (#3732)
  • Added support for returning the variable coefficients of a vector-valued constraint via normalized_coefficient. In addition, set_normalized_coefficients has been softly deprecated (no warning is thrown and old code will still work for all future 1.X releases of JuMP) in favor of set_normalized_coefficient. This change was made to unify how we get and set variable coefficients. (#3743)

Fixed

  • Fixed missing promote_operation method that resulted in slow code (#3730)
  • Improved performance of getindex for Containers.DenseAxisArray (#3731)
  • Fixed the error message when the legacy nonlinear API is mixed with the new nonlinear API. In particular, we now uniformly throw an error message when unexpected objects occur in nonlinear expressions. (#3741)

Other

Version 1.21.1 (April 11, 2024)

Fixed

  • Fixed behavior of complex-value related functions like real, imag, conj and abs2 when called on GenericNonlinearExpr. This fixes a method error when calling x' where x is an array of nonlinear expressions. As a related consequence, we now always error when creating nonlinear expressions with complex components. Previously, only some constructors were checked for complex expressionns. (#3724)

Other

Version 1.21.0 (March 31, 2024)

Added

  • Added support for matrix inequality constraints with the HermitianPSDCone (#3705)
  • Added batched modification methods for set_normalized_rhs, set_objective_coefficient and set_normalized_coefficient. Using these methods can be more efficient for some solvers (#3716)
  • Added the private constant _CONSTRAINT_LIMIT_FOR_PRINTING, which controls how many constraints are printed to the screen during print(model). The main purpose of this is to prevent large quantities of text being printed when print(model) is accidentally called on a large model. (#3686)

Fixed

  • Changed Containers.SparseAxisArray to use an OrderedDict as the backing data structure. Iterating over the elements in a SparseAxisArray now iterates in the order that the elements were created. Previously, the order was undefined behavior. (#3681)
  • Fixed complex variables for non-Float64 coefficient types (#3691)
  • Fixed LinearAlgebra.hermitan(::AbstractJuMPScalar) (#3693)
  • Fixed multiplying real scalar by Hermitian matrix (#3695)

Other

Version 1.20.0 (February 15, 2024)

Added

Fixed

  • Fixed compat of DimensionalData (#3666)
  • Fixed convert(::Type{NonlinearExpr}, ::Number)(#3672)

Other

  • Added Optim to list of solvers (#3624)
  • Improved linking within documentation (#3669)

Version 1.19.0 (February 1, 2024)

Added

  • Added support for modifying quadratic coefficients (#3658)

Fixed

  • Fixed short circuiting of && and || in macros (#3655)

Other

  • Added SDPLR to list of solvers (#3644)
  • Added new roadmap items (#3645)
  • Fixed vale.sh version (#3650)
  • Improve error messages in macros (#3653)
  • Refactoring of set_normalized_coefficient (#3660) (#3661)
  • Update docs/packages.toml (#3662)

Version 1.18.1 (January 6, 2024)

Fixed

Version 1.18.0 (January 2, 2024)

Added

Fixed

Other

  • Added DisjunctiveProgrammingto extension-tests (#3597)
  • Added DisjunctiveProgrammingto docs (#3598)
  • Added DocumenterCitations to the docs (#3596), (#3630)
  • Migrate from SnoopPrecompile to PrecompileTools (#3608)
  • Minor documentation updates (#3623), (#3628), (#3635), (#3640), (#3643)

Version 1.17.0 (December 4, 2023)

Added

Fixed

Other

Version 1.16.0 (October 24, 2023)

Added

  • Added := operator for Boolean satisfiability problems (#3530)

Fixed

Other

Version 1.15.1 (September 24, 2023)

Fixed

Other

Version 1.15.0 (September 15, 2023)

This is a large minor release because it adds an entirely new data structure and API path for working with nonlinear programs. The previous nonlinear interface remains unchanged and is documented at Nonlinear Modeling (Legacy). The new interface is a treated as a non-breaking feature addition and is documented at Nonlinear Modeling.

Breaking

Although the new nonlinear interface is a feature addition, there are two changes which might be breaking for a very small number of users.

  • The syntax inside JuMP macros is parsed using a different code path, even for linear and quadratic expressions. We made this change to unify how we parse linear, quadratic, and nonlinear expressions. In all cases, the new code returns equivalent expressions, but because of the different order of operations, there are three changes to be aware of when updating:
    • The printed form of the expression may change, for example from x * y to y * x. This can cause tests which test the String representation of a model to fail.
    • Some coefficients may change slightly due to floating point round-off error.
    • Particularly when working with a JuMP extension, you may encounter a MethodError due to a missing or ambiguous method. These errors are due to previously existing bugs that were not triggered by the previous parsing code. If you encounter such an error, please open a GitHub issue.
  • The methods for Base.:^(x::VariableRef, n::Integer) and Base.:^(x::AffExpr, n::Integer) have changed. Previously, these methods supported only n = 0, 1, 2 and they always returned a QuadExpr, even for the case when n = 0 or n = 1. Now:
    • x^0 returns one(T), where T is the value_type of the model (defaults to Float64)
    • x^1 returns x
    • x^2 returns a QuadExpr
    • x^n where !(0 <= n <= 2) returns a NonlinearExpr.
    We made this change to support nonlinear expressions and to align the mathematical definition of the operation with their return type. (Previously, users were surprised that x^1 returned a QuadExpr.) As a consequence of this change, the methods are now not type-stable. This means that the compiler cannot prove that x^2 returns a QuadExpr. If benchmarking shows that this is a performance problem, you can use the type-stable x * x instead of x^2.

Added

Fixed

Other

Version 1.14.1 (September 2, 2023)

Fixed

  • Fix links in Documentation (#3478)

Version 1.14.0 (August 27, 2023)

Added

Fixed

  • Fixed model_convert for BridgeableConstraint (#3437)
  • Fixed printing models with integer coefficients larger than typemax(Int) (#3447)
  • Fixed support for constant left-hand side functions in a complementarity constraint (#3452)

Other

  • Updated packages used in documentation (#3444) (#3455)
  • Fixed docstring tests (#3445)
  • Fixed printing change for MathOptInterface (#3446)
  • Fixed typos in documentation (#3448) (#3457)
  • Added SCIP to callback documentation (#3449)

Version 1.13.0 (July 27, 2023)

Added

Fixed

Other

  • Added Loraine.jl to the installation table (#3426)
  • Removed Penopt.jl from packages.toml (#3428)
  • Improved problem statement in cannery example of tutorial (#3430)
  • Minor cleanups in Containers.DenseAxisArray implementation (#3429)
  • Changed nested_problems.jl: outer/inner to upper/lower (#3433)
  • Removed second SDP relaxation in OPF tutorial (#3432)

Version 1.12.0 (June 19, 2023)

Added

Fixed

Other

Version 1.11.1 (May 19, 2023)

Fixed

  • Fixed a poor error message when sum(::DenseAxisArray; dims) was called (#3338)
  • Fixed support for dependent sets in the @variable macro (#3344)
  • Fixed a performance bug in constraints with sparse symmetric matrices (#3349)

Other

  • Improved the printing of complex numbers (#3332)
  • When printing, sets which contain constants ending in .0 now print as integers. This follows the behavior of constants in functions (#3341)
  • Added InfiniteOpt to the extensions documentation (#3343)
  • Added more documentation for the exponential cone (#3345) (#3347)
  • Added checklists for developers (#3346) (#3355)
  • Fixed test support upcoming Julia nightly (#3351)
  • Fixed extension-tests.yml action (#3353)
  • Add more solvers to the documentation (#3359) (#3361) (#3362)

Version 1.11.0 (May 3, 2023)

Added

Fixed

  • Fixed tests for MOI v1.14.0 release (#3312)
  • Fixed indexing containers when an axis is Vector{Any} that contains a Vector{Any} element (#3280)
  • Fixed getindex(::AbstractJuMPScalar) which is called for an expression like x[] (#3314)
  • Fixed bug in set_string_names_on_creation with a vector of variables (#3322)
  • Fixed bug in memoize function in nonlinear documentation (#3337)

Other

  • Fixed typos in the documentation (#3317) (#3318) (#3328)
  • Added a test for the order of setting start values (#3315)
  • Added READMEs of solvers and extensions to the docs (#3309) (#3320) (#3327) (#3329) (#3333)
  • Style improvements to src/variables.jl (#3324)
  • Clarify that column generation does not find global optimum (#3325)
  • Add a GitHub actions workflow for testing extensions prior to release (#3331)
  • Document the release process for JuMP (#3334)
  • Fix links to discourse and chatroom (#3335)

Version 1.10.0 (April 3, 2023)

Added

Fixed

  • Fixed [compat] bound for MathOptInterface in Project.toml (#3272)

Other

Version 1.9.0 (March 7, 2023)

Added

Fixed

  • The matrix returned by a variable in HermitianPSDCone is now a LinearAlgebra.Hermitian matrix. This is potentially breaking if you have written code to assume the return is a Matrix. (#3245) (#3246)
  • Fixed missing support for Base.isreal of expressions (#3252)

Other

Version 1.8.2 (February 27, 2023)

Fixed

  • Fixed dot product between complex JuMP expression and number (#3244)

Other

  • Polish simple SDP examples (#3232)

Version 1.8.1 (February 23, 2023)

Fixed

  • Fixed support for init in nonlinear generator expressions (#3226)

Other

  • Use and document import MathOptInterface as MOI (#3222)
  • Removed references in documentation to multiobjective optimization being unsupported (#3223)
  • Added tutorial on multi-objective portfolio optimization (#3227)
  • Refactored some of the conic tutorials (#3229)
  • Fixed typos in the documentation (#3230)
  • Added tutorial on parallelism (#3231)

Version 1.8.0 (February 16, 2023)

Added

  • Added --> syntax support for indicator constraints. The old syntax of => remains supported (#3207)
  • Added <--> syntax for reified constraints. For now, few solvers support reified constraints (#3206)
  • Added fix_discrete_variables. This is most useful for computing the dual of a mixed-integer program (#3208)
  • Added support for vector-valued objectives. For details, see the Multi-objective knapsack tutorial (#3176)

Fixed

  • Fixed a bug in lp_sensitivity_report by switching to an explicit LU factorization of the basis matrix (#3182)
  • Fixed a bug that prevented [; kwarg] arguments in macros (#3220)

Other

Version 1.7.0 (January 25, 2023)

Added

Other

  • Large refactoring of the tests (#3166) (#3167) (#3168) (#3169) (#3170) (#3171)
  • Remove unreachable code due to VERSION checks (#3172)
  • Document how to test JuMP extensions (#3174)
  • Fix method ambiguities in Containers (#3173)
  • Improve error message that is thrown when = is used instead of == in the @constraint macro (#3178)
  • Improve the error message when Bool is used instead of Bin in the @variable macro (#3180)
  • Update versions of the documentation (#3185)
  • Tidy the import of packages and remove unnecessary prefixes (#3186) (#3187)
  • Refactor src/JuMP.jl by moving methods into more relevant files (#3188)
  • Fix docstring of Model not appearing in the documentation (#3198)

Version 1.6.0 (January 1, 2023)

Added

Fixed

  • Fixed promotion of complex expressions (#3150) (#3164)

Other

  • Added Benders tutorial with in-place resolves (#3145)
  • Added more Tips and tricks for linear programs (#3144) (#3163)
  • Clarified documentation that start can depend on the indices of a variable container (#3148)
  • Replace instances of length and size by the recommended eachindex and axes (#3149)
  • Added a warning explaining why the model is dirty when accessing solution results from a modified model (#3156)
  • Clarify documentation that PSD ensures a symmetric matrix (#3159)
  • Maintenance of the JuMP test suite (#3146) (#3158) (#3162)

Version 1.5.0 (December 8, 2022)

Added

Fixed

Other

Version 1.4.0 (October 29, 2022)

Added

Fixed

  • Fixed a bug in copy_to(dest::Model, src::MOI.ModelLike) when src has nonlinear components (#3101)
  • Fixed the printing of (-1.0 + 0.0im) coefficients in complex expressions (#3112)
  • Fixed a parsing bug in nonlinear expressions with generator statements that contain multiple for statements (#3116)

Other

  • Converted the multi-commodity flow tutorial to use an SQLite database (#3098)
  • Fixed a number of typos in the documentation (#3103) (#3107) (#3018)
  • Improved various style aspects of the PDF documentation (#3095) (#3098) (#3102)

Version 1.3.1 (September 28, 2022)

Fixed

  • Fixed a performance issue in relax_integrality (#3087)
  • Fixed the type stability of operators with Complex arguments (#3072)
  • Fixed a bug which added additional +() terms to some nonlinear expressions (#3091)
  • Fixed potential method ambiguities with AffExpr and QuadExpr objects (#3092)

Other

Version 1.3.0 (September 5, 2022)

Added

  • Support slicing in SparseAxisArray (#3031)

Fixed

  • Fixed a bug introduced in v1.2.0 that prevented DenseAxisArrays with Vector keys (#3064)

Other

Version 1.2.1 (August 22, 2022)

Fixed

  • Fixed a bug when parsing two-sided nonlinear constraints (#3045)

Version 1.2.0 (August 16, 2022)

Breaking

This is a large minor release because it significantly refactors the internal code for handling nonlinear programs to use the MathOptInterface.Nonlinear submodule that was introduced in MathOptInterface v1.3.0. As a consequence, the internal datastructure in model.nlp_data has been removed, as has the JuMP._Derivatives submodule. Despite the changes, the public API for nonlinear programming has not changed, and any code that uses only the public API and that worked with v1.1.1 will continue to work with v1.2.0.

Added

  • Added all_constraints(model; include_variable_in_set_constraints) which simplifies returning a list of all constraint indices in the model.
  • Added the ability to delete nonlinear constraints via delete(::Model, ::NonlinearConstraintRef).
  • Added the ability to provide an explicit Hessian for a multivariate user-defined function.
  • Added support for querying the primal value of a nonlinear constraint via value(::NonlinearConstraintRef)

Fixed

  • Fixed a bug in Containers.DenseAxisArray so that it now supports indexing with keys that hash to the same value, even if they are different types, for example, Int32 and Int64.
  • Fixed a bug printing the model when the solver does not support MOI.Name.

Other

  • Added a constraint programming formulation to the Sudoku tutorial.
  • Added newly supported solvers Pajarito, Clarabel, and COPT to the installation table.
  • Fixed a variety of other miscellaneous issues in the documentation.

Version 1.1.1 (June 14, 2022)

Other

  • Fixed problem displaying LaTeX in the documentation
  • Minor updates to the style guide
  • Updated to MOI v1.4.0 in the documentation

Version 1.1.0 (May 25, 2022)

Added

  • Added num_constraints(::Model; count_variable_in_set_constraints) to simplify the process of counting the number of constraints in a model
  • Added VariableRef(::ConstraintRef) for querying the variable associated with a bound or integrality constraint.
  • Added set_normalized_coefficients for modifying the variable coefficients of a vector-valued constraint.
  • Added set_string_names_on_creation to disable creating String names for variables and constraints. This can improve performance.

Fixed

  • Fixed a bug passing nothing to the start keyword of @variable

Other

  • New tutorials:
    • Sensitivity analysis of a linear program
    • Serving web apps
  • Minimal ellipse SDP tutorial refactored and improved
  • Docs updated to the latest version of each package
  • Lots of minor fixes and improvements to the documentation

Version 1.0.0 (March 24, 2022)

Read more about this release, along with an acknowledgement of all the contributors in our JuMP 1.0.0 is released blog post.

Breaking

  • The previously deprecated functions (v0.23.0, v0.23.1) have been removed. Deprecation was to improve consistency of function names:
    • num_nl_constraints (see num_nonlinear_constraints)
    • all_nl_constraints (see all_nonlinear_constraints)
    • add_NL_expression (see add_nonlinear_expression)
    • set_NL_objective (see set_nonlinear_objective)
    • add_NL_constraint (see add_nonlinear_constraint)
    • nl_expr_string (see nonlinear_expr_string)
    • nl_constraint_string (see nonlinear_constraint_string)
    • SymMatrixSpace (see SymmetricMatrixSpace)
  • The unintentionally exported variable JuMP.op_hint has been renamed to the unexported JuMP._OP_HINT

Fixed

  • Fixed a bug writing .nl files
  • Fixed a bug broadcasting SparseAxisArrays

Version 0.23.2 (March 14, 2022)

Added

  • Added relative_gap to solution_summary
  • register now throws an informative error if the function is not differentiable using ForwardDiff. In some cases, the check in register will encounter a false negative, and the informative error will be thrown at run-time. This usually happens when the function is non-differentiable in a subset of the domain.

Fixed

  • Fixed a scoping issue when extending the container keyword of containers

Other

  • Docs updated to the latest version of each package

Version 0.23.1 (March 2, 2022)

Deprecated

  • nl_expr_string and nl_constraint_string have been renamed to nonlinear_expr_string and nonlinear_constraint_string. The old methods still exist with deprecation warnings. This change should impact very few users because to call them you must rely on private internals of the nonlinear API. Users are encouraged to use sprint(show, x) instead, where x is the nonlinear expression or constraint of interest.

Added

  • Added support for Base.abs2(x) where x is a variable or affine expression. This is mainly useful for complex-valued constraints.

Fixed

  • Fixed addition of complex and real affine expressions
  • Fixed arithmetic for Complex-valued quadratic expressions
  • Fixed variable bounds passed as Rational{Int}(Inf)
  • Fixed printing of the coefficient (0 + 1im)
  • Fixed a bug when solution_summary is called prior to optimize!

Version 0.23.0 (February 25, 2022)

JuMP v0.23.0 is a breaking release. It is also a release-candidate for JuMP v1.0.0. That is, if no issues are found with the v0.23.0 release, then it will be re-tagged as v1.0.0.

Breaking

  • Julia 1.6 is now the minimum supported version
  • MathOptInterface has been updated to v1.0.0
  • All previously deprecated functionality has been removed
  • PrintMode, REPLMode and IJuliaMode have been removed in favor of the MIME types MIME"text/plain" and MIME"text/latex". Replace instances of ::Type{REPLMode} with ::MIME"text/plain", REPLMode with MIME("text/plain"), ::Type{IJuliaMode} with ::MIME"text/latex", and IJuliaMode with MIME("text/latex").
  • Functions containing the nl_ acronym have been renamed to the more explicit nonlinear_. For example, num_nl_constraints is now num_nonlinear_constraints and set_NL_objective is now set_nonlinear_objective. Calls to the old functions throw an error explaining the new name.
  • SymMatrixSpace has been renamed to SymmetricMatrixSpace

Added

  • Added nonlinear_dual_start_value and set_nonlinear_dual_start_value
  • Added preliminary support for Complex coefficient types

Fixed

  • Fixed a bug in solution_summary

Other

  • MILP examples have been migrated from GLPK to HiGHS
  • Fixed various typos
  • Improved section on setting constraint start values

Troubleshooting problems when updating

If you experience problems when updating, you are likely using previously deprecated functionality. (By default, Julia does not warn when you use deprecated features.)

To find the deprecated features you are using, start Julia with --depwarn=yes:

$ julia --depwarn=yes

Then install JuMP v0.22.3:

julia> using Pkg
 julia> pkg"add JuMP@0.22.3"

And then run your code. Apply any suggestions, or search the release notes below for advice on updating a specific deprecated feature.

Version 0.22.3 (February 10, 2022)

Fixed

  • Fixed a reproducibility issue in the TSP tutorial
  • Fixed a reproducibility issue in the max_cut_sdp tutorial
  • Fixed a bug broadcasting an empty SparseAxisArray

Other

  • Added a warning and improved documentation for the modify-then-query case
  • Fixed a typo in the docstring of RotatedSecondOrderCone
  • Added Aqua.jl as a check for code health
  • Added introductions to each section of the tutorials
  • Improved the column generation and Benders decomposition tutorials
  • Updated documentation to MOI v0.10.8
  • Updated JuliaFormatter to v0.22.2

Version 0.22.2 (January 10, 2022)

Added

  • The function all_nl_constraints now returns all nonlinear constraints in a model
  • start_value and set_start_value can now be used to get and set the primal start for constraint references
  • Plural macros now return a tuple containing the elements that were defined instead of nothing
  • Anonymous variables are now printed as _[i] where i is the index of the variable instead of noname. Calling name(x) still returns "" so this is non-breaking.

Fixed

  • Fixed handling of min and max in nonlinear expressions
  • CartesianIndex is no longer allowed as a key for DenseAxisArrays.

Other

  • Improved the performance of GenericAffExpr
  • Added a tutorial on the Travelling Salesperson Problem
  • Added a tutorial on querying the Hessian of a nonlinear program
  • Added documentation on using custom solver binaries.

Version 0.22.1 (November 29, 2021)

Added

  • Export OptimizationSense enum, with instances: MIN_SENSE, MAX_SENSE, and FEASIBILITY_SENSE
  • Add Base.isempty(::Model) to match Base.empty(::Model)

Fixed

  • Fix bug in container with tuples as indices
  • Fix bug in set_time_limit_sec

Other

  • Add tutorial "Design patterns for larger models"
  • Remove release notes section from PDF
  • General edits of the documentation and error messages

Version 0.22.0 (November 10, 2021)

JuMP v0.22 is a breaking release

Breaking

JuMP 0.22 contains a number of breaking changes. However, these should be invisible for the majority of users. You will mostly encounter these breaking changes if you: wrote a JuMP extension, accessed backend(model), or called @SDconstraint.

The breaking changes are as follows:

  • MathOptInterface has been updated to v0.10.4. For users who have interacted with the MOI backend, this contains a large number of breaking changes. Read the MathOptInterface release notes for more details.
  • The bridge_constraints keyword argument to Model and set_optimizer has been renamed add_bridges to reflect that more thing were bridged than just constraints.
  • The backend(model) field now contains a concrete instance of a MOI.Utilities.CachingOptimizer instead of one with an abstractly typed optimizer field. In most cases, this will lead to improved performance. However, calling set_optimizer after backend invalidates the old backend. For example:
    model = Model()
     b = backend(model)
     set_optimizer(model, GLPK.Optimizer)
    @@ -12,4 +12,4 @@
     new_b = backend(model)
  • All usages of @SDconstraint are deprecated. The new syntax is @constraint(model, X >= Y, PSDCone()).
  • Creating a DenseAxisArray with a Number as an axis will now display a warning. This catches a common error in which users write @variable(model, x[length(S)]) instead of @variable(model, x[1:length(S)]).
  • The caching_mode argument to Model, for example, Model(caching_mode = MOIU.MANUAL) mode has been removed. For more control over the optimizer, use direct_model instead.
  • The previously deprecated lp_objective_perturbation_range and lp_rhs_perturbation_range functions have been removed. Use lp_sensitivity_report instead.
  • The .m fields of NonlinearExpression and NonlinearParameter have been renamed to .model.
  • Infinite variable bounds are now ignored. Thus, @variable(model, x <= Inf) will show has_upper_bound(x) == false. Previously, these bounds were passed through to the solvers which caused numerical issues for solvers expecting finite bounds.
  • The variable_type and constraint_type functions were removed. This should only affect users who previously wrote JuMP extensions. The functions can be deleted without consequence.
  • The internal functions moi_mode, moi_bridge_constraints, moi_add_constraint, and moi_add_to_function_constant are no longer exported.
  • The un-used method Containers.generate_container has been deleted.
  • The Containers API has been refactored, and _build_ref_sets is now public as Containers.build_ref_sets.
  • The parse_constraint_ methods for extending @constraint at parse time have been refactored in a breaking way. Consult the Extensions documentation for more details and examples.

Added

  • The TerminationStatusCode and ResultStatusCode enums are now exported by JuMP. Prefer termination_status(model) == OPTIMAL instead of == MOI.OPTIMAL, although the MOI. prefix way still works.
  • Copy a x::DenseAxisArray to an Array by calling Array(x).
  • NonlinearExpression is now a subtype of AbstractJuMPScalar
  • Constraints such as @constraint(model, x + 1 in MOI.Integer()) are now supported.
  • primal_feasibility_report now accepts a function as the first argument.
  • Scalar variables @variable(model, x[1:2] in MOI.Integer()) creates two variables, both of which are constrained to be in the set MOI.Integer.
  • Conic constraints can now be specified as inequalities under a different partial ordering. So @constraint(model, x - y in MOI.Nonnegatives()) can now be written as @constraint(model, x >= y, MOI.Nonnegatives()).
  • Names are now set for vectorized constraints.

Fixed

  • Fixed a performance issue when show was called on a SparseAxisArray with a large number of elements.
  • Fixed a bug displaying barrier and simplex iterations in solution_summary.
  • Fixed a bug by implementing hash for DenseAxisArray and SparseAxisArray.
  • Names are now only set if the solver supports them. Previously, this prevented solvers such as Ipopt from being used with direct_model.
  • MutableArithmetics.Zero is converted into a 0.0 before being returned to the user. Previously, some calls to @expression would return the undocumented MutableArithmetics.Zero() object. One example is summing over an empty set @expression(model, sum(x[i] for i in 1:0)). You will now get 0.0 instead.
  • AffExpr and QuadExpr can now be used with == 0 instead of iszero. This fixes a number of issues relating to Julia standard libraries such as LinearAlgebra and SparseArrays.
  • Fixed a bug when registering a user-defined function with splatting.

Other

  • The documentation is now available as a PDF.
  • The documentation now includes a full copy of the MathOptInterface documentation to make it easy to link concepts between the docs. (The MathOptInterface documentation has also been significantly improved.)
  • The documentation contains a large number of improvements and clarifications on a range of topics. Thanks to @sshin23, @DilumAluthge, and @jlwether.
  • The documentation is now built with Julia 1.6 instead of 1.0.
  • Various error messages have been improved to be more readable.

Version 0.21.10 (September 4, 2021)

Added

  • Added add_NL_expression
  • add_NL_xxx functions now support AffExpr and QuadExpr as terms

Fixed

  • Fixed a bug in solution_summary
  • Fixed a bug in relax_integrality

Other

  • Improved error message in lp_sensitivity_report

Version 0.21.9 (August 1, 2021)

Added

  • Containers now support arbitrary container types by passing the type to the container keyword and overloading Containers.container.
  • is_valid now supports nonlinear constraints
  • Added unsafe_backend for querying the inner-most optimizer of a JuMP model.
  • Nonlinear parameters now support the plural @NLparameters macro.
  • Containers (for example, DenseAxisArray) can now be used in vector-valued constraints.

Other

  • Various improvements to the documentation.

Version 0.21.8 (May 8, 2021)

Added

  • The @constraint macro is now extendable in the same way as @variable.
  • AffExpr and QuadExpr can now be used in nonlinear macros.

Fixed

  • Fixed a bug in lp_sensitivity_report.
  • Fixed an inference issue when creating empty SparseAxisArrays.

Version 0.21.7 (April 12, 2021)

Added

  • Added primal_feasibility_report, which can be used to check whether a primal point satisfies primal feasibility.
  • Added coefficient, which returns the coefficient associated with a variable in affine and quadratic expressions.
  • Added copy_conflict, which returns the IIS of an infeasible model.
  • Added solution_summary, which returns (and prints) a struct containing a summary of the solution.
  • Allow AbstractVector in vector constraints instead of just Vector.
  • Added latex_formulation(model) which returns an object representing the latex formulation of a model. Use print(latex_formulation(model)) to print the formulation as a string.
  • User-defined functions in nonlinear expressions are now automatically registered to aid quick model prototyping. However, a warning is printed to encourage the manual registration.
  • DenseAxisArray's now support broadcasting over multiple arrays.
  • Container indices can now be iterators of Base.SizeUnknown.

Fixed

  • Fixed bug in rad2deg and deg2rad in nonlinear expressions.
  • Fixed a MethodError bug in Containers when forcing container type.
  • Allow partial slicing of a DenseAxisArray, resolving an issue from 2014.
  • Fixed a bug printing variable names in IJulia.
  • Ending an IJulia cell with model now prints a summary of the model (like in the REPL) not the latex formulation. Use print(model) to print the latex formulation.
  • Fixed a bug when copying models containing nested arrays.

Other

  • Tutorials are now part of the documentation, and more refactoring has taken place.
  • Added JuliaFormatter added as a code formatter.
  • Added some precompilation statements to reduce initial latency.
  • Various improvements to error messages to make them more helpful.
  • Improved performance of value(::NonlinearExpression).
  • Improved performance of fix(::VariableRef).

Version 0.21.6 (January 29, 2021)

Added

  • Added support for skew symmetric variables via @variable(model, X[1:2, 1:2] in SkewSymmetricMatrixSpace()).
  • lp_sensitivity_report has been added which significantly improves the performance of querying the sensitivity summary of an LP. lp_objective_perturbation_range and lp_rhs_perturbation_range are deprecated.
  • Dual warm-starts are now supported with set_dual_start_value and dual_start_value.
  • (\in<tab>) can now be used in macros instead of = or in.
  • Use haskey(model::Model, key::Symbol) to check if a name key is registered in a model.
  • Added unregister(model::Model, key::Symbol) to unregister a name key from model.
  • Added callback_node_status for use in callbacks.
  • Added print_bridge_graph to visualize the bridging graph generated by MathOptInterface.
  • Improved error message for containers with duplicate indices.

Fixed

  • Various fixes to pass tests on Julia 1.6.
  • Fixed a bug in the printing of nonlinear expressions in IJulia.
  • Fixed a bug when nonlinear expressions are passed to user-defined functions.
  • Some internal functions that were previously exported are now no longer exported.
  • Fixed a bug when relaxing a fixed binary variable.
  • Fixed a StackOverflowError that occurred when SparseAxisArrays had a large number of elements.
  • Removed an unnecessary type assertion in list_of_constraint_types.
  • Fixed a bug when copying models with registered expressions.

Other

  • The documentation has been significantly overhauled. It now has distinct sections for the manual, API reference, and examples. The existing examples in /examples have now been moved to /docs/src/examples and rewritten using Literate.jl, and they are now included in the documentation.
  • JuliaFormatter has been applied to most of the codebase. This will continue to roll out over time, as we fix upstream issues in the formatter, and will eventually become compulsory.
  • The root cause of a large number of method invalidations has been resolved.
  • We switched continuous integration from Travis and Appveyor to GitHub Actions.

Version 0.21.5 (September 18, 2020)

Fixed

  • Fixed deprecation warnings
  • Throw DimensionMismatch for incompatibly sized functions and sets
  • Unify treatment of keys(x) on JuMP containers

Version 0.21.4 (September 14, 2020)

Added

  • Add debug info when adding unsupported constraints
  • Add relax_integrality for solving continuous relaxation
  • Allow querying constraint conflicts

Fixed

  • Dispatch on Real for MOI.submit
  • Implement copy for CustomSet in tests
  • Don't export private macros
  • Fix invalid assertion in nonlinear
  • Error if constraint has NaN right-hand side
  • Improve speed of tests
  • Lots of work modularizing files in /test
  • Improve line numbers in macro error messages
  • Print nonlinear subexpressions
  • Various documentation updates
  • Dependency updates:
    • Datastructures 0.18
    • MathOptFormat v0.5
    • Prep for MathOptInterface 0.9.15

Version 0.21.3 (June 18, 2020)

  • Added Special Order Sets (SOS1 and SOS2) to JuMP with default weights to ease the creation of such constraints (#2212).
  • Added functions simplex_iterations, barrier_iterations and node_count (#2201).
  • Added function reduced_cost (#2205).
  • Implemented callback_value for affine and quadratic expressions (#2231).
  • Support MutableArithmetics.Zero in objective and constraints (#2219).
  • Documentation improvements:
    • Mention tutorials in the docs (#2223).
    • Update COIN-OR links (#2242).
    • Explicit link to the documentation of MOI.FileFormats (#2253).
    • Typo fixes (#2261).
  • Containers improvements:
    • Fix Base.map for DenseAxisArray (#2235).
    • Throw BoundsError if number of indices is incorrect for DenseAxisArray and SparseAxisArray (#2240).
  • Extensibility improvements:
    • Implement a set_objective method fallback that redirects to set_objective_sense and set_objective_function (#2247).
    • Add parse_constraint method with arbitrary number of arguments (#2051).
    • Add parse_constraint_expr and parse_constraint_head (#2228).

Version 0.21.2 (April 2, 2020)

  • Added relative_gap() to access MOI.RelativeGap() attribute (#2199).
  • Documentation fixes:
    • Added link to source for docstrings in the documentation (#2207).
    • Added docstring for @variables macro (#2216).
    • Typo fixes (#2177, #2184, #2182).
  • Implementation of methods for Base functions:
    • Implemented Base.empty! for JuMP.Model (#2198).
    • Implemented Base.conj for JuMP scalar types (#2209).

Fixed

  • Fixed sum of expression with scalar product in macro (#2178).
  • Fixed writing of nonlinear models to MathOptFormat (#2181).
  • Fixed construction of empty SparseAxisArray (#2179).
  • Fixed constraint with zero function (#2188).

Version 0.21.1 (Feb 18, 2020)

  • Improved the clarity of the with_optimizer deprecation warning.

Version 0.21.0 (Feb 16, 2020)

Breaking

  • Deprecated with_optimizer (#2090, #2084, #2141). You can replace with_optimizer by either nothing, optimizer_with_attributes or a closure:

    • replace with_optimizer(Ipopt.Optimizer) by Ipopt.Optimizer.
    • replace with_optimizer(Ipopt.Optimizer, max_cpu_time=60.0) by optimizer_with_attributes(Ipopt.Optimizer, "max_cpu_time" => 60.0).
    • replace with_optimizer(Gurobi.Optimizer, env) by () -> Gurobi.Optimizer(env).
    • replace with_optimizer(Gurobi.Optimizer, env, Presolve=0) by optimizer_with_attributes(() -> Gurobi.Optimizer(env), "Presolve" => 0).

    alternatively to optimizer_with_attributes, you can also set the attributes separately with set_optimizer_attribute.

  • Renamed set_parameter and set_parameters to set_optimizer_attribute and set_optimizer_attributes (#2150).

  • Broadcast should now be explicit inside macros. @SDconstraint(model, x >= 1) and @constraint(model, x + 1 in SecondOrderCone()) now throw an error instead of broadcasting 1 along the dimension of x (#2107).

  • @SDconstraint(model, x >= 0) is now equivalent to @constraint(model, x in PSDCone()) instead of @constraint(model, (x .- 0) in PSDCone()) (#2107).

  • The macros now create the containers with map instead of for loops, as a consequence, containers created by @expression can now have any element type and containers of constraint references now have concrete element types when possible. This fixes a long-standing issue where @expression could only be used to generate a collection of linear expressions. Now it works for quadratic expressions as well (#2070).

  • Calling deepcopy(::AbstractModel) now throws an error.

  • The constraint name is now printed in the model string (#2108).

Added

  • Added support for solver-independent and solver-specific callbacks (#2101).
  • Added write_to_file and read_from_file, supported formats are CBF, LP, MathOptFormat, MPS and SDPA (#2114).
  • Added support for complementarity constraints (#2132).
  • Added support for indicator constraints (#2092).
  • Added support for querying multiple solutions with the result keyword (#2100).
  • Added support for constraining variables on creation (#2128).
  • Added method delete that deletes a vector of variables at once if it is supported by the underlying solver (#2135).
  • The arithmetic between JuMP expression has be refactored into the MutableArithmetics package (#2107).
  • Improved error on complex values in NLP (#1978).
  • Added an example of column generation (#2010).

Fixed

  • Incorrect coefficients generated when using Symmetric variables (#2102)

Version 0.20.1 (Oct 18, 2019)

  • Add sections on @variables and @constraints in the documentation (#2062).
  • Fixed product of sparse matrices for Julia v1.3 (#2063).
  • Added set_objective_coefficient to modify the coefficient of a linear term of the objective function (#2008).
  • Added set_time_limit_sec, unset_time_limit_sec and time_limit_sec to set and query the time limit for the solver in seconds (#2053).

Version 0.20.0 (Aug 24, 2019)

  • Documentation updates.
  • Numerous bug fixes.
  • Better error messages (#1977, #1978, #1997, #2017).
  • Performance improvements (#1947, #2032).
  • Added LP sensitivity summary functions lp_objective_perturbation_range and lp_rhs_perturbation_range (#1917).
  • Added functions dual_objective_value, raw_status and set_parameter.
  • Added function set_objective_coefficient to modify the coefficient of a linear term of the objective (#2008).
  • Added functions set_normalized_rhs, normalized_rhs, and add_to_function_constant to modify and get the constant part of a constraint (#1935, #1960).
  • Added functions set_normalized_coefficient and normalized_coefficient to modify and get the coefficient of a linear term of a constraint (#1935, #1960).
  • Numerous other improvements in MOI 0.9, see the NEWS.md file of MOI for more details.

Version 0.19.2 (June 8, 2019)

  • Fix a bug in derivatives that could arise in models with nested nonlinear subexpressions.

Version 0.19.1 (May 12, 2019)

  • Usability and performance improvements.
  • Bug fixes.

Version 0.19.0 (February 15, 2019)

JuMP 0.19 contains significant breaking changes.

Breaking

  • JuMP's abstraction layer for communicating with solvers changed from MathProgBase (MPB) to MathOptInterface (MOI). MOI addresses many longstanding design issues. (See @mlubin's slides from JuMP-dev 2018.) JuMP 0.19 is compatible only with solvers that have been updated for MOI. See the installation guide for a list of solvers that have and have not yet been updated.

  • Most solvers have been renamed to PackageName.Optimizer. For example, GurobiSolver() is now Gurobi.Optimizer.

  • Solvers are no longer added to a model via Model(solver = XXX(kwargs...)). Instead use Model(with_optimizer(XXX, kwargs...)). For example, Model(with_optimizer(Gurobi.Optimizer, OutputFlag=0)).

  • JuMP containers (for example, the objects returned by @variable) have been redesigned. Containers.SparseAxisArray replaces JuMPDict, JuMPArray was rewritten (inspired by AxisArrays) and renamed Containers.DenseAxisArray, and you can now request a container type with the container= keyword to the macros. See the corresponding documentation for more details.

  • The statuses returned by solvers have changed. See the possible status values here. The MOI statuses are much richer than the MPB statuses and can be used to distinguish between previously indistinguishable cases (for example, did the solver have a feasible solution when it stopped because of the time limit?).

  • Starting values are separate from result values. Use value to query the value of a variable in a solution. Use start_value and set_start_value to get and set an initial starting point provided to the solver. The solutions from previous solves are no longer automatically set as the starting points for the next solve.

  • The data structures for affine and quadratic expressions AffExpr and QuadExpr have changed. Internally, terms are stored in dictionaries instead of lists. Duplicate coefficients can no longer exist. Accessors and iteration methods have changed.

  • JuMPNLPEvaluator no longer includes the linear and quadratic parts of the model in the evaluation calls. These are now handled separately to allow NLP solvers that support various types of constraints.

  • JuMP solver-independent callbacks have been replaced by solver-specific callbacks. See your favorite solver for more details. (See the note below: No solver-specific callbacks are implemented yet.)

  • The norm() syntax is no longer recognized inside macros. Use the SecondOrderCone() set instead.

  • JuMP no longer performs automatic transformation between special quadratic forms and second-order cone constraints. Support for these constraint classes depends on the solver.

  • The symbols :Min and :Max are no longer used as optimization senses. Instead, JuMP uses the OptimizationSense enum from MathOptInterface. @objective(model, Max, ...), @objective(model, Min, ...), @NLobjective(model, Max, ...), and @objective(model, Min, ...) remain valid, but @objective(m, :Max, ...) is no longer accepted.

  • The sign conventions for duals has changed in some cases for consistency with conic duality (see the documentation). The shadow_price helper method returns duals with signs that match conventional LP interpretations of dual values as sensitivities of the objective value to relaxations of constraints.

  • @constraintref is no longer defined. Instead, create the appropriate container to hold constraint references manually. For example,

    constraints = Dict() # Optionally, specify types for improved performance.
     for i in 1:N
       constraints[i] = @constraint(model, ...)
    -end
  • The lowerbound, upperbound, and basename keyword arguments to the @variable macro have been renamed to lower_bound, upper_bound, and base_name, for consistency with JuMP's new style recommendations.

  • We rely on broadcasting syntax to apply accessors to collections of variables, for example, value.(x) instead of getvalue(x) for collections. (Use value(x) when x is a scalar object.)

Added

  • Splatting (like f(x...)) is recognized in restricted settings in nonlinear expressions.

  • Support for deleting constraints and variables.

  • The documentation has been completely rewritten using docstrings and Documenter.

  • Support for modeling mixed conic and quadratic models (for example, conic models with quadratic objectives and bi-linear matrix inequalities).

  • Significantly improved support for modeling new types of constraints and for extending JuMP's macros.

  • Support for providing dual warm starts.

  • Improved support for accessing solver-specific attributes (for example, the irreducible inconsistent subsystem).

  • Explicit control of whether symmetry-enforcing constraints are added to PSD constraints.

  • Support for modeling exponential cones.

  • Significant improvements in internal code quality and testing.

  • Style and naming guidelines.

  • Direct mode and manual mode provide explicit control over when copies of a model are stored or regenerated. See the corresponding documentation.

Regressions

There are known regressions from JuMP 0.18 that will be addressed in a future release (0.19.x or later):

  • Performance regressions in model generation (issue). Please file an issue anyway if you notice a significant performance regression. We have plans to address a number of performance issues, but we might not be aware of all of them.

  • Fast incremental NLP solves are not yet reimplemented (issue).

  • We do not yet have an implementation of solver-specific callbacks.

  • The column generation syntax in @variable has been removed (that is, the objective, coefficients, and inconstraints keyword arguments). Support for column generation will be re-introduced in a future release.

  • The ability to solve the continuous relaxation (that is, via solve(model; relaxation = true)) is not yet reimplemented (issue).

Version 0.18.5 (December 1, 2018)

  • Support views in some derivative evaluation functions.
  • Improved compatibility with PackageCompiler.

Version 0.18.4 (October 8, 2018)

  • Fix a bug in model printing on Julia 0.7 and 1.0.

Version 0.18.3 (October 1, 2018)

  • Add support for Julia v1.0 (Thanks @ExpandingMan)
  • Fix matrix expressions with quadratic functions (#1508)

Version 0.18.2 (June 10, 2018)

  • Fix a bug in second-order derivatives when expressions are present (#1319)
  • Fix a bug in @constraintref (#1330)

Version 0.18.1 (April 9, 2018)

  • Fix for nested tuple destructuring (#1193)
  • Preserve internal model when relaxation=true (#1209)
  • Minor bug fixes and updates for example

Version 0.18.0 (July 27, 2017)

  • Drop support for Julia 0.5.
  • Update for ForwardDiff 0.5.
  • Minor bug fixes.

Version 0.17.1 (June 9, 2017)

  • Use of constructconstraint! in @SDconstraint.
  • Minor bug fixes.

Version 0.17.0 (May 27, 2017)

  • Breaking change: Mixing quadratic and conic constraints is no longer supported.
  • Breaking change: The getvariable and getconstraint functions are replaced by indexing on the corresponding symbol. For instance, to access the variable with name x, one should now write m[:x] instead of getvariable(m, :x). As a consequence, creating a variable and constraint with the same name now triggers a warning, and accessing one of them afterwards throws an error. This change is breaking only in the latter case.
  • Addition of the getobjectivebound function that mirrors the functionality of the MathProgBase getobjbound function except that it takes into account transformations performed by JuMP.
  • Minor bug fixes.

The following changes are primarily of interest to developers of JuMP extensions:

  • The new syntax @constraint(model, expr in Cone) creates the constraint ensuring that expr is inside Cone. The Cone argument is passed to constructconstraint! which enables the call to the dispatched to an extension.
  • The @variable macro now calls constructvariable! instead of directly calling the Variable constructor. Extra arguments and keyword arguments passed to @variable are passed to constructvariable! which enables the call to be dispatched to an extension.
  • Refactor the internal function conicdata (used build the MathProgBase conic model) into smaller sub-functions to make these parts reusable by extensions.

Version 0.16.2 (March 28, 2017)

  • Minor bug fixes and printing tweaks
  • Address deprecation warnings for Julia 0.6

Version 0.16.1 (March 7, 2017)

  • Better support for AbstractArray in JuMP (Thanks @tkoolen)
  • Minor bug fixes

Version 0.16.0 (February 23, 2017)

  • Breaking change: JuMP no longer has a mechanism for selecting solvers by default (the previous mechanism was flawed and incompatible with Julia 0.6). Not specifying a solver before calling solve() will result in an error.
  • Breaking change: User-defined functions are no longer global. The first argument to JuMP.register is now a JuMP Model object within whose scope the function will be registered. Calling JuMP.register without a Model now produces an error.
  • Breaking change: Use the new JuMP.fix method to fix a variable to a value or to update the value to which a variable is fixed. Calling setvalue on a fixed variable now results in an error in order to avoid silent behavior changes. (Thanks @joaquimg)
  • Nonlinear expressions now print out similarly to linear/quadratic expressions (useful for debugging!)
  • New category keyword to @variable. Used for specifying categories of anonymous variables.
  • Compatibility with Julia 0.6-dev.
  • Minor fixes and improvements (Thanks @cossio, @ccoffrin, @blegat)

Version 0.15.1 (January 31, 2017)

  • Bugfix for @LinearConstraints and friends

Version 0.15.0 (December 22, 2016)

  • Julia 0.5.0 is the minimum required version for this release.
  • Document support for BARON solver
  • Enable info callbacks in more states than before, for example, for recording solutions. New when argument to addinfocallback (#814, thanks @yeesian)
  • Improved support for anonymous variables. This includes new warnings for potentially confusing use of the traditional non-anonymous syntax:
    • When multiple variables in a model are given the same name
    • When non-symbols are used as names, for example, @variable(m, x[1][1:N])
  • Improvements in iterating over JuMP containers (#836, thanks @IssamT)
  • Support for writing variable names in .lp file output (Thanks @leethargo)
  • Support for querying duals to SDP problems (Thanks @blegat)
  • The comprehension syntax with curly braces sum{}, prod{}, and norm2{} has been deprecated in favor of Julia's native comprehension syntax sum(), prod() and norm() as previously announced. (For early adopters of the new syntax, norm2() was renamed to norm() without deprecation.)
  • Unit tests rewritten to use Base.Test instead of FactCheck
  • Improved support for operations with matrices of JuMP types (Thanks @ExpandingMan)
  • The syntax to halt a solver from inside a callback has changed from throw(CallbackAbort()) to return JuMP.StopTheSolver
  • Minor bug fixes

Version 0.14.2 (December 12, 2016)

  • Allow singleton anonymous variables (includes bugfix)

Version 0.14.1 (September 12, 2016)

  • More consistent handling of states in informational callbacks, includes a new when parameter to addinfocallback for specifying in which state an informational callback should be called.

Version 0.14.0 (August 7, 2016)

  • Compatibility with Julia 0.5 and ForwardDiff 0.2
  • Support for "anonymous" variables, constraints, expressions, and parameters, for example, x = @variable(m, [1:N]) instead of @variable(m, x[1:N])
  • Support for retrieving constraints from a model by name via getconstraint
  • @NLconstraint now returns constraint references (as expected).
  • Support for vectorized expressions within lazy constraints
  • On Julia 0.5, parse new comprehension syntax sum(x[i] for i in 1:N if isodd(i)) instead of sum{ x[i], i in 1:N; isodd(i) }. The old syntax with curly braces will be deprecated in JuMP 0.15.
  • Now possible to provide nonlinear expressions as "raw" Julia Expr objects instead of using JuMP's nonlinear macros. This input format is useful for programmatically generated expressions.
  • s/Mathematical Programming/Mathematical Optimization/
  • Support for local cuts (Thanks to @madanim, Mehdi Madani)
  • Document Xpress interface developed by @joaquimg, Joaquim Dias Garcia
  • Minor bug and deprecation fixes (Thanks @odow, @jrevels)

Version 0.13.2 (May 16, 2016)

  • Compatibility update for MathProgBase

Version 0.13.1 (May 3, 2016)

  • Fix broken deprecation for registerNLfunction.

Version 0.13.0 (April 29, 2016)

  • Most exported methods and macros have been renamed to avoid camelCase. See the list of changes here. There is a 1-1 mapping from the old names to the new, and it is safe to simply replace the names to update existing models.
  • Specify variable lower/upper bounds in @variable using the lowerbound and upperbound keyword arguments.
  • Change name printed for variable using the basename keyword argument to @variable.
  • New @variables macro allows multi-line declaration of groups of variables.
  • A number of solver methods previously available only through MathProgBase are now exposed directly in JuMP. The fix was recorded live.
  • Compatibility fixes with Julia 0.5.
  • The "end" indexing syntax is no longer supported within JuMPArrays which do not use 1-based indexing until upstream issues are resolved, see here.

Version 0.12.2 (March 9, 2016)

  • Small fixes for nonlinear optimization

Version 0.12.1 (March 1, 2016)

  • Fix a regression in slicing for JuMPArrays (when not using 1-based indexing)

Version 0.12.0 (February 27, 2016)

  • The automatic differentiation functionality has been completely rewritten with a number of user-facing changes:
    • @defExpr and @defNLExpr now take the model as the first argument. The previous one-argument version of @defExpr is deprecated; all expressions should be named. For example, replace @defExpr(2x+y) with @defExpr(jump_model, my_expr, 2x+y).
    • JuMP no longer uses Julia's variable binding rules for efficiently re-solving a sequence of nonlinear models. Instead, we have introduced nonlinear parameters. This is a breaking change, so we have added a warning message when we detect models that may depend on the old behavior.
    • Support for user-defined functions integrated within nonlinear JuMP expressions.
  • Replaced iteration over AffExpr with Number-like scalar iteration; previous iteration behavior is now available via linearterms(::AffExpr).
  • Stopping the solver via throw(CallbackAbort()) from a callback no longer triggers an exception. Instead, solve() returns UserLimit status.
  • getDual() now works for conic problems (Thanks @emreyamangil.)

Version 0.11.3 (February 4, 2016)

  • Bug-fix for problems with quadratic objectives and semidefinite constraints

Version 0.11.2 (January 14, 2016)

  • Compatibility update for Mosek

Version 0.11.1 (December 1, 2015)

  • Remove usage of @compat in tests.
  • Fix updating quadratic objectives for nonlinear models.

Version 0.11.0 (November 30, 2015)

  • Julia 0.4.0 is the minimum required version for this release.
  • Fix for scoping semantics of index variables in sum{}. Index variables no longer leak into the surrounding scope.
  • Addition of the solve(m::Model, relaxation=true) keyword argument to solve the standard continuous relaxation of model m
  • The getConstraintBounds() method allows access to the lower and upper bounds of all constraints in a (nonlinear) model.
  • Update for breaking changes in MathProgBase

Version 0.10.3 (November 20, 2015)

  • Fix a rare error when parsing quadratic expressions
  • Fix Variable() constructor with default arguments
  • Detect unrecognized keywords in solve()

Version 0.10.2 (September 28, 2015)

  • Fix for deprecation warnings

Version 0.10.1 (September 3, 2015)

  • Fixes for ambiguity warnings.
  • Fix for breaking change in precompilation syntax in Julia 0.4-pre

Version 0.10.0 (August 31, 2015)

  • Support (on Julia 0.4 and later) for conditions in indexing @defVar and @addConstraint constructs, for example, @defVar(m, x[i=1:5,j=1:5; i+j >= 3])
  • Support for vectorized operations on Variables and expressions. See the documentation for details.
  • New getVar() method to access variables in a model by name
  • Support for semidefinite programming.
  • Dual solutions are now available for general nonlinear problems. You may call getDual on a reference object for a nonlinear constraint, and getDual on a variable object for Lagrange multipliers from active bounds.
  • Introduce warnings for two common performance traps: too many calls to getValue() on a collection of variables and use of the + operator in a loop to sum expressions.
  • Second-order cone constraints can be written directly with the norm() and norm2{} syntax.
  • Implement MathProgBase interface for querying Hessian-vector products.
  • Iteration over JuMPContainers is deprecated; instead, use the keys and values functions, and zip(keys(d),values(d)) for the old behavior.
  • @defVar returns Array{Variable,N} when each of N index sets are of the form 1:nᵢ.
  • Module precompilation: on Julia 0.4 and later, using JuMP is now much faster.

Version 0.9.3 (August 11, 2015)

  • Fixes for FactCheck testing on julia v0.4.

Version 0.9.2 (June 27, 2015)

  • Fix bug in @addConstraints.

Version 0.9.1 (April 25, 2015)

  • Fix for Julia 0.4-dev.
  • Small infrastructure improvements for extensions.

Version 0.9.0 (April 18, 2015)

  • Comparison operators for constructing constraints (for example, 2x >= 1) have been deprecated. Instead, construct the constraints explicitly in the @addConstraint macro to add them to the model, or in the @LinearConstraint macro to create a stand-alone linear constraint instance.
  • getValue() method implemented to compute the value of a nonlinear subexpression
  • JuMP is now released under the Mozilla Public License version 2.0 (was previously LGPL). MPL is a copyleft license which is less restrictive than LGPL, especially for embedding JuMP within other applications.
  • A number of performance improvements in ReverseDiffSparse for computing derivatives.
  • MathProgBase.getsolvetime(m) now returns the solution time reported by the solver, if available. (Thanks @odow, Oscar Dowson)
  • Formatting fix for LP format output. (Thanks @sbebo, Leonardo Taccari).

Version 0.8.0 (February 17, 2015)

  • Nonlinear subexpressions now supported with the @defNLExpr macro.
  • SCS supported for solving second-order conic problems.
  • setXXXCallback family deprecated in favor of addXXXCallback.
  • Multiple callbacks of the same type can be registered.
  • Added support for informational callbacks via addInfoCallback.
  • A CallbackAbort exception can be thrown from callback to safely exit optimization.

Version 0.7.4 (February 4, 2015)

  • Reduced costs and linear constraint duals are now accessible when quadratic constraints are present.
  • Two-sided nonlinear constraints are supported.
  • Methods for accessing the number of variables and constraints in a model are renamed.
  • New default procedure for setting initial values in nonlinear optimization: project zero onto the variable bounds.
  • Small bug fixes.

Version 0.7.3 (January 14, 2015)

  • Fix a method ambiguity conflict with Compose.jl (cosmetic fix)

Version 0.7.2 (January 9, 2015)

  • Fix a bug in sum(::JuMPDict)
  • Added the setCategory function to change a variables category (for example, continuous or binary)

after construction, and getCategory to retrieve the variable category.

Version 0.7.1 (January 2, 2015)

  • Fix a bug in parsing linear expressions in macros. Affects only Julia 0.4 and later.

Version 0.7.0 (December 29, 2014)

Linear/quadratic/conic programming

  • Breaking change: The syntax for column-wise model generation has been changed to use keyword arguments in @defVar.
  • On Julia 0.4 and later, variables and coefficients may be multiplied in any order within macros. That is, variable*coefficient is now valid syntax.
  • ECOS supported for solving second-order conic problems.

Nonlinear programming

  • Support for skipping model generation when solving a sequence of nonlinear models with changing data.
  • Fix a memory leak when solving a sequence of nonlinear models.
  • The @addNLConstraint macro now supports the three-argument version to define sets of nonlinear constraints.
  • KNITRO supported as a nonlinear solver.
  • Speed improvements for model generation.
  • The @addNLConstraints macro supports adding multiple (groups of) constraints at once. Syntax is similar to @addConstraints.
  • Discrete variables allowed in nonlinear problems for solvers which support them (currently only KNITRO).

General

  • Starting values for variables may now be specified with @defVar(m, x, start=value).
  • The setSolver function allows users to change the solver subsequent to model creation.
  • Support for "fixed" variables via the @defVar(m, x == 1) syntax.
  • Unit tests rewritten to use FactCheck.jl, improved testing across solvers.

Version 0.6.3 (October 19, 2014)

  • Fix a bug in multiplying two AffExpr objects.

Version 0.6.2 (October 11, 2014)

  • Further improvements and bug fixes for printing.
  • Fixed a bug in @defExpr.
  • Support for accessing expression graphs through the MathProgBase NLP interface.

Version 0.6.1 (September 19, 2014)

  • Improvements and bug fixes for printing.

Version 0.6.0 (September 9, 2014)

  • Julia 0.3.0 is the minimum required version for this release.
  • buildInternalModel(m::Model) added to build solver-level model in memory without optimizing.
  • Deprecate load_model_only keyword argument to solve.
  • Add groups of constraints with @addConstraints macro.
  • Unicode operators now supported, including for sum, for prod, and /
  • Quadratic constraints supported in @addConstraint macro.
  • Quadratic objectives supported in @setObjective macro.
  • MathProgBase solver-independent interface replaces Ipopt-specific interface for nonlinear problems
    • Breaking change: IpoptOptions no longer supported to specify solver options, use m = Model(solver=IpoptSolver(options...)) instead.
  • New solver interfaces: ECOS, NLopt, and nonlinear support for MOSEK
  • New option to control whether the lazy constraint callback is executed at each node in the B&B tree or just when feasible solutions are found
  • Add support for semicontinuous and semi-integer variables for those solvers that support them.
  • Add support for index dependencies (for example, triangular indexing) in @defVar, @addConstraint, and @defExpr (for example, @defVar(m, x[i=1:10,j=i:10])).
    • This required some changes to the internal structure of JuMP containers, which may break code that explicitly stored JuMPDict objects.

Version 0.5.8 (September 24, 2014)

  • Fix a bug with specifying solvers (affects Julia 0.2 only)

Version 0.5.7 (September 5, 2014)

  • Fix a bug in printing models

Version 0.5.6 (September 2, 2014)

  • Add support for semicontinuous and semi-integer variables for those solvers that support them.
    • Breaking change: Syntax for Variable() constructor has changed (use of this interface remains discouraged)
  • Update for breaking changes in MathProgBase

Version 0.5.5 (July 6, 2014)

  • Fix bug with problem modification: adding variables that did not appear in existing constraints or objective.

Version 0.5.4 (June 19, 2014)

  • Update for breaking change in MathProgBase which reduces loading times for using JuMP
  • Fix error when MIPs not solved to optimality

Version 0.5.3 (May 21, 2014)

  • Update for breaking change in ReverseDiffSparse

Version 0.5.2 (May 9, 2014)

  • Fix compatibility with Julia 0.3 prerelease

Version 0.5.1 (May 5, 2014)

  • Fix a bug in coefficient handling inside lazy constraints and user cuts

Version 0.5.0 (May 2, 2014)

  • Support for nonlinear optimization with exact, sparse second-order derivatives automatically computed. Ipopt is currently the only solver supported.
  • getValue for AffExpr and QuadExpr
  • Breaking change: getSolverModel replaced by getInternalModel, which returns the internal MathProgBase-level model
  • Groups of constraints can be specified with @addConstraint (see documentation for details). This is not a breaking change.
  • dot(::JuMPDict{Variable},::JuMPDict{Variable}) now returns the corresponding quadratic expression.

Version 0.4.1 (March 24, 2014)

  • Fix bug where change in objective sense was ignored when re-solving a model.
  • Fix issue with handling zero coefficients in AffExpr.

Version 0.4.0 (March 10, 2014)

  • Support for SOS1 and SOS2 constraints.
  • Solver-independent callback for user heuristics.
  • dot and sum implemented for JuMPDict objects. Now you can say @addConstraint(m, dot(a,x) <= b).
  • Developers: support for extensions to JuMP. See definition of Model in src/JuMP.jl for more details.
  • Option to construct the low-level model before optimizing.

Version 0.3.2 (February 17, 2014)

  • Improved model printing
    • Preliminary support for IJulia output

Version 0.3.1 (January 30, 2014)

  • Documentation updates
  • Support for MOSEK
  • CPLEXLink renamed to CPLEX

Version 0.3.0 (January 21, 2014)

  • Unbounded/infeasibility rays: getValue() will return the corresponding components of an unbounded ray when a model is unbounded, if supported by the selected solver. getDual() will return an infeasibility ray (Farkas proof) if a model is infeasible and the selected solver supports this feature.
  • Solver-independent callbacks for user generated cuts.
  • Use new interface for solver-independent QCQP.
  • setlazycallback renamed to setLazyCallback for consistency.

Version 0.2.0 (December 15, 2013)

Breaking

  • Objective sense is specified in setObjective instead of in the Model constructor.
  • lpsolver and mipsolver merged into single solver option.

Added

  • Problem modification with efficient LP restarts and MIP warm-starts.
  • Relatedly, column-wise modeling now supported.
  • Solver-independent callbacks supported. Currently we support only a "lazy constraint" callback, which works with Gurobi, CPLEX, and GLPK. More callbacks coming soon.

Version 0.1.2 (November 16, 2013)

  • Bug fixes for printing, improved error messages.
  • Allow AffExpr to be used in macros; for example, ex = y + z; @addConstraint(m, x + 2*ex <= 3)

Version 0.1.1 (October 23, 2013)

  • Update for solver specification API changes in MathProgBase.

Version 0.1.0 (October 3, 2013)

  • Initial public release.
+end
  • The lowerbound, upperbound, and basename keyword arguments to the @variable macro have been renamed to lower_bound, upper_bound, and base_name, for consistency with JuMP's new style recommendations.

  • We rely on broadcasting syntax to apply accessors to collections of variables, for example, value.(x) instead of getvalue(x) for collections. (Use value(x) when x is a scalar object.)

  • Added

    • Splatting (like f(x...)) is recognized in restricted settings in nonlinear expressions.

    • Support for deleting constraints and variables.

    • The documentation has been completely rewritten using docstrings and Documenter.

    • Support for modeling mixed conic and quadratic models (for example, conic models with quadratic objectives and bi-linear matrix inequalities).

    • Significantly improved support for modeling new types of constraints and for extending JuMP's macros.

    • Support for providing dual warm starts.

    • Improved support for accessing solver-specific attributes (for example, the irreducible inconsistent subsystem).

    • Explicit control of whether symmetry-enforcing constraints are added to PSD constraints.

    • Support for modeling exponential cones.

    • Significant improvements in internal code quality and testing.

    • Style and naming guidelines.

    • Direct mode and manual mode provide explicit control over when copies of a model are stored or regenerated. See the corresponding documentation.

    Regressions

    There are known regressions from JuMP 0.18 that will be addressed in a future release (0.19.x or later):

    • Performance regressions in model generation (issue). Please file an issue anyway if you notice a significant performance regression. We have plans to address a number of performance issues, but we might not be aware of all of them.

    • Fast incremental NLP solves are not yet reimplemented (issue).

    • We do not yet have an implementation of solver-specific callbacks.

    • The column generation syntax in @variable has been removed (that is, the objective, coefficients, and inconstraints keyword arguments). Support for column generation will be re-introduced in a future release.

    • The ability to solve the continuous relaxation (that is, via solve(model; relaxation = true)) is not yet reimplemented (issue).

    Version 0.18.5 (December 1, 2018)

    • Support views in some derivative evaluation functions.
    • Improved compatibility with PackageCompiler.

    Version 0.18.4 (October 8, 2018)

    • Fix a bug in model printing on Julia 0.7 and 1.0.

    Version 0.18.3 (October 1, 2018)

    • Add support for Julia v1.0 (Thanks @ExpandingMan)
    • Fix matrix expressions with quadratic functions (#1508)

    Version 0.18.2 (June 10, 2018)

    • Fix a bug in second-order derivatives when expressions are present (#1319)
    • Fix a bug in @constraintref (#1330)

    Version 0.18.1 (April 9, 2018)

    • Fix for nested tuple destructuring (#1193)
    • Preserve internal model when relaxation=true (#1209)
    • Minor bug fixes and updates for example

    Version 0.18.0 (July 27, 2017)

    • Drop support for Julia 0.5.
    • Update for ForwardDiff 0.5.
    • Minor bug fixes.

    Version 0.17.1 (June 9, 2017)

    • Use of constructconstraint! in @SDconstraint.
    • Minor bug fixes.

    Version 0.17.0 (May 27, 2017)

    • Breaking change: Mixing quadratic and conic constraints is no longer supported.
    • Breaking change: The getvariable and getconstraint functions are replaced by indexing on the corresponding symbol. For instance, to access the variable with name x, one should now write m[:x] instead of getvariable(m, :x). As a consequence, creating a variable and constraint with the same name now triggers a warning, and accessing one of them afterwards throws an error. This change is breaking only in the latter case.
    • Addition of the getobjectivebound function that mirrors the functionality of the MathProgBase getobjbound function except that it takes into account transformations performed by JuMP.
    • Minor bug fixes.

    The following changes are primarily of interest to developers of JuMP extensions:

    • The new syntax @constraint(model, expr in Cone) creates the constraint ensuring that expr is inside Cone. The Cone argument is passed to constructconstraint! which enables the call to the dispatched to an extension.
    • The @variable macro now calls constructvariable! instead of directly calling the Variable constructor. Extra arguments and keyword arguments passed to @variable are passed to constructvariable! which enables the call to be dispatched to an extension.
    • Refactor the internal function conicdata (used build the MathProgBase conic model) into smaller sub-functions to make these parts reusable by extensions.

    Version 0.16.2 (March 28, 2017)

    • Minor bug fixes and printing tweaks
    • Address deprecation warnings for Julia 0.6

    Version 0.16.1 (March 7, 2017)

    • Better support for AbstractArray in JuMP (Thanks @tkoolen)
    • Minor bug fixes

    Version 0.16.0 (February 23, 2017)

    • Breaking change: JuMP no longer has a mechanism for selecting solvers by default (the previous mechanism was flawed and incompatible with Julia 0.6). Not specifying a solver before calling solve() will result in an error.
    • Breaking change: User-defined functions are no longer global. The first argument to JuMP.register is now a JuMP Model object within whose scope the function will be registered. Calling JuMP.register without a Model now produces an error.
    • Breaking change: Use the new JuMP.fix method to fix a variable to a value or to update the value to which a variable is fixed. Calling setvalue on a fixed variable now results in an error in order to avoid silent behavior changes. (Thanks @joaquimg)
    • Nonlinear expressions now print out similarly to linear/quadratic expressions (useful for debugging!)
    • New category keyword to @variable. Used for specifying categories of anonymous variables.
    • Compatibility with Julia 0.6-dev.
    • Minor fixes and improvements (Thanks @cossio, @ccoffrin, @blegat)

    Version 0.15.1 (January 31, 2017)

    • Bugfix for @LinearConstraints and friends

    Version 0.15.0 (December 22, 2016)

    • Julia 0.5.0 is the minimum required version for this release.
    • Document support for BARON solver
    • Enable info callbacks in more states than before, for example, for recording solutions. New when argument to addinfocallback (#814, thanks @yeesian)
    • Improved support for anonymous variables. This includes new warnings for potentially confusing use of the traditional non-anonymous syntax:
      • When multiple variables in a model are given the same name
      • When non-symbols are used as names, for example, @variable(m, x[1][1:N])
    • Improvements in iterating over JuMP containers (#836, thanks @IssamT)
    • Support for writing variable names in .lp file output (Thanks @leethargo)
    • Support for querying duals to SDP problems (Thanks @blegat)
    • The comprehension syntax with curly braces sum{}, prod{}, and norm2{} has been deprecated in favor of Julia's native comprehension syntax sum(), prod() and norm() as previously announced. (For early adopters of the new syntax, norm2() was renamed to norm() without deprecation.)
    • Unit tests rewritten to use Base.Test instead of FactCheck
    • Improved support for operations with matrices of JuMP types (Thanks @ExpandingMan)
    • The syntax to halt a solver from inside a callback has changed from throw(CallbackAbort()) to return JuMP.StopTheSolver
    • Minor bug fixes

    Version 0.14.2 (December 12, 2016)

    • Allow singleton anonymous variables (includes bugfix)

    Version 0.14.1 (September 12, 2016)

    • More consistent handling of states in informational callbacks, includes a new when parameter to addinfocallback for specifying in which state an informational callback should be called.

    Version 0.14.0 (August 7, 2016)

    • Compatibility with Julia 0.5 and ForwardDiff 0.2
    • Support for "anonymous" variables, constraints, expressions, and parameters, for example, x = @variable(m, [1:N]) instead of @variable(m, x[1:N])
    • Support for retrieving constraints from a model by name via getconstraint
    • @NLconstraint now returns constraint references (as expected).
    • Support for vectorized expressions within lazy constraints
    • On Julia 0.5, parse new comprehension syntax sum(x[i] for i in 1:N if isodd(i)) instead of sum{ x[i], i in 1:N; isodd(i) }. The old syntax with curly braces will be deprecated in JuMP 0.15.
    • Now possible to provide nonlinear expressions as "raw" Julia Expr objects instead of using JuMP's nonlinear macros. This input format is useful for programmatically generated expressions.
    • s/Mathematical Programming/Mathematical Optimization/
    • Support for local cuts (Thanks to @madanim, Mehdi Madani)
    • Document Xpress interface developed by @joaquimg, Joaquim Dias Garcia
    • Minor bug and deprecation fixes (Thanks @odow, @jrevels)

    Version 0.13.2 (May 16, 2016)

    • Compatibility update for MathProgBase

    Version 0.13.1 (May 3, 2016)

    • Fix broken deprecation for registerNLfunction.

    Version 0.13.0 (April 29, 2016)

    • Most exported methods and macros have been renamed to avoid camelCase. See the list of changes here. There is a 1-1 mapping from the old names to the new, and it is safe to simply replace the names to update existing models.
    • Specify variable lower/upper bounds in @variable using the lowerbound and upperbound keyword arguments.
    • Change name printed for variable using the basename keyword argument to @variable.
    • New @variables macro allows multi-line declaration of groups of variables.
    • A number of solver methods previously available only through MathProgBase are now exposed directly in JuMP. The fix was recorded live.
    • Compatibility fixes with Julia 0.5.
    • The "end" indexing syntax is no longer supported within JuMPArrays which do not use 1-based indexing until upstream issues are resolved, see here.

    Version 0.12.2 (March 9, 2016)

    • Small fixes for nonlinear optimization

    Version 0.12.1 (March 1, 2016)

    • Fix a regression in slicing for JuMPArrays (when not using 1-based indexing)

    Version 0.12.0 (February 27, 2016)

    • The automatic differentiation functionality has been completely rewritten with a number of user-facing changes:
      • @defExpr and @defNLExpr now take the model as the first argument. The previous one-argument version of @defExpr is deprecated; all expressions should be named. For example, replace @defExpr(2x+y) with @defExpr(jump_model, my_expr, 2x+y).
      • JuMP no longer uses Julia's variable binding rules for efficiently re-solving a sequence of nonlinear models. Instead, we have introduced nonlinear parameters. This is a breaking change, so we have added a warning message when we detect models that may depend on the old behavior.
      • Support for user-defined functions integrated within nonlinear JuMP expressions.
    • Replaced iteration over AffExpr with Number-like scalar iteration; previous iteration behavior is now available via linearterms(::AffExpr).
    • Stopping the solver via throw(CallbackAbort()) from a callback no longer triggers an exception. Instead, solve() returns UserLimit status.
    • getDual() now works for conic problems (Thanks @emreyamangil.)

    Version 0.11.3 (February 4, 2016)

    • Bug-fix for problems with quadratic objectives and semidefinite constraints

    Version 0.11.2 (January 14, 2016)

    • Compatibility update for Mosek

    Version 0.11.1 (December 1, 2015)

    • Remove usage of @compat in tests.
    • Fix updating quadratic objectives for nonlinear models.

    Version 0.11.0 (November 30, 2015)

    • Julia 0.4.0 is the minimum required version for this release.
    • Fix for scoping semantics of index variables in sum{}. Index variables no longer leak into the surrounding scope.
    • Addition of the solve(m::Model, relaxation=true) keyword argument to solve the standard continuous relaxation of model m
    • The getConstraintBounds() method allows access to the lower and upper bounds of all constraints in a (nonlinear) model.
    • Update for breaking changes in MathProgBase

    Version 0.10.3 (November 20, 2015)

    • Fix a rare error when parsing quadratic expressions
    • Fix Variable() constructor with default arguments
    • Detect unrecognized keywords in solve()

    Version 0.10.2 (September 28, 2015)

    • Fix for deprecation warnings

    Version 0.10.1 (September 3, 2015)

    • Fixes for ambiguity warnings.
    • Fix for breaking change in precompilation syntax in Julia 0.4-pre

    Version 0.10.0 (August 31, 2015)

    • Support (on Julia 0.4 and later) for conditions in indexing @defVar and @addConstraint constructs, for example, @defVar(m, x[i=1:5,j=1:5; i+j >= 3])
    • Support for vectorized operations on Variables and expressions. See the documentation for details.
    • New getVar() method to access variables in a model by name
    • Support for semidefinite programming.
    • Dual solutions are now available for general nonlinear problems. You may call getDual on a reference object for a nonlinear constraint, and getDual on a variable object for Lagrange multipliers from active bounds.
    • Introduce warnings for two common performance traps: too many calls to getValue() on a collection of variables and use of the + operator in a loop to sum expressions.
    • Second-order cone constraints can be written directly with the norm() and norm2{} syntax.
    • Implement MathProgBase interface for querying Hessian-vector products.
    • Iteration over JuMPContainers is deprecated; instead, use the keys and values functions, and zip(keys(d),values(d)) for the old behavior.
    • @defVar returns Array{Variable,N} when each of N index sets are of the form 1:nᵢ.
    • Module precompilation: on Julia 0.4 and later, using JuMP is now much faster.

    Version 0.9.3 (August 11, 2015)

    • Fixes for FactCheck testing on julia v0.4.

    Version 0.9.2 (June 27, 2015)

    • Fix bug in @addConstraints.

    Version 0.9.1 (April 25, 2015)

    • Fix for Julia 0.4-dev.
    • Small infrastructure improvements for extensions.

    Version 0.9.0 (April 18, 2015)

    • Comparison operators for constructing constraints (for example, 2x >= 1) have been deprecated. Instead, construct the constraints explicitly in the @addConstraint macro to add them to the model, or in the @LinearConstraint macro to create a stand-alone linear constraint instance.
    • getValue() method implemented to compute the value of a nonlinear subexpression
    • JuMP is now released under the Mozilla Public License version 2.0 (was previously LGPL). MPL is a copyleft license which is less restrictive than LGPL, especially for embedding JuMP within other applications.
    • A number of performance improvements in ReverseDiffSparse for computing derivatives.
    • MathProgBase.getsolvetime(m) now returns the solution time reported by the solver, if available. (Thanks @odow, Oscar Dowson)
    • Formatting fix for LP format output. (Thanks @sbebo, Leonardo Taccari).

    Version 0.8.0 (February 17, 2015)

    • Nonlinear subexpressions now supported with the @defNLExpr macro.
    • SCS supported for solving second-order conic problems.
    • setXXXCallback family deprecated in favor of addXXXCallback.
    • Multiple callbacks of the same type can be registered.
    • Added support for informational callbacks via addInfoCallback.
    • A CallbackAbort exception can be thrown from callback to safely exit optimization.

    Version 0.7.4 (February 4, 2015)

    • Reduced costs and linear constraint duals are now accessible when quadratic constraints are present.
    • Two-sided nonlinear constraints are supported.
    • Methods for accessing the number of variables and constraints in a model are renamed.
    • New default procedure for setting initial values in nonlinear optimization: project zero onto the variable bounds.
    • Small bug fixes.

    Version 0.7.3 (January 14, 2015)

    • Fix a method ambiguity conflict with Compose.jl (cosmetic fix)

    Version 0.7.2 (January 9, 2015)

    • Fix a bug in sum(::JuMPDict)
    • Added the setCategory function to change a variables category (for example, continuous or binary)

    after construction, and getCategory to retrieve the variable category.

    Version 0.7.1 (January 2, 2015)

    • Fix a bug in parsing linear expressions in macros. Affects only Julia 0.4 and later.

    Version 0.7.0 (December 29, 2014)

    Linear/quadratic/conic programming

    • Breaking change: The syntax for column-wise model generation has been changed to use keyword arguments in @defVar.
    • On Julia 0.4 and later, variables and coefficients may be multiplied in any order within macros. That is, variable*coefficient is now valid syntax.
    • ECOS supported for solving second-order conic problems.

    Nonlinear programming

    • Support for skipping model generation when solving a sequence of nonlinear models with changing data.
    • Fix a memory leak when solving a sequence of nonlinear models.
    • The @addNLConstraint macro now supports the three-argument version to define sets of nonlinear constraints.
    • KNITRO supported as a nonlinear solver.
    • Speed improvements for model generation.
    • The @addNLConstraints macro supports adding multiple (groups of) constraints at once. Syntax is similar to @addConstraints.
    • Discrete variables allowed in nonlinear problems for solvers which support them (currently only KNITRO).

    General

    • Starting values for variables may now be specified with @defVar(m, x, start=value).
    • The setSolver function allows users to change the solver subsequent to model creation.
    • Support for "fixed" variables via the @defVar(m, x == 1) syntax.
    • Unit tests rewritten to use FactCheck.jl, improved testing across solvers.

    Version 0.6.3 (October 19, 2014)

    • Fix a bug in multiplying two AffExpr objects.

    Version 0.6.2 (October 11, 2014)

    • Further improvements and bug fixes for printing.
    • Fixed a bug in @defExpr.
    • Support for accessing expression graphs through the MathProgBase NLP interface.

    Version 0.6.1 (September 19, 2014)

    • Improvements and bug fixes for printing.

    Version 0.6.0 (September 9, 2014)

    • Julia 0.3.0 is the minimum required version for this release.
    • buildInternalModel(m::Model) added to build solver-level model in memory without optimizing.
    • Deprecate load_model_only keyword argument to solve.
    • Add groups of constraints with @addConstraints macro.
    • Unicode operators now supported, including for sum, for prod, and /
    • Quadratic constraints supported in @addConstraint macro.
    • Quadratic objectives supported in @setObjective macro.
    • MathProgBase solver-independent interface replaces Ipopt-specific interface for nonlinear problems
      • Breaking change: IpoptOptions no longer supported to specify solver options, use m = Model(solver=IpoptSolver(options...)) instead.
    • New solver interfaces: ECOS, NLopt, and nonlinear support for MOSEK
    • New option to control whether the lazy constraint callback is executed at each node in the B&B tree or just when feasible solutions are found
    • Add support for semicontinuous and semi-integer variables for those solvers that support them.
    • Add support for index dependencies (for example, triangular indexing) in @defVar, @addConstraint, and @defExpr (for example, @defVar(m, x[i=1:10,j=i:10])).
      • This required some changes to the internal structure of JuMP containers, which may break code that explicitly stored JuMPDict objects.

    Version 0.5.8 (September 24, 2014)

    • Fix a bug with specifying solvers (affects Julia 0.2 only)

    Version 0.5.7 (September 5, 2014)

    • Fix a bug in printing models

    Version 0.5.6 (September 2, 2014)

    • Add support for semicontinuous and semi-integer variables for those solvers that support them.
      • Breaking change: Syntax for Variable() constructor has changed (use of this interface remains discouraged)
    • Update for breaking changes in MathProgBase

    Version 0.5.5 (July 6, 2014)

    • Fix bug with problem modification: adding variables that did not appear in existing constraints or objective.

    Version 0.5.4 (June 19, 2014)

    • Update for breaking change in MathProgBase which reduces loading times for using JuMP
    • Fix error when MIPs not solved to optimality

    Version 0.5.3 (May 21, 2014)

    • Update for breaking change in ReverseDiffSparse

    Version 0.5.2 (May 9, 2014)

    • Fix compatibility with Julia 0.3 prerelease

    Version 0.5.1 (May 5, 2014)

    • Fix a bug in coefficient handling inside lazy constraints and user cuts

    Version 0.5.0 (May 2, 2014)

    • Support for nonlinear optimization with exact, sparse second-order derivatives automatically computed. Ipopt is currently the only solver supported.
    • getValue for AffExpr and QuadExpr
    • Breaking change: getSolverModel replaced by getInternalModel, which returns the internal MathProgBase-level model
    • Groups of constraints can be specified with @addConstraint (see documentation for details). This is not a breaking change.
    • dot(::JuMPDict{Variable},::JuMPDict{Variable}) now returns the corresponding quadratic expression.

    Version 0.4.1 (March 24, 2014)

    • Fix bug where change in objective sense was ignored when re-solving a model.
    • Fix issue with handling zero coefficients in AffExpr.

    Version 0.4.0 (March 10, 2014)

    • Support for SOS1 and SOS2 constraints.
    • Solver-independent callback for user heuristics.
    • dot and sum implemented for JuMPDict objects. Now you can say @addConstraint(m, dot(a,x) <= b).
    • Developers: support for extensions to JuMP. See definition of Model in src/JuMP.jl for more details.
    • Option to construct the low-level model before optimizing.

    Version 0.3.2 (February 17, 2014)

    • Improved model printing
      • Preliminary support for IJulia output

    Version 0.3.1 (January 30, 2014)

    • Documentation updates
    • Support for MOSEK
    • CPLEXLink renamed to CPLEX

    Version 0.3.0 (January 21, 2014)

    • Unbounded/infeasibility rays: getValue() will return the corresponding components of an unbounded ray when a model is unbounded, if supported by the selected solver. getDual() will return an infeasibility ray (Farkas proof) if a model is infeasible and the selected solver supports this feature.
    • Solver-independent callbacks for user generated cuts.
    • Use new interface for solver-independent QCQP.
    • setlazycallback renamed to setLazyCallback for consistency.

    Version 0.2.0 (December 15, 2013)

    Breaking

    • Objective sense is specified in setObjective instead of in the Model constructor.
    • lpsolver and mipsolver merged into single solver option.

    Added

    • Problem modification with efficient LP restarts and MIP warm-starts.
    • Relatedly, column-wise modeling now supported.
    • Solver-independent callbacks supported. Currently we support only a "lazy constraint" callback, which works with Gurobi, CPLEX, and GLPK. More callbacks coming soon.

    Version 0.1.2 (November 16, 2013)

    • Bug fixes for printing, improved error messages.
    • Allow AffExpr to be used in macros; for example, ex = y + z; @addConstraint(m, x + 2*ex <= 3)

    Version 0.1.1 (October 23, 2013)

    • Update for solver specification API changes in MathProgBase.

    Version 0.1.0 (October 3, 2013)

    • Initial public release.
    diff --git a/dev/search_index.js b/dev/search_index.js index 0e02eb2fe1c..382ad4bc082 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"moi/reference/nonlinear/","page":"Nonlinear programming","title":"Nonlinear programming","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/reference/nonlinear.md\"","category":"page"},{"location":"moi/reference/nonlinear/","page":"Nonlinear programming","title":"Nonlinear programming","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/reference/nonlinear/#Nonlinear-programming","page":"Nonlinear programming","title":"Nonlinear programming","text":"","category":"section"},{"location":"moi/reference/nonlinear/#Types","page":"Nonlinear programming","title":"Types","text":"","category":"section"},{"location":"moi/reference/nonlinear/","page":"Nonlinear programming","title":"Nonlinear programming","text":"AbstractNLPEvaluator\nNLPBoundsPair\nNLPBlockData","category":"page"},{"location":"moi/reference/nonlinear/#MathOptInterface.AbstractNLPEvaluator","page":"Nonlinear programming","title":"MathOptInterface.AbstractNLPEvaluator","text":"AbstractNLPEvaluator\n\nAbstract supertype for the callback object that is used to query function values, derivatives, and expression graphs.\n\nIt is used in NLPBlockData.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> supertype(typeof(evaluator))\nMathOptInterface.AbstractNLPEvaluator\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/nonlinear/#MathOptInterface.NLPBoundsPair","page":"Nonlinear programming","title":"MathOptInterface.NLPBoundsPair","text":"NLPBoundsPair(lower::Float64, upper::Float64)\n\nA struct holding a pair of lower and upper bounds.\n\n-Inf and Inf can be used to indicate no lower or upper bound, respectively.\n\nExample\n\njulia> import MathOptInterface as MOI\n\njulia> bounds = MOI.NLPBoundsPair.([25.0, 40.0], [Inf, 40.0])\n2-element Vector{MathOptInterface.NLPBoundsPair}:\n MathOptInterface.NLPBoundsPair(25.0, Inf)\n MathOptInterface.NLPBoundsPair(40.0, 40.0)\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/nonlinear/#MathOptInterface.NLPBlockData","page":"Nonlinear programming","title":"MathOptInterface.NLPBlockData","text":"struct NLPBlockData\n constraint_bounds::Vector{NLPBoundsPair}\n evaluator::AbstractNLPEvaluator\n has_objective::Bool\nend\n\nA struct encoding a set of nonlinear constraints of the form lb le g(x) le ub and, if has_objective == true, a nonlinear objective function f(x).\n\nNonlinear objectives override any objective set by using the ObjectiveFunction attribute.\n\nThe evaluator is a callback object that is used to query function values, derivatives, and expression graphs. If has_objective == false, then it is an error to query properties of the objective function, and in Hessian-of-the-Lagrangian queries, σ must be set to zero.\n\nnote: Note\nThroughout the evaluator, all variables are ordered according to ListOfVariableIndices. Hence, MOI copies of nonlinear problems must not re-order variables.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> model = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}());\n\njulia> block = MOI.NLPBlockData(\n MOI.NLPBoundsPair.([25.0, 40.0], [Inf, 40.0]),\n MOI.Test.HS071(true),\n true,\n );\n\njulia> MOI.set(model, MOI.NLPBlock(), block)\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/nonlinear/#Attributes","page":"Nonlinear programming","title":"Attributes","text":"","category":"section"},{"location":"moi/reference/nonlinear/","page":"Nonlinear programming","title":"Nonlinear programming","text":"NLPBlock\nNLPBlockDual\nNLPBlockDualStart","category":"page"},{"location":"moi/reference/nonlinear/#MathOptInterface.NLPBlock","page":"Nonlinear programming","title":"MathOptInterface.NLPBlock","text":"NLPBlock()\n\nAn AbstractModelAttribute that stores an NLPBlockData, representing a set of nonlinear constraints, and optionally a nonlinear objective.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> model = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}());\n\njulia> block = MOI.NLPBlockData(\n MOI.NLPBoundsPair.([25.0, 40.0], [Inf, 40.0]),\n MOI.Test.HS071(true),\n true,\n );\n\njulia> MOI.set(model, MOI.NLPBlock(), block)\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/nonlinear/#MathOptInterface.NLPBlockDual","page":"Nonlinear programming","title":"MathOptInterface.NLPBlockDual","text":"NLPBlockDual(result_index::Int = 1)\n\nAn AbstractModelAttribute for the Lagrange multipliers on the constraints from the NLPBlock in result result_index.\n\nIf result_index is omitted, it is 1 by default.\n\nExample\n\njulia> import MathOptInterface as MOI\n\njulia> MOI.NLPBlockDual()\nMathOptInterface.NLPBlockDual(1)\n\njulia> MOI.NLPBlockDual(2)\nMathOptInterface.NLPBlockDual(2)\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/nonlinear/#MathOptInterface.NLPBlockDualStart","page":"Nonlinear programming","title":"MathOptInterface.NLPBlockDualStart","text":"NLPBlockDualStart()\n\nAn AbstractModelAttribute for the initial assignment of the Lagrange multipliers on the constraints from the NLPBlock that the solver may use to warm-start the solve.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> model = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}());\n\njulia> block = MOI.NLPBlockData(\n MOI.NLPBoundsPair.([25.0, 40.0], [Inf, 40.0]),\n MOI.Test.HS071(true),\n true,\n );\n\njulia> MOI.set(model, MOI.NLPBlock(), block)\n\njulia> MOI.set(model, MOI.NLPBlockDualStart(), [1.0, 2.0])\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/nonlinear/#Functions","page":"Nonlinear programming","title":"Functions","text":"","category":"section"},{"location":"moi/reference/nonlinear/","page":"Nonlinear programming","title":"Nonlinear programming","text":"initialize\nfeatures_available\neval_objective\neval_constraint\neval_objective_gradient\njacobian_structure\neval_constraint_gradient\nconstraint_gradient_structure\neval_constraint_jacobian\neval_constraint_jacobian_product\neval_constraint_jacobian_transpose_product\nhessian_lagrangian_structure\nhessian_objective_structure\nhessian_constraint_structure\neval_hessian_objective\neval_hessian_constraint\neval_hessian_lagrangian\neval_hessian_lagrangian_product\nobjective_expr\nconstraint_expr","category":"page"},{"location":"moi/reference/nonlinear/#MathOptInterface.initialize","page":"Nonlinear programming","title":"MathOptInterface.initialize","text":"initialize(\n d::AbstractNLPEvaluator,\n requested_features::Vector{Symbol},\n)::Nothing\n\nInitialize d with the set of features in requested_features. Check features_available before calling initialize to see what features are supported by d.\n\nwarning: Warning\nThis method must be called before any other methods.\n\nFeatures\n\nThe following features are defined:\n\n:Grad: enables eval_objective_gradient\n:Jac: enables eval_constraint_jacobian and eval_constraint_gradient\n:JacVec: enables eval_constraint_jacobian_product and eval_constraint_jacobian_transpose_product\n:Hess: enables eval_hessian_lagrangian\n:HessVec: enables eval_hessian_lagrangian_product\n:ExprGraph: enables objective_expr and constraint_expr.\n\nIn all cases, including when requested_features is empty, eval_objective and eval_constraint are supported.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, [:Grad, :Jac])\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.features_available","page":"Nonlinear programming","title":"MathOptInterface.features_available","text":"features_available(d::AbstractNLPEvaluator)::Vector{Symbol}\n\nReturns the subset of features available for this problem instance.\n\nSee initialize for the list of defined features.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true, true);\n\njulia> MOI.features_available(evaluator)\n6-element Vector{Symbol}:\n :Grad\n :Jac\n :JacVec\n :ExprGraph\n :Hess\n :HessVec\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_objective","page":"Nonlinear programming","title":"MathOptInterface.eval_objective","text":"eval_objective(d::AbstractNLPEvaluator, x::AbstractVector{T})::T where {T}\n\nEvaluate the objective f(x), returning a scalar value.\n\nInitialize\n\nBefore calling this function, you must call initialize, but you do not need to pass a value.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[])\n\njulia> MOI.eval_objective(evaluator, [1.0, 2.0, 3.0, 4.0])\n27.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_constraint","page":"Nonlinear programming","title":"MathOptInterface.eval_constraint","text":"eval_constraint(\n d::AbstractNLPEvaluator,\n g::AbstractVector{T},\n x::AbstractVector{T},\n)::Nothing where {T}\n\nGiven a set of vector-valued constraints l le g(x) le u, evaluate the constraint function g(x), storing the result in the vector g.\n\nInitialize\n\nBefore calling this function, you must call initialize, but you do not need to pass a value.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that g is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[])\n\njulia> g = fill(NaN, 2);\n\njulia> MOI.eval_constraint(evaluator, g, [1.0, 2.0, 3.0, 4.0])\n\njulia> g\n2-element Vector{Float64}:\n 24.0\n 30.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_objective_gradient","page":"Nonlinear programming","title":"MathOptInterface.eval_objective_gradient","text":"eval_objective_gradient(\n d::AbstractNLPEvaluator,\n grad::AbstractVector{T},\n x::AbstractVector{T},\n)::Nothing where {T}\n\nEvaluate the gradient of the objective function grad = nabla f(x) as a dense vector, storing the result in the vector grad.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Grad.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that grad is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Grad])\n\njulia> grad = fill(NaN, 4);\n\njulia> MOI.eval_objective_gradient(evaluator, grad, [1.0, 2.0, 3.0, 4.0])\n\njulia> grad\n4-element Vector{Float64}:\n 28.0\n 4.0\n 5.0\n 6.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.jacobian_structure","page":"Nonlinear programming","title":"MathOptInterface.jacobian_structure","text":"jacobian_structure(d::AbstractNLPEvaluator)::Vector{Tuple{Int64,Int64}}\n\nReturns a vector of tuples, (row, column), where each indicates the position of a structurally nonzero element in the Jacobian matrix: J_g(x) = left beginarrayc nabla g_1(x) nabla g_2(x) vdots nabla g_m(x) endarrayright where g_i is the itextth component of the nonlinear constraints g(x).\n\nThe indices are not required to be sorted and can contain duplicates, in which case the solver should combine the corresponding elements by adding them together.\n\nThe sparsity structure is assumed to be independent of the point x.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Jac.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Jac])\n\njulia> MOI.jacobian_structure(evaluator)\n8-element Vector{Tuple{Int64, Int64}}:\n (1, 1)\n (1, 2)\n (1, 3)\n (1, 4)\n (2, 1)\n (2, 2)\n (2, 3)\n (2, 4)\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_constraint_gradient","page":"Nonlinear programming","title":"MathOptInterface.eval_constraint_gradient","text":"eval_constraint_gradient(\n d::AbstractNLPEvaluator,\n ∇g::AbstractVector{T},\n x::AbstractVector{T},\n i::Int,\n)::Nothing where {T}\n\nEvaluate the gradient of constraint i, nabla g_i(x), and store the non-zero values in ∇g, corresponding to the structure returned by constraint_gradient_structure.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that ∇g is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Jac.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Jac])\n\njulia> indices = MOI.constraint_gradient_structure(evaluator, 1);\n\njulia> ∇g = zeros(length(indices));\n\njulia> MOI.eval_constraint_gradient(evaluator, ∇g, [1.0, 2.0, 3.0, 4.0], 1)\n\njulia> ∇g\n4-element Vector{Float64}:\n 24.0\n 12.0\n 8.0\n 6.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.constraint_gradient_structure","page":"Nonlinear programming","title":"MathOptInterface.constraint_gradient_structure","text":"constraint_gradient_structure(d::AbstractNLPEvaluator, i::Int)::Vector{Int64}\n\nReturns a vector of indices, where each element indicates the position of a structurally nonzero element in the gradient of constraint nabla g_i(x).\n\nThe indices are not required to be sorted and can contain duplicates, in which case the solver should combine the corresponding elements by adding them together.\n\nThe sparsity structure is assumed to be independent of the point x.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Jac.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Jac])\n\njulia> indices = MOI.constraint_gradient_structure(evaluator, 1)\n4-element Vector{Int64}:\n 1\n 2\n 3\n 4\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_constraint_jacobian","page":"Nonlinear programming","title":"MathOptInterface.eval_constraint_jacobian","text":"eval_constraint_jacobian(\n d::AbstractNLPEvaluator,\n J::AbstractVector{T},\n x::AbstractVector{T},\n)::Nothing where {T}\n\nEvaluates the sparse Jacobian matrix J_g(x) = left beginarrayc nabla g_1(x) nabla g_2(x) vdots nabla g_m(x) endarrayright.\n\nThe result is stored in the vector J in the same order as the indices returned by jacobian_structure.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that J is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Jac])\n\njulia> J_indices = MOI.jacobian_structure(evaluator);\n\njulia> J = zeros(length(J_indices));\n\njulia> MOI.eval_constraint_jacobian(evaluator, J, [1.0, 2.0, 3.0, 4.0])\n\njulia> J\n8-element Vector{Float64}:\n 24.0\n 12.0\n 8.0\n 6.0\n 2.0\n 4.0\n 6.0\n 8.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_constraint_jacobian_product","page":"Nonlinear programming","title":"MathOptInterface.eval_constraint_jacobian_product","text":"eval_constraint_jacobian_product(\n d::AbstractNLPEvaluator,\n y::AbstractVector{T},\n x::AbstractVector{T},\n w::AbstractVector{T},\n)::Nothing where {T}\n\nComputes the Jacobian-vector product y = J_g(x)w, storing the result in the vector y.\n\nThe vectors have dimensions such that length(w) == length(x), and length(y) is the number of nonlinear constraints.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that y is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :JacVec.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Jac, :JacVec])\n\njulia> y = zeros(2);\n\njulia> x = [1.0, 2.0, 3.0, 4.0];\n\njulia> w = [1.5, 2.5, 3.5, 4.5];\n\njulia> MOI.eval_constraint_jacobian_product(evaluator, y, x, w)\n\njulia> y\n2-element Vector{Float64}:\n 121.0\n 70.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_constraint_jacobian_transpose_product","page":"Nonlinear programming","title":"MathOptInterface.eval_constraint_jacobian_transpose_product","text":"eval_constraint_jacobian_transpose_product(\n d::AbstractNLPEvaluator,\n y::AbstractVector{T},\n x::AbstractVector{T},\n w::AbstractVector{T},\n)::Nothing where {T}\n\nComputes the Jacobian-transpose-vector product y = J_g(x)^Tw, storing the result in the vector y.\n\nThe vectors have dimensions such that length(y) == length(x), and length(w) is the number of nonlinear constraints.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that y is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :JacVec.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Jac, :JacVec])\n\njulia> y = zeros(4);\n\njulia> x = [1.0, 2.0, 3.0, 4.0];\n\njulia> w = [1.5, 2.5];\n\njulia> MOI.eval_constraint_jacobian_transpose_product(evaluator, y, x, w)\n\njulia> y\n4-element Vector{Float64}:\n 41.0\n 28.0\n 27.0\n 29.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.hessian_lagrangian_structure","page":"Nonlinear programming","title":"MathOptInterface.hessian_lagrangian_structure","text":"hessian_lagrangian_structure(\n d::AbstractNLPEvaluator,\n)::Vector{Tuple{Int64,Int64}}\n\nReturns a vector of tuples, (row, column), where each indicates the position of a structurally nonzero element in the Hessian-of-the-Lagrangian matrix: nabla^2 f(x) + sum_i=1^m nabla^2 g_i(x).\n\nThe indices are not required to be sorted and can contain duplicates, in which case the solver should combine the corresponding elements by adding them together.\n\nAny mix of lower and upper-triangular indices is valid. Elements (i, j) and (j, i), if both present, should be treated as duplicates.\n\nThe sparsity structure is assumed to be independent of the point x.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Hess])\n\njulia> MOI.hessian_lagrangian_structure(evaluator)\n10-element Vector{Tuple{Int64, Int64}}:\n (1, 1)\n (2, 1)\n (2, 2)\n (3, 1)\n (3, 2)\n (3, 3)\n (4, 1)\n (4, 2)\n (4, 3)\n (4, 4)\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.hessian_objective_structure","page":"Nonlinear programming","title":"MathOptInterface.hessian_objective_structure","text":"hessian_objective_structure(\n d::AbstractNLPEvaluator,\n)::Vector{Tuple{Int64,Int64}}\n\nReturns a vector of tuples, (row, column), where each indicates the position of a structurally nonzero element in the Hessian matrix: nabla^2 f(x).\n\nThe indices are not required to be sorted and can contain duplicates, in which case the solver should combine the corresponding elements by adding them together.\n\nAny mix of lower and upper-triangular indices is valid. Elements (i, j) and (j, i), if both present, should be treated as duplicates.\n\nThe sparsity structure is assumed to be independent of the point x.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Hess])\n\njulia> MOI.hessian_objective_structure(evaluator)\n6-element Vector{Tuple{Int64, Int64}}:\n (1, 1)\n (2, 1)\n (3, 1)\n (4, 1)\n (4, 2)\n (4, 3)\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.hessian_constraint_structure","page":"Nonlinear programming","title":"MathOptInterface.hessian_constraint_structure","text":"hessian_constraint_structure(\n d::AbstractNLPEvaluator,\n i::Int64,\n)::Vector{Tuple{Int64,Int64}}\n\nReturns a vector of tuples, (row, column), where each indicates the position of a structurally nonzero element in the Hessian matrix: nabla^2 g_i(x).\n\nThe indices are not required to be sorted and can contain duplicates, in which case the solver should combine the corresponding elements by adding them together.\n\nAny mix of lower and upper-triangular indices is valid. Elements (i, j) and (j, i), if both present, should be treated as duplicates.\n\nThe sparsity structure is assumed to be independent of the point x.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Hess])\n\njulia> MOI.hessian_constraint_structure(evaluator, 1)\n6-element Vector{Tuple{Int64, Int64}}:\n (2, 1)\n (3, 1)\n (3, 2)\n (4, 1)\n (4, 2)\n (4, 3)\n\njulia> MOI.hessian_constraint_structure(evaluator, 2)\n4-element Vector{Tuple{Int64, Int64}}:\n (1, 1)\n (2, 2)\n (3, 3)\n (4, 4)\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_hessian_objective","page":"Nonlinear programming","title":"MathOptInterface.eval_hessian_objective","text":"eval_hessian_objective(\n d::AbstractNLPEvaluator,\n H::AbstractVector{T},\n x::AbstractVector{T},\n)::Nothing where {T}\n\nThis function computes the sparse Hessian matrix: nabla^2 f(x), storing the result in the vector H in the same order as the indices returned by hessian_objective_structure.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that H is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true, true);\n\njulia> MOI.initialize(evaluator, Symbol[:Hess])\n\njulia> indices = MOI.hessian_objective_structure(evaluator);\n\njulia> H = zeros(length(indices));\n\njulia> x = [1.0, 2.0, 3.0, 4.0];\n\njulia> MOI.eval_hessian_objective(evaluator, H, x)\n\njulia> H\n6-element Vector{Float64}:\n 8.0\n 4.0\n 4.0\n 7.0\n 1.0\n 1.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_hessian_constraint","page":"Nonlinear programming","title":"MathOptInterface.eval_hessian_constraint","text":"eval_hessian_constraint(\n d::AbstractNLPEvaluator,\n H::AbstractVector{T},\n x::AbstractVector{T},\n i::Int64,\n)::Nothing where {T}\n\nThis function computes the sparse Hessian matrix: nabla^2 g_i(x), storing the result in the vector H in the same order as the indices returned by hessian_constraint_structure.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that H is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true, true);\n\njulia> MOI.initialize(evaluator, Symbol[:Hess])\n\njulia> indices = MOI.hessian_constraint_structure(evaluator, 1);\n\njulia> H = zeros(length(indices));\n\njulia> x = [1.0, 2.0, 3.0, 4.0];\n\njulia> MOI.eval_hessian_constraint(evaluator, H, x, 1)\n\njulia> H\n6-element Vector{Float64}:\n 12.0\n 8.0\n 4.0\n 6.0\n 3.0\n 2.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_hessian_lagrangian","page":"Nonlinear programming","title":"MathOptInterface.eval_hessian_lagrangian","text":"eval_hessian_lagrangian(\n d::AbstractNLPEvaluator,\n H::AbstractVector{T},\n x::AbstractVector{T},\n σ::T,\n μ::AbstractVector{T},\n)::Nothing where {T}\n\nGiven scalar weight σ and vector of constraint weights μ, this function computes the sparse Hessian-of-the-Lagrangian matrix: sigmanabla^2 f(x) + sum_i=1^m mu_i nabla^2 g_i(x), storing the result in the vector H in the same order as the indices returned by hessian_lagrangian_structure.\n\nImplementation notes\n\nWhen implementing this method, you must not assume that H is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :Hess.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, Symbol[:Hess])\n\njulia> indices = MOI.hessian_lagrangian_structure(evaluator);\n\njulia> H = zeros(length(indices));\n\njulia> x = [1.0, 2.0, 3.0, 4.0];\n\njulia> σ = 1.0;\n\njulia> μ = [1.0, 1.0];\n\njulia> MOI.eval_hessian_lagrangian(evaluator, H, x, σ, μ)\n\njulia> H\n10-element Vector{Float64}:\n 10.0\n 16.0\n 2.0\n 12.0\n 4.0\n 2.0\n 13.0\n 4.0\n 3.0\n 2.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_hessian_lagrangian_product","page":"Nonlinear programming","title":"MathOptInterface.eval_hessian_lagrangian_product","text":"eval_hessian_lagrangian_product(\n d::AbstractNLPEvaluator,\n h::AbstractVector{T},\n x::AbstractVector{T},\n v::AbstractVector{T},\n σ::T,\n μ::AbstractVector{T},\n)::Nothing where {T}\n\nGiven scalar weight σ and vector of constraint weights μ, computes the Hessian-of-the-Lagrangian-vector product h = left(sigmanabla^2 f(x) + sum_i=1^m mu_i nabla^2 g_i(x)right)v, storing the result in the vector h.\n\nThe vectors have dimensions such that length(h) == length(x) == length(v).\n\nImplementation notes\n\nWhen implementing this method, you must not assume that h is Vector{Float64}, but you may assume that it supports setindex! and length. For example, it may be the view of a vector.\n\nInitialize\n\nBefore calling this function, you must call initialize with :HessVec.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true, true);\n\njulia> MOI.initialize(evaluator, Symbol[:HessVec])\n\njulia> H = fill(NaN, 4);\n\njulia> x = [1.0, 2.0, 3.0, 4.0];\n\njulia> v = [1.5, 2.5, 3.5, 4.5];\n\njulia> σ = 1.0;\n\njulia> μ = [1.0, 1.0];\n\njulia> MOI.eval_hessian_lagrangian_product(evaluator, H, x, v, σ, μ)\n\njulia> H\n4-element Vector{Float64}:\n 155.5\n 61.0\n 48.5\n 49.0\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.objective_expr","page":"Nonlinear programming","title":"MathOptInterface.objective_expr","text":"objective_expr(d::AbstractNLPEvaluator)::Expr\n\nReturns a Julia Expr object representing the expression graph of the objective function.\n\nFormat\n\nThe expression has a number of limitations, compared with arbitrary Julia expressions:\n\nAll sums and products are flattened out as simple Expr(:+, ...) and Expr(:*, ...) objects.\nAll decision variables must be of the form Expr(:ref, :x, MOI.VariableIndex(i)), where i is the ith variable in ListOfVariableIndices.\nThere are currently no restrictions on recognized functions; typically these will be built-in Julia functions like ^, exp, log, cos, tan, sqrt, etc., but modeling interfaces may choose to extend these basic functions, or error if they encounter unsupported functions.\n\nInitialize\n\nBefore calling this function, you must call initialize with :ExprGraph.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, [:ExprGraph])\n\njulia> MOI.objective_expr(evaluator)\n:(x[MOI.VariableIndex(1)] * x[MOI.VariableIndex(4)] * (x[MOI.VariableIndex(1)] + x[MOI.VariableIndex(2)] + x[MOI.VariableIndex(3)]) + x[MOI.VariableIndex(3)])\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.constraint_expr","page":"Nonlinear programming","title":"MathOptInterface.constraint_expr","text":"constraint_expr(d::AbstractNLPEvaluator, i::Integer)::Expr\n\nReturns a Julia Expr object representing the expression graph for the itextth nonlinear constraint.\n\nFormat\n\nThe format is the same as objective_expr, with an additional comparison operator indicating the sense of and bounds on the constraint.\n\nFor single-sided comparisons, the body of the constraint must be on the left-hand side, and the right-hand side must be a constant.\n\nFor double-sided comparisons (that is, l le g(x) le u), the body of the constraint must be in the middle, and the left- and right-hand sides must be constants.\n\nThe bounds on the constraints must match the NLPBoundsPairs passed to NLPBlockData.\n\nInitialize\n\nBefore calling this function, you must call initialize with :ExprGraph.\n\nExample\n\nThis example uses the Test.HS071 evaluator.\n\njulia> import MathOptInterface as MOI\n\njulia> evaluator = MOI.Test.HS071(true);\n\njulia> MOI.initialize(evaluator, [:ExprGraph])\n\njulia> MOI.constraint_expr(evaluator, 1)\n:(x[MOI.VariableIndex(1)] * x[MOI.VariableIndex(2)] * x[MOI.VariableIndex(3)] * x[MOI.VariableIndex(4)] >= 25.0)\n\njulia> MOI.constraint_expr(evaluator, 2)\n:(x[MOI.VariableIndex(1)] ^ 2 + x[MOI.VariableIndex(2)] ^ 2 + x[MOI.VariableIndex(3)] ^ 2 + x[MOI.VariableIndex(4)] ^ 2 == 40.0)\n\n\n\n\n\n","category":"function"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"EditURL = \"https://github.com/jump-dev/Cbc.jl/blob/v1.2.0/README.md\"","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"(Image: )","category":"page"},{"location":"packages/Cbc/#Cbc.jl","page":"jump-dev/Cbc.jl","title":"Cbc.jl","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"(Image: Build Status) (Image: codecov)","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Cbc.jl is a wrapper for the COIN-OR Branch and Cut (Cbc) solver.","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"The wrapper has two components:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"a thin wrapper around the complete C API\nan interface to MathOptInterface","category":"page"},{"location":"packages/Cbc/#Affiliation","page":"jump-dev/Cbc.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"This wrapper is maintained by the JuMP community and is not a COIN-OR project.","category":"page"},{"location":"packages/Cbc/#License","page":"jump-dev/Cbc.jl","title":"License","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Cbc.jl is licensed under the MIT License.","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"The underlying solver, coin-or/Cbc, is licensed under the Eclipse public license.","category":"page"},{"location":"packages/Cbc/#Installation","page":"jump-dev/Cbc.jl","title":"Installation","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Install Cbc using Pkg.add:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"import Pkg\nPkg.add(\"Cbc\")","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"In addition to installing the Cbc.jl package, this will also download and install the Cbc binaries. You do not need to install Cbc separately.","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"To use a custom binary, read the Custom solver binaries section of the JuMP documentation.","category":"page"},{"location":"packages/Cbc/#Use-with-JuMP","page":"jump-dev/Cbc.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"To use Cbc with JuMP, use Cbc.Optimizer:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"using JuMP, Cbc\nmodel = Model(Cbc.Optimizer)\nset_attribute(model, \"logLevel\", 1)","category":"page"},{"location":"packages/Cbc/#MathOptInterface-API","page":"jump-dev/Cbc.jl","title":"MathOptInterface API","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"The COIN Branch-and-Cut (Cbc) optimizer supports the following constraints and attributes.","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported objective functions:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported variable types:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"MOI.Reals","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported constraint types:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"MOI.ScalarAffineFunction{Float64} in MOI.EqualTo{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.GreaterThan{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.Interval{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.LessThan{Float64}\nMOI.VariableIndex in MOI.EqualTo{Float64}\nMOI.VariableIndex in MOI.GreaterThan{Float64}\nMOI.VariableIndex in MOI.Integer\nMOI.VariableIndex in MOI.Interval{Float64}\nMOI.VariableIndex in MOI.LessThan{Float64}\nMOI.VariableIndex in MOI.ZeroOne\nMOI.VectorOfVariables in MOI.SOS1{Float64}\nMOI.VectorOfVariables in MOI.SOS2{Float64}","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported model attributes:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Cbc.Status\nCbc.SecondaryStatus\nMOI.DualStatus\nMOI.NodeCount\nMOI.NumberOfVariables\nMOI.ObjectiveBound\nMOI.ObjectiveSense\nMOI.ObjectiveValue\nMOI.PrimalStatus\nMOI.RelativeGap\nMOI.ResultCount\nMOI.SolveTimeSec\nMOI.TerminationStatus","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported optimizer attributes:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Cbc.SetVariableNames\nMOI.AbsoluteGapTolerance\nMOI.NumberOfThreads\nMOI.RawOptimizerAttribute\nMOI.RelativeGapTolerance\nMOI.Silent\nMOI.SolverName\nMOI.SolverVersion\nMOI.TimeLimitSec","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported variable attributes:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"MOI.VariablePrimal\nMOI.VariablePrimalStart\nMOI.VariableName","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"List of supported constraint attributes:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"MOI.ConstraintPrimal","category":"page"},{"location":"packages/Cbc/#Options","page":"jump-dev/Cbc.jl","title":"Options","text":"","category":"section"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Options are, unfortunately, not well documented.","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"The following options are likely to be the most useful:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Parameter Example Explanation\nseconds 60.0 Solution timeout limit\nlogLevel 2 Set to 0 to disable solution output\nmaxSolutions 1 Terminate after this many feasible solutions have been found\nmaxNodes 1 Terminate after this many branch-and-bound nodes have been evaluated\nallowableGap 0.05 Terminate after optimality gap is less than this value (on an absolute scale)\nratioGap 0.05 Terminate after optimality gap is smaller than this relative fraction\nthreads 1 Set the number of threads to use for parallel branch & bound","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"The complete list of parameters can be found by running the cbc executable and typing ? at the prompt.","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"Start the cbc executable from Julia as follows:","category":"page"},{"location":"packages/Cbc/","page":"jump-dev/Cbc.jl","title":"jump-dev/Cbc.jl","text":"using Cbc_jll\nCbc_jll.cbc() do exe\n run(`$(exe)`)\nend","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"EditURL = \"geographic_clustering.jl\"","category":"page"},{"location":"tutorials/linear/geographic_clustering/#Geographical-clustering","page":"Geographical clustering","title":"Geographical clustering","text":"","category":"section"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"This tutorial was originally contributed by Matthew Helm and Mathieu Tanneau.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"The goal of this exercise is to cluster n cities into k groups, minimizing the total pairwise distance between cities and ensuring that the variance in the total populations of each group is relatively small.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"using JuMP\nimport DataFrames\nimport HiGHS\nimport LinearAlgebra","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"For this example, we'll use the 20 most populous cities in the United States.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"cities = DataFrames.DataFrame(\n Union{String,Float64}[\n \"New York, NY\" 8.405 40.7127 -74.0059\n \"Los Angeles, CA\" 3.884 34.0522 -118.2436\n \"Chicago, IL\" 2.718 41.8781 -87.6297\n \"Houston, TX\" 2.195 29.7604 -95.3698\n \"Philadelphia, PA\" 1.553 39.9525 -75.1652\n \"Phoenix, AZ\" 1.513 33.4483 -112.0740\n \"San Antonio, TX\" 1.409 29.4241 -98.4936\n \"San Diego, CA\" 1.355 32.7157 -117.1610\n \"Dallas, TX\" 1.257 32.7766 -96.7969\n \"San Jose, CA\" 0.998 37.3382 -121.8863\n \"Austin, TX\" 0.885 30.2671 -97.7430\n \"Indianapolis, IN\" 0.843 39.7684 -86.1580\n \"Jacksonville, FL\" 0.842 30.3321 -81.6556\n \"San Francisco, CA\" 0.837 37.7749 -122.4194\n \"Columbus, OH\" 0.822 39.9611 -82.9987\n \"Charlotte, NC\" 0.792 35.2270 -80.8431\n \"Fort Worth, TX\" 0.792 32.7554 -97.3307\n \"Detroit, MI\" 0.688 42.3314 -83.0457\n \"El Paso, TX\" 0.674 31.7775 -106.4424\n \"Memphis, TN\" 0.653 35.1495 -90.0489\n ],\n [\"city\", \"population\", \"lat\", \"lon\"],\n)","category":"page"},{"location":"tutorials/linear/geographic_clustering/#Model-Specifics","page":"Geographical clustering","title":"Model Specifics","text":"","category":"section"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"We will cluster these 20 cities into 3 different groups and we will assume that the ideal or target population P for a group is simply the total population of the 20 cities divided by 3:","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"n = size(cities, 1)\nk = 3\nP = sum(cities.population) / k","category":"page"},{"location":"tutorials/linear/geographic_clustering/#Obtaining-the-distances-between-each-city","page":"Geographical clustering","title":"Obtaining the distances between each city","text":"","category":"section"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"Let's compute the pairwise Haversine distance between each of the cities in our data set and store the result in a variable we'll call dm:","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"\"\"\"\n haversine(lat1, long1, lat2, long2, r = 6372.8)\n\nCompute the haversine distance between two points on a sphere of radius `r`,\nwhere the points are given by the latitude/longitude pairs `lat1/long1` and\n`lat2/long2` (in degrees).\n\"\"\"\nfunction haversine(lat1, long1, lat2, long2, r = 6372.8)\n lat1, long1 = deg2rad(lat1), deg2rad(long1)\n lat2, long2 = deg2rad(lat2), deg2rad(long2)\n hav(a, b) = sin((b - a) / 2)^2\n inner_term = hav(lat1, lat2) + cos(lat1) * cos(lat2) * hav(long1, long2)\n d = 2 * r * asin(sqrt(inner_term))\n # Round distance to nearest kilometer.\n return round(Int, d)\nend","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"Our distance matrix is symmetric so we'll convert it to a LowerTriangular matrix so that we can better interpret the objective value of our model:","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"dm = LinearAlgebra.LowerTriangular([\n haversine(cities.lat[i], cities.lon[i], cities.lat[j], cities.lon[j])\n for i in 1:n, j in 1:n\n])","category":"page"},{"location":"tutorials/linear/geographic_clustering/#Build-the-model","page":"Geographical clustering","title":"Build the model","text":"","category":"section"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"Now that we have the basics taken care of, we can set up our model, create decision variables, add constraints, and then solve.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"First, we'll set up a model that leverages the Cbc solver. Next, we'll set up a binary variable x_ik that takes the value 1 if city i is in group k and 0 otherwise. Each city must be in a group, so we'll add the constraint sum_k x_ik = 1 for every i.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"model = Model(HiGHS.Optimizer)\nset_silent(model)\n@variable(model, x[1:n, 1:k], Bin)\n@constraint(model, [i = 1:n], sum(x[i, :]) == 1);\n# To reduce symmetry, we fix the first city to belong to the first group.\nfix(x[1, 1], 1; force = true)","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"The total population of a group k is Q_k = sum_ix_ikq_i where q_i is simply the i-th value from the population column in our cities DataFrame. Let's add constraints so that alpha leq (Q_k - P) leq beta. We'll set alpha equal to -3 million and beta equal to 3. By adjusting these thresholds you'll find that there is a tradeoff between having relatively even populations between groups and having geographically close cities within each group. In other words, the larger the absolute values of alpha and beta, the closer together the cities in a group will be but the variance between the group populations will be higher.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"@variable(model, -3 <= population_diff[1:k] <= 3)\n@constraint(model, population_diff .== x' * cities.population .- P)","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"Now we need to add one last binary variable z_ij to our model that we'll use to compute the total distance between the cities in our groups, defined as sum_ijd_ijz_ij. Variable z_ij will equal 1 if cities i and j are in the same group, and 0 if they are not in the same group.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"To ensure that z_ij = 1 if and only if cities i and j are in the same group, we add the constraints z_ij geq x_ik + x_jk - 1 for every pair ij and every k:","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"@variable(model, z[i = 1:n, j = 1:i], Bin)\nfor k in 1:k, i in 1:n, j in 1:i\n @constraint(model, z[i, j] >= x[i, k] + x[j, k] - 1)\nend","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"We can now add an objective to our model which will simply be to minimize the dot product of z and our distance matrix, dm.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"@objective(model, Min, sum(dm[i, j] * z[i, j] for i in 1:n, j in 1:i));\nnothing #hide","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"We can then call optimize! and review the results.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"optimize!(model)\n@assert is_solved_and_feasible(model)","category":"page"},{"location":"tutorials/linear/geographic_clustering/#Reviewing-the-Results","page":"Geographical clustering","title":"Reviewing the Results","text":"","category":"section"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"Now that we have results, we can add a column to our cities DataFrame for the group and then loop through our x variable to assign each city to its group. Once we have that, we can look at the total population for each group and also look at the cities in each group to verify that they are grouped by geographic proximity.","category":"page"},{"location":"tutorials/linear/geographic_clustering/","page":"Geographical clustering","title":"Geographical clustering","text":"cities.group = zeros(n)\n\nfor i in 1:n, j in 1:k\n if round(Int, value(x[i, j])) == 1\n cities.group[i] = j\n end\nend\n\nfor group in DataFrames.groupby(cities, :group)\n @show group\n println(\"\")\n @show sum(group.population)\n println(\"\")\nend","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"EditURL = \"https://github.com/hdavid16/DisjunctiveProgramming.jl/blob/6a4d0ac4a7484e52b1dbff9cee310a73d2d23e81/docs/jump/README.md\"","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"(Image: Logo)","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"DisjunctiveProgramming.jl is a JuMP extension for expressing and solving Generalized Disjunctive Programs. Generalized Disjunctive Programming (GDP) is a modeling paradigm for easily modeling logical conditions which can be reformulated into a variety of mixed-integer programs. ","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"Current Version Documentation Build Status Citation\n(Image: ) (Image: ) (Image: Build Status) (Image: codecov.io) (Image: arXiv)","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"DisjunctiveProgramming builds upon JuMP to add support GDP modeling objects which include:","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"Logical variables (Y in textFalse textTrue)\nDisjunctions\nLogical constraints (also known as propositions)\nCardinality constraints","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"It also supports automatic conversion of the GDP model into a regular mixed-integer JuMP model via a variety of reformulations which include:","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"Big-M\nHull\nIndicator constraints","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"Moreover, DisjunctiveProgramming provides an extension API to easily add new reformulation methods.","category":"page"},{"location":"packages/DisjunctiveProgramming/#License","page":"hdavid16/DisjunctiveProgramming.jl","title":"License","text":"","category":"section"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"InfiniteOpt is licensed under the MIT \"Expat\" license.","category":"page"},{"location":"packages/DisjunctiveProgramming/#Installation","page":"hdavid16/DisjunctiveProgramming.jl","title":"Installation","text":"","category":"section"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"DisjunctiveProgramming.jl is a registered Julia package and can be installed by entering the following in the REPL.","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"julia> import Pkg; Pkg.add(\"DisjunctiveProgramming\")","category":"page"},{"location":"packages/DisjunctiveProgramming/#Documentation","page":"hdavid16/DisjunctiveProgramming.jl","title":"Documentation","text":"","category":"section"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"Please visit our documentation pages to learn more.","category":"page"},{"location":"packages/DisjunctiveProgramming/#Citing","page":"hdavid16/DisjunctiveProgramming.jl","title":"Citing","text":"","category":"section"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"(Image: arXiv)","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"If you use DisjunctiveProgramming.jl in your research, we would greatly appreciate your citing it.","category":"page"},{"location":"packages/DisjunctiveProgramming/","page":"hdavid16/DisjunctiveProgramming.jl","title":"hdavid16/DisjunctiveProgramming.jl","text":"@article{perez2023disjunctiveprogramming,\n title={DisjunctiveProgramming. jl: Generalized Disjunctive Programming Models and Algorithms for JuMP},\n author={Perez, Hector D and Joshi, Shivank and Grossmann, Ignacio E},\n journal={arXiv preprint arXiv:2304.10492},\n year={2023}\n}","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"CurrentModule = JuMP\nDocTestSetup = quote\n using JuMP\nend\nDocTestFilters = [r\"≤|<=\", r\"≥|>=\", r\" == | = \", r\" ∈ | in \", r\"MathOptInterface|MOI\"]","category":"page"},{"location":"manual/objective/#Objectives","page":"Objectives","title":"Objectives","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"This page describes macros and functions related to linear and quadratic objective functions only, unless otherwise indicated. For nonlinear objective functions, see Nonlinear Modeling.","category":"page"},{"location":"manual/objective/#Set-a-linear-objective","page":"Objectives","title":"Set a linear objective","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use the @objective macro to set a linear objective function.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use Min to create a minimization objective:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x + 1)\n2 x + 1","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use Max to create a maximization objective:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Max, 2x + 1)\n2 x + 1","category":"page"},{"location":"manual/objective/#Set-a-quadratic-objective","page":"Objectives","title":"Set a quadratic objective","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use the @objective macro to set a quadratic objective function.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use ^2 to have a variable squared:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, x^2 + 2x + 1)\nx² + 2 x + 1","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"You can also have bilinear terms between variables:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> @objective(model, Max, x * y + x + y)\nx*y + x + y","category":"page"},{"location":"manual/objective/#Set-a-nonlinear-objective","page":"Objectives","title":"Set a nonlinear objective","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use the @objective macro to set a nonlinear objective function:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x <= 1);\n\njulia> @objective(model, Max, log(x))\nlog(x)","category":"page"},{"location":"manual/objective/#Query-the-objective-function","page":"Objectives","title":"Query the objective function","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use objective_function to return the current objective function.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x + 1)\n2 x + 1\n\njulia> objective_function(model)\n2 x + 1","category":"page"},{"location":"manual/objective/#Evaluate-the-objective-function-at-a-point","page":"Objectives","title":"Evaluate the objective function at a point","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use value to evaluate an objective function at a point specifying values for variables.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @objective(model, Min, 2x[1]^2 + x[1] + 0.5*x[2])\n2 x[1]² + x[1] + 0.5 x[2]\n\njulia> f = objective_function(model)\n2 x[1]² + x[1] + 0.5 x[2]\n\njulia> point = Dict(x[1] => 2.0, x[2] => 1.0);\n\njulia> value(z -> point[z], f)\n10.5","category":"page"},{"location":"manual/objective/#Query-the-objective-sense","page":"Objectives","title":"Query the objective sense","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use objective_sense to return the current objective sense.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x + 1)\n2 x + 1\n\njulia> objective_sense(model)\nMIN_SENSE::OptimizationSense = 0","category":"page"},{"location":"manual/objective/#Modify-an-objective","page":"Objectives","title":"Modify an objective","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"To modify an objective, call @objective with the new objective function.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x)\n2 x\n\njulia> @objective(model, Max, -2x)\n-2 x","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Alternatively, use set_objective_function.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x)\n2 x\n\njulia> new_objective = @expression(model, -2 * x)\n-2 x\n\njulia> set_objective_function(model, new_objective)","category":"page"},{"location":"manual/objective/#Modify-an-objective-coefficient","page":"Objectives","title":"Modify an objective coefficient","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use set_objective_coefficient to modify an objective coefficient.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x)\n2 x\n\njulia> set_objective_coefficient(model, x, 3)\n\njulia> objective_function(model)\n3 x","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use set_objective_coefficient with two variables to modify a quadratic objective coefficient:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @variable(model, y);\n\njulia> @objective(model, Min, x^2 + x * y)\nx² + x*y\n\njulia> set_objective_coefficient(model, x, x, 2)\n\njulia> set_objective_coefficient(model, x, y, 3)\n\njulia> objective_function(model)\n2 x² + 3 x*y","category":"page"},{"location":"manual/objective/#Modify-the-objective-sense","page":"Objectives","title":"Modify the objective sense","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Use set_objective_sense to modify the objective sense.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x)\n2 x\n\njulia> objective_sense(model)\nMIN_SENSE::OptimizationSense = 0\n\njulia> set_objective_sense(model, MAX_SENSE);\n\njulia> objective_sense(model)\nMAX_SENSE::OptimizationSense = 1","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Alternatively, call @objective and pass the existing objective function.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @objective(model, Min, 2x)\n2 x\n\njulia> @objective(model, Max, objective_function(model))\n2 x","category":"page"},{"location":"manual/objective/#Set-a-vector-valued-objective","page":"Objectives","title":"Set a vector-valued objective","text":"","category":"section"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Define a multi-objective optimization problem by passing a vector of objectives:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @objective(model, Min, [1 + x[1], 2 * x[2]])\n2-element Vector{AffExpr}:\n x[1] + 1\n 2 x[2]\n\njulia> f = objective_function(model)\n2-element Vector{AffExpr}:\n x[1] + 1\n 2 x[2]","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"tip: Tip\nThe Multi-objective knapsack tutorial provides an example of solving a multi-objective integer program.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"In most cases, multi-objective optimization solvers will return multiple solutions, corresponding to points on the Pareto frontier. See Multiple solutions for information on how to query and work with multiple solutions.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Note that you must set a single objective sense, that is, you cannot have both minimization and maximization objectives. Work around this limitation by choosing Min and negating any objectives you want to maximize:","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @expression(model, obj1, 1 + x[1])\nx[1] + 1\n\njulia> @expression(model, obj2, 2 * x[1])\n2 x[1]\n\njulia> @objective(model, Min, [obj1, -obj2])\n2-element Vector{AffExpr}:\n x[1] + 1\n -2 x[1]","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"Defining your objectives as expressions allows flexibility in how you can solve variations of the same problem, with some objectives removed and constrained to be no worse that a fixed value.","category":"page"},{"location":"manual/objective/","page":"Objectives","title":"Objectives","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @expression(model, obj1, 1 + x[1])\nx[1] + 1\n\njulia> @expression(model, obj2, 2 * x[1])\n2 x[1]\n\njulia> @expression(model, obj3, x[1] + x[2])\nx[1] + x[2]\n\njulia> @objective(model, Min, [obj1, obj2, obj3]) # Three-objective problem\n3-element Vector{AffExpr}:\n x[1] + 1\n 2 x[1]\n x[1] + x[2]\n\njulia> # optimize!(model), look at the solution, talk to stakeholders, then\n # decide you want to solve a new problem where the third objective is\n # removed and constrained to be better than 2.0.\n nothing\n\njulia> @objective(model, Min, [obj1, obj2]) # Two-objective problem\n2-element Vector{AffExpr}:\n x[1] + 1\n 2 x[1]\n\njulia> @constraint(model, obj3 <= 2.0)\nx[1] + x[2] ≤ 2","category":"page"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/reference/callbacks.md\"","category":"page"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/reference/callbacks/#Callbacks","page":"Callbacks","title":"Callbacks","text":"","category":"section"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"AbstractCallback\nAbstractSubmittable\nsubmit","category":"page"},{"location":"moi/reference/callbacks/#MathOptInterface.AbstractCallback","page":"Callbacks","title":"MathOptInterface.AbstractCallback","text":"abstract type AbstractCallback <: AbstractModelAttribute end\n\nAbstract type for a model attribute representing a callback function. The value set to subtypes of AbstractCallback is a function that may be called during optimize!. As optimize! is in progress, the result attributes (that is, the attributes attr such that is_set_by_optimize(attr)) may not be accessible from the callback, hence trying to get result attributes might throw a OptimizeInProgress error.\n\nAt most one callback of each type can be registered. If an optimizer already has a function for a callback type, and the user registers a new function, then the old one is replaced.\n\nThe value of the attribute should be a function taking only one argument, commonly called callback_data, that can be used for instance in LazyConstraintCallback, HeuristicCallback and UserCutCallback.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.AbstractSubmittable","page":"Callbacks","title":"MathOptInterface.AbstractSubmittable","text":"AbstractSubmittable\n\nAbstract supertype for objects that can be submitted to the model.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.submit","page":"Callbacks","title":"MathOptInterface.submit","text":"submit(\n optimizer::AbstractOptimizer,\n sub::AbstractSubmittable,\n values...,\n)::Nothing\n\nSubmit values to the submittable sub of the optimizer optimizer.\n\nAn UnsupportedSubmittable error is thrown if model does not support the attribute attr (see supports) and a SubmitNotAllowed error is thrown if it supports the submittable sub but it cannot be submitted.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/callbacks/#Attributes","page":"Callbacks","title":"Attributes","text":"","category":"section"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"CallbackNodeStatus\nCallbackVariablePrimal\nCallbackNodeStatusCode\nCALLBACK_NODE_STATUS_INTEGER\nCALLBACK_NODE_STATUS_FRACTIONAL\nCALLBACK_NODE_STATUS_UNKNOWN","category":"page"},{"location":"moi/reference/callbacks/#MathOptInterface.CallbackNodeStatus","page":"Callbacks","title":"MathOptInterface.CallbackNodeStatus","text":"CallbackNodeStatus(callback_data)\n\nAn optimizer attribute describing the (in)feasibility of the primal solution available from CallbackVariablePrimal during a callback identified by callback_data.\n\nReturns a CallbackNodeStatusCode Enum.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.CallbackVariablePrimal","page":"Callbacks","title":"MathOptInterface.CallbackVariablePrimal","text":"CallbackVariablePrimal(callback_data)\n\nA variable attribute for the assignment to some primal variable's value during the callback identified by callback_data.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.CallbackNodeStatusCode","page":"Callbacks","title":"MathOptInterface.CallbackNodeStatusCode","text":"CallbackNodeStatusCode\n\nAn Enum of possible return values from calling get with CallbackNodeStatus.\n\nValues\n\nPossible values are:\n\nCALLBACK_NODE_STATUS_INTEGER: the primal solution available from CallbackVariablePrimal is integer feasible.\nCALLBACK_NODE_STATUS_FRACTIONAL: the primal solution available from CallbackVariablePrimal is integer infeasible.\nCALLBACK_NODE_STATUS_UNKNOWN: the primal solution available from CallbackVariablePrimal might be integer feasible or infeasible.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.CALLBACK_NODE_STATUS_INTEGER","page":"Callbacks","title":"MathOptInterface.CALLBACK_NODE_STATUS_INTEGER","text":"CALLBACK_NODE_STATUS_INTEGER::CallbackNodeStatusCode\n\nAn instance of the CallbackNodeStatusCode enum.\n\nCALLBACK_NODE_STATUS_INTEGER: the primal solution available from CallbackVariablePrimal is integer feasible.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/callbacks/#MathOptInterface.CALLBACK_NODE_STATUS_FRACTIONAL","page":"Callbacks","title":"MathOptInterface.CALLBACK_NODE_STATUS_FRACTIONAL","text":"CALLBACK_NODE_STATUS_FRACTIONAL::CallbackNodeStatusCode\n\nAn instance of the CallbackNodeStatusCode enum.\n\nCALLBACK_NODE_STATUS_FRACTIONAL: the primal solution available from CallbackVariablePrimal is integer infeasible.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/callbacks/#MathOptInterface.CALLBACK_NODE_STATUS_UNKNOWN","page":"Callbacks","title":"MathOptInterface.CALLBACK_NODE_STATUS_UNKNOWN","text":"CALLBACK_NODE_STATUS_UNKNOWN::CallbackNodeStatusCode\n\nAn instance of the CallbackNodeStatusCode enum.\n\nCALLBACK_NODE_STATUS_UNKNOWN: the primal solution available from CallbackVariablePrimal might be integer feasible or infeasible.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/callbacks/#Lazy-constraints","page":"Callbacks","title":"Lazy constraints","text":"","category":"section"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"LazyConstraintCallback\nLazyConstraint","category":"page"},{"location":"moi/reference/callbacks/#MathOptInterface.LazyConstraintCallback","page":"Callbacks","title":"MathOptInterface.LazyConstraintCallback","text":"LazyConstraintCallback() <: AbstractCallback\n\nThe callback can be used to reduce the feasible set given the current primal solution by submitting a LazyConstraint. For instance, it may be called at an incumbent of a mixed-integer problem. Note that there is no guarantee that the callback is called at every feasible primal solution.\n\nThe current primal solution is accessed through CallbackVariablePrimal. Trying to access other result attributes will throw OptimizeInProgress as discussed in AbstractCallback.\n\nExamples\n\nx = MOI.add_variables(optimizer, 8)\nMOI.set(optimizer, MOI.LazyConstraintCallback(), callback_data -> begin\n sol = MOI.get(optimizer, MOI.CallbackVariablePrimal(callback_data), x)\n if # should add a lazy constraint\n func = # computes function\n set = # computes set\n MOI.submit(optimizer, MOI.LazyConstraint(callback_data), func, set)\n end\nend)\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.LazyConstraint","page":"Callbacks","title":"MathOptInterface.LazyConstraint","text":"LazyConstraint(callback_data)\n\nLazy constraint func-in-set submitted as func, set. The optimal solution returned by VariablePrimal will satisfy all lazy constraints that have been submitted.\n\nThis can be submitted only from the LazyConstraintCallback. The field callback_data is a solver-specific callback type that is passed as the argument to the feasible solution callback.\n\nExamples\n\nSuppose x and y are VariableIndexs of optimizer. To add a LazyConstraint for 2x + 3y <= 1, write\n\nfunc = 2.0x + 3.0y\nset = MOI.LessThan(1.0)\nMOI.submit(optimizer, MOI.LazyConstraint(callback_data), func, set)\n\ninside a LazyConstraintCallback of data callback_data.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#User-cuts","page":"Callbacks","title":"User cuts","text":"","category":"section"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"UserCutCallback\nUserCut","category":"page"},{"location":"moi/reference/callbacks/#MathOptInterface.UserCutCallback","page":"Callbacks","title":"MathOptInterface.UserCutCallback","text":"UserCutCallback() <: AbstractCallback\n\nThe callback can be used to submit UserCut given the current primal solution. For instance, it may be called at fractional (that is, non-integer) nodes in the branch and bound tree of a mixed-integer problem. Note that there is not guarantee that the callback is called everytime the solver has an infeasible solution.\n\nThe infeasible solution is accessed through CallbackVariablePrimal. Trying to access other result attributes will throw OptimizeInProgress as discussed in AbstractCallback.\n\nExamples\n\nx = MOI.add_variables(optimizer, 8)\nMOI.set(optimizer, MOI.UserCutCallback(), callback_data -> begin\n sol = MOI.get(optimizer, MOI.CallbackVariablePrimal(callback_data), x)\n if # can find a user cut\n func = # computes function\n set = # computes set\n MOI.submit(optimizer, MOI.UserCut(callback_data), func, set)\n end\nend\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.UserCut","page":"Callbacks","title":"MathOptInterface.UserCut","text":"UserCut(callback_data)\n\nConstraint func-to-set suggested to help the solver detect the solution given by CallbackVariablePrimal as infeasible. The cut is submitted as func, set. Typically CallbackVariablePrimal will violate integrality constraints, and a cut would be of the form ScalarAffineFunction-in-LessThan or ScalarAffineFunction-in-GreaterThan. Note that, as opposed to LazyConstraint, the provided constraint cannot modify the feasible set, the constraint should be redundant, for example, it may be a consequence of affine and integrality constraints.\n\nThis can be submitted only from the UserCutCallback. The field callback_data is a solver-specific callback type that is passed as the argument to the infeasible solution callback.\n\nNote that the solver may silently ignore the provided constraint.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#Heuristic-solutions","page":"Callbacks","title":"Heuristic solutions","text":"","category":"section"},{"location":"moi/reference/callbacks/","page":"Callbacks","title":"Callbacks","text":"HeuristicCallback\nHeuristicSolution\nHeuristicSolutionStatus\nHEURISTIC_SOLUTION_ACCEPTED\nHEURISTIC_SOLUTION_REJECTED\nHEURISTIC_SOLUTION_UNKNOWN","category":"page"},{"location":"moi/reference/callbacks/#MathOptInterface.HeuristicCallback","page":"Callbacks","title":"MathOptInterface.HeuristicCallback","text":"HeuristicCallback() <: AbstractCallback\n\nThe callback can be used to submit HeuristicSolution given the current primal solution. For example, it may be called at fractional (that is, non-integer) nodes in the branch and bound tree of a mixed-integer problem. Note that there is no guarantee that the callback is called every time the solver has an infeasible solution.\n\nThe current primal solution is accessed through CallbackVariablePrimal. Trying to access other result attributes will throw OptimizeInProgress as discussed in AbstractCallback.\n\nExamples\n\nx = MOI.add_variables(optimizer, 8)\nMOI.set(optimizer, MOI.HeuristicCallback(), callback_data -> begin\n sol = MOI.get(optimizer, MOI.CallbackVariablePrimal(callback_data), x)\n if # can find a heuristic solution\n values = # computes heuristic solution\n MOI.submit(optimizer, MOI.HeuristicSolution(callback_data), x,\n values)\n end\nend\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.HeuristicSolution","page":"Callbacks","title":"MathOptInterface.HeuristicSolution","text":"HeuristicSolution(callback_data)\n\nHeuristically obtained feasible solution. The solution is submitted as variables, values where values[i] gives the value of variables[i], similarly to set. The submit call returns a HeuristicSolutionStatus indicating whether the provided solution was accepted or rejected.\n\nThis can be submitted only from the HeuristicCallback. The field callback_data is a solver-specific callback type that is passed as the argument to the heuristic callback.\n\nSome solvers require a complete solution, others only partial solutions.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.HeuristicSolutionStatus","page":"Callbacks","title":"MathOptInterface.HeuristicSolutionStatus","text":"HeuristicSolutionStatus\n\nAn Enum of possible return values for submit with HeuristicSolution. This informs whether the heuristic solution was accepted or rejected.\n\nValues\n\nPossible values are:\n\nHEURISTIC_SOLUTION_ACCEPTED: The heuristic solution was accepted\nHEURISTIC_SOLUTION_REJECTED: The heuristic solution was rejected\nHEURISTIC_SOLUTION_UNKNOWN: No information available on the acceptance\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/callbacks/#MathOptInterface.HEURISTIC_SOLUTION_ACCEPTED","page":"Callbacks","title":"MathOptInterface.HEURISTIC_SOLUTION_ACCEPTED","text":"HEURISTIC_SOLUTION_ACCEPTED::HeuristicSolutionStatus\n\nAn instance of the HeuristicSolutionStatus enum.\n\nHEURISTIC_SOLUTION_ACCEPTED: The heuristic solution was accepted\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/callbacks/#MathOptInterface.HEURISTIC_SOLUTION_REJECTED","page":"Callbacks","title":"MathOptInterface.HEURISTIC_SOLUTION_REJECTED","text":"HEURISTIC_SOLUTION_REJECTED::HeuristicSolutionStatus\n\nAn instance of the HeuristicSolutionStatus enum.\n\nHEURISTIC_SOLUTION_REJECTED: The heuristic solution was rejected\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/callbacks/#MathOptInterface.HEURISTIC_SOLUTION_UNKNOWN","page":"Callbacks","title":"MathOptInterface.HEURISTIC_SOLUTION_UNKNOWN","text":"HEURISTIC_SOLUTION_UNKNOWN::HeuristicSolutionStatus\n\nAn instance of the HeuristicSolutionStatus enum.\n\nHEURISTIC_SOLUTION_UNKNOWN: No information available on the acceptance\n\n\n\n\n\n","category":"constant"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"EditURL = \"https://github.com/odow/SDDP.jl/blob/v1.8.1/README.md\"","category":"page"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"\"logo\"","category":"page"},{"location":"packages/SDDP/#SDDP.jl","page":"odow/SDDP.jl","title":"SDDP.jl","text":"","category":"section"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"(Image: Build Status) (Image: codecov)","category":"page"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"SDDP.jl is a JuMP extension for solving large convex multistage stochastic programming problems using stochastic dual dynamic programming.","category":"page"},{"location":"packages/SDDP/#License","page":"odow/SDDP.jl","title":"License","text":"","category":"section"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"SDDP.jl is licensed under the MPL 2.0 license.","category":"page"},{"location":"packages/SDDP/#Documentation","page":"odow/SDDP.jl","title":"Documentation","text":"","category":"section"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"You can find the documentation at sddp.dev.","category":"page"},{"location":"packages/SDDP/#Help","page":"odow/SDDP.jl","title":"Help","text":"","category":"section"},{"location":"packages/SDDP/","page":"odow/SDDP.jl","title":"odow/SDDP.jl","text":"If you need help, please open a GitHub issue.","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"EditURL = \"https://github.com/plasmo-dev/Plasmo.jl/blob/v0.6.2/README.md\"","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"(Image: CI) (Image: codecov) (Image: ) (Image: DOI)","category":"page"},{"location":"packages/Plasmo/#Plasmo.jl","page":"plasmo-dev/Plasmo.jl","title":"Plasmo.jl","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"(Platform for Scalable Modeling and Optimization)","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"[!NOTE] Plasmo.jl has undergone significant refactorization with the release of version 0.6. While most syntax should still work, we advise checking out the documentation for the latest updates and filing an issue if a v0.5 model produces errors.","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"Plasmo.jl is a graph-based algebraic modeling framework for building, managing, and solving optimization problems that utilizes graph-theoretic concepts and modular data structures. The package extends JuMP.jl to offer concise syntax, interfaces with MathOptInterface.jl to access standard optimization solvers, and utilizes Graphs.jl to provide graph analysis and processing methods. Plasmo.jl facilitates developing optimization models for networked systems such as supply chains, power systems, industrial processes, or any coupled system that involves multiple components and connections. The package also acts as a high-level platform to develop customized optimization-based decomposition techniques and meta-algorithms to optimize problems over large systems.","category":"page"},{"location":"packages/Plasmo/#Overview","page":"plasmo-dev/Plasmo.jl","title":"Overview","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"The core object in Plasmo.jl is the OptiGraph, a graph data structure that represents optimization problems as a set of optinodes and optiedges. Optinodes encapsulate variables, expressions, and constraints (and objective functions) as modular models and edges encapsulate linking constraints that couple variables across optinodes. Optigraphs can be embedded within other optigraphs to induce nested hierarchical structures, or they can be partitioned using different graph projections and partitioning algorithms to create new decomposition structures.","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"The core data structure in Plasmo.jl is the OptiGraph. The optigraph contains a set of optinodes which represent self-contained optimization problems and optiedges that represent coupling between optinodes (which produces an underlying hypergraph structure of optinodes and optiedges). Optigraphs can further be embedded within other optigraphs to create nested hierarchical graph structures. The graph structures obtained using Plasmo.jl can be used for simple model and data management, but they can also be used to perform graph partitioning or develop interfaces to structured optimization solvers.","category":"page"},{"location":"packages/Plasmo/#License","page":"plasmo-dev/Plasmo.jl","title":"License","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"Plasmo.jl is licensed under the MPL 2.0 license.","category":"page"},{"location":"packages/Plasmo/#Installation","page":"plasmo-dev/Plasmo.jl","title":"Installation","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"Install Plasmo using Pkg.add:","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"import Pkg\nPkg.add(\"Plasmo\")","category":"page"},{"location":"packages/Plasmo/#Documentation","page":"plasmo-dev/Plasmo.jl","title":"Documentation","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"The current documentation is available through GitHub Pages. Additional examples can be found in the examples folder.","category":"page"},{"location":"packages/Plasmo/#Simple-Example","page":"plasmo-dev/Plasmo.jl","title":"Simple Example","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"using Plasmo\nusing Ipopt\n\n#create an optigraph\ngraph = OptiGraph()\n\n#add nodes to an optigraph\n@optinode(graph, n1)\n@optinode(graph, n2)\n\n#add variables and constraints to nodes\n@variable(n1, 0 <= x <= 2)\n@variable(n1, 0 <= y <= 3)\n@constraint(n1, x+y <= 4)\n\n@variable(n2,x)\n@constraint(n2, exp(x) >= 2)\n\n#add linking constraints that couple nodes\n@linkconstraint(graph, n1[:x] == n2[:x])\n\n# set an optigraph objective\n@objective(graph, Min, n1[:x] + n2[:x])\n\n#optimize with Ipopt\nset_optimizer(graph, Ipopt.Optimizer)\noptimize!(graph)\n\n#Print solution values\nprintln(\"n1[:x] = \", value(n1[:x]))\nprintln(\"n2[:x] = \", value(n2[:x]))","category":"page"},{"location":"packages/Plasmo/#Acknowledgments","page":"plasmo-dev/Plasmo.jl","title":"Acknowledgments","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"This code is based on work supported by the following funding agencies:","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"U.S. Department of Energy (DOE), Office of Science, under Contract No. DE-AC02-06CH11357\nDOE Office of Electricity Delivery and Energy Reliability’s Advanced Grid Research and Development program at Argonne National Laboratory\nNational Science Foundation under award NSF-EECS-1609183 and under award CBET-1748516","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"The primary developer is Jordan Jalving (@jalving) with support from the following contributors. ","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"Victor Zavala (University of Wisconsin-Madison)\nYankai Cao (University of British Columbia)\nKibaek Kim (Argonne National Laboratory)\nSungho Shin (University of Wisconsin-Madison)","category":"page"},{"location":"packages/Plasmo/#Citing-Plasmo.jl","page":"plasmo-dev/Plasmo.jl","title":"Citing Plasmo.jl","text":"","category":"section"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"If you find Plasmo.jl useful for your work, you may cite the manuscript as:","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"@article{Jalving2022,\n title={A Graph-Based Modeling Abstraction for Optimization: Concepts and Implementation in Plasmo.jl},\n author={Jordan Jalving and Sungho Shin and Victor M. Zavala},\n journal={Mathematical Programming Computation},\n year={2022},\n volume={14},\n pages={699 - 747},\n doi={10.1007/s12532-022-00223-3}\n}","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"You can also access a freely available pre-print.","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"There is also an earlier manuscript where we presented the initial ideas behind Plasmo.jl which you can find here:","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"@article{JalvingCaoZavala2019,\nauthor = {Jalving, Jordan and Cao, Yankai and Zavala, Victor M},\njournal = {Computers {\\&} Chemical Engineering},\npages = {134--154},\ntitle = {Graph-based modeling and simulation of complex systems},\nvolume = {125},\nyear = {2019},\ndoi = {10.1016/j.compchemeng.2019.03.009}\n}","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"A pre-print of this paper can be found here","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"EditURL = \"https://github.com/jump-dev/MiniZinc.jl/blob/v0.3.12/README.md\"","category":"page"},{"location":"packages/MiniZinc/#MiniZinc.jl","page":"jump-dev/MiniZinc.jl","title":"MiniZinc.jl","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MiniZinc.jl is a wrapper for the MiniZinc constraint modeling language.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"It provides a way to write MathOptInterface models to .mzn files, and a way to interact with libminizinc.","category":"page"},{"location":"packages/MiniZinc/#Affiliation","page":"jump-dev/MiniZinc.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"This wrapper is maintained by the JuMP community and is not part of the MiniZinc project.","category":"page"},{"location":"packages/MiniZinc/#Getting-help","page":"jump-dev/MiniZinc.jl","title":"Getting help","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"If you need help, please ask a question on the JuMP community forum.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"If you have a reproducible example of a bug, please open a GitHub issue.","category":"page"},{"location":"packages/MiniZinc/#License","page":"jump-dev/MiniZinc.jl","title":"License","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MiniZinc.jl is licensed under the MIT License.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"The underlying project, MiniZinc/libminizinc, is licensed under the MPL 2.0 license.","category":"page"},{"location":"packages/MiniZinc/#Install","page":"jump-dev/MiniZinc.jl","title":"Install","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"Install MiniZinc.jl using the Julia package manager:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"import Pkg\nPkg.add(\"MiniZinc\")","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"Windows","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"On Linux and macOS, this package automatically installs libminizinc. However, we're still working out problems with the install on Windows. To use MiniZinc.jl, you'll need to manually install a copy of libminizinc from minizinc.org or compile one yourself from MiniZinc/libminizinc.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"To teach MiniZinc.jl where to look for libminizinc, set the JULIA_LIBMINIZINC_DIR environment variable. For example:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"ENV[\"JULIA_LIBMINIZINC_DIR\"] = \"C:\\\\Program Files\\\\MiniZinc\"","category":"page"},{"location":"packages/MiniZinc/#Use-with-MathOptInterface","page":"jump-dev/MiniZinc.jl","title":"Use with MathOptInterface","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MiniZinc.jl supports the constraint programming sets defined in MathOptInterface, as well as (in)equality constraints.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"The following example solves the following constraint program:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"xᵢ ∈ {1, 2, 3} ∀i=1,2,3\nzⱼ ∈ {0, 1} ∀j=1,2\nz₁ <-> x₁ != x₂\nz₂ <-> x₂ != x₃\nz₁ + z₂ = 1","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"julia> import MiniZinc\n\njulia> import MathOptInterface as MOI\n\njulia> function main()\n model = MOI.Utilities.CachingOptimizer(\n MiniZinc.Model{Int}(),\n MiniZinc.Optimizer{Int}(\"chuffed\"),\n )\n # xᵢ ∈ {1, 2, 3} ∀i=1,2,3\n x = MOI.add_variables(model, 3)\n MOI.add_constraint.(model, x, MOI.Interval(1, 3))\n MOI.add_constraint.(model, x, MOI.Integer())\n # zⱼ ∈ {0, 1} ∀j=1,2\n z = MOI.add_variables(model, 2)\n MOI.add_constraint.(model, z, MOI.ZeroOne())\n # z₁ <-> x₁ != x₂\n MOI.add_constraint(\n model,\n MOI.VectorOfVariables([z[1], x[1], x[2]]),\n MOI.Reified(MOI.AllDifferent(2)),\n )\n # z₂ <-> x₂ != x₃\n MOI.add_constraint(\n model,\n MOI.VectorOfVariables([z[2], x[2], x[3]]),\n MOI.Reified(MOI.AllDifferent(2)),\n )\n # z₁ + z₂ = 1\n MOI.add_constraint(model, 1 * z[1] + x[2], MOI.EqualTo(1))\n MOI.optimize!(model)\n x_star = MOI.get(model, MOI.VariablePrimal(), x)\n z_star = MOI.get(model, MOI.VariablePrimal(), z)\n return x_star, z_star\n end\nmain (generic function with 1 method)\n\njulia> main()\n([1, 1, 3], [0, 1])","category":"page"},{"location":"packages/MiniZinc/#Use-with-JuMP","page":"jump-dev/MiniZinc.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"You can also call MiniZinc from JuMP, using any solver that libminizinc supports. By default, MiniZinc.jl is compiled with the HiGHS MILP solver, which can be selected by passing the \"highs\" parameter to MiniZinc.Optimizer:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"using JuMP\nimport MiniZinc\nmodel = Model(() -> MiniZinc.Optimizer{Float64}(\"highs\"))\n@variable(model, 1 <= x[1:3] <= 3, Int)\n@constraint(model, x in MOI.AllDifferent(3))\n@objective(model, Max, sum(i * x[i] for i in 1:3))\noptimize!(model)\n@show value.(x)","category":"page"},{"location":"packages/MiniZinc/#MathOptInterface-API","page":"jump-dev/MiniZinc.jl","title":"MathOptInterface API","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"The MiniZinc Optimizer{T} supports the following constraints and attributes.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"List of supported objective functions:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MOI.ObjectiveFunction{MOI.ScalarAffineFunction{T}}\nMOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{T}}\nMOI.ObjectiveFunction{MOI.VariableIndex}","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"List of supported variable types:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MOI.Reals","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"List of supported constraint types:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MOI.ScalarAffineFunction{T} in MOI.EqualTo{T}\nMOI.ScalarAffineFunction{T} in MOI.GreaterThan{T}\nMOI.ScalarAffineFunction{T} in MOI.Integer\nMOI.ScalarAffineFunction{T} in MOI.Interval{T}\nMOI.ScalarAffineFunction{T} in MOI.LessThan{T}\nMOI.ScalarAffineFunction{T} in MOI.ZeroOne\nMOI.VariableIndex in MOI.EqualTo{T}\nMOI.VariableIndex in MOI.GreaterThan{T}\nMOI.VariableIndex in MOI.Integer\nMOI.VariableIndex in MOI.Interval{T}\nMOI.VariableIndex in MOI.LessThan{T}\nMOI.VariableIndex in MOI.Parameter{T}\nMOI.VariableIndex in MOI.Semicontinuous{T}\nMOI.VariableIndex in MOI.Semiinteger{T}\nMOI.VariableIndex in MOI.ZeroOne\nMOI.VectorOfVariables in MOI.AllDifferent\nMOI.VectorOfVariables in MOI.BinPacking{T}\nMOI.VectorOfVariables in MOI.Circuit\nMOI.VectorOfVariables in MOI.CountAtLeast\nMOI.VectorOfVariables in MOI.CountBelongs\nMOI.VectorOfVariables in MOI.CountDistinct\nMOI.VectorOfVariables in MOI.CountGreaterThan\nMOI.VectorOfVariables in MOI.Cumulative\nMOI.VectorOfVariables in MOI.Path\nMOI.VectorOfVariables in MOI.Table{T}","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"List of supported model attributes:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MOI.NLPBlock()\nMOI.Name()\nMOI.ObjectiveSense()","category":"page"},{"location":"packages/MiniZinc/#Options","page":"jump-dev/MiniZinc.jl","title":"Options","text":"","category":"section"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"Set options using MOI.RawOptimizerAttribute in MOI or set_attribute in JuMP.","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"MiniZinc.jl supports the following options:","category":"page"},{"location":"packages/MiniZinc/","page":"jump-dev/MiniZinc.jl","title":"jump-dev/MiniZinc.jl","text":"model_filename::String = \"\": the location at which to write out the .mzn file during optimization. This option can be helpful during debugging. If left empty, a temporary file will be used instead.\nMOI.SolutionLimit: set this option to a positive integer to return up to the limit number of solutions.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"EditURL = \"transp.jl\"","category":"page"},{"location":"tutorials/linear/transp/#The-transportation-problem","page":"The transportation problem","title":"The transportation problem","text":"","category":"section"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"This tutorial was originally contributed by Louis Luangkesorn.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"This tutorial is an adaptation of the transportation problem described in AMPL: A Modeling Language for Mathematical Programming, by R. Fourer, D.M. Gay and B.W. Kernighan.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"The purpose of this tutorial is to demonstrate how to create a JuMP model from an ad-hoc structured text file.","category":"page"},{"location":"tutorials/linear/transp/#Required-packages","page":"The transportation problem","title":"Required packages","text":"","category":"section"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"using JuMP\nimport DelimitedFiles\nimport HiGHS","category":"page"},{"location":"tutorials/linear/transp/#Formulation","page":"The transportation problem","title":"Formulation","text":"","category":"section"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"Suppose that we have a set of factories that produce pogo sticks, and a set of retail stores in which to sell them. Each factory has a maximum number of pogo sticks that it can produce, and each retail store has a demand of pogo sticks that it can sell.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"In the transportation problem, we want to choose the number of pogo sticks to make and ship from each factory to each retail store that minimizes the total shipping cost.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"Mathematically, we represent our set of factories by a set of origins i in O and our retail stores by a set of destinations j in D. The maximum supply at each factory is s_i and the demand from each retail store is d_j. The cost of shipping one pogo stick from i to j is c_ij.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"With a little effort, we can model the transportation problem as the following linear program:","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"beginaligned\nmin sum_i in O j in D c_ij x_ij \nst sum_j in D x_i j le s_i forall i in O \n sum_i in O x_i j = d_j forall j in D \n x_i j ge 0 forall i in O j in D\nendaligned","category":"page"},{"location":"tutorials/linear/transp/#Data","page":"The transportation problem","title":"Data","text":"","category":"section"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"We assume our data is in the form of a text file that has the following form. In practice, we would obtain this text file from the user as input, but for the purpose of this tutorial we're going to create it from Julia.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"open(joinpath(@__DIR__, \"transp.txt\"), \"w\") do io\n print(\n io,\n \"\"\"\n . FRA DET LAN WIN STL FRE LAF SUPPLY\n GARY 39 14 11 14 16 82 8 1400\n CLEV 27 . 12 . 26 95 17 2600\n PITT 24 14 17 13 28 99 20 2900\n DEMAND 900 1200 600 400 1700 1100 1000 0\n \"\"\",\n )\n return\nend","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"Here the rows are the origins, the columns are the destinations, and the values are the cost of shipping one pogo stick from the origin to the destination. If pogo stick cannot be transported from a source to a destination, then the value is .. The final row and final column are the demand and supply of each location respectively.","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"We didn't account for arcs which do not exist in our formulation, but we can make a small change and fix x_ij = 0 if c_ij = .","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"Our first step is to convert this text format into an appropriate Julia datastructure that we can work with. Since our data is tabular with named rows and columns, one option is JuMP's Containers.DenseAxisArray object:","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"function read_data(filename::String)\n data = DelimitedFiles.readdlm(filename)\n rows, columns = data[2:end, 1], data[1, 2:end]\n return Containers.DenseAxisArray(data[2:end, 2:end], rows, columns)\nend\n\ndata = read_data(joinpath(@__DIR__, \"transp.txt\"))","category":"page"},{"location":"tutorials/linear/transp/#JuMP-formulation","page":"The transportation problem","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"Following Design patterns for larger models, we code our JuMP model as a function which takes in an input. In this example, we print the output to stdout:","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"function solve_transportation_problem(data::Containers.DenseAxisArray)\n # Get the set of supplies and demands\n O, D = axes(data)\n # Drop the SUPPLY and DEMAND nodes from our sets\n O, D = setdiff(O, [\"DEMAND\"]), setdiff(D, [\"SUPPLY\"])\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n @variable(model, x[o in O, d in D] >= 0)\n # Remove arcs with \".\" cost by fixing them to 0.0.\n for o in O, d in D\n if data[o, d] == \".\"\n fix(x[o, d], 0.0; force = true)\n end\n end\n @objective(\n model,\n Min,\n sum(data[o, d] * x[o, d] for o in O, d in D if data[o, d] != \".\"),\n )\n @constraint(model, [o in O], sum(x[o, :]) <= data[o, \"SUPPLY\"])\n @constraint(model, [d in D], sum(x[:, d]) == data[\"DEMAND\", d])\n optimize!(model)\n @assert is_solved_and_feasible(model)\n # Pretty print the solution in the format of the input\n print(\" \", join(lpad.(D, 7, ' ')))\n for o in O\n print(\"\\n\", o)\n for d in D\n if isapprox(value(x[o, d]), 0.0; atol = 1e-6)\n print(\" .\")\n else\n print(\" \", lpad(value(x[o, d]), 6, ' '))\n end\n end\n end\n return\nend","category":"page"},{"location":"tutorials/linear/transp/#Solution","page":"The transportation problem","title":"Solution","text":"","category":"section"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"Let's solve and view the solution:","category":"page"},{"location":"tutorials/linear/transp/","page":"The transportation problem","title":"The transportation problem","text":"solve_transportation_problem(data)","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/developer/checklists.md\"","category":"page"},{"location":"moi/developer/checklists/#Checklists","page":"Checklists","title":"Checklists","text":"","category":"section"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"The purpose of this page is to collate a series of checklists for commonly performed changes to the source code of MathOptInterface.","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"In each case, copy the checklist into the description of the pull request.","category":"page"},{"location":"moi/developer/checklists/#Making-a-release","page":"Checklists","title":"Making a release","text":"","category":"section"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"Use this checklist when making a release of the MathOptInterface repository.","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"## Basic\n\n - [ ] `version` field of `Project.toml` has been updated\n - If a breaking change, increment the MAJOR field and reset others to 0\n - If adding new features, increment the MINOR field and reset PATCH to 0\n - If adding bug fixes or documentation changes, increment the PATCH field\n\n## Documentation\n\n - [ ] Add a new entry to `docs/src/changelog.md`, following existing style\n\n## Tests\n\n - [ ] The `solver-tests.yml` GitHub action does not have unexpected failures.\n To run the action, go to:\n https://github.com/jump-dev/MathOptInterface.jl/actions/workflows/solver-tests.yml\n and click \"Run workflow\"","category":"page"},{"location":"moi/developer/checklists/#Adding-a-new-set","page":"Checklists","title":"Adding a new set","text":"","category":"section"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"Use this checklist when adding a new set to the MathOptInterface repository.","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"## Basic\n\n - [ ] Add a new `AbstractScalarSet` or `AbstractVectorSet` to `src/sets.jl`\n - [ ] If `isbitstype(S) == false`, implement `Base.copy(set::S)`\n - [ ] If `isbitstype(S) == false`, implement `Base.:(==)(x::S, y::S)`\n - [ ] If an `AbstractVectorSet`, implement `dimension(set::S)`, unless the\n dimension is given by `set.dimension`.\n\n## Utilities\n\n - [ ] If an `AbstractVectorSet`, implement `Utilities.set_dot`,\n unless the dot product between two vectors in the set is equivalent to\n `LinearAlgebra.dot`\n - [ ] If an `AbstractVectorSet`, implement `Utilities.set_with_dimension` in\n `src/Utilities/matrix_of_constraints.jl`\n - [ ] Add the set to the `@model` macro at the bottom of `src/Utilities.model.jl`\n\n## Documentation\n\n - [ ] Add a docstring, which gives the mathematical definition of the set,\n along with an `## Example` block containing a `jldoctest`\n - [ ] Add the docstring to `docs/src/reference/standard_form.md`\n - [ ] Add the set to the relevant table in `docs/src/manual/standard_form.md`\n\n## Tests\n\n - [ ] Define a new `_set(::Type{S})` method in `src/Test/test_basic_constraint.jl`\n and add the name of the set to the list at the bottom of that files\n - [ ] If the set has any checks in its constructor, add tests to `test/sets.jl`\n\n## MathOptFormat\n\n - [ ] Open an issue at `https://github.com/jump-dev/MathOptFormat` to add\n support for the new set {{ replace with link to the issue }}\n\n## Optional\n\n - [ ] Implement `dual_set(::S)` and `dual_set_type(::Type{S})`\n - [ ] Add new tests to the `Test` submodule exercising your new set\n - [ ] Add new bridges to convert your set into more commonly used sets","category":"page"},{"location":"moi/developer/checklists/#Adding-a-new-bridge","page":"Checklists","title":"Adding a new bridge","text":"","category":"section"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"Use this checklist when adding a new bridge to the MathOptInterface repository.","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"The steps are mostly the same, but locations depend on whether the bridge is a Constraint, Objective, or Variable bridge. In each case below, replace XXX with the appropriate type of bridge.","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"## Basic\n\n - [ ] Create a new file in `src/Bridges/XXX/bridges`\n - [ ] Define the bridge, following existing examples. The name of the bridge\n struct must end in `Bridge`\n - [ ] Check if your bridge can be a subtype of [`MOI.Bridges.Constraint.SetMapBridge`](@ref)\n - [ ] Define a new `const` that is a `SingleBridgeOptimizer` wrapping the\n new bridge. The name of the const must be the name of the bridge, less\n the `Bridge` suffix\n - [ ] `include` the file in `src/Bridges/XXX/bridges/XXX.jl`\n - [ ] If the bridge should be enabled by default, add the bridge to\n `add_all_bridges` at the bottom of `src/Bridges/XXX/XXX.jl`\n\n## Tests\n\n - [ ] Create a new file in the appropriate subdirectory of `tests/Bridges/XXX`\n - [ ] Use `MOI.Bridges.runtests` to test various inputs and outputs of the\n bridge\n - [ ] If, after opening the pull request to add the bridge, some lines are not\n covered by the tests, add additional bridge-specific tests to cover the\n untested lines.\n\n## Documentation\n\n - [ ] Add a docstring which uses the same template as existing bridges.\n\n## Final touch\n\nIf the bridge depends on run-time values of other variables and constraints in\nthe model:\n\n - [ ] Implement `MOI.Utilities.needs_final_touch(::Bridge)`\n - [ ] Implement `MOI.Utilities.final_touch(::Bridge, ::MOI.ModelLike)`\n - [ ] Ensure that `final_touch` can be called multiple times in a row","category":"page"},{"location":"moi/developer/checklists/#Updating-MathOptFormat","page":"Checklists","title":"Updating MathOptFormat","text":"","category":"section"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"Use this checklist when updating the version of MathOptFormat.","category":"page"},{"location":"moi/developer/checklists/","page":"Checklists","title":"Checklists","text":"## Basic\n\n - [ ] The file at `src/FileFormats/MOF/mof.schema.json` is updated\n - [ ] The constant `_SUPPORTED_VERSIONS` is updated in\n `src/FileFormats/MOF/MOF.jl`\n\n## New sets\n\n - [ ] New sets are added to the `@model` in `src/FileFormats/MOF/MOF.jl`\n - [ ] New sets are added to the `@enum` in `src/FileFormats/MOF/read.jl`\n - [ ] `set_to_moi` is defined for each set in `src/FileFormats/MOF/read.jl`\n - [ ] `head_name` is defined for each set in `src/FileFormats/MOF/write.jl`\n - [ ] A new unit test calling `_test_model_equality` is aded to\n `test/FileFormats/MOF/MOF.jl`\n\n## Tests\n\n - [ ] The version field in `test/FileFormats/MOF/nlp.mof.json` is updated\n\n## Documentation\n\n - [ ] The version fields are updated in `docs/src/submodules/FileFormats/overview.md`","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"EditURL = \"https://github.com/jump-dev/SDPLR.jl/blob/v0.1.0/README.md\"","category":"page"},{"location":"packages/SDPLR/#SDPLR","page":"jump-dev/SDPLR.jl","title":"SDPLR","text":"","category":"section"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"(Image: Build Status) (Image: codecov)","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"SDPLR.jl is a wrapper for the SDPLR semidefinite programming solver.","category":"page"},{"location":"packages/SDPLR/#License","page":"jump-dev/SDPLR.jl","title":"License","text":"","category":"section"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"SDPLR.jl is licensed under the MIT License.","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"The underlying solver, SDPLR, is licensed under the GPL v2 license.","category":"page"},{"location":"packages/SDPLR/#Installation","page":"jump-dev/SDPLR.jl","title":"Installation","text":"","category":"section"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"Install SDPLR.jl using Pkg.add:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"import Pkg\nPkg.add(\"SDPLR\")","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"In addition to installing the SDPLR.jl package, this will also download and install the SDPLR binaries. You do not need to install SDPLR separately.","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"To use a custom binary, read the Custom solver binaries section of the JuMP documentation.","category":"page"},{"location":"packages/SDPLR/#Use-with-JuMP","page":"jump-dev/SDPLR.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"To use SDPLR with JuMP, use SDPLR.Optimizer:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"using JuMP, SDPLR\nmodel = Model(SDPLR.Optimizer)","category":"page"},{"location":"packages/SDPLR/#MathOptInterface-API","page":"jump-dev/SDPLR.jl","title":"MathOptInterface API","text":"","category":"section"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"The SDPLR optimizer supports the following constraints and attributes.","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"List of supported objective functions:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"List of supported variable types:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"MOI.Nonnegatives\nMOI.PositiveSemidefiniteConeTriangle","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"List of supported constraint types:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"MOI.ScalarAffineFunction{Float64} in MOI.EqualTo{Float64}","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"List of supported model attributes:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"MOI.ObjectiveSense()","category":"page"},{"location":"packages/SDPLR/#Attributes","page":"jump-dev/SDPLR.jl","title":"Attributes","text":"","category":"section"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"The algorithm is parametrized by the attributes that can be used both with JuMP.set_attributes and JuMP.get_attributes and have the following types and default values:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"rho_f::Cdouble = 1.0e-5\nrho_c::Cdouble = 1.0e-1\nsigmafac::Cdouble = 2.0\nrankreduce::Csize_t = 0\ntimelim::Csize_t = 3600\nprintlevel::Csize_t = 1\ndthresh_dim::Csize_t = 10\ndthresh_dens::Cdouble = 0.75\nnumbfgsvecs::Csize_t = 4\nrankredtol::Cdouble = 2.2204460492503131e-16\ngaptol::Cdouble = 1.0e-3\ncheckbd::Cptrdiff_t = -1\ntypebd::Cptrdiff_t = 1\nmaxrank::Function = default_maxrank","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"The following attributes can be also be used both with JuMP.set_attributes and JuMP.get_attributes, but they are also modified by optimize!:","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"majiter\niter\nlambdaupdate\ntotaltime\nsigma","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"When they are set, it provides the initial value of the algorithm. With get, they provide the value at the end of the algorithm. totaltime is the total time in second. For the other attributes, their meaning is best described by the following pseudo-code.","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"Given values of R, lambda and sigma, let vio = [dot(A[i], R * R') - b[i]) for i in 1:m] (vio[0] is dot(C, R * R') in the C implementation, but we ignore this entry here), val = dot(C, R * R') - dot(vio, lambda) + sigma/2 * norm(vio)^2, y = -lambda - sigma * vio, S = C + sum(A[i] * y[i] for i in 1:m) and the gradient is G = 2S * R. Note that norm(G) used in SDPLR when comparing with rho_c which has a 2-scaling difference from norm(S * R) used in the paper.","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"The SDPLR solvers implements the following algorithm.","category":"page"},{"location":"packages/SDPLR/","page":"jump-dev/SDPLR.jl","title":"jump-dev/SDPLR.jl","text":"sigma = inv(sum(size(A[i], 1) for i in 1:m))\norigval = val\nwhile majiter++ < 100_000\n lambdaupdate = 0\n localiter = 100\n while localiter > 10\n lambdaupdate += 1\n localiter = 0\n if norm(G) / (norm(C) + 1) <= rho_c / sigma\n break\n end\n while norm(G) / (norm(C) + 1) - rho_c / sigma > eps()\n localiter += 1\n iter += 1\n D = lbfgs(G)\n R += linesearch(D) * D\n if norm(vio) / (norm(b) + 1) <= rho_f || totaltime >= timelim || iter >= 10_000_000\n return\n end\n end\n lambda -= sigma * vio\n end\n if val - 1e10 * abs(origval) > eps()\n return\n end\n if norm(vio) / (norm(b) + 1) <= rho_f || totaltime >= timelim || iter >= 10_000_000\n return\n end\n while norm(G) / (norm(C) + 1) > rho_c / sigma\n sigma *= 2\n end\n lambdaupdate = 0\nend","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"DocTestSetup = quote\n using JuMP\nend","category":"page"},{"location":"manual/expressions/#Expressions","page":"Expressions","title":"Expressions","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"JuMP has three types of expressions: affine, quadratic, and nonlinear. These expressions can be inserted into constraints or into the objective. This is particularly useful if an expression is used in multiple places in the model.","category":"page"},{"location":"manual/expressions/#Affine-expressions","page":"Expressions","title":"Affine expressions","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"There are four ways of constructing an affine expression in JuMP: with the @expression macro, with operator overloading, with the AffExpr constructor, and with add_to_expression!.","category":"page"},{"location":"manual/expressions/#Macros","page":"Expressions","title":"Macros","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"The recommended way to create an affine expression is via the @expression macro.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = @expression(model, 2x + y - 1)\n2 x + y - 1","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"This expression can be used in the objective or added to a constraint. For example:","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> @objective(model, Min, 2 * ex - 1)\n4 x + 2 y - 3\n\njulia> objective_function(model)\n4 x + 2 y - 3","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Just like variables and constraints, named expressions can also be created. For example","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x[i = 1:3]);\n\njulia> @expression(model, expr[i = 1:3], i * sum(x[j] for j in i:3));\n\njulia> expr\n3-element Vector{AffExpr}:\n x[1] + x[2] + x[3]\n 2 x[2] + 2 x[3]\n 3 x[3]","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"tip: Tip\nYou can read more about containers in the Containers section.","category":"page"},{"location":"manual/expressions/#Operator-overloading","page":"Expressions","title":"Operator overloading","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Expressions can also be created without macros. However, note that in some cases, this can be much slower that constructing an expression using macros.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = 2x + y - 1\n2 x + y - 1","category":"page"},{"location":"manual/expressions/#Constructors","page":"Expressions","title":"Constructors","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"A third way to create an affine expression is by the AffExpr constructor. The first argument is the constant term, and the remaining arguments are variable-coefficient pairs.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = AffExpr(-1.0, x => 2.0, y => 1.0)\n2 x + y - 1","category":"page"},{"location":"manual/expressions/#add_to_expression!","page":"Expressions","title":"add_to_expression!","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"The fourth way to create an affine expression is by using add_to_expression!. Compared to the operator overloading method, this approach is faster because it avoids constructing temporary objects. The @expression macro uses add_to_expression! behind-the-scenes.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = AffExpr(-1.0)\n-1\n\njulia> add_to_expression!(ex, 2.0, x)\n2 x - 1\n\njulia> add_to_expression!(ex, 1.0, y)\n2 x + y - 1","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"warning: Warning\nRead the section Initializing arrays for some cases to be careful about when using add_to_expression!.","category":"page"},{"location":"manual/expressions/#Removing-zero-terms","page":"Expressions","title":"Removing zero terms","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Use drop_zeros! to remove terms from an affine expression with a 0 coefficient.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @expression(model, ex, x + 1 - x)\n0 x + 1\n\njulia> drop_zeros!(ex)\n\njulia> ex\n1","category":"page"},{"location":"manual/expressions/#Coefficients","page":"Expressions","title":"Coefficients","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Use coefficient to return the coefficient associated with a variable in an affine expression.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> @expression(model, ex, 2x + 1)\n2 x + 1\n\njulia> coefficient(ex, x)\n2.0\n\njulia> coefficient(ex, y)\n0.0","category":"page"},{"location":"manual/expressions/#Quadratic-expressions","page":"Expressions","title":"Quadratic expressions","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Like affine expressions, there are four ways of constructing a quadratic expression in JuMP: macros, operator overloading, constructors, and add_to_expression!.","category":"page"},{"location":"manual/expressions/#Macros-2","page":"Expressions","title":"Macros","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"The @expression macro can be used to create quadratic expressions by including quadratic terms.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = @expression(model, x^2 + 2 * x * y + y^2 + x + y - 1)\nx² + 2 x*y + y² + x + y - 1","category":"page"},{"location":"manual/expressions/#Operator-overloading-2","page":"Expressions","title":"Operator overloading","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Operator overloading can also be used to create quadratic expressions. The same performance warning (discussed in the affine expression section) applies.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = x^2 + 2 * x * y + y^2 + x + y - 1\nx² + 2 x*y + y² + x + y - 1","category":"page"},{"location":"manual/expressions/#Constructors-2","page":"Expressions","title":"Constructors","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Quadratic expressions can also be created using the QuadExpr constructor. The first argument is an affine expression, and the remaining arguments are pairs, where the first term is a JuMP.UnorderedPair and the second term is the coefficient.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> aff_expr = AffExpr(-1.0, x => 1.0, y => 1.0)\nx + y - 1\n\njulia> quad_expr = QuadExpr(\n aff_expr,\n UnorderedPair(x, x) => 1.0,\n UnorderedPair(x, y) => 2.0,\n UnorderedPair(y, y) => 1.0,\n )\nx² + 2 x*y + y² + x + y - 1","category":"page"},{"location":"manual/expressions/#add_to_expression!-2","page":"Expressions","title":"add_to_expression!","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Finally, add_to_expression! can also be used to add quadratic terms.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> ex = QuadExpr(x + y - 1.0)\nx + y - 1\n\njulia> add_to_expression!(ex, 1.0, x, x)\nx² + x + y - 1\n\njulia> add_to_expression!(ex, 2.0, x, y)\nx² + 2 x*y + x + y - 1\n\njulia> add_to_expression!(ex, 1.0, y, y)\nx² + 2 x*y + y² + x + y - 1","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"warning: Warning\nRead the section Initializing arrays for some cases to be careful about when using add_to_expression!.","category":"page"},{"location":"manual/expressions/#Removing-zero-terms-2","page":"Expressions","title":"Removing zero terms","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Use drop_zeros! to remove terms from a quadratic expression with a 0 coefficient.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @expression(model, ex, x^2 + x + 1 - x^2)\n0 x² + x + 1\n\njulia> drop_zeros!(ex)\n\njulia> ex\nx + 1","category":"page"},{"location":"manual/expressions/#Coefficients-2","page":"Expressions","title":"Coefficients","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Use coefficient to return the coefficient associated with a pair of variables in a quadratic expression.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> @expression(model, ex, 2*x*y + 3*x)\n2 x*y + 3 x\n\njulia> coefficient(ex, x, y)\n2.0\n\njulia> coefficient(ex, x, x)\n0.0\n\njulia> coefficient(ex, y, x)\n2.0\n\njulia> coefficient(ex, x)\n3.0","category":"page"},{"location":"manual/expressions/#Nonlinear-expressions","page":"Expressions","title":"Nonlinear expressions","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Nonlinear expressions in JuMP are represented by a NonlinearExpr object. See Nonlinear expressions in detail for more details.","category":"page"},{"location":"manual/expressions/#Initializing-arrays","page":"Expressions","title":"Initializing arrays","text":"","category":"section"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"JuMP implements zero(AffExpr) and one(AffExpr) to support various functions in LinearAlgebra (for example, accessing the off-diagonal of a Diagonal matrix).","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> zero(AffExpr)\n0\n\njulia> one(AffExpr)\n1","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"However, this can result in a subtle bug if you call add_to_expression! or the MutableArithmetics API on an element created by zeros or ones:","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> x = zeros(AffExpr, 2)\n2-element Vector{AffExpr}:\n 0\n 0\n\njulia> add_to_expression!(x[1], 1.1)\n1.1\n\njulia> x\n2-element Vector{AffExpr}:\n 1.1\n 1.1","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Notice how we modified x[1], but we also changed x[2]!","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"This happened because zeros(AffExpr, 2) calls zero(AffExpr) once to obtain a zero element, and then creates an appropriately sized array filled with the same element.","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"This also happens with broadcasting calls containing a conversion of 0 or 1:","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> x = Vector{AffExpr}(undef, 2)\n2-element Vector{AffExpr}:\n #undef\n #undef\n\njulia> x .= 0\n2-element Vector{AffExpr}:\n 0\n 0\n\njulia> add_to_expression!(x[1], 1.1)\n1.1\n\njulia> x\n2-element Vector{AffExpr}:\n 1.1\n 1.1","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"The recommended way to create an array of empty expressions is as follows:","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> x = Vector{AffExpr}(undef, 2)\n2-element Vector{AffExpr}:\n #undef\n #undef\n\njulia> for i in eachindex(x)\n x[i] = AffExpr(0.0)\n end\n\njulia> add_to_expression!(x[1], 1.1)\n1.1\n\njulia> x\n2-element Vector{AffExpr}:\n 1.1\n 0","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Alternatively, use non-mutating operation to avoid updating x[1] in-place:","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"julia> x = zeros(AffExpr, 2)\n2-element Vector{AffExpr}:\n 0\n 0\n\njulia> x[1] += 1.1\n1.1\n\njulia> x\n2-element Vector{AffExpr}:\n 1.1\n 0","category":"page"},{"location":"manual/expressions/","page":"Expressions","title":"Expressions","text":"Note that for large expressions this will be slower due to the allocation of additional temporary objects.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"EditURL = \"factory_schedule.jl\"","category":"page"},{"location":"tutorials/linear/factory_schedule/#The-factory-schedule-example","page":"The factory schedule example","title":"The factory schedule example","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"This tutorial was originally contributed by @Crghilardi.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"This tutorial is a Julia translation of Part 5 from Introduction to Linear Programming with Python.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"The purpose of this tutorial is to demonstrate how to use DataFrames and delimited files, and to structure your code that is robust to infeasibilities and permits running with different datasets.","category":"page"},{"location":"tutorials/linear/factory_schedule/#Required-packages","page":"The factory schedule example","title":"Required packages","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"This tutorial requires the following packages:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"using JuMP\nimport CSV\nimport DataFrames\nimport HiGHS\nimport StatsPlots","category":"page"},{"location":"tutorials/linear/factory_schedule/#Formulation","page":"The factory schedule example","title":"Formulation","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"The Factory Scheduling Problem assumes we are optimizing the production of a good from factories f in F over the course of 12 months m in M.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"If a factory f runs during a month m, a fixed cost of a_f is incurred, the factory must produce x_mf units that is within some minimum and maximum production levels l_f and u_f respectively, and each unit of production incurs a variable cost c_f. Otherwise, the factory can be shut for the month with zero production and no fixed-cost is incurred. We denote the run/not-run decision by z_mf in 0 1, where z_mf is 1 if factory f runs in month m. The factory must produce enough units to satisfy demand d_m.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"With a little effort, we can formulate our problem as the following linear program:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"beginaligned\nmin sumlimits_f in F m in M a_f z_mf + c_f x_mf \ntextst x_mf le u_f z_mf forall f in F m in M \n x_mf ge l_f z_mf forall f in F m in M \n sumlimits_fin F x_mf = d_m forall f in F m in M \n z_mf in 0 1 forall f in F m in M\nendaligned","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"However, this formulation has a problem: if demand is too high, we may be unable to satisfy the demand constraint, and the problem will be infeasible.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"tip: Tip\nWhen modeling, consider ways to formulate your model such that it always has a feasible solution. This greatly simplifies debugging data errors that would otherwise result in an infeasible solution. In practice, most practical decisions have a feasible solution. In our case, we could satisfy demand (at a high cost) by buying replacement items for the buyer, or running the factories in overtime to make up the difference.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"We can improve our model by adding a new variable, delta_m, which represents the quantity of unmet demand in each month m. We penalize delta_m by an arbitrarily large value of $10,000/unit in the objective.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"beginaligned\nmin sumlimits_f in F m in M a_f z_mf + c_f x_mf + sumlimits_m in M10000 delta_m \ntextst x_mf le u_f z_mf forall f in F m in M \n x_mf ge l_f z_mf forall f in F m in M \n sumlimits_fin F x_mf - delta_m = d_m forall f in F m in M \n z_mf in 0 1 forall f in F m in M \n delta_m ge 0 forall m in M\nendaligned","category":"page"},{"location":"tutorials/linear/factory_schedule/#Data","page":"The factory schedule example","title":"Data","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"The JuMP GitHub repository contains two text files with the data we need for this tutorial.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"The first file contains a dataset of our factories, A and B, with their production and cost levels for each month. For the documentation, the file is located at:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"factories_filename = joinpath(@__DIR__, \"factory_schedule_factories.txt\");\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"To run locally, download factory_schedule_factories.txt and update factories_filename appropriately.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"The file has the following contents:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"print(read(factories_filename, String))","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"We use the CSV and DataFrames packages to read it into Julia:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"factory_df = CSV.read(\n factories_filename,\n DataFrames.DataFrame;\n delim = ' ',\n ignorerepeated = true,\n)","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"The second file contains the demand data by month:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"demand_filename = joinpath(@__DIR__, \"factory_schedule_demand.txt\");\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"To run locally, download factory_schedule_demand.txt and update demand_filename appropriately.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"demand_df = CSV.read(\n demand_filename,\n DataFrames.DataFrame;\n delim = ' ',\n ignorerepeated = true,\n)","category":"page"},{"location":"tutorials/linear/factory_schedule/#Data-validation","page":"The factory schedule example","title":"Data validation","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Before moving on, it's always good practice to validate the data you read from external sources. The more effort you spend here, the fewer issues you will have later. The following function contains a few simple checks, but we could add more. For example, you might want to check that none of the values are too large (or too small), which might indicate a typo or a unit conversion issue (perhaps the variable costs are in $/1000 units instead of $/unit).","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"function valiate_data(\n demand_df::DataFrames.DataFrame,\n factory_df::DataFrames.DataFrame,\n)\n # Minimum production must not exceed maximum production.\n @assert all(factory_df.min_production .<= factory_df.max_production)\n # Demand, minimum production, fixed costs, and variable costs must all be\n # non-negative.\n @assert all(demand_df.demand .>= 0)\n @assert all(factory_df.min_production .>= 0)\n @assert all(factory_df.fixed_cost .>= 0)\n @assert all(factory_df.variable_cost .>= 0)\n return\nend\n\nvaliate_data(demand_df, factory_df)","category":"page"},{"location":"tutorials/linear/factory_schedule/#JuMP-formulation","page":"The factory schedule example","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Next, we need to code our JuMP formulation. As shown in Design patterns for larger models, it's always good practice to code your model in a function that accepts well-defined input and returns well-defined output.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"function solve_factory_scheduling(\n demand_df::DataFrames.DataFrame,\n factory_df::DataFrames.DataFrame,\n)\n # Even though we validated the data above, it's good practice to do it here\n # too.\n valiate_data(demand_df, factory_df)\n months, factories = unique(factory_df.month), unique(factory_df.factory)\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n @variable(model, status[months, factories], Bin)\n @variable(model, production[months, factories], Int)\n @variable(model, unmet_demand[months] >= 0)\n # We use `eachrow` to loop through the rows of the dataframe and add the\n # relevant constraints.\n for r in eachrow(factory_df)\n m, f = r.month, r.factory\n @constraint(model, production[m, f] <= r.max_production * status[m, f])\n @constraint(model, production[m, f] >= r.min_production * status[m, f])\n end\n @constraint(\n model,\n [r in eachrow(demand_df)],\n sum(production[r.month, :]) + unmet_demand[r.month] == r.demand,\n )\n @objective(\n model,\n Min,\n 10_000 * sum(unmet_demand) + sum(\n r.fixed_cost * status[r.month, r.factory] +\n r.variable_cost * production[r.month, r.factory] for\n r in eachrow(factory_df)\n )\n )\n optimize!(model)\n @assert is_solved_and_feasible(model)\n schedules = Dict{Symbol,Vector{Float64}}(\n Symbol(f) => value.(production[:, f]) for f in factories\n )\n schedules[:unmet_demand] = value.(unmet_demand)\n return (\n termination_status = termination_status(model),\n cost = objective_value(model),\n # This `select` statement re-orders the columns in the DataFrame.\n schedules = DataFrames.select(\n DataFrames.DataFrame(schedules),\n [:unmet_demand, :A, :B],\n ),\n )\nend","category":"page"},{"location":"tutorials/linear/factory_schedule/#Solution","page":"The factory schedule example","title":"Solution","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Now we can call our solve_factory_scheduling function using the data we read in above.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"solution = solve_factory_scheduling(demand_df, factory_df);\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Let's see what solution contains:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"solution.termination_status","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"solution.cost","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"solution.schedules","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"These schedules will be easier to visualize as a graph:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"StatsPlots.groupedbar(\n Matrix(solution.schedules);\n bar_position = :stack,\n labels = [\"unmet demand\" \"A\" \"B\"],\n xlabel = \"Month\",\n ylabel = \"Production\",\n legend = :topleft,\n color = [\"#20326c\" \"#4063d8\" \"#a0b1ec\"],\n)","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Note that we don't have any unmet demand.","category":"page"},{"location":"tutorials/linear/factory_schedule/#What-happens-if-demand-increases?","page":"The factory schedule example","title":"What happens if demand increases?","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Let's run an experiment by increasing the demand by 50% in all time periods:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"demand_df.demand .*= 1.5","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Now we resolve the problem:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"high_demand_solution = solve_factory_scheduling(demand_df, factory_df);\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"and visualize the solution:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"StatsPlots.groupedbar(\n Matrix(high_demand_solution.schedules);\n bar_position = :stack,\n labels = [\"unmet demand\" \"A\" \"B\"],\n xlabel = \"Month\",\n ylabel = \"Production\",\n legend = :topleft,\n color = [\"#20326c\" \"#4063d8\" \"#a0b1ec\"],\n)","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Uh oh, we can't satisfy all of the demand.","category":"page"},{"location":"tutorials/linear/factory_schedule/#How-sensitive-is-the-solution-to-changes-in-variable-cost?","page":"The factory schedule example","title":"How sensitive is the solution to changes in variable cost?","text":"","category":"section"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Let's run another experiment, this time seeing how the optimal objective value changes as we vary the variable costs of each factory.","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"First though, let's reset the demand to it's original level:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"demand_df.demand ./= 1.5;\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"For our experiment, we're going to scale the variable costs of both factories by a set of values from 0.0 to 1.5:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"scale_factors = 0:0.1:1.5","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"At a high level, we're going to loop over the scale factors for A, then the scale factors for B, rescale the input data, call our solve_factory_scheduling example, and then store the optimal objective value in the following cost matrix:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"cost = zeros(length(scale_factors), length(scale_factors));\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Because we're modifying factory_df in-place, we need to store the original variable costs in a new column:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"factory_df[!, :old_variable_cost] = copy(factory_df.variable_cost);\nnothing #hide","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Then, we need a function to scale the :variable_cost column for a particular factory by a value scale:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"function scale_variable_cost(df, factory, scale)\n rows = df.factory .== factory\n df[rows, :variable_cost] .=\n round.(Int, df[rows, :old_variable_cost] .* scale)\n return\nend","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Our experiment is just a nested for-loop, modifying A and B and storing the cost:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"for (j, a) in enumerate(scale_factors)\n scale_variable_cost(factory_df, \"A\", a)\n for (i, b) in enumerate(scale_factors)\n scale_variable_cost(factory_df, \"B\", b)\n cost[i, j] = solve_factory_scheduling(demand_df, factory_df).cost\n end\nend","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"Let's visualize the cost matrix:","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"StatsPlots.contour(\n scale_factors,\n scale_factors,\n cost;\n xlabel = \"Scale of factory A\",\n ylabel = \"Scale of factory B\",\n)","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"What can you infer from the solution?","category":"page"},{"location":"tutorials/linear/factory_schedule/","page":"The factory schedule example","title":"The factory schedule example","text":"info: Info\nThe Power Systems tutorial explains a number of other ways you can structure a problem to perform a parametric analysis of the solution. In particular, you can use in-place modification to reduce the time it takes to build and solve the resulting models.","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"EditURL = \"changelog.md\"","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"CurrentModule = JuMP","category":"page"},{"location":"release_notes/#Release-notes","page":"Release notes","title":"Release notes","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.","category":"page"},{"location":"release_notes/#[Version-1.23.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.23.2)-(September-13,-2024)","page":"Release notes","title":"Version 1.23.2 (September 13, 2024)","text":"","category":"section"},{"location":"release_notes/#Fixed","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed an illegal simplification in MA.operate!! for NonlinearExpr (#3826)","category":"page"},{"location":"release_notes/#Other","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Rolling horizon problems tutorial (#3815)\nAdded more tests for shapes and dual shapes (#3816)\nAdded more packages to extension-tests.yml (#3817) (#3818)\nRemoved an unnecessary test(#3819)\nDocumentation improvements (#3820) (#3822) (#3823)\nAdded PiecewiseLinearOpt.jl to the docs (#3824)","category":"page"},{"location":"release_notes/#[Version-1.23.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.23.1)-(August-30,-2024)","page":"Release notes","title":"Version 1.23.1 (August 30, 2024)","text":"","category":"section"},{"location":"release_notes/#Fixed-2","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug with indicator constraints and the in set syntax (#3813)","category":"page"},{"location":"release_notes/#Other-2","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Updated packages in documentation (#3807)\nUpdated the transitioning from MATLAB tutorial (#3809)\nAdd tutorial Performance problems with sum-if formulations (#3810)","category":"page"},{"location":"release_notes/#[Version-1.23.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.23.0)-(August-13,-2024)","page":"Release notes","title":"Version 1.23.0 (August 13, 2024)","text":"","category":"section"},{"location":"release_notes/#Added","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added set inequality syntax for matrices (#3766)\nImproved matrix inequality support (#3778) (#3805)","category":"page"},{"location":"release_notes/#Fixed-3","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a method for calling value on a ::Number (#3776)\nFixed querying dual of Symmetric and Hermitian equality constraints (#3797)\nFixed read_from_file for coefficient types other than Float64 (#3801)","category":"page"},{"location":"release_notes/#Other-3","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Documentation improvements\nFixed missing character in installation instructions (#3777)\nAdded a section of querying the Jacobian (#3779)\nClarify that SCIP does not support lazy constraints (#3784)\nFixed typo in knapsack.jl (#3792)\nAdded a warning to docs about tolerances in Bin and Int variables (#3794)\nClarify where to type installation commands (#3795)\nImprove error message for common incorrect syntax in constraint macro (#3781)\nChanged show(::IO, ::GenericModel) to a more informative tree structure (#3803)","category":"page"},{"location":"release_notes/#[Version-1.22.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.22.2)-(June-17,-2024)","page":"Release notes","title":"Version 1.22.2 (June 17, 2024)","text":"","category":"section"},{"location":"release_notes/#Fixed-4","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed printing to omit terms when printing a large array of expressions (#3759)\nFixed bug in printing when show is called on an invalid variable or constraint (#3763)","category":"page"},{"location":"release_notes/#Other-4","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved error message for unsupported kwargs in variable macro (#3751)\nImproved error message for unsupported container syntax like x[A][B] (#3756)\nDocstring improvements (#3758), (#3760), (#3761), (#3767)\nAdded warning to documentation about Y <= X, Set() syntax (#3769)\nWork-around change on nightly (#3753), (#3754)\nImproved printing of symmetric matrices when used in constraints (#3768)\nFixed a test for upcoming printing change in MOI (#3772)\nUpdated should_i_use.md (#3773)","category":"page"},{"location":"release_notes/#[Version-1.22.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.22.1)-(May-17,-2024)","page":"Release notes","title":"Version 1.22.1 (May 17, 2024)","text":"","category":"section"},{"location":"release_notes/#Fixed-5","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed bug including non-.jl files in src/macros.jl (#3747)","category":"page"},{"location":"release_notes/#Other-5","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added DSDP to the list of supported solvers (#3745)\nUpdated YALMIP migration guide (#3748)","category":"page"},{"location":"release_notes/#[Version-1.22.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.22.0)-(May-12,-2024)","page":"Release notes","title":"Version 1.22.0 (May 12, 2024)","text":"","category":"section"},{"location":"release_notes/#Added-2","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Base.complex(r, i) where r and i may be real-valued variables or affine or quadratic expressions (#3734)\nAdded @force_nonlinear for controlling when affine and quadratic expressions are instead parsed as nonlinear expressions. This can be useful for advanced users in a limited set of circumstances. (#3732)\nAdded support for returning the variable coefficients of a vector-valued constraint via normalized_coefficient. In addition, set_normalized_coefficients has been softly deprecated (no warning is thrown and old code will still work for all future 1.X releases of JuMP) in favor of set_normalized_coefficient. This change was made to unify how we get and set variable coefficients. (#3743)","category":"page"},{"location":"release_notes/#Fixed-6","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed missing promote_operation method that resulted in slow code (#3730)\nImproved performance of getindex for Containers.DenseAxisArray (#3731)\nFixed the error message when the legacy nonlinear API is mixed with the new nonlinear API. In particular, we now uniformly throw an error message when unexpected objects occur in nonlinear expressions. (#3741)","category":"page"},{"location":"release_notes/#Other-6","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Updated documentation (#3727), (#3728), (#3739)\nUpdated versions in GitHub actions (#3735)","category":"page"},{"location":"release_notes/#[Version-1.21.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.21.1)-(April-11,-2024)","page":"Release notes","title":"Version 1.21.1 (April 11, 2024)","text":"","category":"section"},{"location":"release_notes/#Fixed-7","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed behavior of complex-value related functions like real, imag, conj and abs2 when called on GenericNonlinearExpr. This fixes a method error when calling x' where x is an array of nonlinear expressions. As a related consequence, we now always error when creating nonlinear expressions with complex components. Previously, only some constructors were checked for complex expressionns. (#3724)","category":"page"},{"location":"release_notes/#Other-7","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Documentation improvements (#3719) (#3720) (#3721) (#3722)","category":"page"},{"location":"release_notes/#[Version-1.21.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.21.0)-(March-31,-2024)","page":"Release notes","title":"Version 1.21.0 (March 31, 2024)","text":"","category":"section"},{"location":"release_notes/#Added-3","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for matrix inequality constraints with the HermitianPSDCone (#3705)\nAdded batched modification methods for set_normalized_rhs, set_objective_coefficient and set_normalized_coefficient. Using these methods can be more efficient for some solvers (#3716)\nAdded the private constant _CONSTRAINT_LIMIT_FOR_PRINTING, which controls how many constraints are printed to the screen during print(model). The main purpose of this is to prevent large quantities of text being printed when print(model) is accidentally called on a large model. (#3686)","category":"page"},{"location":"release_notes/#Fixed-8","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Changed Containers.SparseAxisArray to use an OrderedDict as the backing data structure. Iterating over the elements in a SparseAxisArray now iterates in the order that the elements were created. Previously, the order was undefined behavior. (#3681)\nFixed complex variables for non-Float64 coefficient types (#3691)\nFixed LinearAlgebra.hermitan(::AbstractJuMPScalar) (#3693)\nFixed multiplying real scalar by Hermitian matrix (#3695)","category":"page"},{"location":"release_notes/#Other-8","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Documentation improvements (#3679) (#3683) (#3702) (#3703) (#3706) (#3696) (#3708) (#3709) (#3711)\nAdded new tutorials:\nBasis matrices (#3675)\nTransitioning from MATLAB (#3698)\nAutomatic differentiation of user-defined operators (#3713)\nUpdated versions and compat bounds (#3687) (#3707) (#3717)","category":"page"},{"location":"release_notes/#[Version-1.20.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.20.0)-(February-15,-2024)","page":"Release notes","title":"Version 1.20.0 (February 15, 2024)","text":"","category":"section"},{"location":"release_notes/#Added-4","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added is_solved_and_feasible (#3668)\nAdded support for MOI.ModelLike as the optimizer (#3667)","category":"page"},{"location":"release_notes/#Fixed-9","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed compat of DimensionalData (#3666)\nFixed convert(::Type{NonlinearExpr}, ::Number)(#3672)","category":"page"},{"location":"release_notes/#Other-9","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Optim to list of solvers (#3624)\nImproved linking within documentation (#3669)","category":"page"},{"location":"release_notes/#[Version-1.19.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.19.0)-(February-1,-2024)","page":"Release notes","title":"Version 1.19.0 (February 1, 2024)","text":"","category":"section"},{"location":"release_notes/#Added-5","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for modifying quadratic coefficients (#3658)","category":"page"},{"location":"release_notes/#Fixed-10","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed short circuiting of && and || in macros (#3655)","category":"page"},{"location":"release_notes/#Other-10","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added SDPLR to list of solvers (#3644)\nAdded new roadmap items (#3645)\nFixed vale.sh version (#3650)\nImprove error messages in macros (#3653)\nRefactoring of set_normalized_coefficient (#3660) (#3661)\nUpdate docs/packages.toml (#3662)","category":"page"},{"location":"release_notes/#[Version-1.18.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.18.1)-(January-6,-2024)","page":"Release notes","title":"Version 1.18.1 (January 6, 2024)","text":"","category":"section"},{"location":"release_notes/#Fixed-11","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed escaping of the set keyword in @variable (#3647)","category":"page"},{"location":"release_notes/#[Version-1.18.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.18.0)-(January-2,-2024)","page":"Release notes","title":"Version 1.18.0 (January 2, 2024)","text":"","category":"section"},{"location":"release_notes/#Added-6","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"This release includes a large refactoring of the macro code that closes a roadmap item (#3629) Contributing pull requests include (#3600), (#3603), (#3606), (#3607), (#3610), (#3611), (#3612), (#3613), (#3614), (#3615), (#3617), (#3618), (#3619), (#3620), (#3621), (#3631), (#3632), (#3633)","category":"page"},{"location":"release_notes/#Fixed-12","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed error for unsupported objective sense (#3601)\nFixed text/latex printing of GenericNonlinearExpr (#3609)\nFixed compat bounds of stdlib packages (#3626)\nFixed a bug that can accidentally modify the user's expressions in a macro (#3639)\nFixed a bug converting AffExpr to GenericNonlinearExpr (#3642)","category":"page"},{"location":"release_notes/#Other-11","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added DisjunctiveProgrammingto extension-tests (#3597)\nAdded DisjunctiveProgrammingto docs (#3598)\nAdded DocumenterCitations to the docs (#3596), (#3630)\nMigrate from SnoopPrecompile to PrecompileTools (#3608)\nMinor documentation updates (#3623), (#3628), (#3635), (#3640), (#3643)","category":"page"},{"location":"release_notes/#[Version-1.17.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.17.0)-(December-4,-2023)","page":"Release notes","title":"Version 1.17.0 (December 4, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-7","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added start_value, lower_bound, and upper_bound support for GenericAffExpr that are equivalent to a single GenericVariableRef (#3551)\nAdded SkipModelConvertScalarSetWrapper which is useful for extensions looking to avoid model_convert (#3552) (#3592)\nAdded lp_matrix_data (#3573) (#3591)","category":"page"},{"location":"release_notes/#Fixed-13","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed variable_ref_type for unsupported types (#3556)\nFixed convert type of constraint starting values (#3571)\nFixed various methods to support AbstractJuMPScalar with Distances.jl (#3583)\nFixed eachindex for multiple arguments of Containers.DenseAxisArray and Containers.SparseAxisArray (#3587)\nExpressions with more than 60 terms now print in truncated form. This prevents large expressions from being accidentally printed to terminal or IJulia output (#3575)\nFixed a type instability in set_objective_coefficient (#3590)\nVarious fixes to the documentation (#3593) (#3595)","category":"page"},{"location":"release_notes/#Other-12","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved error messages for:\nAddition and subtraction between a matrix and a scalar (#3557) (#3558)\nVariables with non-constant bounds (#3583)\nInvalid indicator constraints (#3584)\nAdded new solvers to the documentation:\nEAGO.jl (#3560) (#3561)\nManopt.jl (#3568)\nPercival.jl (#3567)\nAdded new tutorials:\nApproximating nonlinear functions (#3563)\nExample: classification problems (#3569)\nImproved documentation for:\nSemicontinuous and Semiinteger variables (#3562)\nSOS1 and SOS2 (#3565)\nstart_value of HermitianPSDCone (#3564)\nFunction tracing (#3570)\nNonlinear operators with vector arguments (#3577)\nIndicator constraints (#3582)\nUpdated package compat bounds (#3578)","category":"page"},{"location":"release_notes/#[Version-1.16.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.16.0)-(October-24,-2023)","page":"Release notes","title":"Version 1.16.0 (October 24, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-8","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added := operator for Boolean satisfiability problems (#3530)","category":"page"},{"location":"release_notes/#Fixed-14","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed text/latex printing of MOI.Interval sets (#3537)\nFixed tests with duplicate function names (#3539)","category":"page"},{"location":"release_notes/#Other-13","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Updated documentation list of supported solvers (#3527) (#3529) (#3538) (#3542) (#3545) (#3546)\nUpdated to Documenter@1.1 (#3528)\nFixed various tutorials (#3534) (#3532)\nFixed Project.toml compat bounds for standard libraries (#3544)","category":"page"},{"location":"release_notes/#[Version-1.15.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.15.1)-(September-24,-2023)","page":"Release notes","title":"Version 1.15.1 (September 24, 2023)","text":"","category":"section"},{"location":"release_notes/#Fixed-15","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed support for single argument min and max operators (#3522)\nFixed error message for add_to_expression! when called with a GenericNonlinearExpr (#3506)\nFixed constraint tags with broadcasted constraints (#3515)\nFixed MethodError in MA.scaling (#3518)\nFixed support for arrays of Parameter variables (#3524)","category":"page"},{"location":"release_notes/#Other-14","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Updated to Documenter@1 (#3501)\nFixed links to data in tutorials (#3512)\nFixed typo in TSP tutorial (#3516)\nImproved error message for VariableNotOwned errors (#3520)\nFixed various JET errors (#3519)","category":"page"},{"location":"release_notes/#[Version-1.15.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.15.0)-(September-15,-2023)","page":"Release notes","title":"Version 1.15.0 (September 15, 2023)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"This is a large minor release because it adds an entirely new data structure and API path for working with nonlinear programs. The previous nonlinear interface remains unchanged and is documented at Nonlinear Modeling (Legacy). The new interface is a treated as a non-breaking feature addition and is documented at Nonlinear Modeling.","category":"page"},{"location":"release_notes/#Breaking","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Although the new nonlinear interface is a feature addition, there are two changes which might be breaking for a very small number of users.","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The syntax inside JuMP macros is parsed using a different code path, even for linear and quadratic expressions. We made this change to unify how we parse linear, quadratic, and nonlinear expressions. In all cases, the new code returns equivalent expressions, but because of the different order of operations, there are three changes to be aware of when updating:\nThe printed form of the expression may change, for example from x * y to y * x. This can cause tests which test the String representation of a model to fail.\nSome coefficients may change slightly due to floating point round-off error.\nParticularly when working with a JuMP extension, you may encounter a MethodError due to a missing or ambiguous method. These errors are due to previously existing bugs that were not triggered by the previous parsing code. If you encounter such an error, please open a GitHub issue.\nThe methods for Base.:^(x::VariableRef, n::Integer) and Base.:^(x::AffExpr, n::Integer) have changed. Previously, these methods supported only n = 0, 1, 2 and they always returned a QuadExpr, even for the case when n = 0 or n = 1. Now:\nx^0 returns one(T), where T is the value_type of the model (defaults to Float64)\nx^1 returns x\nx^2 returns a QuadExpr\nx^n where !(0 <= n <= 2) returns a NonlinearExpr.\nWe made this change to support nonlinear expressions and to align the mathematical definition of the operation with their return type. (Previously, users were surprised that x^1 returned a QuadExpr.) As a consequence of this change, the methods are now not type-stable. This means that the compiler cannot prove that x^2 returns a QuadExpr. If benchmarking shows that this is a performance problem, you can use the type-stable x * x instead of x^2.","category":"page"},{"location":"release_notes/#Added-9","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added triangle_vec which simplifies adding MOI.LogDetConeTriangle and MOI.RootDetConeTriangle constraints (#3456)\nAdded the new nonlinear interface. This is a very large change. See the documentation at Nonlinear Modeling and the (long) discussion in JuMP.jl#3106. Related PRs are (#3468) (#3472) (#3475) (#3483) (#3487) (#3488) (#3489) (#3504) (#3509)","category":"page"},{"location":"release_notes/#Fixed-16","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed uses of @nospecialize which cause precompilation failures in Julia v1.6.0 and v1.6.1. (#3464)\nFixed adding a container of Parameter (#3473)\nFixed return type of x^0 and x^1 to no longer return QuadExpr (see note in Breaking section above) (#3474)\nFixed error messages in LowerBoundRef, UpperBoundRef, FixRef, IntegerRef, BinaryRef, ParameterRef and related functions (#3494)\nFixed type inference of empty containers in JuMP macros (#3500)","category":"page"},{"location":"release_notes/#Other-15","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added GAMS to solver documentation (#3357)\nUpdated various tutorials (#3459) (#3460) (#3462) (#3463) (#3465) (#3490) (#3492) (#3503)\nAdded The network multi-commodity flow problem tutorial (#3491)\nAdded Two-stage stochastic programs tutorial (#3466)\nAdded better error messages for unsupported operations in LinearAlgebra (#3476)\nUpdated to the latest version of Documenter (#3484) (#3495) (#3497)\nUpdated GitHub action versions (#3507)","category":"page"},{"location":"release_notes/#[Version-1.14.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.14.1)-(September-2,-2023)","page":"Release notes","title":"Version 1.14.1 (September 2, 2023)","text":"","category":"section"},{"location":"release_notes/#Fixed-17","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix links in Documentation (#3478)","category":"page"},{"location":"release_notes/#[Version-1.14.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.14.0)-(August-27,-2023)","page":"Release notes","title":"Version 1.14.0 (August 27, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-10","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added DimensionalData.jl extension (#3413)\nAdded syntactic sugar for the MOI.Parameter set (#3443)\nParameter\nParameterRef\nis_parameter\nparameter_value\nset_parameter_value","category":"page"},{"location":"release_notes/#Fixed-18","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed model_convert for BridgeableConstraint (#3437)\nFixed printing models with integer coefficients larger than typemax(Int) (#3447)\nFixed support for constant left-hand side functions in a complementarity constraint (#3452)","category":"page"},{"location":"release_notes/#Other-16","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Updated packages used in documentation (#3444) (#3455)\nFixed docstring tests (#3445)\nFixed printing change for MathOptInterface (#3446)\nFixed typos in documentation (#3448) (#3457)\nAdded SCIP to callback documentation (#3449)","category":"page"},{"location":"release_notes/#[Version-1.13.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.13.0)-(July-27,-2023)","page":"Release notes","title":"Version 1.13.0 (July 27, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-11","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for generic number types (#3377) (#3385)\nAdded fallback for MOI.AbstractSymmetricMatrixSetTriangle and MOI.AbstractSymmetricMatrixSetSquare (#3424)","category":"page"},{"location":"release_notes/#Fixed-19","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed set_start_values with MOI.Bridges.Objective.SlackBridge (#3422)\nFixed flakey doctest in variables.md (#3425)\nFixed names on CITATION.bib (#3423)","category":"page"},{"location":"release_notes/#Other-17","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Loraine.jl to the installation table (#3426)\nRemoved Penopt.jl from packages.toml (#3428)\nImproved problem statement in cannery example of tutorial (#3430)\nMinor cleanups in Containers.DenseAxisArray implementation (#3429)\nChanged nested_problems.jl: outer/inner to upper/lower (#3433)\nRemoved second SDP relaxation in OPF tutorial (#3432)","category":"page"},{"location":"release_notes/#[Version-1.12.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.12.0)-(June-19,-2023)","page":"Release notes","title":"Version 1.12.0 (June 19, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-12","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added coefficient_type keyword argument to add_bridge and remove_bridge (#3394)","category":"page"},{"location":"release_notes/#Fixed-20","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed error message for matrix in HermitianPSDCone (#3369)\nFixed EditURL for custom documentation pages (#3373)\nFixed return type annotations for MOI.ConstraintPrimal and MOI.ConstraintDual (#3381)\nFixed printing change in Julia nightly (#3391)\nFixed printing of Complex coefficients (#3397)\nFixed printing of constraints in text/latex mode (#3405)\nFixed performance issue in Containers.rowtable (#3410)\nFixed bug when variables added to set of wrong dimension (#3411)","category":"page"},{"location":"release_notes/#Other-18","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added more solver READMEs to the documentation (#3358) (#3360) (#3364) (#3365) (#3366) (#3368) (#3372) (#3374) (#3376) (#3379) (#3387) (#3389)\nAdded StatusSwitchingQP.jl to the installation table (#3354)\nUpdated checklist for adding a new solver (#3370)\nUpdated extension-tests.yml action (#3371) (#3375)\nColor logs in GitHub actions (#3392)\nAdded new tutorials\nOptimal power flow (#3395) (#3412)\nLovász numbers (#3399)\nDualization (#3402)\nUpdated JuMP paper citation (#3400)\nChanged GitHub action to upload LaTeX logs when building documentation (#3403)\nFixed printing of SCS log in documentation (#3406)\nUpdated solver versions (#3407)\nUpdated documentation to use Julia v1.9 (#3398)\nReplaced _value_type with MOI.Utilities.value_type (#3414)\nFixed a typo in docstring (#3415)\nRefactored API documentation (#3386)\nUpdated SCIP license (#3420)","category":"page"},{"location":"release_notes/#[Version-1.11.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.11.1)-(May-19,-2023)","page":"Release notes","title":"Version 1.11.1 (May 19, 2023)","text":"","category":"section"},{"location":"release_notes/#Fixed-21","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a poor error message when sum(::DenseAxisArray; dims) was called (#3338)\nFixed support for dependent sets in the @variable macro (#3344)\nFixed a performance bug in constraints with sparse symmetric matrices (#3349)","category":"page"},{"location":"release_notes/#Other-19","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved the printing of complex numbers (#3332)\nWhen printing, sets which contain constants ending in .0 now print as integers. This follows the behavior of constants in functions (#3341)\nAdded InfiniteOpt to the extensions documentation (#3343)\nAdded more documentation for the exponential cone (#3345) (#3347)\nAdded checklists for developers (#3346) (#3355)\nFixed test support upcoming Julia nightly (#3351)\nFixed extension-tests.yml action (#3353)\nAdd more solvers to the documentation (#3359) (#3361) (#3362)","category":"page"},{"location":"release_notes/#[Version-1.11.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.11.0)-(May-3,-2023)","page":"Release notes","title":"Version 1.11.0 (May 3, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-13","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added new methods to print_active_bridges for printing a particular objective, constraint, or variable (#3316)","category":"page"},{"location":"release_notes/#Fixed-22","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed tests for MOI v1.14.0 release (#3312)\nFixed indexing containers when an axis is Vector{Any} that contains a Vector{Any} element (#3280)\nFixed getindex(::AbstractJuMPScalar) which is called for an expression like x[] (#3314)\nFixed bug in set_string_names_on_creation with a vector of variables (#3322)\nFixed bug in memoize function in nonlinear documentation (#3337)","category":"page"},{"location":"release_notes/#Other-20","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed typos in the documentation (#3317) (#3318) (#3328)\nAdded a test for the order of setting start values (#3315)\nAdded READMEs of solvers and extensions to the docs (#3309) (#3320) (#3327) (#3329) (#3333)\nStyle improvements to src/variables.jl (#3324)\nClarify that column generation does not find global optimum (#3325)\nAdd a GitHub actions workflow for testing extensions prior to release (#3331)\nDocument the release process for JuMP (#3334)\nFix links to discourse and chatroom (#3335)","category":"page"},{"location":"release_notes/#[Version-1.10.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.10.0)-(April-3,-2023)","page":"Release notes","title":"Version 1.10.0 (April 3, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-14","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Nonnegatives, Nonpositives and Zeros, and support vector-valued inequality syntax in the JuMP macros (#3273)\nAdded special support for LinearAlgebra.Symmetric and LinearAlgebra.Hermitian matrices in Zeros constraints (#3281) (#3296)\nAdded HermitianMatrixSpace and the Hermitian tag for generating a matrix of variables that is Hermitian (#3292) (#3293)\nAdded Semicontinuous and Semiinteger (#3302)\nAdded support for keyword indexing of containers (#3237)","category":"page"},{"location":"release_notes/#Fixed-23","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed [compat] bound for MathOptInterface in Project.toml (#3272)","category":"page"},{"location":"release_notes/#Other-21","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Split out the Nested optimization problems tutorial (#3274)\nUpdated doctests to ensure none have hidden state (#3275) (#3276)\nClarified how lazy constraints may revisit points (#3278)\nAdded P-Norm example (#3282)\nClarified docs that macros create new bindings (#3284)\nFixed threading example (#3283)\nAdded plot to The minimum distortion problem (#3288)\nAdded Google style rules for Vale and fixed warnings (#3285)\nAdded citation for the JuMP 1.0 paper (#3294)\nUpdated package versions in the documentation (#3298)\nAdded comment for the order in which start values must be set (#3303)\nImproved error message for unrecognized constraint operators (#3311)","category":"page"},{"location":"release_notes/#[Version-1.9.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.9.0)-(March-7,-2023)","page":"Release notes","title":"Version 1.9.0 (March 7, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-15","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added get_attribute and set_attribute. These replace get_optimizer_attribute and set_optimizer_attribute, although the _optimizer_ functions remain for backward compatibility. (#3219)\nAdded set_start_values for setting all supported start values in a model (#3238)\nAdd remove_bridge and print_active_bridges (#3259)","category":"page"},{"location":"release_notes/#Fixed-24","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The matrix returned by a variable in HermitianPSDCone is now a LinearAlgebra.Hermitian matrix. This is potentially breaking if you have written code to assume the return is a Matrix. (#3245) (#3246)\nFixed missing support for Base.isreal of expressions (#3252)","category":"page"},{"location":"release_notes/#Other-22","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a thread safety issue in the Parallelism tutorial (#3240) (#3243)\nImproved the error message when unsupported operators are used in @NL macros (#3236)\nClarified the documentation to say that matrices in HermitianPSDCone must be LinearAlgebra.Hermitian (#3241)\nMinor style fixes to internal macro code (#3247)\nAdd Example: quantum state discrimination tutorial (#3250)\nImprove error message when begin...end not passed to plural macros (#3255)\nDocument how to register function with varying number of input arguments (#3258)\nTidy tests by removing unneeded JuMP. prefixes (#3260)\nClarified the introduction to the Complex number support tutorial (#3262)\nFixed typos in the Documentation (#3263) (#3266) (#3268) (#3269)","category":"page"},{"location":"release_notes/#[Version-1.8.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.8.2)-(February-27,-2023)","page":"Release notes","title":"Version 1.8.2 (February 27, 2023)","text":"","category":"section"},{"location":"release_notes/#Fixed-25","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed dot product between complex JuMP expression and number (#3244)","category":"page"},{"location":"release_notes/#Other-23","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Polish simple SDP examples (#3232)","category":"page"},{"location":"release_notes/#[Version-1.8.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.8.1)-(February-23,-2023)","page":"Release notes","title":"Version 1.8.1 (February 23, 2023)","text":"","category":"section"},{"location":"release_notes/#Fixed-26","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed support for init in nonlinear generator expressions (#3226)","category":"page"},{"location":"release_notes/#Other-24","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Use and document import MathOptInterface as MOI (#3222)\nRemoved references in documentation to multiobjective optimization being unsupported (#3223)\nAdded tutorial on multi-objective portfolio optimization (#3227)\nRefactored some of the conic tutorials (#3229)\nFixed typos in the documentation (#3230)\nAdded tutorial on parallelism (#3231)","category":"page"},{"location":"release_notes/#[Version-1.8.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.8.0)-(February-16,-2023)","page":"Release notes","title":"Version 1.8.0 (February 16, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-16","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added --> syntax support for indicator constraints. The old syntax of => remains supported (#3207)\nAdded <--> syntax for reified constraints. For now, few solvers support reified constraints (#3206)\nAdded fix_discrete_variables. This is most useful for computing the dual of a mixed-integer program (#3208)\nAdded support for vector-valued objectives. For details, see the Multi-objective knapsack tutorial (#3176)","category":"page"},{"location":"release_notes/#Fixed-27","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug in lp_sensitivity_report by switching to an explicit LU factorization of the basis matrix (#3182)\nFixed a bug that prevented [; kwarg] arguments in macros (#3220)","category":"page"},{"location":"release_notes/#Other-25","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Minor fixes to the documentation (#3200) (#3201) (#3203) (#3210)\nAdded tutorial Constraint programming (#3202)\nAdded more examples to Modeling with cones\nRemove _distance_to_set in favor of MOI.Utilities.distance_to_set (#3209)\nImprove The diet problem tutorial by adding the variable as a column in the dataframe (#3213)\nImprove The knapsack problem example tutorial (#3216) (#3217)\nAdded the Example: ellipsoid approximation tutorial (#3218)","category":"page"},{"location":"release_notes/#[Version-1.7.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.7.0)-(January-25,-2023)","page":"Release notes","title":"Version 1.7.0 (January 25, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-17","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for view of a Containers.DenseAxisArray (#3152) (#3180)\nAdded support for containers of variables in ComplexPlane (#3184)\nAdded support for minimum and maximum generators in nonlinear expressions (#3189)\nAdded SnoopPrecompile statements that reduce the time-to-first-solve in Julia 1.9 (#3193) (#3195) (#3196) (#3197)","category":"page"},{"location":"release_notes/#Other-26","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Large refactoring of the tests (#3166) (#3167) (#3168) (#3169) (#3170) (#3171)\nRemove unreachable code due to VERSION checks (#3172)\nDocument how to test JuMP extensions (#3174)\nFix method ambiguities in Containers (#3173)\nImprove error message that is thrown when = is used instead of == in the @constraint macro (#3178)\nImprove the error message when Bool is used instead of Bin in the @variable macro (#3180)\nUpdate versions of the documentation (#3185)\nTidy the import of packages and remove unnecessary prefixes (#3186) (#3187)\nRefactor src/JuMP.jl by moving methods into more relevant files (#3188)\nFix docstring of Model not appearing in the documentation (#3198)","category":"page"},{"location":"release_notes/#[Version-1.6.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.6.0)-(January-1,-2023)","page":"Release notes","title":"Version 1.6.0 (January 1, 2023)","text":"","category":"section"},{"location":"release_notes/#Added-18","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added a result keyword argument to solution_summary to allow summarizing models with multiple solutions (#3138)\nAdded relax_with_penalty!, which is a useful tool when debugging infeasible models (#3140)\nAdded has_start_value (#3157)\nAdded support for HermitianPSDCone in constraints (#3154)","category":"page"},{"location":"release_notes/#Fixed-28","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed promotion of complex expressions (#3150) (#3164)","category":"page"},{"location":"release_notes/#Other-27","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Benders tutorial with in-place resolves (#3145)\nAdded more Tips and tricks for linear programs (#3144) (#3163)\nClarified documentation that start can depend on the indices of a variable container (#3148)\nReplace instances of length and size by the recommended eachindex and axes (#3149)\nAdded a warning explaining why the model is dirty when accessing solution results from a modified model (#3156)\nClarify documentation that PSD ensures a symmetric matrix (#3159)\nMaintenance of the JuMP test suite (#3146) (#3158) (#3162)","category":"page"},{"location":"release_notes/#[Version-1.5.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.5.0)-(December-8,-2022)","page":"Release notes","title":"Version 1.5.0 (December 8, 2022)","text":"","category":"section"},{"location":"release_notes/#Added-19","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Add support for complex-valued variables:\nHermitianPSDCone (#3109)\nComplexPlane and ComplexVariable (#3134)\nAdd support for MOI.OptimizerWithAttributes in set_optimizer_attribute and get_optimizer_attribute (#3129)","category":"page"},{"location":"release_notes/#Fixed-29","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed error message for vectorized interval constraints (#3123)\nFixed passing AbstractString to set_optimizer_attribute (#3127)","category":"page"},{"location":"release_notes/#Other-28","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Update package versions used in docs (#3119) (#3133) (#3139)\nFixed output of diet tutorial (#3120)\nExplain how to use Dates.period in set_time_limit_sec (#3121)\nUpdate to JuliaFormatter v1.0.15 (#3130)\nFixed HTTP server example in web_app.jl (#3131)\nUpdate docs to build with Documenter#master (#3094)\nAdd tests for LinearAlgebra operations (#3132)\nTidy these release notes (#3135)\nAdded documentation for Complex number support (#3141)\nRemoved the \"workforce scheduling\" and \"steelT3\" tutorials (#3143)","category":"page"},{"location":"release_notes/#[Version-1.4.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.4.0)-(October-29,-2022)","page":"Release notes","title":"Version 1.4.0 (October 29, 2022)","text":"","category":"section"},{"location":"release_notes/#Added-20","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Containers.rowtable which converts a container into a vector of NamedTuples to support the Tables.jl interface. This simplifies converting Containers.DenseAxisArray and Containers.SparseAxisArray objects into tabular forms such as a DataFrame (#3104)\nAdded a new method to Containers.container so that index names are passed to the container (#3088)","category":"page"},{"location":"release_notes/#Fixed-30","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug in copy_to(dest::Model, src::MOI.ModelLike) when src has nonlinear components (#3101)\nFixed the printing of (-1.0 + 0.0im) coefficients in complex expressions (#3112)\nFixed a parsing bug in nonlinear expressions with generator statements that contain multiple for statements (#3116)","category":"page"},{"location":"release_notes/#Other-29","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Converted the multi-commodity flow tutorial to use an SQLite database (#3098)\nFixed a number of typos in the documentation (#3103) (#3107) (#3018)\nImproved various style aspects of the PDF documentation (#3095) (#3098) (#3102)","category":"page"},{"location":"release_notes/#[Version-1.3.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.3.1)-(September-28,-2022)","page":"Release notes","title":"Version 1.3.1 (September 28, 2022)","text":"","category":"section"},{"location":"release_notes/#Fixed-31","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a performance issue in relax_integrality (#3087)\nFixed the type stability of operators with Complex arguments (#3072)\nFixed a bug which added additional +() terms to some nonlinear expressions (#3091)\nFixed potential method ambiguities with AffExpr and QuadExpr objects (#3092)","category":"page"},{"location":"release_notes/#Other-30","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added vale as a linter for the documentation (#3080)\nAdded a tutorial on debugging JuMP models (#3043)\nFixed a number of typos in the documentation (#3079) (#3083)\nMany other small tweaks to the documentation (#3068) (#3073) (#3074) (#3075) (#3076) (#3077) (#3078) (#3081) (#3082) (#3084) (#3085) (#3089)","category":"page"},{"location":"release_notes/#[Version-1.3.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.3.0)-(September-5,-2022)","page":"Release notes","title":"Version 1.3.0 (September 5, 2022)","text":"","category":"section"},{"location":"release_notes/#Added-21","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Support slicing in SparseAxisArray (#3031)","category":"page"},{"location":"release_notes/#Fixed-32","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug introduced in v1.2.0 that prevented DenseAxisArrays with Vector keys (#3064)","category":"page"},{"location":"release_notes/#Other-31","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Released the JuMP logos under the CC BY 4.0 license (#3063)\nMinor tweaks to the documentation (#3054) (#3056) (#3057) (#3060) (#3061) (#3065)\nImproved code coverage of a number of files (#3048) (#3049) (#3050) (#3051) (#3052) (#3053) (#3058) (#3059)","category":"page"},{"location":"release_notes/#[Version-1.2.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.2.1)-(August-22,-2022)","page":"Release notes","title":"Version 1.2.1 (August 22, 2022)","text":"","category":"section"},{"location":"release_notes/#Fixed-33","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug when parsing two-sided nonlinear constraints (#3045)","category":"page"},{"location":"release_notes/#[Version-1.2.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.2.0)-(August-16,-2022)","page":"Release notes","title":"Version 1.2.0 (August 16, 2022)","text":"","category":"section"},{"location":"release_notes/#Breaking-2","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"This is a large minor release because it significantly refactors the internal code for handling nonlinear programs to use the MathOptInterface.Nonlinear submodule that was introduced in MathOptInterface v1.3.0. As a consequence, the internal datastructure in model.nlp_data has been removed, as has the JuMP._Derivatives submodule. Despite the changes, the public API for nonlinear programming has not changed, and any code that uses only the public API and that worked with v1.1.1 will continue to work with v1.2.0.","category":"page"},{"location":"release_notes/#Added-22","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added all_constraints(model; include_variable_in_set_constraints) which simplifies returning a list of all constraint indices in the model.\nAdded the ability to delete nonlinear constraints via delete(::Model, ::NonlinearConstraintRef).\nAdded the ability to provide an explicit Hessian for a multivariate user-defined function.\nAdded support for querying the primal value of a nonlinear constraint via value(::NonlinearConstraintRef)","category":"page"},{"location":"release_notes/#Fixed-34","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug in Containers.DenseAxisArray so that it now supports indexing with keys that hash to the same value, even if they are different types, for example, Int32 and Int64.\nFixed a bug printing the model when the solver does not support MOI.Name.","category":"page"},{"location":"release_notes/#Other-32","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added a constraint programming formulation to the Sudoku tutorial.\nAdded newly supported solvers Pajarito, Clarabel, and COPT to the installation table.\nFixed a variety of other miscellaneous issues in the documentation.","category":"page"},{"location":"release_notes/#[Version-1.1.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.1.1)-(June-14,-2022)","page":"Release notes","title":"Version 1.1.1 (June 14, 2022)","text":"","category":"section"},{"location":"release_notes/#Other-33","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed problem displaying LaTeX in the documentation\nMinor updates to the style guide\nUpdated to MOI v1.4.0 in the documentation","category":"page"},{"location":"release_notes/#[Version-1.1.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.1.0)-(May-25,-2022)","page":"Release notes","title":"Version 1.1.0 (May 25, 2022)","text":"","category":"section"},{"location":"release_notes/#Added-23","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added num_constraints(::Model; count_variable_in_set_constraints) to simplify the process of counting the number of constraints in a model\nAdded VariableRef(::ConstraintRef) for querying the variable associated with a bound or integrality constraint.\nAdded set_normalized_coefficients for modifying the variable coefficients of a vector-valued constraint.\nAdded set_string_names_on_creation to disable creating String names for variables and constraints. This can improve performance.","category":"page"},{"location":"release_notes/#Fixed-35","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug passing nothing to the start keyword of @variable","category":"page"},{"location":"release_notes/#Other-34","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"New tutorials:\nSensitivity analysis of a linear program\nServing web apps\nMinimal ellipse SDP tutorial refactored and improved\nDocs updated to the latest version of each package\nLots of minor fixes and improvements to the documentation","category":"page"},{"location":"release_notes/#[Version-1.0.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v1.0.0)-(March-24,-2022)","page":"Release notes","title":"Version 1.0.0 (March 24, 2022)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Read more about this release, along with an acknowledgement of all the contributors in our JuMP 1.0.0 is released blog post.","category":"page"},{"location":"release_notes/#Breaking-3","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The previously deprecated functions (v0.23.0, v0.23.1) have been removed. Deprecation was to improve consistency of function names:\nnum_nl_constraints (see num_nonlinear_constraints)\nall_nl_constraints (see all_nonlinear_constraints)\nadd_NL_expression (see add_nonlinear_expression)\nset_NL_objective (see set_nonlinear_objective)\nadd_NL_constraint (see add_nonlinear_constraint)\nnl_expr_string (see nonlinear_expr_string)\nnl_constraint_string (see nonlinear_constraint_string)\nSymMatrixSpace (see SymmetricMatrixSpace)\nThe unintentionally exported variable JuMP.op_hint has been renamed to the unexported JuMP._OP_HINT","category":"page"},{"location":"release_notes/#Fixed-36","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug writing .nl files\nFixed a bug broadcasting SparseAxisArrays","category":"page"},{"location":"release_notes/#[Version-0.23.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.23.2)-(March-14,-2022)","page":"Release notes","title":"Version 0.23.2 (March 14, 2022)","text":"","category":"section"},{"location":"release_notes/#Added-24","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added relative_gap to solution_summary\nregister now throws an informative error if the function is not differentiable using ForwardDiff. In some cases, the check in register will encounter a false negative, and the informative error will be thrown at run-time. This usually happens when the function is non-differentiable in a subset of the domain.","category":"page"},{"location":"release_notes/#Fixed-37","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a scoping issue when extending the container keyword of containers","category":"page"},{"location":"release_notes/#Other-35","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Docs updated to the latest version of each package","category":"page"},{"location":"release_notes/#[Version-0.23.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.23.1)-(March-2,-2022)","page":"Release notes","title":"Version 0.23.1 (March 2, 2022)","text":"","category":"section"},{"location":"release_notes/#Deprecated","page":"Release notes","title":"Deprecated","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"nl_expr_string and nl_constraint_string have been renamed to nonlinear_expr_string and nonlinear_constraint_string. The old methods still exist with deprecation warnings. This change should impact very few users because to call them you must rely on private internals of the nonlinear API. Users are encouraged to use sprint(show, x) instead, where x is the nonlinear expression or constraint of interest.","category":"page"},{"location":"release_notes/#Added-25","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for Base.abs2(x) where x is a variable or affine expression. This is mainly useful for complex-valued constraints.","category":"page"},{"location":"release_notes/#Fixed-38","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed addition of complex and real affine expressions\nFixed arithmetic for Complex-valued quadratic expressions\nFixed variable bounds passed as Rational{Int}(Inf)\nFixed printing of the coefficient (0 + 1im)\nFixed a bug when solution_summary is called prior to optimize!","category":"page"},{"location":"release_notes/#[Version-0.23.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.23.0)-(February-25,-2022)","page":"Release notes","title":"Version 0.23.0 (February 25, 2022)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"JuMP v0.23.0 is a breaking release. It is also a release-candidate for JuMP v1.0.0. That is, if no issues are found with the v0.23.0 release, then it will be re-tagged as v1.0.0.","category":"page"},{"location":"release_notes/#Breaking-4","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Julia 1.6 is now the minimum supported version\nMathOptInterface has been updated to v1.0.0\nAll previously deprecated functionality has been removed\nPrintMode, REPLMode and IJuliaMode have been removed in favor of the MIME types MIME\"text/plain\" and MIME\"text/latex\". Replace instances of ::Type{REPLMode} with ::MIME\"text/plain\", REPLMode with MIME(\"text/plain\"), ::Type{IJuliaMode} with ::MIME\"text/latex\", and IJuliaMode with MIME(\"text/latex\").\nFunctions containing the nl_ acronym have been renamed to the more explicit nonlinear_. For example, num_nl_constraints is now num_nonlinear_constraints and set_NL_objective is now set_nonlinear_objective. Calls to the old functions throw an error explaining the new name.\nSymMatrixSpace has been renamed to SymmetricMatrixSpace","category":"page"},{"location":"release_notes/#Added-26","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added nonlinear_dual_start_value and set_nonlinear_dual_start_value\nAdded preliminary support for Complex coefficient types","category":"page"},{"location":"release_notes/#Fixed-39","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug in solution_summary","category":"page"},{"location":"release_notes/#Other-36","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"MILP examples have been migrated from GLPK to HiGHS\nFixed various typos\nImproved section on setting constraint start values","category":"page"},{"location":"release_notes/#Troubleshooting-problems-when-updating","page":"Release notes","title":"Troubleshooting problems when updating","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"If you experience problems when updating, you are likely using previously deprecated functionality. (By default, Julia does not warn when you use deprecated features.)","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"To find the deprecated features you are using, start Julia with --depwarn=yes:","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"$ julia --depwarn=yes","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Then install JuMP v0.22.3:","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"julia> using Pkg\njulia> pkg\"add JuMP@0.22.3\"","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"And then run your code. Apply any suggestions, or search the release notes below for advice on updating a specific deprecated feature.","category":"page"},{"location":"release_notes/#[Version-0.22.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.22.3)-(February-10,-2022)","page":"Release notes","title":"Version 0.22.3 (February 10, 2022)","text":"","category":"section"},{"location":"release_notes/#Fixed-40","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a reproducibility issue in the TSP tutorial\nFixed a reproducibility issue in the max_cut_sdp tutorial\nFixed a bug broadcasting an empty SparseAxisArray","category":"page"},{"location":"release_notes/#Other-37","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added a warning and improved documentation for the modify-then-query case\nFixed a typo in the docstring of RotatedSecondOrderCone\nAdded Aqua.jl as a check for code health\nAdded introductions to each section of the tutorials\nImproved the column generation and Benders decomposition tutorials\nUpdated documentation to MOI v0.10.8\nUpdated JuliaFormatter to v0.22.2","category":"page"},{"location":"release_notes/#[Version-0.22.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.22.2)-(January-10,-2022)","page":"Release notes","title":"Version 0.22.2 (January 10, 2022)","text":"","category":"section"},{"location":"release_notes/#Added-27","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The function all_nl_constraints now returns all nonlinear constraints in a model\nstart_value and set_start_value can now be used to get and set the primal start for constraint references\nPlural macros now return a tuple containing the elements that were defined instead of nothing\nAnonymous variables are now printed as _[i] where i is the index of the variable instead of noname. Calling name(x) still returns \"\" so this is non-breaking.","category":"page"},{"location":"release_notes/#Fixed-41","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed handling of min and max in nonlinear expressions\nCartesianIndex is no longer allowed as a key for DenseAxisArrays.","category":"page"},{"location":"release_notes/#Other-38","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved the performance of GenericAffExpr\nAdded a tutorial on the Travelling Salesperson Problem\nAdded a tutorial on querying the Hessian of a nonlinear program\nAdded documentation on using custom solver binaries.","category":"page"},{"location":"release_notes/#[Version-0.22.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.22.1)-(November-29,-2021)","page":"Release notes","title":"Version 0.22.1 (November 29, 2021)","text":"","category":"section"},{"location":"release_notes/#Added-28","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Export OptimizationSense enum, with instances: MIN_SENSE, MAX_SENSE, and FEASIBILITY_SENSE\nAdd Base.isempty(::Model) to match Base.empty(::Model)","category":"page"},{"location":"release_notes/#Fixed-42","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix bug in container with tuples as indices\nFix bug in set_time_limit_sec","category":"page"},{"location":"release_notes/#Other-39","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Add tutorial \"Design patterns for larger models\"\nRemove release notes section from PDF\nGeneral edits of the documentation and error messages","category":"page"},{"location":"release_notes/#[Version-0.22.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.22.0)-(November-10,-2021)","page":"Release notes","title":"Version 0.22.0 (November 10, 2021)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"JuMP v0.22 is a breaking release","category":"page"},{"location":"release_notes/#Breaking-5","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"JuMP 0.22 contains a number of breaking changes. However, these should be invisible for the majority of users. You will mostly encounter these breaking changes if you: wrote a JuMP extension, accessed backend(model), or called @SDconstraint.","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The breaking changes are as follows:","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"MathOptInterface has been updated to v0.10.4. For users who have interacted with the MOI backend, this contains a large number of breaking changes. Read the MathOptInterface release notes for more details.\nThe bridge_constraints keyword argument to Model and set_optimizer has been renamed add_bridges to reflect that more thing were bridged than just constraints.\nThe backend(model) field now contains a concrete instance of a MOI.Utilities.CachingOptimizer instead of one with an abstractly typed optimizer field. In most cases, this will lead to improved performance. However, calling set_optimizer after backend invalidates the old backend. For example:\nmodel = Model()\nb = backend(model)\nset_optimizer(model, GLPK.Optimizer)\n@variable(model, x)\n# b is not updated with `x`! Get a new b by calling `backend` again.\nnew_b = backend(model)\nAll usages of @SDconstraint are deprecated. The new syntax is @constraint(model, X >= Y, PSDCone()).\nCreating a DenseAxisArray with a Number as an axis will now display a warning. This catches a common error in which users write @variable(model, x[length(S)]) instead of @variable(model, x[1:length(S)]).\nThe caching_mode argument to Model, for example, Model(caching_mode = MOIU.MANUAL) mode has been removed. For more control over the optimizer, use direct_model instead.\nThe previously deprecated lp_objective_perturbation_range and lp_rhs_perturbation_range functions have been removed. Use lp_sensitivity_report instead.\nThe .m fields of NonlinearExpression and NonlinearParameter have been renamed to .model.\nInfinite variable bounds are now ignored. Thus, @variable(model, x <= Inf) will show has_upper_bound(x) == false. Previously, these bounds were passed through to the solvers which caused numerical issues for solvers expecting finite bounds.\nThe variable_type and constraint_type functions were removed. This should only affect users who previously wrote JuMP extensions. The functions can be deleted without consequence.\nThe internal functions moi_mode, moi_bridge_constraints, moi_add_constraint, and moi_add_to_function_constant are no longer exported.\nThe un-used method Containers.generate_container has been deleted.\nThe Containers API has been refactored, and _build_ref_sets is now public as Containers.build_ref_sets.\nThe parse_constraint_ methods for extending @constraint at parse time have been refactored in a breaking way. Consult the Extensions documentation for more details and examples.","category":"page"},{"location":"release_notes/#Added-29","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The TerminationStatusCode and ResultStatusCode enums are now exported by JuMP. Prefer termination_status(model) == OPTIMAL instead of == MOI.OPTIMAL, although the MOI. prefix way still works.\nCopy a x::DenseAxisArray to an Array by calling Array(x).\nNonlinearExpression is now a subtype of AbstractJuMPScalar\nConstraints such as @constraint(model, x + 1 in MOI.Integer()) are now supported.\nprimal_feasibility_report now accepts a function as the first argument.\nScalar variables @variable(model, x[1:2] in MOI.Integer()) creates two variables, both of which are constrained to be in the set MOI.Integer.\nConic constraints can now be specified as inequalities under a different partial ordering. So @constraint(model, x - y in MOI.Nonnegatives()) can now be written as @constraint(model, x >= y, MOI.Nonnegatives()).\nNames are now set for vectorized constraints.","category":"page"},{"location":"release_notes/#Fixed-43","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a performance issue when show was called on a SparseAxisArray with a large number of elements.\nFixed a bug displaying barrier and simplex iterations in solution_summary.\nFixed a bug by implementing hash for DenseAxisArray and SparseAxisArray.\nNames are now only set if the solver supports them. Previously, this prevented solvers such as Ipopt from being used with direct_model.\nMutableArithmetics.Zero is converted into a 0.0 before being returned to the user. Previously, some calls to @expression would return the undocumented MutableArithmetics.Zero() object. One example is summing over an empty set @expression(model, sum(x[i] for i in 1:0)). You will now get 0.0 instead.\nAffExpr and QuadExpr can now be used with == 0 instead of iszero. This fixes a number of issues relating to Julia standard libraries such as LinearAlgebra and SparseArrays.\nFixed a bug when registering a user-defined function with splatting.","category":"page"},{"location":"release_notes/#Other-40","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The documentation is now available as a PDF.\nThe documentation now includes a full copy of the MathOptInterface documentation to make it easy to link concepts between the docs. (The MathOptInterface documentation has also been significantly improved.)\nThe documentation contains a large number of improvements and clarifications on a range of topics. Thanks to @sshin23, @DilumAluthge, and @jlwether.\nThe documentation is now built with Julia 1.6 instead of 1.0.\nVarious error messages have been improved to be more readable.","category":"page"},{"location":"release_notes/#[Version-0.21.10](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.10)-(September-4,-2021)","page":"Release notes","title":"Version 0.21.10 (September 4, 2021)","text":"","category":"section"},{"location":"release_notes/#Added-30","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added add_NL_expression\nadd_NL_xxx functions now support AffExpr and QuadExpr as terms","category":"page"},{"location":"release_notes/#Fixed-44","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug in solution_summary\nFixed a bug in relax_integrality","category":"page"},{"location":"release_notes/#Other-41","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved error message in lp_sensitivity_report","category":"page"},{"location":"release_notes/#[Version-0.21.9](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.9)-(August-1,-2021)","page":"Release notes","title":"Version 0.21.9 (August 1, 2021)","text":"","category":"section"},{"location":"release_notes/#Added-31","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Containers now support arbitrary container types by passing the type to the container keyword and overloading Containers.container.\nis_valid now supports nonlinear constraints\nAdded unsafe_backend for querying the inner-most optimizer of a JuMP model.\nNonlinear parameters now support the plural @NLparameters macro.\nContainers (for example, DenseAxisArray) can now be used in vector-valued constraints.","category":"page"},{"location":"release_notes/#Other-42","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Various improvements to the documentation.","category":"page"},{"location":"release_notes/#[Version-0.21.8](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.8)-(May-8,-2021)","page":"Release notes","title":"Version 0.21.8 (May 8, 2021)","text":"","category":"section"},{"location":"release_notes/#Added-32","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The @constraint macro is now extendable in the same way as @variable.\nAffExpr and QuadExpr can now be used in nonlinear macros.","category":"page"},{"location":"release_notes/#Fixed-45","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed a bug in lp_sensitivity_report.\nFixed an inference issue when creating empty SparseAxisArrays.","category":"page"},{"location":"release_notes/#[Version-0.21.7](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.7)-(April-12,-2021)","page":"Release notes","title":"Version 0.21.7 (April 12, 2021)","text":"","category":"section"},{"location":"release_notes/#Added-33","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added primal_feasibility_report, which can be used to check whether a primal point satisfies primal feasibility.\nAdded coefficient, which returns the coefficient associated with a variable in affine and quadratic expressions.\nAdded copy_conflict, which returns the IIS of an infeasible model.\nAdded solution_summary, which returns (and prints) a struct containing a summary of the solution.\nAllow AbstractVector in vector constraints instead of just Vector.\nAdded latex_formulation(model) which returns an object representing the latex formulation of a model. Use print(latex_formulation(model)) to print the formulation as a string.\nUser-defined functions in nonlinear expressions are now automatically registered to aid quick model prototyping. However, a warning is printed to encourage the manual registration.\nDenseAxisArray's now support broadcasting over multiple arrays.\nContainer indices can now be iterators of Base.SizeUnknown.","category":"page"},{"location":"release_notes/#Fixed-46","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed bug in rad2deg and deg2rad in nonlinear expressions.\nFixed a MethodError bug in Containers when forcing container type.\nAllow partial slicing of a DenseAxisArray, resolving an issue from 2014.\nFixed a bug printing variable names in IJulia.\nEnding an IJulia cell with model now prints a summary of the model (like in the REPL) not the latex formulation. Use print(model) to print the latex formulation.\nFixed a bug when copying models containing nested arrays.","category":"page"},{"location":"release_notes/#Other-43","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Tutorials are now part of the documentation, and more refactoring has taken place.\nAdded JuliaFormatter added as a code formatter.\nAdded some precompilation statements to reduce initial latency.\nVarious improvements to error messages to make them more helpful.\nImproved performance of value(::NonlinearExpression).\nImproved performance of fix(::VariableRef).","category":"page"},{"location":"release_notes/#[Version-0.21.6](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.6)-(January-29,-2021)","page":"Release notes","title":"Version 0.21.6 (January 29, 2021)","text":"","category":"section"},{"location":"release_notes/#Added-34","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for skew symmetric variables via @variable(model, X[1:2, 1:2] in SkewSymmetricMatrixSpace()).\nlp_sensitivity_report has been added which significantly improves the performance of querying the sensitivity summary of an LP. lp_objective_perturbation_range and lp_rhs_perturbation_range are deprecated.\nDual warm-starts are now supported with set_dual_start_value and dual_start_value.\n∈ (\\in) can now be used in macros instead of = or in.\nUse haskey(model::Model, key::Symbol) to check if a name key is registered in a model.\nAdded unregister(model::Model, key::Symbol) to unregister a name key from model.\nAdded callback_node_status for use in callbacks.\nAdded print_bridge_graph to visualize the bridging graph generated by MathOptInterface.\nImproved error message for containers with duplicate indices.","category":"page"},{"location":"release_notes/#Fixed-47","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Various fixes to pass tests on Julia 1.6.\nFixed a bug in the printing of nonlinear expressions in IJulia.\nFixed a bug when nonlinear expressions are passed to user-defined functions.\nSome internal functions that were previously exported are now no longer exported.\nFixed a bug when relaxing a fixed binary variable.\nFixed a StackOverflowError that occurred when SparseAxisArrays had a large number of elements.\nRemoved an unnecessary type assertion in list_of_constraint_types.\nFixed a bug when copying models with registered expressions.","category":"page"},{"location":"release_notes/#Other-44","page":"Release notes","title":"Other","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The documentation has been significantly overhauled. It now has distinct sections for the manual, API reference, and examples. The existing examples in /examples have now been moved to /docs/src/examples and rewritten using Literate.jl, and they are now included in the documentation.\nJuliaFormatter has been applied to most of the codebase. This will continue to roll out over time, as we fix upstream issues in the formatter, and will eventually become compulsory.\nThe root cause of a large number of method invalidations has been resolved.\nWe switched continuous integration from Travis and Appveyor to GitHub Actions.","category":"page"},{"location":"release_notes/#[Version-0.21.5](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.5)-(September-18,-2020)","page":"Release notes","title":"Version 0.21.5 (September 18, 2020)","text":"","category":"section"},{"location":"release_notes/#Fixed-48","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed deprecation warnings\nThrow DimensionMismatch for incompatibly sized functions and sets\nUnify treatment of keys(x) on JuMP containers","category":"page"},{"location":"release_notes/#[Version-0.21.4](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.4)-(September-14,-2020)","page":"Release notes","title":"Version 0.21.4 (September 14, 2020)","text":"","category":"section"},{"location":"release_notes/#Added-35","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Add debug info when adding unsupported constraints\nAdd relax_integrality for solving continuous relaxation\nAllow querying constraint conflicts","category":"page"},{"location":"release_notes/#Fixed-49","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Dispatch on Real for MOI.submit\nImplement copy for CustomSet in tests\nDon't export private macros\nFix invalid assertion in nonlinear\nError if constraint has NaN right-hand side\nImprove speed of tests\nLots of work modularizing files in /test\nImprove line numbers in macro error messages\nPrint nonlinear subexpressions\nVarious documentation updates\nDependency updates:\nDatastructures 0.18\nMathOptFormat v0.5\nPrep for MathOptInterface 0.9.15","category":"page"},{"location":"release_notes/#[Version-0.21.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.3)-(June-18,-2020)","page":"Release notes","title":"Version 0.21.3 (June 18, 2020)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added Special Order Sets (SOS1 and SOS2) to JuMP with default weights to ease the creation of such constraints (#2212).\nAdded functions simplex_iterations, barrier_iterations and node_count (#2201).\nAdded function reduced_cost (#2205).\nImplemented callback_value for affine and quadratic expressions (#2231).\nSupport MutableArithmetics.Zero in objective and constraints (#2219).\nDocumentation improvements:\nMention tutorials in the docs (#2223).\nUpdate COIN-OR links (#2242).\nExplicit link to the documentation of MOI.FileFormats (#2253).\nTypo fixes (#2261).\nContainers improvements:\nFix Base.map for DenseAxisArray (#2235).\nThrow BoundsError if number of indices is incorrect for DenseAxisArray and SparseAxisArray (#2240).\nExtensibility improvements:\nImplement a set_objective method fallback that redirects to set_objective_sense and set_objective_function (#2247).\nAdd parse_constraint method with arbitrary number of arguments (#2051).\nAdd parse_constraint_expr and parse_constraint_head (#2228).","category":"page"},{"location":"release_notes/#[Version-0.21.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.2)-(April-2,-2020)","page":"Release notes","title":"Version 0.21.2 (April 2, 2020)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added relative_gap() to access MOI.RelativeGap() attribute (#2199).\nDocumentation fixes:\nAdded link to source for docstrings in the documentation (#2207).\nAdded docstring for @variables macro (#2216).\nTypo fixes (#2177, #2184, #2182).\nImplementation of methods for Base functions:\nImplemented Base.empty! for JuMP.Model (#2198).\nImplemented Base.conj for JuMP scalar types (#2209).","category":"page"},{"location":"release_notes/#Fixed-50","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixed sum of expression with scalar product in macro (#2178).\nFixed writing of nonlinear models to MathOptFormat (#2181).\nFixed construction of empty SparseAxisArray (#2179).\nFixed constraint with zero function (#2188).","category":"page"},{"location":"release_notes/#[Version-0.21.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.1)-(Feb-18,-2020)","page":"Release notes","title":"Version 0.21.1 (Feb 18, 2020)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved the clarity of the with_optimizer deprecation warning.","category":"page"},{"location":"release_notes/#[Version-0.21.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.21.0)-(Feb-16,-2020)","page":"Release notes","title":"Version 0.21.0 (Feb 16, 2020)","text":"","category":"section"},{"location":"release_notes/#Breaking-6","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Deprecated with_optimizer (#2090, #2084, #2141). You can replace with_optimizer by either nothing, optimizer_with_attributes or a closure:\nreplace with_optimizer(Ipopt.Optimizer) by Ipopt.Optimizer.\nreplace with_optimizer(Ipopt.Optimizer, max_cpu_time=60.0) by optimizer_with_attributes(Ipopt.Optimizer, \"max_cpu_time\" => 60.0).\nreplace with_optimizer(Gurobi.Optimizer, env) by () -> Gurobi.Optimizer(env).\nreplace with_optimizer(Gurobi.Optimizer, env, Presolve=0) by optimizer_with_attributes(() -> Gurobi.Optimizer(env), \"Presolve\" => 0).\nalternatively to optimizer_with_attributes, you can also set the attributes separately with set_optimizer_attribute.\nRenamed set_parameter and set_parameters to set_optimizer_attribute and set_optimizer_attributes (#2150).\nBroadcast should now be explicit inside macros. @SDconstraint(model, x >= 1) and @constraint(model, x + 1 in SecondOrderCone()) now throw an error instead of broadcasting 1 along the dimension of x (#2107).\n@SDconstraint(model, x >= 0) is now equivalent to @constraint(model, x in PSDCone()) instead of @constraint(model, (x .- 0) in PSDCone()) (#2107).\nThe macros now create the containers with map instead of for loops, as a consequence, containers created by @expression can now have any element type and containers of constraint references now have concrete element types when possible. This fixes a long-standing issue where @expression could only be used to generate a collection of linear expressions. Now it works for quadratic expressions as well (#2070).\nCalling deepcopy(::AbstractModel) now throws an error.\nThe constraint name is now printed in the model string (#2108).","category":"page"},{"location":"release_notes/#Added-36","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Added support for solver-independent and solver-specific callbacks (#2101).\nAdded write_to_file and read_from_file, supported formats are CBF, LP, MathOptFormat, MPS and SDPA (#2114).\nAdded support for complementarity constraints (#2132).\nAdded support for indicator constraints (#2092).\nAdded support for querying multiple solutions with the result keyword (#2100).\nAdded support for constraining variables on creation (#2128).\nAdded method delete that deletes a vector of variables at once if it is supported by the underlying solver (#2135).\nThe arithmetic between JuMP expression has be refactored into the MutableArithmetics package (#2107).\nImproved error on complex values in NLP (#1978).\nAdded an example of column generation (#2010).","category":"page"},{"location":"release_notes/#Fixed-51","page":"Release notes","title":"Fixed","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Incorrect coefficients generated when using Symmetric variables (#2102)","category":"page"},{"location":"release_notes/#[Version-0.20.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.20.1)-(Oct-18,-2019)","page":"Release notes","title":"Version 0.20.1 (Oct 18, 2019)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Add sections on @variables and @constraints in the documentation (#2062).\nFixed product of sparse matrices for Julia v1.3 (#2063).\nAdded set_objective_coefficient to modify the coefficient of a linear term of the objective function (#2008).\nAdded set_time_limit_sec, unset_time_limit_sec and time_limit_sec to set and query the time limit for the solver in seconds (#2053).","category":"page"},{"location":"release_notes/#[Version-0.20.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.20.0)-(Aug-24,-2019)","page":"Release notes","title":"Version 0.20.0 (Aug 24, 2019)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Documentation updates.\nNumerous bug fixes.\nBetter error messages (#1977, #1978, #1997, #2017).\nPerformance improvements (#1947, #2032).\nAdded LP sensitivity summary functions lp_objective_perturbation_range and lp_rhs_perturbation_range (#1917).\nAdded functions dual_objective_value, raw_status and set_parameter.\nAdded function set_objective_coefficient to modify the coefficient of a linear term of the objective (#2008).\nAdded functions set_normalized_rhs, normalized_rhs, and add_to_function_constant to modify and get the constant part of a constraint (#1935, #1960).\nAdded functions set_normalized_coefficient and normalized_coefficient to modify and get the coefficient of a linear term of a constraint (#1935, #1960).\nNumerous other improvements in MOI 0.9, see the NEWS.md file of MOI for more details.","category":"page"},{"location":"release_notes/#[Version-0.19.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.19.2)-(June-8,-2019)","page":"Release notes","title":"Version 0.19.2 (June 8, 2019)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in derivatives that could arise in models with nested nonlinear subexpressions.","category":"page"},{"location":"release_notes/#[Version-0.19.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.19.1)-(May-12,-2019)","page":"Release notes","title":"Version 0.19.1 (May 12, 2019)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Usability and performance improvements.\nBug fixes.","category":"page"},{"location":"release_notes/#[Version-0.19.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.19.0)-(February-15,-2019)","page":"Release notes","title":"Version 0.19.0 (February 15, 2019)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"JuMP 0.19 contains significant breaking changes.","category":"page"},{"location":"release_notes/#Breaking-7","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"JuMP's abstraction layer for communicating with solvers changed from MathProgBase (MPB) to MathOptInterface (MOI). MOI addresses many longstanding design issues. (See @mlubin's slides from JuMP-dev 2018.) JuMP 0.19 is compatible only with solvers that have been updated for MOI. See the installation guide for a list of solvers that have and have not yet been updated.\nMost solvers have been renamed to PackageName.Optimizer. For example, GurobiSolver() is now Gurobi.Optimizer.\nSolvers are no longer added to a model via Model(solver = XXX(kwargs...)). Instead use Model(with_optimizer(XXX, kwargs...)). For example, Model(with_optimizer(Gurobi.Optimizer, OutputFlag=0)).\nJuMP containers (for example, the objects returned by @variable) have been redesigned. Containers.SparseAxisArray replaces JuMPDict, JuMPArray was rewritten (inspired by AxisArrays) and renamed Containers.DenseAxisArray, and you can now request a container type with the container= keyword to the macros. See the corresponding documentation for more details.\nThe statuses returned by solvers have changed. See the possible status values here. The MOI statuses are much richer than the MPB statuses and can be used to distinguish between previously indistinguishable cases (for example, did the solver have a feasible solution when it stopped because of the time limit?).\nStarting values are separate from result values. Use value to query the value of a variable in a solution. Use start_value and set_start_value to get and set an initial starting point provided to the solver. The solutions from previous solves are no longer automatically set as the starting points for the next solve.\nThe data structures for affine and quadratic expressions AffExpr and QuadExpr have changed. Internally, terms are stored in dictionaries instead of lists. Duplicate coefficients can no longer exist. Accessors and iteration methods have changed.\nJuMPNLPEvaluator no longer includes the linear and quadratic parts of the model in the evaluation calls. These are now handled separately to allow NLP solvers that support various types of constraints.\nJuMP solver-independent callbacks have been replaced by solver-specific callbacks. See your favorite solver for more details. (See the note below: No solver-specific callbacks are implemented yet.)\nThe norm() syntax is no longer recognized inside macros. Use the SecondOrderCone() set instead.\nJuMP no longer performs automatic transformation between special quadratic forms and second-order cone constraints. Support for these constraint classes depends on the solver.\nThe symbols :Min and :Max are no longer used as optimization senses. Instead, JuMP uses the OptimizationSense enum from MathOptInterface. @objective(model, Max, ...), @objective(model, Min, ...), @NLobjective(model, Max, ...), and @objective(model, Min, ...) remain valid, but @objective(m, :Max, ...) is no longer accepted.\nThe sign conventions for duals has changed in some cases for consistency with conic duality (see the documentation). The shadow_price helper method returns duals with signs that match conventional LP interpretations of dual values as sensitivities of the objective value to relaxations of constraints.\n@constraintref is no longer defined. Instead, create the appropriate container to hold constraint references manually. For example,\nconstraints = Dict() # Optionally, specify types for improved performance.\nfor i in 1:N\n constraints[i] = @constraint(model, ...)\nend\nThe lowerbound, upperbound, and basename keyword arguments to the @variable macro have been renamed to lower_bound, upper_bound, and base_name, for consistency with JuMP's new style recommendations.\nWe rely on broadcasting syntax to apply accessors to collections of variables, for example, value.(x) instead of getvalue(x) for collections. (Use value(x) when x is a scalar object.)","category":"page"},{"location":"release_notes/#Added-37","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Splatting (like f(x...)) is recognized in restricted settings in nonlinear expressions.\nSupport for deleting constraints and variables.\nThe documentation has been completely rewritten using docstrings and Documenter.\nSupport for modeling mixed conic and quadratic models (for example, conic models with quadratic objectives and bi-linear matrix inequalities).\nSignificantly improved support for modeling new types of constraints and for extending JuMP's macros.\nSupport for providing dual warm starts.\nImproved support for accessing solver-specific attributes (for example, the irreducible inconsistent subsystem).\nExplicit control of whether symmetry-enforcing constraints are added to PSD constraints.\nSupport for modeling exponential cones.\nSignificant improvements in internal code quality and testing.\nStyle and naming guidelines.\nDirect mode and manual mode provide explicit control over when copies of a model are stored or regenerated. See the corresponding documentation.","category":"page"},{"location":"release_notes/#Regressions","page":"Release notes","title":"Regressions","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"There are known regressions from JuMP 0.18 that will be addressed in a future release (0.19.x or later):","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Performance regressions in model generation (issue). Please file an issue anyway if you notice a significant performance regression. We have plans to address a number of performance issues, but we might not be aware of all of them.\nFast incremental NLP solves are not yet reimplemented (issue).\nWe do not yet have an implementation of solver-specific callbacks.\nThe column generation syntax in @variable has been removed (that is, the objective, coefficients, and inconstraints keyword arguments). Support for column generation will be re-introduced in a future release.\nThe ability to solve the continuous relaxation (that is, via solve(model; relaxation = true)) is not yet reimplemented (issue).","category":"page"},{"location":"release_notes/#[Version-0.18.5](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.18.5)-(December-1,-2018)","page":"Release notes","title":"Version 0.18.5 (December 1, 2018)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Support views in some derivative evaluation functions.\nImproved compatibility with PackageCompiler.","category":"page"},{"location":"release_notes/#[Version-0.18.4](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.18.4)-(October-8,-2018)","page":"Release notes","title":"Version 0.18.4 (October 8, 2018)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in model printing on Julia 0.7 and 1.0.","category":"page"},{"location":"release_notes/#[Version-0.18.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.18.3)-(October-1,-2018)","page":"Release notes","title":"Version 0.18.3 (October 1, 2018)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Add support for Julia v1.0 (Thanks @ExpandingMan)\nFix matrix expressions with quadratic functions (#1508)","category":"page"},{"location":"release_notes/#[Version-0.18.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.18.2)-(June-10,-2018)","page":"Release notes","title":"Version 0.18.2 (June 10, 2018)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in second-order derivatives when expressions are present (#1319)\nFix a bug in @constraintref (#1330)","category":"page"},{"location":"release_notes/#[Version-0.18.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.18.1)-(April-9,-2018)","page":"Release notes","title":"Version 0.18.1 (April 9, 2018)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix for nested tuple destructuring (#1193)\nPreserve internal model when relaxation=true (#1209)\nMinor bug fixes and updates for example","category":"page"},{"location":"release_notes/#[Version-0.18.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.18.0)-(July-27,-2017)","page":"Release notes","title":"Version 0.18.0 (July 27, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Drop support for Julia 0.5.\nUpdate for ForwardDiff 0.5.\nMinor bug fixes.","category":"page"},{"location":"release_notes/#[Version-0.17.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.17.1)-(June-9,-2017)","page":"Release notes","title":"Version 0.17.1 (June 9, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Use of constructconstraint! in @SDconstraint.\nMinor bug fixes.","category":"page"},{"location":"release_notes/#[Version-0.17.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.17.0)-(May-27,-2017)","page":"Release notes","title":"Version 0.17.0 (May 27, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Breaking change: Mixing quadratic and conic constraints is no longer supported.\nBreaking change: The getvariable and getconstraint functions are replaced by indexing on the corresponding symbol. For instance, to access the variable with name x, one should now write m[:x] instead of getvariable(m, :x). As a consequence, creating a variable and constraint with the same name now triggers a warning, and accessing one of them afterwards throws an error. This change is breaking only in the latter case.\nAddition of the getobjectivebound function that mirrors the functionality of the MathProgBase getobjbound function except that it takes into account transformations performed by JuMP.\nMinor bug fixes.","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The following changes are primarily of interest to developers of JuMP extensions:","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The new syntax @constraint(model, expr in Cone) creates the constraint ensuring that expr is inside Cone. The Cone argument is passed to constructconstraint! which enables the call to the dispatched to an extension.\nThe @variable macro now calls constructvariable! instead of directly calling the Variable constructor. Extra arguments and keyword arguments passed to @variable are passed to constructvariable! which enables the call to be dispatched to an extension.\nRefactor the internal function conicdata (used build the MathProgBase conic model) into smaller sub-functions to make these parts reusable by extensions.","category":"page"},{"location":"release_notes/#[Version-0.16.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.16.2)-(March-28,-2017)","page":"Release notes","title":"Version 0.16.2 (March 28, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Minor bug fixes and printing tweaks\nAddress deprecation warnings for Julia 0.6","category":"page"},{"location":"release_notes/#[Version-0.16.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.16.1)-(March-7,-2017)","page":"Release notes","title":"Version 0.16.1 (March 7, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Better support for AbstractArray in JuMP (Thanks @tkoolen)\nMinor bug fixes","category":"page"},{"location":"release_notes/#[Version-0.16.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.16.0)-(February-23,-2017)","page":"Release notes","title":"Version 0.16.0 (February 23, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Breaking change: JuMP no longer has a mechanism for selecting solvers by default (the previous mechanism was flawed and incompatible with Julia 0.6). Not specifying a solver before calling solve() will result in an error.\nBreaking change: User-defined functions are no longer global. The first argument to JuMP.register is now a JuMP Model object within whose scope the function will be registered. Calling JuMP.register without a Model now produces an error.\nBreaking change: Use the new JuMP.fix method to fix a variable to a value or to update the value to which a variable is fixed. Calling setvalue on a fixed variable now results in an error in order to avoid silent behavior changes. (Thanks @joaquimg)\nNonlinear expressions now print out similarly to linear/quadratic expressions (useful for debugging!)\nNew category keyword to @variable. Used for specifying categories of anonymous variables.\nCompatibility with Julia 0.6-dev.\nMinor fixes and improvements (Thanks @cossio, @ccoffrin, @blegat)","category":"page"},{"location":"release_notes/#[Version-0.15.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.15.1)-(January-31,-2017)","page":"Release notes","title":"Version 0.15.1 (January 31, 2017)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Bugfix for @LinearConstraints and friends","category":"page"},{"location":"release_notes/#[Version-0.15.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.15.0)-(December-22,-2016)","page":"Release notes","title":"Version 0.15.0 (December 22, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Julia 0.5.0 is the minimum required version for this release.\nDocument support for BARON solver\nEnable info callbacks in more states than before, for example, for recording solutions. New when argument to addinfocallback (#814, thanks @yeesian)\nImproved support for anonymous variables. This includes new warnings for potentially confusing use of the traditional non-anonymous syntax:\nWhen multiple variables in a model are given the same name\nWhen non-symbols are used as names, for example, @variable(m, x[1][1:N])\nImprovements in iterating over JuMP containers (#836, thanks @IssamT)\nSupport for writing variable names in .lp file output (Thanks @leethargo)\nSupport for querying duals to SDP problems (Thanks @blegat)\nThe comprehension syntax with curly braces sum{}, prod{}, and norm2{} has been deprecated in favor of Julia's native comprehension syntax sum(), prod() and norm() as previously announced. (For early adopters of the new syntax, norm2() was renamed to norm() without deprecation.)\nUnit tests rewritten to use Base.Test instead of FactCheck\nImproved support for operations with matrices of JuMP types (Thanks @ExpandingMan)\nThe syntax to halt a solver from inside a callback has changed from throw(CallbackAbort()) to return JuMP.StopTheSolver\nMinor bug fixes","category":"page"},{"location":"release_notes/#[Version-0.14.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.14.2)-(December-12,-2016)","page":"Release notes","title":"Version 0.14.2 (December 12, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Allow singleton anonymous variables (includes bugfix)","category":"page"},{"location":"release_notes/#[Version-0.14.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.14.1)-(September-12,-2016)","page":"Release notes","title":"Version 0.14.1 (September 12, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"More consistent handling of states in informational callbacks, includes a new when parameter to addinfocallback for specifying in which state an informational callback should be called.","category":"page"},{"location":"release_notes/#[Version-0.14.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.14.0)-(August-7,-2016)","page":"Release notes","title":"Version 0.14.0 (August 7, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Compatibility with Julia 0.5 and ForwardDiff 0.2\nSupport for \"anonymous\" variables, constraints, expressions, and parameters, for example, x = @variable(m, [1:N]) instead of @variable(m, x[1:N])\nSupport for retrieving constraints from a model by name via getconstraint\n@NLconstraint now returns constraint references (as expected).\nSupport for vectorized expressions within lazy constraints\nOn Julia 0.5, parse new comprehension syntax sum(x[i] for i in 1:N if isodd(i)) instead of sum{ x[i], i in 1:N; isodd(i) }. The old syntax with curly braces will be deprecated in JuMP 0.15.\nNow possible to provide nonlinear expressions as \"raw\" Julia Expr objects instead of using JuMP's nonlinear macros. This input format is useful for programmatically generated expressions.\ns/Mathematical Programming/Mathematical Optimization/\nSupport for local cuts (Thanks to @madanim, Mehdi Madani)\nDocument Xpress interface developed by @joaquimg, Joaquim Dias Garcia\nMinor bug and deprecation fixes (Thanks @odow, @jrevels)","category":"page"},{"location":"release_notes/#[Version-0.13.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.13.2)-(May-16,-2016)","page":"Release notes","title":"Version 0.13.2 (May 16, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Compatibility update for MathProgBase","category":"page"},{"location":"release_notes/#[Version-0.13.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.13.1)-(May-3,-2016)","page":"Release notes","title":"Version 0.13.1 (May 3, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix broken deprecation for registerNLfunction.","category":"page"},{"location":"release_notes/#[Version-0.13.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.13.0)-(April-29,-2016)","page":"Release notes","title":"Version 0.13.0 (April 29, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Most exported methods and macros have been renamed to avoid camelCase. See the list of changes here. There is a 1-1 mapping from the old names to the new, and it is safe to simply replace the names to update existing models.\nSpecify variable lower/upper bounds in @variable using the lowerbound and upperbound keyword arguments.\nChange name printed for variable using the basename keyword argument to @variable.\nNew @variables macro allows multi-line declaration of groups of variables.\nA number of solver methods previously available only through MathProgBase are now exposed directly in JuMP. The fix was recorded live.\nCompatibility fixes with Julia 0.5.\nThe \"end\" indexing syntax is no longer supported within JuMPArrays which do not use 1-based indexing until upstream issues are resolved, see here.","category":"page"},{"location":"release_notes/#[Version-0.12.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.12.2)-(March-9,-2016)","page":"Release notes","title":"Version 0.12.2 (March 9, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Small fixes for nonlinear optimization","category":"page"},{"location":"release_notes/#[Version-0.12.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.12.1)-(March-1,-2016)","page":"Release notes","title":"Version 0.12.1 (March 1, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a regression in slicing for JuMPArrays (when not using 1-based indexing)","category":"page"},{"location":"release_notes/#[Version-0.12.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.12.0)-(February-27,-2016)","page":"Release notes","title":"Version 0.12.0 (February 27, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"The automatic differentiation functionality has been completely rewritten with a number of user-facing changes:\n@defExpr and @defNLExpr now take the model as the first argument. The previous one-argument version of @defExpr is deprecated; all expressions should be named. For example, replace @defExpr(2x+y) with @defExpr(jump_model, my_expr, 2x+y).\nJuMP no longer uses Julia's variable binding rules for efficiently re-solving a sequence of nonlinear models. Instead, we have introduced nonlinear parameters. This is a breaking change, so we have added a warning message when we detect models that may depend on the old behavior.\nSupport for user-defined functions integrated within nonlinear JuMP expressions.\nReplaced iteration over AffExpr with Number-like scalar iteration; previous iteration behavior is now available via linearterms(::AffExpr).\nStopping the solver via throw(CallbackAbort()) from a callback no longer triggers an exception. Instead, solve() returns UserLimit status.\ngetDual() now works for conic problems (Thanks @emreyamangil.)","category":"page"},{"location":"release_notes/#[Version-0.11.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.11.3)-(February-4,-2016)","page":"Release notes","title":"Version 0.11.3 (February 4, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Bug-fix for problems with quadratic objectives and semidefinite constraints","category":"page"},{"location":"release_notes/#[Version-0.11.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.11.2)-(January-14,-2016)","page":"Release notes","title":"Version 0.11.2 (January 14, 2016)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Compatibility update for Mosek","category":"page"},{"location":"release_notes/#[Version-0.11.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.11.1)-(December-1,-2015)","page":"Release notes","title":"Version 0.11.1 (December 1, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Remove usage of @compat in tests.\nFix updating quadratic objectives for nonlinear models.","category":"page"},{"location":"release_notes/#[Version-0.11.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.11.0)-(November-30,-2015)","page":"Release notes","title":"Version 0.11.0 (November 30, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Julia 0.4.0 is the minimum required version for this release.\nFix for scoping semantics of index variables in sum{}. Index variables no longer leak into the surrounding scope.\nAddition of the solve(m::Model, relaxation=true) keyword argument to solve the standard continuous relaxation of model m\nThe getConstraintBounds() method allows access to the lower and upper bounds of all constraints in a (nonlinear) model.\nUpdate for breaking changes in MathProgBase","category":"page"},{"location":"release_notes/#[Version-0.10.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.10.3)-(November-20,-2015)","page":"Release notes","title":"Version 0.10.3 (November 20, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a rare error when parsing quadratic expressions\nFix Variable() constructor with default arguments\nDetect unrecognized keywords in solve()","category":"page"},{"location":"release_notes/#[Version-0.10.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.10.2)-(September-28,-2015)","page":"Release notes","title":"Version 0.10.2 (September 28, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix for deprecation warnings","category":"page"},{"location":"release_notes/#[Version-0.10.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.10.1)-(September-3,-2015)","page":"Release notes","title":"Version 0.10.1 (September 3, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixes for ambiguity warnings.\nFix for breaking change in precompilation syntax in Julia 0.4-pre","category":"page"},{"location":"release_notes/#[Version-0.10.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.10.0)-(August-31,-2015)","page":"Release notes","title":"Version 0.10.0 (August 31, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Support (on Julia 0.4 and later) for conditions in indexing @defVar and @addConstraint constructs, for example, @defVar(m, x[i=1:5,j=1:5; i+j >= 3])\nSupport for vectorized operations on Variables and expressions. See the documentation for details.\nNew getVar() method to access variables in a model by name\nSupport for semidefinite programming.\nDual solutions are now available for general nonlinear problems. You may call getDual on a reference object for a nonlinear constraint, and getDual on a variable object for Lagrange multipliers from active bounds.\nIntroduce warnings for two common performance traps: too many calls to getValue() on a collection of variables and use of the + operator in a loop to sum expressions.\nSecond-order cone constraints can be written directly with the norm() and norm2{} syntax.\nImplement MathProgBase interface for querying Hessian-vector products.\nIteration over JuMPContainers is deprecated; instead, use the keys and values functions, and zip(keys(d),values(d)) for the old behavior.\n@defVar returns Array{Variable,N} when each of N index sets are of the form 1:nᵢ.\nModule precompilation: on Julia 0.4 and later, using JuMP is now much faster.","category":"page"},{"location":"release_notes/#[Version-0.9.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.9.3)-(August-11,-2015)","page":"Release notes","title":"Version 0.9.3 (August 11, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fixes for FactCheck testing on julia v0.4.","category":"page"},{"location":"release_notes/#[Version-0.9.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.9.2)-(June-27,-2015)","page":"Release notes","title":"Version 0.9.2 (June 27, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix bug in @addConstraints.","category":"page"},{"location":"release_notes/#[Version-0.9.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.9.1)-(April-25,-2015)","page":"Release notes","title":"Version 0.9.1 (April 25, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix for Julia 0.4-dev.\nSmall infrastructure improvements for extensions.","category":"page"},{"location":"release_notes/#[Version-0.9.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.9.0)-(April-18,-2015)","page":"Release notes","title":"Version 0.9.0 (April 18, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Comparison operators for constructing constraints (for example, 2x >= 1) have been deprecated. Instead, construct the constraints explicitly in the @addConstraint macro to add them to the model, or in the @LinearConstraint macro to create a stand-alone linear constraint instance.\ngetValue() method implemented to compute the value of a nonlinear subexpression\nJuMP is now released under the Mozilla Public License version 2.0 (was previously LGPL). MPL is a copyleft license which is less restrictive than LGPL, especially for embedding JuMP within other applications.\nA number of performance improvements in ReverseDiffSparse for computing derivatives.\nMathProgBase.getsolvetime(m) now returns the solution time reported by the solver, if available. (Thanks @odow, Oscar Dowson)\nFormatting fix for LP format output. (Thanks @sbebo, Leonardo Taccari).","category":"page"},{"location":"release_notes/#[Version-0.8.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.8.0)-(February-17,-2015)","page":"Release notes","title":"Version 0.8.0 (February 17, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Nonlinear subexpressions now supported with the @defNLExpr macro.\nSCS supported for solving second-order conic problems.\nsetXXXCallback family deprecated in favor of addXXXCallback.\nMultiple callbacks of the same type can be registered.\nAdded support for informational callbacks via addInfoCallback.\nA CallbackAbort exception can be thrown from callback to safely exit optimization.","category":"page"},{"location":"release_notes/#[Version-0.7.4](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.7.4)-(February-4,-2015)","page":"Release notes","title":"Version 0.7.4 (February 4, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Reduced costs and linear constraint duals are now accessible when quadratic constraints are present.\nTwo-sided nonlinear constraints are supported.\nMethods for accessing the number of variables and constraints in a model are renamed.\nNew default procedure for setting initial values in nonlinear optimization: project zero onto the variable bounds.\nSmall bug fixes.","category":"page"},{"location":"release_notes/#[Version-0.7.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.7.3)-(January-14,-2015)","page":"Release notes","title":"Version 0.7.3 (January 14, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a method ambiguity conflict with Compose.jl (cosmetic fix)","category":"page"},{"location":"release_notes/#[Version-0.7.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.7.2)-(January-9,-2015)","page":"Release notes","title":"Version 0.7.2 (January 9, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in sum(::JuMPDict)\nAdded the setCategory function to change a variables category (for example, continuous or binary)","category":"page"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"after construction, and getCategory to retrieve the variable category.","category":"page"},{"location":"release_notes/#[Version-0.7.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.7.1)-(January-2,-2015)","page":"Release notes","title":"Version 0.7.1 (January 2, 2015)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in parsing linear expressions in macros. Affects only Julia 0.4 and later.","category":"page"},{"location":"release_notes/#[Version-0.7.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.7.0)-(December-29,-2014)","page":"Release notes","title":"Version 0.7.0 (December 29, 2014)","text":"","category":"section"},{"location":"release_notes/#Linear/quadratic/conic-programming","page":"Release notes","title":"Linear/quadratic/conic programming","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Breaking change: The syntax for column-wise model generation has been changed to use keyword arguments in @defVar.\nOn Julia 0.4 and later, variables and coefficients may be multiplied in any order within macros. That is, variable*coefficient is now valid syntax.\nECOS supported for solving second-order conic problems.","category":"page"},{"location":"release_notes/#_nonlinear_programming_release_notes","page":"Release notes","title":"Nonlinear programming","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Support for skipping model generation when solving a sequence of nonlinear models with changing data.\nFix a memory leak when solving a sequence of nonlinear models.\nThe @addNLConstraint macro now supports the three-argument version to define sets of nonlinear constraints.\nKNITRO supported as a nonlinear solver.\nSpeed improvements for model generation.\nThe @addNLConstraints macro supports adding multiple (groups of) constraints at once. Syntax is similar to @addConstraints.\nDiscrete variables allowed in nonlinear problems for solvers which support them (currently only KNITRO).","category":"page"},{"location":"release_notes/#General","page":"Release notes","title":"General","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Starting values for variables may now be specified with @defVar(m, x, start=value).\nThe setSolver function allows users to change the solver subsequent to model creation.\nSupport for \"fixed\" variables via the @defVar(m, x == 1) syntax.\nUnit tests rewritten to use FactCheck.jl, improved testing across solvers.","category":"page"},{"location":"release_notes/#[Version-0.6.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.6.3)-(October-19,-2014)","page":"Release notes","title":"Version 0.6.3 (October 19, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in multiplying two AffExpr objects.","category":"page"},{"location":"release_notes/#[Version-0.6.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.6.2)-(October-11,-2014)","page":"Release notes","title":"Version 0.6.2 (October 11, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Further improvements and bug fixes for printing.\nFixed a bug in @defExpr.\nSupport for accessing expression graphs through the MathProgBase NLP interface.","category":"page"},{"location":"release_notes/#[Version-0.6.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.6.1)-(September-19,-2014)","page":"Release notes","title":"Version 0.6.1 (September 19, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improvements and bug fixes for printing.","category":"page"},{"location":"release_notes/#[Version-0.6.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.6.0)-(September-9,-2014)","page":"Release notes","title":"Version 0.6.0 (September 9, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Julia 0.3.0 is the minimum required version for this release.\nbuildInternalModel(m::Model) added to build solver-level model in memory without optimizing.\nDeprecate load_model_only keyword argument to solve.\nAdd groups of constraints with @addConstraints macro.\nUnicode operators now supported, including ∑ for sum, ∏ for prod, and ≤/≥\nQuadratic constraints supported in @addConstraint macro.\nQuadratic objectives supported in @setObjective macro.\nMathProgBase solver-independent interface replaces Ipopt-specific interface for nonlinear problems\nBreaking change: IpoptOptions no longer supported to specify solver options, use m = Model(solver=IpoptSolver(options...)) instead.\nNew solver interfaces: ECOS, NLopt, and nonlinear support for MOSEK\nNew option to control whether the lazy constraint callback is executed at each node in the B&B tree or just when feasible solutions are found\nAdd support for semicontinuous and semi-integer variables for those solvers that support them.\nAdd support for index dependencies (for example, triangular indexing) in @defVar, @addConstraint, and @defExpr (for example, @defVar(m, x[i=1:10,j=i:10])).\nThis required some changes to the internal structure of JuMP containers, which may break code that explicitly stored JuMPDict objects.","category":"page"},{"location":"release_notes/#[Version-0.5.8](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.8)-(September-24,-2014)","page":"Release notes","title":"Version 0.5.8 (September 24, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug with specifying solvers (affects Julia 0.2 only)","category":"page"},{"location":"release_notes/#[Version-0.5.7](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.7)-(September-5,-2014)","page":"Release notes","title":"Version 0.5.7 (September 5, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in printing models","category":"page"},{"location":"release_notes/#[Version-0.5.6](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.6)-(September-2,-2014)","page":"Release notes","title":"Version 0.5.6 (September 2, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Add support for semicontinuous and semi-integer variables for those solvers that support them.\nBreaking change: Syntax for Variable() constructor has changed (use of this interface remains discouraged)\nUpdate for breaking changes in MathProgBase","category":"page"},{"location":"release_notes/#[Version-0.5.5](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.5)-(July-6,-2014)","page":"Release notes","title":"Version 0.5.5 (July 6, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix bug with problem modification: adding variables that did not appear in existing constraints or objective.","category":"page"},{"location":"release_notes/#[Version-0.5.4](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.4)-(June-19,-2014)","page":"Release notes","title":"Version 0.5.4 (June 19, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Update for breaking change in MathProgBase which reduces loading times for using JuMP\nFix error when MIPs not solved to optimality","category":"page"},{"location":"release_notes/#[Version-0.5.3](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.3)-(May-21,-2014)","page":"Release notes","title":"Version 0.5.3 (May 21, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Update for breaking change in ReverseDiffSparse","category":"page"},{"location":"release_notes/#[Version-0.5.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.2)-(May-9,-2014)","page":"Release notes","title":"Version 0.5.2 (May 9, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix compatibility with Julia 0.3 prerelease","category":"page"},{"location":"release_notes/#[Version-0.5.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.1)-(May-5,-2014)","page":"Release notes","title":"Version 0.5.1 (May 5, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix a bug in coefficient handling inside lazy constraints and user cuts","category":"page"},{"location":"release_notes/#[Version-0.5.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.5.0)-(May-2,-2014)","page":"Release notes","title":"Version 0.5.0 (May 2, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Support for nonlinear optimization with exact, sparse second-order derivatives automatically computed. Ipopt is currently the only solver supported.\ngetValue for AffExpr and QuadExpr\nBreaking change: getSolverModel replaced by getInternalModel, which returns the internal MathProgBase-level model\nGroups of constraints can be specified with @addConstraint (see documentation for details). This is not a breaking change.\ndot(::JuMPDict{Variable},::JuMPDict{Variable}) now returns the corresponding quadratic expression.","category":"page"},{"location":"release_notes/#[Version-0.4.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.4.1)-(March-24,-2014)","page":"Release notes","title":"Version 0.4.1 (March 24, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Fix bug where change in objective sense was ignored when re-solving a model.\nFix issue with handling zero coefficients in AffExpr.","category":"page"},{"location":"release_notes/#[Version-0.4.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.4.0)-(March-10,-2014)","page":"Release notes","title":"Version 0.4.0 (March 10, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Support for SOS1 and SOS2 constraints.\nSolver-independent callback for user heuristics.\ndot and sum implemented for JuMPDict objects. Now you can say @addConstraint(m, dot(a,x) <= b).\nDevelopers: support for extensions to JuMP. See definition of Model in src/JuMP.jl for more details.\nOption to construct the low-level model before optimizing.","category":"page"},{"location":"release_notes/#[Version-0.3.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.3.2)-(February-17,-2014)","page":"Release notes","title":"Version 0.3.2 (February 17, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Improved model printing\nPreliminary support for IJulia output","category":"page"},{"location":"release_notes/#[Version-0.3.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.3.1)-(January-30,-2014)","page":"Release notes","title":"Version 0.3.1 (January 30, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Documentation updates\nSupport for MOSEK\nCPLEXLink renamed to CPLEX","category":"page"},{"location":"release_notes/#[Version-0.3.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.3.0)-(January-21,-2014)","page":"Release notes","title":"Version 0.3.0 (January 21, 2014)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Unbounded/infeasibility rays: getValue() will return the corresponding components of an unbounded ray when a model is unbounded, if supported by the selected solver. getDual() will return an infeasibility ray (Farkas proof) if a model is infeasible and the selected solver supports this feature.\nSolver-independent callbacks for user generated cuts.\nUse new interface for solver-independent QCQP.\nsetlazycallback renamed to setLazyCallback for consistency.","category":"page"},{"location":"release_notes/#[Version-0.2.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.2.0)-(December-15,-2013)","page":"Release notes","title":"Version 0.2.0 (December 15, 2013)","text":"","category":"section"},{"location":"release_notes/#Breaking-8","page":"Release notes","title":"Breaking","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Objective sense is specified in setObjective instead of in the Model constructor.\nlpsolver and mipsolver merged into single solver option.","category":"page"},{"location":"release_notes/#Added-38","page":"Release notes","title":"Added","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Problem modification with efficient LP restarts and MIP warm-starts.\nRelatedly, column-wise modeling now supported.\nSolver-independent callbacks supported. Currently we support only a \"lazy constraint\" callback, which works with Gurobi, CPLEX, and GLPK. More callbacks coming soon.","category":"page"},{"location":"release_notes/#[Version-0.1.2](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.1.2)-(November-16,-2013)","page":"Release notes","title":"Version 0.1.2 (November 16, 2013)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Bug fixes for printing, improved error messages.\nAllow AffExpr to be used in macros; for example, ex = y + z; @addConstraint(m, x + 2*ex <= 3)","category":"page"},{"location":"release_notes/#[Version-0.1.1](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.1.1)-(October-23,-2013)","page":"Release notes","title":"Version 0.1.1 (October 23, 2013)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Update for solver specification API changes in MathProgBase.","category":"page"},{"location":"release_notes/#[Version-0.1.0](https://github.com/jump-dev/JuMP.jl/releases/tag/v0.1.0)-(October-3,-2013)","page":"Release notes","title":"Version 0.1.0 (October 3, 2013)","text":"","category":"section"},{"location":"release_notes/","page":"Release notes","title":"Release notes","text":"Initial public release.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"CurrentModule = JuMP\nDocTestSetup = quote\n using JuMP\n import HiGHS\nend\nDocTestFilters = [r\"≤|<=\", r\"≥|>=\", r\" == | = \", r\" ∈ | in \", r\"MathOptInterface|MOI\"]","category":"page"},{"location":"manual/constraints/#jump_constraints","page":"Constraints","title":"Constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"JuMP is based on the MathOptInterface (MOI) API. Because of this, JuMP uses the following standard form to represent problems:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"beginalign\n min_x in mathbbR^n f_0(x)\n \n textst f_i(x) in mathcalS_i i = 1 ldots m\nendalign","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Each constraint, f_i(x) in mathcalS_i, is composed of a function and a set. For example, instead of calling a^top x le b a less-than-or-equal-to constraint, we say that it is a scalar-affine-in-less-than constraint, where the function a^top x belongs to the less-than set (-infty b. We use the shorthand function-in-set to refer to constraints composed of different types of functions and sets.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"This page explains how to write various types of constraints in JuMP. For nonlinear constraints, see Nonlinear Modeling instead.","category":"page"},{"location":"manual/constraints/#Add-a-constraint","page":"Constraints","title":"Add a constraint","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Add a constraint to a JuMP model using the @constraint macro. The syntax to use depends on the type of constraint you wish to add.","category":"page"},{"location":"manual/constraints/#Add-a-linear-constraint","page":"Constraints","title":"Add a linear constraint","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Create linear constraints using the @constraint macro:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3]);\n\njulia> @constraint(model, c1, sum(x) <= 1)\nc1 : x[1] + x[2] + x[3] ≤ 1\n\njulia> @constraint(model, c2, x[1] + 2 * x[3] >= 2)\nc2 : x[1] + 2 x[3] ≥ 2\n\njulia> @constraint(model, c3, sum(i * x[i] for i in 1:3) == 3)\nc3 : x[1] + 2 x[2] + 3 x[3] = 3\n\njulia> @constraint(model, c4, 4 <= 2 * x[2] <= 5)\nc4 : 2 x[2] ∈ [4, 5]","category":"page"},{"location":"manual/constraints/#Normalization","page":"Constraints","title":"Normalization","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"JuMP normalizes constraints by moving all of the terms containing variables to the left-hand side and all of the constant terms to the right-hand side. Thus, we get:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, c, 2x + 1 <= 4x + 4)\nc : -2 x ≤ 3","category":"page"},{"location":"manual/constraints/#quad_constraints","page":"Constraints","title":"Add a quadratic constraint","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In addition to affine functions, JuMP also supports constraints with quadratic terms. For example:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[i=1:2])\n2-element Vector{VariableRef}:\n x[1]\n x[2]\n\njulia> @variable(model, t >= 0)\nt\n\njulia> @constraint(model, my_q, x[1]^2 + x[2]^2 <= t^2)\nmy_q : x[1]² + x[2]² - t² ≤ 0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"tip: Tip\nBecause solvers can take advantage of the knowledge that a constraint is quadratic, prefer adding quadratic constraints using @constraint, rather than @NLconstraint.","category":"page"},{"location":"manual/constraints/#Vectorized-constraints","page":"Constraints","title":"Vectorized constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"You can also add constraints to JuMP using vectorized linear algebra. For example:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[i=1:2])\n2-element Vector{VariableRef}:\n x[1]\n x[2]\n\njulia> A = [1 2; 3 4]\n2×2 Matrix{Int64}:\n 1 2\n 3 4\n\njulia> b = [5, 6]\n2-element Vector{Int64}:\n 5\n 6\n\njulia> @constraint(model, con_vector, A * x == b)\ncon_vector : [x[1] + 2 x[2] - 5, 3 x[1] + 4 x[2] - 6] ∈ Zeros()\n\njulia> @constraint(model, con_scalar, A * x .== b)\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.EqualTo{Float64}}, ScalarShape}}:\n con_scalar : x[1] + 2 x[2] = 5\n con_scalar : 3 x[1] + 4 x[2] = 6","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The two constraints, == and .== are similar, but subtly different. The first creates a single constraint that is a MOI.VectorAffineFunction in MOI.Zeros constraint. The second creates a vector of MOI.ScalarAffineFunction in MOI.EqualTo constraints.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Which formulation to choose depends on the solver, and what you want to do with the constraint object con_vector or con_scalar.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If you are using a conic solver, expect the dual of con_vector to be a Vector{Float64}, and do not intend to delete a row in the constraint, choose the == formulation.\nIf you are using a solver that expects a list of scalar constraints, for example HiGHS, or you wish to delete part of the constraint or access a single row of the constraint, for example, dual(con_scalar[2]), then use the broadcast .==.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"JuMP reformulates both constraints into the other form if needed by the solver, but choosing the right format for a particular solver is more efficient.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"You can also use <=, .<= , >=, and .>= as comparison operators in the constraint.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, A * x <= b)\n[x[1] + 2 x[2] - 5, 3 x[1] + 4 x[2] - 6] ∈ Nonpositives()\n\njulia> @constraint(model, A * x .<= b)\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n x[1] + 2 x[2] ≤ 5\n 3 x[1] + 4 x[2] ≤ 6\n\njulia> @constraint(model, A * x >= b)\n[x[1] + 2 x[2] - 5, 3 x[1] + 4 x[2] - 6] ∈ Nonnegatives()\n\njulia> @constraint(model, A * x .>= b)\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.GreaterThan{Float64}}, ScalarShape}}:\n x[1] + 2 x[2] ≥ 5\n 3 x[1] + 4 x[2] ≥ 6","category":"page"},{"location":"manual/constraints/#Matrix-inequalities","page":"Constraints","title":"Matrix inequalities","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Inequalities between matrices are not supported, due to the common ambiguity between elementwise inequalities and a PSDCone constraint.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2, 1:2], Symmetric);\n\njulia> @variable(model, y[1:2, 1:2], Symmetric);\n\njulia> @constraint(model, x >= y)\nERROR: At none:1: `@constraint(model, x >= y)`:\nThe syntax `x >= y` is ambiguous for matrices because we cannot tell if\nyou intend a positive semidefinite constraint or an elementwise\ninequality.\n\nTo create a positive semidefinite constraint, pass `PSDCone()` or\n`HermitianPSDCone()`:\n\n```julia\n@constraint(model, x >= y, PSDCone())\n```\n\nTo create an element-wise inequality, pass `Nonnegatives()`, or use\nbroadcasting:\n\n```julia\n@constraint(model, x >= y, Nonnegatives())\n# or\n@constraint(model, x .>= y)\n```\nStacktrace:\n[...]","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Instead, use the Set inequality syntax to specify a set like PSDCone or Nonnegatives:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x >= y, PSDCone())\n[x[1,1] - y[1,1] x[1,2] - y[1,2]\n ⋯ x[2,2] - y[2,2]] ∈ PSDCone()\n\njulia> @constraint(model, x >= y, Nonnegatives())\n[x[1,1] - y[1,1] x[1,2] - y[1,2]\n ⋯ x[2,2] - y[2,2]] ∈ Nonnegatives()\n\njulia> @constraint(model, x >= y, Nonpositives())\n[x[1,1] - y[1,1] x[1,2] - y[1,2]\n ⋯ x[2,2] - y[2,2]] ∈ Nonpositives()\n\njulia> @constraint(model, x >= y, Zeros())\n[x[1,1] - y[1,1] x[1,2] - y[1,2]\n ⋯ x[2,2] - y[2,2]] ∈ Zeros()","category":"page"},{"location":"manual/constraints/#Special-cases","page":"Constraints","title":"Special cases","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"There are two exceptions: if the result of the left-hand side minus the right-hand side is a LinearAlgebra.Symmetric matrix or a LinearAlgebra.Hermitian matrix, you may use the non-broadcasting equality syntax:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> using LinearAlgebra\n\njulia> model = Model();\n\njulia> @variable(model, X[1:2, 1:2], Symmetric)\n2×2 Symmetric{VariableRef, Matrix{VariableRef}}:\n X[1,1] X[1,2]\n X[1,2] X[2,2]\n\njulia> @constraint(model, X == LinearAlgebra.I)\n[X[1,1] - 1 X[1,2]\n ⋯ X[2,2] - 1] ∈ Zeros()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"This will add only three rows to the constraint matrix because the symmetric constraints are redundant. In contrast, the broadcasting syntax adds four linear constraints:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, X .== LinearAlgebra.I)\n2×2 Matrix{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.EqualTo{Float64}}, ScalarShape}}:\n X[1,1] = 1 X[1,2] = 0\n X[1,2] = 0 X[2,2] = 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The same holds for LinearAlgebra.Hermitian matrices:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> using LinearAlgebra\n\njulia> model = Model();\n\njulia> @variable(model, X[1:2, 1:2] in HermitianPSDCone())\n2×2 Hermitian{GenericAffExpr{ComplexF64, VariableRef}, Matrix{GenericAffExpr{ComplexF64, VariableRef}}}:\n real(X[1,1]) real(X[1,2]) + imag(X[1,2]) im\n real(X[1,2]) - imag(X[1,2]) im real(X[2,2])\n\njulia> @constraint(model, X == LinearAlgebra.I)\n[real(X[1,1]) - 1 real(X[1,2]) + imag(X[1,2]) im\n real(X[1,2]) - imag(X[1,2]) im real(X[2,2]) - 1] ∈ Zeros()\n\njulia> @constraint(model, X .== LinearAlgebra.I)\n2×2 Matrix{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{ComplexF64}, MathOptInterface.EqualTo{ComplexF64}}, ScalarShape}}:\n real(X[1,1]) = 1 real(X[1,2]) + imag(X[1,2]) im = 0\n real(X[1,2]) - imag(X[1,2]) im = 0 real(X[2,2]) = 1","category":"page"},{"location":"manual/constraints/#Containers-of-constraints","page":"Constraints","title":"Containers of constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The @constraint macro supports creating collections of constraints. We'll cover some brief syntax here; read the Constraint containers section for more details:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Create arrays of constraints:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3]);\n\njulia> @constraint(model, c[i=1:3], x[i] <= i^2)\n3-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n c[1] : x[1] ≤ 1\n c[2] : x[2] ≤ 4\n c[3] : x[3] ≤ 9\n\njulia> c[2]\nc[2] : x[2] ≤ 4","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Sets can be any Julia type that supports iteration:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3]);\n\njulia> @constraint(model, c[i=2:3, [\"red\", \"blue\"]], x[i] <= i^2)\n2-dimensional DenseAxisArray{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape},2,...} with index sets:\n Dimension 1, 2:3\n Dimension 2, [\"red\", \"blue\"]\nAnd data, a 2×2 Matrix{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n c[2,red] : x[2] ≤ 4 c[2,blue] : x[2] ≤ 4\n c[3,red] : x[3] ≤ 9 c[3,blue] : x[3] ≤ 9\n\njulia> c[2, \"red\"]\nc[2,red] : x[2] ≤ 4","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Sets can depend upon previous indices:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3]);\n\njulia> @constraint(model, c[i=1:3, j=i:3], x[i] <= j)\nJuMP.Containers.SparseAxisArray{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}, 2, Tuple{Int64, Int64}} with 6 entries:\n [1, 1] = c[1,1] : x[1] ≤ 1\n [1, 2] = c[1,2] : x[1] ≤ 2\n [1, 3] = c[1,3] : x[1] ≤ 3\n [2, 2] = c[2,2] : x[2] ≤ 2\n [2, 3] = c[2,3] : x[2] ≤ 3\n [3, 3] = c[3,3] : x[3] ≤ 3","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"and you can filter elements in the sets using the ; syntax:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:9]);\n\njulia> @constraint(model, c[i=1:9; mod(i, 3) == 0], x[i] <= i)\nJuMP.Containers.SparseAxisArray{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}, 1, Tuple{Int64}} with 3 entries:\n [3] = c[3] : x[3] ≤ 3\n [6] = c[6] : x[6] ≤ 6\n [9] = c[9] : x[9] ≤ 9","category":"page"},{"location":"manual/constraints/#Registered-constraints","page":"Constraints","title":"Registered constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"When you create constraints, JuMP registers them inside the model using their corresponding symbol. Get a registered name using model[:key]:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model()\nA JuMP Model\n├ solver: none\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none\n\njulia> @variable(model, x)\nx\n\njulia> @constraint(model, my_c, 2x <= 1)\nmy_c : 2 x ≤ 1\n\njulia> model\nA JuMP Model\n├ solver: none\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 1\n├ num_constraints: 1\n│ └ AffExpr in MOI.LessThan{Float64}: 1\n└ Names registered in the model\n └ :my_c, :x\n\njulia> model[:my_c] === my_c\ntrue","category":"page"},{"location":"manual/constraints/#Anonymous-constraints","page":"Constraints","title":"Anonymous constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To reduce the likelihood of accidental bugs, and because JuMP registers constraints inside a model, creating two constraints with the same name is an error:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @constraint(model, c, 2x <= 1)\nc : 2 x ≤ 1\n\njulia> @constraint(model, c, 2x <= 1)\nERROR: An object of name c is already attached to this model. If this\n is intended, consider using the anonymous construction syntax, for example,\n `x = @variable(model, [1:N], ...)` where the name of the object does\n not appear inside the macro.\n\n Alternatively, use `unregister(model, :c)` to first unregister\n the existing name from the model. Note that this will not delete the\n object; it will just remove the reference at `model[:c]`.\n[...]","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"A common reason for encountering this error is adding constraints in a loop.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"As a work-around, JuMP provides anonymous constraints. Create an anonymous constraint by omitting the name argument:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> c = @constraint(model, 2x <= 1)\n2 x ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Create a container of anonymous constraints by dropping the name in front of the [:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3]);\n\njulia> c = @constraint(model, [i = 1:3], x[i] <= i)\n3-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n x[1] ≤ 1\n x[2] ≤ 2\n x[3] ≤ 3","category":"page"},{"location":"manual/constraints/#Constraint-names","page":"Constraints","title":"Constraint names","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In addition to the symbol that constraints are registered with, constraints have a String name that is used for printing and writing to file formats.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Get and set the name of a constraint using name(::JuMP.ConstraintRef) and set_name(::JuMP.ConstraintRef, ::String):","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model(); @variable(model, x);\n\njulia> @constraint(model, con, x <= 1)\ncon : x ≤ 1\n\njulia> name(con)\n\"con\"\n\njulia> set_name(con, \"my_con_name\")\n\njulia> con\nmy_con_name : x ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Override the default choice of name using the base_name keyword:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model(); @variable(model, x);\n\njulia> con = @constraint(model, [i=1:2], x <= i, base_name = \"my_con\")\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n my_con[1] : x ≤ 1\n my_con[2] : x ≤ 2","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Note that names apply to each element of the container, not to the container of constraints:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> name(con[1])\n\"my_con[1]\"\n\njulia> set_name(con[1], \"c\")\n\njulia> con\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n c : x ≤ 1\n my_con[2] : x ≤ 2","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"tip: Tip\nFor some models, setting the string name of each constraint can take a non-trivial portion of the total time required to build the model. Turn off String names by passing set_string_name = false to @constraint:julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con, x <= 2, set_string_name = false)\nx ≤ 2See Disable string names for more information.","category":"page"},{"location":"manual/constraints/#Retrieve-a-constraint-by-name","page":"Constraints","title":"Retrieve a constraint by name","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Retrieve a constraint from a model using constraint_by_name:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> constraint_by_name(model, \"c\")\nc : x ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If the name is not present, nothing will be returned:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> constraint_by_name(model, \"bad_name\")","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"You can only look up individual constraints using constraint_by_name. Something like this will not work:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model(); @variable(model, x);\n\njulia> con = @constraint(model, [i=1:2], x <= i, base_name = \"my_con\")\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n my_con[1] : x ≤ 1\n my_con[2] : x ≤ 2\n\njulia> constraint_by_name(model, \"my_con\")","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To look up a collection of constraints, do not use constraint_by_name. Instead, register them using the model[:key] = value syntax:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model(); @variable(model, x);\n\njulia> model[:con] = @constraint(model, [i=1:2], x <= i, base_name = \"my_con\")\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n my_con[1] : x ≤ 1\n my_con[2] : x ≤ 2\n\njulia> model[:con]\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n my_con[1] : x ≤ 1\n my_con[2] : x ≤ 2","category":"page"},{"location":"manual/constraints/#String-names,-symbolic-names,-and-bindings","page":"Constraints","title":"String names, symbolic names, and bindings","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"It's common for new users to experience confusion relating to constraints. Part of the problem is the difference between the name that a constraint is registered under and the String name used for printing.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Here's a summary of the differences:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Constraints are created using @constraint.\nConstraints can be named or anonymous.\nNamed constraints have the form @constraint(model, c, expr). For named constraints:\nThe String name of the constraint is set to \"c\".\nA Julia variable c is created that binds c to the JuMP constraint.\nThe name :c is registered as a key in the model with the value c.\nAnonymous constraints have the form c = @constraint(model, expr). For anonymous constraints:\nThe String name of the constraint is set to \"\".\nYou control the name of the Julia variable used as the binding.\nNo name is registered as a key in the model.\nThe base_name keyword can override the String name of the constraint.\nYou can manually register names in the model via model[:key] = value.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Here's an example of the differences:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> c_binding = @constraint(model, 2x <= 1, base_name = \"c\")\nc : 2 x ≤ 1\n\njulia> model\nA JuMP Model\n├ solver: none\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 1\n├ num_constraints: 1\n│ └ AffExpr in MOI.LessThan{Float64}: 1\n└ Names registered in the model\n └ :x\n\njulia> c\nERROR: UndefVarError: `c` not defined\n\njulia> c_binding\nc : 2 x ≤ 1\n\njulia> name(c_binding)\n\"c\"\n\njulia> model[:c_register] = c_binding\nc : 2 x ≤ 1\n\njulia> model\nA JuMP Model\n├ solver: none\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 1\n├ num_constraints: 1\n│ └ AffExpr in MOI.LessThan{Float64}: 1\n└ Names registered in the model\n └ :c_register, :x\n\njulia> model[:c_register]\nc : 2 x ≤ 1\n\njulia> model[:c_register] === c_binding\ntrue\n\njulia> c\nERROR: UndefVarError: `c` not defined","category":"page"},{"location":"manual/constraints/#The-@constraints-macro","page":"Constraints","title":"The @constraints macro","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If you have many @constraint calls, use the @constraints macro to improve readability:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraints(model, begin\n 2x <= 1\n c, x >= -1\n end)\n(2 x ≤ 1, c : x ≥ -1)\n\njulia> print(model)\nFeasibility\nSubject to\n c : x ≥ -1\n 2 x ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The @constraints macro returns a tuple of the constraints that were defined.","category":"page"},{"location":"manual/constraints/#constraint_duality","page":"Constraints","title":"Duality","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"JuMP adopts the notion of conic duality from MathOptInterface. For linear programs, a feasible dual on a >= constraint is nonnegative and a feasible dual on a <= constraint is nonpositive. If the constraint is an equality constraint, it depends on which direction is binding.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nJuMP's definition of duality is independent of the objective sense. That is, the sign of feasible duals associated with a constraint depends on the direction of the constraint and not whether the problem is maximization or minimization. This is a different convention from linear programming duality in some common textbooks. If you have a linear program, and you want the textbook definition, you probably want to use shadow_price and reduced_cost instead.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The dual value associated with a constraint in the most recent solution can be accessed using the dual function. Use has_duals to check if the model has a dual solution available to query. For example:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model(HiGHS.Optimizer);\n\njulia> set_silent(model)\n\njulia> @variable(model, x)\nx\n\njulia> @constraint(model, con, x <= 1)\ncon : x ≤ 1\n\njulia> @objective(model, Min, -2x)\n-2 x\n\njulia> has_duals(model)\nfalse\n\njulia> optimize!(model)\n\njulia> has_duals(model)\ntrue\n\njulia> dual(con)\n-2.0\n\njulia> @objective(model, Max, 2x)\n2 x\n\njulia> optimize!(model)\n\njulia> dual(con)\n-2.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To help users who may be less familiar with conic duality, JuMP provides shadow_price, which returns a value that can be interpreted as the improvement in the objective in response to an infinitesimal relaxation (on the scale of one unit) in the right-hand side of the constraint. shadow_price can be used only on linear constraints with a <=, >=, or == comparison operator.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In the example above, dual(con) returned -2.0 regardless of the optimization sense. However, in the second case when the optimization sense is Max, shadow_price returns:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> shadow_price(con)\n2.0","category":"page"},{"location":"manual/constraints/#Duals-of-variable-bounds","page":"Constraints","title":"Duals of variable bounds","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To query the dual variables associated with a variable bound, first obtain a constraint reference using one of UpperBoundRef, LowerBoundRef, or FixRef, and then call dual on the returned constraint reference. The reduced_cost function may simplify this process as it returns the shadow price of an active bound of a variable (or zero, if no active bound exists).","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model(HiGHS.Optimizer);\n\njulia> set_silent(model)\n\njulia> @variable(model, x <= 1)\nx\n\njulia> @objective(model, Min, -2x)\n-2 x\n\njulia> optimize!(model)\n\njulia> dual(UpperBoundRef(x))\n-2.0\n\njulia> reduced_cost(x)\n-2.0","category":"page"},{"location":"manual/constraints/#Modify-a-constant-term","page":"Constraints","title":"Modify a constant term","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"This section explains how to modify the constant term in a constraint. There are multiple ways to achieve this goal; we explain three options.","category":"page"},{"location":"manual/constraints/#Option-1:-change-the-right-hand-side","page":"Constraints","title":"Option 1: change the right-hand side","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Use set_normalized_rhs to modify the right-hand side (constant) term of a linear or quadratic constraint. Use normalized_rhs to query the right-hand side term.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con, 2x <= 1)\ncon : 2 x ≤ 1\n\njulia> set_normalized_rhs(con, 3)\n\njulia> con\ncon : 2 x ≤ 3\n\njulia> normalized_rhs(con)\n3.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nset_normalized_rhs sets the right-hand side term of the normalized constraint. See Normalization for more details.","category":"page"},{"location":"manual/constraints/#Option-2:-use-fixed-variables","page":"Constraints","title":"Option 2: use fixed variables","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If constraints are complicated, for example, they are composed of a number of components, each of which has a constant term, then it may be difficult to calculate what the right-hand side term is in the standard form.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"For this situation, JuMP includes the ability to fix variables to a value using the fix function. Fixing a variable sets its lower and upper bound to the same value. Thus, changes in a constant term can be simulated by adding a new variable and fixing it to different values. Here is an example:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @variable(model, const_term)\nconst_term\n\njulia> @constraint(model, con, 2x <= const_term + 1)\ncon : 2 x - const_term ≤ 1\n\njulia> fix(const_term, 1.0)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The constraint con is now equivalent to 2x <= 2.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nFixed variables are not replaced with constants when communicating the problem to a solver. Therefore, even though const_term is fixed, it is still a decision variable, and so const_term * x is bilinear.","category":"page"},{"location":"manual/constraints/#Option-3:-modify-the-function's-constant-term","page":"Constraints","title":"Option 3: modify the function's constant term","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The third option is to use add_to_function_constant. The constant given is added to the function of a func-in-set constraint. In the following example, adding 2 to the function has the effect of removing 2 to the right-hand side:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con, 2x <= 1)\ncon : 2 x ≤ 1\n\njulia> add_to_function_constant(con, 2)\n\njulia> con\ncon : 2 x ≤ -1\n\njulia> normalized_rhs(con)\n-1.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In the case of interval constraints, the constant is removed from each bound:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con, 0 <= 2x + 1 <= 2)\ncon : 2 x ∈ [-1, 1]\n\njulia> add_to_function_constant(con, 3)\n\njulia> con\ncon : 2 x ∈ [-4, -2]","category":"page"},{"location":"manual/constraints/#Modify-a-variable-coefficient","page":"Constraints","title":"Modify a variable coefficient","text":"","category":"section"},{"location":"manual/constraints/#Scalar-constraints","page":"Constraints","title":"Scalar constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To modify the coefficients for a linear term in a constraint, use set_normalized_coefficient. To query the current coefficient, use normalized_coefficient.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @constraint(model, con, 2x[1] + x[2] <= 1)\ncon : 2 x[1] + x[2] ≤ 1\n\njulia> set_normalized_coefficient(con, x[2], 0)\n\njulia> con\ncon : 2 x[1] ≤ 1\n\njulia> normalized_coefficient(con, x[2])\n0.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To modify quadratic terms, pass two variables:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @constraint(model, con, x[1]^2 + x[1] * x[2] <= 1)\ncon : x[1]² + x[1]*x[2] ≤ 1\n\njulia> set_normalized_coefficient(con, x[1], x[1], 2)\n\njulia> set_normalized_coefficient(con, x[1], x[2], 3)\n\njulia> con\ncon : 2 x[1]² + 3 x[1]*x[2] ≤ 1\n\njulia> normalized_coefficient(con, x[1], x[1])\n2.0\n\njulia> normalized_coefficient(con, x[1], x[2])\n3.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nset_normalized_coefficient sets the coefficient of the normalized constraint. See Normalization for more details.","category":"page"},{"location":"manual/constraints/#Vector-constraints","page":"Constraints","title":"Vector constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To modify the coefficients of a vector-valued constraint, use set_normalized_coefficient.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @constraint(model, con, [2x + 3x, 4x] in MOI.Nonnegatives(2))\ncon : [5 x, 4 x] ∈ MathOptInterface.Nonnegatives(2)\n\njulia> set_normalized_coefficient(con, x, [(1, 3.0)])\n\njulia> con\ncon : [3 x, 4 x] ∈ MathOptInterface.Nonnegatives(2)\n\njulia> set_normalized_coefficient(con, x, [(1, 2.0), (2, 5.0)])\n\njulia> con\ncon : [2 x, 5 x] ∈ MathOptInterface.Nonnegatives(2)","category":"page"},{"location":"manual/constraints/#Delete-a-constraint","page":"Constraints","title":"Delete a constraint","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Use delete to delete a constraint from a model. Use is_valid to check if a constraint belongs to a model and has not been deleted.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con, 2x <= 1)\ncon : 2 x ≤ 1\n\njulia> is_valid(model, con)\ntrue\n\njulia> delete(model, con)\n\njulia> is_valid(model, con)\nfalse","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Deleting a constraint does not unregister the symbolic reference from the model. Therefore, creating a new constraint of the same name will throw an error:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, con, 2x <= 1)\nERROR: An object of name con is already attached to this model. If this\n is intended, consider using the anonymous construction syntax, for example,\n `x = @variable(model, [1:N], ...)` where the name of the object does\n not appear inside the macro.\n\n Alternatively, use `unregister(model, :con)` to first unregister\n the existing name from the model. Note that this will not delete the\n object; it will just remove the reference at `model[:con]`.\n[...]","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"After calling delete, call unregister to remove the symbolic reference:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> unregister(model, :con)\n\njulia> @constraint(model, con, 2x <= 1)\ncon : 2 x ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"info: Info\ndelete does not automatically unregister because we do not distinguish between names that are automatically registered by JuMP macros, and names that are manually registered by the user by setting values in object_dictionary. In addition, deleting a constraint and then adding a new constraint of the same name is an easy way to introduce bugs into your code.","category":"page"},{"location":"manual/constraints/#Start-values","page":"Constraints","title":"Start values","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Provide a starting value (also called warmstart) for a constraint's primal and dual solutions using set_start_value and set_dual_start_value.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Query the starting value for a constraint's primal and dual solution using start_value and dual_start_value. If no start value has been set, the methods will return nothing.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @constraint(model, con, x >= 10)\ncon : x ≥ 10\n\njulia> start_value(con)\n\njulia> set_start_value(con, 10.0)\n\njulia> start_value(con)\n10.0\n\njulia> dual_start_value(con)\n\njulia> set_dual_start_value(con, 2)\n\njulia> dual_start_value(con)\n2.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Vector-valued constraints require a vector:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3])\n3-element Vector{VariableRef}:\n x[1]\n x[2]\n x[3]\n\njulia> @constraint(model, con, x in SecondOrderCone())\ncon : [x[1], x[2], x[3]] in MathOptInterface.SecondOrderCone(3)\n\njulia> dual_start_value(con)\n\njulia> set_dual_start_value(con, [1.0, 2.0, 3.0])\n\njulia> dual_start_value(con)\n3-element Vector{Float64}:\n 1.0\n 2.0\n 3.0","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"tip: Tip\nTo simplify setting start values for all variables and constraints in a model, see set_start_values. The Primal and dual warm-starts tutorial also gives a detailed description of how to iterate over constraints in the model to set custom start values.","category":"page"},{"location":"manual/constraints/#Constraint-containers","page":"Constraints","title":"Constraint containers","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Like Variable containers, JuMP provides a mechanism for building groups of constraints compactly. References to these groups of constraints are returned in containers. Three types of constraint containers are supported: Arrays, DenseAxisArrays, and SparseAxisArrays. We explain each of these in the following.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"tip: Tip\nYou can read more about containers in the Containers section.","category":"page"},{"location":"manual/constraints/#constraint_arrays","page":"Constraints","title":"Arrays","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"One way of adding a group of constraints compactly is the following:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con[i = 1:3], i * x <= i + 1)\n3-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n con[1] : x ≤ 2\n con[2] : 2 x ≤ 3\n con[3] : 3 x ≤ 4","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"JuMP returns references to the three constraints in an Array that is bound to the Julia variable con. This array can be accessed and sliced as you would with any Julia array:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> con[1]\ncon[1] : x ≤ 2\n\njulia> con[2:3]\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n con[2] : 2 x ≤ 3\n con[3] : 3 x ≤ 4","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Anonymous containers can also be constructed by dropping the name (for example, con) before the square brackets:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> con = @constraint(model, [i = 1:2], i * x <= i + 1)\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n x ≤ 2\n 2 x ≤ 3","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Just like @variable, JuMP will form an Array of constraints when it can determine at parse time that the indices are one-based integer ranges. Therefore con[1:b] will create an Array, but con[a:b] will not. A special case is con[Base.OneTo(n)] which will produce an Array. If JuMP cannot determine that the indices are one-based integer ranges (for example, in the case of con[a:b]), JuMP will create a DenseAxisArray instead.","category":"page"},{"location":"manual/constraints/#DenseAxisArrays","page":"Constraints","title":"DenseAxisArrays","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The syntax for constructing a DenseAxisArray of constraints is very similar to the syntax for constructing a DenseAxisArray of variables.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con[i = 1:2, j = 2:3], i * x <= j + 1)\n2-dimensional DenseAxisArray{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape},2,...} with index sets:\n Dimension 1, Base.OneTo(2)\n Dimension 2, 2:3\nAnd data, a 2×2 Matrix{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}}:\n con[1,2] : x ≤ 3 con[1,3] : x ≤ 4\n con[2,2] : 2 x ≤ 3 con[2,3] : 2 x ≤ 4","category":"page"},{"location":"manual/constraints/#SparseAxisArrays","page":"Constraints","title":"SparseAxisArrays","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The syntax for constructing a SparseAxisArray of constraints is very similar to the syntax for constructing a SparseAxisArray of variables.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, con[i = 1:2, j = 1:2; i != j], i * x <= j + 1)\nJuMP.Containers.SparseAxisArray{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape}, 2, Tuple{Int64, Int64}} with 2 entries:\n [1, 2] = con[1,2] : x ≤ 3\n [2, 1] = con[2,1] : 2 x ≤ 2","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nIf you have many index dimensions and a large amount of sparsity, read Performance considerations.","category":"page"},{"location":"manual/constraints/#Forcing-the-container-type","page":"Constraints","title":"Forcing the container type","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"When creating a container of constraints, JuMP will attempt to choose the tightest container type that can store the constraints. However, because this happens at parse time, it does not always make the best choice. Just like in @variable, you can force the type of container using the container keyword. For syntax and the reason behind this, take a look at the variable docs.","category":"page"},{"location":"manual/constraints/#Constraints-with-similar-indices","page":"Constraints","title":"Constraints with similar indices","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Containers are often used to create constraints over a set of indices. However, you'll often have cases in which you are repeating the indices:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> @variable(model, y[1:2]);\n\njulia> @constraints(model, begin\n [i=1:2, j=1:2, k=1:2], i * x[j] <= k\n [i=1:2, j=1:2, k=1:2], i * y[j] <= k\n end);","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"This is hard to read and leads to a lot of copy-paste. A more readable way is to use a for-loop:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> for i=1:2, j=1:2, k=1:2\n @constraints(model, begin\n i * x[j] <= k\n i * y[j] <= k\n end)\n end","category":"page"},{"location":"manual/constraints/#Accessing-constraints-from-a-model","page":"Constraints","title":"Accessing constraints from a model","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Query the types of function-in-set constraints in a model using list_of_constraint_types:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[i=1:2] >= i, Int);\n\njulia> @constraint(model, x[1] + x[2] <= 1);\n\njulia> list_of_constraint_types(model)\n3-element Vector{Tuple{Type, Type}}:\n (AffExpr, MathOptInterface.LessThan{Float64})\n (VariableRef, MathOptInterface.GreaterThan{Float64})\n (VariableRef, MathOptInterface.Integer)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"For a given combination of function and set type, use num_constraints to access the number of constraints and all_constraints to access a list of their references:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> num_constraints(model, VariableRef, MOI.Integer)\n2\n\njulia> cons = all_constraints(model, VariableRef, MOI.Integer)\n2-element Vector{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.Integer}, ScalarShape}}:\n x[1] integer\n x[2] integer","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"You can also count the total number of constraints in the model, but you must explicitly choose whether to count VariableRef constraints such as bound and integrality constraints:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> num_constraints(model; count_variable_in_set_constraints = true)\n5\n\njulia> num_constraints(model; count_variable_in_set_constraints = false)\n1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The same also applies for all_constraints:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> all_constraints(model; include_variable_in_set_constraints = true)\n5-element Vector{ConstraintRef}:\n x[1] + x[2] ≤ 1\n x[1] ≥ 1\n x[2] ≥ 2\n x[1] integer\n x[2] integer\n\njulia> all_constraints(model; include_variable_in_set_constraints = false)\n1-element Vector{ConstraintRef}:\n x[1] + x[2] ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If you need finer-grained control on which constraints to include, use a variant of:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> sum(\n num_constraints(model, F, S) for\n (F, S) in list_of_constraint_types(model) if F != VariableRef\n )\n1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Use constraint_object to get an instance of an AbstractConstraint object that stores the constraint data:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> con = constraint_object(cons[1])\nScalarConstraint{VariableRef, MathOptInterface.Integer}(x[1], MathOptInterface.Integer())\n\njulia> con.func\nx[1]\n\njulia> con.set\nMathOptInterface.Integer()","category":"page"},{"location":"manual/constraints/#MathOptInterface-constraints","page":"Constraints","title":"MathOptInterface constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Because JuMP is based on MathOptInterface, you can add any constraints supported by MathOptInterface using the function-in-set syntax. For a list of supported functions and sets, read Standard form problem.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"note: Note\nWe use MOI as an alias for the MathOptInterface module. This alias is defined by using JuMP. You may also define it in your code as follows:import MathOptInterface as MOI","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"For example, the following two constraints are equivalent:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3]);\n\njulia> @constraint(model, 2 * x[1] <= 1)\n2 x[1] ≤ 1\n\njulia> @constraint(model, 2 * x[1] in MOI.LessThan(1.0))\n2 x[1] ≤ 1","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"You can also use any set defined by MathOptInterface:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x - [1; 2; 3] in MOI.Nonnegatives(3))\n[x[1] - 1, x[2] - 2, x[3] - 3] ∈ MathOptInterface.Nonnegatives(3)\n\njulia> @constraint(model, x in MOI.ExponentialCone())\n[x[1], x[2], x[3]] ∈ MathOptInterface.ExponentialCone()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"info: Info\nSimilar to how JuMP defines the <= and >= syntax as a convenience way to specify MOI.LessThan and MOI.GreaterThan constraints, the remaining sections in this page describe functions and syntax that have been added for the convenience of common modeling situations.","category":"page"},{"location":"manual/constraints/#Set-inequality-syntax","page":"Constraints","title":"Set inequality syntax","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"For modeling convenience, the syntax @constraint(model, x >= y, Set()) is short-hand for @constraint(model, x - y in Set()).","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Therefore, the following calls are equivalent:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> y = [0.5, 0.75];\n\njulia> @constraint(model, x >= y, MOI.Nonnegatives(2))\n[x[1] - 0.5, x[2] - 0.75] ∈ MathOptInterface.Nonnegatives(2)\n\njulia> @constraint(model, x - y in MOI.Nonnegatives(2))\n[x[1] - 0.5, x[2] - 0.75] ∈ MathOptInterface.Nonnegatives(2)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Non-zero constants are not supported in this syntax:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x >= 1, MOI.Nonnegatives(2))\nERROR: Operation `sub_mul` between `Vector{VariableRef}` and `Int64` is not allowed. This most often happens when you write a constraint like `x >= y` where `x` is an array and `y` is a constant. Use the broadcast syntax `x .- y >= 0` instead.\nStacktrace:\n[...]","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Use instead:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x .- 1 >= 0, MOI.Nonnegatives(2))\n[x[1] - 1, x[2] - 1] ∈ MathOptInterface.Nonnegatives(2)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nThe syntax @constraint(model, y <= x, Set()) is supported, but it is not recommended because the value of the primal and dual solutions associated with the constraint may be the negative of what you expect.","category":"page"},{"location":"manual/constraints/#Second-order-cone-constraints","page":"Constraints","title":"Second-order cone constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"A SecondOrderCone constrains the variables t and x to the set:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"x_2 le t","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"and t ge 0. It can be added as follows:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, t)\nt\n\njulia> @variable(model, x[1:2])\n2-element Vector{VariableRef}:\n x[1]\n x[2]\n\njulia> @constraint(model, [t; x] in SecondOrderCone())\n[t, x[1], x[2]] ∈ MathOptInterface.SecondOrderCone(3)","category":"page"},{"location":"manual/constraints/#Rotated-second-order-cone-constraints","page":"Constraints","title":"Rotated second-order cone constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"A RotatedSecondOrderCone constrains the variables t, u, and x to the set:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"x_2^2 le 2 t cdot u","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"and t u ge 0. It can be added as follows:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, t)\nt\n\njulia> @variable(model, u)\nu\n\njulia> @variable(model, x[1:2])\n2-element Vector{VariableRef}:\n x[1]\n x[2]\n\njulia> @constraint(model, [t; u; x] in RotatedSecondOrderCone())\n[t, u, x[1], x[2]] ∈ MathOptInterface.RotatedSecondOrderCone(4)","category":"page"},{"location":"manual/constraints/#Special-Ordered-Sets-of-Type-1","page":"Constraints","title":"Special Ordered Sets of Type 1","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In a Special Ordered Set of Type 1 (often denoted SOS-I or SOS1), at most one element can take a non-zero value.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Construct SOS-I constraints using the SOS1 set:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:3])\n3-element Vector{VariableRef}:\n x[1]\n x[2]\n x[3]\n\njulia> @constraint(model, x in SOS1())\n[x[1], x[2], x[3]] in MathOptInterface.SOS1{Float64}([1.0, 2.0, 3.0])","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Although not required for feasibility, solvers can benefit from an ordering of the variables (for example, the variables represent different factories to build, at most one factory can be built, and the factories can be ordered according to cost). To induce an ordering, a vector of weights can be provided, and the variables are ordered according to their corresponding weight.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"For example, in the constraint:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x in SOS1([3.1, 1.2, 2.3]))\n[x[1], x[2], x[3]] in MathOptInterface.SOS1{Float64}([3.1, 1.2, 2.3])","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"the variables x have precedence x[2], x[3], x[1].","category":"page"},{"location":"manual/constraints/#Special-Ordered-Sets-of-Type-2","page":"Constraints","title":"Special Ordered Sets of Type 2","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In a Special Ordered Set of Type 2 (SOS-II), at most two elements can be non-zero, and if there are two non-zeros, they must be consecutive according to the ordering induced by a weight vector.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Construct SOS-II constraints using the SOS2 set:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x in SOS2([3.0, 1.0, 2.0]))\n[x[1], x[2], x[3]] in MathOptInterface.SOS2{Float64}([3.0, 1.0, 2.0])","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The possible non-zero pairs are (x[1], x[3]) and (x[2], x[3]):","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If the weight vector is omitted, JuMP induces an ordering from 1:length(x):","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, x in SOS2())\n[x[1], x[2], x[3]] in MathOptInterface.SOS2{Float64}([1.0, 2.0, 3.0])","category":"page"},{"location":"manual/constraints/#Indicator-constraints","page":"Constraints","title":"Indicator constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Indicator constraints consist of a binary variable and a linear constraint. The constraint holds when the binary variable takes the value 1. The constraint may or may not hold when the binary variable takes the value 0.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To enforce the constraint x + y <= 1 when the binary variable a is 1, use:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x)\nx\n\njulia> @variable(model, y)\ny\n\njulia> @variable(model, a, Bin)\na\n\njulia> @constraint(model, a --> {x + y <= 1})\na --> {x + y ≤ 1}","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"If the constraint must hold when a is zero, add ! or ¬ before the binary variable;","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, !a --> {x + y <= 1})\n!a --> {x + y ≤ 1}","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nYou cannot use an expression for the left-hand side of an indicator constraint.","category":"page"},{"location":"manual/constraints/#Semidefinite-constraints","page":"Constraints","title":"Semidefinite constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To constrain a matrix to be positive semidefinite (PSD), use PSDCone:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, X[1:2, 1:2])\n2×2 Matrix{VariableRef}:\n X[1,1] X[1,2]\n X[2,1] X[2,2]\n\njulia> @constraint(model, X >= 0, PSDCone())\n[X[1,1] X[1,2]\n X[2,1] X[2,2]] ∈ PSDCone()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"tip: Tip\nWhere possible, prefer constructing a matrix of Semidefinite variables using the @variable macro, rather than adding a constraint like @constraint(model, X >= 0, PSDCone()). In some solvers, adding the constraint via @constraint is less efficient, and can result in additional intermediate variables and constraints being added to the model.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The inequality X >= Y between two square matrices X and Y is understood as constraining X - Y to be positive semidefinite.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> Y = [1 2; 2 1]\n2×2 Matrix{Int64}:\n 1 2\n 2 1\n\njulia> @constraint(model, X >= Y, PSDCone())\n[X[1,1] - 1 X[1,2] - 2\n X[2,1] - 2 X[2,2] - 1] ∈ PSDCone()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"warning: Warning\nThe syntax @constraint(model, Y <= X, PSDCone()) is supported, but it is not recommended because the value of the primal and dual solutions associated with the constraint may be the negative of what you expect.","category":"page"},{"location":"manual/constraints/#Symmetry","page":"Constraints","title":"Symmetry","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Solvers supporting PSD constraints usually expect to be given a matrix that is symbolically symmetric, that is, for which the expression in corresponding off-diagonal entries are the same. In our example, the expressions of entries (1, 2) and (2, 1) are respectively X[1,2] - 2 and X[2,1] - 2 which are different.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"To bridge the gap between the constraint modeled and what the solver expects, solvers may add an equality constraint X[1,2] - 2 == X[2,1] - 2 to force symmetry. Use LinearAlgebra.Symmetric to explicitly tell the solver that the matrix is symmetric:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> import LinearAlgebra\n\njulia> Z = [X[1, 1] X[1, 2]; X[1, 2] X[2, 2]]\n2×2 Matrix{VariableRef}:\n X[1,1] X[1,2]\n X[1,2] X[2,2]\n\njulia> @constraint(model, LinearAlgebra.Symmetric(Z) >= 0, PSDCone())\n[X[1,1] X[1,2]\n ⋯ X[2,2]] ∈ PSDCone()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Note that the lower triangular entries are ignored even if they are different so use it with caution:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, LinearAlgebra.Symmetric(X) >= 0, PSDCone())\n[X[1,1] X[1,2]\n ⋯ X[2,2]] ∈ PSDCone()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"(Note that no error is thrown, even though X is not symmetric.)","category":"page"},{"location":"manual/constraints/#Complementarity-constraints","page":"Constraints","title":"Complementarity constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"A mixed complementarity constraint F(x) ⟂ x consists of finding x in the interval [lb, ub], such that the following holds:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"F(x) == 0 if lb < x < ub\nF(x) >= 0 if lb == x\nF(x) <= 0 if x == ub","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"JuMP supports mixed complementarity constraints via complements(F(x), x) or F(x) ⟂ x in the @constraint macro. The interval set [lb, ub] is obtained from the variable bounds on x.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"For example, to define the problem 2x - 1 ⟂ x with x ∈ [0, ∞), do:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x >= 0)\nx\n\njulia> @constraint(model, 2x - 1 ⟂ x)\n[2 x - 1, x] ∈ MathOptInterface.Complements(2)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"This problem has a unique solution at x = 0.5.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"The perp operator ⟂ can be entered in most editors (and the Julia REPL) by typing \\perp.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"An alternative approach that does not require the ⟂ symbol uses the complements function as follows:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @constraint(model, complements(2x - 1, x))\n[2 x - 1, x] ∈ MathOptInterface.Complements(2)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In both cases, the mapping F(x) is supplied as the first argument, and the matching variable x is supplied as the second.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Vector-valued complementarity constraints are also supported:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> @variable(model, -2 <= y[1:2] <= 2)\n2-element Vector{VariableRef}:\n y[1]\n y[2]\n\njulia> M = [1 2; 3 4]\n2×2 Matrix{Int64}:\n 1 2\n 3 4\n\njulia> q = [5, 6]\n2-element Vector{Int64}:\n 5\n 6\n\njulia> @constraint(model, M * y + q ⟂ y)\n[y[1] + 2 y[2] + 5, 3 y[1] + 4 y[2] + 6, y[1], y[2]] ∈ MathOptInterface.Complements(4)","category":"page"},{"location":"manual/constraints/#Boolean-constraints","page":"Constraints","title":"Boolean constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Add a Boolean constraint (a MOI.EqualTo{Bool} set) using the := operator with a Bool right-hand side term:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = GenericModel{Bool}();\n\njulia> @variable(model, x[1:2]);\n\njulia> @constraint(model, x[1] || x[2] := true)\nx[1] || x[2] = true\n\njulia> @constraint(model, x[1] && x[2] := false)\nx[1] && x[2] = false\n\njulia> model\nA JuMP Model\n├ value_type: Bool\n├ solver: none\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 2\n├ num_constraints: 2\n│ └ GenericNonlinearExpr{GenericVariableRef{Bool}} in MOI.EqualTo{Bool}: 2\n└ Names registered in the model\n └ :x","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Boolean constraints should not be added using the == operator because JuMP will rewrite the constraint as lhs - rhs = 0, and because constraints like a == b == c require parentheses to disambiguate between (a == b) == c and a == (b == c). In contrast, a == b := c is equivalent to (a == b) := c:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x[1:2]);\n\njulia> rhs = false\nfalse\n\njulia> @constraint(model, (x[1] == x[2]) == rhs)\n(x[1] == x[2]) - 0.0 = 0\n\njulia> @constraint(model, x[1] == x[2] := rhs)\nx[1] == x[2] = false","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"EditURL = \"power_systems.jl\"","category":"page"},{"location":"tutorials/applications/power_systems/#Power-Systems","page":"Power Systems","title":"Power Systems","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"This tutorial was originally contributed by Yury Dvorkin and Miles Lubin.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"This tutorial demonstrates how to formulate basic power systems engineering models in JuMP.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"We will consider basic \"economic dispatch\" and \"unit commitment\" models without taking into account transmission constraints.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"For this tutorial, we use the following packages:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"using JuMP\nimport DataFrames\nimport HiGHS\nimport Plots\nimport StatsPlots","category":"page"},{"location":"tutorials/applications/power_systems/#Economic-dispatch","page":"Power Systems","title":"Economic dispatch","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Economic dispatch (ED) is an optimization problem that minimizes the cost of supplying energy demand subject to operational constraints on power system assets. In its simplest modification, ED is an LP problem solved for an aggregated load and wind forecast and for a single infinitesimal moment.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Mathematically, the ED problem can be written as follows:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"min sum_i in I c^g_i cdot g_i + c^w cdot w","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"where c_i and g_i are the incremental cost ($/MWh) and power output (MW) of the i^th generator, respectively, and c^w and w are the incremental cost ($/MWh) and wind power injection (MW), respectively.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Subject to the constraints:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Minimum (g^min) and maximum (g^max) limits on power outputs of generators: g^min_i leq g_i leq g^max_i\nConstraint on the wind power injection: 0 leq w leq w^f where w and w^f are the wind power injection and wind power forecast, respectively.\nPower balance constraint: sum_i in I g_i + w = d^f where d^f is the demand forecast.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Further reading on ED models can be found in A. J. Wood, B. F. Wollenberg, and G. B. Sheblé, \"Power Generation, Operation and Control,\" Wiley, 2013.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Define some input data about the test system.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"We define some thermal generators:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"function ThermalGenerator(\n min::Float64,\n max::Float64,\n fixed_cost::Float64,\n variable_cost::Float64,\n)\n return (\n min = min,\n max = max,\n fixed_cost = fixed_cost,\n variable_cost = variable_cost,\n )\nend\n\ngenerators = [\n ThermalGenerator(0.0, 1000.0, 1000.0, 50.0),\n ThermalGenerator(300.0, 1000.0, 0.0, 100.0),\n]","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"A wind generator","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"WindGenerator(variable_cost::Float64) = (variable_cost = variable_cost,)\n\nwind_generator = WindGenerator(50.0)","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"And a scenario","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"function Scenario(demand::Float64, wind::Float64)\n return (demand = demand, wind = wind)\nend\n\nscenario = Scenario(1500.0, 200.0)","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Create a function solve_economic_dispatch, which solves the economic dispatch problem for a given set of input parameters.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"function solve_economic_dispatch(generators::Vector, wind, scenario)\n # Define the economic dispatch (ED) model\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n # Define decision variables\n # power output of generators\n N = length(generators)\n @variable(model, generators[i].min <= g[i = 1:N] <= generators[i].max)\n # wind power injection\n @variable(model, 0 <= w <= scenario.wind)\n # Define the objective function\n @objective(\n model,\n Min,\n sum(generators[i].variable_cost * g[i] for i in 1:N) +\n wind.variable_cost * w,\n )\n # Define the power balance constraint\n @constraint(model, sum(g[i] for i in 1:N) + w == scenario.demand)\n # Solve statement\n optimize!(model)\n @assert is_solved_and_feasible(model)\n # return the optimal value of the objective function and its minimizers\n return (\n g = value.(g),\n w = value(w),\n wind_spill = scenario.wind - value(w),\n total_cost = objective_value(model),\n )\nend","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Solve the economic dispatch problem","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"solution = solve_economic_dispatch(generators, wind_generator, scenario);\n\nprintln(\"Dispatch of Generators: \", solution.g, \" MW\")\nprintln(\"Dispatch of Wind: \", solution.w, \" MW\")\nprintln(\"Wind spillage: \", solution.wind_spill, \" MW\")\nprintln(\"Total cost: \\$\", solution.total_cost)","category":"page"},{"location":"tutorials/applications/power_systems/#Economic-dispatch-with-adjustable-incremental-costs","page":"Power Systems","title":"Economic dispatch with adjustable incremental costs","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"In the following exercise we adjust the incremental cost of generator G1 and observe its impact on the total cost.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"function scale_generator_cost(g, scale)\n return ThermalGenerator(g.min, g.max, g.fixed_cost, scale * g.variable_cost)\nend\n\nstart = time()\nc_g_scale_df = DataFrames.DataFrame(;\n # Scale factor\n scale = Float64[],\n # Dispatch of Generator 1 [MW]\n dispatch_G1 = Float64[],\n # Dispatch of Generator 2 [MW]\n dispatch_G2 = Float64[],\n # Dispatch of Wind [MW]\n dispatch_wind = Float64[],\n # Spillage of Wind [MW]\n spillage_wind = Float64[],\n # Total cost [$]\n total_cost = Float64[],\n)\nfor c_g1_scale in 0.5:0.1:3.0\n # Update the incremental cost of the first generator at every iteration.\n new_generators = scale_generator_cost.(generators, [c_g1_scale, 1.0])\n # Solve the economic-dispatch problem with the updated incremental cost\n sol = solve_economic_dispatch(new_generators, wind_generator, scenario)\n push!(\n c_g_scale_df,\n (c_g1_scale, sol.g[1], sol.g[2], sol.w, sol.wind_spill, sol.total_cost),\n )\nend\nprint(string(\"elapsed time: \", time() - start, \" seconds\"))","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"c_g_scale_df","category":"page"},{"location":"tutorials/applications/power_systems/#Modifying-the-JuMP-model-in-place","page":"Power Systems","title":"Modifying the JuMP model in-place","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Note that in the previous exercise we entirely rebuilt the optimization model at every iteration of the internal loop, which incurs an additional computational burden. This burden can be alleviated if instead of re-building the entire model, we modify the constraints or objective function, as it shown in the example below.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Compare the computing time in case of the above and below models.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"function solve_economic_dispatch_inplace(\n generators::Vector,\n wind,\n scenario,\n scale::AbstractVector{Float64},\n)\n obj_out = Float64[]\n w_out = Float64[]\n g1_out = Float64[]\n g2_out = Float64[]\n # This function only works for two generators\n @assert length(generators) == 2\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n N = length(generators)\n @variable(model, generators[i].min <= g[i = 1:N] <= generators[i].max)\n @variable(model, 0 <= w <= scenario.wind)\n @objective(\n model,\n Min,\n sum(generators[i].variable_cost * g[i] for i in 1:N) +\n wind.variable_cost * w,\n )\n @constraint(model, sum(g[i] for i in 1:N) + w == scenario.demand)\n for c_g1_scale in scale\n @objective(\n model,\n Min,\n c_g1_scale * generators[1].variable_cost * g[1] +\n generators[2].variable_cost * g[2] +\n wind.variable_cost * w,\n )\n optimize!(model)\n @assert is_solved_and_feasible(model)\n push!(obj_out, objective_value(model))\n push!(w_out, value(w))\n push!(g1_out, value(g[1]))\n push!(g2_out, value(g[2]))\n end\n df = DataFrames.DataFrame(;\n scale = scale,\n dispatch_G1 = g1_out,\n dispatch_G2 = g2_out,\n dispatch_wind = w_out,\n spillage_wind = scenario.wind .- w_out,\n total_cost = obj_out,\n )\n return df\nend\n\nstart = time()\ninplace_df = solve_economic_dispatch_inplace(\n generators,\n wind_generator,\n scenario,\n 0.5:0.1:3.0,\n)\nprint(string(\"elapsed time: \", time() - start, \" seconds\"))","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"For small models, adjusting specific constraints or the objective function is sometimes faster and sometimes slower than re-building the entire model. However, as the problem size increases, updating the model in-place is usually faster.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"inplace_df","category":"page"},{"location":"tutorials/applications/power_systems/#Inefficient-usage-of-wind-generators","page":"Power Systems","title":"Inefficient usage of wind generators","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"The economic dispatch problem does not perform commitment decisions and, thus, assumes that all generators must be dispatched at least at their minimum power output limit. This approach is not cost efficient and may lead to absurd decisions. For example, if d = sum_i in I g^min_i, the wind power injection must be zero, that is, all available wind generation is spilled, to meet the minimum power output constraints on generators.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"In the following example, we adjust the total demand and observed how it affects wind spillage.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"demand_scale_df = DataFrames.DataFrame(;\n demand = Float64[],\n dispatch_G1 = Float64[],\n dispatch_G2 = Float64[],\n dispatch_wind = Float64[],\n spillage_wind = Float64[],\n total_cost = Float64[],\n)\n\nfunction scale_demand(scenario, scale)\n return Scenario(scale * scenario.demand, scenario.wind)\nend\n\nfor demand_scale in 0.2:0.1:1.4\n new_scenario = scale_demand(scenario, demand_scale)\n sol = solve_economic_dispatch(generators, wind_generator, new_scenario)\n push!(\n demand_scale_df,\n (\n new_scenario.demand,\n sol.g[1],\n sol.g[2],\n sol.w,\n sol.wind_spill,\n sol.total_cost,\n ),\n )\nend\n\ndemand_scale_df","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"dispatch_plot = StatsPlots.@df(\n demand_scale_df,\n Plots.plot(\n :demand,\n [:dispatch_G1, :dispatch_G2],\n labels = [\"G1\" \"G2\"],\n title = \"Thermal Dispatch\",\n legend = :bottomright,\n linewidth = 3,\n xlabel = \"Demand\",\n ylabel = \"Dispatch [MW]\",\n ),\n)\n\nwind_plot = StatsPlots.@df(\n demand_scale_df,\n Plots.plot(\n :demand,\n [:dispatch_wind, :spillage_wind],\n labels = [\"Dispatch\" \"Spillage\"],\n title = \"Wind\",\n legend = :bottomright,\n linewidth = 3,\n xlabel = \"Demand [MW]\",\n ylabel = \"Energy [MW]\",\n ),\n)\n\nPlots.plot(dispatch_plot, wind_plot)","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"This particular drawback can be overcome by introducing binary decisions on the \"on/off\" status of generators. This model is called unit commitment and considered later in these notes.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"For further reading on the interplay between wind generation and the minimum power output constraints of generators, we refer interested readers to R. Baldick, \"Wind and energy markets: a case study of Texas,\" IEEE Systems Journal, vol. 6, pp. 27-34, 2012.","category":"page"},{"location":"tutorials/applications/power_systems/#Unit-commitment","page":"Power Systems","title":"Unit commitment","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"The Unit Commitment (UC) model can be obtained from ED model by introducing binary variable associated with each generator. This binary variable can attain two values: if it is \"1,\" the generator is synchronized and, thus, can be dispatched, otherwise, that is, if the binary variable is \"0,\" that generator is not synchronized and its power output is set to 0.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"To obtain the mathematical formulation of the UC model, we will modify the constraints of the ED model as follows:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"g^min_i cdot u_ti leq g_i leq g^max_i cdot u_ti","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"where u_i in 01 In this constraint, if u_i = 0, then g_i = 0. On the other hand, if u_i = 1, then g^min_i leq g_i leq g^max_i.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"For further reading on the UC problem we refer interested readers to G. Morales-Espana, J. M. Latorre, and A. Ramos, \"Tight and Compact MILP Formulation for the Thermal Unit Commitment Problem,\" IEEE Transactions on Power Systems, vol. 28, pp. 4897-4908, 2013.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"In the following example we convert the ED model explained above to the UC model.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"function solve_unit_commitment(generators::Vector, wind, scenario)\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n N = length(generators)\n @variable(model, 0 <= g[i = 1:N] <= generators[i].max)\n @variable(model, 0 <= w <= scenario.wind)\n @constraint(model, sum(g[i] for i in 1:N) + w == scenario.demand)\n # !!! New: add binary on-off variables for each generator\n @variable(model, u[i = 1:N], Bin)\n @constraint(model, [i = 1:N], g[i] <= generators[i].max * u[i])\n @constraint(model, [i = 1:N], g[i] >= generators[i].min * u[i])\n @objective(\n model,\n Min,\n sum(generators[i].variable_cost * g[i] for i in 1:N) +\n wind.variable_cost * w +\n # !!! new\n sum(generators[i].fixed_cost * u[i] for i in 1:N)\n )\n optimize!(model)\n status = termination_status(model)\n if status != OPTIMAL\n return (status = status,)\n end\n @assert primal_status(model) == FEASIBLE_POINT\n return (\n status = status,\n g = value.(g),\n w = value(w),\n wind_spill = scenario.wind - value(w),\n u = value.(u),\n total_cost = objective_value(model),\n )\nend","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Solve the unit commitment problem","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"solution = solve_unit_commitment(generators, wind_generator, scenario)\n\nprintln(\"Dispatch of Generators: \", solution.g, \" MW\")\nprintln(\"Commitments of Generators: \", solution.u)\nprintln(\"Dispatch of Wind: \", solution.w, \" MW\")\nprintln(\"Wind spillage: \", solution.wind_spill, \" MW\")\nprintln(\"Total cost: \\$\", solution.total_cost)","category":"page"},{"location":"tutorials/applications/power_systems/#Unit-commitment-as-a-function-of-demand","page":"Power Systems","title":"Unit commitment as a function of demand","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"After implementing the unit commitment model, we can now assess the interplay between the minimum power output constraints on generators and wind generation.","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"uc_df = DataFrames.DataFrame(;\n demand = Float64[],\n commitment_G1 = Float64[],\n commitment_G2 = Float64[],\n dispatch_G1 = Float64[],\n dispatch_G2 = Float64[],\n dispatch_wind = Float64[],\n spillage_wind = Float64[],\n total_cost = Float64[],\n)\n\nfor demand_scale in 0.2:0.1:1.4\n new_scenario = scale_demand(scenario, demand_scale)\n sol = solve_unit_commitment(generators, wind_generator, new_scenario)\n if sol.status == OPTIMAL\n push!(\n uc_df,\n (\n new_scenario.demand,\n sol.u[1],\n sol.u[2],\n sol.g[1],\n sol.g[2],\n sol.w,\n sol.wind_spill,\n sol.total_cost,\n ),\n )\n end\n println(\"Status: $(sol.status) for demand_scale = $(demand_scale)\")\nend","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"uc_df","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"commitment_plot = StatsPlots.@df(\n uc_df,\n Plots.plot(\n :demand,\n [:commitment_G1, :commitment_G2],\n labels = [\"G1\" \"G2\"],\n title = \"Commitment\",\n legend = :bottomright,\n linewidth = 3,\n xlabel = \"Demand [MW]\",\n ylabel = \"Commitment decision {0, 1}\",\n ),\n)\n\ndispatch_plot = StatsPlots.@df(\n uc_df,\n Plots.plot(\n :demand,\n [:dispatch_G1, :dispatch_G2, :dispatch_wind],\n labels = [\"G1\" \"G2\" \"Wind\"],\n title = \"Dispatch [MW]\",\n legend = :bottomright,\n linewidth = 3,\n xlabel = \"Demand\",\n ylabel = \"Dispatch [MW]\",\n ),\n)\n\nPlots.plot(commitment_plot, dispatch_plot)","category":"page"},{"location":"tutorials/applications/power_systems/#Nonlinear-economic-dispatch","page":"Power Systems","title":"Nonlinear economic dispatch","text":"","category":"section"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"As a final example, we modify our economic dispatch problem in two ways:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"The thermal cost function is user-defined\nThe output of the wind is only the square-root of the dispatch","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"import Ipopt\n\n\"\"\"\n thermal_cost_function(g)\n\nA user-defined thermal cost function in pure-Julia! You can include\nnonlinearities, and even things like control flow.\n\n!!! warning\n It's still up to you to make sure that the function has a meaningful\n derivative.\n\"\"\"\nfunction thermal_cost_function(g)\n if g <= 500\n return g\n else\n return g + 1e-2 * (g - 500)^2\n end\nend\n\nfunction solve_nonlinear_economic_dispatch(\n generators::Vector,\n wind,\n scenario;\n silent::Bool = false,\n)\n model = Model(Ipopt.Optimizer)\n if silent\n set_silent(model)\n end\n @operator(model, op_tcf, 1, thermal_cost_function)\n N = length(generators)\n @variable(model, generators[i].min <= g[i = 1:N] <= generators[i].max)\n @variable(model, 0 <= w <= scenario.wind)\n @objective(\n model,\n Min,\n sum(generators[i].variable_cost * op_tcf(g[i]) for i in 1:N) +\n wind.variable_cost * w,\n )\n @constraint(model, sum(g[i] for i in 1:N) + sqrt(w) == scenario.demand)\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return (\n g = value.(g),\n w = value(w),\n wind_spill = scenario.wind - value(w),\n total_cost = objective_value(model),\n )\nend\n\nsolution =\n solve_nonlinear_economic_dispatch(generators, wind_generator, scenario)","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"Now let's see how the wind is dispatched as a function of the cost:","category":"page"},{"location":"tutorials/applications/power_systems/","page":"Power Systems","title":"Power Systems","text":"wind_cost = 0.0:1:100\nwind_dispatch = Float64[]\nfor c in wind_cost\n sol = solve_nonlinear_economic_dispatch(\n generators,\n WindGenerator(c),\n scenario;\n silent = true,\n )\n push!(wind_dispatch, sol.w)\nend\n\nPlots.plot(\n wind_cost,\n wind_dispatch;\n xlabel = \"Cost\",\n ylabel = \"Dispatch [MW]\",\n label = false,\n)","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"EditURL = \"logistic_regression.jl\"","category":"page"},{"location":"tutorials/conic/logistic_regression/#Example:-logistic-regression","page":"Example: logistic regression","title":"Example: logistic regression","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"This tutorial was originally contributed by François Pacaud.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"This tutorial shows how to solve a logistic regression problem with JuMP. Logistic regression is a well known method in machine learning, useful when we want to classify binary variables with the help of a given set of features. To this goal, we find the optimal combination of features maximizing the (log)-likelihood onto a training set.","category":"page"},{"location":"tutorials/conic/logistic_regression/#Required-packages","page":"Example: logistic regression","title":"Required packages","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"using JuMP\nimport MathOptInterface as MOI\nimport Random\nimport SCS\n\nRandom.seed!(2713);\nnothing #hide","category":"page"},{"location":"tutorials/conic/logistic_regression/#Formulating-the-logistic-regression-problem","page":"Example: logistic regression","title":"Formulating the logistic regression problem","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"Suppose we have a set of training data-point i = 1 cdots n, where for each i we have a vector of features x_i in mathbbR^p and a categorical observation y_i in -1 1.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"The log-likelihood is given by","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"l(theta) = sum_i=1^n log(dfrac11 + exp(-y_i theta^top x_i))","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"and the optimal theta minimizes the logistic loss function:","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"min_theta sum_i=1^n log(1 + exp(-y_i theta^top x_i))","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"Most of the time, instead of solving directly the previous optimization problem, we prefer to add a regularization term:","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"min_theta sum_i=1^n log(1 + exp(-y_i theta^top x_i)) + lambda theta ","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"with lambda in mathbbR_+ a penalty and a norm function. By adding such a regularization term, we avoid overfitting on the training set and usually achieve a greater score in cross-validation.","category":"page"},{"location":"tutorials/conic/logistic_regression/#Reformulation-as-a-conic-optimization-problem","page":"Example: logistic regression","title":"Reformulation as a conic optimization problem","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"By introducing auxiliary variables t_1 cdots t_n and r, the optimization problem is equivalent to","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"beginaligned\nmin_t r theta sum_i=1^n t_i + lambda r \ntextsubject to quad t_i geq log(1 + exp(- y_i theta^top x_i)) \n quad r geq theta\nendaligned","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"Now, the trick is to reformulate the constraints t_i geq log(1 + exp(- y_i theta^top x_i)) with the help of the exponential cone","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"K_exp = (x y z) in mathbbR^3 y exp(x y) leq z ","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"Indeed, by passing to the exponential, we see that for all i=1 cdots n, the constraint t_i geq log(1 + exp(- y_i theta^top x_i)) is equivalent to","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"exp(-t_i) + exp(u_i - t_i) leq 1","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"with u_i = -y_i theta^top x_i. Then, by adding two auxiliary variables z_i1 and z_i2 such that z_i1 geq exp(u_i-t_i) and z_i2 geq exp(-t_i), we get the equivalent formulation","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"left\nbeginaligned\n(u_i -t_i 1 z_i1) in K_exp \n(-t_i 1 z_i2) in K_exp \nz_i1 + z_i2 leq 1\nendaligned\nright","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"In this setting, the conic version of the logistic regression problems writes out","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"beginaligned\nmin_t z r theta sum_i=1^n t_i + lambda r \ntextsubject to quad (u_i -t_i 1 z_i1) in K_exp \n quad (-t_i 1 z_i2) in K_exp \n quad z_i1 + z_i2 leq 1 \n quad u_i = -y_i x_i^top theta \n quad r geq theta\nendaligned","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"and thus encompasses 3n + p + 1 variables and 3n + 1 constraints (u_i = -y_i theta^top x_i is only a virtual constraint used to clarify the notation). Thus, if n gg 1, we get a large number of variables and constraints.","category":"page"},{"location":"tutorials/conic/logistic_regression/#Fitting-logistic-regression-with-a-conic-solver","page":"Example: logistic regression","title":"Fitting logistic regression with a conic solver","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"We start by implementing a function to generate a fake dataset, and where we could tune the correlation between the feature variables. The function is a direct transcription of the one used in this blog post.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"function generate_dataset(n_samples = 100, n_features = 10; shift = 0.0)\n X = randn(n_samples, n_features)\n w = randn(n_features)\n y = sign.(X * w)\n X .+= 0.8 * randn(n_samples, n_features) # add noise\n X .+= shift # shift the points in the feature space\n X = hcat(X, ones(n_samples, 1))\n return X, y\nend","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"We write a softplus function to formulate each constraint t geq log(1 + exp(u)) with two exponential cones.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"function softplus(model, t, u)\n z = @variable(model, [1:2], lower_bound = 0.0)\n @constraint(model, sum(z) <= 1.0)\n @constraint(model, [u - t, 1, z[1]] in MOI.ExponentialCone())\n @constraint(model, [-t, 1, z[2]] in MOI.ExponentialCone())\nend","category":"page"},{"location":"tutorials/conic/logistic_regression/#\\ell_2-regularized-logistic-regression","page":"Example: logistic regression","title":"ell_2 regularized logistic regression","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"Then, with the help of the softplus function, we could write our optimization model. In the ell_2 regularization case, the constraint r geq theta_2 rewrites as a second order cone constraint.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"function build_logit_model(X, y, λ)\n n, p = size(X)\n model = Model()\n @variable(model, θ[1:p])\n @variable(model, t[1:n])\n for i in 1:n\n u = -(X[i, :]' * θ) * y[i]\n softplus(model, t[i], u)\n end\n # Add ℓ2 regularization\n @variable(model, 0.0 <= reg)\n @constraint(model, [reg; θ] in SecondOrderCone())\n # Define objective\n @objective(model, Min, sum(t) + λ * reg)\n return model\nend","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"We generate the dataset.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"warning: Warning\nBe careful here, for large n and p SCS could fail to converge.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"n, p = 200, 10\nX, y = generate_dataset(n, p; shift = 10.0);\n\n# We could now solve the logistic regression problem\nλ = 10.0\nmodel = build_logit_model(X, y, λ)\nset_optimizer(model, SCS.Optimizer)\nset_silent(model)\noptimize!(model)\n@assert is_solved_and_feasible(model)","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"θ♯ = value.(model[:θ])","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"It appears that the speed of convergence is not that impacted by the correlation of the dataset, nor by the penalty lambda.","category":"page"},{"location":"tutorials/conic/logistic_regression/#\\ell_1-regularized-logistic-regression","page":"Example: logistic regression","title":"ell_1 regularized logistic regression","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"We now formulate the logistic problem with a ell_1 regularization term. The ell_1 regularization ensures sparsity in the optimal solution of the resulting optimization problem. Luckily, the ell_1 norm is implemented as a set in MathOptInterface. Thus, we could formulate the sparse logistic regression problem with the help of a MOI.NormOneCone set.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"function build_sparse_logit_model(X, y, λ)\n n, p = size(X)\n model = Model()\n @variable(model, θ[1:p])\n @variable(model, t[1:n])\n for i in 1:n\n u = -(X[i, :]' * θ) * y[i]\n softplus(model, t[i], u)\n end\n # Add ℓ1 regularization\n @variable(model, 0.0 <= reg)\n @constraint(model, [reg; θ] in MOI.NormOneCone(p + 1))\n # Define objective\n @objective(model, Min, sum(t) + λ * reg)\n return model\nend\n\n# Auxiliary function to count non-null components:\ncount_nonzero(v::Vector; tol = 1e-6) = sum(abs.(v) .>= tol)\n\n# We solve the sparse logistic regression problem on the same dataset as before.\nλ = 10.0\nsparse_model = build_sparse_logit_model(X, y, λ)\nset_optimizer(sparse_model, SCS.Optimizer)\nset_silent(sparse_model)\noptimize!(sparse_model)\n@assert is_solved_and_feasible(sparse_model)","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"θ♯ = value.(sparse_model[:θ])\nprintln(\n \"Number of non-zero components: \",\n count_nonzero(θ♯),\n \" (out of \",\n p,\n \" features)\",\n)","category":"page"},{"location":"tutorials/conic/logistic_regression/#Extensions","page":"Example: logistic regression","title":"Extensions","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"A direct extension would be to consider the sparse logistic regression with hard thresholding, which, on contrary to the soft version using a ell_1 regularization, adds an explicit cardinality constraint in its formulation:","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"beginaligned\nmin_theta sum_i=1^n log(1 + exp(-y_i theta^top x_i)) + lambda theta _2^2 \ntextsubject to quad theta _0 = k\nendaligned","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"where k is the maximum number of non-zero components in the vector theta, and _0 is the ell_0 pseudo-norm:","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":" x_0 = i x_i neq 0","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Example: logistic regression","title":"Example: logistic regression","text":"The cardinality constraint theta_0 leq k could be reformulated with binary variables. Thus the hard sparse regression problem could be solved by any solver supporting mixed integer conic problems.","category":"page"},{"location":"moi/background/motivation/","page":"Motivation","title":"Motivation","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/background/motivation.md\"","category":"page"},{"location":"moi/background/motivation/#Motivation","page":"Motivation","title":"Motivation","text":"","category":"section"},{"location":"moi/background/motivation/","page":"Motivation","title":"Motivation","text":"MathOptInterface (MOI) is a replacement for MathProgBase, the first-generation abstraction layer for mathematical optimization previously used by JuMP and Convex.jl.","category":"page"},{"location":"moi/background/motivation/","page":"Motivation","title":"Motivation","text":"To address a number of limitations of MathProgBase, MOI is designed to:","category":"page"},{"location":"moi/background/motivation/","page":"Motivation","title":"Motivation","text":"Be simple and extensible\nunifying linear, quadratic, and conic optimization,\nseamlessly facilitating extensions to essentially arbitrary constraints and functions (for example, indicator constraints, complementarity constraints, and piecewise-linear functions)\nBe fast\nby allowing access to a solver's in-memory representation of a problem without writing intermediate files (when possible)\nby using multiple dispatch and avoiding requiring containers of non-concrete types\nAllow a solver to return multiple results (for example, a pool of solutions)\nAllow a solver to return extra arbitrary information via attributes (for example, variable- and constraint-wise membership in an irreducible inconsistent subset for infeasibility analysis)\nProvide a greatly expanded set of status codes explaining what happened during the optimization procedure\nEnable a solver to more precisely specify which problem classes it supports\nEnable both primal and dual warm starts\nEnable adding and removing both variables and constraints by indices that are not required to be consecutive\nEnable any modification that the solver supports to an existing model\nAvoid requiring the solver wrapper to store an additional copy of the problem data","category":"page"},{"location":"tutorials/conic/introduction/#Introduction","page":"Introduction","title":"Introduction","text":"","category":"section"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"Conic programs are a class of convex nonlinear optimization problems which use cones to represent the nonlinearities. They have the form:","category":"page"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"beginalign\n min_x in mathbbR^n f_0(x) \n textst f_j(x) in mathcalS_j j = 1 ldots m\nendalign","category":"page"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"Mixed-integer conic programs (MICPs) are extensions of conic programs in which some (or all) of the decision variables take discrete values.","category":"page"},{"location":"tutorials/conic/introduction/#How-to-choose-a-solver","page":"Introduction","title":"How to choose a solver","text":"","category":"section"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"JuMP supports a range of conic solvers, although support differs on what types of cones each solver supports. In the list of Supported solvers, \"SOCP\" denotes solvers supporting second-order cones and \"SDP\" denotes solvers supporting semidefinite cones. In addition, solvers such as SCS and Mosek have support for the exponential cone. Moreover, due to the bridging system in MathOptInterface, many of these solvers support a much wider range of exotic cones than they natively support. Solvers supporting discrete variables start with \"(MI)\" in the list of Supported solvers.","category":"page"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"tip: Tip\nDuality plays a large role in solving conic optimization models. Depending on the solver, it can be more efficient to solve the dual instead of the primal. If performance is an issue, see the Dualization tutorial for more details.","category":"page"},{"location":"tutorials/conic/introduction/#How-these-tutorials-are-structured","page":"Introduction","title":"How these tutorials are structured","text":"","category":"section"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"Having a high-level overview of how this part of the documentation is structured will help you know where to look for certain things.","category":"page"},{"location":"tutorials/conic/introduction/","page":"Introduction","title":"Introduction","text":"The following tutorials are worked examples that present a problem in words, then formulate it in mathematics, and then solve it in JuMP. This usually involves some sort of visualization of the solution. Start here if you are new to JuMP.\nExample: experiment design\nExample: logistic regression\nThe Modeling with cones tutorial contains a number of helpful reformulations and tricks you can use when modeling conic programs. Look here if you are stuck trying to formulate a problem as a conic program.\nThe remaining tutorials are less verbose and styled in the form of short code examples. These tutorials have less explanation, but may contain useful code snippets, particularly if they are similar to a problem you are trying to solve.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/tutorials/manipulating_expressions.md\"","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Manipulating-expressions","page":"Manipulating expressions","title":"Manipulating expressions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"This guide highlights a syntactically appealing way to build expressions at the MOI level, but also to look at their contents. It may be especially useful when writing models or bridge code.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Creating-functions","page":"Manipulating expressions","title":"Creating functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"This section details the ways to create functions with MathOptInterface.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Creating-scalar-affine-functions","page":"Manipulating expressions","title":"Creating scalar affine functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"The simplest scalar function is simply a variable:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> x = MOI.add_variable(model) # Create the variable x\nMOI.VariableIndex(1)","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"This type of function is extremely simple; to express more complex functions, other types must be used. For instance, a ScalarAffineFunction is a sum of linear terms (a factor times a variable) and a constant. Such an object can be built using the standard constructor:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1, x)], 2) # x + 2\n(2) + (1) MOI.VariableIndex(1)","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"However, you can also use operators to build the same scalar function:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> f = x + 2\n(2) + (1) MOI.VariableIndex(1)","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Creating-scalar-quadratic-functions","page":"Manipulating expressions","title":"Creating scalar quadratic functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"Scalar quadratic functions are stored in ScalarQuadraticFunction objects, in a way that is highly similar to scalar affine functions. You can obtain a quadratic function as a product of affine functions:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> 1 * x * x\n(0) + 1.0 MOI.VariableIndex(1)²\n\njulia> f * f # (x + 2)²\n(4) + (2) MOI.VariableIndex(1) + (2) MOI.VariableIndex(1) + 1.0 MOI.VariableIndex(1)²\n\njulia> f^2 # (x + 2)² too\n(4) + (2) MOI.VariableIndex(1) + (2) MOI.VariableIndex(1) + 1.0 MOI.VariableIndex(1)²","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Creating-vector-functions","page":"Manipulating expressions","title":"Creating vector functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"A vector function is a function with several values, irrespective of the number of input variables. Similarly to scalar functions, there are three main types of vector functions: VectorOfVariables, VectorAffineFunction, and VectorQuadraticFunction.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"The easiest way to create a vector function is to stack several scalar functions using Utilities.vectorize. It takes a vector as input, and the generated vector function (of the most appropriate type) has each dimension corresponding to a dimension of the vector.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> g = MOI.Utilities.vectorize([f, 2 * f])\n┌ ┐\n│(2) + (1) MOI.VariableIndex(1)│\n│(4) + (2) MOI.VariableIndex(1)│\n└ ┘","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"warning: Warning\nUtilities.vectorize only takes a vector of similar scalar functions: you cannot mix VariableIndex and ScalarAffineFunction, for instance. In practice, it means that Utilities.vectorize([x, f]) does not work; you should rather use Utilities.vectorize([1 * x, f]) instead to only have ScalarAffineFunction objects.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Canonicalizing-functions","page":"Manipulating expressions","title":"Canonicalizing functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"In more advanced use cases, you might need to ensure that a function is \"canonical.\" Functions are stored as an array of terms, but there is no check that these terms are redundant: a ScalarAffineFunction object might have two terms with the same variable, like x + x + 1. These terms could be merged without changing the semantics of the function: 2x + 1.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"Working with these objects might be cumbersome. Canonicalization helps maintain redundancy to zero.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"Utilities.is_canonical checks whether a function is already in its canonical form:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> MOI.Utilities.is_canonical(f + f) # (x + 2) + (x + 2) is stored as x + x + 4\nfalse","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"Utilities.canonical returns the equivalent canonical version of the function:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> MOI.Utilities.canonical(f + f) # Returns 2x + 4\n(4) + (2) MOI.VariableIndex(1)","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Exploring-functions","page":"Manipulating expressions","title":"Exploring functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"At some point, you might need to dig into a function, for instance to map it into solver constructs.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/#Vector-functions","page":"Manipulating expressions","title":"Vector functions","text":"","category":"section"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"Utilities.scalarize returns a vector of scalar functions from a vector function:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> MOI.Utilities.scalarize(g) # Returns a vector [f, 2 * f].\n2-element Vector{MathOptInterface.ScalarAffineFunction{Int64}}:\n (2) + (1) MOI.VariableIndex(1)\n (4) + (2) MOI.VariableIndex(1)","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"note: Note\nUtilities.eachscalar returns an iterator on the dimensions, which serves the same purpose as Utilities.scalarize.","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"output_dimension returns the number of dimensions of the output of a function:","category":"page"},{"location":"moi/tutorials/manipulating_expressions/","page":"Manipulating expressions","title":"Manipulating expressions","text":"julia> MOI.output_dimension(g)\n2","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"EditURL = \"https://github.com/jump-dev/MosekTools.jl/blob/v0.15.1/README.md\"","category":"page"},{"location":"packages/MosekTools/#MosekTools.jl","page":"jump-dev/MosekTools.jl","title":"MosekTools.jl","text":"","category":"section"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"MosekTools.jl is the MathOptInterface.jl implementation for the MOSEK solver.","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"The low-level solver API for MOSEK is found in the package Mosek.jl.","category":"page"},{"location":"packages/MosekTools/#Affiliation","page":"jump-dev/MosekTools.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"MosekTools.jl is maintained by the JuMP community and is not officially supported by MOSEK. However, Mosek.jl is an officially supported product of MOSEK.","category":"page"},{"location":"packages/MosekTools/#License","page":"jump-dev/MosekTools.jl","title":"License","text":"","category":"section"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"MosekTools.jl is licensed under the MIT License.","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"The underlying solver is a closed-source commercial product for which you must obtain a license.","category":"page"},{"location":"packages/MosekTools/#Installation","page":"jump-dev/MosekTools.jl","title":"Installation","text":"","category":"section"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"The latest release of this package and the master branch are to be used with the latest release of Mosek.jl (which uses MOSEK v10).","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"To use MOSEK v9 (resp. v8), use the v0.12.x (resp. v0.7.x) releases of this package, and the mosekv9 (resp. mosekv8) branch and v1.2.x (resp. v0.9.x) releases of Mosek.jl.","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"See the following table for a summary:","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"MOSEK Mosek.jl MosekTools.jl release MosekTools.jl branch\nv10 v10 v0.13 master\nv9 v0.12 v0.12 mosekv9\nv8 v0.9 v0.7 mosekv8","category":"page"},{"location":"packages/MosekTools/#Use-with-JuMP","page":"jump-dev/MosekTools.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"using JuMP\nusing MosekTools\nmodel = Model(Mosek.Optimizer)\nset_attribute(model, \"QUIET\", true)\nset_attribute(model, \"INTPNT_CO_TOL_DFEAS\", 1e-7)","category":"page"},{"location":"packages/MosekTools/#Options","page":"jump-dev/MosekTools.jl","title":"Options","text":"","category":"section"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"The parameter QUIET is a special parameter that when set to true disables all Mosek printing output.","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"All other parameters can be found in the Mosek documentation.","category":"page"},{"location":"packages/MosekTools/","page":"jump-dev/MosekTools.jl","title":"jump-dev/MosekTools.jl","text":"Note that the prefix MSK_IPAR_ (for integer parameters), MSK_DPAR_ (for floating point parameters) or MSK_SPAR_ (for string parameters) are optional. If they are not given, they are inferred from the type of the value. For example, in the example above, as 1e-7 is a floating point number, the parameters name used is MSK_DPAR_INTPNT_CO_TOL_DFEAS.","category":"page"},{"location":"developers/style/#Style-guide-and-design-principles","page":"Style Guide","title":"Style guide and design principles","text":"","category":"section"},{"location":"developers/style/#Style-guide","page":"Style Guide","title":"Style guide","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"This section describes the coding style rules that apply to JuMP code and that we recommend for JuMP models and surrounding Julia code. The motivations for a style guide include:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"conveying best practices for writing readable and maintainable code\nreducing the amount of time spent on bike-shedding by establishing basic naming and formatting conventions\nlowering the barrier for new contributors by codifying the existing practices (for example, you can be more confident your code will pass review if you follow the style guide)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"In some cases, the JuMP style guide diverges from the Julia style guide. All such cases will be explicitly noted and justified.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"The JuMP style guide adopts many recommendations from the Google style guides.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"info: Info\nThe style guide is always a work in progress, and not all JuMP code follows the rules. When modifying JuMP, please fix the style violations of the surrounding code (that is, leave the code tidier than when you started). If large changes are needed, consider separating them into another PR.","category":"page"},{"location":"developers/style/#JuliaFormatter","page":"Style Guide","title":"JuliaFormatter","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"JuMP uses JuliaFormatter.jl as an auto-formatting tool.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"We use the options contained in .JuliaFormatter.toml.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"To format code, cd to the JuMP directory, then run:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"] add JuliaFormatter@1\nusing JuliaFormatter\nformat(\"docs\")\nformat(\"src\")\nformat(\"test\")","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"info: Info\nA continuous integration check verifies that all PRs made to JuMP have passed the formatter.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"The following sections outline extra style guide points that are not fixed automatically by JuliaFormatter.","category":"page"},{"location":"developers/style/#Abstract-types-and-composition","page":"Style Guide","title":"Abstract types and composition","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Specifying types for method arguments is mostly optional in Julia. The benefit of abstract method arguments is that it enables functions and types from one package to be used with functions and types from another package via multiple dispatch.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"However, abstractly typed methods have two main drawbacks:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"It's possible to find out that you are working with unexpected types deep in the call chain, potentially leading to hard-to-diagnose MethodErrors.\nUntyped function arguments can lead to correctness problems if the user's choice of input type does not satisfy the assumptions made by the author of the function.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"As a motivating example, consider the following function:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> function my_sum(x)\n y = 0.0\n for i in 1:length(x)\n y += x[i]\n end\n return y\n end\nmy_sum (generic function with 1 method)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"This function contains a number of implicit assumptions about the type of x:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"x supports 1-based getindex and implements length\nThe element type of x supports addition with 0.0, and then with the result of x + 0.0.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"info: Info\nAs a motivating example for the second point, VariableRef plus Float64 produces an AffExpr. Do not assume that +(::A, ::B) produces an instance of the type A or B.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"my_sum works as expected if the user passes in Vector{Float64}:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum([1.0, 2.0, 3.0])\n6.0","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"but it doesn't respect input types, for example returning a Float64 if the user passes Vector{Int}:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum([1, 2, 3])\n6.0","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"but it throws a MethodError if the user passes String:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum(\"abc\")\nERROR: MethodError: no method matching +(::Float64, ::Char)\n[...]","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"This particular MethodError is hard to debug, particularly for new users, because it mentions +, Float64, and Char, none of which were called or passed by the user.","category":"page"},{"location":"developers/style/#Dealing-with-MethodErrors","page":"Style Guide","title":"Dealing with MethodErrors","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"This section diverges from the Julia style guide, as well as other common guides like SciML. The following suggestions are intended to provide a friendlier experience for novice Julia programmers, at the cost of limiting the power and flexibility of advanced Julia programmers.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Code should follow the MethodError principle:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"info: The MethodError principle\nA user should see a MethodError only for methods that they called directly.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Bad:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"_internal_function(x::Integer) = x + 1\n# The user sees a MethodError for _internal_function when calling\n# public_function(\"a string\"). This is not very helpful.\npublic_function(x) = _internal_function(x)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Good:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"_internal_function(x::Integer) = x + 1\n# The user sees a MethodError for public_function when calling\n# public_function(\"a string\"). This is easy to understand.\npublic_function(x::Integer) = _internal_function(x)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"If it is hard to provide an error message at the top of the call chain, then the following pattern is also ok:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"_internal_function(x::Integer) = x + 1\nfunction _internal_function(x)\n error(\n \"Internal error. This probably means that you called \" *\n \"`public_function()`s with the wrong type.\",\n )\nend\npublic_function(x) = _internal_function(x)","category":"page"},{"location":"developers/style/#Dealing-with-correctness","page":"Style Guide","title":"Dealing with correctness","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Dealing with correctness is harder, because Julia has no way of formally specifying interfaces that abstract types must implement. Instead, here are two options that you can use when writing and interacting with generic code:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Option 1: use concrete types and let users extend new methods.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"In this option, explicitly restrict input arguments to concrete types that are tested and have been validated for correctness. For example:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> function my_sum_option_1(x::Vector{Float64})\n y = 0.0\n for i in 1:length(x)\n y += x[i]\n end\n return y\n end\nmy_sum_option_1 (generic function with 1 method)\n\njulia> my_sum_option_1([1.0, 2.0, 3.0])\n6.0","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Using concrete types satisfies the MethodError principle:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum_option_1(\"abc\")\nERROR: MethodError: no method matching my_sum_option_1(::String)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"and it allows other types to be supported in future by defining new methods:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> function my_sum_option_1(x::Array{T,N}) where {T<:Number,N}\n y = zero(T)\n for i in eachindex(x)\n y += x[i]\n end\n return y\n end\nmy_sum_option_1 (generic function with 2 methods)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Importantly, these methods do not have to be defined in the original package.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"info: Info\nSome usage of abstract types is okay. For example, in my_sum_option_1, we allowed the element type, T, to be a subtype of Number. This is fairly safe, but it still has an implicit assumption that T supports zero(T) and +(::T, ::T).","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Option 2: program defensively, and validate all assumptions.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"An alternative is to program defensively, and to rigorously document and validate all assumptions that the code makes. In particular:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"All assumptions on abstract types that aren't guaranteed by the definition of the abstract type (for example, optional methods without a fallback) should be documented.\nIf practical, the assumptions should be checked in code, and informative error messages should be provided to the user if the assumptions are not met. In general, these checks may be expensive, so you should prefer to do this once, at the highest level of the call-chain.\nTests should cover for a range of corner cases and argument types.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"For example:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"\"\"\"\n test_my_sum_defensive_assumptions(x::AbstractArray{T}) where {T}\n\nTest the assumptions made by `my_sum_defensive`.\n\"\"\"\nfunction test_my_sum_defensive_assumptions(x::AbstractArray{T}) where {T}\n try\n # Some types may not define zero.\n @assert zero(T) isa T\n # Check iteration supported\n @assert iterate(x) isa Union{Nothing,Tuple{T,Int}}\n # Check that + is defined\n @assert +(zero(T), zero(T)) isa Any\n catch err\n error(\n \"Unable to call my_sum_defensive(::$(typeof(x))) because \" *\n \"it failed an internal assumption\",\n )\n end\n return\nend\n\n\"\"\"\n my_sum_defensive(x::AbstractArray{T}) where {T}\n\nReturn the sum of the elements in the abstract array `x`.\n\n## Assumptions\n\nThis function makes the following assumptions:\n\n * That `zero(T)` is defined\n * That `x` supports the iteration interface\n * That `+(::T, ::T)` is defined\n\"\"\"\nfunction my_sum_defensive(x::AbstractArray{T}) where {T}\n test_my_sum_defensive_assumptions(x)\n y = zero(T)\n for xi in x\n y += xi\n end\n return y\nend\n\n# output\n\nmy_sum_defensive","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"This function works on Vector{Float64}:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum_defensive([1.0, 2.0, 3.0])\n6.0","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"as well as Matrix{Rational{Int}}:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum_defensive([(1//2) + (4//3)im; (6//5) + (7//11)im])\n17//10 + 65//33*im","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"and it throws an error when the assumptions aren't met:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"julia> my_sum_defensive(['a', 'b', 'c'])\nERROR: Unable to call my_sum_defensive(::Vector{Char}) because it failed an internal assumption\n[...]","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"As an alternative, you may choose not to call test_my_sum_defensive_assumptions within my_sum_defensive, and instead ask users of my_sum_defensive to call it in their tests.","category":"page"},{"location":"developers/style/#Juxtaposed-multiplication","page":"Style Guide","title":"Juxtaposed multiplication","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Only use juxtaposed multiplication when the right-hand side is a symbol.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Good:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"2x # Acceptable if there are space constraints.\n2 * x # This is preferred if space is not an issue.\n2 * (x + 1)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Bad:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"2(x + 1)","category":"page"},{"location":"developers/style/#Empty-vectors","page":"Style Guide","title":"Empty vectors","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"For a type T, T[] and Vector{T}() are equivalent ways to create an empty vector with element type T. Prefer T[] because it is more concise.","category":"page"},{"location":"developers/style/#Comments","page":"Style Guide","title":"Comments","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"For non-native speakers and for general clarity, comments in code must be proper English sentences with appropriate punctuation.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Good:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"# This is a comment demonstrating a good comment.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Bad:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"# a bad comment","category":"page"},{"location":"developers/style/#JuMP-macro-syntax","page":"Style Guide","title":"JuMP macro syntax","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"For consistency, always use parentheses.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Good:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variable(model, x >= 0)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Bad:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variable model x >= 0","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"For consistency, always use constant * variable as opposed to variable * constant. This makes it easier to read models in ambiguous cases like a * x.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Good:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"a = 4\n@constraint(model, 3 * x <= 1)\n@constraint(model, a * x <= 1)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Bad:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"a = 4\n@constraint(model, x * 3 <= 1)\n@constraint(model, x * a <= 1)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"In order to reduce boilerplate code, prefer the plural form of macros over lots of repeated calls to singular forms.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Good:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variables(model, begin\n x >= 0\n y >= 1\n z <= 2\nend)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Bad:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variable(model, x >= 0)\n@variable(model, y >= 1)\n@variable(model, z <= 2)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"An exception is made for calls with many keyword arguments, since these need to be enclosed in parentheses in order to parse properly.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Acceptable:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variable(model, x >= 0, start = 0.0, base_name = \"my_x\")\n@variable(model, y >= 1, start = 2.0)\n@variable(model, z <= 2, start = -1.0)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Also acceptable:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variables(model, begin\n x >= 0, (start = 0.0, base_name = \"my_x\")\n y >= 1, (start = 2.0)\n z <= 2, (start = -1.0)\nend)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"While we always use in for for-loops, it is acceptable to use = in the container declarations of JuMP macros.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Okay:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variable(model, x[i=1:3])","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Also okay:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@variable(model, x[i in 1:3])","category":"page"},{"location":"developers/style/#Naming","page":"Style Guide","title":"Naming","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"module SomeModule end\nfunction some_function end\nconst SOME_CONSTANT = ...\nstruct SomeStruct\n some_field::SomeType\nend\n@enum SomeEnum ENUM_VALUE_A ENUM_VALUE_B\nsome_local_variable = ...\nsome_file.jl # Except for ModuleName.jl.","category":"page"},{"location":"developers/style/#Exported-and-non-exported-names","page":"Style Guide","title":"Exported and non-exported names","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Begin private module level functions and constants with an underscore. All other objects in the scope of a module should be exported. (See JuMP.jl for an example of how to do this.)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Names beginning with an underscore should only be used for distinguishing between exported (public) and non-exported (private) objects. Therefore, never begin the name of a local variable with an underscore.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"module MyModule\n\nexport public_function, PUBLIC_CONSTANT\n\nfunction _private_function()\n local_variable = 1\n return\nend\n\nfunction public_function end\n\nconst _PRIVATE_CONSTANT = 3.14159\nconst PUBLIC_CONSTANT = 1.41421\n\nend","category":"page"},{"location":"developers/style/#Use-of-underscores-within-names","page":"Style Guide","title":"Use of underscores within names","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"The Julia style guide recommends avoiding underscores \"when readable,\" for example, haskey, isequal, remotecall, and remotecall_fetch. This convention creates the potential for unnecessary bikeshedding and also forces the user to recall the presence/absence of an underscore, for example, \"was that argument named basename or base_name?\". For consistency, always use underscores in variable names and function names to separate words.","category":"page"},{"location":"developers/style/#Use-of-!","page":"Style Guide","title":"Use of !","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Julia has a convention of appending ! to a function name if the function modifies its arguments. We recommend to:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Omit ! when the name itself makes it clear that modification is taking place, for example, add_constraint and set_name. We depart from the Julia style guide because ! does not provide a reader with any additional information in this case, and adherence to this convention is not uniform even in base Julia itself (consider Base.println and Base.finalize).\nUse ! in all other cases. In particular it can be used to distinguish between modifying and non-modifying variants of the same function like scale and scale!.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Note that ! is not a self-documenting feature because it is still ambiguous which arguments are modified when multiple arguments are present. Be sure to document which arguments are modified in the method's docstring.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"See also the Julia style guide recommendations for ordering of function arguments.","category":"page"},{"location":"developers/style/#Abbreviations","page":"Style Guide","title":"Abbreviations","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Abbreviate names to make the code more readable, not to save typing. Don't arbitrarily delete letters from a word to abbreviate it (for example, indx). Use abbreviations consistently within a body of code (for example, do not mix con and constr, idx and indx).","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Common abbreviations:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"num for number\ncon for constraint","category":"page"},{"location":"developers/style/#No-one-letter-variable-names","page":"Style Guide","title":"No one-letter variable names","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Where possible, avoid one-letter variable names.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Use model = Model() instead of m = Model()","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Exceptions are made for indices in loops.","category":"page"},{"location":"developers/style/#@enum-vs.-Symbol","page":"Style Guide","title":"@enum vs. Symbol","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"The @enum macro lets you define types with a finite number of values that are explicitly enumerated (like enum in C/C++). Symbols are lightweight strings that are used to represent identifiers in Julia (for example, :x).","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"@enum provides type safety and can have docstrings attached to explain the possible values. Use @enums when applicable, for example, for reporting statuses. Use strings to provide long-form additional information like error messages.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Use of Symbol should typically be reserved for identifiers, for example, for lookup in the JuMP model (model[:my_variable]).","category":"page"},{"location":"developers/style/#using-vs.-import","page":"Style Guide","title":"using vs. import","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"using ModuleName brings all symbols exported by the module ModuleName into scope, while import ModuleName brings only the module itself into scope. (See the Julia manual) for examples and more details.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"For the same reason that from import * is not recommended in python (PEP 8), avoid using ModuleName except in throw-away scripts or at the REPL. The using statement makes it harder to track where symbols come from and exposes the code to ambiguities when two modules export the same symbol.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Prefer using ModuleName: x, p to import ModuleName.x, ModuleName.p and import MyModule: x, p because the import versions allow method extension without qualifying with the module name.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Similarly, using ModuleName: ModuleName is an acceptable substitute for import ModuleName, because it does not bring all symbols exported by ModuleName into scope. However, we prefer import ModuleName for consistency.","category":"page"},{"location":"developers/style/#Documentation","page":"Style Guide","title":"Documentation","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"This section describes the writing style that should be used when writing documentation for JuMP (and supporting packages).","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"We can recommend the documentation style guides by Divio, Google, and Write the Docs as general reading for those writing documentation. This guide delegates a thorough handling of the topic to those guides and instead elaborates on the points more specific to Julia and documentation that use Documenter.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Be concise\nUse lists instead of long sentences\nUse numbered lists when describing a sequence, for example, (1) do X, (2) then Y\nUse bullet points when the items are not ordered\nExample code should be covered by doctests\nWhen a word is a Julia symbol and not an English word, enclose it with backticks. In addition, if it has a docstring in this doc add a link using @ref. If it is a plural, add the \"s\" after the closing backtick. For example,\n[`VariableRef`](@ref)s\nUse @meta blocks for TODOs and other comments that shouldn't be visible to readers. For example,\n```@meta\n# TODO: Mention also X, Y, and Z.\n```","category":"page"},{"location":"developers/style/#Docstrings","page":"Style Guide","title":"Docstrings","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Every exported object needs a docstring\nAll examples in docstrings should be jldoctests\nAlways use complete English sentences with proper punctuation\nDo not terminate lists with punctuation (for example, as in this doc)","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Here is an example:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"\"\"\"\n signature(args; kwargs...)\n\nShort sentence describing the function.\n\nOptional: add a slightly longer paragraph describing the function.\n\n## Notes\n\n - List any notes that the user should be aware of\n\n## Example\n\n```jldoctest\njulia> 1 + 1\n2\n```\n\"\"\"","category":"page"},{"location":"developers/style/#Testing","page":"Style Guide","title":"Testing","text":"","category":"section"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Use a module to encapsulate tests, and structure all tests as functions. This avoids leaking local variables between tests.","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Here is a basic skeleton:","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"module TestPkg\n\nusing Test\n\nfunction runtests()\n for name in names(@__MODULE__; all = true)\n if startswith(\"$(name)\", \"test_\")\n @testset \"$(name)\" begin\n getfield(@__MODULE__, name)()\n end\n end\n end\n return\nend\n\n_helper_function() = 2\n\nfunction test_addition()\n @test 1 + 1 == _helper_function()\n return\nend\n\nend # module TestPkg\n\nTestPkg.runtests()","category":"page"},{"location":"developers/style/","page":"Style Guide","title":"Style Guide","text":"Break the tests into multiple files, with one module per file, so that subsets of the codebase can be tested by calling include with the relevant file.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/submodules/Bridges/implementation.md\"","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/submodules/Bridges/implementation/#Implementing-a-bridge","page":"Implementation","title":"Implementing a bridge","text":"","category":"section"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"The easiest way to implement a bridge is to follow an existing example. There are three locations of bridges in the source code:","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Constraint bridges are stored in src/Bridges/Constraint/bridges\nObjective bridges are stored in src/Bridges/Objective/bridges\nVariable bridges are stored in src/Bridges/Variable/bridges","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"The Implementing a constraint bridge tutorial has a more detailed guide on what is required to implement a bridge.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"When opening a pull request that adds a new bridge, use the checklist Adding a new bridge.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"If you need help or advice, please contact the Developer Chatroom.","category":"page"},{"location":"moi/submodules/Bridges/implementation/#SetMap-bridges","page":"Implementation","title":"SetMap bridges","text":"","category":"section"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"For constraint and variable bridges, a common reformulation is that f(x) in F is reformulated to g(x) in G. In this case, no additional variables and constraints are added, and the bridge needs only a way to map between the functions f and g and the sets F and G.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"To implementation a bridge of this form, subtype the abstract type Bridges.Constraint.SetMapBridge or Bridges.Variable.SetMapBridge and implement the API described in the docstring of each type.","category":"page"},{"location":"moi/submodules/Bridges/implementation/#final_touch","page":"Implementation","title":"final_touch","text":"","category":"section"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Some bridges require information from other parts of the model. One set of examples are the various combinatorial ToMILP bridges, such as Bridges.Constraint.SOS1ToMILPBridge, which require knowledge of the variable bounds.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Bridges requiring information from other parts of the model should implement Bridges.final_touch and Bridges.needs_final_touch.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"During the bridge's construction, store the function and set and make no changes to the underlying model. Then, in Bridges.final_touch, query the additional information and add the reformulated problem to the model.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"When implementing, you must consider that:","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Bridges.final_touch may be called multiple times, so that your reformulation should be applied only if necessary. Sometimes the additional data will be the same, and sometimes it may be different.\nWe do not currently support final_touch bridges that introduce constraints which also require a final_touch bridge. Therefore, you should implement final_touch only if necessary, and we recommend that you contact the Developer Chatroom for advice before doing so.","category":"page"},{"location":"moi/submodules/Bridges/implementation/#Testing","page":"Implementation","title":"Testing","text":"","category":"section"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Use the Bridges.runtests function to test a bridge. It takes three arguments: the type of the bridge, the input model as a string, and the output model as a string.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Here is an example:","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"julia> MOI.Bridges.runtests(\n MOI.Bridges.Constraint.GreaterToLessBridge,\n \"\"\"\n variables: x\n x >= 1.0\n \"\"\",\n \"\"\"\n variables: x\n -1.0 * x <= -1.0\n \"\"\",\n )","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"There are a number of other useful keyword arguments.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"eltype can be used to specify the element type of the model (and bridge). It defaults to Float64.\nvariable_start and constraint_start are used as the values to set the VariablePrimalStart and ConstraintPrimalStart attributes to. They default to 1.2. If you use a different eltype, you must set appropriate starting values of the same type. The default 1.2 was chosen to minimize the risk that the starting point is undefined, which could happen for common situations like 0.0 and 1.0. The tests associated with the starting values do not necessarily check for correctness, only that they can be set and get to produce the same result.\nprint_inner_model can be used to print the reformulated output model from the bridge. This is especially helpful during debugging to see what the bridge is doing, and to spot mistakes. It defaults to false.","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"Here is an example:","category":"page"},{"location":"moi/submodules/Bridges/implementation/","page":"Implementation","title":"Implementation","text":"julia> MOI.Bridges.runtests(\n MOI.Bridges.Constraint.GreaterToLessBridge,\n \"\"\"\n variables: x\n x >= 1\n \"\"\",\n \"\"\"\n variables: x\n ::Int: -1 * x <= -1\n \"\"\";\n eltype = Int,\n print_inner_model = true,\n variable_start = 2,\n constraint_start = 2,\n )\nFeasibility\n\nSubject to:\n\nScalarAffineFunction{Int64}-in-LessThan{Int64}\n (0) - (1) x <= (-1)","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/submodules/Test/overview.md\"","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/submodules/Test/overview/#test_module","page":"Overview","title":"The Test submodule","text":"","category":"section"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"The Test submodule provides tools to help solvers implement unit tests in order to ensure they implement the MathOptInterface API correctly, and to check for solver-correctness.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"We use a centralized repository of tests, so that if we find a bug in one solver, instead of adding a test to that particular repository, we add it here so that all solvers can benefit.","category":"page"},{"location":"moi/submodules/Test/overview/#How-to-test-a-solver","page":"Overview","title":"How to test a solver","text":"","category":"section"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"The skeleton below can be used for the wrapper test file of a solver named FooBar.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"# ============================ /test/MOI_wrapper.jl ============================\nmodule TestFooBar\n\nimport FooBar\nusing Test\n\nimport MathOptInterface as MOI\n\nconst OPTIMIZER = MOI.instantiate(\n MOI.OptimizerWithAttributes(FooBar.Optimizer, MOI.Silent() => true),\n)\n\nconst BRIDGED = MOI.instantiate(\n MOI.OptimizerWithAttributes(FooBar.Optimizer, MOI.Silent() => true),\n with_bridge_type = Float64,\n)\n\n# See the docstring of MOI.Test.Config for other arguments.\nconst CONFIG = MOI.Test.Config(\n # Modify tolerances as necessary.\n atol = 1e-6,\n rtol = 1e-6,\n # Use MOI.LOCALLY_SOLVED for local solvers.\n optimal_status = MOI.OPTIMAL,\n # Pass attributes or MOI functions to `exclude` to skip tests that\n # rely on this functionality.\n exclude = Any[MOI.VariableName, MOI.delete],\n)\n\n\"\"\"\n runtests()\n\nThis function runs all functions in the this Module starting with `test_`.\n\"\"\"\nfunction runtests()\n for name in names(@__MODULE__; all = true)\n if startswith(\"$(name)\", \"test_\")\n @testset \"$(name)\" begin\n getfield(@__MODULE__, name)()\n end\n end\n end\nend\n\n\"\"\"\n test_runtests()\n\nThis function runs all the tests in MathOptInterface.Test.\n\nPass arguments to `exclude` to skip tests for functionality that is not\nimplemented or that your solver doesn't support.\n\"\"\"\nfunction test_runtests()\n MOI.Test.runtests(\n BRIDGED,\n CONFIG,\n exclude = [\n \"test_attribute_NumberOfThreads\",\n \"test_quadratic_\",\n ],\n # This argument is useful to prevent tests from failing on future\n # releases of MOI that add new tests. Don't let this number get too far\n # behind the current MOI release though. You should periodically check\n # for new tests to fix bugs and implement new features.\n exclude_tests_after = v\"0.10.5\",\n )\n return\nend\n\n\"\"\"\n test_SolverName()\n\nYou can also write new tests for solver-specific functionality. Write each new\ntest as a function with a name beginning with `test_`.\n\"\"\"\nfunction test_SolverName()\n @test MOI.get(FooBar.Optimizer(), MOI.SolverName()) == \"FooBar\"\n return\nend\n\nend # module TestFooBar\n\n# This line at tne end of the file runs all the tests!\nTestFooBar.runtests()","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Then modify your runtests.jl file to include the MOI_wrapper.jl file:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"# ============================ /test/runtests.jl ============================\n\nusing Test\n\n@testset \"MOI\" begin\n include(\"test/MOI_wrapper.jl\")\nend","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"info: Info\nThe optimizer BRIDGED constructed with instantiate automatically bridges constraints that are not supported by OPTIMIZER using the bridges listed in Bridges. It is recommended for an implementation of MOI to only support constraints that are natively supported by the solver and let bridges transform the constraint to the appropriate form. For this reason it is expected that tests may not pass if OPTIMIZER is used instead of BRIDGED.","category":"page"},{"location":"moi/submodules/Test/overview/#How-to-debug-a-failing-test","page":"Overview","title":"How to debug a failing test","text":"","category":"section"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"When writing a solver, it's likely that you will initially fail many tests. Some failures will be bugs, but other failures you may choose to exclude.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"There are two ways to exclude tests:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Exclude tests whose names contain a string using:\nMOI.Test.runtests(\n model,\n config;\n exclude = String[\"test_to_exclude\", \"test_conic_\"],\n)\nThis will exclude tests whose name contains either of the two strings provided.\nExclude tests which rely on specific functionality using:\nMOI.Test.Config(exclude = Any[MOI.VariableName, MOI.optimize!])\nThis will exclude tests which use the MOI.VariableName attribute, or which call MOI.optimize!.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Each test that fails can be independently called as:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"model = FooBar.Optimizer()\nconfig = MOI.Test.Config()\nMOI.empty!(model)\nMOI.Test.test_category_name_that_failed(model, config)","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"You can look-up the source code of the test that failed by searching for it in the src/Test/test_category.jl file.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"tip: Tip\nEach test function also has a docstring that explains what the test is for. Use ? MOI.Test.test_category_name_that_failed from the REPL to read it.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Periodically, you should re-run excluded tests to see if they now pass. The easiest way to do this is to swap the exclude keyword argument of runtests to include. For example:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"MOI.Test.runtests(\n model,\n config;\n exclude = String[\"test_to_exclude\", \"test_conic_\"],\n)","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"becomes","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"MOI.Test.runtests(\n model,\n config;\n include = String[\"test_to_exclude\", \"test_conic_\"],\n)","category":"page"},{"location":"moi/submodules/Test/overview/#How-to-add-a-test","page":"Overview","title":"How to add a test","text":"","category":"section"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"To detect bugs in solvers, we add new tests to MOI.Test.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"As an example, ECOS errored calling optimize! twice in a row. (See ECOS.jl PR #72.) We could add a test to ECOS.jl, but that would only stop us from re-introducing the bug to ECOS.jl in the future, but it would not catch other solvers in the ecosystem with the same bug. Instead, if we add a test to MOI.Test, then all solvers will also check that they handle a double optimize call.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"For this test, we care about correctness, rather than performance. therefore, we don't expect solvers to efficiently decide that they have already solved the problem, only that calling optimize! twice doesn't throw an error or give the wrong answer.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Step 1","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Install the MathOptInterface julia package in dev mode:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"julia> ]\n(@v1.6) pkg> dev MathOptInterface","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Step 2","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"From here on, proceed with making the following changes in the ~/.julia/dev/MathOptInterface folder (or equivalent dev path on your machine).","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Step 3","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Since the double-optimize error involves solving an optimization problem, add a new test to src/Test/test_solve.jl:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"\"\"\"\n test_unit_optimize!_twice(model::MOI.ModelLike, config::Config)\n\nTest that calling `MOI.optimize!` twice does not error.\n\nThis problem was first detected in ECOS.jl PR#72:\nhttps://github.com/jump-dev/ECOS.jl/pull/72\n\"\"\"\nfunction test_unit_optimize!_twice(\n model::MOI.ModelLike,\n config::Config{T},\n) where {T}\n # Use the `@requires` macro to check conditions that the test function\n # requires to run. Models failing this `@requires` check will silently skip\n # the test.\n @requires MOI.supports_constraint(\n model,\n MOI.VariableIndex,\n MOI.GreaterThan{Float64},\n )\n @requires _supports(config, MOI.optimize!)\n # If needed, you can test that the model is empty at the start of the test.\n # You can assume that this will be the case for tests run via `runtests`.\n # User's calling tests individually need to call `MOI.empty!` themselves.\n @test MOI.is_empty(model)\n # Create a simple model. Try to make this as simple as possible so that the\n # majority of solvers can run the test.\n x = MOI.add_variable(model)\n MOI.add_constraint(model, x, MOI.GreaterThan(one(T)))\n MOI.set(model, MOI.ObjectiveSense(), MOI.MIN_SENSE)\n MOI.set(\n model,\n MOI.ObjectiveFunction{MOI.VariableIndex}(),\n x,\n )\n # The main component of the test: does calling `optimize!` twice error?\n MOI.optimize!(model)\n MOI.optimize!(model)\n # Check we have a solution.\n @test MOI.get(model, MOI.TerminationStatus()) == MOI.OPTIMAL\n # There is a three-argument version of `Base.isapprox` for checking\n # approximate equality based on the tolerances defined in `config`:\n @test isapprox(MOI.get(model, MOI.VariablePrimal(), x), one(T), config)\n # For code-style, these tests should always `return` `nothing`.\n return\nend","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"info: Info\nMake sure the function is agnostic to the number type T; don't assume it is a Float64 capable solver.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"We also need to write a test for the test. Place this function immediately below the test you just wrote in the same file:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"function setup_test(\n ::typeof(test_unit_optimize!_twice),\n model::MOI.Utilities.MockOptimizer,\n ::Config,\n)\n MOI.Utilities.set_mock_optimize!(\n model,\n (mock::MOI.Utilities.MockOptimizer) -> MOIU.mock_optimize!(\n mock,\n MOI.OPTIMAL,\n (MOI.FEASIBLE_POINT, [1.0]),\n ),\n )\n return\nend","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Finally, you also need to implement Test.version_added. If we added this test when the latest released version of MOI was v0.10.5, define:","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"version_added(::typeof(test_unit_optimize!_twice)) = v\"0.10.6\"","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Step 6","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"Commit the changes to git from ~/.julia/dev/MathOptInterface and submit the PR for review.","category":"page"},{"location":"moi/submodules/Test/overview/","page":"Overview","title":"Overview","text":"tip: Tip\nIf you need help writing a test, open an issue on GitHub, or ask the Developer Chatroom.","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/submodules/Utilities/reference.md\"","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/submodules/Utilities/reference/#Utilities.Model","page":"API Reference","title":"Utilities.Model","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.Model","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.Model","page":"API Reference","title":"MathOptInterface.Utilities.Model","text":"MOI.Utilities.Model{T}() where {T}\n\nAn implementation of ModelLike that supports all functions and sets defined in MOI. It is parameterized by the coefficient type.\n\nExamples\n\njulia> import MathOptInterface as MOI\n\njulia> model = MOI.Utilities.Model{Float64}()\nMOIU.Model{Float64}\n├ ObjectiveSense: FEASIBILITY_SENSE\n├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}\n├ NumberOfVariables: 0\n└ NumberOfConstraints: 0\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#Utilities.UniversalFallback","page":"API Reference","title":"Utilities.UniversalFallback","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.UniversalFallback","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.UniversalFallback","page":"API Reference","title":"MathOptInterface.Utilities.UniversalFallback","text":"UniversalFallback\n\nThe UniversalFallback can be applied on a MOI.ModelLike model to create the model UniversalFallback(model) supporting any constraint and attribute. This allows to have a specialized implementation in model for performance critical constraints and attributes while still supporting other attributes with a small performance penalty. Note that model is unaware of constraints and attributes stored by UniversalFallback so this is not appropriate if model is an optimizer (for this reason, MOI.optimize! has not been implemented). In that case, optimizer bridges should be used instead.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#Utilities.@model","page":"API Reference","title":"Utilities.@model","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.@model\nUtilities.GenericModel\nUtilities.GenericOptimizer","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.@model","page":"API Reference","title":"MathOptInterface.Utilities.@model","text":"macro model(\n model_name,\n scalar_sets,\n typed_scalar_sets,\n vector_sets,\n typed_vector_sets,\n scalar_functions,\n typed_scalar_functions,\n vector_functions,\n typed_vector_functions,\n is_optimizer = false\n)\n\nCreates a type model_name implementing the MOI model interface and supporting all combinations of the provided functions and sets.\n\nEach typed_ scalar/vector sets/functions argument is a tuple of types. A type is \"typed\" if it has a coefficient {T} as the first type parameter.\n\nTuple syntax\n\nTo give no set/function, write (). To give one set or function X, write (X,).\n\nis_optimizer\n\nIf is_optimizer = true, the resulting struct is a of GenericOptimizer, which is a subtype of MOI.AbstractOptimizer, otherwise, it is a GenericModel, which is a subtype of MOI.ModelLike.\n\nVariableIndex\n\nThe function MOI.VariableIndex must not be given in scalar_functions.\nThe model supports MOI.VariableIndex-in-S constraints where S is MOI.EqualTo, MOI.GreaterThan, MOI.LessThan, MOI.Interval, MOI.Integer, MOI.ZeroOne, MOI.Semicontinuous or MOI.Semiinteger.\nThe sets supported with MOI.VariableIndex cannot be controlled from the macro; use UniversalFallback to support more sets.\n\nExamples\n\nThe model describing a linear program would be:\n\n@model(\n LPModel, # model_name\n (), # untyped scalar sets\n (MOI.EqualTo, MOI.GreaterThan, MOI.LessThan, MOI.Interval), # typed scalar sets\n (MOI.Zeros, MOI.Nonnegatives, MOI.Nonpositives), # untyped vector sets\n (), # typed vector sets\n (), # untyped scalar functions\n (MOI.ScalarAffineFunction,), # typed scalar functions\n (MOI.VectorOfVariables,), # untyped vector functions\n (MOI.VectorAffineFunction,), # typed vector functions\n false, # is_optimizer\n)\n\n\n\n\n\n","category":"macro"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.GenericModel","page":"API Reference","title":"MathOptInterface.Utilities.GenericModel","text":"mutable struct GenericModel{T,O,V,C} <: AbstractModelLike{T}\n\nImplements a model supporting coefficients of type T and:\n\nAn objective function stored in .objective::O\nVariables and VariableIndex constraints stored in .variable_bounds::V\nF-in-S constraints (excluding VariableIndex constraints) stored in .constraints::C\n\nAll interactions take place via the MOI interface, so the types O, V, and C must implement the API as needed for their functionality.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.GenericOptimizer","page":"API Reference","title":"MathOptInterface.Utilities.GenericOptimizer","text":"mutable struct GenericOptimizer{T,O,V,C} <: AbstractOptimizer{T}\n\nImplements a model supporting coefficients of type T and:\n\nAn objective function stored in .objective::O\nVariables and VariableIndex constraints stored in .variable_bounds::V\nF-in-S constraints (excluding VariableIndex constraints) stored in .constraints::C\n\nAll interactions take place via the MOI interface, so the types O, V, and C must implement the API as needed for their functionality.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#.objective","page":"API Reference","title":".objective","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.ObjectiveContainer","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.ObjectiveContainer","page":"API Reference","title":"MathOptInterface.Utilities.ObjectiveContainer","text":"ObjectiveContainer{T}\n\nA helper struct to simplify the handling of objective functions in Utilities.Model.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#.variables","page":"API Reference","title":".variables","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.VariablesContainer\nUtilities.FreeVariables","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.VariablesContainer","page":"API Reference","title":"MathOptInterface.Utilities.VariablesContainer","text":"struct VariablesContainer{T} <: AbstractVectorBounds\n set_mask::Vector{UInt16}\n lower::Vector{T}\n upper::Vector{T}\nend\n\nA struct for storing variables and VariableIndex-related constraints. Used in MOI.Utilities.Model by default.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.FreeVariables","page":"API Reference","title":"MathOptInterface.Utilities.FreeVariables","text":"mutable struct FreeVariables <: MOI.ModelLike\n n::Int64\n FreeVariables() = new(0)\nend\n\nA struct for storing free variables that can be used as the variables field of GenericModel or GenericModel. It represents a model that does not support any constraint nor objective function.\n\nExample\n\nThe following model type represents a conic model in geometric form. As opposed to VariablesContainer, FreeVariables does not support constraint bounds so they are bridged into an affine constraint in the MOI.Nonnegatives cone as expected for the geometric conic form.\n\njulia> MOI.Utilities.@product_of_sets(\n Cones,\n MOI.Zeros,\n MOI.Nonnegatives,\n MOI.SecondOrderCone,\n MOI.PositiveSemidefiniteConeTriangle,\n);\n\njulia> const ConicModel{T} = MOI.Utilities.GenericOptimizer{\n T,\n MOI.Utilities.ObjectiveContainer{T},\n MOI.Utilities.FreeVariables,\n MOI.Utilities.MatrixOfConstraints{\n T,\n MOI.Utilities.MutableSparseMatrixCSC{\n T,\n Int,\n MOI.Utilities.OneBasedIndexing,\n },\n Vector{T},\n Cones{T},\n },\n};\n\njulia> model = MOI.instantiate(ConicModel{Float64}, with_bridge_type=Float64);\n\njulia> x = MOI.add_variable(model)\nMathOptInterface.VariableIndex(1)\n\njulia> c = MOI.add_constraint(model, x, MOI.GreaterThan(1.0))\nMathOptInterface.ConstraintIndex{MathOptInterface.VariableIndex, MathOptInterface.GreaterThan{Float64}}(1)\n\njulia> MOI.Bridges.is_bridged(model, c)\ntrue\n\njulia> bridge = MOI.Bridges.bridge(model, c)\nMathOptInterface.Bridges.Constraint.VectorizeBridge{Float64, MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives, MathOptInterface.VariableIndex}(MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives}(1), 1.0)\n\njulia> bridge.vector_constraint\nMathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64}, MathOptInterface.Nonnegatives}(1)\n\njulia> MOI.Bridges.is_bridged(model, bridge.vector_constraint)\nfalse\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#.constraints","page":"API Reference","title":".constraints","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.VectorOfConstraints\nUtilities.StructOfConstraints\nUtilities.@struct_of_constraints_by_function_types\nUtilities.@struct_of_constraints_by_set_types\nUtilities.struct_of_constraint_code","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.VectorOfConstraints","page":"API Reference","title":"MathOptInterface.Utilities.VectorOfConstraints","text":"mutable struct VectorOfConstraints{\n F<:MOI.AbstractFunction,\n S<:MOI.AbstractSet,\n} <: MOI.ModelLike\n constraints::CleverDicts.CleverDict{\n MOI.ConstraintIndex{F,S},\n Tuple{F,S},\n typeof(CleverDicts.key_to_index),\n typeof(CleverDicts.index_to_key),\n }\nend\n\nA struct storing F-in-S constraints as a mapping between the constraint indices to the corresponding tuple of function and set.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.StructOfConstraints","page":"API Reference","title":"MathOptInterface.Utilities.StructOfConstraints","text":"abstract type StructOfConstraints <: MOI.ModelLike end\n\nA struct storing a subfields other structs storing constraints of different types.\n\nSee Utilities.@struct_of_constraints_by_function_types and Utilities.@struct_of_constraints_by_set_types.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.@struct_of_constraints_by_function_types","page":"API Reference","title":"MathOptInterface.Utilities.@struct_of_constraints_by_function_types","text":"Utilities.@struct_of_constraints_by_function_types(name, func_types...)\n\nGiven a vector of n function types (F1, F2,..., Fn) in func_types, defines a subtype of StructOfConstraints of name name and which type parameters {T, C1, C2, ..., Cn}. It contains n field where the ith field has type Ci and stores the constraints of function type Fi.\n\nThe expression Fi can also be a union in which case any constraint for which the function type is in the union is stored in the field with type Ci.\n\n\n\n\n\n","category":"macro"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.@struct_of_constraints_by_set_types","page":"API Reference","title":"MathOptInterface.Utilities.@struct_of_constraints_by_set_types","text":"Utilities.@struct_of_constraints_by_set_types(name, func_types...)\n\nGiven a vector of n set types (S1, S2,..., Sn) in func_types, defines a subtype of StructOfConstraints of name name and which type parameters {T, C1, C2, ..., Cn}. It contains n field where the ith field has type Ci and stores the constraints of set type Si. The expression Si can also be a union in which case any constraint for which the set type is in the union is stored in the field with type Ci. This can be useful if Ci is a MatrixOfConstraints in order to concatenate the coefficients of constraints of several different set types in the same matrix.\n\n\n\n\n\n","category":"macro"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.struct_of_constraint_code","page":"API Reference","title":"MathOptInterface.Utilities.struct_of_constraint_code","text":"struct_of_constraint_code(struct_name, types, field_types = nothing)\n\nGiven a vector of n Union{SymbolFun,_UnionSymbolFS{SymbolFun}} or Union{SymbolSet,_UnionSymbolFS{SymbolSet}} in types, defines a subtype of StructOfConstraints of name name and which type parameters {T, F1, F2, ..., Fn} if field_types is nothing and a {T} otherwise. It contains n field where the ith field has type Ci if field_types is nothing and type field_types[i] otherwise. If types is vector of Union{SymbolFun,_UnionSymbolFS{SymbolFun}} (resp. Union{SymbolSet,_UnionSymbolFS{SymbolSet}}) then the constraints of that function (resp. set) type are stored in the corresponding field.\n\nThis function is used by the macros @model, @struct_of_constraints_by_function_types and @struct_of_constraints_by_set_types.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Caching-optimizer","page":"API Reference","title":"Caching optimizer","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.CachingOptimizer\nUtilities.attach_optimizer\nUtilities.reset_optimizer\nUtilities.drop_optimizer\nUtilities.state\nUtilities.mode","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.CachingOptimizer","page":"API Reference","title":"MathOptInterface.Utilities.CachingOptimizer","text":"CachingOptimizer\n\nCachingOptimizer is an intermediate layer that stores a cache of the model and links it with an optimizer. It supports incremental model construction and modification even when the optimizer doesn't.\n\nConstructors\n\n CachingOptimizer(cache::MOI.ModelLike, optimizer::AbstractOptimizer)\n\nCreates a CachingOptimizer in AUTOMATIC mode, with the optimizer optimizer.\n\nThe type of the optimizer returned is CachingOptimizer{typeof(optimizer), typeof(cache)} so it does not support the function reset_optimizer(::CachingOptimizer, new_optimizer) if the type of new_optimizer is different from the type of optimizer.\n\n CachingOptimizer(cache::MOI.ModelLike, mode::CachingOptimizerMode)\n\nCreates a CachingOptimizer in the NO_OPTIMIZER state and mode mode.\n\nThe type of the optimizer returned is CachingOptimizer{MOI.AbstractOptimizer,typeof(cache)} so it does support the function reset_optimizer(::CachingOptimizer, new_optimizer) if the type of new_optimizer is different from the type of optimizer.\n\nAbout the type\n\nStates\n\nA CachingOptimizer may be in one of three possible states (CachingOptimizerState):\n\nNO_OPTIMIZER: The CachingOptimizer does not have any optimizer.\nEMPTY_OPTIMIZER: The CachingOptimizer has an empty optimizer. The optimizer is not synchronized with the cached model.\nATTACHED_OPTIMIZER: The CachingOptimizer has an optimizer, and it is synchronized with the cached model.\n\nModes\n\nA CachingOptimizer has two modes of operation (CachingOptimizerMode):\n\nMANUAL: The only methods that change the state of the CachingOptimizer are Utilities.reset_optimizer, Utilities.drop_optimizer, and Utilities.attach_optimizer. Attempting to perform an operation in the incorrect state results in an error.\nAUTOMATIC: The CachingOptimizer changes its state when necessary. For example, optimize! will automatically call attach_optimizer (an optimizer must have been previously set). Attempting to add a constraint or perform a modification not supported by the optimizer results in a drop to EMPTY_OPTIMIZER mode.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.attach_optimizer","page":"API Reference","title":"MathOptInterface.Utilities.attach_optimizer","text":"attach_optimizer(model::CachingOptimizer)\n\nAttaches the optimizer to model, copying all model data into it. Can be called only from the EMPTY_OPTIMIZER state. If the copy succeeds, the CachingOptimizer will be in state ATTACHED_OPTIMIZER after the call, otherwise an error is thrown; see MOI.copy_to for more details on which errors can be thrown.\n\n\n\n\n\nMOIU.attach_optimizer(model::GenericModel)\n\nCall MOIU.attach_optimizer on the backend of model.\n\nCannot be called in direct mode.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.reset_optimizer","page":"API Reference","title":"MathOptInterface.Utilities.reset_optimizer","text":"reset_optimizer(m::CachingOptimizer, optimizer::MOI.AbstractOptimizer)\n\nSets or resets m to have the given empty optimizer optimizer.\n\nCan be called from any state. An assertion error will be thrown if optimizer is not empty.\n\nThe CachingOptimizer m will be in state EMPTY_OPTIMIZER after the call.\n\n\n\n\n\nreset_optimizer(m::CachingOptimizer)\n\nDetaches and empties the current optimizer. Can be called from ATTACHED_OPTIMIZER or EMPTY_OPTIMIZER state. The CachingOptimizer will be in state EMPTY_OPTIMIZER after the call.\n\n\n\n\n\nMOIU.reset_optimizer(model::GenericModel, optimizer::MOI.AbstractOptimizer)\n\nCall MOIU.reset_optimizer on the backend of model.\n\nCannot be called in direct mode.\n\n\n\n\n\nMOIU.reset_optimizer(model::GenericModel)\n\nCall MOIU.reset_optimizer on the backend of model.\n\nCannot be called in direct mode.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.drop_optimizer","page":"API Reference","title":"MathOptInterface.Utilities.drop_optimizer","text":"drop_optimizer(m::CachingOptimizer)\n\nDrops the optimizer, if one is present. Can be called from any state. The CachingOptimizer will be in state NO_OPTIMIZER after the call.\n\n\n\n\n\nMOIU.drop_optimizer(model::GenericModel)\n\nCall MOIU.drop_optimizer on the backend of model.\n\nCannot be called in direct mode.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.state","page":"API Reference","title":"MathOptInterface.Utilities.state","text":"state(m::CachingOptimizer)::CachingOptimizerState\n\nReturns the state of the CachingOptimizer m. See Utilities.CachingOptimizer.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.mode","page":"API Reference","title":"MathOptInterface.Utilities.mode","text":"mode(m::CachingOptimizer)::CachingOptimizerMode\n\nReturns the operating mode of the CachingOptimizer m. See Utilities.CachingOptimizer.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Mock-optimizer","page":"API Reference","title":"Mock optimizer","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.MockOptimizer","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.MockOptimizer","page":"API Reference","title":"MathOptInterface.Utilities.MockOptimizer","text":"MockOptimizer\n\nMockOptimizer is a fake optimizer especially useful for testing. Its main feature is that it can store the values that should be returned for each attribute.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#Printing","page":"API Reference","title":"Printing","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.latex_formulation","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.latex_formulation","page":"API Reference","title":"MathOptInterface.Utilities.latex_formulation","text":"latex_formulation(model::MOI.ModelLike; kwargs...)\n\nWrap model in a type so that it can be pretty-printed as text/latex in a notebook like IJulia, or in Documenter.\n\nTo render the model, end the cell with latex_formulation(model), or call display(latex_formulation(model)) in to force the display of the model from inside a function.\n\nPossible keyword arguments are:\n\nsimplify_coefficients : Simplify coefficients if possible by omitting them or removing trailing zeros.\ndefault_name : The name given to variables with an empty name.\nprint_types : Print the MOI type of each function and set for clarity.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Copy-utilities","page":"API Reference","title":"Copy utilities","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.default_copy_to\nUtilities.IndexMap\nUtilities.identity_index_map\nUtilities.ModelFilter\nUtilities.loadfromstring!","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.default_copy_to","page":"API Reference","title":"MathOptInterface.Utilities.default_copy_to","text":"default_copy_to(dest::MOI.ModelLike, src::MOI.ModelLike)\n\nA default implementation of MOI.copy_to(dest, src) for models that implement the incremental interface, that is, MOI.supports_incremental_interface returns true.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.IndexMap","page":"API Reference","title":"MathOptInterface.Utilities.IndexMap","text":"IndexMap()\n\nThe dictionary-like object returned by MOI.copy_to.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.identity_index_map","page":"API Reference","title":"MathOptInterface.Utilities.identity_index_map","text":"identity_index_map(model::MOI.ModelLike)\n\nReturn an IndexMap that maps all variable and constraint indices of model to themselves.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.ModelFilter","page":"API Reference","title":"MathOptInterface.Utilities.ModelFilter","text":"ModelFilter(filter::Function, model::MOI.ModelLike)\n\nA layer to filter out various components of model.\n\nThe filter function takes a single argument, which is each element from the list returned by the attributes below. It returns true if the element should be visible in the filtered model and false otherwise.\n\nThe components that are filtered are:\n\nEntire constraint types via:\nMOI.ListOfConstraintTypesPresent\nIndividual constraints via:\nMOI.ListOfConstraintIndices{F,S}\nSpecific attributes via:\nMOI.ListOfModelAttributesSet\nMOI.ListOfConstraintAttributesSet\nMOI.ListOfVariableAttributesSet\n\nwarning: Warning\nThe list of attributes filtered may change in a future release. You should write functions that are generic and not limited to the five types listed above. Thus, you should probably define a fallback filter(::Any) = true.\n\nSee below for examples of how this works.\n\nnote: Note\nThis layer has a limited scope. It is intended by be used in conjunction with MOI.copy_to.\n\nExample: copy model excluding integer constraints\n\nUse the do syntax to provide a single function.\n\nfiltered_src = MOI.Utilities.ModelFilter(src) do item\n return item != (MOI.VariableIndex, MOI.Integer)\nend\nMOI.copy_to(dest, filtered_src)\n\nExample: copy model excluding names\n\nUse type dispatch to simplify the implementation:\n\nmy_filter(::Any) = true # Note the generic fallback\nmy_filter(::MOI.VariableName) = false\nmy_filter(::MOI.ConstraintName) = false\nfiltered_src = MOI.Utilities.ModelFilter(my_filter, src)\nMOI.copy_to(dest, filtered_src)\n\nExample: copy irreducible infeasible subsystem\n\nmy_filter(::Any) = true # Note the generic fallback\nfunction my_filter(ci::MOI.ConstraintIndex)\n status = MOI.get(dest, MOI.ConstraintConflictStatus(), ci)\n return status != MOI.NOT_IN_CONFLICT\nend\nfiltered_src = MOI.Utilities.ModelFilter(my_filter, src)\nMOI.copy_to(dest, filtered_src)\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.loadfromstring!","page":"API Reference","title":"MathOptInterface.Utilities.loadfromstring!","text":"loadfromstring!(model, s)\n\nA utility function to aid writing tests.\n\nwarning: Warning\nThis function is not intended for widespread use. It is mainly used as a tool to simplify writing tests in MathOptInterface. Do not use it as an exchange format for storing or transmitting problem instances. Use the FileFormats submodule instead.\n\nExample\n\njulia> model = MOI.Utilities.Model{Float64}();\n\njulia> MOI.Utilities.loadfromstring!(model, \"\"\"\n variables: x, y, z\n constrainedvariable: [a, b, c] in Nonnegatives(3)\n minobjective::Float64: 2x + 3y\n con1: x + y <= 1.0\n con2: [x, y] in Nonnegatives(2)\n x >= 0.0\n \"\"\")\n\nNotes\n\nSpecial labels are:\n\nvariables\nminobjective\nmaxobjectives\n\nEverything else denotes a constraint with a name.\n\nAppend ::T to use an element type of T when parsing the function.\n\nDo not name VariableIndex constraints.\n\nExceptions\n\nx - y does NOT currently parse. Instead, write x + -1.0 * y.\nx^2 does NOT currently parse. Instead, write x * x.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Penalty-relaxation","page":"API Reference","title":"Penalty relaxation","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.PenaltyRelaxation\nUtilities.ScalarPenaltyRelaxation","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.PenaltyRelaxation","page":"API Reference","title":"MathOptInterface.Utilities.PenaltyRelaxation","text":"PenaltyRelaxation(\n penalties = Dict{MOI.ConstraintIndex,Float64}();\n default::Union{Nothing,T} = 1.0,\n)\n\nA problem modifier that, when passed to MOI.modify, destructively modifies the model in-place to create a penalized relaxation of the constraints.\n\nwarning: Warning\nThis is a destructive routine that modifies the model in-place. If you don't want to modify the original model, use JuMP.copy_model to create a copy before calling MOI.modify.\n\nReformulation\n\nSee Utilities.ScalarPenaltyRelaxation for details of the reformulation.\n\nFor each constraint ci, the penalty passed to Utilities.ScalarPenaltyRelaxation is get(penalties, ci, default). If the value is nothing, because ci does not exist in penalties and default = nothing, then the constraint is skipped.\n\nReturn value\n\nMOI.modify(model, PenaltyRelaxation()) returns a Dict{MOI.ConstraintIndex,MOI.ScalarAffineFunction} that maps each constraint index to the corresponding y + z as a MOI.ScalarAffineFunction. In an optimal solution, query the value of these functions to compute the violation of each constraint.\n\nRelax a subset of constraints\n\nTo relax a subset of constraints, pass a penalties dictionary and set default = nothing.\n\nSupported constraint types\n\nThe penalty relaxation is currently limited to modifying MOI.ScalarAffineFunction and MOI.ScalarQuadraticFunction constraints in the linear sets MOI.LessThan, MOI.GreaterThan, MOI.EqualTo and MOI.Interval.\n\nIt does not include variable bound or integrality constraints, because these cannot be modified in-place.\n\nTo modify variable bounds, rewrite them as linear constraints.\n\nExamples\n\njulia> model = MOI.Utilities.Model{Float64}();\n\njulia> x = MOI.add_variable(model);\n\njulia> c = MOI.add_constraint(model, 1.0 * x, MOI.LessThan(2.0));\n\njulia> map = MOI.modify(model, MOI.Utilities.PenaltyRelaxation(default = 2.0));\n\njulia> print(model)\nMinimize ScalarAffineFunction{Float64}:\n 0.0 + 2.0 v[2]\n\nSubject to:\n\nScalarAffineFunction{Float64}-in-LessThan{Float64}\n 0.0 + 1.0 v[1] - 1.0 v[2] <= 2.0\n\nVariableIndex-in-GreaterThan{Float64}\n v[2] >= 0.0\n\njulia> map[c] isa MOI.ScalarAffineFunction{Float64}\ntrue\n\njulia> model = MOI.Utilities.Model{Float64}();\n\njulia> x = MOI.add_variable(model);\n\njulia> c = MOI.add_constraint(model, 1.0 * x, MOI.LessThan(2.0));\n\njulia> map = MOI.modify(model, MOI.Utilities.PenaltyRelaxation(Dict(c => 3.0)));\n\njulia> print(model)\nMinimize ScalarAffineFunction{Float64}:\n 0.0 + 3.0 v[2]\n\nSubject to:\n\nScalarAffineFunction{Float64}-in-LessThan{Float64}\n 0.0 + 1.0 v[1] - 1.0 v[2] <= 2.0\n\nVariableIndex-in-GreaterThan{Float64}\n v[2] >= 0.0\n\njulia> map[c] isa MOI.ScalarAffineFunction{Float64}\ntrue\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.ScalarPenaltyRelaxation","page":"API Reference","title":"MathOptInterface.Utilities.ScalarPenaltyRelaxation","text":"ScalarPenaltyRelaxation(penalty::T) where {T}\n\nA problem modifier that, when passed to MOI.modify, destructively modifies the constraint in-place to create a penalized relaxation of the constraint.\n\nwarning: Warning\nThis is a destructive routine that modifies the constraint in-place. If you don't want to modify the original model, use JuMP.copy_model to create a copy before calling MOI.modify.\n\nReformulation\n\nThe penalty relaxation modifies constraints of the form f(x) in S into f(x) + y - z in S, where y z ge 0, and then it introduces a penalty term into the objective of a times (y + z) (if minimizing, else -a), where a is penalty\n\nWhen S is MOI.LessThan or MOI.GreaterThan, we omit y or z respectively as a performance optimization.\n\nReturn value\n\nMOI.modify(model, ci, ScalarPenaltyRelaxation(penalty)) returns y + z as a MOI.ScalarAffineFunction. In an optimal solution, query the value of this function to compute the violation of the constraint.\n\nExamples\n\njulia> model = MOI.Utilities.Model{Float64}();\n\njulia> x = MOI.add_variable(model);\n\njulia> c = MOI.add_constraint(model, 1.0 * x, MOI.LessThan(2.0));\n\njulia> f = MOI.modify(model, c, MOI.Utilities.ScalarPenaltyRelaxation(2.0));\n\njulia> print(model)\nMinimize ScalarAffineFunction{Float64}:\n 0.0 + 2.0 v[2]\n\nSubject to:\n\nScalarAffineFunction{Float64}-in-LessThan{Float64}\n 0.0 + 1.0 v[1] - 1.0 v[2] <= 2.0\n\nVariableIndex-in-GreaterThan{Float64}\n v[2] >= 0.0\n\njulia> f isa MOI.ScalarAffineFunction{Float64}\ntrue\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MatrixOfConstraints","page":"API Reference","title":"MatrixOfConstraints","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.MatrixOfConstraints","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.MatrixOfConstraints","page":"API Reference","title":"MathOptInterface.Utilities.MatrixOfConstraints","text":"mutable struct MatrixOfConstraints{T,AT,BT,ST} <: MOI.ModelLike\n coefficients::AT\n constants::BT\n sets::ST\n caches::Vector{Any}\n are_indices_mapped::Vector{BitSet}\n final_touch::Bool\nend\n\nRepresent ScalarAffineFunction and VectorAffinefunction constraints in a matrix form where the linear coefficients of the functions are stored in the coefficients field, the constants of the functions or sets are stored in the constants field. Additional information about the sets are stored in the sets field.\n\nThis model can only be used as the constraints field of a MOI.Utilities.AbstractModel.\n\nWhen the constraints are added, they are stored in the caches field. They are only loaded in the coefficients and constants fields once MOI.Utilities.final_touch is called. For this reason, MatrixOfConstraints should not be used by an incremental interface. Use MOI.copy_to instead.\n\nThe constraints can be added in two different ways:\n\nWith add_constraint, in which case a canonicalized copy of the function is stored in caches.\nWith pass_nonvariable_constraints, in which case the functions and sets are stored themselves in caches without mapping the variable indices. The corresponding index in caches is added in are_indices_mapped. This avoids doing a copy of the function in case the getter of CanonicalConstraintFunction does not make a copy for the source model, for example, this is the case of VectorOfConstraints.\n\nWe illustrate this with an example. Suppose a model is copied from a src::MOI.Utilities.Model to a bridged model with a MatrixOfConstraints. For all the types that are not bridged, the constraints will be copied with pass_nonvariable_constraints. Hence the functions stored in caches are exactly the same as the ones stored in src. This is ok since this is only during the copy_to operation during which src cannot be modified. On the other hand, for the types that are bridged, the functions added may contain duplicates even if the functions did not contain duplicates in src so duplicates are removed with MOI.Utilities.canonical.\n\nInterface\n\nThe .coefficients::AT type must implement:\n\nAT()\nMOI.empty(::AT)!\nMOI.Utilities.add_column\nMOI.Utilities.set_number_of_rows\nMOI.Utilities.allocate_terms\nMOI.Utilities.load_terms\nMOI.Utilities.final_touch\n\nThe .constants::BT type must implement:\n\nBT()\nBase.empty!(::BT)\nBase.resize(::BT)\nMOI.Utilities.load_constants\nMOI.Utilities.function_constants\nMOI.Utilities.set_from_constants\n\nThe .sets::ST type must implement:\n\nST()\nMOI.is_empty(::ST)\nMOI.empty(::ST)\nMOI.dimension(::ST)\nMOI.is_valid(::ST, ::MOI.ConstraintIndex)\nMOI.get(::ST, ::MOI.ListOfConstraintTypesPresent)\nMOI.get(::ST, ::MOI.NumberOfConstraints)\nMOI.get(::ST, ::MOI.ListOfConstraintIndices)\nMOI.Utilities.set_types\nMOI.Utilities.set_index\nMOI.Utilities.add_set\nMOI.Utilities.rows\nMOI.Utilities.final_touch\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#.coefficients","page":"API Reference","title":".coefficients","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.add_column\nUtilities.allocate_terms\nUtilities.set_number_of_rows\nUtilities.load_terms\nUtilities.final_touch\nUtilities.extract_function","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.add_column","page":"API Reference","title":"MathOptInterface.Utilities.add_column","text":"add_column(coefficients)::Nothing\n\nTell coefficients to pre-allocate datastructures as needed to store one column.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.allocate_terms","page":"API Reference","title":"MathOptInterface.Utilities.allocate_terms","text":"allocate_terms(coefficients, index_map, func)::Nothing\n\nTell coefficients that the terms of the function func where the variable indices are mapped with index_map will be loaded with load_terms.\n\nThe function func must be canonicalized before calling allocate_terms. See is_canonical.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.set_number_of_rows","page":"API Reference","title":"MathOptInterface.Utilities.set_number_of_rows","text":"set_number_of_rows(coefficients, n)::Nothing\n\nTell coefficients to pre-allocate datastructures as needed to store n rows.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.load_terms","page":"API Reference","title":"MathOptInterface.Utilities.load_terms","text":"load_terms(coefficients, index_map, func, offset)::Nothing\n\nLoads the terms of func to coefficients, mapping the variable indices with index_map.\n\nThe ith dimension of func is loaded at the (offset + i)th row of coefficients.\n\nThe function must be allocated first with allocate_terms.\n\nThe function func must be canonicalized, see is_canonical.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.final_touch","page":"API Reference","title":"MathOptInterface.Utilities.final_touch","text":"final_touch(coefficients)::Nothing\n\nInforms the coefficients that all functions have been added with load_terms. No more modification is allowed unless MOI.empty! is called.\n\nfinal_touch(sets)::Nothing\n\nInforms the sets that all functions have been added with add_set. No more modification is allowed unless MOI.empty! is called.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.extract_function","page":"API Reference","title":"MathOptInterface.Utilities.extract_function","text":"extract_function(coefficients, row::Integer, constant::T) where {T}\n\nReturn the MOI.ScalarAffineFunction{T} function corresponding to row row in coefficients.\n\nextract_function(\n coefficients,\n rows::UnitRange,\n constants::Vector{T},\n) where{T}\n\nReturn the MOI.VectorAffineFunction{T} function corresponding to rows rows in coefficients.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.MutableSparseMatrixCSC\nUtilities.AbstractIndexing\nUtilities.ZeroBasedIndexing\nUtilities.OneBasedIndexing","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.MutableSparseMatrixCSC","page":"API Reference","title":"MathOptInterface.Utilities.MutableSparseMatrixCSC","text":"mutable struct MutableSparseMatrixCSC{Tv,Ti<:Integer,I<:AbstractIndexing}\n indexing::I\n m::Int\n n::Int\n colptr::Vector{Ti}\n rowval::Vector{Ti}\n nzval::Vector{Tv}\n nz_added::Vector{Ti}\nend\n\nMatrix type loading sparse matrices in the Compressed Sparse Column format. The indexing used is indexing, see AbstractIndexing. The other fields have the same meaning than for SparseArrays.SparseMatrixCSC except that the indexing is different unless indexing is OneBasedIndexing. In addition, nz_added is used to cache the number of non-zero terms that have been added to each column due to the incremental nature of load_terms.\n\nThe matrix is loaded in 5 steps:\n\nMOI.empty! is called.\nMOI.Utilities.add_column and MOI.Utilities.allocate_terms are called in any order.\nMOI.Utilities.set_number_of_rows is called.\nMOI.Utilities.load_terms is called for each affine function.\nMOI.Utilities.final_touch is called.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.AbstractIndexing","page":"API Reference","title":"MathOptInterface.Utilities.AbstractIndexing","text":"abstract type AbstractIndexing end\n\nIndexing to be used for storing the row and column indices of MutableSparseMatrixCSC. See ZeroBasedIndexing and OneBasedIndexing.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.ZeroBasedIndexing","page":"API Reference","title":"MathOptInterface.Utilities.ZeroBasedIndexing","text":"struct ZeroBasedIndexing <: AbstractIndexing end\n\nZero-based indexing: the ith row or column has index i - 1. This is useful when the vectors of row and column indices need to be communicated to a library using zero-based indexing such as C libraries.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.OneBasedIndexing","page":"API Reference","title":"MathOptInterface.Utilities.OneBasedIndexing","text":"struct ZeroBasedIndexing <: AbstractIndexing end\n\nOne-based indexing: the ith row or column has index i. This enables an allocation-free conversion of MutableSparseMatrixCSC to SparseArrays.SparseMatrixCSC.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#.constants","page":"API Reference","title":".constants","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.load_constants\nUtilities.function_constants\nUtilities.set_from_constants\nUtilities.modify_constants","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.load_constants","page":"API Reference","title":"MathOptInterface.Utilities.load_constants","text":"load_constants(constants, offset, func_or_set)::Nothing\n\nThis function loads the constants of func_or_set in constants at an offset of offset. Where offset is the sum of the dimensions of the constraints already loaded. The storage should be preallocated with resize! before calling this function.\n\nThis function should be implemented to be usable as storage of constants for MatrixOfConstraints.\n\nThe constants are loaded in three steps:\n\nBase.empty! is called.\nBase.resize! is called with the sum of the dimensions of all constraints.\nMOI.Utilities.load_constants is called for each function for vector constraint or set for scalar constraint.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.function_constants","page":"API Reference","title":"MathOptInterface.Utilities.function_constants","text":"function_constants(constants, rows)\n\nThis function returns the function constants that were loaded with load_constants at the rows rows.\n\nThis function should be implemented to be usable as storage of constants for MatrixOfConstraints.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.set_from_constants","page":"API Reference","title":"MathOptInterface.Utilities.set_from_constants","text":"set_from_constants(constants, S::Type, rows)::S\n\nThis function returns an instance of the set S for which the constants where loaded with load_constants at the rows rows.\n\nThis function should be implemented to be usable as storage of constants for MatrixOfConstraints.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.modify_constants","page":"API Reference","title":"MathOptInterface.Utilities.modify_constants","text":"modify_constants(constants, row::Integer, new_constant::T) where {T}\nmodify_constants(\n constants,\n rows::AbstractVector{<:Integer},\n new_constants::AbstractVector{T},\n) where {T}\n\nModify constants in-place to store new_constant in the row row, or rows rows.\n\nThis function must be implemented to enable MOI.ScalarConstantChange and MOI.VectorConstantChange for MatrixOfConstraints.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.Hyperrectangle","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.Hyperrectangle","page":"API Reference","title":"MathOptInterface.Utilities.Hyperrectangle","text":"struct Hyperrectangle{T} <: AbstractVectorBounds\n lower::Vector{T}\n upper::Vector{T}\nend\n\nA struct for the .constants field in MatrixOfConstraints.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#.sets","page":"API Reference","title":".sets","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.set_index\nUtilities.set_types\nUtilities.add_set\nUtilities.rows\nUtilities.num_rows\nUtilities.set_with_dimension","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.set_index","page":"API Reference","title":"MathOptInterface.Utilities.set_index","text":"set_index(sets, ::Type{S})::Union{Int,Nothing} where {S<:MOI.AbstractSet}\n\nReturn an integer corresponding to the index of the set type in the list given by set_types.\n\nIf S is not part of the list, return nothing.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.set_types","page":"API Reference","title":"MathOptInterface.Utilities.set_types","text":"set_types(sets)::Vector{Type}\n\nReturn the list of the types of the sets allowed in sets.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.add_set","page":"API Reference","title":"MathOptInterface.Utilities.add_set","text":"add_set(sets, i)::Int64\n\nAdd a scalar set of type index i.\n\nadd_set(sets, i, dim)::Int64\n\nAdd a vector set of type index i and dimension dim.\n\nBoth methods return a unique Int64 of the set that can be used to reference this set.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.rows","page":"API Reference","title":"MathOptInterface.Utilities.rows","text":"rows(sets, ci::MOI.ConstraintIndex)::Union{Int,UnitRange{Int}}\n\nReturn the rows in 1:MOI.dimension(sets) corresponding to the set of id ci.value.\n\nFor scalar sets, this returns an Int. For vector sets, this returns an UnitRange{Int}.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.num_rows","page":"API Reference","title":"MathOptInterface.Utilities.num_rows","text":"num_rows(sets::OrderedProductOfSets, ::Type{S}) where {S}\n\nReturn the number of rows corresponding to a set of type S. That is, it is the sum of the dimensions of the sets of type S.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.set_with_dimension","page":"API Reference","title":"MathOptInterface.Utilities.set_with_dimension","text":"set_with_dimension(::Type{S}, dim) where {S<:MOI.AbstractVectorSet}\n\nReturns the instance of S of MOI.dimension dim. This needs to be implemented for sets of type S to be useable with MatrixOfConstraints.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.ProductOfSets\nUtilities.MixOfScalarSets\nUtilities.@mix_of_scalar_sets\nUtilities.OrderedProductOfSets\nUtilities.@product_of_sets","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.ProductOfSets","page":"API Reference","title":"MathOptInterface.Utilities.ProductOfSets","text":"abstract type ProductOfSets{T} end\n\nRepresents a cartesian product of sets of given types.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.MixOfScalarSets","page":"API Reference","title":"MathOptInterface.Utilities.MixOfScalarSets","text":"abstract type MixOfScalarSets{T} <: ProductOfSets{T} end\n\nProduct of scalar sets in the order the constraints are added, mixing the constraints of different types.\n\nUse @mix_of_scalar_sets to generate a new subtype.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.@mix_of_scalar_sets","page":"API Reference","title":"MathOptInterface.Utilities.@mix_of_scalar_sets","text":"@mix_of_scalar_sets(name, set_types...)\n\nGenerate a new MixOfScalarSets subtype.\n\nExample\n\n@mix_of_scalar_sets(\n MixedIntegerLinearProgramSets,\n MOI.GreaterThan{T},\n MOI.LessThan{T},\n MOI.EqualTo{T},\n MOI.Integer,\n)\n\n\n\n\n\n","category":"macro"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.OrderedProductOfSets","page":"API Reference","title":"MathOptInterface.Utilities.OrderedProductOfSets","text":"abstract type OrderedProductOfSets{T} <: ProductOfSets{T} end\n\nProduct of sets in the order the constraints are added, grouping the constraints of the same types contiguously.\n\nUse @product_of_sets to generate new subtypes.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.@product_of_sets","page":"API Reference","title":"MathOptInterface.Utilities.@product_of_sets","text":"@product_of_sets(name, set_types...)\n\nGenerate a new OrderedProductOfSets subtype.\n\nExample\n\n@product_of_sets(\n LinearOrthants,\n MOI.Zeros,\n MOI.Nonnegatives,\n MOI.Nonpositives,\n MOI.ZeroOne,\n)\n\n\n\n\n\n","category":"macro"},{"location":"moi/submodules/Utilities/reference/#Fallbacks","page":"API Reference","title":"Fallbacks","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.get_fallback","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.get_fallback","page":"API Reference","title":"MathOptInterface.Utilities.get_fallback","text":"get_fallback(model::MOI.ModelLike, ::MOI.ObjectiveValue)\n\nCompute the objective function value using the VariablePrimal results and the ObjectiveFunction value.\n\n\n\n\n\nget_fallback(\n model::MOI.ModelLike,\n ::MOI.DualObjectiveValue,\n ::Type{T},\n)::T where {T}\n\nCompute the dual objective value of type T using the ConstraintDual results and the ConstraintFunction and ConstraintSet values.\n\nNote that the nonlinear part of the model is ignored.\n\n\n\n\n\nget_fallback(\n model::MOI.ModelLike,\n ::MOI.ConstraintPrimal,\n constraint_index::MOI.ConstraintIndex,\n)\n\nCompute the value of the function of the constraint of index constraint_index using the VariablePrimal results and the ConstraintFunction values.\n\n\n\n\n\nget_fallback(\n model::MOI.ModelLike,\n attr::MOI.ConstraintDual,\n ci::MOI.ConstraintIndex{Union{MOI.VariableIndex,MOI.VectorOfVariables}},\n ::Type{T} = Float64,\n) where {T}\n\nCompute the dual of the constraint of index ci using the ConstraintDual of other constraints and the ConstraintFunction values.\n\nThrows an error if some constraints are quadratic or if there is one another MOI.VariableIndex-in-S or MOI.VectorOfVariables-in-S constraint with one of the variables in the function of the constraint ci.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Function-utilities","page":"API Reference","title":"Function utilities","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following utilities are available for functions:","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.eval_variables\nUtilities.map_indices\nUtilities.substitute_variables\nUtilities.filter_variables\nUtilities.remove_variable\nUtilities.all_coefficients\nUtilities.unsafe_add\nUtilities.isapprox_zero\nUtilities.modify_function\nUtilities.zero_with_output_dimension","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.eval_variables","page":"API Reference","title":"MathOptInterface.Utilities.eval_variables","text":"eval_variables(value_fn::Function, f::MOI.AbstractFunction)\n\nReturns the value of function f if each variable index vi is evaluated as value_fn(vi).\n\nNote that value_fn must return a Number. See substitute_variables for a similar function where value_fn returns an MOI.AbstractScalarFunction.\n\nwarning: Warning\nThe two-argument version of eval_variables is deprecated and may be removed in MOI v2.0.0. Use the three-argument method eval_variables(::Function, ::MOI.ModelLike, ::MOI.AbstractFunction) instead.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.map_indices","page":"API Reference","title":"MathOptInterface.Utilities.map_indices","text":"map_indices(index_map::Function, attr::MOI.AnyAttribute, x::X)::X where {X}\n\nSubstitute any MOI.VariableIndex (resp. MOI.ConstraintIndex) in x by the MOI.VariableIndex (resp. MOI.ConstraintIndex) of the same type given by index_map(x).\n\nWhen to implement this method for new types X\n\nThis function is used by implementations of MOI.copy_to on constraint functions, attribute values and submittable values. If you define a new attribute whose values x::X contain variable or constraint indices, you must also implement this function.\n\n\n\n\n\nmap_indices(\n variable_map::AbstractDict{T,T},\n x::X,\n)::X where {T<:MOI.Index,X}\n\nShortcut for map_indices(vi -> variable_map[vi], x).\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.substitute_variables","page":"API Reference","title":"MathOptInterface.Utilities.substitute_variables","text":"substitute_variables(variable_map::Function, x)\n\nSubstitute any MOI.VariableIndex in x by variable_map(x). The variable_map function returns either MOI.VariableIndex or MOI.ScalarAffineFunction, see eval_variables for a similar function where variable_map returns a number.\n\nThis function is used by bridge optimizers on constraint functions, attribute values and submittable values when at least one variable bridge is used hence it needs to be implemented for custom types that are meant to be used as attribute or submittable value.\n\nnote: Note\nWhen implementing a new method, don't use substitute_variables(::Function, because Julia will not specialize on it. Use instead substitute_variables(::F, ...) where {F<:Function}.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.filter_variables","page":"API Reference","title":"MathOptInterface.Utilities.filter_variables","text":"filter_variables(keep::Function, f::AbstractFunction)\n\nReturn a new function f with the variable vi such that !keep(vi) removed.\n\nWARNING: Don't define filter_variables(::Function, ...) because Julia will not specialize on this. Define instead filter_variables(::F, ...) where {F<:Function}.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.remove_variable","page":"API Reference","title":"MathOptInterface.Utilities.remove_variable","text":"remove_variable(f::AbstractFunction, vi::VariableIndex)\n\nReturn a new function f with the variable vi removed.\n\n\n\n\n\nremove_variable(\n f::MOI.AbstractFunction,\n s::MOI.AbstractSet,\n vi::MOI.VariableIndex,\n)\n\nReturn a tuple (g, t) representing the constraint f-in-s with the variable vi removed. That is, the terms containing the variable vi in the function f are removed and the dimension of the set s is updated if needed (for example, when f is a VectorOfVariables with vi being one of the variables).\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.all_coefficients","page":"API Reference","title":"MathOptInterface.Utilities.all_coefficients","text":"all_coefficients(p::Function, f::MOI.AbstractFunction)\n\nDetermine whether predicate p returns true for all coefficients of f, returning false as soon as the first coefficient of f for which p returns false is encountered (short-circuiting). Similar to all.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.unsafe_add","page":"API Reference","title":"MathOptInterface.Utilities.unsafe_add","text":"unsafe_add(t1::MOI.ScalarAffineTerm, t2::MOI.ScalarAffineTerm)\n\nSums the coefficients of t1 and t2 and returns an output MOI.ScalarAffineTerm. It is unsafe because it uses the variable of t1 as the variable of the output without checking that it is equal to that of t2.\n\n\n\n\n\nunsafe_add(t1::MOI.ScalarQuadraticTerm, t2::MOI.ScalarQuadraticTerm)\n\nSums the coefficients of t1 and t2 and returns an output MOI.ScalarQuadraticTerm. It is unsafe because it uses the variable's of t1 as the variable's of the output without checking that they are the same (up to permutation) to those of t2.\n\n\n\n\n\nunsafe_add(t1::MOI.VectorAffineTerm, t2::MOI.VectorAffineTerm)\n\nSums the coefficients of t1 and t2 and returns an output MOI.VectorAffineTerm. It is unsafe because it uses the output_index and variable of t1 as the output_index and variable of the output term without checking that they are equal to those of t2.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.isapprox_zero","page":"API Reference","title":"MathOptInterface.Utilities.isapprox_zero","text":"isapprox_zero(f::MOI.AbstractFunction, tol)\n\nReturn a Bool indicating whether the function f is approximately zero using tol as a tolerance.\n\nImportant note\n\nThis function assumes that f does not contain any duplicate terms, you might want to first call canonical if that is not guaranteed. For instance, given\n\nf = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1, -1], [x, x]), 0)\n\nthen isapprox_zero(f) is false but isapprox_zero(MOIU.canonical(f)) is true.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.modify_function","page":"API Reference","title":"MathOptInterface.Utilities.modify_function","text":"modify_function(f::AbstractFunction, change::AbstractFunctionModification)\n\nReturn a copy of the function f, modified according to change.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.zero_with_output_dimension","page":"API Reference","title":"MathOptInterface.Utilities.zero_with_output_dimension","text":"zero_with_output_dimension(::Type{T}, output_dimension::Integer) where {T}\n\nCreate an instance of type T with the output dimension output_dimension.\n\nThis is mostly useful in Bridges, when code needs to be agnostic to the type of vector-valued function that is passed in.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following functions can be used to canonicalize a function:","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.is_canonical\nUtilities.canonical\nUtilities.canonicalize!","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.is_canonical","page":"API Reference","title":"MathOptInterface.Utilities.is_canonical","text":"is_canonical(f::Union{ScalarAffineFunction, VectorAffineFunction})\n\nReturns a Bool indicating whether the function is in canonical form. See canonical.\n\n\n\n\n\nis_canonical(f::Union{ScalarQuadraticFunction, VectorQuadraticFunction})\n\nReturns a Bool indicating whether the function is in canonical form. See canonical.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.canonical","page":"API Reference","title":"MathOptInterface.Utilities.canonical","text":"canonical(f::MOI.AbstractFunction)\n\nReturns the function in a canonical form, that is,\n\nA term appear only once.\nThe coefficients are nonzero.\nThe terms appear in increasing order of variable where there the order of the variables is the order of their value.\nFor a AbstractVectorFunction, the terms are sorted in ascending order of output index.\n\nThe output of canonical can be assumed to be a copy of f, even for VectorOfVariables.\n\nExamples\n\nIf x (resp. y, z) is VariableIndex(1) (resp. 2, 3). The canonical representation of ScalarAffineFunction([y, x, z, x, z], [2, 1, 3, -2, -3], 5) is ScalarAffineFunction([x, y], [-1, 2], 5).\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.canonicalize!","page":"API Reference","title":"MathOptInterface.Utilities.canonicalize!","text":"canonicalize!(f::Union{ScalarAffineFunction, VectorAffineFunction})\n\nConvert a function to canonical form in-place, without allocating a copy to hold the result. See canonical.\n\n\n\n\n\ncanonicalize!(f::Union{ScalarQuadraticFunction, VectorQuadraticFunction})\n\nConvert a function to canonical form in-place, without allocating a copy to hold the result. See canonical.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following functions can be used to manipulate functions with basic algebra:","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.scalar_type\nUtilities.scalarize\nUtilities.eachscalar\nUtilities.promote_operation\nUtilities.operate\nUtilities.operate!\nUtilities.operate_output_index!\nUtilities.vectorize","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.scalar_type","page":"API Reference","title":"MathOptInterface.Utilities.scalar_type","text":"scalar_type(F::Type{<:MOI.AbstractVectorFunction})\n\nType of functions obtained by indexing objects obtained by calling eachscalar on functions of type F.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.scalarize","page":"API Reference","title":"MathOptInterface.Utilities.scalarize","text":"scalarize(func::MOI.VectorOfVariables, ignore_constants::Bool = false)\n\nReturns a vector of scalar functions making up the vector function in the form of a Vector{MOI.SingleVariable}.\n\nSee also eachscalar.\n\n\n\n\n\nscalarize(func::MOI.VectorAffineFunction{T}, ignore_constants::Bool = false)\n\nReturns a vector of scalar functions making up the vector function in the form of a Vector{MOI.ScalarAffineFunction{T}}.\n\nSee also eachscalar.\n\n\n\n\n\nscalarize(func::MOI.VectorQuadraticFunction{T}, ignore_constants::Bool = false)\n\nReturns a vector of scalar functions making up the vector function in the form of a Vector{MOI.ScalarQuadraticFunction{T}}.\n\nSee also eachscalar.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.eachscalar","page":"API Reference","title":"MathOptInterface.Utilities.eachscalar","text":"eachscalar(f::MOI.AbstractVectorFunction)\n\nReturns an iterator for the scalar components of the vector function.\n\nSee also scalarize.\n\n\n\n\n\neachscalar(f::MOI.AbstractVector)\n\nReturns an iterator for the scalar components of the vector.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.promote_operation","page":"API Reference","title":"MathOptInterface.Utilities.promote_operation","text":"promote_operation(\n op::Function,\n ::Type{T},\n ArgsTypes::Type{<:Union{T,AbstractVector{T},MOI.AbstractFunction}}...,\n) where {T<:Number}\n\nCompute the return type of the call operate(op, T, args...), where the types of the arguments args are ArgsTypes.\n\nOne assumption is that the element type T is invariant under each operation. That is, op(::T, ::T)::T where op is a +, -, *, and /.\n\nThere are six methods for which we implement Utilities.promote_operation:\n\n+ a. promote_operation(::typeof(+), ::Type{T}, ::Type{F1}, ::Type{F2})\n- a. promote_operation(::typeof(-), ::Type{T}, ::Type{F}) b. promote_operation(::typeof(-), ::Type{T}, ::Type{F1}, ::Type{F2})\n* a. promote_operation(::typeof(*), ::Type{T}, ::Type{T}, ::Type{F}) b. promote_operation(::typeof(*), ::Type{T}, ::Type{F}, ::Type{T}) c. promote_operation(::typeof(*), ::Type{T}, ::Type{F1}, ::Type{F2}) where F1 and F2 are VariableIndex or ScalarAffineFunction d. promote_operation(::typeof(*), ::Type{T}, ::Type{<:Diagonal{T}}, ::Type{F}\n/ a. promote_operation(::typeof(/), ::Type{T}, ::Type{F}, ::Type{T})\nvcat a. promote_operation(::typeof(vcat), ::Type{T}, ::Type{F}...)\nimag a. promote_operation(::typeof(imag), ::Type{T}, ::Type{F}) where F is VariableIndex or VectorOfVariables\n\nIn each case, F (or F1 and F2) is one of the ten supported types, with a restriction that the mathematical operation makes sense, for example, we don't define promote_operation(-, T, F1, F2) where F1 is a scalar-valued function and F2 is a vector-valued function. The ten supported types are:\n\n::T\n::VariableIndex\n::ScalarAffineFunction{T}\n::ScalarQuadraticFunction{T}\n::ScalarNonlinearFunction\n::AbstractVector{T}\n::VectorOfVariables\n::VectorAffineFunction{T}\n::VectorQuadraticFunction{T}\n::VectorNonlinearFunction\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.operate","page":"API Reference","title":"MathOptInterface.Utilities.operate","text":"operate(\n op::Function,\n ::Type{T},\n args::Union{T,MOI.AbstractFunction}...,\n)::MOI.AbstractFunction where {T<:Number}\n\nReturns an MOI.AbstractFunction representing the function resulting from the operation op(args...) on functions of coefficient type T.\n\nNo argument can be modified.\n\nMethods\n\n+ a. operate(::typeof(+), ::Type{T}, ::F1) b. operate(::typeof(+), ::Type{T}, ::F1, ::F2) c. operate(::typeof(+), ::Type{T}, ::F1...)\n- a. operate(::typeof(-), ::Type{T}, ::F) b. operate(::typeof(-), ::Type{T}, ::F1, ::F2)\n* a. operate(::typeof(*), ::Type{T}, ::T, ::F) b. operate(::typeof(*), ::Type{T}, ::F, ::T) c. operate(::typeof(*), ::Type{T}, ::F1, ::F2) where F1 and F2 are VariableIndex or ScalarAffineFunction d. operate(::typeof(*), ::Type{T}, ::Diagonal{T}, ::F)\n/ a. operate(::typeof(/), ::Type{T}, ::F, ::T)\nvcat a. operate(::typeof(vcat), ::Type{T}, ::F...)\nimag a. operate(::typeof(imag), ::Type{T}, ::F) where F is VariableIndex or VectorOfVariables\n\nOne assumption is that the element type T is invariant under each operation. That is, op(::T, ::T)::T where op is a +, -, *, and /.\n\nIn each case, F (or F1 and F2) is one of the ten supported types, with a restriction that the mathematical operation makes sense, for example, we don't define promote_operation(-, T, F1, F2) where F1 is a scalar-valued function and F2 is a vector-valued function. The ten supported types are:\n\n::T\n::VariableIndex\n::ScalarAffineFunction{T}\n::ScalarQuadraticFunction{T}\n::ScalarNonlinearFunction\n::AbstractVector{T}\n::VectorOfVariables\n::VectorAffineFunction{T}\n::VectorQuadraticFunction{T}\n::VectorNonlinearFunction\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.operate!","page":"API Reference","title":"MathOptInterface.Utilities.operate!","text":"operate!(\n op::Function,\n ::Type{T},\n args::Union{T,MOI.AbstractFunction}...,\n)::MOI.AbstractFunction where {T<:Number}\n\nReturns an MOI.AbstractFunction representing the function resulting from the operation op(args...) on functions of coefficient type T.\n\nThe first argument may be modified, in which case the return value is identical to the first argument. For operations which cannot be implemented in-place, this function returns a new object.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.operate_output_index!","page":"API Reference","title":"MathOptInterface.Utilities.operate_output_index!","text":"operate_output_index!(\n op::Union{typeof(+),typeof(-)},\n ::Type{T},\n output_index::Integer,\n f::Union{AbstractVector{T},MOI.AbstractVectorFunction}\n g::Union{T,MOI.AbstractScalarFunction}...\n) where {T<:Number}\n\nReturn an MOI.AbstractVectorFunction in which the scalar function in row output_index is the result of op(f[output_index], g).\n\nThe functions at output index different to output_index are the same as the functions at the same output index in func. The first argument may be modified.\n\nMethods\n\n+ a. operate_output_index!(+, ::Type{T}, ::Int, ::VectorF, ::ScalarF)\n- a. operate_output_index!(-, ::Type{T}, ::Int, ::VectorF, ::ScalarF)\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.vectorize","page":"API Reference","title":"MathOptInterface.Utilities.vectorize","text":"vectorize(x::AbstractVector{<:Number})\n\nReturns x.\n\n\n\n\n\nvectorize(x::AbstractVector{MOI.VariableIndex})\n\nReturns the vector of scalar affine functions in the form of a MOI.VectorAffineFunction{T}.\n\n\n\n\n\nvectorize(funcs::AbstractVector{MOI.ScalarAffineFunction{T}}) where T\n\nReturns the vector of scalar affine functions in the form of a MOI.VectorAffineFunction{T}.\n\n\n\n\n\nvectorize(funcs::AbstractVector{MOI.ScalarQuadraticFunction{T}}) where T\n\nReturns the vector of scalar quadratic functions in the form of a MOI.VectorQuadraticFunction{T}.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Constraint-utilities","page":"API Reference","title":"Constraint utilities","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following utilities are available for moving the function constant to the set for scalar constraints:","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.shift_constant\nUtilities.supports_shift_constant\nUtilities.normalize_and_add_constraint\nUtilities.normalize_constant","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.shift_constant","page":"API Reference","title":"MathOptInterface.Utilities.shift_constant","text":"shift_constant(set::MOI.AbstractScalarSet, offset)\n\nReturns a new scalar set new_set such that func-in-set is equivalent to func + offset-in-new_set.\n\nUse supports_shift_constant to check if the set supports shifting:\n\nif MOI.Utilities.supports_shift_constant(typeof(set))\n new_set = MOI.Utilities.shift_constant(set, -func.constant)\n func.constant = 0\n MOI.add_constraint(model, func, new_set)\nelse\n MOI.add_constraint(model, func, set)\nend\n\nNote for developers\n\nOnly define this function if it makes sense and you have implemented supports_shift_constant to return true.\n\nExamples\n\njulia> import MathOptInterface as MOI\n\njulia> set = MOI.Interval(-2.0, 3.0)\nMathOptInterface.Interval{Float64}(-2.0, 3.0)\n\njulia> MOI.Utilities.supports_shift_constant(typeof(set))\ntrue\n\njulia> MOI.Utilities.shift_constant(set, 1.0)\nMathOptInterface.Interval{Float64}(-1.0, 4.0)\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.supports_shift_constant","page":"API Reference","title":"MathOptInterface.Utilities.supports_shift_constant","text":"supports_shift_constant(::Type{S}) where {S<:MOI.AbstractSet}\n\nReturn true if shift_constant is defined for set S.\n\nSee also shift_constant.\n\nExamples\n\njulia> import MathOptInterface as MOI\n\njulia> MOI.Utilities.supports_shift_constant(MOI.Interval{Float64})\ntrue\n\njulia> MOI.Utilities.supports_shift_constant(MOI.ZeroOne)\nfalse\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.normalize_and_add_constraint","page":"API Reference","title":"MathOptInterface.Utilities.normalize_and_add_constraint","text":"normalize_and_add_constraint(\n model::MOI.ModelLike,\n func::MOI.AbstractScalarFunction,\n set::MOI.AbstractScalarSet;\n allow_modify_function::Bool = false,\n)\n\nAdds the scalar constraint obtained by moving the constant term in func to the set in model. If allow_modify_function is true then the function func can be modified.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.normalize_constant","page":"API Reference","title":"MathOptInterface.Utilities.normalize_constant","text":"normalize_constant(\n func::MOI.AbstractScalarFunction,\n set::MOI.AbstractScalarSet;\n allow_modify_function::Bool = false,\n)\n\nReturn the func-in-set constraint in normalized form. That is, if func is MOI.ScalarQuadraticFunction or MOI.ScalarAffineFunction, the constant is moved to the set. If allow_modify_function is true then the function func can be modified.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following utility identifies those constraints imposing bounds on a given variable, and returns those bound values:","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.get_bounds","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.get_bounds","page":"API Reference","title":"MathOptInterface.Utilities.get_bounds","text":"get_bounds(model::MOI.ModelLike, ::Type{T}, x::MOI.VariableIndex)\n\nReturn a tuple (lb, ub) of type Tuple{T, T}, where lb and ub are lower and upper bounds, respectively, imposed on x in model.\n\n\n\n\n\nget_bounds(\n model::MOI.ModelLike,\n bounds_cache::Dict{MOI.VariableIndex,NTuple{2,T}},\n f::MOI.ScalarAffineFunction{T},\n) where {T} --> Union{Nothing,NTuple{2,T}}\n\nReturn the lower and upper bound of f as a tuple. If the domain is not bounded, return nothing.\n\n\n\n\n\nget_bounds(\n model::MOI.ModelLike,\n bounds_cache::Dict{MOI.VariableIndex,NTuple{2,T}},\n x::MOI.VariableIndex,\n) where {T} --> Union{Nothing,NTuple{2,T}}\n\nReturn the lower and upper bound of x as a tuple. If the domain is not bounded, return nothing.\n\nSimilar to get_bounds(::MOI.ModelLike, ::Type{T}, ::MOI.VariableIndex), except that the second argument is a cache which maps variables to their bounds and avoids repeated lookups.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following utilities are useful when working with symmetric matrix cones.","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.is_diagonal_vectorized_index\nUtilities.side_dimension_for_vectorized_dimension","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.is_diagonal_vectorized_index","page":"API Reference","title":"MathOptInterface.Utilities.is_diagonal_vectorized_index","text":"is_diagonal_vectorized_index(index::Base.Integer)\n\nReturn whether index is the index of a diagonal element in a MOI.AbstractSymmetricMatrixSetTriangle set.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.side_dimension_for_vectorized_dimension","page":"API Reference","title":"MathOptInterface.Utilities.side_dimension_for_vectorized_dimension","text":"side_dimension_for_vectorized_dimension(n::Integer)\n\nReturn the dimension d such that MOI.dimension(MOI.PositiveSemidefiniteConeTriangle(d)) is n.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#Set-utilities","page":"API Reference","title":"Set utilities","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"The following utilities are available for sets:","category":"page"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.AbstractDistance\nUtilities.ProjectionUpperBoundDistance\nUtilities.distance_to_set\nUtilities.set_dot","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.AbstractDistance","page":"API Reference","title":"MathOptInterface.Utilities.AbstractDistance","text":"abstract type AbstractDistance end\n\nAn abstract type used to enable dispatch of Utilities.distance_to_set.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.ProjectionUpperBoundDistance","page":"API Reference","title":"MathOptInterface.Utilities.ProjectionUpperBoundDistance","text":"ProjectionUpperBoundDistance() <: AbstractDistance\n\nAn upper bound on the minimum distance between point and the closest feasible point in set.\n\nDefinition of distance\n\nThe minimum distance is computed as:\n\nd(x mathcalK) = min_y in mathcalK x - y \n\nwhere x is point and mathcalK is set. The norm is computed as:\n\nx = sqrtf(x x mathcalK)\n\nwhere f is Utilities.set_dot.\n\nIn the default case, where the set does not have a specialized method for Utilities.set_dot, the norm is equivalent to the Euclidean norm x = sqrtsum x_i^2.\n\nWhy an upper bound?\n\nIn most cases, distance_to_set should return the smallest upper bound, but it may return a larger value if the smallest upper bound is expensive to compute.\n\nFor example, given an epigraph from of a conic set, (t x) f(x) le t, it may be simpler to return delta such that f(x) le t + delta, rather than computing the nearest projection onto the set.\n\nIf the distance is not the smallest upper bound, the docstring of the appropriate distance_to_set method must describe the way that the distance is computed.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.distance_to_set","page":"API Reference","title":"MathOptInterface.Utilities.distance_to_set","text":"distance_to_set(\n [d::AbstractDistance = ProjectionUpperBoundDistance()],]\n point::T,\n set::MOI.AbstractScalarSet,\n) where {T}\n\ndistance_to_set(\n [d::AbstractDistance = ProjectionUpperBoundDistance(),]\n point::AbstractVector{T},\n set::MOI.AbstractVectorSet,\n) where {T}\n\nCompute the distance between point and set using the distance metric d. If point is in the set set, this function must return zero(T).\n\nIf d is omitted, the default distance is Utilities.ProjectionUpperBoundDistance.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.RotatedSecondOrderCone)\n\nLet (t, u, y...) = x. Return the 2-norm of the vector d such that in x + d, u is projected to 1 if u <= 0, and t is increased such that x + d belongs to the set.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.ExponentialCone)\n\nLet (u, v, w) = x. If v > 0, return the epigraph distance d such that (u, v, w + d) belongs to the set.\n\nIf v <= 0 return the 2-norm of the vector d such that x + d = (u, 1, z) where z satisfies the constraints.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.DualExponentialCone)\n\nLet (u, v, w) = x. If u < 0, return the epigraph distance d such that (u, v, w + d) belongs to the set.\n\nIf u >= 0 return the 2-norm of the vector d such that x + d = (u, -1, z) where z satisfies the constraints.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.GeometricMeanCone)\n\nLet (t, y...) = x. If all y are non-negative, return the epigraph distance d such that (t + d, y...) belongs to the set.\n\nIf any y are strictly negative, return the 2-norm of the vector d that projects negative y elements to 0 and t to ℝ₋.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.PowerCone)\n\nLet (a, b, c) = x. If a and b are non-negative, return the epigraph distance required to increase c such that the constraint is satisfied.\n\nIf a or b is strictly negative, return the 2-norm of the vector d such that in the vector x + d: c, and any negative a and b are projected to 0.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.DualPowerCone)\n\nLet (a, b, c) = x. If a and b are non-negative, return the epigraph distance required to increase c such that the constraint is satisfied.\n\nIf a or b is strictly negative, return the 2-norm of the vector d such that in the vector x + d: c, and any negative a and b are projected to 0.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.NormOneCone)\n\nLet (t, y...) = x. Return the epigraph distance d such that (t + d, y...) belongs to the set.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.NormInfinityCone)\n\nLet (t, y...) = x. Return the epigraph distance d such that (t + d, y...) belongs to the set.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, ::MOI.RelativeEntropyCone)\n\nLet (u, v..., w...) = x. If v and w are strictly positive, return the epigraph distance required to increase u such that the constraint is satisfied.\n\nIf any elements in v or w are non-positive, return the 2-norm of the vector d such that in the vector x + d: any non-positive elements in v and w are projected to 1, and u is projected such that the epigraph constraint holds.\n\n\n\n\n\ndistance_to_set(::ProjectionUpperBoundDistance, x, set::MOI.NormCone)\n\nLet (t, y...) = x. Return the epigraph distance d such that (t + d, y...) belongs to the set.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.set_dot","page":"API Reference","title":"MathOptInterface.Utilities.set_dot","text":"set_dot(x::AbstractVector, y::AbstractVector, set::AbstractVectorSet)\n\nReturn the scalar product between a vector x of the set set and a vector y of the dual of the set s.\n\n\n\n\n\nset_dot(x, y, set::AbstractScalarSet)\n\nReturn the scalar product between a number x of the set set and a number y of the dual of the set s.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#DoubleDicts","page":"API Reference","title":"DoubleDicts","text":"","category":"section"},{"location":"moi/submodules/Utilities/reference/","page":"API Reference","title":"API Reference","text":"Utilities.DoubleDicts.DoubleDict\nUtilities.DoubleDicts.DoubleDictInner\nUtilities.DoubleDicts.IndexDoubleDict\nUtilities.DoubleDicts.IndexDoubleDictInner\nUtilities.DoubleDicts.outer_keys\nUtilities.DoubleDicts.nonempty_outer_keys","category":"page"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.DoubleDicts.DoubleDict","page":"API Reference","title":"MathOptInterface.Utilities.DoubleDicts.DoubleDict","text":"DoubleDict{V}\n\nAn optimized dictionary to map MOI.ConstraintIndex to values of type V.\n\nWorks as a AbstractDict{MOI.ConstraintIndex,V} with minimal differences.\n\nIf V is also a MOI.ConstraintIndex, use IndexDoubleDict.\n\nNote that MOI.ConstraintIndex is not a concrete type, opposed to MOI.ConstraintIndex{MOI.VariableIndex, MOI.Integers}, which is a concrete type.\n\nWhen looping through multiple keys of the same Function-in-Set type, use\n\ninner = dict[F, S]\n\nto return a type-stable DoubleDictInner.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.DoubleDicts.DoubleDictInner","page":"API Reference","title":"MathOptInterface.Utilities.DoubleDicts.DoubleDictInner","text":"DoubleDictInner{F,S,V}\n\nA type stable inner dictionary of DoubleDict.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.DoubleDicts.IndexDoubleDict","page":"API Reference","title":"MathOptInterface.Utilities.DoubleDicts.IndexDoubleDict","text":"IndexDoubleDict\n\nA specialized version of [DoubleDict] in which the values are of type MOI.ConstraintIndex\n\nWhen looping through multiple keys of the same Function-in-Set type, use\n\ninner = dict[F, S]\n\nto return a type-stable IndexDoubleDictInner.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.DoubleDicts.IndexDoubleDictInner","page":"API Reference","title":"MathOptInterface.Utilities.DoubleDicts.IndexDoubleDictInner","text":"IndexDoubleDictInner{F,S}\n\nA type stable inner dictionary of IndexDoubleDict.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.DoubleDicts.outer_keys","page":"API Reference","title":"MathOptInterface.Utilities.DoubleDicts.outer_keys","text":"outer_keys(d::AbstractDoubleDict)\n\nReturn an iterator over the outer keys of the AbstractDoubleDict d. Each outer key is a Tuple{Type,Type} so that a double loop can be easily used:\n\nfor (F, S) in DoubleDicts.outer_keys(dict)\n for (k, v) in dict[F, S]\n # ...\n end\nend\n\nFor performance, it is recommended that the inner loop lies in a separate function to guarantee type-stability. Some outer keys (F, S) might lead to an empty dict[F, S]. If you want only nonempty dict[F, S], use nonempty_outer_keys.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Utilities/reference/#MathOptInterface.Utilities.DoubleDicts.nonempty_outer_keys","page":"API Reference","title":"MathOptInterface.Utilities.DoubleDicts.nonempty_outer_keys","text":"nonempty_outer_keys(d::AbstractDoubleDict)\n\nReturn a vector of outer keys of the AbstractDoubleDict d.\n\nOnly outer keys that have a nonempty set of inner keys will be returned.\n\nEach outer key is a Tuple{Type,Type} so that a double loop can be easily used\n\nfor (F, S) in DoubleDicts.nonempty_outer_keys(dict)\n for (k, v) in dict[F, S]\n # ...\n end\nend\nFor performance, it is recommended that the inner loop lies in a separate\nfunction to guarantee type-stability.\n\nIf you want an iterator of all current outer keys, use [`outer_keys`](@ref).\n\n\n\n\n\n","category":"function"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"EditURL = \"https://github.com/jump-dev/Clp.jl/blob/v1.1.0/README.md\"","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"(Image: )","category":"page"},{"location":"packages/Clp/#Clp.jl","page":"jump-dev/Clp.jl","title":"Clp.jl","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"(Image: Build Status) (Image: codecov)","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"Clp.jl is a wrapper for the COIN-OR Linear Programming solver.","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"The wrapper has two components:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"a thin wrapper around the complete C API\nan interface to MathOptInterface","category":"page"},{"location":"packages/Clp/#Affiliation","page":"jump-dev/Clp.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"This wrapper is maintained by the JuMP community and is not a COIN-OR project.","category":"page"},{"location":"packages/Clp/#Getting-help","page":"jump-dev/Clp.jl","title":"Getting help","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"If you need help, please ask a question on the JuMP community forum.","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"If you have a reproducible example of a bug, please open a GitHub issue.","category":"page"},{"location":"packages/Clp/#License","page":"jump-dev/Clp.jl","title":"License","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"Clp.jl is licensed under the MIT License.","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"The underlying solver, coin-or/Clp, is licensed under the Eclipse public license.","category":"page"},{"location":"packages/Clp/#Installation","page":"jump-dev/Clp.jl","title":"Installation","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"Install Clp using Pkg.add:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"import Pkg\nPkg.add(\"Clp\")","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"In addition to installing the Clp.jl package, this will also download and install the Clp binaries. You do not need to install Clp separately.","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"To use a custom binary, read the Custom solver binaries section of the JuMP documentation.","category":"page"},{"location":"packages/Clp/#Use-with-JuMP","page":"jump-dev/Clp.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"To use Clp with JuMP, use Clp.Optimizer:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"using JuMP, Clp\nmodel = Model(Clp.Optimizer)\nset_attribute(model, \"LogLevel\", 1)\nset_attribute(model, \"Algorithm\", 4)","category":"page"},{"location":"packages/Clp/#MathOptInterface-API","page":"jump-dev/Clp.jl","title":"MathOptInterface API","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"The Clp optimizer supports the following constraints and attributes.","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"List of supported objective functions:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"List of supported variable types:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"MOI.Reals","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"List of supported constraint types:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"MOI.ScalarAffineFunction{Float64} in MOI.EqualTo{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.GreaterThan{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.Interval{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.LessThan{Float64}\nMOI.VariableIndex in MOI.EqualTo{Float64}\nMOI.VariableIndex in MOI.GreaterThan{Float64}\nMOI.VariableIndex in MOI.Interval{Float64}\nMOI.VariableIndex in MOI.LessThan{Float64}","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"List of supported model attributes:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"MOI.ObjectiveSense()","category":"page"},{"location":"packages/Clp/#Options","page":"jump-dev/Clp.jl","title":"Options","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"Options are, unfortunately, not well documented.","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"The following options are likely to be the most useful:","category":"page"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"Parameter Example Explanation\nPrimalTolerance 1e-7 Primal feasibility tolerance\nDualTolerance 1e-7 Dual feasibility tolerance\nDualObjectiveLimit 1e308 When using dual simplex (where the objective is monotonically changing), terminate when the objective exceeds this limit\nMaximumIterations 2147483647 Terminate after performing this number of simplex iterations\nMaximumSeconds -1.0 Terminate after this many seconds have passed. A negative value means no time limit\nLogLevel 1 Set to 1, 2, 3, or 4 for increasing output. Set to 0 to disable output\nPresolveType 0 Set to 1 to disable presolve\nSolveType 5 Solution method: dual simplex (0), primal simplex (1), sprint (2), barrier with crossover (3), barrier without crossover (4), automatic (5)\nInfeasibleReturn 0 Set to 1 to return as soon as the problem is found to be infeasible (by default, an infeasibility proof is computed as well)\nScaling 3 0 -off, 1 equilibrium, 2 geometric, 3 auto, 4 dynamic(later)\nPerturbation 100 switch on perturbation (50), automatic (100), don't try perturbing (102)","category":"page"},{"location":"packages/Clp/#C-API","page":"jump-dev/Clp.jl","title":"C API","text":"","category":"section"},{"location":"packages/Clp/","page":"jump-dev/Clp.jl","title":"jump-dev/Clp.jl","text":"The C API can be accessed via Clp.Clp_XXX functions, where the names and arguments are identical to the C API.","category":"page"},{"location":"background/bibliography/#Bibliography","page":"Bibliography","title":"Bibliography","text":"","category":"section"},{"location":"background/bibliography/","page":"Bibliography","title":"Bibliography","text":"Barvinok, A. (2002). A course in convexity. Vol. 54 of Graduate studies in mathematics (American Mathematical Society).\n\n\n\nBen-Tal, A. and Nemirovski, A. (2001). Lectures on Modern Convex Optimization (Society for Industrial and Applied Mathematics).\n\n\n\nBertsimas, D.; Gupta, V. and Kallus, N. (2018). Data-driven robust optimization. Mathematical Programming 167, 235–292.\n\n\n\nBetts, J. T. (2010). Practical Methods for Optimal Control and Estimation Using Nonlinear Programming. Second Edition (Society for Industrial and Applied Mathematics).\n\n\n\nBoyd, S. and Vandenberghe, L. (2004). Convex Optimization (Cambridge University Press, Cambridge).\n\n\n\nBukhsh, W. A.; Grothey, A.; McKinnon, K. I. and Trodden, P. A. (2013). Local Solutions of the Optimal Power Flow Problem. IEEE Transactions on Power Systems 28, 4780–4788.\n\n\n\nCornuéjols, G.; Peña, J. and Tütüncü, R. (2018). Optimization Methods in Finance. 2 Edition (Cambridge University Press).\n\n\n\nD’Aertrycke, G.; Ehrenmann, A.; Ralph, D. and Smeers, Y. (2017). Risk trading in capacity equilibrium models (Cambridge Working Papers in Economics (CWPE)).\n\n\n\nFerris, M. C.; Mangasarian, O. L. and Wright, S. J. (2007). Linear Programming with MATLAB (Society for Industrial and Applied Mathematics).\n\n\n\nGoemans, M. X. and Williamson, D. P. (1995). Improved Approximation Algorithms for Maximum Cut and Satisfiability Problems Using Semidefinite Programming. J. ACM 42, 1115–1145.\n\n\n\nJabr, R. A. (2012). Exploiting Sparsity in SDP Relaxations of the OPF Problem. IEEE Transactions on Power Systems 27, 1138–1139.\n\n\n\nKnuth, D. E. (1994). The sandwich theorem. The Electronic Journal of Combinatorics 1.\n\n\n\nKrasko, V. and Rebennack, S. (2017). Global Optimization: Optimal Power Flow Problem. In: Advances and Trends in Optimization with Engineering Applications, edited by Terlaky, T.; Anjos, M. F. and Ahmed, S. (Society for Industrial and Applied Mathematics, Philadelphia, PA); Chapter 15, pp. 187–205.\n\n\n\nLinial, N. (2002). Finite Metric Spaces: Combinatorics, Geometry and Algorithms. In: Proceedings of the Eighteenth Annual Symposium on Computational Geometry, SCG '02 (Association for Computing Machinery, New York, NY, USA); p. 63.\n\n\n\nMatoušek, J. (2013). Lectures on discrete geometry. Vol. 212 no. 1 of Graduate Texts in Mathematics (Springer Science & Business Media).\n\n\n\nPeng, J. and Wei, Y. (2007). Approximating K‐means‐type Clustering via Semidefinite Programming. SIAM Journal on Optimization 18, 186–205.\n\n\n\nZimmerman, R. D.; Murillo-Sánchez, C. E. and Thomas, R. J. (2011). MATPOWER: Steady-State Operations, Planning, and Analysis Tools for Power Systems Research and Education. IEEE Transactions on Power Systems 26, 12–19.\n\n\n\n","category":"page"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/index.md\"","category":"page"},{"location":"moi/#moi_documentation","page":"Introduction","title":"Introduction","text":"","category":"section"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"warning: Warning\nThis documentation in this section is a copy of the official MathOptInterface documentation available at https://jump.dev/MathOptInterface.jl/v1.31.2. It is included here to make it easier to link concepts between JuMP and MathOptInterface.","category":"page"},{"location":"moi/#What-is-MathOptInterface?","page":"Introduction","title":"What is MathOptInterface?","text":"","category":"section"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"MathOptInterface.jl (MOI) is an abstraction layer designed to provide a unified interface to mathematical optimization solvers so that users do not need to understand multiple solver-specific APIs.","category":"page"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"tip: Tip\nThis documentation is aimed at developers writing software interfaces to solvers and modeling languages using the MathOptInterface API. If you are a user interested in solving optimization problems, we encourage you instead to use MOI through a higher-level modeling interface like JuMP or Convex.jl.","category":"page"},{"location":"moi/#How-the-documentation-is-structured","page":"Introduction","title":"How the documentation is structured","text":"","category":"section"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"Having a high-level overview of how this documentation is structured will help you know where to look for certain things.","category":"page"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"The Tutorials section contains articles on how to use and implement the MathOptInteraface API. Look here if you want to write a model in MOI, or write an interface to a new solver.\nThe Manual contains short code-snippets that explain how to use the MOI API. Look here for more details on particular areas of MOI.\nThe Background section contains articles on the theory behind MathOptInterface. Look here if you want to understand why, rather than how.\nThe API Reference contains a complete list of functions and types that comprise the MOI API. Look here is you want to know how to use (or implement) a particular function.\nThe Submodules section contains stand-alone documentation for each of the submodules within MOI. These submodules are not required to interface a solver with MOI, but they make the job much easier.","category":"page"},{"location":"moi/#Citing-MathOptInterface","page":"Introduction","title":"Citing MathOptInterface","text":"","category":"section"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"If you find MathOptInterface useful in your work, we kindly request that you cite the following paper:","category":"page"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"@article{legat2021mathoptinterface,\n title={{MathOptInterface}: a data structure for mathematical optimization problems},\n author={Legat, Beno{\\^\\i}t and Dowson, Oscar and Garcia, Joaquim Dias and Lubin, Miles},\n journal={INFORMS Journal on Computing},\n year={2021},\n doi={10.1287/ijoc.2021.1067},\n publisher={INFORMS}\n}","category":"page"},{"location":"moi/","page":"Introduction","title":"Introduction","text":"A preprint of this paper is freely available.","category":"page"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"EditURL = \"https://github.com/osqp/OSQP.jl/blob/v0.8.1/README.md\"","category":"page"},{"location":"packages/OSQP/#OSQP.jl","page":"osqp/OSQP.jl","title":"OSQP.jl","text":"","category":"section"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"(Image: Build Status) (Image: codecov.io)","category":"page"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"OSQP.jl is a Julia wrapper for OSQP: the Operator Splitting QP Solver.","category":"page"},{"location":"packages/OSQP/#License","page":"osqp/OSQP.jl","title":"License","text":"","category":"section"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"OSQP.jl is licensed under the Apache-2.0 license.","category":"page"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"The upstream solver, osqp/osqp is also licensed under the Apache-2.0 license.","category":"page"},{"location":"packages/OSQP/#Installation","page":"osqp/OSQP.jl","title":"Installation","text":"","category":"section"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"Install OSQP.jl using the Julia package manager","category":"page"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"import Pkg\nPkg.add(\"OSQP\")","category":"page"},{"location":"packages/OSQP/#Problem-class","page":"osqp/OSQP.jl","title":"Problem class","text":"","category":"section"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"The OSQP (Operator Splitting Quadratic Program) solver is a numerical optimization package for solving problems in the form","category":"page"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"minimize 0.5 x' P x + q' x\n\nsubject to l <= A x <= u","category":"page"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"where x in R^n is the optimization variable. The objective function is defined by a positive semidefinite matrix P in S^n_+ and vector q in R^n. The linear constraints are defined by matrix A in R^{m x n} and vectors l in R^m U {-inf}^m, u in R^m U {+inf}^m.","category":"page"},{"location":"packages/OSQP/#Documentation","page":"osqp/OSQP.jl","title":"Documentation","text":"","category":"section"},{"location":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"Detailed documentation is available at https://osqp.org/.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"EditURL = \"classifiers.jl\"","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Example:-classification-problems","page":"Example: classification problems","title":"Example: classification problems","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The purpose of this tutorial is to show how JuMP can be used to formulate classification problems.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Classification problems deal with constructing functions, called classifiers, that can efficiently classify data into two or more distinct sets. A common application is classifying previously unseen data points after training a classifier on known data.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The theory and models in this tutorial come from Section 9.4 of (Ferris et al., 2007).","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Required-packages","page":"Example: classification problems","title":"Required packages","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"using JuMP\nimport DelimitedFiles\nimport Ipopt\nimport LinearAlgebra\nimport Plots\nimport Random\nimport Test","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Data-and-visualisation","page":"Example: classification problems","title":"Data and visualisation","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"To start, let's generate some points to test with. The argument m is the number of 2-dimensional points:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"function generate_test_points(m; random_seed = 1)\n rng = Random.MersenneTwister(random_seed)\n return 2.0 .* rand(rng, Float64, m, 2)\nend","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"For the sake of the example, let's take m = 100:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"P = generate_test_points(100);\nnothing #hide","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The points are represented row-wise in the matrix P. Let's visualise the points using the Plots package:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"plot = Plots.scatter(\n P[:, 1],\n P[:, 2];\n xlim = (0, 2.02),\n ylim = (0, 2.02),\n color = :white,\n size = (600, 600),\n legend = false,\n)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We want to split the points into two distinct sets on either side of a dividing line. We'll then label each point depending on which side of the line it happens to fall. Based on the labels of the point, we'll show how to create a classifier using a JuMP model. We can then test how well our classifier reproduces the original labels and the boundary between them.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Let's make a line to divide the points into two sets by defining a gradient and a constant:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"w_0, g_0 = [5, 3], 8\nline(v::AbstractArray; w = w_0, g = g_0) = w' * v - g\nline(x::Real; w = w_0, g = g_0) = -(w[1] * x - g) / w[2];\nnothing #hide","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Julia's multiple dispatch feature allows us to define the vector and single-variable form of the line function under the same name.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Let's add this to the plot:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Plots.plot!(plot, line; linewidth = 5)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Now we label the points relative to which side of the line they are. It is numerically useful to have the labels +1 and -1 for the upcoming JuMP formulation.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"labels = ifelse.(line.(eachrow(P)) .>= 0, 1, -1)\nPlots.scatter!(\n plot,\n P[:, 1],\n P[:, 2];\n shape = ifelse.(labels .== 1, :cross, :xcross),\n markercolor = ifelse.(labels .== 1, :blue, :crimson),\n markersize = 8,\n)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Our goal is to show we can reconstruct the line from just the points and the labels.","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Formulation:-linear-support-vector-machine","page":"Example: classification problems","title":"Formulation: linear support vector machine","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"A classifier known as the linear support vector machine (SVM) looks for the affine function L(p) = w^top p - g that satisfies L(p) 0 for all points p with a label -1 and L(p) ge 0 for all points p with a label +1.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The linearly constrained quadratic program that implements this is:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"beginaligned\nmin_w in mathbbR^n g in mathbbR y in mathbbR^m quad frac12 w^top w + C sum_i=1^m y_i \ntextsubject to quad D cdot (P w - g) + y geq mathbf1 \n y ge 0\nendaligned","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"where D is a diagonal matrix of the labels.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We need a default value for the positive penalty parameter C:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"C_0 = 100.0;\nnothing #hide","category":"page"},{"location":"tutorials/nonlinear/classifiers/#JuMP-formulation","page":"Example: classification problems","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Here is the JuMP model:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"function solve_SVM_classifier(P::Matrix, labels::Vector; C::Float64 = C_0)\n m, n = size(P)\n model = Model(Ipopt.Optimizer)\n set_silent(model)\n @variable(model, w[1:n])\n @variable(model, g)\n @variable(model, y[1:m] >= 0)\n @objective(model, Min, 1 / 2 * w' * w + C * sum(y))\n D = LinearAlgebra.Diagonal(labels)\n @constraint(model, D * (P * w .- g) .+ y .>= 1)\n optimize!(model)\n Test.@test is_solved_and_feasible(model)\n slack = extrema(value.(y))\n println(\"Minimum slack: \", slack[1], \"\\nMaximum slack: \", slack[2])\n classifier(x) = line(x; w = value.(w), g = value(g))\n return model, classifier\nend","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Results","page":"Example: classification problems","title":"Results","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Let's recover the values that define the classifier by solving the model:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"_, classifier = solve_SVM_classifier(P, labels)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"With the solution, we can ask: was the value of the penalty constant \"sufficiently large\" for this data set? This can be judged in part by the range of the slack variables. If the slack is too large, then we need to increase the penalty constant.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Let's plot the solution and check how we did:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Plots.plot!(plot, classifier; linewidth = 5, linestyle = :dashdotdot)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We find that we have recovered the dividing line from just the information of the points and their labels.","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Nonseparable-classes-of-points","page":"Example: classification problems","title":"Nonseparable classes of points","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Now, what if the point sets are not cleanly separable by a line (or a hyperplane in higher dimensions)? Does this still work? Let's repeat the process, but this time we will simulate nonseparable classes of points by intermingling a few nearby points across the previously used line.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"nearby_indices = abs.(line.(eachrow(P))) .< 1.1\nlabels_new = ifelse.(nearby_indices, -labels, labels)\nmodel, classifier = solve_SVM_classifier(P, labels_new)\nplot = Plots.scatter(\n P[:, 1],\n P[:, 2];\n xlim = (0, 2.02),\n ylim = (0, 2.02),\n color = :white,\n size = (600, 600),\n legend = false,\n)\nPlots.scatter!(\n plot,\n P[:, 1],\n P[:, 2];\n shape = ifelse.(labels_new .== 1, :cross, :xcross),\n markercolor = ifelse.(labels_new .== 1, :blue, :crimson),\n markersize = 8,\n)\nPlots.plot!(plot, classifier; linewidth = 5, linestyle = :dashdotdot)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"So our JuMP formulation still produces a classifier, but it mis-classifies some of the nonseparable points.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We can find out which points are contributing to the shape of the line by looking at the dual values of the affine constraints and comparing them to the penalty constant C:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"affine_cons = all_constraints(model, AffExpr, MOI.GreaterThan{Float64})\nactive_cons = findall(isapprox.(dual.(affine_cons), C_0; atol = 0.001))\nfindall(nearby_indices) ⊆ active_cons","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The last statement tells us that our nonseparable points are actively contributing to how the classifier is defined. The remaining points are of interest and are highlighted:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"P_active = P[setdiff(active_cons, findall(nearby_indices)), :]\nPlots.scatter!(\n plot,\n P_active[:, 1],\n P_active[:, 2];\n shape = :hexagon,\n markersize = 8,\n markeropacity = 0.5,\n)","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Advanced:-duality-and-the-kernel-method","page":"Example: classification problems","title":"Advanced: duality and the kernel method","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We now consider an alternative formulation for a linear SVM by solving the dual problem.","category":"page"},{"location":"tutorials/nonlinear/classifiers/#The-dual-program","page":"Example: classification problems","title":"The dual program","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The dual of the linear SVM program is also a linearly constrained quadratic program:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"beginaligned\nmin_u in mathbbR^m quad frac12 u^top D P P^top D u - mathbf1^top u \ntextsubject to quad mathbf1^top D u = 0 \n 0 leq u leq Cmathbf1\nendaligned","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"This is the JuMP model:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"function solve_dual_SVM_classifier(P::Matrix, labels::Vector; C::Float64 = C_0)\n m, n = size(P)\n model = Model(Ipopt.Optimizer)\n set_silent(model)\n @variable(model, 0 <= u[1:m] <= C)\n D = LinearAlgebra.Diagonal(labels)\n @objective(model, Min, 1 / 2 * u' * D * P * P' * D * u - sum(u))\n @constraint(model, con, sum(D * u) == 0)\n optimize!(model)\n Test.@test is_solved_and_feasible(model)\n w = P' * D * value.(u)\n g = dual(con)\n classifier(x) = line(x; w = w, g = g)\n return classifier\nend","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We recover the line gradient vector w through setting w = P^top D u, and the line constant g as the dual value of the single affine constraint.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The dual problem has fewer variables and fewer constraints, so in many cases it may be simpler to solve the dual form.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We can check that the dual form has recovered a classifier:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"classifier = solve_dual_SVM_classifier(P, labels)\nPlots.plot!(plot, classifier; linewidth = 5, linestyle = :dash)","category":"page"},{"location":"tutorials/nonlinear/classifiers/#The-kernel-method","page":"Example: classification problems","title":"The kernel method","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Linear SVM techniques are not limited to finding separating hyperplanes in the original space of the dataset. One could first transform the training data under a nonlinear mapping, apply our method, then map the hyperplane back into original space.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The actual data describing the point set is held in a matrix P, but looking at the dual program we see that what actually matters is the Gram matrix P P^top, expressing a pairwise comparison (an inner-product) between each point vector. It follows that any mapping of the point set only needs to be defined at the level of pairwise maps between points. Such maps are known as kernel functions:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"k mathbbR^n times mathbbR^n rightarrow mathbbR qquad\n(s t) mapsto left Phi(s) Phi(t) right","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"where the right-hand side applies some transformation Phi mathbbR^n rightarrow mathbbR^n followed by an inner-product in that image space.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"In practice, we can avoid having Phi explicitly given but instead define a kernel function directly between pairs of vectors. This change to using a kernel function without knowing the map is called the kernel method (or sometimes, the kernel trick).","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Classifier-using-a-Gaussian-kernel","page":"Example: classification problems","title":"Classifier using a Gaussian kernel","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We will demonstrate the application of a Gaussian or radial basis function kernel:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"k(s t) = expleft( -mu lVert s - t rVert^2_2 right)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"for some positive parameter mu.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"k_gauss(s::Vector, t::Vector; μ = 0.5) = exp(-μ * LinearAlgebra.norm(s - t)^2)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Given a matrix of points expressed row-wise and a kernel, the next function returns the transformed matrix K that replaces P P^top:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"function pairwise_transform(kernel::Function, P::Matrix{T}) where {T}\n m, n = size(P)\n K = zeros(T, m, m)\n for j in 1:m, i in 1:j\n K[i, j] = K[j, i] = kernel(P[i, :], P[j, :])\n end\n return LinearAlgebra.Symmetric(K)\nend","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Now we're ready to define our optimization problem. We need to provide the kernel function to be used in the problem. Note that any extra keyword arguments here (like parameter values) are passed through to the kernel.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"function solve_kernel_SVM_classifier(\n kernel::Function,\n P::Matrix,\n labels::Vector;\n C::Float64 = C_0,\n kwargs...,\n)\n m, n = size(P)\n K = pairwise_transform(kernel, P)\n model = Model(Ipopt.Optimizer)\n set_silent(model)\n @variable(model, 0 <= u[1:m] <= C)\n D = LinearAlgebra.Diagonal(labels)\n con = @constraint(model, sum(D * u) == 0)\n @objective(model, Min, 1 / 2 * u' * D * K * D * u - sum(u))\n optimize!(model)\n Test.@test is_solved_and_feasible(model)\n u_sol, g_sol = value.(u), dual(con)\n function classifier(v::Vector)\n return sum(\n D[i, i] * u_sol[i] * kernel(P[i, :], v; kwargs...) for i in 1:m\n ) - g_sol\n end\n return classifier\nend","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"This time, we don't recover the line gradient vector w directly. Instead, we compute the classifier f using the function:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":" f(v) = sum_i=1^m D_ii u_i k(p_i v ) - g","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"where p_i is row vector i of P.","category":"page"},{"location":"tutorials/nonlinear/classifiers/#Checkerboard-dataset","page":"Example: classification problems","title":"Checkerboard dataset","text":"","category":"section"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"To demonstrate this nonlinear technique, we'll use the checkerboard dataset.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"filename = joinpath(@__DIR__, \"data\", \"checker\", \"checker.txt\")\ncheckerboard = DelimitedFiles.readdlm(filename, ' ', Int)\nlabels = ifelse.(iszero.(checkerboard[:, 1]), -1, 1)\nB = checkerboard[:, 2:3] ./ 100.0 # rescale to [0,2] x [0,2] square.\nplot = Plots.scatter(\n B[:, 1],\n B[:, 2];\n color = ifelse.(labels .== 1, :white, :black),\n markersize = ifelse.(labels .== 1, 4, 2),\n size = (600, 600),\n legend = false,\n)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"Is the technique capable of generating a distinctly nonlinear surface? Let's solve the Gaussian kernel based quadratic problem with these parameters:","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"classifier = solve_kernel_SVM_classifier(k_gauss, B, labels; C = 1e5, μ = 10.0)\ngrid = [[x, y] for x in 0:0.01:2, y in 0:0.01:2]\ngrid_pos = [Tuple(g) for g in grid if classifier(g) >= 0]\nPlots.scatter!(plot, grid_pos; markersize = 0.2)","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"We find that the kernel method can perform well as a nonlinear classifier.","category":"page"},{"location":"tutorials/nonlinear/classifiers/","page":"Example: classification problems","title":"Example: classification problems","text":"The result has a fairly strong dependence on the choice of parameters, with larger values of mu allowing for a more complex boundary while smaller values lead to a smoother boundary for the classifier. Determining a better performing kernel function and choice of parameters is covered by the process of cross-validation with respect to the dataset, where different testing, training and tuning sets are used to validate the best choice of parameters against a statistical measure of error.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"CurrentModule = JuMP\nDocTestSetup = quote\n using JuMP, HiGHS, SCS\nend\nDocTestFilters = [r\"≤|<=\", r\"≥|>=\", r\" == | = \", r\" ∈ | in \", r\"MathOptInterface|MOI\"]","category":"page"},{"location":"manual/models/#jump_models","page":"Models","title":"Models","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"JuMP models are the fundamental building block that we use to construct optimization problems. They hold things like the variables and constraints, as well as which solver to use and even solution information.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"info: Info\nJuMP uses \"optimizer\" as a synonym for \"solver.\" Our convention is to use \"solver\" to refer to the underlying software, and use \"optimizer\" to refer to the Julia object that wraps the solver. For example, HiGHS is a solver, and HiGHS.Optimizer is an optimizer.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"tip: Tip\nSee Supported solvers for a list of available solvers.","category":"page"},{"location":"manual/models/#Create-a-model","page":"Models","title":"Create a model","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Create a model by passing an optimizer to Model:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer)\nA JuMP Model\n├ solver: HiGHS\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"If you don't know which optimizer you will be using at creation time, create a model without an optimizer, and then call set_optimizer at any time prior to optimize!:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model()\nA JuMP Model\n├ solver: none\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none\n\njulia> set_optimizer(model, HiGHS.Optimizer)","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"tip: Tip\nDon't know what the fields Model mode and CachingOptimizer state mean? Read the Backends section.","category":"page"},{"location":"manual/models/#What-is-the-difference?","page":"Models","title":"What is the difference?","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"For most models, there is no difference between passing the optimizer to Model, and calling set_optimizer.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"However, if an optimizer does not support a constraint in the model, the timing of when an error will be thrown can differ:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"If you pass an optimizer, an error will be thrown when you try to add the constraint.\nIf you call set_optimizer, an error will be thrown when you try to solve the model via optimize!.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Therefore, most users should pass an optimizer to Model because it provides the earliest warning that your solver is not suitable for the model you are trying to build. However, if you are modifying a problem by adding and deleting different constraint types, you may need to use set_optimizer. See Switching optimizer for the relaxed problem for an example of when this is useful.","category":"page"},{"location":"manual/models/#Reducing-time-to-first-solve-latency","page":"Models","title":"Reducing time-to-first-solve latency","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"By default, JuMP uses bridges to reformulate the model you are building into an equivalent model supported by the solver.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"However, if your model is already supported by the solver, bridges add latency (read The \"time-to-first-solve\" issue). This is particularly noticeable for small models.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"To reduce the \"time-to-first-solve,s\" try passing add_bridges = false.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer; add_bridges = false);","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"or","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model();\n\njulia> set_optimizer(model, HiGHS.Optimizer; add_bridges = false)","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"However, be wary. If your model and solver combination needs bridges, an error will be thrown:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(SCS.Optimizer; add_bridges = false);\n\n\njulia> @variable(model, x)\nx\n\njulia> @constraint(model, 2x <= 1)\nERROR: Constraints of type MathOptInterface.ScalarAffineFunction{Float64}-in-MathOptInterface.LessThan{Float64} are not supported by the solver.\n\nIf you expected the solver to support your problem, you may have an error in your formulation. Otherwise, consider using a different solver.\n\nThe list of available solvers, along with the problem types they support, is available at https://jump.dev/JuMP.jl/stable/installation/#Supported-solvers.\n[...]","category":"page"},{"location":"manual/models/#Solvers-which-expect-environments","page":"Models","title":"Solvers which expect environments","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Some solvers accept (or require) positional arguments such as a license environment or a path to a binary executable. For these solvers, you can pass a function to Model which takes zero arguments and returns an instance of the optimizer.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A common use-case for this is passing an environment or sub-solver to the optimizer:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> import HiGHS\n\njulia> import MultiObjectiveAlgorithms as MOA\n\njulia> model = Model(() -> MOA.Optimizer(HiGHS.Optimizer))\nA JuMP Model\n├ solver: MOA[algorithm=MultiObjectiveAlgorithms.Lexicographic, optimizer=HiGHS]\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none","category":"page"},{"location":"manual/models/#solver_options","page":"Models","title":"Solver options","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"JuMP uses \"attribute\" as a synonym for \"option.\" Use optimizer_with_attributes to create an optimizer with some attributes initialized:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(\n optimizer_with_attributes(HiGHS.Optimizer, \"output_flag\" => false),\n )\nA JuMP Model\n├ solver: HiGHS\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Alternatively, use set_attribute to set an attribute after the model has been created:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer);\n\njulia> set_attribute(model, \"output_flag\", false)\n\njulia> get_attribute(model, \"output_flag\")\nfalse","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"You can also modify attributes within an optimizer_with_attributes object:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> solver = optimizer_with_attributes(HiGHS.Optimizer, \"output_flag\" => true);\n\njulia> get_attribute(solver, \"output_flag\")\ntrue\n\njulia> set_attribute(solver, \"output_flag\", false)\n\njulia> get_attribute(solver, \"output_flag\")\nfalse\n\njulia> model = Model(solver);","category":"page"},{"location":"manual/models/#Changing-the-number-types","page":"Models","title":"Changing the number types","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"By default, the coefficients of affine and quadratic expressions are numbers of type either Float64 or Complex{Float64} (see Complex number support).","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"The type Float64 can be changed using the GenericModel constructor:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = GenericModel{Rational{BigInt}}();\n\njulia> @variable(model, x)\nx\n\njulia> @expression(model, expr, 1 // 3 * x)\n1//3 x\n\njulia> typeof(expr)\nGenericAffExpr{Rational{BigInt}, GenericVariableRef{Rational{BigInt}}}","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Using a value_type other than Float64 is an advanced operation and should be used only if the underlying solver actually solves the problem using the provided value type.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"warning: Warning\nNonlinear Modeling is currently restricted to the Float64 number type.","category":"page"},{"location":"manual/models/#Print-the-model","page":"Models","title":"Print the model","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"By default, show(model) will print a summary of the problem:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(); @variable(model, x >= 0); @objective(model, Max, x);\n\njulia> model\nA JuMP Model\n├ solver: none\n├ objective_sense: MAX_SENSE\n│ └ objective_function_type: VariableRef\n├ num_variables: 1\n├ num_constraints: 1\n│ └ VariableRef in MOI.GreaterThan{Float64}: 1\n└ Names registered in the model\n └ :x","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use print to print the formulation of the model (in IJulia, this will render as LaTeX.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> print(model)\nMax x\nSubject to\n x ≥ 0","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"warning: Warning\nThis format is specific to JuMP and may change in any future release. It is not intended to be an instance format. To write the model to a file, use write_to_file instead.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use latex_formulation to display the model in LaTeX form.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> latex_formulation(model)\n$$ \\begin{aligned}\n\\max\\quad & x\\\\\n\\text{Subject to} \\quad & x \\geq 0\\\\\n\\end{aligned} $$","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"In IJulia (and Documenter), ending a cell in with latex_formulation will render the model in LaTeX:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"using JuMP # hide\nmodel = Model() # hide\n@variable(model, x >= 0) # hide\n@objective(model, Max, x) # hide\nlatex_formulation(model)","category":"page"},{"location":"manual/models/#Turn-off-output","page":"Models","title":"Turn off output","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use set_silent and unset_silent to disable or enable printing output from the solver.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer);\n\njulia> set_silent(model)\n\njulia> unset_silent(model)","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"tip: Tip\nMost solvers will also have a solver-specific option to provide finer-grained control over the output. Consult their README's for details.","category":"page"},{"location":"manual/models/#Set-a-time-limit","page":"Models","title":"Set a time limit","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use set_time_limit_sec, unset_time_limit_sec, and time_limit_sec to manage time limits.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer);\n\njulia> set_time_limit_sec(model, 60.0)\n\n\njulia> time_limit_sec(model)\n60.0\n\njulia> unset_time_limit_sec(model)\n\njulia> limit = time_limit_sec(model)\n\njulia> limit === nothing\ntrue","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"If your time limit is encoded as a Dates.Period object, use the following code to convert it to Float64 for set_time_limit_sec:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> import Dates\n\njulia> seconds(x::Dates.Period) = 1e-3 * Dates.value(round(x, Dates.Millisecond))\nseconds (generic function with 1 method)\n\njulia> set_time_limit_sec(model, seconds(Dates.Hour(1)))\n\njulia> time_limit_sec(model)\n3600.0","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"info: Info\nSome solvers do not support time limits. In these cases, an error will be thrown.","category":"page"},{"location":"manual/models/#Write-a-model-to-file","page":"Models","title":"Write a model to file","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"JuMP can write models to a variety of file-formats using write_to_file and Base.write.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"For most common file formats, the file type will be detected from the extension.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"For example, here is how to write an MPS file:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model();\n\njulia> write_to_file(model, \"model.mps\")","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Other supported file formats include:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":".cbf for the Conic Benchmark Format\n.lp for the LP file format\n.mof.json for the MathOptFormat\n.nl for AMPL's NL file format\n.rew for the REW file format\n.sdpa and \".dat-s\" for the SDPA file format","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"To write to a specific io::IO, use Base.write. Specify the file type by passing a MOI.FileFormats.FileFormat enum.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model();\n\njulia> io = IOBuffer();\n\njulia> write(io, model; format = MOI.FileFormats.FORMAT_MPS)","category":"page"},{"location":"manual/models/#Read-a-model-from-file","page":"Models","title":"Read a model from file","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"JuMP models can be created from file formats using read_from_file and Base.read.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = read_from_file(\"model.mps\")\nA JuMP Model\n├ solver: none\n├ objective_sense: MIN_SENSE\n│ └ objective_function_type: AffExpr\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none\n\njulia> seekstart(io);\n\njulia> model2 = read(io, Model; format = MOI.FileFormats.FORMAT_MPS)\nA JuMP Model\n├ solver: none\n├ objective_sense: MIN_SENSE\n│ └ objective_function_type: AffExpr\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"note: Note\nBecause file formats do not serialize the containers of JuMP variables and constraints, the names in the model will not be registered. Therefore, you cannot access named variables and constraints via model[:x]. Instead, use variable_by_name or constraint_by_name to access specific variables or constraints.","category":"page"},{"location":"manual/models/#Relax-integrality","page":"Models","title":"Relax integrality","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use relax_integrality to remove any integrality constraints from the model, such as integer and binary restrictions on variables. relax_integrality returns a function that can be later called with zero arguments to re-add the removed constraints:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model();\n\njulia> @variable(model, x, Int)\nx\n\njulia> num_constraints(model, VariableRef, MOI.Integer)\n1\n\njulia> undo = relax_integrality(model);\n\njulia> num_constraints(model, VariableRef, MOI.Integer)\n0\n\njulia> undo()\n\njulia> num_constraints(model, VariableRef, MOI.Integer)\n1","category":"page"},{"location":"manual/models/#Switching-optimizer-for-the-relaxed-problem","page":"Models","title":"Switching optimizer for the relaxed problem","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"A common reason for relaxing integrality is to compute dual variables of the relaxed problem. However, some mixed-integer linear solvers (for example, Cbc) do not return dual solutions, even if the problem does not have integrality restrictions.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Therefore, after relax_integrality you should call set_optimizer with a solver that does support dual solutions, such as Clp.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"For example, instead of:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"using JuMP, Cbc\nmodel = Model(Cbc.Optimizer)\n@variable(model, x, Int)\nundo = relax_integrality(model)\noptimize!(model)\nreduced_cost(x) # Errors","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"do:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"using JuMP, Cbc, Clp\nmodel = Model(Cbc.Optimizer)\n@variable(model, x, Int)\nundo = relax_integrality(model)\nset_optimizer(model, Clp.Optimizer)\noptimize!(model)\nreduced_cost(x) # Works","category":"page"},{"location":"manual/models/#Get-the-matrix-representation","page":"Models","title":"Get the matrix representation","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use lp_matrix_data to return a data structure that represents the matrix form of a linear program.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> begin\n model = Model()\n @variable(model, x >= 1, Bin)\n @variable(model, 2 <= y)\n @variable(model, 3 <= z <= 4, Int)\n @constraint(model, x == 5)\n @constraint(model, 2x + 3y <= 6)\n @constraint(model, -4y >= 5z + 7)\n @constraint(model, -1 <= x + y <= 2)\n @objective(model, Max, 1 + 2x)\n end;\n\njulia> data = lp_matrix_data(model);\n\njulia> data.A\n4×3 SparseArrays.SparseMatrixCSC{Float64, Int64} with 7 stored entries:\n 1.0 ⋅ ⋅\n ⋅ -4.0 -5.0\n 2.0 3.0 ⋅\n 1.0 1.0 ⋅\n\njulia> data.b_lower\n4-element Vector{Float64}:\n 5.0\n 7.0\n -Inf\n -1.0\n\njulia> data.b_upper\n4-element Vector{Float64}:\n 5.0\n Inf\n 6.0\n 2.0\n\njulia> data.x_lower\n3-element Vector{Float64}:\n 1.0\n 2.0\n 3.0\n\njulia> data.x_upper\n3-element Vector{Float64}:\n Inf\n Inf\n 4.0\n\njulia> data.c\n3-element Vector{Float64}:\n 2.0\n 0.0\n 0.0\n\njulia> data.c_offset\n1.0\n\njulia> data.sense\nMAX_SENSE::OptimizationSense = 1\n\njulia> data.integers\n1-element Vector{Int64}:\n 3\n\njulia> data.binaries\n1-element Vector{Int64}:\n 1","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"warning: Warning\nlp_matrix_data is intentionally limited in the types of problems that it supports and the structure of the matrices it outputs. It is mainly intended as a pedagogical and debugging tool. It should not be used to interface solvers, see Implementing a solver interface instead.","category":"page"},{"location":"manual/models/#Backends","page":"Models","title":"Backends","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"info: Info\nThis section discusses advanced features of JuMP. For new users, you may want to skip this section. You don't need to know how JuMP manages problems behind the scenes to create and solve JuMP models.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A JuMP Model is a thin layer around a backend of type MOI.ModelLike that stores the optimization problem and acts as the optimization solver.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"However, if you construct a model like Model(HiGHS.Optimizer), the backend is not a HiGHS.Optimizer, but a more complicated object.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"From JuMP, the MOI backend can be accessed using the backend function. Let's see what the backend of a JuMP Model is:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer);\n\njulia> b = backend(model)\nMOIU.CachingOptimizer\n├ state: EMPTY_OPTIMIZER\n├ mode: AUTOMATIC\n├ model_cache: MOIU.UniversalFallback{MOIU.Model{Float64}}\n│ ├ ObjectiveSense: FEASIBILITY_SENSE\n│ ├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}\n│ ├ NumberOfVariables: 0\n│ └ NumberOfConstraints: 0\n└ optimizer: MOIB.LazyBridgeOptimizer{HiGHS.Optimizer}\n ├ Variable bridges: none\n ├ Constraint bridges: none\n ├ Objective bridges: none\n └ model: A HiGHS model with 0 columns and 0 rows.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Uh oh. Even though we passed a HiGHS.Optimizer, the backend is a much more complicated object.","category":"page"},{"location":"manual/models/#CachingOptimizer","page":"Models","title":"CachingOptimizer","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"A MOIU.CachingOptimizer is a layer that abstracts the difference between solvers that support incremental modification (for example, they support adding variables one-by-one), and solvers that require the entire problem in a single API call (for example, they only accept the A, b and c matrices of a linear program).","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"It has two parts:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A cache, where the model can be built and modified incrementally\njulia> b.model_cache\nMOIU.UniversalFallback{MOIU.Model{Float64}}\n├ ObjectiveSense: FEASIBILITY_SENSE\n├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}\n├ NumberOfVariables: 0\n└ NumberOfConstraints: 0\nAn optimizer, which is used to solve the problem\njulia> b.optimizer\nMOIB.LazyBridgeOptimizer{HiGHS.Optimizer}\n├ Variable bridges: none\n├ Constraint bridges: none\n├ Objective bridges: none\n└ model: A HiGHS model with 0 columns and 0 rows.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"info: Info\nThe LazyBridgeOptimizer section explains what a LazyBridgeOptimizer is.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"The CachingOptimizer has logic to decide when to copy the problem from the cache to the optimizer, and when it can efficiently update the optimizer in-place.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A CachingOptimizer may be in one of three possible states:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"NO_OPTIMIZER: The CachingOptimizer does not have any optimizer.\nEMPTY_OPTIMIZER: The CachingOptimizer has an empty optimizer, and it is not synchronized with the cached model.\nATTACHED_OPTIMIZER: The CachingOptimizer has an optimizer, and it is synchronized with the cached model.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A CachingOptimizer has two modes of operation:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"AUTOMATIC: The CachingOptimizer changes its state when necessary. For example, optimize! will automatically call attach_optimizer (an optimizer must have been previously set). Attempting to add a constraint or perform a modification not supported by the optimizer results in a drop to EMPTY_OPTIMIZER mode.\nMANUAL: The user must change the state of the CachingOptimizer using MOIU.reset_optimizer(::JuMP.Model), MOIU.drop_optimizer(::JuMP.Model), and MOIU.attach_optimizer(::JuMP.Model). Attempting to perform an operation in the incorrect state results in an error.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"By default Model will create a CachingOptimizer in AUTOMATIC mode.","category":"page"},{"location":"manual/models/#LazyBridgeOptimizer","page":"Models","title":"LazyBridgeOptimizer","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"The second layer that JuMP applies automatically is a MOI.Bridges.LazyBridgeOptimizer. A MOI.Bridges.LazyBridgeOptimizer is an MOI layer that attempts to transform the problem from the formulation provided by the user into an equivalent problem supported by the solver. This may involve adding new variables and constraints to the optimizer. The transformations are selected from a set of known recipes called bridges.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A common example of a bridge is one that splits an interval constraint like @constraint(model, 1 <= x + y <= 2) into two constraints, @constraint(model, x + y >= 1) and @constraint(model, x + y <= 2).","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Use the add_bridges = false keyword to remove the bridging layer:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = Model(HiGHS.Optimizer; add_bridges = false)\nA JuMP Model\n├ solver: HiGHS\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none\n\njulia> backend(model)\nMOIU.CachingOptimizer\n├ state: EMPTY_OPTIMIZER\n├ mode: AUTOMATIC\n├ model_cache: MOIU.UniversalFallback{MOIU.Model{Float64}}\n│ ├ ObjectiveSense: FEASIBILITY_SENSE\n│ ├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}\n│ ├ NumberOfVariables: 0\n│ └ NumberOfConstraints: 0\n└ optimizer: A HiGHS model with 0 columns and 0 rows.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"Bridges can be added and removed from a MOI.Bridges.LazyBridgeOptimizer using add_bridge and remove_bridge. Use print_active_bridges to see which bridges are used to reformulate the model. Read the Example: ellipsoid approximation tutorial for more details.","category":"page"},{"location":"manual/models/#Unsafe-backend","page":"Models","title":"Unsafe backend","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"In some advanced use-cases, it is necessary to work with the inner optimization model directly. To access this model, use unsafe_backend:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> backend(model)\nMOIU.CachingOptimizer\n├ state: EMPTY_OPTIMIZER\n├ mode: AUTOMATIC\n├ model_cache: MOIU.UniversalFallback{MOIU.Model{Float64}}\n│ ├ ObjectiveSense: FEASIBILITY_SENSE\n│ ├ ObjectiveFunctionType: MOI.ScalarAffineFunction{Float64}\n│ ├ NumberOfVariables: 0\n│ └ NumberOfConstraints: 0\n└ optimizer: MOIB.LazyBridgeOptimizer{HiGHS.Optimizer}\n ├ Variable bridges: none\n ├ Constraint bridges: none\n ├ Objective bridges: none\n └ model: A HiGHS model with 0 columns and 0 rows.\n\njulia> unsafe_backend(model)\nA HiGHS model with 0 columns and 0 rows.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"warning: Warning\nbackend and unsafe_backend are advanced routines. Read their docstrings to understand the caveats of their usage, and only call them if you wish to access low-level solver-specific functions.","category":"page"},{"location":"manual/models/#Direct-mode","page":"Models","title":"Direct mode","text":"","category":"section"},{"location":"manual/models/","page":"Models","title":"Models","text":"Using a CachingOptimizer results in an additional copy of the model being stored by JuMP in the .model_cache field. To avoid this overhead, create a JuMP model using direct_model:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = direct_model(HiGHS.Optimizer())\nA JuMP Model\n├ mode: DIRECT\n├ solver: HiGHS\n├ objective_sense: FEASIBILITY_SENSE\n├ num_variables: 0\n├ num_constraints: 0\n└ Names registered in the model: none","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"warning: Warning\nSolvers that do not support incremental modification do not support direct_model. An error will be thrown, telling you to use a CachingOptimizer instead.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"The benefit of using direct_model is that there are no extra layers (for example, Cachingoptimizer or LazyBridgeOptimizer) between model and the provided optimizer:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> backend(model)\nA HiGHS model with 0 columns and 0 rows.","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"A downside of direct mode is that there is no bridging layer. Therefore, only constraints which are natively supported by the solver are supported. For example, HiGHS.jl does not implement quadratic constraints:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"julia> model = direct_model(HiGHS.Optimizer());\n\njulia> set_silent(model)\n\njulia> @variable(model, x[1:2]);\n\njulia> @constraint(model, x[1]^2 + x[2]^2 <= 2)\nERROR: Constraints of type MathOptInterface.ScalarQuadraticFunction{Float64}-in-MathOptInterface.LessThan{Float64} are not supported by the solver.\n\nIf you expected the solver to support your problem, you may have an error in your formulation. Otherwise, consider using a different solver.\n\nThe list of available solvers, along with the problem types they support, is available at https://jump.dev/JuMP.jl/stable/installation/#Supported-solvers.\nStacktrace:","category":"page"},{"location":"manual/models/","page":"Models","title":"Models","text":"warning: Warning\nAnother downside of direct mode is that the behavior of querying solution information after modifying the problem is solver-specific. This can lead to errors, or the solver silently returning an incorrect value. See OptimizeNotCalled errors for more information.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/background/duality.md\"","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/background/duality/#Duality","page":"Duality","title":"Duality","text":"","category":"section"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Conic duality is the starting point for MOI's duality conventions. When all functions are affine (or coordinate projections), and all constraint sets are closed convex cones, the model may be called a conic optimization problem.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"For a minimization problem in geometric conic form, the primal is:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min_x in mathbbR^n a_0^T x + b_0\n\n textst A_i x + b_i in mathcalC_i i = 1 ldots m\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"and the dual is a maximization problem in standard conic form:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max_y_1 ldots y_m -sum_i=1^m b_i^T y_i + b_0\n\n textst a_0 - sum_i=1^m A_i^T y_i = 0\n\n y_i in mathcalC_i^* i = 1 ldots m\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"where each mathcalC_i is a closed convex cone and mathcalC_i^* is its dual cone.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"For a maximization problem in geometric conic form, the primal is:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max_x in mathbbR^n a_0^T x + b_0\n\n textst A_i x + b_i in mathcalC_i i = 1 ldots m\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"and the dual is a minimization problem in standard conic form:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min_y_1 ldots y_m sum_i=1^m b_i^T y_i + b_0\n\n textst a_0 + sum_i=1^m A_i^T y_i = 0\n\n y_i in mathcalC_i^* i = 1 ldots m\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"A linear inequality constraint a^T x + b ge c is equivalent to a^T x + b - c in mathbbR_+, and a^T x + b le c is equivalent to a^T x + b - c in mathbbR_-. Variable-wise constraints are affine constraints with the appropriate identity mapping in place of A_i.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"For the special case of minimization LPs, the MOI primal form can be stated as:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min_x in mathbbR^n a_0^T x + b_0\n\n textst\nA_1 x ge b_1\n A_2 x le b_2\n A_3 x = b_3\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"By applying the stated transformations to conic form, taking the dual, and transforming back into linear inequality form, one obtains the following dual:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max_y_1y_2y_3 b_1^Ty_1 + b_2^Ty_2 + b_3^Ty_3 + b_0\n\n textst\nA_1^Ty_1 + A_2^Ty_2 + A_3^Ty_3 = a_0\n y_1 ge 0\n y_2 le 0\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"For maximization LPs, the MOI primal form can be stated as:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max_x in mathbbR^n a_0^T x + b_0\n\n textst\nA_1 x ge b_1\n A_2 x le b_2\n A_3 x = b_3\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"and similarly, the dual is:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min_y_1y_2y_3 -b_1^Ty_1 - b_2^Ty_2 - b_3^Ty_3 + b_0\n\n textst\nA_1^Ty_1 + A_2^Ty_2 + A_3^Ty_3 = -a_0\n y_1 ge 0\n y_2 le 0\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"warning: Warning\nFor the LP case, the signs of the feasible dual variables depend only on the sense of the corresponding primal inequality and not on the objective sense.","category":"page"},{"location":"moi/background/duality/#Duality-and-scalar-product","page":"Duality","title":"Duality and scalar product","text":"","category":"section"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"The scalar product is different from the canonical one for the sets PositiveSemidefiniteConeTriangle, LogDetConeTriangle, RootDetConeTriangle.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"If the set C_i of the section Duality is one of these three cones, then the rows of the matrix A_i corresponding to off-diagonal entries are twice the value of the coefficients field in the VectorAffineFunction for the corresponding rows. See PositiveSemidefiniteConeTriangle for details.","category":"page"},{"location":"moi/background/duality/#Dual-for-problems-with-quadratic-functions","page":"Duality","title":"Dual for problems with quadratic functions","text":"","category":"section"},{"location":"moi/background/duality/#Quadratic-Programs-(QPs)","page":"Duality","title":"Quadratic Programs (QPs)","text":"","category":"section"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"For quadratic programs with only affine conic constraints,","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign*\n min_x in mathbbR^n frac12x^TQ_0x + a_0^T x + b_0\n\n textst A_i x + b_i in mathcalC_i i = 1 ldots m\nendalign*","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"with cones mathcalC_i subseteq mathbbR^m_i for i = 1 ldots m, consider the Lagrangian function","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"L(x y) = frac12x^TQ_0x + a_0^T x + b_0 - sum_i = 1^m y_i^T (A_i x + b_i)","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Let z(y) denote sum_i = 1^m A_i^T y_i - a_0, the Lagrangian can be rewritten as","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"L(x y) = frac12x^TQ_0x - z(y)^T x + b_0 - sum_i = 1^m y_i^T b_i","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"The condition nabla_x L(x y) = 0 gives","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"0 = nabla_x L(x y) = Q_0x + a_0 - sum_i = 1^m y_i^T b_i","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"which gives Q_0x = z(y). This allows to obtain that","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"min_x in mathbbR^n L(x y) = -frac12x^TQ_0x + b_0 - sum_i = 1^m y_i^T b_i","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"so the dual problem is","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"max_y_i in mathcalC_i^* min_x in mathbbR^n -frac12x^TQ_0x + b_0 - sum_i = 1^m y_i^T b_i","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"If Q_0 is invertible, we have x = Q_0^-1z(y) hence","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"min_x in mathbbR^n L(x y) = -frac12z(y)^TQ_0^-1z(y) + b_0 - sum_i = 1^m y_i^T b_i","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"so the dual problem is","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"max_y_i in mathcalC_i^* -frac12z(y)^TQ_0^-1z(y) + b_0 - sum_i = 1^m y_i^T b_i","category":"page"},{"location":"moi/background/duality/#Quadratically-Constrained-Quadratic-Programs-(QCQPs)","page":"Duality","title":"Quadratically Constrained Quadratic Programs (QCQPs)","text":"","category":"section"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Given a problem with both quadratic function and quadratic objectives:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign*\n min_x in mathbbR^n frac12x^TQ_0x + a_0^T x + b_0\n\n textst frac12x^TQ_ix + a_i^T x + b_i in mathcalC_i i = 1 ldots m\nendalign*","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"with cones mathcalC_i subseteq mathbbR for i = 1 ldots m, consider the Lagrangian function","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"L(x y) = frac12x^TQ_0x + a_0^T x + b_0 - sum_i = 1^m y_i (frac12x^TQ_ix + a_i^T x + b_i)","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"A pair of primal-dual variables (x^star y^star) is optimal if","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"x^star is a minimizer of\nmin_x in mathbbR^n L(x y^star)\nThat is,\n0 = nabla_x L(x y^star) = Q_0x + a_0 - sum_i = 1^m y_i^star (Q_ix + a_i)\nand y^star is a maximizer of\nmax_y_i in mathcalC_i^* L(x^star y)\nThat is, for all i = 1 ldots m, frac12x^TQ_ix + a_i^T x + b_i is either zero or in the normal cone of mathcalC_i^* at y^star. For instance, if mathcalC_i is z in mathbbR z le 0 , this means that if frac12x^TQ_ix + a_i^T x + b_i is nonzero at x^star then y_i^star = 0. This is the classical complementary slackness condition.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"If mathcalC_i is a vector set, the discussion remains valid with y_i(frac12x^TQ_ix + a_i^T x + b_i) replaced with the scalar product between y_i and the vector of scalar-valued quadratic functions.","category":"page"},{"location":"moi/background/duality/#Dual-for-square-semidefinite-matrices","page":"Duality","title":"Dual for square semidefinite matrices","text":"","category":"section"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"The set PositiveSemidefiniteConeTriangle is a self-dual. That is, querying ConstraintDual of a PositiveSemidefiniteConeTriangle constraint returns a vector that is itself a member of PositiveSemidefiniteConeTriangle.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"However, the dual of PositiveSemidefiniteConeSquare is not so straight forward. This section explains the duality convention we use, and how it is derived.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"info: Info\nIf you have a PositiveSemidefiniteConeSquare constraint, the result matrix A from ConstraintDual is not positive semidefinite. However, A + A^top is positive semidefinite.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Let mathcalS_+ be the cone of symmetric semidefinite matrices in the fracn(n+1)2 dimensional space of symmetric mathbbR^n times n matrices. That is, mathcalS_+ is the set PositiveSemidefiniteConeTriangle. It is well known that mathcalS_+ is a self-dual proper cone.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Let mathcalP_+ be the cone of symmetric semidefinite matrices in the n^2 dimensional space of mathbbR^n times n matrices. That is mathcalP_+ is the set PositiveSemidefiniteConeSquare.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"In addition, let mathcalD_+ be the cone of matrices A such that A+A^top in mathcalP_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"mathcalP_+ is not proper because it is not solid (it is not n^2 dimensional), so it is not necessarily true that mathcalP_+^** = mathcalP_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"However, this is the case, because we will show that mathcalP_+^* = mathcalD_+ and mathcalD_+^* = mathcalP_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"First, let us see why mathcalP_+^* = mathcalD_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"If B is symmetric, then","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"langle AB rangle = langle A^top B^top rangle = langle A^top Brangle","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"so","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"2langle A B rangle = langle A B rangle + langle A^top B rangle = langle A + A^top B rangle","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Therefore, langle ABrangle ge 0 for all B in mathcalP_+ if and only if langle A+A^topBrangle ge 0 for all B in mathcalP_+. Since A+A^top is symmetric, and we know that mathcalS_+ is self-dual, we have shown that mathcalP_+^* is the set of matrices A such that A+A^top in mathcalP_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Second, let us see why mathcalD_+^* = mathcalP_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Since A in mathcalD_+ implies that A^top in mathcalD_+, B in mathcalD_+^* means that langle A+A^topBrangle ge 0 for all A in mathcalD_+, and hence B in mathcalP_+.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"To see why it should be symmetric, simply notice that if B_ij B_ji, then langle ABrangle can be made arbitrarily small by setting A_ij = A_ij + s and A_ji = A_ji - s, with s arbitrarily large, and A stays in mathcalD_+ because A+A^top does not change.","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"Typically, the primal/dual pair for semidefinite programs is presented as:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min langle C X rangle \ntextst langle A_k Xrangle = b_k forall k \n X in mathcalS_+\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"with the dual","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max sum_k b_k y_k \ntextst C - sum A_k y_k in mathcalS_+\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"If we allow A_k to be non-symmetric, we should instead use:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min langle C X rangle \ntextst langle A_k Xrangle = b_k forall k \n X in mathcalD_+\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"with the dual","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max sum b_k y_k \ntextst C - sum A_k y_k in mathcalP_+\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"This is implemented as:","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n min langle C Z rangle + langle C - C^top S rangle \ntextst langle A_k Z rangle + langle A_k - A_k^top S rangle = b_k forall k \n Z in mathcalS_+\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"with the dual","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"beginalign\n max sum b_k y_k \ntextst C+C^top - sum (A_k+A_k^top) y_k in mathcalS_+ \n C-C^top - sum(A_k-A_k^top) y_k = 0\nendalign","category":"page"},{"location":"moi/background/duality/","page":"Duality","title":"Duality","text":"and we recover Z = X + X^top.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"EditURL = \"tips_and_tricks.jl\"","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Modeling-with-cones","page":"Modeling with cones","title":"Modeling with cones","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"This tutorial was originally contributed by Arpit Bhatia.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The purpose of this tutorial is to show how you can model various common problems using conic optimization.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"tip: Tip\nA good resource for learning more about functions which can be modeled using cones is the MOSEK Modeling Cookbook.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Required-packages","page":"Modeling with cones","title":"Required packages","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"using JuMP\nimport LinearAlgebra\nimport MathOptInterface as MOI\nimport SCS\n\nimport Random # hide\nRandom.seed!(1234) # hide\nnothing # hide","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Background-theory","page":"Modeling with cones","title":"Background theory","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"A subset C of a vector space V is a cone if forall x in C and positive scalars lambda 0, the product lambda x in C.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"A cone C is a convex cone if lambda x + (1 - lambda) y in C, for any lambda in 0 1, and any x y in C.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"Conic programming problems are convex optimization problems in which a convex function is minimized over the intersection of an affine subspace and a convex cone. An example of a conic-form minimization problems, in the primal form is:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"beginaligned\n min_x in mathbbR^n a_0^T x + b_0 \n textst A_i x + b_i in mathcalC_i i = 1 ldots m\nendaligned","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The corresponding dual problem is:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"beginaligned\n max_y_1 ldots y_m -sum_i=1^m b_i^T y_i + b_0 \n textst a_0 - sum_i=1^m A_i^T y_i = 0 \n y_i in mathcalC_i^* i = 1 ldots m\nendaligned","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"where each mathcalC_i is a closed convex cone and mathcalC_i^* is its dual cone.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Second-Order-Cone","page":"Modeling with cones","title":"Second-Order Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The SecondOrderCone (or Lorentz Cone) of dimension n is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K_soc = (t x) in mathbbR^n t ge x_2 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"It is most commonly used to represent the L2-norm of the vector x:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, x[1:3])\n@variable(model, t)\n@constraint(model, sum(x) == 1)\n@constraint(model, [t; x] in SecondOrderCone())\n@objective(model, Min, t)\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(t), value.(x)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Rotated-Second-Order-Cone","page":"Modeling with cones","title":"Rotated Second-Order Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"A Second-Order Cone rotated by pi4 in the (x_1x_2) plane is called a RotatedSecondOrderCone. It is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K_rsoc = (tux) in mathbbR^n 2tu ge x_2^2 tu ge 0 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"When u = 0.5, it represents the sum of squares of a vector x:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"data = [1.0, 2.0, 3.0, 4.0]\ntarget = [0.45, 1.04, 1.51, 1.97]\nmodel = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, θ)\n@variable(model, t)\n@expression(model, residuals, θ * data .- target)\n@constraint(model, [t; 0.5; residuals] in RotatedSecondOrderCone())\n@objective(model, Min, t)\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(θ), value(t)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Exponential-Cone","page":"Modeling with cones","title":"Exponential Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.ExponentialCone is a set of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K_exp = (xyz) in mathbbR^3 y exp (xy) le z y 0 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"It can be used to model problems involving log and exp.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Exponential","page":"Modeling with cones","title":"Exponential","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"To model exp(x) le z, use (x, 1, z):","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, x == 1.5)\n@variable(model, z)\n@objective(model, Min, z)\n@constraint(model, [x, 1, z] in MOI.ExponentialCone())\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(z), exp(1.5)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Logarithm","page":"Modeling with cones","title":"Logarithm","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"To model x le log(z), use (x, 1, z):","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, x)\n@variable(model, z == 1.5)\n@objective(model, Max, x)\n@constraint(model, [x, 1, z] in MOI.ExponentialCone())\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(x), log(1.5)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Log-sum-exp","page":"Modeling with cones","title":"Log-sum-exp","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"To model t ge logleft(sum e^x_iright), use:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"N = 3\nx0 = rand(N)\nmodel = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, x[i = 1:N] == x0[i])\n@variable(model, t)\n@objective(model, Min, t)\n@variable(model, u[1:N])\n@constraint(model, sum(u) <= 1)\n@constraint(model, [i = 1:N], [x[i] - t, 1, u[i]] in MOI.ExponentialCone())\noptimize!(model)\nvalue(t), log(sum(exp.(x0)))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Entropy","page":"Modeling with cones","title":"Entropy","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The entropy maximization problem consists of maximizing the entropy function, H(x) = -xlogx subject to linear inequality constraints.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"beginaligned\n max - sum_i=1^n x_i log x_i \n textst mathbf1^top x = 1 \n Ax leq b\nendaligned","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"We can model this problem using an exponential cone by using the following transformation:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"tleq -xlogx iff tleq xlog(1x) iff (t x 1) in K_exp","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"Thus, our problem becomes,","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"beginaligned\n max 1^Tt \n textst Ax leq b \n 1^T x = 1 \n (t_i x_i 1) in K_exp forall i = 1 ldots n \nendaligned","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"m, n = 10, 15\nA, b = randn(m, n), rand(m, 1)\nmodel = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t[1:n])\n@variable(model, x[1:n])\n@objective(model, Max, sum(t))\n@constraint(model, sum(x) == 1)\n@constraint(model, A * x .<= b)\n@constraint(model, [i = 1:n], [t[i], x[i], 1] in MOI.ExponentialCone())\noptimize!(model)\n@assert is_solved_and_feasible(model)\nobjective_value(model)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.ExponentialCone has a dual, the MOI.DualExponentialCone, that offers an alternative formulation that can be more efficient for some formulations.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"There is also the MOI.RelativeEntropyCone for explicitly encoding the relative entropy function","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@variable(model, x[1:n])\n@objective(model, Max, -t)\n@constraint(model, sum(x) == 1)\n@constraint(model, A * x .<= b)\n@constraint(model, [t; ones(n); x] in MOI.RelativeEntropyCone(2n + 1))\noptimize!(model)\n@assert is_solved_and_feasible(model)\nobjective_value(model)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#PowerCone","page":"Modeling with cones","title":"PowerCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.PowerCone is a three-dimensional set parameterized by a scalar value α. It has the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K_p = (xyz) in mathbbR^3 x^alpha y^1-alpha ge z x ge 0 y ge 0 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The power cone permits a number of reformulations. For example, when p 1, we can model t ge x^p using the power cone (t 1 x) with alpha = 1 p. Thus, to model t ge x^3 with x ge 0","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@variable(model, x >= 1.5)\n@constraint(model, [t, 1, x] in MOI.PowerCone(1 / 3))\n@objective(model, Min, t)\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(t), value(x)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.PowerCone has a dual, the MOI.DualPowerCone, that offers an alternative formulation that can be more efficient for some formulations.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#P-Norm","page":"Modeling with cones","title":"P-Norm","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The p-norm x_p = left(sumlimits_i x_i^pright)^frac1p can be modeled using MOI.PowerCones. See the Mosek Modeling Cookbook for the derivation.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"function p_norm(x::Vector, p)\n N = length(x)\n model = Model(SCS.Optimizer)\n set_silent(model)\n @variable(model, r[1:N])\n @variable(model, t)\n @constraint(model, [i = 1:N], [r[i], t, x[i]] in MOI.PowerCone(1 / p))\n @constraint(model, sum(r) == t)\n @objective(model, Min, t)\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return value(t)\nend\n\nx = rand(5);\nLinearAlgebra.norm(x, 4), p_norm(x, 4)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Positive-Semidefinite-Cone","page":"Modeling with cones","title":"Positive Semidefinite Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The set of positive semidefinite matrices (PSD) of dimension n form a cone in mathbbR^n. We write this set mathematically as:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"mathcalS_+^n = X in mathcalS^n mid z^T X z geq 0 forall zin mathbbR^n ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"A PSD cone is represented in JuMP using the MOI sets PositiveSemidefiniteConeTriangle (for upper triangle of a PSD matrix) and PositiveSemidefiniteConeSquare (for a complete PSD matrix). However, it is preferable to use the PSDCone shortcut as illustrated below.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Example:-largest-eigenvalue-of-a-symmetric-matrix","page":"Modeling with cones","title":"Example: largest eigenvalue of a symmetric matrix","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"Suppose A has eigenvalues lambda_1 geq lambda_2 ldots geq lambda_n. Then the matrix t I-A has eigenvalues t-lambda_1 t-lambda_2 ldots t-lambda_n. Note that t I-A is PSD exactly when all these eigenvalues are non-negative, and this happens for values t geq lambda_1. Thus, we can model the problem of finding the largest eigenvalue of a symmetric matrix as:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"beginaligned\nlambda_1 = min t \ntext st t I-A succeq 0\nendaligned","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"A = [3 2 4; 2 0 2; 4 2 3]\nI = Matrix{Float64}(LinearAlgebra.I, 3, 3)\nmodel = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@objective(model, Min, t)\n@constraint(model, t .* I - A in PSDCone())\noptimize!(model)\n@assert is_solved_and_feasible(model)\nobjective_value(model)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#GeometricMeanCone","page":"Modeling with cones","title":"GeometricMeanCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.GeometricMeanCone is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K_geo = (t x) in mathbbR^n x ge 0 t le sqrtn-1x_1 x_2 cdots x_n-1 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, x[1:4])\n@variable(model, t)\n@constraint(model, sum(x) == 1)\n@constraint(model, [t; x] in MOI.GeometricMeanCone(5))\noptimize!(model)\nvalue(t), value.(x)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#RootDetCone","page":"Modeling with cones","title":"RootDetCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.RootDetConeSquare is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K = (t X) in mathbbR^1+d^2 t le det(X)^frac1d ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@variable(model, X[1:2, 1:2])\n@objective(model, Max, t)\n@constraint(model, [t; vec(X)] in MOI.RootDetConeSquare(2))\n@constraint(model, X .== [2 1; 1 3])\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(t), sqrt(LinearAlgebra.det(value.(X)))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"If X is symmetric, then you can use MOI.RootDetConeTriangle instead. This can be more efficient because the solver does not need to add additional constraints to ensure X is symmetric.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"When forming the function, use triangle_vec to obtain the column-wise upper triangle of the matrix as a vector in the order that JuMP requires.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@variable(model, X[1:2, 1:2], Symmetric)\n@objective(model, Max, t)\n@constraint(model, [t; triangle_vec(X)] in MOI.RootDetConeTriangle(2))\n@constraint(model, X .== [2 1; 1 3])\noptimize!(model)\nvalue(t), sqrt(LinearAlgebra.det(value.(X)))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#LogDetCone","page":"Modeling with cones","title":"LogDetCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"The MOI.LogDetConeSquare is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"K = (t u X) in mathbbR^2+d^2 t le u log(det(X u)) ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@variable(model, u)\n@variable(model, X[1:2, 1:2])\n@objective(model, Max, t)\n@constraint(model, [t; u; vec(X)] in MOI.LogDetConeSquare(2))\n@constraint(model, X .== [2 1; 1 3])\n@constraint(model, u == 0.5)\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(t), 0.5 * log(LinearAlgebra.det(value.(X) ./ 0.5))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"If X is symmetric, then you can use MOI.LogDetConeTriangle instead. This can be more efficient because the solver does not need to add additional constraints to ensure X is symmetric.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"When forming the function, use triangle_vec to obtain the column-wise upper triangle of the matrix as a vector in the order that JuMP requires.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"model = Model(SCS.Optimizer)\nset_silent(model)\n@variable(model, t)\n@variable(model, u)\n@variable(model, X[1:2, 1:2], Symmetric)\n@objective(model, Max, t)\n@constraint(model, [t; u; triangle_vec(X)] in MOI.LogDetConeTriangle(2))\n@constraint(model, X .== [2 1; 1 3])\n@constraint(model, u == 0.5)\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue(t), 0.5 * log(LinearAlgebra.det(value.(X) ./ 0.5))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Other-Cones-and-Functions","page":"Modeling with cones","title":"Other Cones and Functions","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Modeling with cones","title":"Modeling with cones","text":"For other cones supported by JuMP, check out the MathOptInterface Manual.","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"EditURL = \"https://github.com/jump-dev/BARON.jl/blob/v0.8.5/README.md\"","category":"page"},{"location":"packages/BARON/#BARON.jl","page":"jump-dev/BARON.jl","title":"BARON.jl","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"(Image: Build Status) (Image: codecov)","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"BARON.jl is a wrapper for BARON by The Optimization Firm.","category":"page"},{"location":"packages/BARON/#Affiliation","page":"jump-dev/BARON.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"This wrapper is maintained by the JuMP community and is not officially supported by The Optimization Firm.","category":"page"},{"location":"packages/BARON/#Getting-help","page":"jump-dev/BARON.jl","title":"Getting help","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"If you need help, please ask a question on the JuMP community forum.","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"If you have a reproducible example of a bug, please open a GitHub issue.","category":"page"},{"location":"packages/BARON/#License","page":"jump-dev/BARON.jl","title":"License","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"BARON.jl is licensed under the MIT License.","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"The underlying solver is a closed-source commercial product for which you must obtain a license from The Optimization Firm, although a small trial version is available for free.","category":"page"},{"location":"packages/BARON/#Installation","page":"jump-dev/BARON.jl","title":"Installation","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"First, download a copy of the BARON solver and unpack the executable in a location of your choosing.","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"Once installed, set the BARON_EXEC environment variable pointing to the BARON executable (full path, including file name as it differs across platforms), and run Pkg.add(\"BARON\"). For example:","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"ENV[\"BARON_EXEC\"] = \"/path/to/baron.exe\"\nusing Pkg\nPkg.add(\"BARON\")","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"The baronlice.txt license file should be placed in the same directory as the BARON executable, or in your current working directory.","category":"page"},{"location":"packages/BARON/#Use-with-JuMP","page":"jump-dev/BARON.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"using JuMP, BARON\nmodel = Model(BARON.Optimizer)","category":"page"},{"location":"packages/BARON/#MathOptInterface-API","page":"jump-dev/BARON.jl","title":"MathOptInterface API","text":"","category":"section"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"The BARON optimizer supports the following constraints and attributes.","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"List of supported objective functions:","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"MOI.ObjectiveFunction{MOI.ScalarAffineFunction{Float64}}\nMOI.ObjectiveFunction{MOI.ScalarQuadraticFunction{Float64}}\nMOI.ObjectiveFunction{MOI.ScalarNonlinearFunction}","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"List of supported variable types:","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"MOI.Reals","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"List of supported constraint types:","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"MOI.ScalarAffineFunction{Float64} in MOI.EqualTo{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.GreaterThan{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.Interval{Float64}\nMOI.ScalarAffineFunction{Float64} in MOI.LessThan{Float64}\nMOI.ScalarQuadraticFunction{Float64} in MOI.EqualTo{Float64}\nMOI.ScalarQuadraticFunction{Float64} in MOI.GreaterThan{Float64}\nMOI.ScalarQuadraticFunction{Float64} in MOI.Interval{Float64}\nMOI.ScalarQuadraticFunction{Float64} in MOI.LessThan{Float64}\nMOI.ScalarNonlinearFunction in MOI.EqualTo{Float64}\nMOI.ScalarNonlinearFunction in MOI.GreaterThan{Float64}\nMOI.ScalarNonlinearFunction in MOI.Interval{Float64}\nMOI.ScalarNonlinearFunction in MOI.LessThan{Float64}\nMOI.VariableIndex in MOI.EqualTo{Float64}\nMOI.VariableIndex in MOI.GreaterThan{Float64}\nMOI.VariableIndex in MOI.Integer\nMOI.VariableIndex in MOI.Interval{Float64}\nMOI.VariableIndex in MOI.LessThan{Float64}\nMOI.VariableIndex in MOI.ZeroOne","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"List of supported model attributes:","category":"page"},{"location":"packages/BARON/","page":"jump-dev/BARON.jl","title":"jump-dev/BARON.jl","text":"MOI.NLPBlock()\nMOI.ObjectiveSense()","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"EditURL = \"getting_started_with_julia.jl\"","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Getting-started-with-Julia","page":"Getting started with Julia","title":"Getting started with Julia","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Because JuMP is embedded in Julia, knowing some basic Julia is important before you start learning JuMP.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nThis tutorial is designed to provide a minimalist crash course in the basics of Julia. You can find resources that provide a more comprehensive introduction to Julia here.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Installing-Julia","page":"Getting started with Julia","title":"Installing Julia","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"To install Julia, download the latest stable release, then follow the platform specific install instructions.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nUnless you know otherwise, you probably want the 64-bit version.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Next, you need an IDE to develop in. VS Code is a popular choice, so follow these install instructions.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Julia can also be used with Jupyter notebooks or the reactive notebooks of Pluto.jl.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#The-Julia-REPL","page":"Getting started with Julia","title":"The Julia REPL","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"The main way of interacting with Julia is via its REPL (Read Evaluate Print Loop). To access the REPL, start the Julia executable to arrive at the julia> prompt, and then start coding:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"1 + 1","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"As your programs become larger, write a script as a text file, and then run that file using:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"julia> include(\"path/to/file.jl\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"warning: Warning\nBecause of Julia's startup latency, running scripts from the command line like the following is slow:$ julia path/to/file.jlUse the REPL or a notebook instead, and read The \"time-to-first-solve\" issue for more information.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Code-blocks-in-this-documentation","page":"Getting started with Julia","title":"Code blocks in this documentation","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"In this documentation you'll see a mix of code examples with and without the julia>.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"The Julia prompt is mostly used to demonstrate short code snippets, and the output is exactly what you will see if run from the REPL.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Blocks without the julia> can be copy-pasted into the REPL, but they are used because they enable richer output like plots or LaTeX to be displayed in the online and PDF versions of the documentation. If you run them from the REPL you may see different output.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Where-to-get-help","page":"Getting started with Julia","title":"Where to get help","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Read the documentation\nJuMP https://jump.dev/JuMP.jl/stable/\nJulia https://docs.julialang.org/en/v1/\nAsk (or browse) the Julia community forum: https://discourse.julialang.org\nIf the question is JuMP-related, ask in the Optimization (Mathematical) section, or tag your question with \"jump\"","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"To access the built-in help at the REPL, type ? to enter help-mode, followed by the name of the function to lookup:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"help?> print\nsearch: print println printstyled sprint isprint prevind parentindices precision escape_string\n\n print([io::IO], xs...)\n\n Write to io (or to the default output stream stdout if io is not given) a canonical\n (un-decorated) text representation. The representation used by print includes minimal formatting\n and tries to avoid Julia-specific details.\n\n print falls back to calling show, so most types should just define show. Define print if your\n type has a separate \"plain\" representation. For example, show displays strings with quotes, and\n print displays strings without quotes.\n\n string returns the output of print as a string.\n\n Examples\n ≡≡≡≡≡≡≡≡≡≡\n\n julia> print(\"Hello World!\")\n Hello World!\n julia> io = IOBuffer();\n\n julia> print(io, \"Hello\", ' ', :World!)\n\n julia> String(take!(io))\n \"Hello World!\"","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Numbers-and-arithmetic","page":"Getting started with Julia","title":"Numbers and arithmetic","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Since we want to solve optimization problems, we're going to be using a lot of math. Luckily, Julia is great for math, with all the usual operators:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"1 + 1\n1 - 2\n2 * 2\n4 / 5\n3^2","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Did you notice how Julia didn't print .0 after some of the numbers? Julia is a dynamic language, which means you never have to explicitly declare the type of a variable. However, in the background, Julia is giving each variable a type. Check the type of something using the typeof function:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"typeof(1)\ntypeof(1.0)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Here 1 is an Int64, which is an integer with 64 bits of precision, and 1.0 is a Float64, which is a floating point number with 64-bits of precision.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nIf you aren't familiar with floating point numbers, make sure to read the Floating point numbers section.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"We create complex numbers using im:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"x = 2 + 1im\nreal(x)\nimag(x)\ntypeof(x)\nx * (1 - 2im)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"info: Info\nThe curly brackets surround what we call the parameters of a type. You can read Complex{Int64} as \"a complex number, where the real and imaginary parts are represented by Int64.\" If we call typeof(1.0 + 2.0im) it will be Complex{Float64}, which a complex number with the parts represented by Float64.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"There are also some cool things like an irrational representation of π.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"π","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nTo make π (and most other Greek letters), type \\pi and then press [TAB].","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"typeof(π)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"However, if we do math with irrational numbers, they get converted to Float64:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"typeof(2π / 3)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Floating-point-numbers","page":"Getting started with Julia","title":"Floating point numbers","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"warning: Warning\nIf you aren't familiar with floating point numbers, make sure to read this section carefully.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A Float64 is a floating point approximation of a real number using 64-bits of information.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Because it is an approximation, things we know hold true in mathematics don't hold true in a computer. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"0.1 * 3 == 0.3","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A more complicated example is:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"sin(2π / 3) == √3 / 2","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nGet √ by typing \\sqrt then press [TAB].","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Let's see what the differences are:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"0.1 * 3 - 0.3\nsin(2π / 3) - √3 / 2","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"They are small, but not zero.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"One way of explaining this difference is to consider how we would write 1 / 3 and 2 / 3 using only four digits after the decimal point. We would write 1 / 3 as 0.3333, and 2 / 3 as 0.6667. So, despite the fact that 2 * (1 / 3) == 2 / 3, 2 * 0.3333 == 0.6666 != 0.6667.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Let's try that again using ≈ (\\approx + [TAB]) instead of ==:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"0.1 * 3 ≈ 0.3\nsin(2π / 3) ≈ √3 / 2","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"≈ is a clever way of calling the isapprox function:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"isapprox(sin(2π / 3), √3 / 2; atol = 1e-8)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"warning: Warning\nFloating point is the reason solvers use tolerances when they solve optimization models. A common mistake you're likely to make is checking whether a binary variable is 0 using value(z) == 0. Always remember to use something like isapprox when comparing floating point numbers.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Note that isapprox will always return false if one of the number being compared is 0 and atol is zero (its default value).","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"1e-300 ≈ 0.0","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"so always set a nonzero value of atol if one of the arguments can be zero.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"isapprox(1e-9, 0.0; atol = 1e-8)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nGurobi has a good series of articles on the implications of floating point in optimization if you want to read more.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"If you aren't careful, floating point arithmetic can throw up all manner of issues. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"1 + 1e-16 == 1","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"It even turns out that floating point numbers aren't associative:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"(1 + 1e-16) - 1e-16 == 1 + (1e-16 - 1e-16)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"It's important to note that this issue isn't Julia-specific. It happens in every programming language (try it out in Python).","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Vectors,-matrices,-and-arrays","page":"Getting started with Julia","title":"Vectors, matrices, and arrays","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Similar to MATLAB, Julia has native support for vectors, matrices and tensors; all of which are represented by arrays of different dimensions. Vectors are constructed by comma-separated elements surrounded by square brackets:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"b = [5, 6]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Matrices can be constructed with spaces separating the columns, and semicolons separating the rows:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A = [1.0 2.0; 3.0 4.0]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"We can do linear algebra:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"x = A \\ b","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"info: Info\nHere is floating point at work again; x is approximately [-4, 4.5].","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A * x\nA * x ≈ b","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Note that when multiplying vectors and matrices, dimensions matter. For example, you can't multiply a vector by a vector:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"try #hide\n b * b\ncatch err #hide\n showerror(stderr, err) #hide\nend #hide","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"But multiplying transposes works:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"b' * b\nb * b'","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Other-common-types","page":"Getting started with Julia","title":"Other common types","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/#Comments","page":"Getting started with Julia","title":"Comments","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Although not technically a type, code comments begin with the # character:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"1 + 1 # This is a comment","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Multiline comments begin with #= and end with =#:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"#=\nHere is a\nmultiline comment\n=#","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Comments can even be nested inside expressions. This is sometimes helpful when documenting inputs to functions:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"isapprox(\n sin(π),\n 0.0;\n #= We need an explicit atol here because we are comparing with 0 =#\n atol = 0.001,\n)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Strings","page":"Getting started with Julia","title":"Strings","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Double quotes are used for strings:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"typeof(\"This is Julia\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Unicode is fine in strings:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"typeof(\"π is about 3.1415\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Use println to print a string:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"println(\"Hello, World!\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Use $() to interpolate values into a string:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"x = 123\nprintln(\"The value of x is: $(x)\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Use triple-quotes for multiline strings:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"s = \"\"\"\nHere is\na\nmultiline string\n\"\"\"\n\nprintln(s)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Symbols","page":"Getting started with Julia","title":"Symbols","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Julia Symbols are a data structure from the compiler that represent Julia identifiers (that is, variable names).","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"println(\"The value of x is: $(eval(:x))\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"warning: Warning\nWe used eval here to demonstrate how Julia links Symbols to variables. However, avoid calling eval in your code. It is usually a sign that your code is doing something that could be more easily achieved a different way. The Community Forum is a good place to ask for advice on alternative approaches.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"typeof(:x)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"You can think of a Symbol as a String that takes up less memory, and that can't be modified.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Convert between String and Symbol using their constructors:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"String(:abc)\nSymbol(\"abc\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nSymbols are often (ab)used to stand in for a String or an Enum, when one of the latter is likely a better choice. The JuMP Style guide recommends reserving Symbols for identifiers. See @enum vs. Symbol for more.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Tuples","page":"Getting started with Julia","title":"Tuples","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Julia makes extensive use of a simple data structure called Tuples. Tuples are immutable collections of values. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"t = (\"hello\", 1.2, :foo)\ntypeof(t)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Tuples can be accessed by index, similar to arrays:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"t[2]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"And they can be \"unpacked\" like so:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"a, b, c = t\nb","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"The values can also be given names, which is a convenient way of making light-weight data structures.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"t = (word = \"hello\", num = 1.2, sym = :foo)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Values can be accessed using dot syntax:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"t.word","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Dictionaries","page":"Getting started with Julia","title":"Dictionaries","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Similar to Python, Julia has native support for dictionaries. Dictionaries provide a very generic way of mapping keys to values. For example, a map of integers to strings:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"d1 = Dict(1 => \"A\", 2 => \"B\", 4 => \"D\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"info: Info\nType-stuff again: Dict{Int64,String} is a dictionary with Int64 keys and String values.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Looking up a value uses the bracket syntax:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"d1[2]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Dictionaries support non-integer keys and can mix data types:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Dict(\"A\" => 1, \"B\" => 2.5, \"D\" => 2 - 3im)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"info: Info\nJulia types form a hierarchy. Here the value type of the dictionary is Number, which is a generalization of Int64, Float64, and Complex{Int}. Leaf nodes in this hierarchy are called \"concrete\" types, and all others are called \"Abstract.\" In general, having variables with abstract types like Number can lead to slower code, so you should try to make sure every element in a dictionary or vector is the same type. For example, in this case we could represent every element as a Complex{Float64}:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Dict(\"A\" => 1.0 + 0.0im, \"B\" => 2.5 + 0.0im, \"D\" => 2.0 - 3.0im)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Dictionaries can be nested:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"d2 = Dict(\"A\" => 1, \"B\" => 2, \"D\" => Dict(:foo => 3, :bar => 4))\nd2[\"B\"]\nd2[\"D\"][:foo]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Structs","page":"Getting started with Julia","title":"Structs","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"You can define custom datastructures with struct:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"struct MyStruct\n x::Int\n y::String\n z::Dict{Int,Int}\nend\n\na = MyStruct(1, \"a\", Dict(2 => 3))\na.x","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"By default, these are not mutable","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"try #hide\n a.x = 2\ncatch err #hide\n showerror(stderr, err) #hide\nend #hide","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"However, you can declare a mutable struct which is mutable:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"mutable struct MyStructMutable\n x::Int\n y::String\n z::Dict{Int,Int}\nend\n\na = MyStructMutable(1, \"a\", Dict(2 => 3))\na.x\na.x = 2\na","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Loops","page":"Getting started with Julia","title":"Loops","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Julia has native support for for-each style loops with the syntax for in end:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"for i in 1:5\n println(i)\nend","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"info: Info\nRanges are constructed as start:stop, or start:step:stop.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"for i in 1.2:1.1:5.6\n println(i)\nend","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"This for-each loop also works with dictionaries:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"for (key, value) in Dict(\"A\" => 1, \"B\" => 2.5, \"D\" => 2 - 3im)\n println(\"$(key): $(value)\")\nend","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Note that in contrast to vector languages like MATLAB and R, loops do not result in a significant performance degradation in Julia.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Control-flow","page":"Getting started with Julia","title":"Control flow","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Julia control flow is similar to MATLAB, using the keywords if-elseif-else-end, and the logical operators || and && for or and and respectively:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"for i in 0:5:15\n if i < 5\n println(\"$(i) is less than 5\")\n elseif i < 10\n println(\"$(i) is less than 10\")\n else\n if i == 10\n println(\"the value is 10\")\n else\n println(\"$(i) is bigger than 10\")\n end\n end\nend","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Comprehensions","page":"Getting started with Julia","title":"Comprehensions","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Similar to languages like Haskell and Python, Julia supports the use of simple loops in the construction of arrays and dictionaries, called comprehensions.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A list of increasing integers:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"[i for i in 1:5]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Matrices can be built by including multiple indices:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"[i * j for i in 1:5, j in 5:10]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Conditional statements can be used to filter out some values:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"[i for i in 1:10 if i % 2 == 1]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A similar syntax can be used for building dictionaries:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Dict(\"$(i)\" => i for i in 1:10 if i % 2 == 1)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Functions","page":"Getting started with Julia","title":"Functions","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A simple function is defined as follows:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"function print_hello()\n return println(\"hello\")\nend\nprint_hello()","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Arguments can be added to a function:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"function print_it(x)\n return println(x)\nend\nprint_it(\"hello\")\nprint_it(1.234)\nprint_it(:my_id)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Optional keyword arguments are also possible:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"function print_it(x; prefix = \"value:\")\n return println(\"$(prefix) $(x)\")\nend\nprint_it(1.234)\nprint_it(1.234; prefix = \"val:\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"The keyword return is used to specify the return values of a function:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"function mult(x; y = 2.0)\n return x * y\nend\n\nmult(4.0)\nmult(4.0; y = 5.0)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Anonymous-functions","page":"Getting started with Julia","title":"Anonymous functions","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"The syntax input -> output creates an anonymous function. These are most useful when passed to other functions. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"f = x -> x^2\nf(2)\nmap(x -> x^2, 1:4)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Type-parameters","page":"Getting started with Julia","title":"Type parameters","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"We can constrain the inputs to a function using type parameters, which are :: followed by the type of the input we want. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"function foo(x::Int)\n return x^2\nend\n\nfunction foo(x::Float64)\n return exp(x)\nend\n\nfunction foo(x::Number)\n return x + 1\nend\n\nfoo(2)\nfoo(2.0)\nfoo(1 + 1im)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"But what happens if we call foo with something we haven't defined it for?","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"try #hide\n foo([1, 2, 3])\ncatch err #hide\n showerror(stderr, err) #hide\nend #hide","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"A MethodError means that you passed a function something that didn't match the type that it was expecting. In this case, the error message says that it doesn't know how to handle an Vector{Int64}, but it does know how to handle Float64, Int64, and Number.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nRead the \"Closest candidates\" part of the error message carefully to get a hint as to what was expected.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Broadcasting","page":"Getting started with Julia","title":"Broadcasting","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"In the example above, we didn't define what to do if f was passed a Vector. Luckily, Julia provides a convenient syntax for mapping f element-wise over arrays. Just add a . between the name of the function and the opening (. This works for any function, including functions with multiple arguments. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"foo.([1, 2, 3])","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nGet a MethodError when calling a function that takes a Vector, Matrix, or Array? Try broadcasting.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Mutable-vs-immutable-objects","page":"Getting started with Julia","title":"Mutable vs immutable objects","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Some types in Julia are mutable, which means you can change the values inside them. A good example is an array. You can modify the contents of an array without having to make a new array.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"In contrast, types like Float64 are immutable. You cannot modify the contents of a Float64.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"This is something to be aware of when passing types into functions. For example:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"function mutability_example(mutable_type::Vector{Int}, immutable_type::Int)\n mutable_type[1] += 1\n immutable_type += 1\n return\nend\n\nmutable_type = [1, 2, 3]\nimmutable_type = 1\n\nmutability_example(mutable_type, immutable_type)\n\nprintln(\"mutable_type: $(mutable_type)\")\nprintln(\"immutable_type: $(immutable_type)\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Because Vector{Int} is a mutable type, modifying the variable inside the function changed the value outside of the function. In contrast, the change to immutable_type didn't modify the value outside the function.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"You can check mutability with the isimmutable function:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"isimmutable([1, 2, 3])\nisimmutable(1)","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#The-package-manager","page":"Getting started with Julia","title":"The package manager","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/#Installing-packages","page":"Getting started with Julia","title":"Installing packages","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"No matter how wonderful Julia's base language is, at some point you will want to use an extension package. Some of these are built-in, for example random number generation is available in the Random package in the standard library. These packages are loaded with the commands using and import.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"using Random # The equivalent of Python's `from Random import *`\nimport Random # The equivalent of Python's `import Random`\n\nRandom.seed!(33)\n\n[rand() for i in 1:10]","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"The Package Manager is used to install packages that are not part of Julia's standard library.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"For example the following can be used to install JuMP,","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"using Pkg\nPkg.add(\"JuMP\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"For a complete list of registered Julia packages see the package listing at JuliaHub.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"From time to you may wish to use a Julia package that is not registered. In this case a git repository URL can be used to install the package.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"using Pkg\nPkg.add(\"https://github.com/user-name/MyPackage.jl.git\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/#Package-environments","page":"Getting started with Julia","title":"Package environments","text":"","category":"section"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"By default, Pkg.add will add packages to Julia's global environment. However, Julia also has built-in support for virtual environments.","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"Activate a virtual environment with:","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"import Pkg; Pkg.activate(\"/path/to/environment\")","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"You can see what packages are installed in the current environment with Pkg.status().","category":"page"},{"location":"tutorials/getting_started/getting_started_with_julia/","page":"Getting started with Julia","title":"Getting started with Julia","text":"tip: Tip\nWe strongly recommend you create a Pkg environment for each project that you create in Julia, and add only the packages that you need, instead of adding lots of packages to the global environment. The Pkg manager documentation has more information on this topic.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"EditURL = \"tips_and_tricks.jl\"","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#linear_tips_and_tricks","page":"Tips and tricks","title":"Tips and tricks","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This tutorial was originally contributed by Arpit Bhatia.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"tip: Tip\nA good source of tips is the Mosek Modeling Cookbook.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This tutorial collates some tips and tricks you can use when formulating mixed-integer programs. It uses the following packages:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"using JuMP","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Absolute-value","page":"Tips and tricks","title":"Absolute value","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"To model the absolute value function t ge x, there are a few options. In all cases, these reformulations only work if you are minimizing t \"down\" into x. They do not work if you are trying to maximize x.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Option-1","page":"Tips and tricks","title":"Option 1","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This option adds two linear inequality constraints:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x)\n@variable(model, t)\n@constraint(model, t >= x)\n@constraint(model, t >= -x)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Option-2","page":"Tips and tricks","title":"Option 2","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This option uses two non-negative variables and forms expressions for x and t:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, z[1:2] >= 0)\n@expression(model, t, z[1] + z[2])\n@expression(model, x, z[1] - z[2])","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Option-3","page":"Tips and tricks","title":"Option 3","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This option uses MOI.NormOneCone and lets JuMP choose the reformulation:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x)\n@variable(model, t)\n@constraint(model, [t; x] in MOI.NormOneCone(2))","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#L1-norm","page":"Tips and tricks","title":"L1-norm","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"To model min x_1, that is, min sumlimits_i x_i, use the MOI.NormOneCone:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:3])\n@variable(model, t)\n@constraint(model, [t; x] in MOI.NormOneCone(1 + length(x)))\n@objective(model, Min, t)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Infinity-norm","page":"Tips and tricks","title":"Infinity-norm","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"To model min x_infty, that is, min maxlimits_i x_i, use the MOI.NormInfinityCone:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:3])\n@variable(model, t)\n@constraint(model, [t; x] in MOI.NormInfinityCone(1 + length(x)))\n@objective(model, Min, t)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Max","page":"Tips and tricks","title":"Max","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"To model t ge maxx y, do:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, t)\n@variable(model, x)\n@variable(model, y)\n@constraint(model, t >= x)\n@constraint(model, t >= y)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This reformulation does not work for t ge minx y.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Min","page":"Tips and tricks","title":"Min","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"To model t le minx y, do:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, t)\n@variable(model, x)\n@variable(model, y)\n@constraint(model, t <= x)\n@constraint(model, t <= y)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"This reformulation does not work for t le maxx y.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Modulo","page":"Tips and tricks","title":"Modulo","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"To model y = x text mod n, where n is a constant modulus, we use the relationship x = n cdot z + y, where z in mathbbZ_+ is the number of times that n can be divided by x and y is the remainder.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"n = 4\nmodel = Model();\n@variable(model, x >= 0, Int)\n@variable(model, 0 <= y <= n - 1, Int)\n@variable(model, z >= 0, Int)\n@constraint(model, x == n * z + y)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"The modulo reformulation is often useful for subdividing a time increment into units of time like hours and days:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, t >= 0, Int)\n@variable(model, 0 <= hours <= 23, Int)\n@variable(model, days >= 0, Int)\n@constraint(model, t == 24 * days + hours)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Boolean-operators","page":"Tips and tricks","title":"Boolean operators","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Binary variables can be used to construct logical operators. Here are some example.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Or","page":"Tips and tricks","title":"Or","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"x_3 = x_1 lor x_2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:3], Bin)\n@constraints(model, begin\n x[1] <= x[3]\n x[2] <= x[3]\n x[3] <= x[1] + x[2]\nend)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#And","page":"Tips and tricks","title":"And","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"x_3 = x_1 land x_2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:3], Bin)\n@constraints(model, begin\n x[3] <= x[1]\n x[3] <= x[2]\n x[3] >= x[1] + x[2] - 1\nend)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Not","page":"Tips and tricks","title":"Not","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"x_1 neg x_2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:2], Bin)\n@constraint(model, x[1] == 1 - x[2])","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Implies","page":"Tips and tricks","title":"Implies","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"x_1 implies x_2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:2], Bin)\n@constraint(model, x[1] <= x[2])","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Disjunctions","page":"Tips and tricks","title":"Disjunctions","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/#Problem","page":"Tips and tricks","title":"Problem","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Suppose that we have two constraints a^top x leq b and c^top x leq d, and we want at least one to hold.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Trick-1","page":"Tips and tricks","title":"Trick 1","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Use an indicator constraint.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example Either x_1 leq 1 or x_2 leq 2.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:2])\n@variable(model, y[1:2], Bin)\n@constraint(model, y[1] --> {x[1] <= 1})\n@constraint(model, y[2] --> {x[2] <= 2})\n@constraint(model, sum(y) == 1) # Exactly one branch must be true","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Trick-2","page":"Tips and tricks","title":"Trick 2","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Introduce a \"big-M\" multiplied by a binary variable to relax one of the constraints.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example Either x_1 leq 1 or x_2 leq 2.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:2] <= 10)\n@variable(model, y[1:2], Bin)\nM = 100\n@constraint(model, x[1] <= 1 + M * y[1])\n@constraint(model, x[2] <= 2 + M * y[2])\n@constraint(model, sum(y) == 1)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"warning: Warning\nIf M is too small, the solution may be suboptimal. If M is too big, the solver may encounter numerical issues. Try to use domain knowledge to choose an M that is just right. Gurobi has a good documentation section on this topic.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#tips_indicator_constraint","page":"Tips and tricks","title":"Indicator constraints","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/#Problem-2","page":"Tips and tricks","title":"Problem","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Suppose we want to model that a certain linear inequality must be satisfied when some other event occurs, that is, for a binary variable z, we want to model the implication:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"z = 1 implies a^top x leq b","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Trick-1-2","page":"Tips and tricks","title":"Trick 1","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Some solvers have native support for indicator constraints. In addition, if the variables involved have finite domains, then JuMP can automatically reformulate an indicator into a mixed-integer program.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example x_1 + x_2 leq 1 if z = 1.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, 0 <= x[1:2] <= 10)\n@variable(model, z, Bin)\n@constraint(model, z --> {sum(x) <= 1})","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example x_1 + x_2 leq 1 if z = 0.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, 0 <= x[1:2] <= 10)\n@variable(model, z, Bin)\n@constraint(model, !z --> {sum(x) <= 1})","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Trick-2-2","page":"Tips and tricks","title":"Trick 2","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"If the solver doesn't support indicator constraints and the variables do not have a finite domain, you can use the big-M trick.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example x_1 + x_2 leq 1 if z = 1.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:2] <= 10)\n@variable(model, z, Bin)\nM = 100\n@constraint(model, sum(x) <= 1 + M * (1 - z))","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example x_1 + x_2 leq 1 if z = 0.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:2] <= 10)\n@variable(model, z, Bin)\nM = 100\n@constraint(model, sum(x) <= 1 + M * z)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Semi-continuous-variables","page":"Tips and tricks","title":"Semi-continuous variables","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"A semi-continuous variable is a continuous variable between bounds lu that also can assume the value zero, that is: x in 0 cup lu","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Example x in 0cup 1 2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x in Semicontinuous(1.0, 2.0))","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"You can also represent a semi-continuous variable using the reformulation:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x)\n@variable(model, z, Bin)\n@constraint(model, x <= 2 * z)\n@constraint(model, x >= 1 * z)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"When z = 0 the two constraints are equivalent to 0 <= x <= 0. When z = 1, the two constraints are equivalent to 1 <= x <= 2.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Semi-integer-variables","page":"Tips and tricks","title":"Semi-integer variables","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"A semi-integer variable is a variable which assumes integer values between bounds lu and can also assume the value zero: x in 0 cup l u cap mathbbZ","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x in Semiinteger(5.0, 10.0))","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"You can also represent a semi-integer variable using the reformulation:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x, Int)\n@variable(model, z, Bin)\n@constraint(model, x <= 10 * z)\n@constraint(model, x >= 5 * z)","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"When z = 0 the two constraints are equivalent to 0 <= x <= 0. When z = 1, the two constraints are equivalent to 5 <= x <= 10.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Special-Ordered-Sets-of-Type-1","page":"Tips and tricks","title":"Special Ordered Sets of Type 1","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"A Special Ordered Set of Type 1 is a set of variables, at most one of which can take a non-zero value, all others being at 0.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"They most frequently apply where a set of variables are actually binary variables. In other words, we have to choose at most one from a set of possibilities.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:3], Bin)\n@constraint(model, x in SOS1())","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"You can optionally pass SOS1 a weight vector like","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"@constraint(model, x in SOS1([0.2, 0.5, 0.3]))","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"If the decision variables are related and have a physical ordering, then the weight vector, although not used directly in the constraint, can help the solver make a better decision in the solution process.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#tip_sos2","page":"Tips and tricks","title":"Special Ordered Sets of Type 2","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"A Special Ordered Set of type 2 is a set of non-negative variables, of which at most two can be non-zero, and if two are non-zero these must be consecutive in their ordering.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"model = Model();\n@variable(model, x[1:3])\n@constraint(model, x in SOS2([3.0, 1.0, 2.0]))","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"The ordering provided by the weight vector is more important in this case as the variables need to be consecutive according to the ordering. For example, in the above constraint, the possible pairs are:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Consecutive\n(x[1] and x[3]) as they correspond to 3 and 2 resp. and thus can be non-zero\n(x[2] and x[3]) as they correspond to 1 and 2 resp. and thus can be non-zero\nNon-consecutive\n(x[1] and x[2]) as they correspond to 3 and 1 resp. and thus cannot be non-zero","category":"page"},{"location":"tutorials/linear/tips_and_tricks/#Piecewise-linear-approximations","page":"Tips and tricks","title":"Piecewise linear approximations","text":"","category":"section"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"SOSII constraints are most often used to form piecewise linear approximations of a function.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"Given a set of points for x:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"x̂ = -1:0.5:2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"and a set of corresponding points for y:","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"ŷ = x̂ .^ 2","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"the piecewise linear approximation is constructed by representing x and y as convex combinations of x̂ and ŷ.","category":"page"},{"location":"tutorials/linear/tips_and_tricks/","page":"Tips and tricks","title":"Tips and tricks","text":"N = length(x̂)\nmodel = Model();\n@variable(model, -1 <= x <= 2)\n@variable(model, y)\n@variable(model, 0 <= λ[1:N] <= 1)\n@objective(model, Max, y)\n@constraints(model, begin\n x == sum(x̂[i] * λ[i] for i in 1:N)\n y == sum(ŷ[i] * λ[i] for i in 1:N)\n sum(λ) == 1\n λ in SOS2()\nend)","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"EditURL = \"web_app.jl\"","category":"page"},{"location":"tutorials/applications/web_app/#Serving-web-apps","page":"Serving web apps","title":"Serving web apps","text":"","category":"section"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"This tutorial demonstrates how to setup and serve JuMP models via a REST API.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"In the example app we are building, we solve a trivial mixed-integer program, which is parameterized by the lower bound of a variable. To call the service, users send an HTTP POST request with JSON contents indicating the lower bound. The returned value is the solution of the mixed-integer program as JSON.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"First, we need JuMP and a solver:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"using JuMP\nimport HiGHS","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"We also need HTTP.jl to act as our REST server, and JSON.jl to marshal data.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"import HTTP\nimport JSON","category":"page"},{"location":"tutorials/applications/web_app/#The-server-side","page":"Serving web apps","title":"The server side","text":"","category":"section"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"The core components of our REST server are endpoints. These are functions which accept a Dict{String,Any} of input parameters, and return a Dict{String,Any} as output. The types are Dict{String,Any} because we're going to read these to and from JSON.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"Here's a very simple endpoint: it accepts params as input, formulates and solves a trivial mixed-integer program, and then returns a dictionary with the result.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"function endpoint_solve(params::Dict{String,Any})\n if !haskey(params, \"lower_bound\")\n return Dict{String,Any}(\n \"status\" => \"failure\",\n \"reason\" => \"missing lower_bound param\",\n )\n elseif !(params[\"lower_bound\"] isa Real)\n return Dict{String,Any}(\n \"status\" => \"failure\",\n \"reason\" => \"lower_bound is not a number\",\n )\n end\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n @variable(model, x >= params[\"lower_bound\"], Int)\n optimize!(model)\n ret = Dict{String,Any}(\n \"status\" => \"okay\",\n \"terminaton_status\" => termination_status(model),\n \"primal_status\" => primal_status(model),\n )\n # Only include the `x` key if it has a value.\n if primal_status(model) == FEASIBLE_POINT\n ret[\"x\"] = value(x)\n end\n return ret\nend","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"When we call this, we get:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"endpoint_solve(Dict{String,Any}(\"lower_bound\" => 1.2))","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"endpoint_solve(Dict{String,Any}())","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"For a second function, we need a function that accepts an HTTP.Request object and returns an HTTP.Response object.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"function serve_solve(request::HTTP.Request)\n data = JSON.parse(String(request.body))\n solution = endpoint_solve(data)\n return HTTP.Response(200, JSON.json(solution))\nend","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"Finally, we need an HTTP server. There are a variety of ways you can do this in HTTP.jl. We use an explicit Sockets.listen so we have manual control of when we shutdown the server.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"function setup_server(host, port)\n server = HTTP.Sockets.listen(host, port)\n HTTP.serve!(host, port; server = server) do request\n try\n # Extend the server by adding other endpoints here.\n if request.target == \"/api/solve\"\n return serve_solve(request)\n else\n return HTTP.Response(404, \"target $(request.target) not found\")\n end\n catch err\n # Log details about the exception server-side\n @info \"Unhandled exception: $err\"\n # Return a response to the client\n return HTTP.Response(500, \"internal error\")\n end\n end\n return server\nend","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"warning: Warning\nHTTP.jl does not serve requests on a separate thread. Therefore, a long-running job will block the main thread, preventing concurrent users from submitting requests. To work-around this, read HTTP.jl issue 798 or watch Building Microservices and Applications in Julia from JuliaCon 2020.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"server = setup_server(HTTP.ip\"127.0.0.1\", 8080)","category":"page"},{"location":"tutorials/applications/web_app/#The-client-side","page":"Serving web apps","title":"The client side","text":"","category":"section"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"Now that we have a server, we can send it requests via this function:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"function send_request(data::Dict; endpoint::String = \"solve\")\n ret = HTTP.request(\n \"POST\",\n # This should match the URL and endpoint we defined for our server.\n \"http://127.0.0.1:8080/api/$endpoint\",\n [\"Content-Type\" => \"application/json\"],\n JSON.json(data),\n )\n if ret.status != 200\n # This could happen if there are time-outs, network errors, etc.\n return Dict(\n \"status\" => \"failure\",\n \"code\" => ret.status,\n \"body\" => String(ret.body),\n )\n end\n return JSON.parse(String(ret.body))\nend","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"Let's see what happens:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"send_request(Dict(\"lower_bound\" => 0))","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"send_request(Dict(\"lower_bound\" => 1.2))","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"If we don't send a lower_bound, we get:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"send_request(Dict(\"invalid_param\" => 1.2))","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"If we don't send a lower_bound that is a number, we get:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"send_request(Dict(\"lower_bound\" => \"1.2\"))","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"Finally, we can shutdown our HTTP server:","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"close(server)","category":"page"},{"location":"tutorials/applications/web_app/#Next-steps","page":"Serving web apps","title":"Next steps","text":"","category":"section"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"For more complicated examples relating to HTTP servers, consult the HTTP.jl documentation.","category":"page"},{"location":"tutorials/applications/web_app/","page":"Serving web apps","title":"Serving web apps","text":"To see how you can integrate this with a larger JuMP model, read Design patterns for larger models.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"EditURL = \"https://github.com/jump-dev/SDPT3.jl/blob/b565aac2a58818090d521f2340e71f597688e4fb/README.md\"","category":"page"},{"location":"packages/SDPT3/#SDPT3.jl","page":"jump-dev/SDPT3.jl","title":"SDPT3.jl","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"SDPT3.jl is wrapper for the SDPT3 solver.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"The wrapper has two components:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"an exported sdpt3 function that is a thin wrapper on top of the sdpt3 MATLAB function\nan interface to MathOptInterface","category":"page"},{"location":"packages/SDPT3/#Affiliation","page":"jump-dev/SDPT3.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"This wrapper is maintained by the JuMP community and is not an official wrapper of SDPT3.","category":"page"},{"location":"packages/SDPT3/#License","page":"jump-dev/SDPT3.jl","title":"License","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"SDPT3.jl is licensed under the MIT License.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"The underlying solver, SDPT3 is licensed under the GPL v2 License.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"In addition, SDPT3 requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.","category":"page"},{"location":"packages/SDPT3/#Use-with-JuMP","page":"jump-dev/SDPT3.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"To use SDPT3 with JuMP, do:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"using JuMP, SDPT3\nmodel = Model(SDPT3.Optimizer)\nset_attribute(model, \"printlevel\", 0)","category":"page"},{"location":"packages/SDPT3/#Installation","page":"jump-dev/SDPT3.jl","title":"Installation","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"First, make sure that you satisfy the requirements of the MATLAB.jl Julia package, and that the SeDuMi software is installed in your MATLAB™ installation.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"Then, install SDPT3.jl using Pkg.add:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"import Pkg\nPkg.add(\"SDPT3\")","category":"page"},{"location":"packages/SDPT3/#SDPT3-not-in-PATH","page":"jump-dev/SDPT3.jl","title":"SDPT3 not in PATH","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"If you get the error:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"Error using save\nVariable 'jx_sdpt3_arg_out_1' not found.\n\nERROR: LoadError: MATLAB.MEngineError(\"failed to get variable jx_sdpt3_arg_out_1 from MATLAB session\")\nStacktrace:\n[...]","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"The error means that we could not find the sdpt3 function with one output argument using the MATLAB C API. This most likely means that you did not add SDPT3 to the MATLAB's path (that is, the toolbox/local/pathdef.m file).","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"If modifying toolbox/local/pathdef.m does not work, the following should work, where /path/to/sdpt3/ is the directory where the sdpt3 folder is located:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"julia> using MATLAB\n\njulia> cd(\"/path/to/sdpt3/\") do\n MATLAB.mat\"install_sdpt3\"\n end\n\njulia> MATLAB.mat\"savepath\"","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"An alternative fix is suggested in the following issue.","category":"page"},{"location":"packages/SDPT3/#Error-in-validate","page":"jump-dev/SDPT3.jl","title":"Error in validate","text":"","category":"section"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"If you get the error:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"Brace indexing is not supported for variables of this type.\n\nError in validate\n\nError in sdpt3 (line 171)\n [blk,At,C,b,blkdim,numblk,parbarrier] = validate(blk,At,C,b,par,parbarrier);\n\nError using save\nVariable 'jx_sdpt3_arg_out_1' not found.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"It might mean that you have added SDPNAL in addition to SDPT3 in the MATLAB's path (that is, the toolbox/local/pathdef.m file). Because SDPNAL also defines a validate function, this can make sdpt3 call SDPNAL's validate function instead of SDPT3's validate function, which causes the issue.","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"One way to fix this from the Julia REPL is to reset the search path to the factory-installed state using restoredefaultpath:","category":"page"},{"location":"packages/SDPT3/","page":"jump-dev/SDPT3.jl","title":"jump-dev/SDPT3.jl","text":"julia> using MATLAB\n\njulia> MATLAB.restoredefaultpath()\n\njulia> MATLAB.mat\"savepath\"","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"EditURL = \"dualization.jl\"","category":"page"},{"location":"tutorials/conic/dualization/#Dualization","page":"Dualization","title":"Dualization","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The purpose of this tutorial is to explain how to use Dualization.jl to improve the performance of some conic optimization models.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"There are two important takeaways:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"JuMP reformulates problems to meet the input requirements of the solver, potentially increasing the problem size by adding slack variables and constraints.\nSolving the dual of a conic model can be more efficient than solving the primal.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"Dualization.jl is a package which fixes these problems, allowing you to solve the dual instead of the primal with a one-line change to your code.","category":"page"},{"location":"tutorials/conic/dualization/#Required-packages","page":"Dualization","title":"Required packages","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"using JuMP\nimport Dualization\nimport SCS","category":"page"},{"location":"tutorials/conic/dualization/#Background","page":"Dualization","title":"Background","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"Conic optimization solvers typically accept one of two input formulations.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The first is the standard conic form:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"beginalign\n min_x in mathbbR^n c^top x \n textst A x = b \n x in mathcalK\nendalign","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"in which we have a set of linear equality constraints Ax = b and the variables belong to a cone mathcalK.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The second is the geometric conic form:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"beginalign\n min_x in mathbbR^n c^top x \n textst A x - b in mathcalK\nendalign","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"in which an affine function Ax - b belongs to a cone mathcalK and the variables are free.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"It is trivial to convert between these two representations, for example, to go from the geometric conic form to the standard conic form we introduce slack variables y:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"beginalign\n min_x in mathbbR^n c^top x \n textst beginbmatrixA -Iendbmatrix beginbmatrixxyendbmatrix = b \n beginbmatrixxyendbmatrix in mathbbR^n times mathcalK\nendalign","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"and to go from the standard conic form to the geometric conic form, we can rewrite the equality constraint as a function belonging to the {0} cone:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"beginalign\n min_x in mathbbR^n c^top x \n textst beginbmatrixAIendbmatrix x - beginbmatrixb0endbmatrix in 0 times mathcalK\nendalign","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"From a theoretical perspective, the two formulations are equivalent, and if you implement a model in the standard conic form and pass it to a geometric conic form solver (or vice versa), then JuMP will automatically reformulate the problem into the correct formulation.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"From a practical perspective though, the reformulations are problematic because the additional slack variables and constraints can make the problem much larger and therefore harder to solve.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"You should also note many problems contain a mix of conic constraints and variables, and so they do not neatly fall into one of the two formulations. In these cases, JuMP reformulates only the variables and constraints as necessary to convert the problem into the desired form.","category":"page"},{"location":"tutorials/conic/dualization/#Primal-and-dual-formulations","page":"Dualization","title":"Primal and dual formulations","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"Duality plays a large role in conic optimization. For a detailed description of conic duality, see Duality.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"A useful observation is that if the primal problem is in standard conic form, then the dual problem is in geometric conic form, and vice versa. Moreover, the primal and dual may have a different number of variables and constraints, although which one is smaller depends on the problem. Therefore, instead of reformulating the problem from one form to the other, it can be more efficient to solve the dual instead of the primal.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"To demonstrate, we use a variation of the Maximum cut via SDP example.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The primal formulation (in standard conic form) is:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"model_primal = Model()\n@variable(model_primal, X[1:2, 1:2], PSD)\n@objective(model_primal, Max, sum([1 -1; -1 1] .* X))\n@constraint(model_primal, primal_c[i = 1:2], 1 - X[i, i] == 0)\nprint(model_primal)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"This problem has three scalar decision variables (the matrix X is symmetric), two scalar equality constraints, and a constraint that X is positive semidefinite.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The dual of model_primal is:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"model_dual = Model()\n@variable(model_dual, y[1:2])\n@objective(model_dual, Min, sum(y))\n@constraint(model_dual, dual_c, [y[1]-1 1; 1 y[2]-1] in PSDCone())\nprint(model_dual)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"This problem has two scalar decision variables, and a 2x2 positive semidefinite matrix constraint.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"tip: Tip\nIf you haven't seen conic duality before, try deriving the dual problem based on the description in Duality. You'll need to know that the dual cone of PSDCone is the PSDCone.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"When we solve model_primal with SCS.Optimizer, SCS reports three variables (variables n: 3), five rows in the constraint matrix (constraints m: 5), and five non-zeros in the matrix (nnz(A): 5):","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"set_optimizer(model_primal, SCS.Optimizer)\noptimize!(model_primal)\n@assert is_solved_and_feasible(model_primal; dual = true)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"(There are five rows in the constraint matrix because SCS expects problems in geometric conic form, and so JuMP has reformulated the X, PSD variable constraint into the affine constraint X .+ 0 in PSDCone().)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The solution we obtain is:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"value.(X)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"dual.(primal_c)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"objective_value(model_primal)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"When we solve model_dual with SCS.Optimizer, SCS reports two variables (variables n: 2), three rows in the constraint matrix (constraints m: 3), and two non-zeros in the matrix (nnz(A): 2):","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"set_optimizer(model_dual, SCS.Optimizer)\noptimize!(model_dual)\n@assert is_solved_and_feasible(model_dual; dual = true)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"and the solution we obtain is:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"dual.(dual_c)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"value.(y)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"objective_value(model_dual)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"This particular problem is small enough that it isn't meaningful to compare the solve times, but in general, we should expect model_dual to solve faster than model_primal because it contains fewer variables and constraints. The difference is particularly noticeable on large-scale optimization problems.","category":"page"},{"location":"tutorials/conic/dualization/#dual_optimizer","page":"Dualization","title":"dual_optimizer","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"Manually deriving the conic dual is difficult and error-prone. The package Dualization.jl provides the Dualization.dual_optimizer meta-solver, which wraps any MathOptInterface-compatible solver in an interface that automatically formulates and solves the dual of an input problem.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"To demonstrate, we use Dualization.dual_optimizer to solve model_primal:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"set_optimizer(model_primal, Dualization.dual_optimizer(SCS.Optimizer))\noptimize!(model_primal)\n@assert is_solved_and_feasible(model_primal; dual = true)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The performance is the same as if we solved model_dual, and the correct solution is returned to X:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"value.(X)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"dual.(primal_c)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"Moreover, if we use dual_optimizer on model_dual, then we get the same performance as if we had solved model_primal:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"set_optimizer(model_dual, Dualization.dual_optimizer(SCS.Optimizer))\noptimize!(model_dual)\n@assert is_solved_and_feasible(model_dual; dual = true)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"dual.(dual_c)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"value.(y)","category":"page"},{"location":"tutorials/conic/dualization/#A-mixed-example","page":"Dualization","title":"A mixed example","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"The Maximum cut via SDP example is nicely defined because the primal is in standard conic form and the dual is in geometric conic form. However, many practical models contain a mix of the two formulations. One example is The minimum distortion problem:","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"D = [0 1 1 1; 1 0 2 2; 1 2 0 2; 1 2 2 0]\nmodel = Model()\n@variable(model, c²)\n@variable(model, Q[1:4, 1:4], PSD)\n@objective(model, Min, c²)\nfor i in 1:4, j in (i+1):4\n @constraint(model, D[i, j]^2 <= Q[i, i] + Q[j, j] - 2 * Q[i, j])\n @constraint(model, Q[i, i] + Q[j, j] - 2 * Q[i, j] <= c² * D[i, j]^2)\nend\n@constraint(model, Q[1, 1] == 0)\n@constraint(model, c² >= 1)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"In this formulation, the Q variable is of the form xinmathcalK, but there is also a free variable, c², a linear equality constraint, Q[1, 1] == 0, and some linear inequality constraints. Rather than attempting to derive the formulation that JuMP would pass to SCS and its dual, the simplest solution is to try solving the problem with and without dual_optimizer to see which formulation is most efficient.","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"set_optimizer(model, SCS.Optimizer)\noptimize!(model)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"set_optimizer(model, Dualization.dual_optimizer(SCS.Optimizer))\noptimize!(model)","category":"page"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"For this problem, SCS reports that the primal has variables n: 11, constraints m: 24 and that the dual has variables n: 14, constraints m: 24. Therefore, we should probably use the primal formulation because it has fewer variables and the same number of constraints.","category":"page"},{"location":"tutorials/conic/dualization/#When-to-use-dual_optimizer","page":"Dualization","title":"When to use dual_optimizer","text":"","category":"section"},{"location":"tutorials/conic/dualization/","page":"Dualization","title":"Dualization","text":"Because it can make the problem larger or smaller, depending on the problem and the choice of solver, there is no definitive rule on when you should use dual_optimizer. However, you should try dual_optimizer if your conic optimization problem takes a long time to solve, or if you need to repeatedly solve similarly structured problems with different data. In some cases solving the dual instead of the primal can make a large difference.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"EditURL = \"ellipse_approx.jl\"","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Example:-ellipsoid-approximation","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This tutorial considers the problem of computing extremal ellipsoids: finding ellipsoids that best approximate a given set. As an extension, we show how to use JuMP to inspect the bridges that were used, and how to explore alternative formulations.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"The model comes from Section 4.9 of (Ben-Tal and Nemirovski, 2001).","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"For a related example, see also the Example: minimal ellipses tutorial.","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Required-packages","page":"Example: ellipsoid approximation","title":"Required packages","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"using JuMP\nimport LinearAlgebra\nimport Plots\nimport Random\nimport SCS\nimport Test","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Problem-formulation","page":"Example: ellipsoid approximation","title":"Problem formulation","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Suppose that we are given a set mathcalS consisting of m points in n-dimensional space:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"mathcalS = x_1 ldots x_m subset mathbbR^n","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Our goal is to determine an optimal vector c in mathbbR^n and an optimal n times n real symmetric matrix D such that the ellipse:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"E(D c) = x (x - c)^top D ( x - c) leq 1 ","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"contains mathcalS and has the smallest possible volume.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"The optimal D and c are given by the optimization problem:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"beginaligned\nmax quad t \ntextst quad Z succeq 0 \n beginbmatrix s z^top z Z endbmatrix succeq 0 \n x_i^top Z x_i - 2x_i^top z + s leq 1 quad i=1 ldots m \n t le sqrtndet(Z)\nendaligned","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"where D = Z_* and c = Z_*^-1 z_*.","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Data","page":"Example: ellipsoid approximation","title":"Data","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"We first need to generate some points to work with.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"function generate_point_cloud(\n m; # number of 2-dimensional points\n a = 10, # scaling in x direction\n b = 2, # scaling in y direction\n rho = π / 6, # rotation of points around origin\n random_seed = 1,\n)\n rng = Random.MersenneTwister(random_seed)\n P = randn(rng, Float64, m, 2)\n Phi = [a*cos(rho) a*sin(rho); -b*sin(rho) b*cos(rho)]\n S = P * Phi\n return S\nend","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"For the sake of this example, let's take m = 600:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"S = generate_point_cloud(600);\nnothing #hide","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"We will visualise the points (and ellipse) using the Plots package:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"r = 1.1 * maximum(abs.(S))\nplot = Plots.scatter(\n S[:, 1],\n S[:, 2];\n xlim = (-r, r),\n ylim = (-r, r),\n label = nothing,\n c = :green,\n shape = :x,\n size = (600, 600),\n)","category":"page"},{"location":"tutorials/conic/ellipse_approx/#JuMP-formulation","page":"Example: ellipsoid approximation","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Now let's build and the JuMP model. We'll compute D and c after the solve.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"model = Model(SCS.Optimizer)\n# We need to use a tighter tolerance for this example, otherwise the bounding\n# ellipse won't actually be bounding...\nset_attribute(model, \"eps_rel\", 1e-7)\nset_silent(model)\nm, n = size(S)\n@variable(model, z[1:n])\n@variable(model, Z[1:n, 1:n], PSD)\n@variable(model, s)\n@variable(model, t)\n@constraint(model, [s z'; z Z] >= 0, PSDCone())\n@constraint(\n model,\n [i in 1:m],\n S[i, :]' * Z * S[i, :] - 2 * S[i, :]' * z + s <= 1,\n)\n@constraint(model, [t; vec(Z)] in MOI.RootDetConeSquare(n))\n@objective(model, Max, t)\noptimize!(model)\nTest.@test is_solved_and_feasible(model)\nsolution_summary(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Results","page":"Example: ellipsoid approximation","title":"Results","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"After solving the model to optimality we can recover the solution in terms of D and c:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"D = value.(Z)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"c = D \\ value.(z)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"We can check that each point lies inside the ellipsoid, by checking if the largest normalized radius is less than 1:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"largest_radius = maximum(map(x -> (x - c)' * D * (x - c), eachrow(S)))","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Finally, overlaying the solution in the plot we see the minimal volume approximating ellipsoid:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"P = sqrt(D)\nq = -P * c\ndata = [tuple(P \\ [cos(θ) - q[1], sin(θ) - q[2]]...) for θ in 0:0.05:(2pi+0.05)]\nPlots.plot!(plot, data; c = :crimson, label = nothing)","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Alternative-formulations","page":"Example: ellipsoid approximation","title":"Alternative formulations","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"The formulation of model uses MOI.RootDetConeSquare. However, because SCS does not natively support this cone, JuMP automatically reformulates the problem into an equivalent problem that SCS does support. You can see the reformulation that JuMP chose using print_active_bridges:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"There's a lot going on here, but the first bullet is:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"* Unsupported objective: MOI.VariableIndex\n| bridged by:\n| MOIB.Objective.FunctionizeBridge{Float64}\n| introduces:\n| * Supported objective: MOI.ScalarAffineFunction{Float64}","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This says that SCS does not support a MOI.VariableIndex objective function, and that JuMP used a MOI.Bridges.Objective.FunctionizeBridge to convert it into a MOI.ScalarAffineFunction{Float64} objective function.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"We can leave JuMP to do the reformulation, or we can rewrite our model to have an objective function that SCS natively supports:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"@objective(model, Max, 1.0 * t + 0.0);\nnothing #hide","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Re-printing the active bridges:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"we get * Supported objective: MOI.ScalarAffineFunction{Float64}.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"We can manually implement some other reformulations to change our model to something that SCS more closely supports by:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Replacing the MOI.VectorOfVariables in MOI.PositiveSemidefiniteConeTriangle constraint @variable(model, Z[1:n, 1:n], PSD) with the MOI.VectorAffineFunction in MOI.PositiveSemidefiniteConeTriangle @constraint(model, Z >= 0, PSDCone()).\nReplacing the MOI.VectorOfVariables in MOI.PositiveSemidefiniteConeSquare constraint [s z'; z Z] >= 0, PSDCone() with the MOI.VectorAffineFunction in MOI.PositiveSemidefiniteConeTriangle @constraint(model, LinearAlgebra.Symmetric([s z'; z Z]) >= 0, PSDCone()).\nReplacing the MOI.ScalarAffineFunction in MOI.GreaterThan constraints with the vectorized equivalent of MOI.VectorAffineFunction in MOI.Nonnegatives\nReplacing the MOI.VectorOfVariables in MOI.RootDetConeSquare constraint with MOI.VectorAffineFunction in MOI.RootDetConeTriangle.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Note that we still need to bridge MOI.PositiveSemidefiniteConeTriangle constraints because SCS uses an internal SCS.ScaledPSDCone set instead.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"model = Model(SCS.Optimizer)\nset_attribute(model, \"eps_rel\", 1e-6)\nset_silent(model)\n@variable(model, z[1:n])\n@variable(model, s)\n@variable(model, t)\n# The former @variable(model, Z[1:n, 1:n], PSD)\n@variable(model, Z[1:n, 1:n], Symmetric)\n@constraint(model, Z >= 0, PSDCone())\n# The former [s z'; z Z] >= 0, PSDCone()\n@constraint(model, LinearAlgebra.Symmetric([s z'; z Z]) >= 0, PSDCone())\n# The former constraint S[i, :]' * Z * S[i, :] - 2 * S[i, :]' * z + s <= 1\nf = [1 - S[i, :]' * Z * S[i, :] + 2 * S[i, :]' * z - s for i in 1:m]\n@constraint(model, f in MOI.Nonnegatives(m))\n# The former constraint [t; vec(Z)] in MOI.RootDetConeSquare(n)\n@constraint(model, 1 * [t; triangle_vec(Z)] .+ 0 in MOI.RootDetConeTriangle(n))\n# The former @objective(model, Max, t)\n@objective(model, Max, 1 * t + 0)\noptimize!(model)\nTest.@test is_solved_and_feasible(model)\nsolve_time_1 = solve_time(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This formulation gives the much smaller graph:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"The last bullet shows how JuMP reformulated the MOI.RootDetConeTriangle constraint by adding a mix of MOI.PositiveSemidefiniteConeTriangle and MOI.GeometricMeanCone constraints.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Because SCS doesn't natively support the MOI.GeometricMeanCone, these constraints were further bridged using a MOI.Bridges.Constraint.GeoMeanToPowerBridge to a series of MOI.PowerCone constraints.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"However, there are many other ways that a MOI.GeometricMeanCone can be reformulated into something that SCS supports. Let's see what happens if we use remove_bridge to remove the MOI.Bridges.Constraint.GeoMeanToPowerBridge:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"remove_bridge(model, MOI.Bridges.Constraint.GeoMeanToPowerBridge)\noptimize!(model)\nTest.@test is_solved_and_feasible(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This time, the solve took:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"solve_time_2 = solve_time(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"where previously it took","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"solve_time_1","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Why was the solve time different?","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"This time, JuMP used a MOI.Bridges.Constraint.GeoMeanBridge to reformulate the constraint into a set of MOI.RotatedSecondOrderCone constraints, which were further reformulated into a set of supported MOI.SecondOrderCone constraints.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"Since the two models are equivalent, we can conclude that for this particular model, the MOI.SecondOrderCone formulation is more efficient.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Example: ellipsoid approximation","title":"Example: ellipsoid approximation","text":"In general though, the performance of a particular reformulation is problem- and solver-specific. Therefore, JuMP chooses to minimize the number of bridges in the default reformulation, leaving you to explore alternative formulations using the tools and techniques shown in this tutorial.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"DocTestSetup = quote\n using JuMP\nend","category":"page"},{"location":"manual/containers/#Containers","page":"Containers","title":"Containers","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"JuMP provides specialized containers similar to AxisArrays that enable multi-dimensional arrays with non-integer indices.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"These containers are created automatically by JuMP's macros. Each macro has the same basic syntax:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"@macroname(model, name[key1=index1, index2; optional_condition], other stuff)","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"The containers are generated by the name[key1=index1, index2; optional_condition] syntax. Everything else is specific to the particular macro.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Containers can be named, for example, name[key=index], or unnamed, for example, [key=index]. We call unnamed containers anonymous.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"We call the bits inside the square brackets and before the ; the index sets. The index sets can be named, for example, [i = 1:4], or they can be unnamed, for example, [1:4].","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"We call the bit inside the square brackets and after the ; the condition. Conditions are optional.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"In addition to the standard JuMP macros like @variable and @constraint, which construct containers of variables and constraints respectively, you can use Containers.@container to construct containers with arbitrary elements.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"We will use this macro to explain the three types of containers that are natively supported by JuMP: Array, Containers.DenseAxisArray, and Containers.SparseAxisArray.","category":"page"},{"location":"manual/containers/#Array","page":"Containers","title":"Array","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"An Array is created when the index sets are rectangular and the index sets are of the form 1:n.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Containers.@container(x[i = 1:2, j = 1:3], (i, j))\n2×3 Matrix{Tuple{Int64, Int64}}:\n (1, 1) (1, 2) (1, 3)\n (2, 1) (2, 2) (2, 3)","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"The result is a normal Julia Array, so you can do all the usual things.","category":"page"},{"location":"manual/containers/#Slicing","page":"Containers","title":"Slicing","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Arrays can be sliced","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x[:, 1]\n2-element Vector{Tuple{Int64, Int64}}:\n (1, 1)\n (2, 1)\n\njulia> x[2, :]\n3-element Vector{Tuple{Int64, Int64}}:\n (2, 1)\n (2, 2)\n (2, 3)","category":"page"},{"location":"manual/containers/#Looping","page":"Containers","title":"Looping","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use eachindex to loop over the elements:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> for key in eachindex(x)\n println(x[key])\n end\n(1, 1)\n(2, 1)\n(1, 2)\n(2, 2)\n(1, 3)\n(2, 3)","category":"page"},{"location":"manual/containers/#Get-the-index-sets","page":"Containers","title":"Get the index sets","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use axes to obtain the index sets:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> axes(x)\n(Base.OneTo(2), Base.OneTo(3))","category":"page"},{"location":"manual/containers/#Broadcasting","page":"Containers","title":"Broadcasting","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Broadcasting over an Array returns an Array","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> swap(x::Tuple) = (last(x), first(x))\nswap (generic function with 1 method)\n\njulia> swap.(x)\n2×3 Matrix{Tuple{Int64, Int64}}:\n (1, 1) (2, 1) (3, 1)\n (1, 2) (2, 2) (3, 2)","category":"page"},{"location":"manual/containers/#Tables","page":"Containers","title":"Tables","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use Containers.rowtable to convert the Array into a Tables.jl compatible Vector{<:NamedTuple}:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> table = Containers.rowtable(x; header = [:I, :J, :value])\n6-element Vector{@NamedTuple{I::Int64, J::Int64, value::Tuple{Int64, Int64}}}:\n (I = 1, J = 1, value = (1, 1))\n (I = 2, J = 1, value = (2, 1))\n (I = 1, J = 2, value = (1, 2))\n (I = 2, J = 2, value = (2, 2))\n (I = 1, J = 3, value = (1, 3))\n (I = 2, J = 3, value = (2, 3))","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Because it supports the Tables.jl interface, you can pass it to any function which accepts a table as input:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> import DataFrames;\n\njulia> DataFrames.DataFrame(table)\n6×3 DataFrame\n Row │ I J value\n │ Int64 Int64 Tuple…\n─────┼──────────────────────\n 1 │ 1 1 (1, 1)\n 2 │ 2 1 (2, 1)\n 3 │ 1 2 (1, 2)\n 4 │ 2 2 (2, 2)\n 5 │ 1 3 (1, 3)\n 6 │ 2 3 (2, 3)","category":"page"},{"location":"manual/containers/#DenseAxisArray","page":"Containers","title":"DenseAxisArray","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"A Containers.DenseAxisArray is created when the index sets are rectangular, but not of the form 1:n. The index sets can be of any type.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x = Containers.@container([i = 1:2, j = [:A, :B]], (i, j))\n2-dimensional DenseAxisArray{Tuple{Int64, Symbol},2,...} with index sets:\n Dimension 1, Base.OneTo(2)\n Dimension 2, [:A, :B]\nAnd data, a 2×2 Matrix{Tuple{Int64, Symbol}}:\n (1, :A) (1, :B)\n (2, :A) (2, :B)","category":"page"},{"location":"manual/containers/#Slicing-2","page":"Containers","title":"Slicing","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"DenseAxisArrays can be sliced","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x[:, :A]\n1-dimensional DenseAxisArray{Tuple{Int64, Symbol},1,...} with index sets:\n Dimension 1, Base.OneTo(2)\nAnd data, a 2-element Vector{Tuple{Int64, Symbol}}:\n (1, :A)\n (2, :A)\n\njulia> x[1, :]\n1-dimensional DenseAxisArray{Tuple{Int64, Symbol},1,...} with index sets:\n Dimension 1, [:A, :B]\nAnd data, a 2-element Vector{Tuple{Int64, Symbol}}:\n (1, :A)\n (1, :B)","category":"page"},{"location":"manual/containers/#Looping-2","page":"Containers","title":"Looping","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use eachindex to loop over the elements:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> for key in eachindex(x)\n println(x[key])\n end\n(1, :A)\n(2, :A)\n(1, :B)\n(2, :B)","category":"page"},{"location":"manual/containers/#Get-the-index-sets-2","page":"Containers","title":"Get the index sets","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use axes to obtain the index sets:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> axes(x)\n(Base.OneTo(2), [:A, :B])","category":"page"},{"location":"manual/containers/#Broadcasting-2","page":"Containers","title":"Broadcasting","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Broadcasting over a DenseAxisArray returns a DenseAxisArray","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> swap(x::Tuple) = (last(x), first(x))\nswap (generic function with 1 method)\n\njulia> swap.(x)\n2-dimensional DenseAxisArray{Tuple{Symbol, Int64},2,...} with index sets:\n Dimension 1, Base.OneTo(2)\n Dimension 2, [:A, :B]\nAnd data, a 2×2 Matrix{Tuple{Symbol, Int64}}:\n (:A, 1) (:B, 1)\n (:A, 2) (:B, 2)","category":"page"},{"location":"manual/containers/#Access-internal-data","page":"Containers","title":"Access internal data","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use Array(x) to copy the internal data array into a new Array:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Array(x)\n2×2 Matrix{Tuple{Int64, Symbol}}:\n (1, :A) (1, :B)\n (2, :A) (2, :B)","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"To access the internal data without a copy, use x.data.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x.data\n2×2 Matrix{Tuple{Int64, Symbol}}:\n (1, :A) (1, :B)\n (2, :A) (2, :B)","category":"page"},{"location":"manual/containers/#Tables-2","page":"Containers","title":"Tables","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use Containers.rowtable to convert the DenseAxisArray into a Tables.jl compatible Vector{<:NamedTuple}:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> table = Containers.rowtable(x; header = [:I, :J, :value])\n4-element Vector{@NamedTuple{I::Int64, J::Symbol, value::Tuple{Int64, Symbol}}}:\n (I = 1, J = :A, value = (1, :A))\n (I = 2, J = :A, value = (2, :A))\n (I = 1, J = :B, value = (1, :B))\n (I = 2, J = :B, value = (2, :B))","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Because it supports the Tables.jl interface, you can pass it to any function which accepts a table as input:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> import DataFrames;\n\njulia> DataFrames.DataFrame(table)\n4×3 DataFrame\n Row │ I J value\n │ Int64 Symbol Tuple…\n─────┼────────────────────────\n 1 │ 1 A (1, :A)\n 2 │ 2 A (2, :A)\n 3 │ 1 B (1, :B)\n 4 │ 2 B (2, :B)","category":"page"},{"location":"manual/containers/#Keyword-indexing","page":"Containers","title":"Keyword indexing","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"If all axes are named, you can use keyword indexing:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x[i = 2, j = :A]\n(2, :A)\n\njulia> x[i = :, j = :B]\n1-dimensional DenseAxisArray{Tuple{Int64, Symbol},1,...} with index sets:\n Dimension 1, Base.OneTo(2)\nAnd data, a 2-element Vector{Tuple{Int64, Symbol}}:\n (1, :B)\n (2, :B)","category":"page"},{"location":"manual/containers/#SparseAxisArray","page":"Containers","title":"SparseAxisArray","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"A Containers.SparseAxisArray is created when the index sets are non-rectangular. This occurs in two circumstances:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"An index depends on a prior index:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Containers.@container([i = 1:2, j = i:2], (i, j))\nJuMP.Containers.SparseAxisArray{Tuple{Int64, Int64}, 2, Tuple{Int64, Int64}} with 3 entries:\n [1, 1] = (1, 1)\n [1, 2] = (1, 2)\n [2, 2] = (2, 2)","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"The [indices; condition] syntax is used:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x = Containers.@container([i = 1:3, j = [:A, :B]; i > 1], (i, j))\nJuMP.Containers.SparseAxisArray{Tuple{Int64, Symbol}, 2, Tuple{Int64, Symbol}} with 4 entries:\n [2, A] = (2, :A)\n [2, B] = (2, :B)\n [3, A] = (3, :A)\n [3, B] = (3, :B)","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Here we have the index sets i = 1:3, j = [:A, :B], followed by ;, and then a condition, which evaluates to true or false: i > 1.","category":"page"},{"location":"manual/containers/#Slicing-3","page":"Containers","title":"Slicing","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Slicing is supported:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> y = x[:, :B]\nJuMP.Containers.SparseAxisArray{Tuple{Int64, Symbol}, 1, Tuple{Int64}} with 2 entries:\n [2] = (2, :B)\n [3] = (3, :B)","category":"page"},{"location":"manual/containers/#Looping-3","page":"Containers","title":"Looping","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use eachindex to loop over the elements:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> for key in eachindex(x)\n println(x[key])\n end\n(2, :A)\n(2, :B)\n(3, :A)\n(3, :B)\n\njulia> for key in eachindex(y)\n println(y[key])\n end\n(2, :B)\n(3, :B)","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"warning: Warning\nIf you use a macro to construct a SparseAxisArray, then the iteration order is row-major, that is, indices are varied from right to left. As an example, when iterating over x above, the j index is iterated, keeping i constant. This order is in contrast to Base.Arrays, which iterate in column-major order, that is, by varying indices from left to right.","category":"page"},{"location":"manual/containers/#Broadcasting-3","page":"Containers","title":"Broadcasting","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Broadcasting over a SparseAxisArray returns a SparseAxisArray","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> swap(x::Tuple) = (last(x), first(x))\nswap (generic function with 1 method)\n\njulia> swap.(y)\nJuMP.Containers.SparseAxisArray{Tuple{Symbol, Int64}, 1, Tuple{Int64}} with 2 entries:\n [2] = (:B, 2)\n [3] = (:B, 3)","category":"page"},{"location":"manual/containers/#Tables-3","page":"Containers","title":"Tables","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Use Containers.rowtable to convert the SparseAxisArray into a Tables.jl compatible Vector{<:NamedTuple}:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> table = Containers.rowtable(x; header = [:I, :J, :value])\n4-element Vector{@NamedTuple{I::Int64, J::Symbol, value::Tuple{Int64, Symbol}}}:\n (I = 2, J = :A, value = (2, :A))\n (I = 2, J = :B, value = (2, :B))\n (I = 3, J = :A, value = (3, :A))\n (I = 3, J = :B, value = (3, :B))","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Because it supports the Tables.jl interface, you can pass it to any function which accepts a table as input:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> import DataFrames;\n\njulia> DataFrames.DataFrame(table)\n4×3 DataFrame\n Row │ I J value\n │ Int64 Symbol Tuple…\n─────┼────────────────────────\n 1 │ 2 A (2, :A)\n 2 │ 2 B (2, :B)\n 3 │ 3 A (3, :A)\n 4 │ 3 B (3, :B)","category":"page"},{"location":"manual/containers/#Keyword-indexing-2","page":"Containers","title":"Keyword indexing","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"If all axes are named, you can use keyword indexing:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> x[i = 2, j = :A]\n(2, :A)\n\njulia> x[i = :, j = :B]\nJuMP.Containers.SparseAxisArray{Tuple{Int64, Symbol}, 1, Tuple{Int64}} with 2 entries:\n [2] = (2, :B)\n [3] = (3, :B)","category":"page"},{"location":"manual/containers/#Forcing-the-container-type","page":"Containers","title":"Forcing the container type","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Pass container = T to use T as the container. For example:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Containers.@container([i = 1:2, j = 1:2], i + j, container = Array)\n2×2 Matrix{Int64}:\n 2 3\n 3 4\n\njulia> Containers.@container([i = 1:2, j = 1:2], i + j, container = Dict)\nDict{Tuple{Int64, Int64}, Int64} with 4 entries:\n (1, 2) => 3\n (1, 1) => 2\n (2, 2) => 4\n (2, 1) => 3","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"You can also pass DenseAxisArray or SparseAxisArray.","category":"page"},{"location":"manual/containers/#How-different-container-types-are-chosen","page":"Containers","title":"How different container types are chosen","text":"","category":"section"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"If the compiler can prove at compile time that the index sets are rectangular, and indexed by a compact set of integers that start at 1, Containers.@container will return an array. This is the case if your index sets are visible to the macro as 1:n:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Containers.@container([i=1:3, j=1:5], i + j)\n3×5 Matrix{Int64}:\n 2 3 4 5 6\n 3 4 5 6 7\n 4 5 6 7 8","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"or an instance of Base.OneTo:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> set = Base.OneTo(3)\nBase.OneTo(3)\n\njulia> Containers.@container([i=set, j=1:5], i + j)\n3×5 Matrix{Int64}:\n 2 3 4 5 6\n 3 4 5 6 7\n 4 5 6 7 8","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"If the compiler can prove that the index set is rectangular, but not necessarily of the form 1:n at compile time, then a Containers.DenseAxisArray will be constructed instead:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> set = 1:3\n1:3\n\njulia> Containers.@container([i=set, j=1:5], i + j)\n2-dimensional DenseAxisArray{Int64,2,...} with index sets:\n Dimension 1, 1:3\n Dimension 2, Base.OneTo(5)\nAnd data, a 3×5 Matrix{Int64}:\n 2 3 4 5 6\n 3 4 5 6 7\n 4 5 6 7 8","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"info: Info\nWhat happened here? Although we know that set contains 1:3, at compile time the typeof(set) is a UnitRange{Int}. Therefore, Julia can't prove that the range starts at 1 (it only finds this out at runtime), and it defaults to a DenseAxisArray. The case where we explicitly wrote i = 1:3 worked because the macro can \"see\" the 1 at compile time.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"However, if you know that the indices do form an Array, you can force the container type with container = Array:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> set = 1:3\n1:3\n\njulia> Containers.@container([i=set, j=1:5], i + j, container = Array)\n3×5 Matrix{Int64}:\n 2 3 4 5 6\n 3 4 5 6 7\n 4 5 6 7 8","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Here's another example with something similar:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> a = 1\n1\n\njulia> Containers.@container([i=a:3, j=1:5], i + j)\n2-dimensional DenseAxisArray{Int64,2,...} with index sets:\n Dimension 1, 1:3\n Dimension 2, Base.OneTo(5)\nAnd data, a 3×5 Matrix{Int64}:\n 2 3 4 5 6\n 3 4 5 6 7\n 4 5 6 7 8\n\njulia> Containers.@container([i=1:a, j=1:5], i + j)\n1×5 Matrix{Int64}:\n 2 3 4 5 6","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"Finally, if the compiler cannot prove that the index set is rectangular, a Containers.SparseAxisArray will be created.","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"This occurs when some indices depend on a previous one:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Containers.@container([i=1:3, j=1:i], i + j)\nJuMP.Containers.SparseAxisArray{Int64, 2, Tuple{Int64, Int64}} with 6 entries:\n [1, 1] = 2\n [2, 1] = 3\n [2, 2] = 4\n [3, 1] = 4\n [3, 2] = 5\n [3, 3] = 6","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"or if there is a condition on the index sets:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> Containers.@container([i = 1:5; isodd(i)], i^2)\nJuMP.Containers.SparseAxisArray{Int64, 1, Tuple{Int64}} with 3 entries:\n [1] = 1\n [3] = 9\n [5] = 25","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"The condition can depend on multiple indices, the only requirement is that it is an expression that returns true or false:","category":"page"},{"location":"manual/containers/","page":"Containers","title":"Containers","text":"julia> condition(i, j) = isodd(i) && iseven(j)\ncondition (generic function with 1 method)\n\njulia> Containers.@container([i = 1:2, j = 1:4; condition(i, j)], i + j)\nJuMP.Containers.SparseAxisArray{Int64, 2, Tuple{Int64, Int64}} with 2 entries:\n [1, 2] = 3\n [1, 4] = 5","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/manual/solutions.md\"","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/manual/solutions/#manual_solutions","page":"Solutions","title":"Solutions","text":"","category":"section"},{"location":"moi/manual/solutions/#Solving-and-retrieving-the-results","page":"Solutions","title":"Solving and retrieving the results","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Once an optimizer is loaded with the objective function and all of the constraints, we can ask the solver to solve the model by calling optimize!.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"MOI.optimize!(optimizer)","category":"page"},{"location":"moi/manual/solutions/#Why-did-the-solver-stop?","page":"Solutions","title":"Why did the solver stop?","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"The optimization procedure may stop for a number of reasons. The TerminationStatus attribute of the optimizer returns a TerminationStatusCode object which explains why the solver stopped.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"The termination statuses distinguish between proofs of optimality, infeasibility, local convergence, limits, and termination because of something unexpected like invalid problem data or failure to converge.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"A typical usage of the TerminationStatus attribute is as follows:","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"status = MOI.get(optimizer, TerminationStatus())\nif status == MOI.OPTIMAL\n # Ok, we solved the problem!\nelse\n # Handle other cases.\nend","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"After checking the TerminationStatus, check ResultCount. This attribute returns the number of results that the solver has available to return. A result is defined as a primal-dual pair, but either the primal or the dual may be missing from the result. While the OPTIMAL termination status normally implies that at least one result is available, other statuses do not. For example, in the case of infeasibility, a solver may return no result or a proof of infeasibility. The ResultCount attribute distinguishes between these two cases.","category":"page"},{"location":"moi/manual/solutions/#Primal-solutions","page":"Solutions","title":"Primal solutions","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Use the PrimalStatus optimizer attribute to return a ResultStatusCode describing the status of the primal solution.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Common returns are described below in the Common status situations section.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Query the primal solution using the VariablePrimal and ConstraintPrimal attributes.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Query the objective function value using the ObjectiveValue attribute.","category":"page"},{"location":"moi/manual/solutions/#Dual-solutions","page":"Solutions","title":"Dual solutions","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"warning: Warning\nSee Duality for a discussion of the MOI conventions for primal-dual pairs and certificates.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Use the DualStatus optimizer attribute to return a ResultStatusCode describing the status of the dual solution.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Query the dual solution using the ConstraintDual attribute.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Query the dual objective function value using the DualObjectiveValue attribute.","category":"page"},{"location":"moi/manual/solutions/#Common-status-situations","page":"Solutions","title":"Common status situations","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"The sections below describe how to interpret typical or interesting status cases for three common classes of solvers. The example cases are illustrative, not comprehensive. Solver wrappers may provide additional information on how the solver's statuses map to MOI statuses.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"info: Info\n* in the tables indicate that multiple different values are possible.","category":"page"},{"location":"moi/manual/solutions/#Primal-dual-convex-solver","page":"Solutions","title":"Primal-dual convex solver","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Linear programming and conic optimization solvers fall into this category.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"What happened? TerminationStatus ResultCount PrimalStatus DualStatus\nProved optimality OPTIMAL 1 FEASIBLE_POINT FEASIBLE_POINT\nProved infeasible INFEASIBLE 1 NO_SOLUTION INFEASIBILITY_CERTIFICATE\nOptimal within relaxed tolerances ALMOST_OPTIMAL 1 FEASIBLE_POINT FEASIBLE_POINT\nOptimal within relaxed tolerances ALMOST_OPTIMAL 1 ALMOST_FEASIBLE_POINT ALMOST_FEASIBLE_POINT\nDetected an unbounded ray of the primal DUAL_INFEASIBLE 1 INFEASIBILITY_CERTIFICATE NO_SOLUTION\nStall SLOW_PROGRESS 1 * *","category":"page"},{"location":"moi/manual/solutions/#Global-branch-and-bound-solvers","page":"Solutions","title":"Global branch-and-bound solvers","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Mixed-integer programming solvers fall into this category.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"What happened? TerminationStatus ResultCount PrimalStatus DualStatus\nProved optimality OPTIMAL 1 FEASIBLE_POINT NO_SOLUTION\nPresolve detected infeasibility or unboundedness INFEASIBLE_OR_UNBOUNDED 0 NO_SOLUTION NO_SOLUTION\nProved infeasibility INFEASIBLE 0 NO_SOLUTION NO_SOLUTION\nTimed out (no solution) TIME_LIMIT 0 NO_SOLUTION NO_SOLUTION\nTimed out (with a solution) TIME_LIMIT 1 FEASIBLE_POINT NO_SOLUTION\nCPXMIP_OPTIMAL_INFEAS ALMOST_OPTIMAL 1 INFEASIBLE_POINT NO_SOLUTION","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"info: Info\nCPXMIP_OPTIMAL_INFEAS is a CPLEX status that indicates that a preprocessed problem was solved to optimality, but the solver was unable to recover a feasible solution to the original problem. Handling this status was one of the motivating drivers behind the design of MOI.","category":"page"},{"location":"moi/manual/solutions/#Local-search-solvers","page":"Solutions","title":"Local search solvers","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Nonlinear programming solvers fall into this category. It also includes non-global tree search solvers like Juniper.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"What happened? TerminationStatus ResultCount PrimalStatus DualStatus\nConverged to a stationary point LOCALLY_SOLVED 1 FEASIBLE_POINT FEASIBLE_POINT\nCompleted a non-global tree search (with a solution) LOCALLY_SOLVED 1 FEASIBLE_POINT FEASIBLE_POINT\nConverged to an infeasible point LOCALLY_INFEASIBLE 1 INFEASIBLE_POINT *\nCompleted a non-global tree search (no solution found) LOCALLY_INFEASIBLE 0 NO_SOLUTION NO_SOLUTION\nIteration limit ITERATION_LIMIT 1 * *\nDiverging iterates NORM_LIMIT or OBJECTIVE_LIMIT 1 * *","category":"page"},{"location":"moi/manual/solutions/#Querying-solution-attributes","page":"Solutions","title":"Querying solution attributes","text":"","category":"section"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"Some solvers will not implement every solution attribute. Therefore, a call like MOI.get(model, MOI.SolveTimeSec()) may throw an UnsupportedAttribute error.","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"If you need to write code that is agnostic to the solver (for example, you are writing a library that an end-user passes their choice of solver to), you can work-around this problem using a try-catch:","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"function get_solve_time(model)\n try\n return MOI.get(model, MOI.SolveTimeSec())\n catch err\n if err isa MOI.UnsupportedAttribute\n return NaN # Solver doesn't support. Return a placeholder value.\n end\n rethrow(err) # Something else went wrong. Rethrow the error\n end\nend","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"If, after careful profiling, you find that the try-catch is taking a significant portion of your runtime, you can improve performance by caching the result of the try-catch:","category":"page"},{"location":"moi/manual/solutions/","page":"Solutions","title":"Solutions","text":"mutable struct CachedSolveTime{M}\n model::M\n supports_solve_time::Bool\n CachedSolveTime(model::M) where {M} = new(model, true)\nend\n\nfunction get_solve_time(model::CachedSolveTime)\n if !model.supports_solve_time\n return NaN\n end\n try\n return MOI.get(model, MOI.SolveTimeSec())\n catch err\n if err isa MOI.UnsupportedAttribute\n model.supports_solve_time = false\n return NaN\n end\n rethrow(err) # Something else went wrong. Rethrow the error\n end\nend","category":"page"},{"location":"tutorials/getting_started/introduction/#Introduction","page":"Introduction","title":"Introduction","text":"","category":"section"},{"location":"tutorials/getting_started/introduction/","page":"Introduction","title":"Introduction","text":"The purpose of these \"Getting started\" tutorials is to teach new users the basics of Julia and JuMP.","category":"page"},{"location":"tutorials/getting_started/introduction/#How-these-tutorials-are-structured","page":"Introduction","title":"How these tutorials are structured","text":"","category":"section"},{"location":"tutorials/getting_started/introduction/","page":"Introduction","title":"Introduction","text":"Having a high-level overview of how this part of the documentation is structured will help you know where to look for certain things.","category":"page"},{"location":"tutorials/getting_started/introduction/","page":"Introduction","title":"Introduction","text":"The \"Getting started with\" tutorials are basic introductions to different aspects of JuMP and Julia. If you are new to JuMP and Julia, start by reading them in the following order:\nGetting started with Julia\nGetting started with JuMP\nGetting started with sets and indexing\nGetting started with data and plotting\nJulia has a reputation for being \"fast.\" Unfortunately, it is also easy to write slow Julia code. Performance tips contains a number of important tips on how to improve the performance of models you write in JuMP.\nDesign patterns for larger models is a more advanced tutorial that is aimed at users writing large JuMP models. It's in the \"Getting started\" section to give you an early preview of how JuMP makes it easy to structure larger models. If you are new to JuMP you may want to skip or briefly skim this tutorial, and come back to it once you have written a few JuMP models.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"EditURL = \"two_stage_stochastic.jl\"","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#Two-stage-stochastic-programs","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"The purpose of this tutorial is to demonstrate how to model and solve a two-stage stochastic program.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"info: Info\nThe JuMP extension InfiniteOpt.jl can also be used to model and solve two-stage stochastic programs. The JuMP extension SDDP.jl can be used to model and solve multi-stage stochastic programs.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"This tutorial uses the following packages","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"using JuMP\nimport Distributions\nimport HiGHS\nimport Plots\nimport StatsPlots\nimport Statistics","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#Background","page":"Two-stage stochastic programs","title":"Background","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"During the week, you are a busy practitioner of Operations Research. To escape the drudgery of mathematics, you decide to open a side business selling creamy mushroom pies with puff pastry. After a few weeks, it quickly becomes apparent that operating a food business is not so easy.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"The pies must be prepared in the morning, before you open for the day and can gauge the level of demand. If you bake too many, the unsold pies at the end of the day must be discarded and you have wasted time and money on their production. But if you bake too few, then there may be un-served customers and you could have made more money by baking more pies.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"After a few weeks of poor decision making, you decide to put your knowledge of Operations Research to good use, starting with some data collection.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Each pie costs you $2 to make, and you sell them at $5 each. Disposal of an unsold pie costs $0.10. Based on three weeks of data collected, in which you made 200 pies each week, you sold 150, 190, and 200 pies. Thus, as a guess, you assume a triangular distribution of demand with a minimum of 150, a median of 200, and a maximum of 250.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"We can model this problem by a two-stage stochastic program. In the first stage, we decide a quantity of pies to make x. We make this decision before we observe the demand d_omega. In the second stage, we sell y_omega pies, and incur any costs for unsold pies.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"We can formulate this problem as follows:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"beginaligned\nmaxlimits_xy_omega -2x + mathbbE_omega5y_omega - 01(x - y_omega) \n y_omega le x quad forall omega in Omega \n 0 le y_omega le d_omega quad forall omega in Omega \n x ge 0\nendaligned","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#Sample-Average-approximation","page":"Two-stage stochastic programs","title":"Sample Average approximation","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"If the distribution of demand is continuous, then our problem has an infinite number of variables and constraints. To form a computationally tractable problem, we instead use a finite set of samples drawn from the distribution. This is called sample average approximation (SAA).","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"D = Distributions.TriangularDist(150.0, 250.0, 200.0)\nN = 100\nd = sort!(rand(D, N));\nΩ = 1:N\nP = fill(1 / N, N);\nStatsPlots.histogram(d; bins = 20, label = \"\", xlabel = \"Demand\")","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#JuMP-model","page":"Two-stage stochastic programs","title":"JuMP model","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"The implementation of our two-stage stochastic program in JuMP is:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"model = Model(HiGHS.Optimizer)\nset_silent(model)\n@variable(model, x >= 0)\n@variable(model, 0 <= y[ω in Ω] <= d[ω])\n@constraint(model, [ω in Ω], y[ω] <= x)\n@expression(model, z[ω in Ω], 5y[ω] - 0.1 * (x - y[ω]))\n@objective(model, Max, -2x + sum(P[ω] * z[ω] for ω in Ω))\noptimize!(model)\n@assert is_solved_and_feasible(model)\nsolution_summary(model)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"The optimal number of pies to make is:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"value(x)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"The distribution of total profit is:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"total_profit = [-2 * value(x) + value(z[ω]) for ω in Ω]","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Let's plot it:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"\"\"\"\n bin_distribution(x::Vector{Float64}, N::Int)\n\nA helper function that discretizes `x` into bins of width `N`.\n\"\"\"\nbin_distribution(x, N) = N * (floor(minimum(x) / N):ceil(maximum(x) / N))\n\nplot = StatsPlots.histogram(\n total_profit;\n bins = bin_distribution(total_profit, 25),\n label = \"\",\n xlabel = \"Profit [\\$]\",\n ylabel = \"Number of outcomes\",\n)\nμ = Statistics.mean(total_profit)\nPlots.vline!(\n plot,\n [μ];\n label = \"Expected profit (\\$$(round(Int, μ)))\",\n linewidth = 3,\n)\nplot","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#Risk-measures","page":"Two-stage stochastic programs","title":"Risk measures","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"A risk measure is a function which maps a random variable to a real number. Common risk measures include the mean (expectation), median, mode, and maximum. We need a risk measure to convert the distribution of second stage costs into a single number that can be optimized.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Our model currently uses the expectation risk measure, but others are possible too. One popular risk measure is the conditional value at risk (CVaR).","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"CVaR has a parameter gamma, and it computes the expectation of the worst gamma fraction of outcomes.","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"If we are maximizing, so that small outcomes are bad, the definition of CVaR is:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"CVaR_gammaZ = maxlimits_xi xi - frac1gammamathbbE_omegaleft(xi - Z)_+right","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"which can be formulated as the linear program:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"beginaligned\nCVaR_gammaZ = maxlimits_xi z_omega xi - frac1gammasum P_omega z_omega\n z_omega ge xi - Z_omega quad forall omega \n z_omega ge 0 quad forall omega\nendaligned","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"function CVaR(Z::Vector{Float64}, P::Vector{Float64}; γ::Float64)\n @assert 0 < γ <= 1\n N = length(Z)\n model = Model(HiGHS.Optimizer)\n set_silent(model)\n @variable(model, ξ)\n @variable(model, z[1:N] >= 0)\n @constraint(model, [i in 1:N], z[i] >= ξ - Z[i])\n @objective(model, Max, ξ - 1 / γ * sum(P[i] * z[i] for i in 1:N))\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return objective_value(model)\nend","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"When γ is 1.0, we compute the mean of the profit:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"cvar_10 = CVaR(total_profit, P; γ = 1.0)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Statistics.mean(total_profit)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"As γ approaches 0.0, we compute the worst-case (minimum) profit:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"cvar_00 = CVaR(total_profit, P; γ = 0.0001)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"minimum(total_profit)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"By varying γ between 0 and 1 we can compute some trade-off of these two extremes:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"cvar_05 = CVaR(total_profit, P; γ = 0.5)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Let's plot these outcomes on our distribution:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"plot = StatsPlots.histogram(\n total_profit;\n bins = bin_distribution(total_profit, 25),\n label = \"\",\n xlabel = \"Profit [\\$]\",\n ylabel = \"Number of outcomes\",\n)\nPlots.vline!(\n plot,\n [cvar_10 cvar_05 cvar_00];\n label = [\"γ = 1.0\" \"γ = 0.5\" \"γ = 0.0\"],\n linewidth = 3,\n)\nplot","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#Risk-averse-sample-average-approximation","page":"Two-stage stochastic programs","title":"Risk averse sample average approximation","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Because CVaR can be formulated as a linear program, we can form a risk averse sample average approximation model by combining the two formulations:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"γ = 0.4\nmodel = Model(HiGHS.Optimizer)\nset_silent(model)\n@variable(model, x >= 0)\n@variable(model, 0 <= y[ω in Ω] <= d[ω])\n@constraint(model, [ω in Ω], y[ω] <= x)\n@expression(model, Z[ω in Ω], 5 * y[ω] - 0.1(x - y[ω]))\n@variable(model, ξ)\n@variable(model, z[ω in Ω] >= 0)\n@constraint(model, [ω in Ω], z[ω] >= ξ - Z[ω])\n@objective(model, Max, -2x + ξ - 1 / γ * sum(P[ω] * z[ω] for ω in Ω))\noptimize!(model)\n@assert is_solved_and_feasible(model)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"When gamma = 04, the optimal number of pies to bake is:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"value(x)","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"The distribution of total profit is:","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"risk_averse_total_profit = [value(-2x + Z[ω]) for ω in Ω]\nbins = bin_distribution([total_profit; risk_averse_total_profit], 25)\nplot = StatsPlots.histogram(total_profit; label = \"Expectation\", bins = bins)\nStatsPlots.histogram!(\n plot,\n risk_averse_total_profit;\n label = \"CV@R\",\n bins = bins,\n alpha = 0.5,\n)\nplot","category":"page"},{"location":"tutorials/applications/two_stage_stochastic/#Next-steps","page":"Two-stage stochastic programs","title":"Next steps","text":"","category":"section"},{"location":"tutorials/applications/two_stage_stochastic/","page":"Two-stage stochastic programs","title":"Two-stage stochastic programs","text":"Try solving this problem for different numbers of samples and different distributions.\nRefactor the example to avoid hard-coding the costs. What happens to the solution if the cost of disposing unsold pies increases?\nPlot the optimal number of pies to make for different values of the risk aversion parameter gamma. What is the relationship?","category":"page"},{"location":"packages/solvers/#Introduction","page":"Introduction","title":"Introduction","text":"","category":"section"},{"location":"packages/solvers/","page":"Introduction","title":"Introduction","text":"This section of the documentation contains brief documentation for some of the solvers that JuMP supports. The list of solvers is not exhaustive, but instead is intended to help you discover commonly used solvers.","category":"page"},{"location":"packages/solvers/#Affiliation","page":"Introduction","title":"Affiliation","text":"","category":"section"},{"location":"packages/solvers/","page":"Introduction","title":"Introduction","text":"Packages beginning with jump-dev/ are developed and maintained by the JuMP developers. In many cases, these packages wrap external solvers that are not developed by the JuMP developers and, while the Julia packages are all open-source, in some cases the solvers themselves are closed source commercial products.","category":"page"},{"location":"packages/solvers/","page":"Introduction","title":"Introduction","text":"Packages that do not begin with jump-dev/ are developed independently. The developers of these packages requested or consented to the inclusion of their README contents in the JuMP documentation for the benefit of users.","category":"page"},{"location":"packages/solvers/#Adding-new-solvers","page":"Introduction","title":"Adding new solvers","text":"","category":"section"},{"location":"packages/solvers/","page":"Introduction","title":"Introduction","text":"Written a solver? Add it to this section of the JuMP documentation by making a pull request to the docs/packages.toml file.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"EditURL = \"rolling_horizon.jl\"","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#Rolling-horizon-problems","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"This tutorial was originally contributed by Diego Tejada.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"The purpose of this tutorial is to demonstrate how to use ParametricOptInterface.jl to solve a rolling horizon optimization problem.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"The term \"rolling horizon\" refers to solving a time-dependent model repeatedly, where the planning interval is shifted forward in time during each solution step.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"As a motivating example, this tutorial models the operations of a power system with solar generation and a battery.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#Required-packages","page":"Rolling horizon problems","title":"Required packages","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"This tutorial uses the following packages","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"using JuMP\nimport CSV\nimport DataFrames\nimport HiGHS\nimport ParametricOptInterface as POI\nimport Plots","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#The-optimization-model","page":"Rolling horizon problems","title":"The optimization model","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"The model is a simplified model of a power system's operations with battery storage.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"We model the system of a set of time-steps t in 1ldotsT, where each time step is a period of one hour.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"There are five types of decision variables in the model:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Renewable production: r_t geq 0\nThermal production: 0 leq p_t leq overlineP\nStorage level: 0 leq s_t leq overlineS\nStorage charging: 0 leq c_t leq overlineC\nStorage discharging: 0 leq d_t leq overlineD","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"For the purpose of this tutorial, there are three parameters of interest:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Demand at time t: D_t\nRenewable availability at time t: A_t\nInitial storage: S_0","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"The objective function to minimize is the total cost of thermal generation:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"min sum_t O cdot p_t","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"For the constraints, we must balance power generation and consumption in all time periods:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"p_t + r_t + d_t = D_t + c_t forall t","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"We need to account for the dynamics of the battery storage:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"s_t = s_t-1 + eta^c cdot c_t - fracd_teta^d forall t","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"with the boundary condition that s_0 = S_0.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Finally, the level of renewable energy production is limited by the quantity of potential solar generation A:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"r_t leq A_t quad forall t","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Solving this problem with a large number of time steps is computationally challenging. A common practice is to use the rolling horizon idea to solve multiple identical problems of a smaller size. These problems differ only in parameters such as demand, renewable availability, and initial storage. By combining the solution of many smaller problems, we can recover a feasible solution to the full problem. However, because we don't optimize the full set of decisions in a single optimization problem, the recovered solution might be suboptimal.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#Parameter-definition-and-input-data","page":"Rolling horizon problems","title":"Parameter definition and input data","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"There are two main parameters for a rolling horizon implementation: the optimization window and the move forward.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Optimization Window: this value defines how many periods (for example, hours) we will optimize each time. For this example, we set the default value to 48 hours, meaning we will optimize two days each time.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"optimization_window = 48;\nnothing #hide","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Move Forward: this value defines how many periods (for example, hours) we will move forward to optimize the next optimization window. For this example, we set the default value in 24 hours, meaning we will move one day ahead each time.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"move_forward = 24;\nnothing #hide","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Note that the move forward parameter must be lower or equal to the optimization window parameter to work correctly.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"@assert optimization_window >= move_forward","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Let's explore the input data in file rolling_horizon.csv. We have a total time horizon of a week (that is, 168 hours), an electricity demand, and a solar production profile.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"filename = joinpath(@__DIR__, \"rolling_horizon.csv\")\ntime_series = CSV.read(filename, DataFrames.DataFrame)\ntime_series[1:21:end, :]","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"We define the solar investment (for example, 150 MW) to determine the solar production during the operation optimization step.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"solar_investment = 150;\nnothing #hide","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"We multiply the level of solar investment by the time series of availability to get actual MW generated.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"time_series.solar_MW = solar_investment * time_series.solar_pu;\nnothing #hide","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"In addition, we can determine some basic information about the rolling horizon, such as the number of data points we have:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"total_time_length = size(time_series, 1)","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"and the number of windows that we are going to optimize given the problem's time horizon:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"(total_time_length + move_forward - optimization_window) / move_forward","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Finally, we can see a plot representing the first two optimization windows and the move forward parameter to have a better idea of how the rolling horizon works.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"x_series = 1:total_time_length\ny_series = [time_series.demand_MW, time_series.solar_MW]\nplot_1 = Plots.plot(x_series, y_series; label = [\"demand\" \"solar\"])\nplot_2 = Plots.plot(x_series, y_series; label = false)\nwindow = [0, optimization_window]\nPlots.vspan!(plot_1, window; alpha = 0.25, label = false)\nPlots.vspan!(plot_2, move_forward .+ window; alpha = 0.25, label = false)\ntext_1 = Plots.text(\"optimization\\n window 1\", :top, :left, 8)\nPlots.annotate!(plot_1, 18, time_series.solar_MW[12], text_1)\ntext_2 = Plots.text(\"optimization\\n window 2\", :top, :left, 8)\nPlots.annotate!(plot_2, 42, time_series.solar_MW[12], text_2)\nPlots.plot(\n plot_1,\n plot_2;\n layout = (2, 1),\n linewidth = 3,\n xticks = 0:12:total_time_length,\n xlabel = \"Hours\",\n ylabel = \"MW\",\n)","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#JuMP-model","page":"Rolling horizon problems","title":"JuMP model","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"We have all the information we need to create a JuMP model to solve a single window of our rolling horizon problem.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"As the optimizer, we use POI.Optimizer, which is part of ParametricOptInterface.jl. POI.Optimizer converts the Parameter decision variables into constants in the underlying optimization model, and it efficiently updates the solver in-place when we call set_parameter_value which avoids having to rebuild the problem each time we call optimize!.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"model = Model(() -> POI.Optimizer(HiGHS.Optimizer()))\nset_silent(model)\n@variables(model, begin\n 0 <= r[1:optimization_window]\n 0 <= p[1:optimization_window] <= 150\n 0 <= s[1:optimization_window] <= 40\n 0 <= c[1:optimization_window] <= 10\n 0 <= d[1:optimization_window] <= 10\n # Initialize empty parameters. These values will get updated later\n D[t in 1:optimization_window] in Parameter(0)\n A[t in 1:optimization_window] in Parameter(0)\n S_0 in Parameter(0)\nend)\n@objective(model, Min, 50 * sum(p))\n@constraints(\n model,\n begin\n p .+ r .+ d .== D .+ c\n s[1] == S_0 + 0.9 * c[1] - d[1] / 0.9\n [t in 2:optimization_window], s[t] == s[t-1] + 0.9 * c[t] - d[t] / 0.9\n r .<= A\n end\n)\nmodel","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"After the optimization, we can store the results in vectors. It's important to note that despite optimizing for 48 hours (the default value), we only store the values for the \"move forward\" parameter (for example, 24 hours or one day using the default value). This approach ensures that there is a buffer of additional periods or hours beyond the \"move forward\" parameter to prevent the storage from depleting entirely at the end of the specified hours.","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"sol_complete = Dict(\n :r => zeros(total_time_length),\n :p => zeros(total_time_length),\n :c => zeros(total_time_length),\n :d => zeros(total_time_length),\n # The storage level is initialized with an initial value\n :s => zeros(total_time_length + 1),\n)\nsol_windows = Pair{Int,Dict{Symbol,Vector{Float64}}}[]","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Now we can iterate across the windows of our rolling horizon problem, and at each window, we:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"update the parameters in the models\nsolve the model for that window\nstore the results for later analysis","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"offsets = 0:move_forward:total_time_length-optimization_window\nfor offset in offsets\n # Step 1: update the parameter values over the optimization_window\n for t in 1:optimization_window\n set_parameter_value(model[:D][t], time_series[offset+t, :demand_MW])\n set_parameter_value(model[:A][t], time_series[offset+t, :solar_MW])\n end\n # Set the starting storage level as the value from the end of the previous\n # solve. The `+1` accounts for the initial storage value in time step \"t=0\"\n set_parameter_value(model[:S_0], sol_complete[:s][offset+1])\n # Step 2: solve the model\n optimize!(model)\n # Step 3: store the results of the move_forward values, except in the last\n # horizon where we store the full `optimization_window`.\n for t in 1:(offset == last(offsets) ? optimization_window : move_forward)\n for key in (:r, :p, :c, :d)\n sol_complete[key][offset+t] = value(model[key][t])\n end\n sol_complete[:s][offset+t+1] = value(model[:s][t])\n end\n sol_window = Dict(key => value.(model[key]) for key in (:r, :p, :s, :c, :d))\n push!(sol_windows, offset => sol_window)\nend","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#Solution","page":"Rolling horizon problems","title":"Solution","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"Here is a function to plot the solution at each of the time-steps to help visualize the rolling horizon scheme:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"function plot_solution(sol; offset = 0, kwargs...)\n plot = Plots.plot(;\n ylabel = \"MW\",\n xlims = (0, total_time_length),\n xticks = 0:12:total_time_length,\n kwargs...,\n )\n y = hcat(sol[:p], sol[:r], sol[:d])\n x = offset .+ (1:size(y, 1))\n if offset == 0\n Plots.areaplot!(x, y; label = [\"thermal\" \"solar\" \"discharge\"])\n Plots.areaplot!(x, -sol[:c]; label = \"charge\")\n else\n Plots.areaplot!(x, y; label = false)\n Plots.areaplot!(x, -sol[:c]; label = false)\n end\n return plot\nend\n\nPlots.plot(\n [plot_solution(sol; offset) for (offset, sol) in sol_windows]...;\n layout = (length(sol_windows), 1),\n size = (600, 800),\n margin = 3Plots.mm,\n)","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"We can re-use the function to plot the recovered solution of the full problem:","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"plot_solution(sol_complete; offset = 0, xlabel = \"Hour\")","category":"page"},{"location":"tutorials/algorithms/rolling_horizon/#Final-remark","page":"Rolling horizon problems","title":"Final remark","text":"","category":"section"},{"location":"tutorials/algorithms/rolling_horizon/","page":"Rolling horizon problems","title":"Rolling horizon problems","text":"ParametricOptInterface.jl offers an easy way to update the parameters of an optimization problem that will be solved several times, as in the rolling horizon implementation. It has the benefit of avoiding rebuilding the model each time we want to solve it with new information in a new window.","category":"page"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/reference/models.md\"","category":"page"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/reference/models/#Models","page":"Models","title":"Models","text":"","category":"section"},{"location":"moi/reference/models/#Attribute-interface","page":"Models","title":"Attribute interface","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"is_set_by_optimize\nis_copyable\nget\nget!\nset\nsupports\nattribute_value_type","category":"page"},{"location":"moi/reference/models/#MathOptInterface.is_set_by_optimize","page":"Models","title":"MathOptInterface.is_set_by_optimize","text":"is_set_by_optimize(::AnyAttribute)\n\nReturn a Bool indicating whether the value of the attribute is set during an optimize! call, that is, the attribute is used to query the result of the optimization.\n\nIf an attribute can be set by the user, define is_copyable instead.\n\nAn attribute cannot be both is_copyable and is_set_by_optimize.\n\nDefault fallback\n\nThis function returns false by default so it should be implemented for attributes that are set by optimize!.\n\nUndefined behavior\n\nQuerying the value of the attribute that is_set_by_optimize before a call to optimize! is undefined and depends on solver-specific behavior.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.is_copyable","page":"Models","title":"MathOptInterface.is_copyable","text":"is_copyable(::AnyAttribute)\n\nReturn a Bool indicating whether the value of the attribute may be copied during copy_to using set.\n\nIf an attribute is_copyable, then it cannot be modified by the optimizer, and get must always return the value that was set by the user.\n\nIf an attribute is the result of an optimization, define is_set_by_optimize instead.\n\nAn attribute cannot be both is_set_by_optimize and is_copyable.\n\nDefault fallback\n\nBy default is_copyable(attr) returns !is_set_by_optimize(attr), which is most probably true.\n\nIf an attribute should not be copied, define is_copyable(::MyAttribute) = false.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.get","page":"Models","title":"MathOptInterface.get","text":"MOI.get(b::AbstractBridge, ::MOI.NumberOfVariables)::Int64\n\nReturn the number of variables created by the bridge b in the model.\n\nSee also MOI.NumberOfConstraints.\n\nImplementation notes\n\nThere is a default fallback, so you need only implement this if the bridge adds new variables.\n\n\n\n\n\nMOI.get(b::AbstractBridge, ::MOI.ListOfVariableIndices)\n\nReturn the list of variables created by the bridge b.\n\nSee also MOI.ListOfVariableIndices.\n\nImplementation notes\n\nThere is a default fallback, so you need only implement this if the bridge adds new variables.\n\n\n\n\n\nMOI.get(b::AbstractBridge, ::MOI.NumberOfConstraints{F,S})::Int64 where {F,S}\n\nReturn the number of constraints of the type F-in-S created by the bridge b.\n\nSee also MOI.NumberOfConstraints.\n\nImplementation notes\n\nThere is a default fallback, so you need only implement this for the constraint types returned by added_constraint_types.\n\n\n\n\n\nMOI.get(b::AbstractBridge, ::MOI.ListOfConstraintIndices{F,S}) where {F,S}\n\nReturn a Vector{ConstraintIndex{F,S}} with indices of all constraints of type F-in-S created by the bride b.\n\nSee also MOI.ListOfConstraintIndices.\n\nImplementation notes\n\nThere is a default fallback, so you need only implement this for the constraint types returned by added_constraint_types.\n\n\n\n\n\nfunction MOI.get(\n model::MOI.ModelLike,\n attr::MOI.AbstractConstraintAttribute,\n bridge::AbstractBridge,\n)\n\nReturn the value of the attribute attr of the model model for the constraint bridged by bridge.\n\n\n\n\n\nget(model::GenericModel, attr::MathOptInterface.AbstractOptimizerAttribute)\n\nReturn the value of the attribute attr from the model's MOI backend.\n\n\n\n\n\nget(model::GenericModel, attr::MathOptInterface.AbstractModelAttribute)\n\nReturn the value of the attribute attr from the model's MOI backend.\n\n\n\n\n\nget(optimizer::AbstractOptimizer, attr::AbstractOptimizerAttribute)\n\nReturn an attribute attr of the optimizer optimizer.\n\nget(model::ModelLike, attr::AbstractModelAttribute)\n\nReturn an attribute attr of the model model.\n\nget(model::ModelLike, attr::AbstractVariableAttribute, v::VariableIndex)\n\nIf the attribute attr is set for the variable v in the model model, return its value, return nothing otherwise. If the attribute attr is not supported by model then an error should be thrown instead of returning nothing.\n\nget(model::ModelLike, attr::AbstractVariableAttribute, v::Vector{VariableIndex})\n\nReturn a vector of attributes corresponding to each variable in the collection v in the model model.\n\nget(model::ModelLike, attr::AbstractConstraintAttribute, c::ConstraintIndex)\n\nIf the attribute attr is set for the constraint c in the model model, return its value, return nothing otherwise. If the attribute attr is not supported by model then an error should be thrown instead of returning nothing.\n\nget(\n model::ModelLike,\n attr::AbstractConstraintAttribute,\n c::Vector{ConstraintIndex{F,S}},\n) where {F,S}\n\nReturn a vector of attributes corresponding to each constraint in the collection c in the model model.\n\nget(model::ModelLike, ::Type{VariableIndex}, name::String)\n\nIf a variable with name name exists in the model model, return the corresponding index, otherwise return nothing. Errors if two variables have the same name.\n\nget(\n model::ModelLike,\n ::Type{ConstraintIndex{F,S}},\n name::String,\n) where {F,S}\n\nIf an F-in-S constraint with name name exists in the model model, return the corresponding index, otherwise return nothing. Errors if two constraints have the same name.\n\nget(model::ModelLike, ::Type{ConstraintIndex}, name::String)\n\nIf any constraint with name name exists in the model model, return the corresponding index, otherwise return nothing. This version is available for convenience but may incur a performance penalty because it is not type stable. Errors if two constraints have the same name.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.get!","page":"Models","title":"MathOptInterface.get!","text":"get!(output, model::ModelLike, args...)\n\nAn in-place version of get.\n\nThe signature matches that of get except that the result is placed in the vector output.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.set","page":"Models","title":"MathOptInterface.set","text":"function MOI.set(\n model::MOI.ModelLike,\n attr::MOI.AbstractConstraintAttribute,\n bridge::AbstractBridge,\n value,\n)\n\nSet the value of the attribute attr of the model model for the constraint bridged by bridge.\n\n\n\n\n\nset(optimizer::AbstractOptimizer, attr::AbstractOptimizerAttribute, value)\n\nAssign value to the attribute attr of the optimizer optimizer.\n\nset(model::ModelLike, attr::AbstractModelAttribute, value)\n\nAssign value to the attribute attr of the model model.\n\nset(model::ModelLike, attr::AbstractVariableAttribute, v::VariableIndex, value)\n\nAssign value to the attribute attr of variable v in model model.\n\nset(\n model::ModelLike,\n attr::AbstractVariableAttribute,\n v::Vector{VariableIndex},\n vector_of_values,\n)\n\nAssign a value respectively to the attribute attr of each variable in the collection v in model model.\n\nset(\n model::ModelLike,\n attr::AbstractConstraintAttribute,\n c::ConstraintIndex,\n value,\n)\n\nAssign a value to the attribute attr of constraint c in model model.\n\nset(\n model::ModelLike,\n attr::AbstractConstraintAttribute,\n c::Vector{ConstraintIndex{F,S}},\n vector_of_values,\n) where {F,S}\n\nAssign a value respectively to the attribute attr of each constraint in the collection c in model model.\n\nAn UnsupportedAttribute error is thrown if model does not support the attribute attr (see supports) and a SetAttributeNotAllowed error is thrown if it supports the attribute attr but it cannot be set.\n\nset(\n model::ModelLike,\n ::ConstraintSet,\n c::ConstraintIndex{F,S},\n set::S,\n) where {F,S}\n\nChange the set of constraint c to the new set set which should be of the same type as the original set.\n\nset(\n model::ModelLike,\n ::ConstraintFunction,\n c::ConstraintIndex{F,S},\n func::F,\n) where {F,S}\n\nReplace the function in constraint c with func. F must match the original function type used to define the constraint.\n\nnote: Note\nSetting the constraint function is not allowed if F is VariableIndex; a SettingVariableIndexNotAllowed error is thrown instead. This is because, it would require changing the index c since the index of VariableIndex constraints must be the same as the index of the variable.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.supports","page":"Models","title":"MathOptInterface.supports","text":"MOI.supports(\n model::MOI.ModelLike,\n attr::MOI.AbstractConstraintAttribute,\n BT::Type{<:AbstractBridge},\n)\n\nReturn a Bool indicating whether BT supports setting attr to model.\n\n\n\n\n\nsupports(model::ModelLike, sub::AbstractSubmittable)::Bool\n\nReturn a Bool indicating whether model supports the submittable sub.\n\nsupports(model::ModelLike, attr::AbstractOptimizerAttribute)::Bool\n\nReturn a Bool indicating whether model supports the optimizer attribute attr. That is, it returns false if copy_to(model, src) shows a warning in case attr is in the ListOfOptimizerAttributesSet of src; see copy_to for more details on how unsupported optimizer attributes are handled in copy.\n\nsupports(model::ModelLike, attr::AbstractModelAttribute)::Bool\n\nReturn a Bool indicating whether model supports the model attribute attr. That is, it returns false if copy_to(model, src) cannot be performed in case attr is in the ListOfModelAttributesSet of src.\n\nsupports(\n model::ModelLike,\n attr::AbstractVariableAttribute,\n ::Type{VariableIndex},\n)::Bool\n\nReturn a Bool indicating whether model supports the variable attribute attr. That is, it returns false if copy_to(model, src) cannot be performed in case attr is in the ListOfVariableAttributesSet of src.\n\nsupports(\n model::ModelLike,\n attr::AbstractConstraintAttribute,\n ::Type{ConstraintIndex{F,S}},\n)::Bool where {F,S}\n\nReturn a Bool indicating whether model supports the constraint attribute attr applied to an F-in-S constraint. That is, it returns false if copy_to(model, src) cannot be performed in case attr is in the ListOfConstraintAttributesSet of src.\n\nFor all five methods, if the attribute is only not supported in specific circumstances, it should still return true.\n\nNote that supports is only defined for attributes for which is_copyable returns true as other attributes do not appear in the list of attributes set obtained by ListOfXXXAttributesSet.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.attribute_value_type","page":"Models","title":"MathOptInterface.attribute_value_type","text":"attribute_value_type(attr::AnyAttribute)\n\nGiven an attribute attr, return the type of value expected by get, or returned by set.\n\nNotes\n\nOnly implement this if it make sense to do so. If un-implemented, the default is Any.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#Model-interface","page":"Models","title":"Model interface","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"ModelLike\nis_empty\nempty!\nwrite_to_file\nread_from_file\nsupports_incremental_interface\ncopy_to\nIndexMap","category":"page"},{"location":"moi/reference/models/#MathOptInterface.ModelLike","page":"Models","title":"MathOptInterface.ModelLike","text":"ModelLike\n\nAbstract supertype for objects that implement the \"Model\" interface for defining an optimization problem.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.is_empty","page":"Models","title":"MathOptInterface.is_empty","text":"is_empty(model::ModelLike)\n\nReturns false if the model has any model attribute set or has any variables or constraints.\n\nNote that an empty model can have optimizer attributes set.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.empty!","page":"Models","title":"MathOptInterface.empty!","text":"empty!(model::ModelLike)\n\nEmpty the model, that is, remove all variables, constraints and model attributes but not optimizer attributes.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.write_to_file","page":"Models","title":"MathOptInterface.write_to_file","text":"write_to_file(model::ModelLike, filename::String)\n\nWrite the current model to the file at filename.\n\nSupported file types depend on the model type.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.read_from_file","page":"Models","title":"MathOptInterface.read_from_file","text":"read_from_file(model::ModelLike, filename::String)\n\nRead the file filename into the model model. If model is non-empty, this may throw an error.\n\nSupported file types depend on the model type.\n\nNote\n\nOnce the contents of the file are loaded into the model, users can query the variables via get(model, ListOfVariableIndices()). However, some filetypes, such as LP files, do not maintain an explicit ordering of the variables. Therefore, the returned list may be in an arbitrary order.\n\nTo avoid depending on the order of the indices, look up each variable index by name using get(model, VariableIndex, \"name\").\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.supports_incremental_interface","page":"Models","title":"MathOptInterface.supports_incremental_interface","text":"supports_incremental_interface(model::ModelLike)\n\nReturn a Bool indicating whether model supports building incrementally via add_variable and add_constraint.\n\nThe main purpose of this function is to determine whether a model can be loaded into model incrementally or whether it should be cached and copied at once instead.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.copy_to","page":"Models","title":"MathOptInterface.copy_to","text":"copy_to(dest::ModelLike, src::ModelLike)::IndexMap\n\nCopy the model from src into dest.\n\nThe target dest is emptied, and all previous indices to variables and constraints in dest are invalidated.\n\nReturns an IndexMap object that translates variable and constraint indices from the src model to the corresponding indices in the dest model.\n\nNotes\n\nIf a constraint that in src is not supported by dest, then an UnsupportedConstraint error is thrown.\nIf an AbstractModelAttribute, AbstractVariableAttribute, or AbstractConstraintAttribute is set in src but not supported by dest, then an UnsupportedAttribute error is thrown.\n\nAbstractOptimizerAttributes are not copied to the dest model.\n\nIndexMap\n\nImplementations of copy_to must return an IndexMap. For technical reasons, this type is defined in the Utilities submodule as MOI.Utilities.IndexMap. However, since it is an integral part of the MOI API, we provide MOI.IndexMap as an alias.\n\nExample\n\n# Given empty `ModelLike` objects `src` and `dest`.\n\nx = add_variable(src)\n\nis_valid(src, x) # true\nis_valid(dest, x) # false (`dest` has no variables)\n\nindex_map = copy_to(dest, src)\nis_valid(dest, x) # false (unless index_map[x] == x)\nis_valid(dest, index_map[x]) # true\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.IndexMap","page":"Models","title":"MathOptInterface.IndexMap","text":"IndexMap()\n\nThe dictionary-like object returned by copy_to.\n\nIndexMap\n\nImplementations of copy_to must return an IndexMap. For technical reasons, the IndexMap type is defined in the Utilities submodule as MOI.Utilities.IndexMap. However, since it is an integral part of the MOI API, we provide this MOI.IndexMap as an alias.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#Model-attributes","page":"Models","title":"Model attributes","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"AbstractModelAttribute\nName\nObjectiveFunction\nObjectiveFunctionType\nObjectiveSense\nOptimizationSense\nMIN_SENSE\nMAX_SENSE\nFEASIBILITY_SENSE\nNumberOfVariables\nListOfVariableIndices\nListOfConstraintTypesPresent\nNumberOfConstraints\nListOfConstraintIndices\nListOfOptimizerAttributesSet\nListOfModelAttributesSet\nListOfVariableAttributesSet\nListOfVariablesWithAttributeSet\nListOfConstraintAttributesSet\nListOfConstraintsWithAttributeSet\nUserDefinedFunction\nListOfSupportedNonlinearOperators","category":"page"},{"location":"moi/reference/models/#MathOptInterface.AbstractModelAttribute","page":"Models","title":"MathOptInterface.AbstractModelAttribute","text":"AbstractModelAttribute\n\nAbstract supertype for attribute objects that can be used to set or get attributes (properties) of the model.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.Name","page":"Models","title":"MathOptInterface.Name","text":"Name()\n\nA model attribute for the string identifying the model. It has a default value of \"\" if not set`.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ObjectiveFunction","page":"Models","title":"MathOptInterface.ObjectiveFunction","text":"ObjectiveFunction{F<:AbstractScalarFunction}()\n\nA model attribute for the objective function which has a type F<:AbstractScalarFunction.\n\nF should be guaranteed to be equivalent but not necessarily identical to the function type provided by the user.\n\nThrows an InexactError if the objective function cannot be converted to F, for example, the objective function is quadratic and F is ScalarAffineFunction{Float64} or it has non-integer coefficient and F is ScalarAffineFunction{Int}.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ObjectiveFunctionType","page":"Models","title":"MathOptInterface.ObjectiveFunctionType","text":"ObjectiveFunctionType()\n\nA model attribute for the type F of the objective function set using the ObjectiveFunction{F} attribute.\n\nExamples\n\nIn the following code, attr should be equal to MOI.VariableIndex:\n\nx = MOI.add_variable(model)\nMOI.set(model, MOI.ObjectiveFunction{MOI.VariableIndex}(), x)\nattr = MOI.get(model, MOI.ObjectiveFunctionType())\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ObjectiveSense","page":"Models","title":"MathOptInterface.ObjectiveSense","text":"ObjectiveSense()\n\nA model attribute for the objective sense of the objective function, which must be an OptimizationSense: MIN_SENSE, MAX_SENSE, or FEASIBILITY_SENSE. The default is FEASIBILITY_SENSE.\n\nInteraction with ObjectiveFunction\n\nSetting the sense to FEASIBILITY_SENSE unsets the ObjectiveFunction attribute. That is, if you first set ObjectiveFunction and then set ObjectiveSense to be FEASIBILITY_SENSE, no objective function will be passed to the solver.\n\nIn addition, some reformulations of ObjectiveFunction via bridges rely on the value of ObjectiveSense. Therefore, you should set ObjectiveSense before setting ObjectiveFunction.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.OptimizationSense","page":"Models","title":"MathOptInterface.OptimizationSense","text":"OptimizationSense\n\nAn enum for the value of the ObjectiveSense attribute.\n\nValues\n\nPossible values are:\n\nMIN_SENSE: the goal is to minimize the objective function\nMAX_SENSE: the goal is to maximize the objective function\nFEASIBILITY_SENSE: the model does not have an objective function\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.MIN_SENSE","page":"Models","title":"MathOptInterface.MIN_SENSE","text":"MIN_SENSE::OptimizationSense\n\nAn instance of the OptimizationSense enum.\n\nMIN_SENSE: the goal is to minimize the objective function\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.MAX_SENSE","page":"Models","title":"MathOptInterface.MAX_SENSE","text":"MAX_SENSE::OptimizationSense\n\nAn instance of the OptimizationSense enum.\n\nMAX_SENSE: the goal is to maximize the objective function\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.FEASIBILITY_SENSE","page":"Models","title":"MathOptInterface.FEASIBILITY_SENSE","text":"FEASIBILITY_SENSE::OptimizationSense\n\nAn instance of the OptimizationSense enum.\n\nFEASIBILITY_SENSE: the model does not have an objective function\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NumberOfVariables","page":"Models","title":"MathOptInterface.NumberOfVariables","text":"NumberOfVariables()\n\nA model attribute for the number of variables in the model.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfVariableIndices","page":"Models","title":"MathOptInterface.ListOfVariableIndices","text":"ListOfVariableIndices()\n\nA model attribute for the Vector{VariableIndex} of all variable indices present in the model (that is, of length equal to the value of NumberOfVariables in the order in which they were added.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfConstraintTypesPresent","page":"Models","title":"MathOptInterface.ListOfConstraintTypesPresent","text":"ListOfConstraintTypesPresent()\n\nA model attribute for the list of tuples of the form (F,S), where F is a function type and S is a set type indicating that the attribute NumberOfConstraints{F,S} has a value greater than zero.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.NumberOfConstraints","page":"Models","title":"MathOptInterface.NumberOfConstraints","text":"NumberOfConstraints{F,S}()\n\nA model attribute for the number of constraints of the type F-in-S present in the model.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfConstraintIndices","page":"Models","title":"MathOptInterface.ListOfConstraintIndices","text":"ListOfConstraintIndices{F,S}()\n\nA model attribute for the Vector{ConstraintIndex{F,S}} of all constraint indices of type F-in-S in the model (that is, of length equal to the value of NumberOfConstraints{F,S}) in the order in which they were added.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfOptimizerAttributesSet","page":"Models","title":"MathOptInterface.ListOfOptimizerAttributesSet","text":"ListOfOptimizerAttributesSet()\n\nAn optimizer attribute for the Vector{AbstractOptimizerAttribute} of all optimizer attributes that were set.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfModelAttributesSet","page":"Models","title":"MathOptInterface.ListOfModelAttributesSet","text":"ListOfModelAttributesSet()\n\nA model attribute for the Vector{AbstractModelAttribute} of all model attributes attr such that:\n\nis_copyable(attr) returns true, and\nthe attribute was set to the model\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfVariableAttributesSet","page":"Models","title":"MathOptInterface.ListOfVariableAttributesSet","text":"ListOfVariableAttributesSet()\n\nA model attribute for the Vector{AbstractVariableAttribute} of all variable attributes attr such that 1) is_copyable(attr) returns true and 2) the attribute was set to variables.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfVariablesWithAttributeSet","page":"Models","title":"MathOptInterface.ListOfVariablesWithAttributeSet","text":"ListOfVariablesWithAttributeSet(attr::AbstractVariableAttribute)\n\nA model attribute for the Vector{VariableIndex} of all variables with the attribute attr set.\n\nThe returned list may not be minimal, so some elements may have their default value set.\n\nNote\n\nThis is an optional attribute to implement. The default fallback is to get ListOfVariableIndices.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfConstraintAttributesSet","page":"Models","title":"MathOptInterface.ListOfConstraintAttributesSet","text":"ListOfConstraintAttributesSet{F, S}()\n\nA model attribute for the Vector{AbstractConstraintAttribute} of all constraint attributes attr such that:\n\nis_copyable(attr) returns true and\nthe attribute was set to F-in-S constraints.\n\nNote\n\nThe attributes ConstraintFunction and ConstraintSet should not be included in the list even if then have been set with set.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfConstraintsWithAttributeSet","page":"Models","title":"MathOptInterface.ListOfConstraintsWithAttributeSet","text":"ListOfConstraintsWithAttributeSet{F,S}(attr:AbstractConstraintAttribute)\n\nA model attribute for the Vector{ConstraintIndex{F,S}} of all constraints with the attribute attr set.\n\nThe returned list may not be minimal, so some elements may have their default value set.\n\nNote\n\nThis is an optional attribute to implement. The default fallback is to get ListOfConstraintIndices.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.UserDefinedFunction","page":"Models","title":"MathOptInterface.UserDefinedFunction","text":"UserDefinedFunction(name::Symbol, arity::Int) <: AbstractModelAttribute\n\nSet this attribute to register a user-defined function by the name of name with arity arguments.\n\nOnce registered, name will appear in ListOfSupportedNonlinearOperators.\n\nYou cannot register multiple UserDefinedFunctions with the same name but different arity.\n\nValue type\n\nThe value to be set is a tuple containing one, two, or three functions to evaluate the function, the first-order derivative, and the second-order derivative respectively. Both derivatives are optional, but if you pass the second-order derivative you must also pass the first-order derivative.\n\nFor univariate functions with arity == 1, the functions in the tuple must have the form:\n\nf(x::T)::T: returns the value of the function at x\n∇f(x::T)::T: returns the first-order derivative of f with respect to x\n∇²f(x::T)::T: returns the second-order derivative of f with respect to x.\n\nFor multivariate functions with arity > 1, the functions in the tuple must have the form:\n\nf(x::T...)::T: returns the value of the function at x\n∇f(g::AbstractVector{T}, x::T...)::Nothing: fills the components of g, with g[i] being the first-order partial derivative of f with respect to x[i]\n∇²f(H::AbstractMatrix{T}, x::T...)::Nothing: fills the non-zero components of H, with H[i, j] being the second-order partial derivative of f with respect to x[i] and then x[j]. H is initialized to the zero matrix, so you do not need to set any zero elements.\n\nExamples\n\njulia> import MathOptInterface as MOI\n\njulia> f(x, y) = x^2 + y^2\nf (generic function with 1 method)\n\njulia> function ∇f(g, x, y)\n g .= 2 * x, 2 * y\n return\n end\n∇f (generic function with 1 method)\n\njulia> function ∇²f(H, x...)\n H[1, 1] = H[2, 2] = 2.0\n return\n end\n∇²f (generic function with 1 method)\n\njulia> model = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}());\n\njulia> MOI.set(model, MOI.UserDefinedFunction(:f, 2), (f,))\n\njulia> MOI.set(model, MOI.UserDefinedFunction(:g, 2), (f, ∇f))\n\njulia> MOI.set(model, MOI.UserDefinedFunction(:h, 2), (f, ∇f, ∇²f))\n\njulia> x = MOI.add_variables(model, 2)\n2-element Vector{MathOptInterface.VariableIndex}:\n MOI.VariableIndex(1)\n MOI.VariableIndex(2)\n\njulia> MOI.set(model, MOI.ObjectiveSense(), MOI.MIN_SENSE)\n\njulia> obj_f = MOI.ScalarNonlinearFunction(:f, Any[x[1], x[2]])\nf(MOI.VariableIndex(1), MOI.VariableIndex(2))\n\njulia> MOI.set(model, MOI.ObjectiveFunction{typeof(obj_f)}(), obj_f)\n\njulia> print(model)\nMinimize ScalarNonlinearFunction:\n f(v[1], v[2])\n\nSubject to:\n\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ListOfSupportedNonlinearOperators","page":"Models","title":"MathOptInterface.ListOfSupportedNonlinearOperators","text":"ListOfSupportedNonlinearOperators() <: AbstractModelAttribute\n\nWhen queried with get, return a Vector{Symbol} listing the operators supported by the model.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#Optimizer-interface","page":"Models","title":"Optimizer interface","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"AbstractOptimizer\nOptimizerWithAttributes\noptimize!\noptimize!(::ModelLike, ::ModelLike)\ninstantiate\ndefault_cache","category":"page"},{"location":"moi/reference/models/#MathOptInterface.AbstractOptimizer","page":"Models","title":"MathOptInterface.AbstractOptimizer","text":"AbstractOptimizer <: ModelLike\n\nAbstract supertype for objects representing an instance of an optimization problem tied to a particular solver. This is typically a solver's in-memory representation. In addition to ModelLike, AbstractOptimizer objects let you solve the model and query the solution.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.OptimizerWithAttributes","page":"Models","title":"MathOptInterface.OptimizerWithAttributes","text":"struct OptimizerWithAttributes\n optimizer_constructor\n params::Vector{Pair{AbstractOptimizerAttribute,<:Any}}\nend\n\nObject grouping an optimizer constructor and a list of optimizer attributes. Instances are created with instantiate.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.optimize!","page":"Models","title":"MathOptInterface.optimize!","text":"optimize!(optimizer::AbstractOptimizer)\n\nOptimize the problem contained in optimizer.\n\nBefore calling optimize!, the problem should first be constructed using the incremental interface (see supports_incremental_interface) or copy_to.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.optimize!-Tuple{MathOptInterface.ModelLike, MathOptInterface.ModelLike}","page":"Models","title":"MathOptInterface.optimize!","text":"optimize!(dest::AbstractOptimizer, src::ModelLike)::Tuple{IndexMap,Bool}\n\nA \"one-shot\" call that copies the problem from src into dest and then uses dest to optimize the problem.\n\nReturns a tuple of an IndexMap and a Bool copied.\n\nThe IndexMap object translates variable and constraint indices from the src model to the corresponding indices in the dest optimizer. See copy_to for details.\nIf copied == true, src was copied to dest and then cached, allowing incremental modification if supported by the solver.\nIf copied == false, a cache of the model was not kept in dest. Therefore, only the solution information (attributes for which is_set_by_optimize is true) is available to query.\n\nnote: Note\nThe main purpose of optimize! method with two arguments is for use in Utilities.CachingOptimizer.\n\nRelationship to the single-argument optimize!\n\nThe default fallback of optimize!(dest::AbstractOptimizer, src::ModelLike) is\n\nfunction optimize!(dest::AbstractOptimizer, src::ModelLike)\n index_map = copy_to(dest, src)\n optimize!(dest)\n return index_map, true\nend\n\nTherefore, subtypes of AbstractOptimizer should either implement this two-argument method, or implement both copy_to(::Optimizer, ::ModelLike) and optimize!(::Optimizer).\n\n\n\n\n\n","category":"method"},{"location":"moi/reference/models/#MathOptInterface.instantiate","page":"Models","title":"MathOptInterface.instantiate","text":"instantiate(\n optimizer_constructor,\n with_cache_type::Union{Nothing,Type} = nothing,\n with_bridge_type::Union{Nothing,Type} = nothing,\n)\n\nCreate an instance of an optimizer by either:\n\ncalling optimizer_constructor.optimizer_constructor() and setting the parameters in optimizer_constructor.params if optimizer_constructor is a OptimizerWithAttributes\ncalling optimizer_constructor() if optimizer_constructor is callable.\n\nwithcachetype\n\nIf with_cache_type is not nothing, then the optimizer is wrapped in a Utilities.CachingOptimizer to store a cache of the model. This is most useful if the optimizer you are constructing does not support the incremental interface (see supports_incremental_interface).\n\nwithbridgetype\n\nIf with_bridge_type is not nothing, the optimizer is wrapped in a Bridges.full_bridge_optimizer, enabling all the bridges defined in the MOI.Bridges submodule with coefficient type with_bridge_type.\n\nIn addition, if the optimizer created by optimizer_constructor does not support the incremental interface (see supports_incremental_interface), then, irrespective of with_cache_type, the optimizer is wrapped in a Utilities.CachingOptimizer to store a cache of the bridged model.\n\nIf with_cache_type and with_bridge_type are both not nothing, then they must be the same type.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.default_cache","page":"Models","title":"MathOptInterface.default_cache","text":"default_cache(optimizer::ModelLike, ::Type{T}) where {T}\n\nReturn a new instance of the default model type to be used as cache for optimizer in a Utilities.CachingOptimizer for holding constraints of coefficient type T. By default, this returns Utilities.UniversalFallback(Utilities.Model{T}()). If copying from a instance of a given model type is faster for optimizer then a new method returning an instance of this model type should be defined.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#Optimizer-attributes","page":"Models","title":"Optimizer attributes","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"AbstractOptimizerAttribute\nSolverName\nSolverVersion\nSilent\nTimeLimitSec\nObjectiveLimit\nSolutionLimit\nRawOptimizerAttribute\nNumberOfThreads\nRawSolver\nAbsoluteGapTolerance\nRelativeGapTolerance\nAutomaticDifferentiationBackend","category":"page"},{"location":"moi/reference/models/#MathOptInterface.AbstractOptimizerAttribute","page":"Models","title":"MathOptInterface.AbstractOptimizerAttribute","text":"AbstractOptimizerAttribute\n\nAbstract supertype for attribute objects that can be used to set or get attributes (properties) of the optimizer.\n\nNotes\n\nThe difference between AbstractOptimizerAttribute and AbstractModelAttribute lies in the behavior of is_empty, empty! and copy_to. Typically optimizer attributes affect only how the model is solved.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.SolverName","page":"Models","title":"MathOptInterface.SolverName","text":"SolverName()\n\nAn optimizer attribute for the string identifying the solver/optimizer.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.SolverVersion","page":"Models","title":"MathOptInterface.SolverVersion","text":"SolverVersion()\n\nAn optimizer attribute for the string identifying the version of the solver.\n\nnote: Note\nFor solvers supporting semantic versioning, the SolverVersion should be a string of the form \"vMAJOR.MINOR.PATCH\", so that it can be converted to a Julia VersionNumber (for example, `VersionNumber(\"v1.2.3\")).We do not require Semantic Versioning because some solvers use alternate versioning systems. For example, CPLEX uses Calendar Versioning, so SolverVersion will return a string like \"202001\".\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.Silent","page":"Models","title":"MathOptInterface.Silent","text":"Silent()\n\nAn optimizer attribute for silencing the output of an optimizer. When set to true, it takes precedence over any other attribute controlling verbosity and requires the solver to produce no output. The default value is false which has no effect. In this case the verbosity is controlled by other attributes.\n\nNote\n\nEvery optimizer should have verbosity on by default. For instance, if a solver has a solver-specific log level attribute, the MOI implementation should set it to 1 by default. If the user sets Silent to true, then the log level should be set to 0, even if the user specifically sets a value of log level. If the value of Silent is false then the log level set to the solver is the value given by the user for this solver-specific parameter or 1 if none is given.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.TimeLimitSec","page":"Models","title":"MathOptInterface.TimeLimitSec","text":"TimeLimitSec()\n\nAn optimizer attribute for setting a time limit (in seconds) for an optimization. When set to nothing, it deactivates the solver time limit. The default value is nothing.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ObjectiveLimit","page":"Models","title":"MathOptInterface.ObjectiveLimit","text":"ObjectiveLimit()\n\nAn optimizer attribute for setting a limit on the objective value.\n\nThe provided limit must be a Union{Real,Nothing}.\n\nWhen set to nothing, the limit reverts to the solver's default.\n\nThe default value is nothing.\n\nThe solver may stop when the ObjectiveValue is better (lower for minimization, higher for maximization) than the ObjectiveLimit. If stopped, the TerminationStatus should be OBJECTIVE_LIMIT.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.SolutionLimit","page":"Models","title":"MathOptInterface.SolutionLimit","text":"SolutionLimit()\n\nAn optimizer attribute for setting a limit on the number of available feasible solutions.\n\nDefault values\n\nThe provided limit must be a Union{Nothing,Int}.\n\nWhen set to nothing, the limit reverts to the solver's default.\n\nThe default value is nothing.\n\nTermination criteria\n\nThe solver may stop when the ResultCount is larger than or equal to the SolutionLimit. If stopped because of this attribute, the TerminationStatus must be SOLUTION_LIMIT.\n\nSolution quality\n\nThe quality of the available solutions is solver-dependent. The set of resulting solutions is not guaranteed to contain an optimal solution.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.RawOptimizerAttribute","page":"Models","title":"MathOptInterface.RawOptimizerAttribute","text":"RawOptimizerAttribute(name::String)\n\nAn optimizer attribute for the solver-specific parameter identified by name.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.NumberOfThreads","page":"Models","title":"MathOptInterface.NumberOfThreads","text":"NumberOfThreads()\n\nAn optimizer attribute for setting the number of threads used for an optimization. When set to nothing uses solver default. Values are positive integers. The default value is nothing.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.RawSolver","page":"Models","title":"MathOptInterface.RawSolver","text":"RawSolver()\n\nA model attribute for the object that may be used to access a solver-specific API for this optimizer.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.AbsoluteGapTolerance","page":"Models","title":"MathOptInterface.AbsoluteGapTolerance","text":"AbsoluteGapTolerance()\n\nAn optimizer attribute for setting the absolute gap tolerance for an optimization. This is an optimizer attribute, and should be set before calling optimize!. When set to nothing (if supported), uses solver default.\n\nTo set a relative gap tolerance, see RelativeGapTolerance.\n\nwarning: Warning\nThe mathematical definition of \"absolute gap\", and its treatment during the optimization, are solver-dependent. However, assuming no other limit nor issue is encountered during the optimization, most solvers that implement this attribute will stop once f - b g_abs, where b is the best bound, f is the best feasible objective value, and g_abs is the absolute gap.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.RelativeGapTolerance","page":"Models","title":"MathOptInterface.RelativeGapTolerance","text":"RelativeGapTolerance()\n\nAn optimizer attribute for setting the relative gap tolerance for an optimization. This is an optimizer attribute, and should be set before calling optimize!. When set to nothing (if supported), uses solver default.\n\nIf you are looking for the relative gap of the current best solution, see RelativeGap. If no limit nor issue is encountered during the optimization, the value of RelativeGap should be at most as large as RelativeGapTolerance.\n\n# Before optimizing: set relative gap tolerance\n# set 0.1% relative gap tolerance\nMOI.set(model, MOI.RelativeGapTolerance(), 1e-3)\nMOI.optimize!(model)\n\n# After optimizing (assuming all went well)\n# The relative gap tolerance has not changed...\nMOI.get(model, MOI.RelativeGapTolerance()) # returns 1e-3\n# ... and the relative gap of the obtained solution is smaller or equal to the\n# tolerance\nMOI.get(model, MOI.RelativeGap()) # should return something ≤ 1e-3\n\nwarning: Warning\nThe mathematical definition of \"relative gap\", and its allowed range, are solver-dependent. Typically, solvers expect a value between 0.0 and 1.0.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.AutomaticDifferentiationBackend","page":"Models","title":"MathOptInterface.AutomaticDifferentiationBackend","text":"AutomaticDifferentiationBackend() <: AbstractOptimizerAttribute\n\nAn AbstractOptimizerAttribute for setting the automatic differentiation backend used by the solver.\n\nThe value must be a subtype of Nonlinear.AbstractAutomaticDifferentiation.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"List of attributes useful for optimizers","category":"page"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"TerminationStatus\nTerminationStatusCode\nOPTIMIZE_NOT_CALLED\nOPTIMAL\nINFEASIBLE\nDUAL_INFEASIBLE\nLOCALLY_SOLVED\nLOCALLY_INFEASIBLE\nINFEASIBLE_OR_UNBOUNDED\nALMOST_OPTIMAL\nALMOST_INFEASIBLE\nALMOST_DUAL_INFEASIBLE\nALMOST_LOCALLY_SOLVED\nITERATION_LIMIT\nTIME_LIMIT\nNODE_LIMIT\nSOLUTION_LIMIT\nMEMORY_LIMIT\nOBJECTIVE_LIMIT\nNORM_LIMIT\nOTHER_LIMIT\nSLOW_PROGRESS\nNUMERICAL_ERROR\nINVALID_MODEL\nINVALID_OPTION\nINTERRUPTED\nOTHER_ERROR\nPrimalStatus\nDualStatus\nRawStatusString\nResultCount\nObjectiveValue\nDualObjectiveValue\nObjectiveBound\nRelativeGap\nSolveTimeSec\nSimplexIterations\nBarrierIterations\nNodeCount","category":"page"},{"location":"moi/reference/models/#MathOptInterface.TerminationStatus","page":"Models","title":"MathOptInterface.TerminationStatus","text":"TerminationStatus()\n\nA model attribute for the TerminationStatusCode explaining why the optimizer stopped.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.TerminationStatusCode","page":"Models","title":"MathOptInterface.TerminationStatusCode","text":"TerminationStatusCode\n\nAn Enum of possible values for the TerminationStatus attribute. This attribute is meant to explain the reason why the optimizer stopped executing in the most recent call to optimize!.\n\nValues\n\nPossible values are:\n\nOPTIMIZE_NOT_CALLED: The algorithm has not started.\nOPTIMAL: The algorithm found a globally optimal solution.\nINFEASIBLE: The algorithm concluded that no feasible solution exists.\nDUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem. If, additionally, a feasible (primal) solution is known to exist, this status typically implies that the problem is unbounded, with some technical exceptions.\nLOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, could not find directions for improvement, or otherwise completed its search without global guarantees.\nLOCALLY_INFEASIBLE: The algorithm converged to an infeasible point or otherwise completed its search without finding a feasible solution, without guarantees that no feasible solution exists.\nINFEASIBLE_OR_UNBOUNDED: The algorithm stopped because it decided that the problem is infeasible or unbounded; this occasionally happens during MIP presolve.\nALMOST_OPTIMAL: The algorithm found a globally optimal solution to relaxed tolerances.\nALMOST_INFEASIBLE: The algorithm concluded that no feasible solution exists within relaxed tolerances.\nALMOST_DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem within relaxed tolerances.\nALMOST_LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, or could not find directions for improvement within relaxed tolerances.\nITERATION_LIMIT: An iterative algorithm stopped after conducting the maximum number of iterations.\nTIME_LIMIT: The algorithm stopped after a user-specified computation time.\nNODE_LIMIT: A branch-and-bound algorithm stopped because it explored a maximum number of nodes in the branch-and-bound tree.\nSOLUTION_LIMIT: The algorithm stopped because it found the required number of solutions. This is often used in MIPs to get the solver to return the first feasible solution it encounters.\nMEMORY_LIMIT: The algorithm stopped because it ran out of memory.\nOBJECTIVE_LIMIT: The algorithm stopped because it found a solution better than a minimum limit set by the user.\nNORM_LIMIT: The algorithm stopped because the norm of an iterate became too large.\nOTHER_LIMIT: The algorithm stopped due to a limit not covered by one of the _LIMIT_ statuses above.\nSLOW_PROGRESS: The algorithm stopped because it was unable to continue making progress towards the solution.\nNUMERICAL_ERROR: The algorithm stopped because it encountered unrecoverable numerical error.\nINVALID_MODEL: The algorithm stopped because the model is invalid.\nINVALID_OPTION: The algorithm stopped because it was provided an invalid option.\nINTERRUPTED: The algorithm stopped because of an interrupt signal.\nOTHER_ERROR: The algorithm stopped because of an error not covered by one of the statuses defined above.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.OPTIMIZE_NOT_CALLED","page":"Models","title":"MathOptInterface.OPTIMIZE_NOT_CALLED","text":"OPTIMIZE_NOT_CALLED::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nOPTIMIZE_NOT_CALLED: The algorithm has not started.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.OPTIMAL","page":"Models","title":"MathOptInterface.OPTIMAL","text":"OPTIMAL::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nOPTIMAL: The algorithm found a globally optimal solution.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INFEASIBLE","page":"Models","title":"MathOptInterface.INFEASIBLE","text":"INFEASIBLE::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nINFEASIBLE: The algorithm concluded that no feasible solution exists.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.DUAL_INFEASIBLE","page":"Models","title":"MathOptInterface.DUAL_INFEASIBLE","text":"DUAL_INFEASIBLE::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nDUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem. If, additionally, a feasible (primal) solution is known to exist, this status typically implies that the problem is unbounded, with some technical exceptions.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.LOCALLY_SOLVED","page":"Models","title":"MathOptInterface.LOCALLY_SOLVED","text":"LOCALLY_SOLVED::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nLOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, could not find directions for improvement, or otherwise completed its search without global guarantees.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.LOCALLY_INFEASIBLE","page":"Models","title":"MathOptInterface.LOCALLY_INFEASIBLE","text":"LOCALLY_INFEASIBLE::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nLOCALLY_INFEASIBLE: The algorithm converged to an infeasible point or otherwise completed its search without finding a feasible solution, without guarantees that no feasible solution exists.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INFEASIBLE_OR_UNBOUNDED","page":"Models","title":"MathOptInterface.INFEASIBLE_OR_UNBOUNDED","text":"INFEASIBLE_OR_UNBOUNDED::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nINFEASIBLE_OR_UNBOUNDED: The algorithm stopped because it decided that the problem is infeasible or unbounded; this occasionally happens during MIP presolve.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.ALMOST_OPTIMAL","page":"Models","title":"MathOptInterface.ALMOST_OPTIMAL","text":"ALMOST_OPTIMAL::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nALMOST_OPTIMAL: The algorithm found a globally optimal solution to relaxed tolerances.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.ALMOST_INFEASIBLE","page":"Models","title":"MathOptInterface.ALMOST_INFEASIBLE","text":"ALMOST_INFEASIBLE::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nALMOST_INFEASIBLE: The algorithm concluded that no feasible solution exists within relaxed tolerances.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.ALMOST_DUAL_INFEASIBLE","page":"Models","title":"MathOptInterface.ALMOST_DUAL_INFEASIBLE","text":"ALMOST_DUAL_INFEASIBLE::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nALMOST_DUAL_INFEASIBLE: The algorithm concluded that no dual bound exists for the problem within relaxed tolerances.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.ALMOST_LOCALLY_SOLVED","page":"Models","title":"MathOptInterface.ALMOST_LOCALLY_SOLVED","text":"ALMOST_LOCALLY_SOLVED::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nALMOST_LOCALLY_SOLVED: The algorithm converged to a stationary point, local optimal solution, or could not find directions for improvement within relaxed tolerances.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.ITERATION_LIMIT","page":"Models","title":"MathOptInterface.ITERATION_LIMIT","text":"ITERATION_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nITERATION_LIMIT: An iterative algorithm stopped after conducting the maximum number of iterations.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.TIME_LIMIT","page":"Models","title":"MathOptInterface.TIME_LIMIT","text":"TIME_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nTIME_LIMIT: The algorithm stopped after a user-specified computation time.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NODE_LIMIT","page":"Models","title":"MathOptInterface.NODE_LIMIT","text":"NODE_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nNODE_LIMIT: A branch-and-bound algorithm stopped because it explored a maximum number of nodes in the branch-and-bound tree.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.SOLUTION_LIMIT","page":"Models","title":"MathOptInterface.SOLUTION_LIMIT","text":"SOLUTION_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nSOLUTION_LIMIT: The algorithm stopped because it found the required number of solutions. This is often used in MIPs to get the solver to return the first feasible solution it encounters.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.MEMORY_LIMIT","page":"Models","title":"MathOptInterface.MEMORY_LIMIT","text":"MEMORY_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nMEMORY_LIMIT: The algorithm stopped because it ran out of memory.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.OBJECTIVE_LIMIT","page":"Models","title":"MathOptInterface.OBJECTIVE_LIMIT","text":"OBJECTIVE_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nOBJECTIVE_LIMIT: The algorithm stopped because it found a solution better than a minimum limit set by the user.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NORM_LIMIT","page":"Models","title":"MathOptInterface.NORM_LIMIT","text":"NORM_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nNORM_LIMIT: The algorithm stopped because the norm of an iterate became too large.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.OTHER_LIMIT","page":"Models","title":"MathOptInterface.OTHER_LIMIT","text":"OTHER_LIMIT::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nOTHER_LIMIT: The algorithm stopped due to a limit not covered by one of the _LIMIT_ statuses above.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.SLOW_PROGRESS","page":"Models","title":"MathOptInterface.SLOW_PROGRESS","text":"SLOW_PROGRESS::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nSLOW_PROGRESS: The algorithm stopped because it was unable to continue making progress towards the solution.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NUMERICAL_ERROR","page":"Models","title":"MathOptInterface.NUMERICAL_ERROR","text":"NUMERICAL_ERROR::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nNUMERICAL_ERROR: The algorithm stopped because it encountered unrecoverable numerical error.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INVALID_MODEL","page":"Models","title":"MathOptInterface.INVALID_MODEL","text":"INVALID_MODEL::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nINVALID_MODEL: The algorithm stopped because the model is invalid.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INVALID_OPTION","page":"Models","title":"MathOptInterface.INVALID_OPTION","text":"INVALID_OPTION::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nINVALID_OPTION: The algorithm stopped because it was provided an invalid option.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INTERRUPTED","page":"Models","title":"MathOptInterface.INTERRUPTED","text":"INTERRUPTED::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nINTERRUPTED: The algorithm stopped because of an interrupt signal.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.OTHER_ERROR","page":"Models","title":"MathOptInterface.OTHER_ERROR","text":"OTHER_ERROR::TerminationStatusCode\n\nAn instance of the TerminationStatusCode enum.\n\nOTHER_ERROR: The algorithm stopped because of an error not covered by one of the statuses defined above.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.PrimalStatus","page":"Models","title":"MathOptInterface.PrimalStatus","text":"PrimalStatus(result_index::Int = 1)\n\nA model attribute for the ResultStatusCode of the primal result result_index. If result_index is omitted, it defaults to 1.\n\nSee ResultCount for information on how the results are ordered.\n\nIf result_index is larger than the value of ResultCount then NO_SOLUTION is returned.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.DualStatus","page":"Models","title":"MathOptInterface.DualStatus","text":"DualStatus(result_index::Int = 1)\n\nA model attribute for the ResultStatusCode of the dual result result_index. If result_index is omitted, it defaults to 1.\n\nSee ResultCount for information on how the results are ordered.\n\nIf result_index is larger than the value of ResultCount then NO_SOLUTION is returned.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.RawStatusString","page":"Models","title":"MathOptInterface.RawStatusString","text":"RawStatusString()\n\nA model attribute for a solver specific string explaining why the optimizer stopped.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ResultCount","page":"Models","title":"MathOptInterface.ResultCount","text":"ResultCount()\n\nA model attribute for the number of results available.\n\nOrder of solutions\n\nA number of attributes contain an index, result_index, which is used to refer to one of the available results. Thus, result_index must be an integer between 1 and the number of available results.\n\nAs a general rule, the first result (result_index=1) is the most important result (for example, an optimal solution or an infeasibility certificate). Other results will typically be alternate solutions that the solver found during the search for the first result.\n\nIf a (local) optimal solution is available, that is, TerminationStatus is OPTIMAL or LOCALLY_SOLVED, the first result must correspond to the (locally) optimal solution. Other results may be alternative optimal solutions, or they may be other suboptimal solutions; use ObjectiveValue to distinguish between them.\n\nIf a primal or dual infeasibility certificate is available, that is, TerminationStatus is INFEASIBLE or DUAL_INFEASIBLE and the corresponding PrimalStatus or DualStatus is INFEASIBILITY_CERTIFICATE, then the first result must be a certificate. Other results may be alternate certificates, or infeasible points.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ObjectiveValue","page":"Models","title":"MathOptInterface.ObjectiveValue","text":"ObjectiveValue(result_index::Int = 1)\n\nA model attribute for the objective value of the primal solution result_index.\n\nIf the solver does not have a primal value for the objective because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a dual solution is available), the result is undefined. Users should first check PrimalStatus before accessing the ObjectiveValue attribute.\n\nSee ResultCount for information on how the results are ordered.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.DualObjectiveValue","page":"Models","title":"MathOptInterface.DualObjectiveValue","text":"DualObjectiveValue(result_index::Int = 1)\n\nA model attribute for the value of the objective function of the dual problem for the result_indexth dual result.\n\nIf the solver does not have a dual value for the objective because the result_index is beyond the available solutions (whose number is indicated by the ResultCount attribute), getting this attribute must throw a ResultIndexBoundsError. Otherwise, if the result is unavailable for another reason (for instance, only a primal solution is available), the result is undefined. Users should first check DualStatus before accessing the DualObjectiveValue attribute.\n\nSee ResultCount for information on how the results are ordered.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ObjectiveBound","page":"Models","title":"MathOptInterface.ObjectiveBound","text":"ObjectiveBound()\n\nA model attribute for the best known bound on the optimal objective value.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.RelativeGap","page":"Models","title":"MathOptInterface.RelativeGap","text":"RelativeGap()\n\nA model attribute for the final relative optimality gap.\n\nwarning: Warning\nThe definition of this gap is solver-dependent. However, most solvers implementing this attribute define the relative gap as some variation of fracb-ff, where b is the best bound and f is the best feasible objective value.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.SolveTimeSec","page":"Models","title":"MathOptInterface.SolveTimeSec","text":"SolveTimeSec()\n\nA model attribute for the total elapsed solution time (in seconds) as reported by the optimizer.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.SimplexIterations","page":"Models","title":"MathOptInterface.SimplexIterations","text":"SimplexIterations()\n\nA model attribute for the cumulative number of simplex iterations during the optimization process.\n\nFor a mixed-integer program (MIP), the return value is the total simplex iterations for all nodes.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.BarrierIterations","page":"Models","title":"MathOptInterface.BarrierIterations","text":"BarrierIterations()\n\nA model attribute for the cumulative number of barrier iterations while solving a problem.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.NodeCount","page":"Models","title":"MathOptInterface.NodeCount","text":"NodeCount()\n\nA model attribute for the total number of branch-and-bound nodes explored while solving a mixed-integer program (MIP).\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#ResultStatusCode","page":"Models","title":"ResultStatusCode","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"ResultStatusCode\nNO_SOLUTION\nFEASIBLE_POINT\nNEARLY_FEASIBLE_POINT\nINFEASIBLE_POINT\nINFEASIBILITY_CERTIFICATE\nNEARLY_INFEASIBILITY_CERTIFICATE\nREDUCTION_CERTIFICATE\nNEARLY_REDUCTION_CERTIFICATE\nUNKNOWN_RESULT_STATUS\nOTHER_RESULT_STATUS","category":"page"},{"location":"moi/reference/models/#MathOptInterface.ResultStatusCode","page":"Models","title":"MathOptInterface.ResultStatusCode","text":"ResultStatusCode\n\nAn Enum of possible values for the PrimalStatus and DualStatus attributes.\n\nThe values indicate how to interpret the result vector.\n\nValues\n\nPossible values are:\n\nNO_SOLUTION: the result vector is empty.\nFEASIBLE_POINT: the result vector is a feasible point.\nNEARLY_FEASIBLE_POINT: the result vector is feasible if some constraint tolerances are relaxed.\nINFEASIBLE_POINT: the result vector is an infeasible point.\nINFEASIBILITY_CERTIFICATE: the result vector is an infeasibility certificate. If the PrimalStatus is INFEASIBILITY_CERTIFICATE, then the primal result vector is a certificate of dual infeasibility. If the DualStatus is INFEASIBILITY_CERTIFICATE, then the dual result vector is a proof of primal infeasibility.\nNEARLY_INFEASIBILITY_CERTIFICATE: the result satisfies a relaxed criterion for a certificate of infeasibility.\nREDUCTION_CERTIFICATE: the result vector is an ill-posed certificate; see this article for details. If the PrimalStatus is REDUCTION_CERTIFICATE, then the primal result vector is a proof that the dual problem is ill-posed. If the DualStatus is REDUCTION_CERTIFICATE, then the dual result vector is a proof that the primal is ill-posed.\nNEARLY_REDUCTION_CERTIFICATE: the result satisfies a relaxed criterion for an ill-posed certificate.\nUNKNOWN_RESULT_STATUS: the result vector contains a solution with an unknown interpretation.\nOTHER_RESULT_STATUS: the result vector contains a solution with an interpretation not covered by one of the statuses defined above\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.NO_SOLUTION","page":"Models","title":"MathOptInterface.NO_SOLUTION","text":"NO_SOLUTION::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nNO_SOLUTION: the result vector is empty.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.FEASIBLE_POINT","page":"Models","title":"MathOptInterface.FEASIBLE_POINT","text":"FEASIBLE_POINT::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nFEASIBLE_POINT: the result vector is a feasible point.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NEARLY_FEASIBLE_POINT","page":"Models","title":"MathOptInterface.NEARLY_FEASIBLE_POINT","text":"NEARLY_FEASIBLE_POINT::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nNEARLY_FEASIBLE_POINT: the result vector is feasible if some constraint tolerances are relaxed.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INFEASIBLE_POINT","page":"Models","title":"MathOptInterface.INFEASIBLE_POINT","text":"INFEASIBLE_POINT::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nINFEASIBLE_POINT: the result vector is an infeasible point.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.INFEASIBILITY_CERTIFICATE","page":"Models","title":"MathOptInterface.INFEASIBILITY_CERTIFICATE","text":"INFEASIBILITY_CERTIFICATE::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nINFEASIBILITY_CERTIFICATE: the result vector is an infeasibility certificate. If the PrimalStatus is INFEASIBILITY_CERTIFICATE, then the primal result vector is a certificate of dual infeasibility. If the DualStatus is INFEASIBILITY_CERTIFICATE, then the dual result vector is a proof of primal infeasibility.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NEARLY_INFEASIBILITY_CERTIFICATE","page":"Models","title":"MathOptInterface.NEARLY_INFEASIBILITY_CERTIFICATE","text":"NEARLY_INFEASIBILITY_CERTIFICATE::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nNEARLY_INFEASIBILITY_CERTIFICATE: the result satisfies a relaxed criterion for a certificate of infeasibility.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.REDUCTION_CERTIFICATE","page":"Models","title":"MathOptInterface.REDUCTION_CERTIFICATE","text":"REDUCTION_CERTIFICATE::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nREDUCTION_CERTIFICATE: the result vector is an ill-posed certificate; see this article for details. If the PrimalStatus is REDUCTION_CERTIFICATE, then the primal result vector is a proof that the dual problem is ill-posed. If the DualStatus is REDUCTION_CERTIFICATE, then the dual result vector is a proof that the primal is ill-posed.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.NEARLY_REDUCTION_CERTIFICATE","page":"Models","title":"MathOptInterface.NEARLY_REDUCTION_CERTIFICATE","text":"NEARLY_REDUCTION_CERTIFICATE::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nNEARLY_REDUCTION_CERTIFICATE: the result satisfies a relaxed criterion for an ill-posed certificate.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.UNKNOWN_RESULT_STATUS","page":"Models","title":"MathOptInterface.UNKNOWN_RESULT_STATUS","text":"UNKNOWN_RESULT_STATUS::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nUNKNOWN_RESULT_STATUS: the result vector contains a solution with an unknown interpretation.\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.OTHER_RESULT_STATUS","page":"Models","title":"MathOptInterface.OTHER_RESULT_STATUS","text":"OTHER_RESULT_STATUS::ResultStatusCode\n\nAn instance of the ResultStatusCode enum.\n\nOTHER_RESULT_STATUS: the result vector contains a solution with an interpretation not covered by one of the statuses defined above\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#Conflict-Status","page":"Models","title":"Conflict Status","text":"","category":"section"},{"location":"moi/reference/models/","page":"Models","title":"Models","text":"compute_conflict!\nConflictStatus\nConstraintConflictStatus\nConflictStatusCode\nConflictParticipationStatusCode\nNOT_IN_CONFLICT\nIN_CONFLICT\nMAYBE_IN_CONFLICT","category":"page"},{"location":"moi/reference/models/#MathOptInterface.compute_conflict!","page":"Models","title":"MathOptInterface.compute_conflict!","text":"compute_conflict!(optimizer::AbstractOptimizer)\n\nComputes a minimal subset of constraints such that the model with the other constraint removed is still infeasible.\n\nSome solvers call a set of conflicting constraints an Irreducible Inconsistent Subsystem (IIS).\n\nSee also ConflictStatus and ConstraintConflictStatus.\n\nNote\n\nIf the model is modified after a call to compute_conflict!, the implementor is not obliged to purge the conflict. Any calls to the above attributes may return values for the original conflict without a warning. Similarly, when modifying the model, the conflict can be discarded.\n\n\n\n\n\n","category":"function"},{"location":"moi/reference/models/#MathOptInterface.ConflictStatus","page":"Models","title":"MathOptInterface.ConflictStatus","text":"ConflictStatus()\n\nA model attribute for the ConflictStatusCode explaining why the conflict refiner stopped when computing the conflict.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ConstraintConflictStatus","page":"Models","title":"MathOptInterface.ConstraintConflictStatus","text":"ConstraintConflictStatus()\n\nA constraint attribute indicating whether the constraint participates in the conflict. Its type is ConflictParticipationStatusCode.\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ConflictStatusCode","page":"Models","title":"MathOptInterface.ConflictStatusCode","text":"ConflictStatusCode\n\nAn Enum of possible values for the ConflictStatus attribute. This attribute is meant to explain the reason why the conflict finder stopped executing in the most recent call to compute_conflict!.\n\nPossible values are:\n\nCOMPUTE_CONFLICT_NOT_CALLED: the function compute_conflict! has not yet been called\nNO_CONFLICT_EXISTS: there is no conflict because the problem is feasible\nNO_CONFLICT_FOUND: the solver could not find a conflict\nCONFLICT_FOUND: at least one conflict could be found\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.ConflictParticipationStatusCode","page":"Models","title":"MathOptInterface.ConflictParticipationStatusCode","text":"ConflictParticipationStatusCode\n\nAn Enum of possible values for the ConstraintConflictStatus attribute. This attribute is meant to indicate whether a given constraint participates or not in the last computed conflict.\n\nValues\n\nPossible values are:\n\nNOT_IN_CONFLICT: the constraint does not participate in the conflict\nIN_CONFLICT: the constraint participates in the conflict\nMAYBE_IN_CONFLICT: the constraint may participate in the conflict, the solver was not able to prove that the constraint can be excluded from the conflict\n\n\n\n\n\n","category":"type"},{"location":"moi/reference/models/#MathOptInterface.NOT_IN_CONFLICT","page":"Models","title":"MathOptInterface.NOT_IN_CONFLICT","text":"NOT_IN_CONFLICT::ConflictParticipationStatusCode\n\nAn instance of the ConflictParticipationStatusCode enum.\n\nNOT_IN_CONFLICT: the constraint does not participate in the conflict\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.IN_CONFLICT","page":"Models","title":"MathOptInterface.IN_CONFLICT","text":"IN_CONFLICT::ConflictParticipationStatusCode\n\nAn instance of the ConflictParticipationStatusCode enum.\n\nIN_CONFLICT: the constraint participates in the conflict\n\n\n\n\n\n","category":"constant"},{"location":"moi/reference/models/#MathOptInterface.MAYBE_IN_CONFLICT","page":"Models","title":"MathOptInterface.MAYBE_IN_CONFLICT","text":"MAYBE_IN_CONFLICT::ConflictParticipationStatusCode\n\nAn instance of the ConflictParticipationStatusCode enum.\n\nMAYBE_IN_CONFLICT: the constraint may participate in the conflict, the solver was not able to prove that the constraint can be excluded from the conflict\n\n\n\n\n\n","category":"constant"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.31.2/docs/src/submodules/Nonlinear/reference.md\"","category":"page"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"CurrentModule = MathOptInterface\nDocTestSetup = quote\n import MathOptInterface as MOI\nend\nDocTestFilters = [r\"MathOptInterface|MOI\"]","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#NonlinearAPI","page":"API Reference","title":"Nonlinear Modeling","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"More information can be found in the Nonlinear section of the manual.","category":"page"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear\nNonlinear.Model","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear","page":"API Reference","title":"MathOptInterface.Nonlinear","text":"Nonlinear\n\nwarning: Warning\nThe Nonlinear submodule is experimental. Until this message is removed, breaking changes may be introduced in any minor or patch release of MathOptInterface.\n\n\n\n\n\n","category":"module"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.Model","page":"API Reference","title":"MathOptInterface.Nonlinear.Model","text":"Model()\n\nThe core datastructure for representing a nonlinear optimization problem.\n\nIt has the following fields:\n\nobjective::Union{Nothing,Expression} : holds the nonlinear objective function, if one exists, otherwise nothing.\nexpressions::Vector{Expression} : a vector of expressions in the model.\nconstraints::OrderedDict{ConstraintIndex,Constraint} : a map from ConstraintIndex to the corresponding Constraint. An OrderedDict is used instead of a Vector to support constraint deletion.\nparameters::Vector{Float64} : holds the current values of the parameters.\noperators::OperatorRegistry : stores the operators used in the model.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#nonlinear_api_expressions","page":"API Reference","title":"Expressions","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.ExpressionIndex\nNonlinear.add_expression","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.ExpressionIndex","page":"API Reference","title":"MathOptInterface.Nonlinear.ExpressionIndex","text":"ExpressionIndex\n\nAn index to a nonlinear expression that is returned by add_expression.\n\nGiven data::Model and ex::ExpressionIndex, use data[ex] to retrieve the corresponding Expression.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.add_expression","page":"API Reference","title":"MathOptInterface.Nonlinear.add_expression","text":"add_expression(model::Model, expr)::ExpressionIndex\n\nParse expr into a Expression and add to model. Returns an ExpressionIndex that can be interpolated into other input expressions.\n\nexpr must be a type that is supported by parse_expression.\n\nExamples\n\nmodel = Model()\nx = MOI.VariableIndex(1)\nex = add_expression(model, :($x^2 + 1))\nset_objective(model, :(sqrt($ex)))\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#nonlinear_api_parameters","page":"API Reference","title":"Parameters","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.ParameterIndex\nNonlinear.add_parameter","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.ParameterIndex","page":"API Reference","title":"MathOptInterface.Nonlinear.ParameterIndex","text":"ParameterIndex\n\nAn index to a nonlinear parameter that is returned by add_parameter. Given data::Model and p::ParameterIndex, use data[p] to retrieve the current value of the parameter and data[p] = value to set a new value.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.add_parameter","page":"API Reference","title":"MathOptInterface.Nonlinear.add_parameter","text":"add_parameter(model::Model, value::Float64)::ParameterIndex\n\nAdd a new parameter to model with the default value value. Returns a ParameterIndex that can be interpolated into other input expressions and used to modify the value of the parameter.\n\nExamples\n\nmodel = Model()\nx = MOI.VariableIndex(1)\np = add_parameter(model, 1.2)\nc = add_constraint(model, :($x^2 - $p), MOI.LessThan(0.0))\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#nonlinear_api_objectives","page":"API Reference","title":"Objectives","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.set_objective","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.set_objective","page":"API Reference","title":"MathOptInterface.Nonlinear.set_objective","text":"set_objective(model::Model, obj)::Nothing\n\nParse obj into a Expression and set as the objective function of model.\n\nobj must be a type that is supported by parse_expression.\n\nTo remove the objective, pass nothing.\n\nExamples\n\nmodel = Model()\nx = MOI.VariableIndex(1)\nset_objective(model, :($x^2 + 1))\nset_objective(model, x)\nset_objective(model, nothing)\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#nonlinear_api_constraints","page":"API Reference","title":"Constraints","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.ConstraintIndex\nNonlinear.add_constraint\nNonlinear.delete","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.ConstraintIndex","page":"API Reference","title":"MathOptInterface.Nonlinear.ConstraintIndex","text":"ConstraintIndex\n\nAn index to a nonlinear constraint that is returned by add_constraint.\n\nGiven data::Model and c::ConstraintIndex, use data[c] to retrieve the corresponding Constraint.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.add_constraint","page":"API Reference","title":"MathOptInterface.Nonlinear.add_constraint","text":"add_constraint(\n model::Model,\n func,\n set::Union{\n MOI.GreaterThan{Float64},\n MOI.LessThan{Float64},\n MOI.Interval{Float64},\n MOI.EqualTo{Float64},\n },\n)\n\nParse func and set into a Constraint and add to model. Returns a ConstraintIndex that can be used to delete the constraint or query solution information.\n\nExamples\n\nmodel = Model()\nx = MOI.VariableIndex(1)\nc = add_constraint(model, :($x^2), MOI.LessThan(1.0))\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.delete","page":"API Reference","title":"MathOptInterface.Nonlinear.delete","text":"delete(model::Model, c::ConstraintIndex)::Nothing\n\nDelete the constraint index c from model.\n\nExamples\n\nmodel = Model()\nx = MOI.VariableIndex(1)\nc = add_constraint(model, :($x^2), MOI.LessThan(1.0))\ndelete(model, c)\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#nonlinear_api_operators","page":"API Reference","title":"User-defined operators","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.OperatorRegistry\nNonlinear.DEFAULT_UNIVARIATE_OPERATORS\nNonlinear.DEFAULT_MULTIVARIATE_OPERATORS\nNonlinear.register_operator\nNonlinear.register_operator_if_needed\nNonlinear.assert_registered\nNonlinear.check_return_type\nNonlinear.eval_univariate_function\nNonlinear.eval_univariate_gradient\nNonlinear.eval_univariate_hessian\nNonlinear.eval_multivariate_function\nNonlinear.eval_multivariate_gradient\nNonlinear.eval_multivariate_hessian\nNonlinear.eval_logic_function\nNonlinear.eval_comparison_function","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.OperatorRegistry","page":"API Reference","title":"MathOptInterface.Nonlinear.OperatorRegistry","text":"OperatorRegistry()\n\nCreate a new OperatorRegistry to store and evaluate univariate and multivariate operators.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.DEFAULT_UNIVARIATE_OPERATORS","page":"API Reference","title":"MathOptInterface.Nonlinear.DEFAULT_UNIVARIATE_OPERATORS","text":"DEFAULT_UNIVARIATE_OPERATORS\n\nThe list of univariate operators that are supported by default.\n\nExample\n\njulia> import MathOptInterface as MOI\n\njulia> MOI.Nonlinear.DEFAULT_UNIVARIATE_OPERATORS\n73-element Vector{Symbol}:\n :+\n :-\n :abs\n :sign\n :sqrt\n :cbrt\n :abs2\n :inv\n :log\n :log10\n ⋮\n :airybi\n :airyaiprime\n :airybiprime\n :besselj0\n :besselj1\n :bessely0\n :bessely1\n :erfcx\n :dawson\n\n\n\n\n\n","category":"constant"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.DEFAULT_MULTIVARIATE_OPERATORS","page":"API Reference","title":"MathOptInterface.Nonlinear.DEFAULT_MULTIVARIATE_OPERATORS","text":"DEFAULT_MULTIVARIATE_OPERATORS\n\nThe list of multivariate operators that are supported by default.\n\nExample\n\njulia> import MathOptInterface as MOI\n\njulia> MOI.Nonlinear.DEFAULT_MULTIVARIATE_OPERATORS\n9-element Vector{Symbol}:\n :+\n :-\n :*\n :^\n :/\n :ifelse\n :atan\n :min\n :max\n\n\n\n\n\n","category":"constant"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.register_operator","page":"API Reference","title":"MathOptInterface.Nonlinear.register_operator","text":"register_operator(\n model::Model,\n op::Symbol,\n nargs::Int,\n f::Function,\n [∇f::Function],\n [∇²f::Function],\n)\n\nRegister the user-defined operator op with nargs input arguments in model.\n\nUnivariate functions\n\nf(x::T)::T must be a function that takes a single input argument x and returns the function evaluated at x. If ∇f and ∇²f are not provided, f must support any Real input type T.\n∇f(x::T)::T is a function that takes a single input argument x and returns the first derivative of f with respect to x. If ∇²f is not provided, ∇f must support any Real input type T.\n∇²f(x::T)::T is a function that takes a single input argument x and returns the second derivative of f with respect to x.\n\nMultivariate functions\n\nf(x::T...)::T must be a function that takes a nargs input arguments x and returns the function evaluated at x. If ∇f and ∇²f are not provided, f must support any Real input type T.\n∇f(g::AbstractVector{T}, x::T...)::T is a function that takes a cache vector g of length length(x), and fills each element g[i] with the partial derivative of f with respect to x[i].\n∇²f(H::AbstractMatrix, x::T...)::T is a function that takes a matrix H and fills the lower-triangular components H[i, j] with the Hessian of f with respect to x[i] and x[j] for i >= j.\n\nNotes for multivariate Hessians\n\nH has size(H) == (length(x), length(x)), but you must not access elements H[i, j] for i > j.\nH is dense, but you do not need to fill structural zeros.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.register_operator_if_needed","page":"API Reference","title":"MathOptInterface.Nonlinear.register_operator_if_needed","text":"register_operator_if_needed(\n registry::OperatorRegistry,\n op::Symbol,\n nargs::Int,\n f::Function;\n)\n\nSimilar to register_operator, but this function warns if the function is not registered, and skips silently if it already is.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.assert_registered","page":"API Reference","title":"MathOptInterface.Nonlinear.assert_registered","text":"assert_registered(registry::OperatorRegistry, op::Symbol, nargs::Int)\n\nThrow an error if op is not registered in registry with nargs arguments.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.check_return_type","page":"API Reference","title":"MathOptInterface.Nonlinear.check_return_type","text":"check_return_type(::Type{T}, ret::S) where {T,S}\n\nOverload this method for new types S to throw an informative error if a user-defined function returns the type S instead of T.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_univariate_function","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_univariate_function","text":"eval_univariate_function(\n registry::OperatorRegistry,\n op::Symbol,\n x::T,\n) where {T}\n\nEvaluate the operator op(x)::T, where op is a univariate function in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_univariate_gradient","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_univariate_gradient","text":"eval_univariate_gradient(\n registry::OperatorRegistry,\n op::Symbol,\n x::T,\n) where {T}\n\nEvaluate the first-derivative of the operator op(x)::T, where op is a univariate function in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_univariate_hessian","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_univariate_hessian","text":"eval_univariate_hessian(\n registry::OperatorRegistry,\n op::Symbol,\n x::T,\n) where {T}\n\nEvaluate the second-derivative of the operator op(x)::T, where op is a univariate function in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_multivariate_function","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_multivariate_function","text":"eval_multivariate_function(\n registry::OperatorRegistry,\n op::Symbol,\n x::AbstractVector{T},\n) where {T}\n\nEvaluate the operator op(x)::T, where op is a multivariate function in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_multivariate_gradient","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_multivariate_gradient","text":"eval_multivariate_gradient(\n registry::OperatorRegistry,\n op::Symbol,\n g::AbstractVector{T},\n x::AbstractVector{T},\n) where {T}\n\nEvaluate the gradient of operator g .= ∇op(x), where op is a multivariate function in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_multivariate_hessian","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_multivariate_hessian","text":"eval_multivariate_hessian(\n registry::OperatorRegistry,\n op::Symbol,\n H::AbstractMatrix,\n x::AbstractVector{T},\n) where {T}\n\nEvaluate the Hessian of operator ∇²op(x), where op is a multivariate function in registry.\n\nThe Hessian is stored in the lower-triangular part of the matrix H.\n\nnote: Note\nImplementations of the Hessian operators will not fill structural zeros. Therefore, before calling this function you should pre-populate the matrix H with 0.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_logic_function","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_logic_function","text":"eval_logic_function(\n registry::OperatorRegistry,\n op::Symbol,\n lhs::T,\n rhs::T,\n)::Bool where {T}\n\nEvaluate (lhs op rhs)::Bool, where op is a logic operator in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.eval_comparison_function","page":"API Reference","title":"MathOptInterface.Nonlinear.eval_comparison_function","text":"eval_comparison_function(\n registry::OperatorRegistry,\n op::Symbol,\n lhs::T,\n rhs::T,\n)::Bool where {T}\n\nEvaluate (lhs op rhs)::Bool, where op is a comparison operator in registry.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#Automatic-differentiation-backends","page":"API Reference","title":"Automatic-differentiation backends","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.Evaluator\nNonlinear.AbstractAutomaticDifferentiation\nNonlinear.ExprGraphOnly\nNonlinear.SparseReverseMode","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.Evaluator","page":"API Reference","title":"MathOptInterface.Nonlinear.Evaluator","text":"Evaluator(\n model::Model,\n backend::AbstractAutomaticDifferentiation,\n ordered_variables::Vector{MOI.VariableIndex},\n)\n\nCreate Evaluator, a subtype of MOI.AbstractNLPEvaluator, from Model.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.AbstractAutomaticDifferentiation","page":"API Reference","title":"MathOptInterface.Nonlinear.AbstractAutomaticDifferentiation","text":"AbstractAutomaticDifferentiation\n\nAn abstract type for extending Evaluator.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.ExprGraphOnly","page":"API Reference","title":"MathOptInterface.Nonlinear.ExprGraphOnly","text":"ExprGraphOnly() <: AbstractAutomaticDifferentiation\n\nThe default implementation of AbstractAutomaticDifferentiation. The only supported feature is :ExprGraph.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.SparseReverseMode","page":"API Reference","title":"MathOptInterface.Nonlinear.SparseReverseMode","text":"SparseReverseMode() <: AbstractAutomaticDifferentiation\n\nAn implementation of AbstractAutomaticDifferentiation that uses sparse reverse-mode automatic differentiation to compute derivatives. Supports all features in the MOI nonlinear interface.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#Data-structure","page":"API Reference","title":"Data-structure","text":"","category":"section"},{"location":"moi/submodules/Nonlinear/reference/","page":"API Reference","title":"API Reference","text":"Nonlinear.Node\nNonlinear.NodeType\nNonlinear.Expression\nNonlinear.Constraint\nNonlinear.adjacency_matrix\nNonlinear.parse_expression\nNonlinear.convert_to_expr\nNonlinear.ordinal_index","category":"page"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.Node","page":"API Reference","title":"MathOptInterface.Nonlinear.Node","text":"struct Node\n type::NodeType\n index::Int\n parent::Int\nend\n\nA single node in a nonlinear expression tree. Used by Expression.\n\nSee the MathOptInterface documentation for information on how the nodes and values form an expression tree.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.NodeType","page":"API Reference","title":"MathOptInterface.Nonlinear.NodeType","text":"NodeType\n\nAn enum describing the possible node types. Each Node has a .index field, which should be interpreted as follows:\n\nNODE_CALL_MULTIVARIATE: the index into operators.multivariate_operators\nNODE_CALL_UNIVARIATE: the index into operators.univariate_operators\nNODE_LOGIC: the index into operators.logic_operators\nNODE_COMPARISON: the index into operators.comparison_operators\nNODE_MOI_VARIABLE: the value of MOI.VariableIndex(index) in the user's space of the model.\nNODE_VARIABLE: the 1-based index of the internal vector\nNODE_VALUE: the index into the .values field of Expression\nNODE_PARAMETER: the index into data.parameters\nNODE_SUBEXPRESSION: the index into data.expressions\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.Expression","page":"API Reference","title":"MathOptInterface.Nonlinear.Expression","text":"struct Expression\n nodes::Vector{Node}\n values::Vector{Float64}\nend\n\nThe core type that represents a nonlinear expression. See the MathOptInterface documentation for information on how the nodes and values form an expression tree.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.Constraint","page":"API Reference","title":"MathOptInterface.Nonlinear.Constraint","text":"struct Constraint\n expression::Expression\n set::Union{\n MOI.LessThan{Float64},\n MOI.GreaterThan{Float64},\n MOI.EqualTo{Float64},\n MOI.Interval{Float64},\n }\nend\n\nA type to hold information relating to the nonlinear constraint f(x) in S, where f(x) is defined by .expression, and S is .set.\n\n\n\n\n\n","category":"type"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.adjacency_matrix","page":"API Reference","title":"MathOptInterface.Nonlinear.adjacency_matrix","text":"adjacency_matrix(nodes::Vector{Node})\n\nCompute the sparse adjacency matrix describing the parent-child relationships in nodes.\n\nThe element (i, j) is true if there is an edge from node[j] to node[i]. Since we get a column-oriented matrix, this gives us a fast way to look up the edges leaving any node (that is, the children).\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.parse_expression","page":"API Reference","title":"MathOptInterface.Nonlinear.parse_expression","text":"parse_expression(data::Model, input)::Expression\n\nParse input into a Expression.\n\n\n\n\n\nparse_expression(\n data::Model,\n expr::Expression,\n input::Any,\n parent_index::Int,\n)::Expression\n\nParse input into a Expression, and add it to expr as a child of expr.nodes[parent_index]. Existing subexpressions and parameters are stored in data.\n\nYou can extend parsing support to new types of objects by overloading this method with a different type on input::Any.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.convert_to_expr","page":"API Reference","title":"MathOptInterface.Nonlinear.convert_to_expr","text":"convert_to_expr(data::Model, expr::Expression)\n\nConvert the Expression expr into a Julia Expr.\n\nsubexpressions are represented by a ExpressionIndex object.\nparameters are represented by a ParameterIndex object.\nvariables are represented by an MOI.VariableIndex object.\n\n\n\n\n\nconvert_to_expr(\n evaluator::Evaluator,\n expr::Expression;\n moi_output_format::Bool,\n)\n\nConvert the Expression expr into a Julia Expr.\n\nIf moi_output_format = true:\n\nsubexpressions will be converted to Julia Expr and substituted into the output expression.\nthe current value of each parameter will be interpolated into the expression\nvariables will be represented in the form x[MOI.VariableIndex(i)]\n\nIf moi_output_format = false:\n\nsubexpressions will be represented by a ExpressionIndex object.\nparameters will be represented by a ParameterIndex object.\nvariables will be represented by an MOI.VariableIndex object.\n\nwarning: Warning\nTo use moi_output_format = true, you must have first called MOI.initialize with :ExprGraph as a requested feature.\n\n\n\n\n\n","category":"function"},{"location":"moi/submodules/Nonlinear/reference/#MathOptInterface.Nonlinear.ordinal_index","page":"API Reference","title":"MathOptInterface.Nonlinear.ordinal_index","text":"ordinal_index(evaluator::Evaluator, c::ConstraintIndex)::Int\n\nReturn the 1-indexed value of the constraint index c in evaluator.\n\nExamples\n\nmodel = Model()\nx = MOI.VariableIndex(1)\nc1 = add_constraint(model, :($x^2), MOI.LessThan(1.0))\nc2 = add_constraint(model, :($x^2), MOI.LessThan(1.0))\nevaluator = Evaluator(model)\nMOI.initialize(evaluator, Symbol[])\nordinal_index(evaluator, c2) # Returns 2\ndelete(model, c1)\nevaluator = Evaluator(model)\nMOI.initialize(evaluator, Symbol[])\nordinal_index(model, c2) # Returns 1\n\n\n\n\n\n","category":"function"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"EditURL = \"https://github.com/lanl-ansi/Juniper.jl/blob/v0.9.2/README.md\"","category":"page"},{"location":"packages/Juniper/#Juniper","page":"lanl-ansi/Juniper.jl","title":"Juniper","text":"","category":"section"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"(Image: CI) (Image: codecov) (Image: Documentation)","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"Juniper (Jump Nonlinear Integer Program solver) is a solver for mixed-integer nonlinear programs. ","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"It is a heuristic which is not guaranteed to find the global optimum. If you need the global optimum, check out Alpine.","category":"page"},{"location":"packages/Juniper/#Installation","page":"lanl-ansi/Juniper.jl","title":"Installation","text":"","category":"section"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"Install Juniper using the Julia package manager:","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"import Pkg\nPkg.add(\"JuMP\")","category":"page"},{"location":"packages/Juniper/#Use-with-JuMP","page":"lanl-ansi/Juniper.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"Use Juniper with JuMP as follows:","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"using JuMP, Juniper, Ipopt\nipopt = optimizer_with_attributes(Ipopt.Optimizer, \"print_level\"=>0)\noptimizer = optimizer_with_attributes(Juniper.Optimizer, \"nl_solver\"=>ipopt)\nmodel = Model(optimizer)\nv = [10, 20, 12, 23, 42]\nw = [12, 45, 12, 22, 21]\n@variable(model, x[1:5], Bin)\n@objective(model, Max, v' * x)\n@constraint(model, sum(w[i]*x[i]^2 for i in 1:5) <= 45)\noptimize!(model)\nprintln(termination_status(model))\nprintln(objective_value(model))\nprintln(value.(x))","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"The nl_solver is used by Juniper to solve continuous nonlinear sub-problems while Juniper searches for acceptable assignments to the discrete variables. A common choice is Ipopt, but any optimizer that supports the continuous relaxation of the model may be used.","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"To solve problems with more complex nonlinear functions, use the @NLconstraint and @NLobjective JuMP macros.","category":"page"},{"location":"packages/Juniper/#Documentation","page":"lanl-ansi/Juniper.jl","title":"Documentation","text":"","category":"section"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"The online documentation is available at https://lanl-ansi.github.io/Juniper.jl/stable/.","category":"page"},{"location":"packages/Juniper/#Feasibility-pump","page":"lanl-ansi/Juniper.jl","title":"Feasibility pump","text":"","category":"section"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"If Juniper has difficulty finding feasible solutions on your model, try adding a solver that supports integer variables (for example, HiGHS) to run a feasibility pump:","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"using JuMP, Juniper, Ipopt, HiGHS\nipopt = optimizer_with_attributes(Ipopt.Optimizer, \"print_level\" => 0)\nhighs = optimizer_with_attributes(HiGHS.Optimizer, \"output_flag\" => false)\nmodel = Model(\n optimizer_with_attributes(\n Juniper.Optimizer,\n \"nl_solver\" => ipopt,\n \"mip_solver\" => highs,\n ),\n)","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"The feasibility pump is used at the start of Juniper to find a feasible solution before the branch and bound part starts. For some classes of problems this can be a highly effective pre-processor.","category":"page"},{"location":"packages/Juniper/#Citing-Juniper","page":"lanl-ansi/Juniper.jl","title":"Citing Juniper","text":"","category":"section"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"If you find Juniper useful in your work, we kindly request that you cite the following paper or technical report:","category":"page"},{"location":"packages/Juniper/","page":"lanl-ansi/Juniper.jl","title":"lanl-ansi/Juniper.jl","text":"@inproceedings{juniper,\n Author = {Ole Kröger and Carleton Coffrin and Hassan Hijazi and Harsha Nagarajan},\n Title = {Juniper: An Open-Source Nonlinear Branch-and-Bound Solver in Julia},\n booktitle=\"Integration of Constraint Programming, Artificial Intelligence, and Operations Research\",\n pages=\"377--386\",\n year=\"2018\",\n publisher=\"Springer International Publishing\",\n isbn=\"978-3-319-93031-2\"\n}","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"EditURL = \"diet.jl\"","category":"page"},{"location":"tutorials/linear/diet/#The-diet-problem","page":"The diet problem","title":"The diet problem","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"The purpose of this tutorial is to demonstrate how to incorporate DataFrames into a JuMP model. As an example, we use classic Stigler diet problem.","category":"page"},{"location":"tutorials/linear/diet/#Required-packages","page":"The diet problem","title":"Required packages","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"This tutorial requires the following packages:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"using JuMP\nimport CSV\nimport DataFrames\nimport HiGHS\nimport Test","category":"page"},{"location":"tutorials/linear/diet/#Formulation","page":"The diet problem","title":"Formulation","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"We wish to cook a nutritionally balanced meal by choosing the quantity of each food f to eat from a set of foods F in our kitchen.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Each food f has a cost, c_f, as well as a macro-nutrient profile a_mf for each macro-nutrient m in M.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Because we care about a nutritionally balanced meal, we set some minimum and maximum limits for each nutrient, which we denote l_m and u_m respectively.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Furthermore, because we are optimizers, we seek the minimum cost solution.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"With a little effort, we can formulate our dinner problem as the following linear program:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"beginaligned\nmin sumlimits_f in F c_f x_f \ntextst l_m le sumlimits_f in F a_mf x_f le u_m forall m in M \n x_f ge 0 forall f in F\nendaligned","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"In the rest of this tutorial, we will create and solve this problem in JuMP, and learn what we should cook for dinner.","category":"page"},{"location":"tutorials/linear/diet/#Data","page":"The diet problem","title":"Data","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"First, we need some data for the problem. For this tutorial, we'll write CSV files to a temporary directory from Julia. If you have existing files, you could change the filenames to point to them instead.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"dir = mktempdir()","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"The first file is a list of foods with their macro-nutrient profile:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"food_csv_filename = joinpath(dir, \"diet_foods.csv\")\nopen(food_csv_filename, \"w\") do io\n write(\n io,\n \"\"\"\n name,cost,calories,protein,fat,sodium\n hamburger,2.49,410,24,26,730\n chicken,2.89,420,32,10,1190\n hot dog,1.50,560,20,32,1800\n fries,1.89,380,4,19,270\n macaroni,2.09,320,12,10,930\n pizza,1.99,320,15,12,820\n salad,2.49,320,31,12,1230\n milk,0.89,100,8,2.5,125\n ice cream,1.59,330,8,10,180\n \"\"\",\n )\n return\nend\nfoods = CSV.read(food_csv_filename, DataFrames.DataFrame)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Here, F is foods.name and c_f is foods.cost. (We're also playing a bit loose the term \"macro-nutrient\" by including calories and sodium.)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"We also need our minimum and maximum limits:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"nutrient_csv_filename = joinpath(dir, \"diet_nutrient.csv\")\nopen(nutrient_csv_filename, \"w\") do io\n write(\n io,\n \"\"\"\n nutrient,min,max\n calories,1800,2200\n protein,91,\n fat,0,65\n sodium,0,1779\n \"\"\",\n )\n return\nend\nlimits = CSV.read(nutrient_csv_filename, DataFrames.DataFrame)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Protein is missing data for the maximum. Let's fix that using coalesce:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"limits.max = coalesce.(limits.max, Inf)\nlimits","category":"page"},{"location":"tutorials/linear/diet/#JuMP-formulation","page":"The diet problem","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Now we're ready to convert our mathematical formulation into a JuMP model.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"First, create a new JuMP model. Since we have a linear program, we'll use HiGHS as our optimizer:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"model = Model(HiGHS.Optimizer)\nset_silent(model)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Next, we create a set of decision variables x, with one element for each row in the DataFrame, and each x has a lower bound of 0:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"@variable(model, x[foods.name] >= 0)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"To simplify things later on, we store the vector as a new column x in the DataFrame foods. Since x is a DenseAxisArray, we first need to convert it to an Array:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"foods.x = Array(x)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Our objective is to minimize the total cost of purchasing food:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"@objective(model, Min, sum(foods.cost .* foods.x));\nnothing #hide","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"For the next component, we need to add a constraint that our total intake of each component is within the limits contained in the limits DataFrame:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"@constraint(\n model,\n [row in eachrow(limits)],\n row.min <= sum(foods[!, row.nutrient] .* foods.x) <= row.max,\n);\nnothing #hide","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"What does our model look like?","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"print(model)","category":"page"},{"location":"tutorials/linear/diet/#Solution","page":"The diet problem","title":"Solution","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"Let's optimize and take a look at the solution:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"optimize!(model)\n@assert is_solved_and_feasible(model)\nTest.@test objective_value(model) ≈ 11.8288 atol = 1e-4 #hide\nsolution_summary(model)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"We found an optimal solution. Let's see what the optimal solution is:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"for row in eachrow(foods)\n println(row.name, \" = \", value(row.x))\nend","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"That's a lot of milk and ice cream, and sadly, we only get 0.6 of a hamburger.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"We can also use the function Containers.rowtable to easily convert the result into a DataFrame:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"table = Containers.rowtable(value, x; header = [:food, :quantity])\nsolution = DataFrames.DataFrame(table)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"This makes it easy to perform analyses our solution:","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"filter!(row -> row.quantity > 0.0, solution)","category":"page"},{"location":"tutorials/linear/diet/#Problem-modification","page":"The diet problem","title":"Problem modification","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"JuMP makes it easy to take an existing model and modify it by adding extra constraints. Let's see what happens if we add a constraint that we can buy at most 6 units of milk or ice cream combined.","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"dairy_foods = [\"milk\", \"ice cream\"]\nis_dairy = map(name -> name in dairy_foods, foods.name)\ndairy_constraint = @constraint(model, sum(foods[is_dairy, :x]) <= 6)\noptimize!(model)\nTest.@test !is_solved_and_feasible(model)\nTest.@test termination_status(model) == INFEASIBLE\nTest.@test primal_status(model) == NO_SOLUTION\nsolution_summary(model)","category":"page"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"There exists no feasible solution to our problem. Looks like we're stuck eating ice cream for dinner.","category":"page"},{"location":"tutorials/linear/diet/#Next-steps","page":"The diet problem","title":"Next steps","text":"","category":"section"},{"location":"tutorials/linear/diet/","page":"The diet problem","title":"The diet problem","text":"You can delete a constraint using delete(model, dairy_constraint). Can you add a different constraint to provide a diet with less dairy?\nSome food items (like hamburgers) are discrete. You can use set_integer to force a variable to take integer values. What happens to the solution if you do?","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"EditURL = \"n-queens.jl\"","category":"page"},{"location":"tutorials/linear/n-queens/#N-Queens","page":"N-Queens","title":"N-Queens","text":"","category":"section"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"This tutorial was originally contributed by Matthew Helm and Mathieu Tanneau.","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"The N-Queens problem involves placing N queens on an N x N chessboard such that none of the queens attacks another. In chess, a queen can move vertically, horizontally, and diagonally so there cannot be more than one queen on any given row, column, or diagonal.","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"(Image: Four Queens)","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"Note that none of the queens above are able to attack any other as a result of their careful placement.","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"using JuMP\nimport HiGHS\nimport LinearAlgebra","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"N-Queens","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"N = 8\n\nmodel = Model(HiGHS.Optimizer)\nset_silent(model)","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"Next, let's create an N x N chessboard of binary values. 0 will represent an empty space on the board and 1 will represent a space occupied by one of our queens:","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"@variable(model, x[1:N, 1:N], Bin);\nnothing #hide","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"Now we can add our constraints:","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"There must be exactly one queen in a given row/column","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"for i in 1:N\n @constraint(model, sum(x[i, :]) == 1)\n @constraint(model, sum(x[:, i]) == 1)\nend","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"There can only be one queen on any given diagonal","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"for i in -(N - 1):(N-1)\n @constraint(model, sum(LinearAlgebra.diag(x, i)) <= 1)\n @constraint(model, sum(LinearAlgebra.diag(reverse(x; dims = 1), i)) <= 1)\nend","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"We are ready to put our model to work and see if it is able to find a feasible solution:","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"optimize!(model)\n@assert is_solved_and_feasible(model)","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"We can now review the solution that our model found:","category":"page"},{"location":"tutorials/linear/n-queens/","page":"N-Queens","title":"N-Queens","text":"solution = round.(Int, value.(x))","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"EditURL = \"https://github.com/MAiNGO-github/MAiNGO.jl/blob/v0.2.2/README.md\"","category":"page"},{"location":"packages/MAiNGO/#MAiNGO.jl","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO.jl","text":"","category":"section"},{"location":"packages/MAiNGO/#What-is-MAiNGO?","page":"MAiNGO-github/MAiNGO.jl","title":"What is MAiNGO?","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"MAiNGO (McCormick-based Algorithm for mixed-integer Nonlinear Global Optimization) is a deterministic global optimization solver for nonconvex mixed-integer nonlinear programs (MINLPs). For more information on MAiNGO, including installation, usage, and licensing, please see the repository and the documentation.","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"MAiNGO.jl is a wrapper for using MAiNGO in Julia. It requires a working installation of MAiNGO, either the standalone version with parser support (Mode A), or the shared parser library version (Mode B). When building MAiNGO from source this is configurable in the CMake configuration of MAiNGO. Per default, precompiled version of MAiNGO is used that operates in Mode B. ","category":"page"},{"location":"packages/MAiNGO/#Using-the-precompiled-version-of-MAiNGO-from-the-Julia-Package-Manager","page":"MAiNGO-github/MAiNGO.jl","title":"Using the precompiled version of MAiNGO from the Julia Package Manager","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"A Julia package containing a precompiled version of MAiNGO is available (MAiNGO_jll). This version is used by default on supported platforms (Linux/MacOs/Windows), but this can be changed (see here). The precompiled version contains only open-source components. If you would like to use commercial subsolvers with MAiNGO (for example CPLEX or KNITRO), it might still make sense to compile MAiNGO yourself and use this version rather than the precompiled one.","category":"page"},{"location":"packages/MAiNGO/#Quick-start","page":"MAiNGO-github/MAiNGO.jl","title":"Quick start","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"using MAiNGO # if this fails, you need to add the package first manually\nusing JuMP\n#Set options in constructor\nmodel=Model(optimizer_with_attributes(MAiNGO.Optimizer, \"epsilonA\"=> 1e-8))\nset_silent(model)\n\n@variable(model, x, lower_bound=-20, upper_bound=20)\n@variable(model, 0<=y<=2)\n@variable(model, 0<=z<=2)\n@variable(model, 0<=d<=2)\n@variable(model, 0<=l<=6)\n@variable(model, 0<=b<=6)\n\n@NLobjective(model, Min, y*-1*x^2*(exp(-x^2+z+d+b)+l*b))\n@NLconstraint(model,(x^2+y^2>=1))\nJuMP.optimize!(model)\n#query results\nprintln(value(x),\" \",value(y))\nprintln(termination_status(model))\nprintln(primal_status(model))","category":"page"},{"location":"packages/MAiNGO/#Using-a-custom-MAiNGO-version","page":"MAiNGO-github/MAiNGO.jl","title":"Using a custom MAiNGO version","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"If you want to make use of a MAiNGO version that you build from source yourself, you have to give the path to the correct binary file. The correct path depends on the mode of operation.","category":"page"},{"location":"packages/MAiNGO/#Modes-of-operation","page":"MAiNGO-github/MAiNGO.jl","title":"Modes of operation","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"The following library allows to call MAiNGO from Julia. Currently two modes are supported:","category":"page"},{"location":"packages/MAiNGO/#Mode-A)","page":"MAiNGO-github/MAiNGO.jl","title":"Mode A)","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Using MAiNGO standalone exe with compiled parser support. This only allows to construct the problem in JuMP and call the MAiNGO executable with the filepath. Thus, results are obtained in form of an output text file.","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"If a JSON file is also written (by setting the corresponding MAiNGO option), then the contents of that file are parsed, allowing to query the model from JuMP. This requires the JSON module to be installed in Julia.","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"#Set path to MAiNGO standalone exe with compiled parser support.\nENV[\"MAINGO_EXEC\"] = \"W:\\\\maingo_build\\\\Debug\\\\MAiNGO.exe\" #replace \"W:\\\\maingo_build\\\\Debug\\\\\" with path to MAiNGO.exe\nusing MAiNGO # if this fails, you need to add the package first manually\n#create model\nusing JuMP\nmodel=Model(MAiNGO.Optimizer)\n@variable(model, x, lower_bound=0, upper_bound=5)\n@variable(model, y, lower_bound=0, upper_bound=2, start=0.5)\n\n#The following also works:\n#@variable(model,x in MOI.Interval(0,5)) \n#@variable(model, 0<=x<=5)\n#For integer variables use \n#@variable(model, y in MOI.Integer(), start=0.5)\n\n@constraint(model,y+x<=5)\n@constraint(model,x+y>=4)\n#Linear objective is also possible\n#@objective(model, Max, (1 - x)*y)\n@NLobjective(model, Max, (1 - x)^2 + 100 * (y - x^2)^2)\n@NLconstraint(model,min(x^2+y^2,y)<=5+y^2)\nMOI.set(model, MOI.RawOptimizerAttribute(\"writeJson\"),1) # write JSON file to enable querying of results from JuMP\nJuMP.optimize!(model)\nprintln(objective_value(model))","category":"page"},{"location":"packages/MAiNGO/#Mode-B)","page":"MAiNGO-github/MAiNGO.jl","title":"Mode B)","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Compiling an interface presenting a C-API to Julia. This must be configured when building MAiNGO, but allows several improvements. The problem definition is passed in memory. Settings can be set from within Julia/JuMP and the results are returned as Julia variables/ are queryable from JuMP.","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"For example:","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"#Set path to shared library with C-API.\nENV[\"MAINGO_LIB\"]=\"W:\\\\maingo_build\\\\Debug\\\\shared_parser.dll\" #replace \"W:\\\\maingo_build\\\\Debug\\\\\" with path to shared_parser.dll\n#include the wrapper\nusing MAiNGO # if this fails, you need to add the package first manually\n\n#Set options in constructor\nmodel=Model(optimizer_with_attributes(MAiNGO.Optimizer, \"epsilonA\"=> 1e-8,\"res_name\"=>\"res_new.txt\",\"prob_name\"=>\"problem.txt\"))\n#Alternate syntax\n#model=Model(() -> MAiNGO.Optimizer(epsilonA=1e-8))#, \"options\" => options))\n\n@variable(model, x, lower_bound=-20, upper_bound=20)\n#@variable(model, y in MOI.Integer(),lower_bound=-10,upper_bound=10, start=0.5)\n#Alterntaive forms\n#@variable(model,x in MOI.Interval(0,5))\n#@variable(model,y in MOI.Interval(0,2))\n#@variable(model, 0<=x<=5)\n@variable(model, 0<=y<=2)\n@variable(model, 0<=z<=2)\n@variable(model, 0<=d<=2)\n@variable(model, 0<=l<=6)\n@variable(model, 0<=b<=6)\n#@constraint(model,y+x<=5)\n#@constraint(model,x+y>=4)\n\n@NLobjective(model, Min, y*-1*x^2*(exp(-x^2+z+d+b)+l*b))\n@NLconstraint(model,(x^2+y^2>=1))\nJuMP.optimize!(model)\n#C-API allows us to query results\nprintln(value(x),\" \",value(y))\nprintln(termination_status(model))\nprintln(primal_status(model))","category":"page"},{"location":"packages/MAiNGO/#Supported-MAiNGO-Options","page":"MAiNGO-github/MAiNGO.jl","title":"Supported MAiNGO Options","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Both modes of operation allow setting MAiNGO options through the MatOptInterface-API. An example of how to do so is given below. All numerical and boolean options that are available in MAiNGO can be set using the MOI.RawOptimizerAttribute() function. Additionally, the following options can also be set through specific other MOI functions:","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Solver time limit (in seconds): MOI.TimeLimitSec()\nAbsolute gap: MOI.AbsoluteGapTolerance()\nRelative gap: MOI.RelativeGapTolerance()\nSilencing output: MOI.Silent() (this overwrites any other verbosity settings)","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"# assuming necessary paths and using-statements have already been set\nmodel = Model(MAiNGO.Optimizer)\nMOI.set(model, MOI.Silent(), true) # silence all MAiNGO output\nMOI.set(model, MOI.AbsoluteGapTolerance(), 1e-8) # set the absolute gap tolerance\nMOI.set(model, MOI.RawOptimizerAttribute(\"PRE_pureMultistart\"), 1) # example of setting an option via the MOI.RawOptimizerAttribute() function","category":"page"},{"location":"packages/MAiNGO/#Switching-between-modes,-finding-the-MAiNGO-executable","page":"MAiNGO-github/MAiNGO.jl","title":"Switching between modes, finding the MAiNGO executable","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"If you need to update the path to the MAiNGO executable during a session, this can be done as follows:","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"\nusing MAiNGO\n# by default, MAiNGO_jll will be used\n# explicitly force use of standalone version (mode A)\nENV[\"MAINGO_EXEC\"] = \"W:\\\\maingo_build\\\\Debug\\\\MAiNGO.exe\"\nfindMAiNGO(preferred=MAiNGO.C_API) # see note on \"preferred\"-argument below\n# ...\n# for example switch to release version of MAiNGO\nENV[\"MAINGO_EXEC\"] = \"W:\\\\maingo_build\\\\Release\\\\MAiNGO.exe\"\nfindMAiNGO(preferred=MAiNGO.C_API)\n# now switch to C-API (mode B)\nENV[\"MAINGO_LIB\"]=\"W:\\\\maingo_build\\\\Debug\\\\shared_parser.dll\" #replace \"W:\\\\maingo_build\\\\Debug\\\\\" with path to shared_parser.dll\nfindMAiNGO(preferred=MAiNGO.C_API)\n# switch back to MAiNGO_jll\nfindMAiNGO(preferred=MAiNGO.MAINGO_JLL)","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"The findMAiNGO() function takes several optional arguments, which can be passed as keyword-arguments:","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"verbose: boolean, whether or not progress on finding MAiNGO is reported. (Default value: false)\npreferred: either MAiNGO.MAINGOJLL or MAiNGO.CAPI, determines whether jll binaries or custom installation of MAiNGO is preferred. Note that the C-API is always preferred to the standalone version. If a custom standalone version should be used, set this value to C-API and pass an empty string as the capi argument (see next). (Default value: MAINGOJLL)\ncapi: string, path to C-API file. If set, this overrides the environment variable MAINGOLIB.\nstandalone: string, path to standalone executable file. If set, this overrides the environment variable MAINGO_EXEC.","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"For example, to use the C-API at a new location, one could call:","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"using MAiNGO\nfindMAiNGO(preferred=MAiNGO.C_API, c_api=\"path\\\\to\\\\c\\\\api\\\\shared_parser.dll\")","category":"page"},{"location":"packages/MAiNGO/#Currently-working:","page":"MAiNGO-github/MAiNGO.jl","title":"Currently working:","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Integer and binary variables.\nAffine, Quadratic and nonlinear constraints and objectives.\nOperations: min,max,*,/,+,-,-(unary), exp,log,abs,sqrt,^\nOther operations are easy to add if supported by MathOptInterface,ALE and MAiNGO.\nWriting problem defined in JuMP syntax to an ALE problem.txt and calling MAiNGO.exe on a specified path.\nAlternatively using a C-API to call MAiNGO.","category":"page"},{"location":"packages/MAiNGO/#Restrictions-compared-to-using-the-Python-or-C-interface","page":"MAiNGO-github/MAiNGO.jl","title":"Restrictions compared to using the Python or C++ interface","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"It is assumed that all variables are bounded. This interface assumes that integer variables are bounded between -1e6 and 1e6. For real variables these bounds are -1e8 and 1e8.","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Other functionality such as special support for growing datasets or MPI parallelization is not currently supported via this wrapper. Additionally, constraint formulations are simply passed from their representation in JuMP/MathOptInterface to MAiNGO. As such, there is no way to make use of advanced techniques such as defining constraints that are only used for the relaxations, using special relaxations for functions used in thermodynamics and process engineering or formulating reduced space formulations.","category":"page"},{"location":"packages/MAiNGO/#Tests","page":"MAiNGO-github/MAiNGO.jl","title":"Tests","text":"","category":"section"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"A subset of test cases for MathOptInterface solvers can be run by running the script ./test/runtests.jl. The current release was tested in the following combinations:","category":"page"},{"location":"packages/MAiNGO/","page":"MAiNGO-github/MAiNGO.jl","title":"MAiNGO-github/MAiNGO.jl","text":"Julia 1.8.5 and MathOptInterface v1.18.0\nJulia 1.9.4 and MathOptInterface v1.23.0.","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"EditURL = \"https://github.com/jump-dev/SDPNAL.jl/blob/00a3fa19f4e1235587948113b0b681da17f4dab5/README.md\"","category":"page"},{"location":"packages/SDPNAL/#SDPNAL.jl","page":"jump-dev/SDPNAL.jl","title":"SDPNAL.jl","text":"","category":"section"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"SDPNAL.jl is wrapper for the SDPNALplus solver.","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"The wrapper has two components:","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"an exported sdpnalplus function that is a thin wrapper on top of the sdpnalplus MATLAB function\nan interface to MathOptInterface","category":"page"},{"location":"packages/SDPNAL/#Affiliation","page":"jump-dev/SDPNAL.jl","title":"Affiliation","text":"","category":"section"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"This wrapper is maintained by the JuMP community and is not an official wrapper of SDPNALplus.","category":"page"},{"location":"packages/SDPNAL/#License","page":"jump-dev/SDPNAL.jl","title":"License","text":"","category":"section"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"SDPNAL.jl is licensed under the MIT License.","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"The underlying solver, SDPNALplus is licensed under the Creative Commons Attribution-ShareAlike 4.0 International Public License.","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"In addition, SDPNAL requires an installation of MATLAB, which is a closed-source commercial product for which you must obtain a license.","category":"page"},{"location":"packages/SDPNAL/#Use-with-JuMP","page":"jump-dev/SDPNAL.jl","title":"Use with JuMP","text":"","category":"section"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"To use SDPNAL with JuMP, do:","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"using JuMP, SDPNAL\nmodel = Model(SDPNAL.Optimizer)\nset_attribute(model, \"printlevel\", 0)","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"Note that, contrary to implementation of other solver-independent interfaces, using SDPNAL from JuMP or MOI fully exploits the particular structures of the SDPNAL interface and does not create superfluous slack variables and equality constraints as discussed in the SDPNAL guide:","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"A new interface is necessary to facilitate the modeling of an SDP problem for SDPNAL+ because of latter’s flexibility to directly accept inequality constraints of the form “l ≤ B(X) ≤ u”, and bound constraints of the form “L ≤ X ≤ U”. The flexibility can significantly simplify the generation of the data in the SDPNAL+ format as compared to what need to be done in CVX or YALMIP to reformulate them as equality constraints through introducing extra variables. In addition, the final number of equality constraints present in the data input to SDPNAL+ can also be substantially fewer than those present in CVX or YALMIP. It is important to note here that the number of equality constraints present in the generated problem data can greatly affect the computational efficiency of the solvers, especially for interior-point based solvers.","category":"page"},{"location":"packages/SDPNAL/#Installation","page":"jump-dev/SDPNAL.jl","title":"Installation","text":"","category":"section"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"First, make sure that you satisfy the requirements of the MATLAB.jl Julia package, and that the SDPNALplus software is installed in your MATLAB™ installation.","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"Then, install SDPNAL.jl using Pkg.add:","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"import Pkg\nPkg.add(\"SDPNAL\")","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"There is a startup.m file at the root of the SDPNAL folder. This adds all subdirectories recursively when MATLAB starts. However, the interface directory contains a .git subdirectory which contains a very large number of files. Because of this, MATLAB crashes if SDPNAL is in its path because the startup.m requests MATLAB to try to parse all the files in the .git folder. To resolve this problem, delete the startup.m file and .git folder, and add the subdirectories manually your toolbox/local/pathdef.m file as follows:","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"function p = pathdef\n\n% (...)\n\np = [...\n%%% BEGIN ENTRIES %%%\n'/path/to/SDPNALv1.0:', ...\n'/path/to/SDPNALv1.0/interface:', ...\n'/path/to/SDPNALv1.0/mexfun:', ...\n'/path/to/SDPNALv1.0/solver:', ...\n'/path/to/SDPNALv1.0/solver_main_default:', ...\n'/path/to/SDPNALv1.0/util:', ...\n% (...)","category":"page"},{"location":"packages/SDPNAL/","page":"jump-dev/SDPNAL.jl","title":"jump-dev/SDPNAL.jl","text":"If you have SDPT3 in addition to SDPNAL in the MATLAB path (that is, the toolbox/local/pathdef.m file) then you might have issues because both solvers define a validate function, and this might make SDPNAL call SDPT3's validate function instead of SDPT3's validate function.","category":"page"},{"location":"should_i_use/#Should-you-use-JuMP?","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP is an algebraic modeling language for mathematical optimization written in the Julia language.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"This page explains when you should consider using JuMP, and importantly, when you should not use JuMP.","category":"page"},{"location":"should_i_use/#When-should-you-use-JuMP?","page":"Should you use JuMP?","title":"When should you use JuMP?","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"You should use JuMP if you have a constrained optimization problem that is formulated using the language of mathematical programming, that is, the problem has:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"a set of real- or complex-valued decision variables\na scalar- or vector-valued real objective function\na set of constraints.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Key reasons to use JuMP include:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"User friendliness\nJuMP has syntax that mimics natural mathematical expressions. (See the section on algebraic modeling languages.)\nSolver independence\nJuMP uses a generic solver-independent interface provided by the MathOptInterface package, making it easy to change between a number of open-source and commercial optimization software packages (\"solvers\"). The Supported solvers section contains a table of the currently supported solvers.\nEase of embedding\nJuMP itself is written purely in Julia. Solvers are the only binary dependencies.\nJuMP provides automatic installation of most solvers.\nBecause it is embedded in a general-purpose programming language, JuMP makes it easy to solve optimization problems as part of a larger workflow, for example, inside a simulation, behind a web server, or as a subproblem in a decomposition algorithm. As a trade-off, JuMP's syntax is constrained by the syntax and functionality available in Julia.\nJuMP is MPL licensed, meaning that it can be embedded in commercial software that complies with the terms of the license.\nSpeed\nBenchmarking has shown that JuMP can create problems at similar speeds to special-purpose modeling languages such as AMPL.\nJuMP communicates with most solvers in memory, avoiding the need to write intermediary files.\nAccess to advanced algorithmic techniques\nJuMP supports efficient in-memory re-solves of models.\nJuMP provides access to solver-independent and solver-dependent Callbacks.","category":"page"},{"location":"should_i_use/#When-should-you-not-use-JuMP?","page":"Should you use JuMP?","title":"When should you not use JuMP?","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP supports a broad range of optimization classes. However, there are still some that it doesn't support, or that are better supported by other software packages.","category":"page"},{"location":"should_i_use/#You-want-to-optimize-a-complicated-Julia-function","page":"Should you use JuMP?","title":"You want to optimize a complicated Julia function","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Packages in Julia compose well. It's common for people to pick two unrelated packages and use them in conjunction to create novel behavior. JuMP isn't one of those packages.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"If you want to optimize an ordinary differential equation from DifferentialEquations.jl or tune a neural network from Flux.jl, consider using other packages such as:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Optim.jl\nOptimization.jl\nNLPModels.jl\nNonconvex.jl","category":"page"},{"location":"should_i_use/#Black-box,-derivative-free,-or-unconstrained-optimization","page":"Should you use JuMP?","title":"Black-box, derivative free, or unconstrained optimization","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP does support nonlinear programs with constraints and objectives containing user-defined operators. However, the functions must be automatically differentiable, or need to provide explicit derivatives. (See User-defined operators for more information.)","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"If your function is a black-box that is non-differentiable (for example, it is the output of a simulation written in C++), JuMP is not the right tool for the job. This also applies if you want to use a derivative free method.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Even if your problem is differentiable, if it is unconstrained there is limited benefit (and downsides in the form of more overhead) to using JuMP over tools which are only concerned with function minimization.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Alternatives to consider are:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Optim.jl\nOptimization.jl\nNLopt.jl","category":"page"},{"location":"should_i_use/#Disciplined-convex-programming","page":"Should you use JuMP?","title":"Disciplined convex programming","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP does not support disciplined convex programming (DCP).","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Alternatives to consider are:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Convex.jl\nCVXPY [Python]\nYALMIP [MATLAB]","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"note: Note\nConvex.jl is also built on MathOptInterface, and shares the same set of underlying solvers. However, you input problems differently, and Convex.jl checks that the problem is DCP.","category":"page"},{"location":"should_i_use/#Stochastic-programming","page":"Should you use JuMP?","title":"Stochastic programming","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP requires deterministic input data.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"If you have stochastic input data, consider using a JuMP extension such as:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"InfiniteOpt.jl\nStochasticPrograms.jl\nSDDP.jl","category":"page"},{"location":"should_i_use/#Polyhedral-computations","page":"Should you use JuMP?","title":"Polyhedral computations","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP does not provide tools for working with the polyhedron formed by the set of linear constraints.","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Alternatives to consider are:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"Polyhedra.jl (See the documentation to create a polyhedron from a JuMP model.)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"EditURL = \"design_patterns_for_larger_models.jl\"","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Design-patterns-for-larger-models","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"JuMP makes it easy to build and solve optimization models. However, once you start to construct larger models, and especially ones that interact with external data sources or have customizable sets of variables and constraints based on client choices, you may find that your scripts become unwieldy. This tutorial demonstrates a variety of ways in which you can structure larger JuMP models to improve their readability and maintainability.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"tip: Tip\nThis tutorial is more advanced than the other \"Getting started\" tutorials. It's in the \"Getting started\" section to give you an early preview of how JuMP makes it easy to structure larger models. However, if you are new to JuMP you may want to briefly skim the tutorial, and come back to it once you have written a few JuMP models.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Overview","page":"Design patterns for larger models","title":"Overview","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"This tutorial uses explanation-by-example. We're going to start with a simple knapsack model, and then expand it to add various features and structure.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#A-simple-script","page":"Design patterns for larger models","title":"A simple script","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Your first prototype of a JuMP model is probably a script that uses a small set of hard-coded data.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"using JuMP, HiGHS\nprofit = [5, 3, 2, 7, 4]\nweight = [2, 8, 4, 2, 5]\ncapacity = 10\nN = 5\nmodel = Model(HiGHS.Optimizer)\n@variable(model, x[1:N], Bin)\n@objective(model, Max, sum(profit[i] * x[i] for i in 1:N))\n@constraint(model, sum(weight[i] * x[i] for i in 1:N) <= capacity)\noptimize!(model)\n@assert is_solved_and_feasible(model)\nvalue.(x)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"The benefits of this approach are:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"it is quick to code\nit is quick to make changes.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"The downsides include:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"all variables are global (read Performance tips)\nit is easy to introduce errors, for example, having profit and weight be vectors of different lengths, or not match N\nthe solution, x[i], is hard to interpret without knowing the order in which we provided the data.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Wrap-the-model-in-a-function","page":"Design patterns for larger models","title":"Wrap the model in a function","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"A good next step is to wrap your model in a function. This is useful for a few reasons:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"it removes global variables\nit encapsulates the JuMP model and forces you to clarify your inputs and outputs\nwe can add some error checking.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function solve_knapsack_1(profit::Vector, weight::Vector, capacity::Real)\n if length(profit) != length(weight)\n throw(DimensionMismatch(\"profit and weight are different sizes\"))\n end\n N = length(weight)\n model = Model(HiGHS.Optimizer)\n @variable(model, x[1:N], Bin)\n @objective(model, Max, sum(profit[i] * x[i] for i in 1:N))\n @constraint(model, sum(weight[i] * x[i] for i in 1:N) <= capacity)\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return value.(x)\nend\n\nsolve_knapsack_1([5, 3, 2, 7, 4], [2, 8, 4, 2, 5], 10)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Create-better-data-structures","page":"Design patterns for larger models","title":"Create better data structures","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Although we can check for errors like mis-matched vector lengths, if you start to develop models with a lot of data, keeping track of vectors and lengths and indices is fragile and a common source of bugs. A good solution is to use Julia's type system to create an abstraction over your data.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"For example, we can create a struct that represents a single object, with a constructor that lets us validate assumptions on the input data:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"struct KnapsackObject\n profit::Float64\n weight::Float64\n function KnapsackObject(profit::Float64, weight::Float64)\n if weight < 0\n throw(DomainError(\"Weight of object cannot be negative\"))\n end\n return new(profit, weight)\n end\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"as well as a struct that holds a dictionary of objects and the knapsack's capacity:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"struct KnapsackData\n objects::Dict{String,KnapsackObject}\n capacity::Float64\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Here's what our data might look like now:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"objects = Dict(\n \"apple\" => KnapsackObject(5.0, 2.0),\n \"banana\" => KnapsackObject(3.0, 8.0),\n \"cherry\" => KnapsackObject(2.0, 4.0),\n \"date\" => KnapsackObject(7.0, 2.0),\n \"eggplant\" => KnapsackObject(4.0, 5.0),\n)\ndata = KnapsackData(objects, 10.0)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"If you want, you can add custom printing to make it easier to visualize:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function Base.show(io::IO, data::KnapsackData)\n println(io, \"A knapsack with capacity $(data.capacity) and possible items:\")\n for (k, v) in data.objects\n println(\n io,\n \" $(rpad(k, 8)) : profit = $(v.profit), weight = $(v.weight)\",\n )\n end\n return\nend\n\ndata","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Then, we can re-write our solve_knapsack function to take our KnapsackData as input:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function solve_knapsack_2(data::KnapsackData)\n model = Model(HiGHS.Optimizer)\n @variable(model, x[keys(data.objects)], Bin)\n @objective(model, Max, sum(v.profit * x[k] for (k, v) in data.objects))\n @constraint(\n model,\n sum(v.weight * x[k] for (k, v) in data.objects) <= data.capacity,\n )\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return value.(x)\nend\n\nsolve_knapsack_2(data)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Read-in-data-from-files","page":"Design patterns for larger models","title":"Read in data from files","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Having a data structure is a good step. But it is still annoying that we have to hard-code the data into Julia. A good next step is to separate the data into an external file format; JSON is a common choice.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"json_data = \"\"\"\n{\n \"objects\": {\n \"apple\": {\"profit\": 5.0, \"weight\": 2.0},\n \"banana\": {\"profit\": 3.0, \"weight\": 8.0},\n \"cherry\": {\"profit\": 2.0, \"weight\": 4.0},\n \"date\": {\"profit\": 7.0, \"weight\": 2.0},\n \"eggplant\": {\"profit\": 4.0, \"weight\": 5.0}\n },\n \"capacity\": 10.0\n}\n\"\"\"\ntemp_dir = mktempdir()\nknapsack_json_filename = joinpath(temp_dir, \"knapsack.json\")\n# Instead of writing a new file here you could replace `knapsack_json_filename`\n# with the path to a local file.\nwrite(knapsack_json_filename, json_data);\nnothing #hide","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Now let's write a function that reads this file and builds a KnapsackData object:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"import JSON\n\nfunction read_data(filename)\n d = JSON.parsefile(filename)\n return KnapsackData(\n Dict(\n k => KnapsackObject(v[\"profit\"], v[\"weight\"]) for\n (k, v) in d[\"objects\"]\n ),\n d[\"capacity\"],\n )\nend\n\ndata = read_data(knapsack_json_filename)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Add-options-via-if-else","page":"Design patterns for larger models","title":"Add options via if-else","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"At this point, we have data in a file format which we can load and solve a single problem. For many users, this might be sufficient. However, at some point you may be asked to add features like \"but what if we want to take more than one of a particular item?\"","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"If this is the first time that you've been asked to add a feature, adding options via if-else statements is a good approach. For example, we might write:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function solve_knapsack_3(data::KnapsackData; binary_knapsack::Bool)\n model = Model(HiGHS.Optimizer)\n if binary_knapsack\n @variable(model, x[keys(data.objects)], Bin)\n else\n @variable(model, x[keys(data.objects)] >= 0, Int)\n end\n @objective(model, Max, sum(v.profit * x[k] for (k, v) in data.objects))\n @constraint(\n model,\n sum(v.weight * x[k] for (k, v) in data.objects) <= data.capacity,\n )\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return value.(x)\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Now we can solve the binary knapsack:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"solve_knapsack_3(data; binary_knapsack = true)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"And an integer knapsack where we can take more than one copy of each item:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"solve_knapsack_3(data; binary_knapsack = false)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Add-configuration-options-via-dispatch","page":"Design patterns for larger models","title":"Add configuration options via dispatch","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"If you get repeated requests to add different options, you'll quickly find yourself in a mess of different flags and if-else statements. It's hard to write, hard to read, and hard to ensure you haven't introduced any bugs. A good solution is to use Julia's type dispatch to control the configuration of the model. The easiest way to explain this is by example.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"First, start by defining a new abstract type, as well as new subtypes for each of our options. These types are going to control the configuration of the knapsack model.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"abstract type AbstractConfiguration end\n\nstruct BinaryKnapsackConfig <: AbstractConfiguration end\n\nstruct IntegerKnapsackConfig <: AbstractConfiguration end","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Then, we rewrite our solve_knapsack function to take a config argument, and we introduce an add_knapsack_variables function to abstract the creation of our variables.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function solve_knapsack_4(data::KnapsackData, config::AbstractConfiguration)\n model = Model(HiGHS.Optimizer)\n x = add_knapsack_variables(model, data, config)\n @objective(model, Max, sum(v.profit * x[k] for (k, v) in data.objects))\n @constraint(\n model,\n sum(v.weight * x[k] for (k, v) in data.objects) <= data.capacity,\n )\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return value.(x)\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"For the binary knapsack problem, add_knapsack_variables looks like this:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function add_knapsack_variables(\n model::Model,\n data::KnapsackData,\n ::BinaryKnapsackConfig,\n)\n return @variable(model, x[keys(data.objects)], Bin)\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"For the integer knapsack problem, add_knapsack_variables looks like this:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function add_knapsack_variables(\n model::Model,\n data::KnapsackData,\n ::IntegerKnapsackConfig,\n)\n return @variable(model, x[keys(data.objects)] >= 0, Int)\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Now we can solve the binary knapsack:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"solve_knapsack_4(data, BinaryKnapsackConfig())","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"and the integer knapsack problem:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"solve_knapsack_4(data, IntegerKnapsackConfig())","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"The main benefit of the dispatch approach is that you can quickly add new options without needing to modify the existing code. For example:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"struct UpperBoundedKnapsackConfig <: AbstractConfiguration\n limit::Int\nend\n\nfunction add_knapsack_variables(\n model::Model,\n data::KnapsackData,\n config::UpperBoundedKnapsackConfig,\n)\n return @variable(model, 0 <= x[keys(data.objects)] <= config.limit, Int)\nend\n\nsolve_knapsack_4(data, UpperBoundedKnapsackConfig(3))","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Generalize-constraints-and-objectives","page":"Design patterns for larger models","title":"Generalize constraints and objectives","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"It's easy to extend the dispatch approach to constraints and objectives as well. The key points to notice in the next two functions are that:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"we can access registered variables via model[:x]\nwe can define generic functions which accept any AbstractConfiguration as a configuration argument. That means we can implement a single method and have it apply to multiple configuration types.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function add_knapsack_constraints(\n model::Model,\n data::KnapsackData,\n ::AbstractConfiguration,\n)\n x = model[:x]\n @constraint(\n model,\n capacity_constraint,\n sum(v.weight * x[k] for (k, v) in data.objects) <= data.capacity,\n )\n return\nend\n\nfunction add_knapsack_objective(\n model::Model,\n data::KnapsackData,\n ::AbstractConfiguration,\n)\n x = model[:x]\n @objective(model, Max, sum(v.profit * x[k] for (k, v) in data.objects))\n return\nend\n\nfunction solve_knapsack_5(data::KnapsackData, config::AbstractConfiguration)\n model = Model(HiGHS.Optimizer)\n add_knapsack_variables(model, data, config)\n add_knapsack_constraints(model, data, config)\n add_knapsack_objective(model, data, config)\n optimize!(model)\n @assert is_solved_and_feasible(model)\n return value.(model[:x])\nend\n\nsolve_knapsack_5(data, BinaryKnapsackConfig())","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Remove-solver-dependence,-add-error-checks","page":"Design patterns for larger models","title":"Remove solver dependence, add error checks","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Compared to where we started, our knapsack model is now significantly different. We've wrapped it in a function, defined some data types, and introduced configuration options to control the variables and constraints that get added. There are a few other steps we can do to further improve things:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"remove the dependence on HiGHS\nadd checks that we found an optimal solution\nadd a helper function to avoid the need to explicitly construct the data.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"function solve_knapsack_6(\n optimizer,\n data::KnapsackData,\n config::AbstractConfiguration,\n)\n model = Model(optimizer)\n add_knapsack_variables(model, data, config)\n add_knapsack_constraints(model, data, config)\n add_knapsack_objective(model, data, config)\n optimize!(model)\n if !is_solved_and_feasible(model)\n @warn(\"Model not solved to optimality\")\n return nothing\n end\n return value.(model[:x])\nend\n\nfunction solve_knapsack_6(\n optimizer,\n data::String,\n config::AbstractConfiguration,\n)\n return solve_knapsack_6(optimizer, read_data(data), config)\nend\n\nsolution = solve_knapsack_6(\n HiGHS.Optimizer,\n knapsack_json_filename,\n BinaryKnapsackConfig(),\n)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Create-a-module","page":"Design patterns for larger models","title":"Create a module","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Now we're ready to expose our model to the wider world. That might be as part of a larger Julia project that we're contributing to, or as a stand-alone script that we can run on-demand. In either case, it's good practice to wrap everything in a module. This further encapsulates our code into a single namespace, and we can add documentation in the form of docstrings.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Some good rules to follow when creating a module are:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"use import in a module instead of using to make it clear which functions are from which packages\nuse _ to start function and type names that are considered private\nadd docstrings to all public variables and functions.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"module KnapsackModel\n\nimport JuMP\nimport JSON\n\nstruct _KnapsackObject\n profit::Float64\n weight::Float64\n function _KnapsackObject(profit::Float64, weight::Float64)\n if weight < 0\n throw(DomainError(\"Weight of object cannot be negative\"))\n end\n return new(profit, weight)\n end\nend\n\nstruct _KnapsackData\n objects::Dict{String,_KnapsackObject}\n capacity::Float64\nend\n\nfunction _read_data(filename)\n d = JSON.parsefile(filename)\n return _KnapsackData(\n Dict(\n k => _KnapsackObject(v[\"profit\"], v[\"weight\"]) for\n (k, v) in d[\"objects\"]\n ),\n d[\"capacity\"],\n )\nend\n\nabstract type _AbstractConfiguration end\n\n\"\"\"\n BinaryKnapsackConfig()\n\nCreate a binary knapsack problem where each object can be taken 0 or 1 times.\n\"\"\"\nstruct BinaryKnapsackConfig <: _AbstractConfiguration end\n\n\"\"\"\n IntegerKnapsackConfig()\n\nCreate an integer knapsack problem where each object can be taken any number of\ntimes.\n\"\"\"\nstruct IntegerKnapsackConfig <: _AbstractConfiguration end\n\nfunction _add_knapsack_variables(\n model::JuMP.Model,\n data::_KnapsackData,\n ::BinaryKnapsackConfig,\n)\n return JuMP.@variable(model, x[keys(data.objects)], Bin)\nend\n\nfunction _add_knapsack_variables(\n model::JuMP.Model,\n data::_KnapsackData,\n ::IntegerKnapsackConfig,\n)\n return JuMP.@variable(model, x[keys(data.objects)] >= 0, Int)\nend\n\nfunction _add_knapsack_constraints(\n model::JuMP.Model,\n data::_KnapsackData,\n ::_AbstractConfiguration,\n)\n x = model[:x]\n JuMP.@constraint(\n model,\n capacity_constraint,\n sum(v.weight * x[k] for (k, v) in data.objects) <= data.capacity,\n )\n return\nend\n\nfunction _add_knapsack_objective(\n model::JuMP.Model,\n data::_KnapsackData,\n ::_AbstractConfiguration,\n)\n x = model[:x]\n JuMP.@objective(model, Max, sum(v.profit * x[k] for (k, v) in data.objects))\n return\nend\n\nfunction _solve_knapsack(\n optimizer,\n data::_KnapsackData,\n config::_AbstractConfiguration,\n)\n model = JuMP.Model(optimizer)\n _add_knapsack_variables(model, data, config)\n _add_knapsack_constraints(model, data, config)\n _add_knapsack_objective(model, data, config)\n JuMP.optimize!(model)\n if !JuMP.is_solved_and_feasible(model)\n @warn(\"Model not solved to optimality\")\n return nothing\n end\n return JuMP.value.(model[:x])\nend\n\n\"\"\"\n solve_knapsack(\n optimizer,\n knapsack_json_filename::String,\n config::_AbstractConfiguration,\n )\n\nSolve the knapsack problem and return the optimal primal solution\n\n# Arguments\n\n * `optimizer` : an object that can be passed to `JuMP.Model` to construct a new\n JuMP model.\n * `knapsack_json_filename` : the filename of a JSON file containing the data for the\n problem.\n * `config` : an object to control the type of knapsack model constructed.\n Valid options are:\n * `BinaryKnapsackConfig()`\n * `IntegerKnapsackConfig()`\n\n# Returns\n\n * If an optimal solution exists: a `JuMP.DenseAxisArray` that maps the `String`\n name of each object to the number of objects to pack into the knapsack.\n * Otherwise, `nothing`, indicating that the problem does not have an optimal\n solution.\n\n# Example\n\n```julia\nsolution = solve_knapsack(\n HiGHS.Optimizer,\n \"path/to/data.json\",\n BinaryKnapsackConfig(),\n)\n```\n\n```julia\nsolution = solve_knapsack(\n MOI.OptimizerWithAttributes(HiGHS.Optimizer, \"output_flag\" => false),\n \"path/to/data.json\",\n IntegerKnapsackConfig(),\n)\n```\n\"\"\"\nfunction solve_knapsack(\n optimizer,\n knapsack_json_filename::String,\n config::_AbstractConfiguration,\n)\n data = _read_data(knapsack_json_filename)\n return _solve_knapsack(optimizer, data, config)\nend\n\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Finally, you can call your model:","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"import .KnapsackModel\n\nKnapsackModel.solve_knapsack(\n HiGHS.Optimizer,\n knapsack_json_filename,\n KnapsackModel.BinaryKnapsackConfig(),\n)","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"note: Note\nThe . in .KnapsackModel denotes that it is a submodule and not a separate package that we installed with Pkg.add. If you put the KnapsackModel in a separate file, load it with:include(\"path/to/KnapsackModel.jl\")\nimport .KnapsackModel","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Add-tests","page":"Design patterns for larger models","title":"Add tests","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"As a final step, you should add tests for your model. This often means testing on a small problem for which you can work out the optimal solution by hand. The Julia standard library Test has good unit-testing functionality.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"import .KnapsackModel\nusing Test\n\n@testset \"KnapsackModel\" begin\n @testset \"feasible_binary_knapsack\" begin\n x = KnapsackModel.solve_knapsack(\n HiGHS.Optimizer,\n knapsack_json_filename,\n KnapsackModel.BinaryKnapsackConfig(),\n )\n @test isapprox(x[\"apple\"], 1, atol = 1e-5)\n @test isapprox(x[\"banana\"], 0, atol = 1e-5)\n @test isapprox(x[\"cherry\"], 0, atol = 1e-5)\n @test isapprox(x[\"date\"], 1, atol = 1e-5)\n @test isapprox(x[\"eggplant\"], 1, atol = 1e-5)\n end\n @testset \"feasible_integer_knapsack\" begin\n x = KnapsackModel.solve_knapsack(\n HiGHS.Optimizer,\n knapsack_json_filename,\n KnapsackModel.IntegerKnapsackConfig(),\n )\n @test isapprox(x[\"apple\"], 0, atol = 1e-5)\n @test isapprox(x[\"banana\"], 0, atol = 1e-5)\n @test isapprox(x[\"cherry\"], 0, atol = 1e-5)\n @test isapprox(x[\"date\"], 5, atol = 1e-5)\n @test isapprox(x[\"eggplant\"], 0, atol = 1e-5)\n end\n @testset \"infeasible_binary_knapsack\" begin\n dir = mktempdir()\n infeasible_filename = joinpath(dir, \"infeasible.json\")\n write(\n infeasible_filename,\n \"\"\"{\n \"objects\": {\n \"apple\": {\"profit\": 5.0, \"weight\": 2.0},\n \"banana\": {\"profit\": 3.0, \"weight\": 8.0},\n \"cherry\": {\"profit\": 2.0, \"weight\": 4.0},\n \"date\": {\"profit\": 7.0, \"weight\": 2.0},\n \"eggplant\": {\"profit\": 4.0, \"weight\": 5.0}\n },\n \"capacity\": -10.0\n }\"\"\",\n )\n x = KnapsackModel.solve_knapsack(\n HiGHS.Optimizer,\n infeasible_filename,\n KnapsackModel.BinaryKnapsackConfig(),\n )\n @test x === nothing\n end\nend","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"tip: Tip\nPlace these tests in a separate file test_knapsack_model.jl so that you can run the tests by adding include(\"test_knapsack_model.jl\") to any file where needed.","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/#Next-steps","page":"Design patterns for larger models","title":"Next steps","text":"","category":"section"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"We've only briefly scratched the surface of ways to create and structure large JuMP models, so consider this tutorial a starting point, rather than a comprehensive list of all the possible ways to structure JuMP models. If you are embarking on a large project that uses JuMP, a good next step is to look at ways people have written large JuMP projects \"in the wild.\"","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"Here are some good examples (all co-incidentally related to energy):","category":"page"},{"location":"tutorials/getting_started/design_patterns_for_larger_models/","page":"Design patterns for larger models","title":"Design patterns for larger models","text":"AnyMOD.jl\nJuMP-dev 2021 talk\nsource code\nPowerModels.jl\nJuMP-dev 2021 talk\nsource code\nPowerSimulations.jl\nJuliaCon 2021 talk\nsource code\nUnitCommitment.jl\nJuMP-dev 2021 talk\nsource code","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"EditURL = \"multi.jl\"","category":"page"},{"location":"tutorials/linear/multi/#The-multi-commodity-flow-problem","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"","category":"section"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"This tutorial was originally contributed by Louis Luangkesorn.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"This tutorial is a JuMP implementation of the multi-commodity transportation model described in AMPL: A Modeling Language for Mathematical Programming, by R. Fourer, D.M. Gay and B.W. Kernighan.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"The purpose of this tutorial is to demonstrate creating a JuMP model from an SQLite database.","category":"page"},{"location":"tutorials/linear/multi/#Required-packages","page":"The multi-commodity flow problem","title":"Required packages","text":"","category":"section"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"This tutorial uses the following packages","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"using JuMP\nimport DataFrames\nimport HiGHS\nimport SQLite\nimport Tables\nimport Test\n\nconst DBInterface = SQLite.DBInterface","category":"page"},{"location":"tutorials/linear/multi/#Formulation","page":"The multi-commodity flow problem","title":"Formulation","text":"","category":"section"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"The multi-commondity flow problem is a simple extension of The transportation problem to multiple types of products. Briefly, we start with the formulation of the transportation problem:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"beginaligned\nmin sum_i in O j in D c_ij x_ij \nst sum_j in D x_i j le s_i forall i in O \n sum_i in O x_i j = d_j forall j in D \n x_i j ge 0 forall i in O j in D\nendaligned","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"but introduce a set of products P, resulting in:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"beginaligned\nmin sum_i in O j in D k in P c_ijk x_ijk \nst sum_j in D x_i j k le s_ik forall i in O k in P \n sum_i in O x_i j k = d_jk forall j in D k in P \n x_i jk ge 0 forall i in O j in D k in P \n sum_k in P x_i j k le u_ij forall i in O j in D\nendaligned","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"Note that the last constraint is new; it says that there is a maximum quantity of goods (of any type) that can be transported from origin i to destination j.","category":"page"},{"location":"tutorials/linear/multi/#Data","page":"The multi-commodity flow problem","title":"Data","text":"","category":"section"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"For the purpose of this tutorial, the JuMP repository contains an example database called multi.sqlite.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"filename = joinpath(@__DIR__, \"multi.sqlite\");\nnothing #hide","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"To run locally, download multi.sqlite and update filename appropriately.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"Load the database using SQLite.DB:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"db = SQLite.DB(filename)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"A quick way to see the schema of the database is via SQLite.tables:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"SQLite.tables(db)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"We interact with the database by executing queries, and then piping the results to an appropriate table. One example is a DataFrame:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"DBInterface.execute(db, \"SELECT * FROM locations\") |> DataFrames.DataFrame","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"But other table types are supported, such as Tables.rowtable:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"DBInterface.execute(db, \"SELECT * FROM locations\") |> Tables.rowtable","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"A rowtable is a Vector of NamedTuples.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"You can construct more complicated SQL queries:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"origins =\n DBInterface.execute(\n db,\n \"SELECT location FROM locations WHERE type = \\\"origin\\\"\",\n ) |> Tables.rowtable","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"But for our purpose, we just want the list of strings:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"origins = map(y -> y.location, origins)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"We can compose these two operations to get a list of destinations:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"destinations =\n DBInterface.execute(\n db,\n \"SELECT location FROM locations WHERE type = \\\"destination\\\"\",\n ) |>\n Tables.rowtable |>\n x -> map(y -> y.location, x)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"And a list of products from our products table:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"products =\n DBInterface.execute(db, \"SELECT product FROM products\") |>\n Tables.rowtable |>\n x -> map(y -> y.product, x)","category":"page"},{"location":"tutorials/linear/multi/#JuMP-formulation","page":"The multi-commodity flow problem","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"We start by creating a model and our decision variables:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"model = Model(HiGHS.Optimizer)\nset_silent(model)\n@variable(model, x[origins, destinations, products] >= 0)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"One approach when working with databases is to extract all of the data into a Julia datastructure. For example, let's pull the cost table into a DataFrame and then construct our objective by iterating over the rows of the DataFrame:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"cost = DBInterface.execute(db, \"SELECT * FROM cost\") |> DataFrames.DataFrame\n@objective(\n model,\n Max,\n sum(r.cost * x[r.origin, r.destination, r.product] for r in eachrow(cost)),\n);\nnothing #hide","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"If we don't want to use a DataFrame, we can use a Tables.rowtable instead:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"supply = DBInterface.execute(db, \"SELECT * FROM supply\") |> Tables.rowtable\nfor r in supply\n @constraint(model, sum(x[r.origin, :, r.product]) <= r.supply)\nend","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"Another approach is to execute the query, and then to iterate through the rows of the query using Tables.rows:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"demand = DBInterface.execute(db, \"SELECT * FROM demand\")\nfor r in Tables.rows(demand)\n @constraint(model, sum(x[:, r.destination, r.product]) == r.demand)\nend","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"warning: Warning\nIterating through the rows of a query result works by incrementing a cursor inside the database. As a consequence, you cannot call Tables.rows twice on the same query result.","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"The SQLite queries can be arbitrarily complex. For example, here's a query which builds every possible origin-destination pair:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"od_pairs = DBInterface.execute(\n db,\n \"\"\"\n SELECT a.location as 'origin',\n b.location as 'destination'\n FROM locations a\n INNER JOIN locations b\n ON a.type = 'origin' AND b.type = 'destination'\n \"\"\",\n)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"With a constraint that we cannot send more than 625 units between each pair:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"for r in Tables.rows(od_pairs)\n @constraint(model, sum(x[r.origin, r.destination, :]) <= 625)\nend","category":"page"},{"location":"tutorials/linear/multi/#Solution","page":"The multi-commodity flow problem","title":"Solution","text":"","category":"section"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"Finally, we can optimize the model:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"optimize!(model)\nTest.@test is_solved_and_feasible(model)\nsolution_summary(model)","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"and print the solution:","category":"page"},{"location":"tutorials/linear/multi/","page":"The multi-commodity flow problem","title":"The multi-commodity flow problem","text":"begin\n println(\" \", join(products, ' '))\n for o in origins, d in destinations\n v = lpad.([round(Int, value(x[o, d, p])) for p in products], 5)\n println(o, \" \", d, \" \", join(replace.(v, \" 0\" => \" . \"), \" \"))\n end\nend","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"EditURL = \"finance.jl\"","category":"page"},{"location":"tutorials/linear/finance/#Financial-modeling-problems","page":"Financial modeling problems","title":"Financial modeling problems","text":"","category":"section"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"This tutorial was generated using Literate.jl. Download the source as a .jl file.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"This tutorial was originally contributed by Arpit Bhatia.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Optimization models play an increasingly important role in financial decisions. Many computational finance problems can be solved efficiently using modern optimization techniques.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"In this tutorial we will discuss two such examples taken from (Cornuéjols et al., 2018).","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"This tutorial uses the following packages","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"using JuMP\nimport HiGHS","category":"page"},{"location":"tutorials/linear/finance/#Short-term-financing","page":"Financial modeling problems","title":"Short-term financing","text":"","category":"section"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Corporations routinely face the problem of financing short term cash commitments such as the following:","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Month Jan Feb Mar Apr May Jun\nNet Cash Flow -150 -100 200 -200 50 300","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Net cash flow requirements are given in thousands of dollars. The company has the following sources of funds:","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"A line of credit of up to $100K at an interest rate of 1% per month,\nIn any one of the first three months, it can issue 90-day commercial paper bearing a total interest of 2% for the 3-month period,\nExcess funds can be invested at an interest rate of 0.3% per month.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Our task is to find out the most economical way to use these 3 sources such that we end up with the most amount of money at the end of June.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"We model this problem in the following manner:","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"We will use the following decision variables:","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"the amount u_i drawn from the line of credit in month i\nthe amount v_i of commercial paper issued in month i\nthe excess funds w_i in month i","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Here we have three types of constraints:","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"for every month, cash inflow = cash outflow for each month\nupper bounds on u_i\nnonnegativity of the decision variables u_i, v_i and w_i.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Our objective will be to simply maximize the company's wealth in June, which say we represent with the variable m.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"financing = Model(HiGHS.Optimizer)\n\n@variables(financing, begin\n 0 <= u[1:5] <= 100\n 0 <= v[1:3]\n 0 <= w[1:5]\n m\nend)\n\n@objective(financing, Max, m)\n\n@constraints(\n financing,\n begin\n u[1] + v[1] - w[1] == 150 # January\n u[2] + v[2] - w[2] - 1.01u[1] + 1.003w[1] == 100 # February\n u[3] + v[3] - w[3] - 1.01u[2] + 1.003w[2] == -200 # March\n u[4] - w[4] - 1.02v[1] - 1.01u[3] + 1.003w[3] == 200 # April\n u[5] - w[5] - 1.02v[2] - 1.01u[4] + 1.003w[4] == -50 # May\n -m - 1.02v[3] - 1.01u[5] + 1.003w[5] == -300 # June\n end\n)\n\noptimize!(financing)\n@assert is_solved_and_feasible(financing)\nobjective_value(financing)","category":"page"},{"location":"tutorials/linear/finance/#Combinatorial-auctions","page":"Financial modeling problems","title":"Combinatorial auctions","text":"","category":"section"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"In many auctions, the value that a bidder has for a set of items may not be the sum of the values that he has for individual items.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Examples are equity trading, electricity markets, pollution right auctions and auctions for airport landing slots.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"To take this into account, combinatorial auctions allow the bidders to submit bids on combinations of items.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Let M=12 ldots m be the set of items that the auctioneer has to sell. A bid is a pair B_j=left(S_j p_jright) where S_j subseteq M is a nonempty set of items and p_j is the price offer for this set.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"Suppose that the auctioneer has received n bids B_1 B_2 ldots B_n The goal of this problem is to help an auctioneer determine the winners in order to maximize his revenue.","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"We model this problem by taking a decision variable y_j for every bid. We add a constraint that each item i is sold at most once. This gives us the following model:","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"beginaligned\nmax sum_i=1^n p_j y_j \ntext st sum_j i in S_j y_j leq 1 forall i=12 ldots m \n y_j in01 forall j in12 ldots n\nendaligned","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"bid_values = [6 3 12 12 8 16]\nbid_items = [[1], [2], [3 4], [1 3], [2 4], [1 3 4]]\n\nauction = Model(HiGHS.Optimizer)\n@variable(auction, y[1:6], Bin)\n@objective(auction, Max, sum(y' .* bid_values))\nfor i in 1:6\n @constraint(auction, sum(y[j] for j in 1:6 if i in bid_items[j]) <= 1)\nend\noptimize!(auction)\n@assert is_solved_and_feasible(auction)\nobjective_value(auction)","category":"page"},{"location":"tutorials/linear/finance/","page":"Financial modeling problems","title":"Financial modeling problems","text":"value.(y)","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"EditURL = \"https://github.com/GAMS-dev/GAMS.jl/blob/e00a845d42653adf5d26c7cef1ef84fb990c91c7/README.md\"","category":"page"},{"location":"packages/GAMS/#GAMS.jl","page":"GAMS-dev/GAMS.jl","title":"GAMS.jl","text":"","category":"section"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"GAMS.jl provides a MathOptInterface Optimizer to solve JuMP models using GAMS.","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"GAMS comes with dozens of supported solvers. Among them are: ALPHAECP, ANTIGONE, BARON, CBC, CONOPT, CPLEX, DICOPT, GUROBI, IPOPT, KNITRO, LINDO, LINDOGLOBAL, MINOS, MOSEK, NLPEC, PATH, QUADMINOS, SBB, SHOT, SCIP, SNOPT, SOPLEX, XPRESS. Find a complete list here.","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"GAMS.jl supports the following JuMP features:","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"linear, quadratic and nonlinear (convex and non-convex) objective and constraints\ncontinuous, binary, integer, semi-continuous and semi-integer variables\nSOS1 and SOS2 sets\ncomplementarity constraints","category":"page"},{"location":"packages/GAMS/#Installation","page":"GAMS-dev/GAMS.jl","title":"Installation","text":"","category":"section"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"Download GAMS and obtain a GAMS license. Please note that GAMS also offers a free community license.\n(optional) Add the GAMS system directory to the PATH variable in order to find GAMS automatically.\nInstall GAMS.jl using the Julia package manager:\nusing Pkg\nPkg.add(\"GAMS\")","category":"page"},{"location":"packages/GAMS/#Usage","page":"GAMS-dev/GAMS.jl","title":"Usage","text":"","category":"section"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"Using GAMS as optimizer for your JuMP model:","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"using GAMS, JuMP\nmodel = Model(GAMS.Optimizer)","category":"page"},{"location":"packages/GAMS/#GAMS-System","page":"GAMS-dev/GAMS.jl","title":"GAMS System","text":"","category":"section"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"If the GAMS system directory has been added to the PATH variable (you can check this with print(ENV[\"PATH\"])), GAMS.jl will find it automatically. Otherwise, or if you like to switch between systems, the system directory can be specified by (one of the following):","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"set_optimizer_attribute(model, \"SysDir\", \"\")\nset_optimizer_attribute(model, GAMS.SysDir(), \"\")","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"Analogously, you can specify a working directory with \"WorkDir\" or GAMS.WorkDir(). If no working directory has been set, GAMS.jl will create a temporary one.","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"If you want to use the same GAMS workspace (same system and working directory) for multiple models, you can create a GAMSWorkspace first with either of the following","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"ws = GAMS.GAMSWorkspace()\nws = GAMS.GAMSWorkspace(\"\")\nws = GAMS.GAMSWorkspace(\"\", \"\")","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"and then pass it to your models:","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"model = Model(() -> GAMS.Optimizer(ws))","category":"page"},{"location":"packages/GAMS/#GAMS-Options","page":"GAMS-dev/GAMS.jl","title":"GAMS Options","text":"","category":"section"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"GAMS command line options can be specified by","category":"page"},{"location":"packages/GAMS/","page":"GAMS-dev/GAMS.jl","title":"GAMS-dev/GAMS.jl","text":"set_optimizer_attribute(model, \"

    O=WZ0 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 z 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%0D%EoDD`?b+yk&FEBSac~$pd|onY~(W% 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