From eca64d40b555d38fbc5c2f2a9662e1eca49ce042 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Tue, 31 Oct 2023 20:19:47 +0000 Subject: [PATCH] build based on 908275f --- dev/.documenter-siteinfo.json | 2 +- dev/JuMP.pdf | Bin 4688908 -> 4687277 bytes dev/api/JuMP.Containers/index.html | 22 +- dev/api/JuMP/index.html | 338 +- .../algebraic_modeling_languages/index.html | 2 +- dev/changelog/index.html | 2 +- dev/developers/checklists/index.html | 2 +- dev/developers/contributing/index.html | 2 +- .../custom_solver_binaries/index.html | 2 +- dev/developers/extensions/index.html | 2 +- dev/developers/roadmap/index.html | 2 +- dev/developers/style/index.html | 2 +- dev/extensions/DimensionalData/index.html | 2 +- dev/extensions/introduction/index.html | 2 +- dev/index.html | 2 +- dev/installation/index.html | 2 +- dev/manual/callbacks/index.html | 2 +- dev/manual/complex/index.html | 2 +- dev/manual/constraints/index.html | 2 +- dev/manual/containers/index.html | 2 +- dev/manual/expressions/index.html | 2 +- dev/manual/models/index.html | 2 +- dev/manual/nlp/index.html | 2 +- dev/manual/nonlinear/index.html | 2 +- dev/manual/objective/index.html | 2 +- dev/manual/solutions/index.html | 2 +- dev/manual/variables/index.html | 12 +- dev/moi/background/duality/index.html | 2 +- .../infeasibility_certificates/index.html | 2 +- dev/moi/background/motivation/index.html | 2 +- .../background/naming_conventions/index.html | 2 +- dev/moi/changelog/index.html | 2 +- dev/moi/developer/checklists/index.html | 2 +- dev/moi/index.html | 2 +- dev/moi/manual/constraints/index.html | 2 +- dev/moi/manual/models/index.html | 2 +- dev/moi/manual/modification/index.html | 2 +- dev/moi/manual/solutions/index.html | 2 +- dev/moi/manual/standard_form/index.html | 2 +- dev/moi/manual/variables/index.html | 2 +- dev/moi/reference/callbacks/index.html | 2 +- dev/moi/reference/constraints/index.html | 12 +- dev/moi/reference/errors/index.html | 2 +- dev/moi/reference/models/index.html | 4 +- dev/moi/reference/modification/index.html | 2 +- dev/moi/reference/nonlinear/index.html | 2 +- dev/moi/reference/standard_form/index.html | 2 +- dev/moi/reference/variables/index.html | 2 +- dev/moi/release_notes/index.html | 2 +- .../submodules/Benchmarks/overview/index.html | 2 +- .../Benchmarks/reference/index.html | 2 +- .../Bridges/list_of_bridges/index.html | 2 +- .../submodules/Bridges/overview/index.html | 2 +- .../submodules/Bridges/reference/index.html | 2 +- .../FileFormats/overview/index.html | 2 +- .../FileFormats/reference/index.html | 2 +- .../submodules/Nonlinear/overview/index.html | 2 +- .../submodules/Nonlinear/reference/index.html | 2 +- dev/moi/submodules/Test/overview/index.html | 2 +- dev/moi/submodules/Test/reference/index.html | 2 +- .../submodules/Utilities/overview/index.html | 2 +- .../submodules/Utilities/reference/index.html | 4 +- .../tutorials/bridging_constraint/index.html | 2 +- dev/moi/tutorials/example/index.html | 2 +- dev/moi/tutorials/implementing/index.html | 2 +- dev/moi/tutorials/latency/index.html | 2 +- .../manipulating_expressions/index.html | 2 +- dev/moi/tutorials/mathprogbase/index.html | 2 +- dev/packages/Alpine/index.html | 2 +- dev/packages/AmplNLWriter/index.html | 2 +- dev/packages/BARON/index.html | 2 +- dev/packages/BilevelJuMP/index.html | 2 +- dev/packages/CDCS/index.html | 2 +- dev/packages/CDDLib/index.html | 2 +- dev/packages/COPT/index.html | 2 +- dev/packages/COSMO/index.html | 2 +- dev/packages/CPLEX/index.html | 2 +- dev/packages/CSDP/index.html | 2 +- dev/packages/Cbc/index.html | 2 +- dev/packages/Clarabel/index.html | 2 +- dev/packages/Clp/index.html | 2 +- dev/packages/DAQP/index.html | 2 +- dev/packages/DiffOpt/index.html | 2 +- dev/packages/Dualization/index.html | 2 +- dev/packages/ECOS/index.html | 2 +- dev/packages/GAMS/index.html | 2 +- dev/packages/GLPK/index.html | 2 +- dev/packages/Gurobi/index.html | 2 +- dev/packages/HiGHS/index.html | 2 +- dev/packages/Hypatia/index.html | 2 +- dev/packages/InfiniteOpt/index.html | 2 +- dev/packages/Ipopt/index.html | 2 +- dev/packages/Juniper/index.html | 2 +- dev/packages/KNITRO/index.html | 2 +- dev/packages/Loraine/index.html | 2 +- dev/packages/MadNLP/index.html | 2 +- dev/packages/MiniZinc/index.html | 2 +- dev/packages/MosekTools/index.html | 2 +- .../MultiObjectiveAlgorithms/index.html | 2 +- dev/packages/NEOSServer/index.html | 2 +- dev/packages/NLopt/index.html | 2 +- dev/packages/OSQP/index.html | 2 +- dev/packages/PATHSolver/index.html | 2 +- dev/packages/Pajarito/index.html | 2 +- .../ParametricOptInterface/index.html | 2 +- dev/packages/Pavito/index.html | 2 +- dev/packages/Plasmo/index.html | 2 +- dev/packages/PolyJuMP/index.html | 2 +- dev/packages/ProxSDP/index.html | 2 +- dev/packages/SCIP/index.html | 2 +- dev/packages/SCS/index.html | 2 +- dev/packages/SDDP/index.html | 2 +- dev/packages/SDPA/index.html | 2 +- dev/packages/SDPNAL/index.html | 2 +- dev/packages/SDPT3/index.html | 2 +- dev/packages/SeDuMi/index.html | 2 +- dev/packages/SumOfSquares/index.html | 2 +- dev/packages/Tulip/index.html | 2 +- dev/packages/Xpress/index.html | 2 +- dev/packages/solvers/index.html | 2 +- dev/release_notes/index.html | 2 +- dev/search_index.js | 2 +- dev/should_i_use/index.html | 2 +- .../benders_decomposition/index.html | 2 +- .../{21b27535.svg => 429e0977.svg} | 670 +-- .../{c52642b7.svg => 7877aa17.svg} | 1002 ++-- .../index.html | 12 +- .../algorithms/parallelism/index.html | 2 +- .../{1ace6f58.svg => 6096df34.svg} | 214 +- .../{d1f82dfc.svg => b591aa64.svg} | 214 +- .../tsp_lazy_constraints/index.html | 6 +- .../optimal_power_flow/index.html | 6 +- .../{2b195260.svg => 128c4dff.svg} | 56 +- .../{951fde9f.svg => 35ecbb33.svg} | 120 +- .../{a704ef1c.svg => 3b578815.svg} | 124 +- .../applications/power_systems/index.html | 10 +- .../two_stage_stochastic/60b7c378.svg | 103 - .../two_stage_stochastic/69d81013.svg | 124 + .../two_stage_stochastic/8b7e03e6.svg | 94 + .../two_stage_stochastic/af2b615c.svg | 84 - .../two_stage_stochastic/b41bac74.svg | 88 - .../two_stage_stochastic/b8ce4c8d.svg | 90 + .../two_stage_stochastic/cd6a056d.svg | 86 + .../two_stage_stochastic/fab6945a.svg | 120 - .../two_stage_stochastic/index.html | 60 +- dev/tutorials/applications/web_app/index.html | 2 +- .../conic/arbitrary_precision/index.html | 4 +- dev/tutorials/conic/dualization/index.html | 50 +- .../{881b4b05.svg => 4fb07c26.svg} | 4872 ++++++++--------- .../{555eebac.svg => 8f8344c3.svg} | 4870 ++++++++-------- dev/tutorials/conic/ellipse_approx/index.html | 12 +- .../conic/experiment_design/index.html | 2 +- dev/tutorials/conic/introduction/index.html | 2 +- .../conic/logistic_regression/index.html | 2 +- .../{9a6c8e9d.svg => 1c7fb016.svg} | 76 +- .../{13208508.svg => 427ef4d5.svg} | 70 +- dev/tutorials/conic/min_ellipse/index.html | 6 +- .../conic/quantum_discrimination/index.html | 6 +- .../{6fbce3f8.svg => 766e96a9.svg} | 70 +- .../conic/simple_examples/index.html | 4 +- dev/tutorials/conic/start_values/index.html | 16 +- .../conic/tips_and_tricks/index.html | 2 +- .../getting_started/debugging/index.html | 2 +- .../index.html | 2 +- .../getting_started_with_JuMP/index.html | 2 +- .../{cab8701a.svg => bf145d53.svg} | 94 +- .../{54f12aba.svg => c187b963.svg} | 118 +- .../{9dae2ce6.svg => f8067779.svg} | 88 +- .../index.html | 10 +- .../getting_started_with_julia/index.html | 4 +- .../index.html | 2 +- .../getting_started/introduction/index.html | 2 +- .../performance_tips/index.html | 2 +- dev/tutorials/linear/callbacks/index.html | 2 +- dev/tutorials/linear/cannery/index.html | 4 +- .../linear/constraint_programming/index.html | 2 +- dev/tutorials/linear/diet/index.html | 8 +- .../{0e6e5417.svg => 35df9976.svg} | 94 +- .../{f7e6a2fb.svg => 7c4ee98f.svg} | 108 +- .../{260ab5f9.svg => c5db6c21.svg} | 108 +- .../{8c552610.svg => e90169b6.svg} | 84 +- .../linear/facility_location/index.html | 8 +- .../{c8ef2e1a.svg => 31f0dddc.svg} | 110 +- .../{3272ed7a.svg => 35ac0f15.svg} | 292 +- .../{6f5613f7.svg => 459a923b.svg} | 296 +- .../linear/factory_schedule/index.html | 6 +- dev/tutorials/linear/finance/index.html | 2 +- .../linear/geographic_clustering/index.html | 2 +- dev/tutorials/linear/introduction/index.html | 2 +- dev/tutorials/linear/knapsack/index.html | 4 +- .../linear/lp_sensitivity/index.html | 6 +- dev/tutorials/linear/mip_duality/index.html | 2 +- dev/tutorials/linear/multi/index.html | 6 +- .../linear/multi_commodity_network/index.html | 4 +- .../multi_objective_examples/index.html | 8 +- .../{acae393d.svg => 3b1339f6.svg} | 80 +- .../{654f22d4.svg => 74c5687f.svg} | 78 +- .../multi_objective_knapsack/index.html | 8 +- dev/tutorials/linear/n-queens/index.html | 2 +- dev/tutorials/linear/network_flows/index.html | 2 +- dev/tutorials/linear/sudoku/index.html | 2 +- .../linear/tips_and_tricks/index.html | 2 +- dev/tutorials/linear/transp/index.html | 2 +- .../nonlinear/complementarity/index.html | 4 +- .../nonlinear/introduction/index.html | 2 +- .../nonlinear/nested_problems/index.html | 6 +- .../portfolio/{be972ae9.svg => aeedbe0d.svg} | 1126 ++-- dev/tutorials/nonlinear/portfolio/index.html | 6 +- .../nonlinear/querying_hessians/index.html | 2 +- .../{eaf4ff41.svg => 859f4945.svg} | 206 +- .../nonlinear/rocket_control/index.html | 4 +- .../nonlinear/simple_examples/index.html | 4 +- .../{de2f1833.svg => 4c53e14e.svg} | 66 +- .../{a334616f.svg => b0b444d0.svg} | 148 +- .../{1989107f.svg => ec412db4.svg} | 294 +- .../index.html | 6 +- .../nonlinear/tips_and_tricks/index.html | 2 +- .../user_defined_hessians/index.html | 4 +- 218 files changed, 8754 insertions(+), 8763 deletions(-) rename dev/tutorials/algorithms/cutting_stock_column_generation/{21b27535.svg => 429e0977.svg} (72%) rename dev/tutorials/algorithms/cutting_stock_column_generation/{c52642b7.svg => 7877aa17.svg} (69%) rename dev/tutorials/algorithms/tsp_lazy_constraints/{1ace6f58.svg => 6096df34.svg} (75%) rename dev/tutorials/algorithms/tsp_lazy_constraints/{d1f82dfc.svg => b591aa64.svg} (75%) rename dev/tutorials/applications/power_systems/{2b195260.svg => 128c4dff.svg} (85%) rename dev/tutorials/applications/power_systems/{951fde9f.svg => 35ecbb33.svg} (86%) rename dev/tutorials/applications/power_systems/{a704ef1c.svg => 3b578815.svg} (86%) delete mode 100644 dev/tutorials/applications/two_stage_stochastic/60b7c378.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/69d81013.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/8b7e03e6.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/af2b615c.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/b41bac74.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/b8ce4c8d.svg create mode 100644 dev/tutorials/applications/two_stage_stochastic/cd6a056d.svg delete mode 100644 dev/tutorials/applications/two_stage_stochastic/fab6945a.svg rename dev/tutorials/conic/ellipse_approx/{881b4b05.svg => 4fb07c26.svg} (57%) rename dev/tutorials/conic/ellipse_approx/{555eebac.svg => 8f8344c3.svg} (57%) rename dev/tutorials/conic/min_ellipse/{9a6c8e9d.svg => 1c7fb016.svg} (88%) rename dev/tutorials/conic/min_ellipse/{13208508.svg => 427ef4d5.svg} (88%) rename dev/tutorials/conic/simple_examples/{6fbce3f8.svg => 766e96a9.svg} (79%) rename dev/tutorials/getting_started/getting_started_with_data_and_plotting/{cab8701a.svg => bf145d53.svg} (84%) rename dev/tutorials/getting_started/getting_started_with_data_and_plotting/{54f12aba.svg => c187b963.svg} (82%) rename dev/tutorials/getting_started/getting_started_with_data_and_plotting/{9dae2ce6.svg => f8067779.svg} (85%) rename dev/tutorials/linear/facility_location/{0e6e5417.svg => 35df9976.svg} (81%) rename dev/tutorials/linear/facility_location/{f7e6a2fb.svg => 7c4ee98f.svg} (79%) rename dev/tutorials/linear/facility_location/{260ab5f9.svg => c5db6c21.svg} (79%) rename dev/tutorials/linear/facility_location/{8c552610.svg => e90169b6.svg} (80%) rename dev/tutorials/linear/factory_schedule/{c8ef2e1a.svg => 31f0dddc.svg} (86%) rename dev/tutorials/linear/factory_schedule/{3272ed7a.svg => 35ac0f15.svg} (78%) rename dev/tutorials/linear/factory_schedule/{6f5613f7.svg => 459a923b.svg} (78%) rename dev/tutorials/linear/multi_objective_knapsack/{acae393d.svg => 3b1339f6.svg} (83%) rename dev/tutorials/linear/multi_objective_knapsack/{654f22d4.svg => 74c5687f.svg} (87%) rename dev/tutorials/nonlinear/portfolio/{be972ae9.svg => aeedbe0d.svg} (79%) rename dev/tutorials/nonlinear/rocket_control/{eaf4ff41.svg => 859f4945.svg} (89%) rename dev/tutorials/nonlinear/space_shuttle_reentry_trajectory/{de2f1833.svg => 4c53e14e.svg} (87%) rename dev/tutorials/nonlinear/space_shuttle_reentry_trajectory/{a334616f.svg => b0b444d0.svg} (88%) rename dev/tutorials/nonlinear/space_shuttle_reentry_trajectory/{1989107f.svg => ec412db4.svg} (88%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index c81d373ce65..14aeb10e27f 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-10-24T07:56:51","documenter_version":"1.1.1"}} \ No newline at end of file +{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-10-31T19:52:23","documenter_version":"1.1.1"}} \ No newline at end of file diff --git a/dev/JuMP.pdf b/dev/JuMP.pdf index 08312969681104caab663ae39968c92ed5edddde..8a29aefac0f1f8e754d092b8c850d72b792d0f0e 100644 GIT binary patch delta 1542875 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 z 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

>3x4TtVXqw@`qMO6PymQU|BAifzglScS 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

D)G>6RpA5vT;QL<%Q>cJ$)L0%}T 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 z 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

h!0|7CO|d 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 z

wx?w1;9wopbGJ#xd@ePNzs!>YDGj(z zS2T0iRvTYVwNjH5UK=m34O?$zv_Udemgd-(_ZCj;_ObS0yl}8ov$3QL&dx=?3(yqu zn++)$kWKYlO~$(VC+eGWR)4A>@=~)VmP8T*F}Aq?S8&>BsGWoyLC5L&5F1}`k!RSm znWxg)-@Fu?L29aVin+2CHo_dm0$nSNr~=TLPPiLW*SnEJOI9%+(|GX~m7E%`?o+{; z=#o80c#YT5UKONn#SQOPU=2*D0a_|Z#4DRUX`X9poeQ%XaLkmOu76Q?iKGUFR#OF2 z5j{;kat@k(LRqmgWVcB!GA8#c2<(Vs)-O4G*Qe*Qvgk=;{X*2JpVYn0PhEX}0yAPt zM@ARfV~s41yV4lFB0HhWqG969drVa>brMycBtvK#VBN7MN$o%UBvDDhnCn=X=L?r{ z!X$h`PLLFci#kcovVTdgYHvH$M}_P?MxT|-o0`~HZ%?IB=|;4au#P{@B5Lx!E{$&Z znt)=85woNy0O@8j3%({v`5lLb{IJUi$wMxZ9i{YPjNRWRI~tbxZY6t@_cA#t2wd~O zQ%)w~&@*V2<4SRzmt4LwYYBzNgJj7QNegAWIq)Kc$C5O3ZhxR_qLhIARP{pbRnVcY zUJjHqaF=r&v_S=bLzuB7xJDD#SHe=)mV`GBY#>M{=ct=(j$xYd=EoyQ(cSP0V@kW} zgglr5BBR80@#g&kgD<(FIa}L~8;+F4l@6PT@G!$~SD(QNHk1BlCAnU0>s3@GHw9yR zsvX*z=NVWT?|;?~AtTT&4@rB9mo}i|mq0v9UIK3?lV;qo!k72LUf`s8K)50H0yYW& z7Iv+NJ8nX`u?A_n2zP-Y<$%xPu5(vxlJ~#(I$s^}|6}3pNwDWmST_Yt3Cg3zd#wy!$gL*LI?-q^u zRumf|`~;zq56>YQbjP+j$9>XZvjD z_UplL-4~(R+1nhhnwgi=cDCtKfMl5e0kx9;cTBe{lNy?T;s& zmHl{Ozp5!3#WoDqkrLTOQ&CQ{jLI?^i8K!KOS9{E57G#m7!=8D6=?~JBN1w-!63^3kFtdGb&G;FQiQyH*)*lmXjWbuKGr#v~fKBfcgxfI_^A+ND0PBU5vW zp5`E9Gd*b<#KLkN5f^ssqQ_dihPbSo(92h=d^M;b(8R3%xqSqIoI>$ljT|Vx?}}Fi zQfP7V|9)$wjJ{e0e;eI({Q1&ceSUlTuQQI=$Tnk!e||j08w9MZ3!<|ZE}P-!zr(ku zKU=YRL(odgGvgQQ;pg|EY5AIWxS+*CZ7uWCLaSJe=O8;A*@;=7M!!=$d$bgx*@@DO z_Y!5FFebDT3)3dwc*$5%)U$jg^%pIo{v_E$+Kn5@s26%of4ybh8b@t!)9EoXF|I=R zoOQYm=~X;!P!7W#cxst*5f5g7I8YjO(em{M%$K90neF&oM{d?`j~pqBoegQduA#TK z4h1JO)URaCqGdj>1vB=_xw^y~cn+8pV`YuwktAPA%DfT zPWfgYe?++Odnxb4T%q7njc67@qUvU4%>*wDTX@o`-eKE1mHfw=?Usl(*JgI>6J<1^ zuC+Bj&i*Rq1hI|>aDWCIbqP%>XlgWgxx|WJs=Q!0v3cGfJ7=qR=a)tYAt<)_C9`q? zuB4aEZ%QRMTzDqEk+jwN1Ew^&?nNqRm_OwoFN;Kvr2ZN~B&Y0mol|+g9nVf=*CdHz`obq&Vx=C*%E4Ev5b{sFtIc zqW7|HeHE@;2WX`6=XU+yjRwM4S!mIK^-V@rU1oc7 z?y3aUUp42_B%c)9c16?diG^}r`!2y-bM)7ae`3^UX)2r=J`t5e99KesQ#$;Lh5K<+ zBii4VW3gW1=~njr+iP6pD4|RvX>rule-yOY)>MLdw{` zhrD?R03<0ObT+OWe`Wp65<_<7cyeXO+|oN9JxJKsjk+dbU2oDTsU5ZwreNmyFjbt6 zWGHZ8n2IK@q)B3oO$ze~m+9$LXyrWOb&RJ`z=^}*-SG6iBX6x6R@4sso1#+Sf0(1W zHYz1jUf6PUR2riu!Utw>s{np~*dViQ0=62h1X0V-q3Mq=)qhO~bLVl2%x;-}Y3u#^ zkJ<9=>Weli_|AYt>-a{*{Y7&FMmg>w+}MXfa!hSI0I%%BYarq-O-^NR$vbVwK_{!N z9wWY+gRl1o?l}l1E#~jSI$X=u46?B)>9I3cQpbctTQmoCR)XeW$+)vN(#Iez0&n4!gspbi^^Y@4v zAkQ_}`z2H?Wz0LQ$gXtxz#~l5tdLBn0_?AZ2E=O#%1t0A2I4Kec_b|XfAs0xpmk4f zJ%~@iZ>YIcI<2U8%G)yON|Kk-o()bbRzDL36WHBU}fh7{0GiO@p{<({E|&bu+2>_Jj`ZO zeg84B%T~uee=l(CJ#z|0VjqgmB||>_iml_Dg|qkVvV<#J%4~XPZza}AyT#MSdsT-9 zn>F%D+(BG(w>}5I4Ys4012O+4+o;tt=j!Hst}~L5eZ84sMtIv`D>5s=9kDi?l|FFA z!drLNcUo%1Qrp3NlEGn_4lLfXUB8gIjl%Gh>@DGKZf^;1 zwY?>qeEL=#MQv1a#9+b9!I7klH3(8mdn?gVCKE;Qtg!6>Q;|lKoXK$zTZ7p#HAz_< zn`odCwk$T5v*S|KsNy6nvAA(>uG+0>-ZcqU{sH#bP8KggV?d&^+1Y$LL`5}U4a za!`208W6IGv=POXG<~ZMDzK>vxuWfDVNgnDWQ?uNf4d6it8JGhISoy_C4)+)CX9vf zWNTChMcN3BPN|spD)_jxv3SdBJBLa%lS!%q3JPQR52$K0Yj9e`#=^%{ZEOyBR@K(P z1T}EuQ&*{&PT^)%f~`@5tEs)M@P8=AD8d0~mZ{mr5Srm?F%lbV29F`e_Ee2bighp` z1`16Ke>PG~(ZPnXDKEo&V-RcrPjOCyohp#fTqsaGNE=pb6JOfV3r1qKNV)N1iO5x+ zefw?q_P48H_u}$$G;!T`qw(o*d>C;0!%_FQ?#J$X{Jvr}gB*kMfM zD-L(&>TyVqo^=P;#}k`x|NQbl-HZ9`CzJEhe`R;j{o~D#_V>-Z$>i$8U%Kv>^U1sG zV}COGwR?a4>($=r@MHJ)>z`ix_ZQvq#pt-J0me*c*yCxbflfonX)rj|LCOO<8JuYt za*Zcv-G}i>Kk`reQFU*hBLDgM^Jn;PX_HGL-oE2F{W0Bf%3h&m_^F4XD6walF)8^F zf9a@u;V}C__rvJzsC((Y$ysV)_!QTISOBjuA-0qOG1eD&o0I1kuaui;JT*Tm@XvG}gCRzX7MH zx74-Zblvx(i_!StYH%`iYy({PdN7#`$Cr+#KmYn^^25PoFd4cyeeh~@Il&sQ*dhz| zYpc9c%h1Bp9|&*JU_kqkET1En;m7mm-Rtq_|Vco)x8~lnjGCQ!t22=e?tg# zIT>C~K3Mu~qoC{$qwDd>ustg6(NDwE^TBtcPt7F;TrM{Ju$Z0>_O_raX| zV9u#0=FFuhv?uB<0sju@7jVFkd5?Z!b>aAQP89?Fq9ncTRBgUVl#8Bef$>pNdZqf< zyBwUI{XG11HJ$>$lmPrvf8B1UqDWA1iFuUN;z=HRqyN1goGx}6bKcvJCF~+n=IE`i zhH<^1h$RZ1P^rRgVDQzX6iW#q;mia(Wf+Z0dIuANDU#4E@u#rq(uf20d!CAt+NiZxmTaM2+`HJtU)bLfY6gR9{zl2$|*UH1A!>(TY^ z8Rl+`lBxpyZNP~t+&cVU=8P7sGHt?{QBcP85bn9u;8|A^+|^f0T=CUh@8hfGMin4+ z2IEuciT+9MpX9#nllw{`_mx8KD}~%w3c0Toa$hNA-9bkvf2j|(G(WJ9Rg}bM{!BMU z;0Hn>*J6GC$|Y>qwuPqPs%4RkkQ$}xQ^Pm~2uI^iS^zjksPRyH`hdf13a_(D2D(^L zIGid8<1dRcs&AIMgT9kB=i9fr0K_E@_VkhLQ=qke>MbpRDyeFWRS*IQ&_#C9{F;KG z6r-=C$leaT3lI=ReFxKV5AG z>n6?Mf23&{25Mfwz_MKv7pEVU>!RtGtnPdCj>yNs_GXclHn!(!xR}ct$0`Edw7>!^_hE@_N9RK9}ToGGHPFB)V|25w4E!a?29bA zb7Ea2d1Agul&#s$JGxaf&DE9@>>kl9RdYm&f2dzKQ_n=`6ZIMq9yCw)BBX#sDeFY2 zY*)IFs)49bBWmFt+!(O?Ok&p`XCjp9!+I@jhTHCPv8c5AWO1=byu|dxf^f9zAV#I- zAY5e=JhH?!i?707S6fK8aT1C~+JrOa1jFS`IHBwGFxcTCqI;grcO$ynjfQ(f_bBt| ze{R<%TjaJ&lQV*QLV6-?7u4~u-nb)aw&Yx&z$cf*S49bVZ(nY|e{qM8OF1-zJO8+p z3#!0JKgCyL)Vnu7FV$UCx*U9HPG5W>+dC@W2pEZg$yrzPMut`brJ^dVcEO|UqRE8n zLz1glQ%nZ&+OGVf&`Rl+sLdh743rTHFOg*t-9h3&Ri`Yy3=Es2&RQ!24u1@=UbQAy zsDPa}?%TXPY}cD_hqV6(>6@A6myyyf6qjM~CldlOHm(W0Y};`lyP`(R-tkB3d$fVQ-D5JcZM4KJyWyBuIr$$GJz zaY9K42)d{co#g*zTUhT^BCM<@kGMFpYH$iYNHNY$@Hj*?Mg`F52De2?pilzv9$z6G zcnuSjJsTQ${g>&^jd!H6auY{~G&Ss){i#?Vok>3ow5`)oQXm zA+RQRBLZs1>xh6ATkip2H5sl-_`e1R8dVBriG!>ecd28UMoFnQ(y(8Q>ZG z*F}NaeMoJ*mi8M*s&S!Tzth*9?{oZGeoF1_cz!Snbi+5V?QFIEb9HULzRWV%$2!Jy z>Xt=|pP z*yi8C=Lpg@WvF?*iShNf^=qSMnI5l_1sqb?kqh37@Da1ZsCx)6UDQ#buke5w@df2O zfpZJ(V^}s6gp6xitF0)%yOUTGhz&s*H}51)A)a>*!lbs+t-Fzf#|Z2Z z^oe#Xr<&0VB@IP+3NNvdZ1P9e#j-*Wj=rr`paLm*lvLd+N9=zCG272C;N|B!d~_q6 zbhd~cqZT*v=$=KXFornq!)Ab9gq*QP8ETfrn+Gsw94Lp)+5$y5rHEZl0`H%gMuyu1 z_^v%|QVf#yLfn}wAU_#IIKZ-RNOQPs4Ozk83)+^VY4l!lEun3zdKjGD!u(ZUf)*4l zEg3YU)hQ!f3h;lx73);P^RW;&$7Ac2!|q~#{AdGW3{^4Yy7D+D0p-o~A?GZ3H9>F&=6mbA9ne6aK9mZoe%ls; zqMQ8Tc&%L?XJJ?kKC|2(R^$-v1QZLwGDp=Z&B=;>3Wel-~{qWA;eB4 zN->XY-6-gq5HuZv1Y3@A@>k|CLs=dY|kb4zue5~^kE0Eu%#Susc4_;I3cw{XozjI_QX73$Y zFFm}sZY_VR)b%JwQtW<|bJVNHom#=zonAfnMwHiMBlaB|xj->M&j&ge+_DP*G$_;c zU`JB?AD`t3R^K_x6SHrxiMIqV0?vEJhw>I_9;mn!40b{|^53mAHq`Gst}w~u)bTMW z=j}%5d2}TR-iq;MV80=k{@yoxaAU*Isk>Dz2|@ zr~d$^1;v+P94r(9HZ+q_Cli;=zbq(!y;{j`8#x-j>nZ95%y3@-LugBh49qQoZ-Y4u zf=T+2G`f2Z^ZN7s+>2EumtrM=<#JKvzwb1kzD|64KAc_-?=DJDj(H=ToL;_60$*_a z795M#Oil=9m6%?>Pyc-6Tv~ii_-M|R!pGrnkEc04DB-a~7<}-p5XT3n1)afv9wpOR zWz!jjUGj{l!1IaLaXxU%2?F2=d?!xFf4%(Uz%#M$E`eX8)H=-oyHKhDRRfX%HVy2C zJ}SQhItWP5_j#X5`?OAb;>V;t8c*Yo#7sQyBVq3@UR))}7-n@7-FpH8R(TSg5N{>2 z5;UiCAaY&5QcLEf7>InjkRF78BXYyhsK*SCNVOeVGOaj3ylQz%6*0=|Ng%jGwI3 z%;I@>!-(>q%N%Eu)m9=jSavW5p_mP!5J5-?vCgOTB}-D{SpD_)*J)UP`Sjc%Tg|+7 zBV_TOJ~PkZ_#VeO!H_0FovnPT-nA5>Q%o5(#)lLIbb;zS zo3_bi=F-B#CA$(umh;Whlh(3e)Ixf5KI(2KnB)t()eh59PkD{@`~gdU;>-j!0KK;%*}w#s1Ck%MBhD0{%z>E?ne{hNSqyXrm~Ez>qkTX`$TJ1oChda~}-B(-kkIdYpI znDaG*^7C4{sRG_8WJ=DVL?>)DJag3gv1Nit5!{eU7#Lwrg2icnkxX-WV?q|hC7o&C zL?^WQBa^5izq;|NU4=6X3w3pdFH%sTT{7-Or=`>^c>Z2x=n7hh8z@BG%DguV2&5y( zQVLPviR+XB}KpyUl9WV3`*mT9xV1YdfPO7+$>=OOFATOljZ*`CjH8z)PQyG3;5 zd?HdRuiK1pOs{Cb*yQ@GZZ42D5W^5-h-GDFZWfd%B)0@1LiG zM(e1Rlx@>DT2vr_o3=An|6UW{1$ehq@JD!MwIKV}FBXa#hR9DPg5C&9K1;7SUry00 zefsyZ6{miGpAKK9!^bR8W2|@B;*F-d!Urwnnm~aX^|R=OT9%YY+INKqY_QPh>f(&q zye7f3)ewY`ECh$%siLa>s1=gV%<1@ z>xIUsytqE=O%t2=%jB8IY~@p)|8C53@)SV}=vuY;Z_X5vsobASG0eFNhWJ-QTvqzw znXyc%u)uO|;)_;cYT@zfaLZeUdU60r{YnL<8n7KQdQCved#2(Z(f}tpRUODhIt!*`ZW~G1H!F&n?`9Z-ALVzz(F0P_;5e1TMIt! zs`dfmU0VH=6SkV{ovr@OD#cM2{DP$oohpvT9Zl1)TiLF1_GN~WDDTDrP?(z9uSnNy zrFVp)JT%5y*PyM#Jn;{Cb1S?;oQgVOg?`q?DLI!J|Jpa#N`n&ZMPSl}K0ii(wHNi; zm7IS4T2}_el&ui;sjGvt=8f;U-*q=Doo2zQt9P?|F>MrVs2GeE1Eybe!AcRyA%_e} zS4woO`tBF3F#YH(yH&L1ytn6t9O?%OR<5qv3D3M&0WdY$|&(@;F1HCkfgH)Ck?WDgGQLO^;wBE!_BU5N8d zH%O9VhtxZ7kgi4{Lt{2KLM+`tzE`>)UFd%r7BuN}Q$qhrGu|epmG#@C{B3jGx}xh} zGbf(I%lAo_EB5*Zt;Y3EU4Y1iu;WzOkf;#FyJ37cu!+39K{?tLb~HzL3kSA z>k&iL#i`ArqK!P|GFr`l)6?D=i3%tQ!U`|_J#m`;-EC@O1(KRyaJTA_xmf5cMzPW} zZ+I-SgX0T1*81uGl`j3$49LA>r7M(1sy7FRF~;(OS7*R2X{=m(y=oXs(yT57fu0+MN?}r97q}jHiMe4qUB{a|)?z zvxJ!M*L^HY#A_AU_=E=k5C72um$6D369YCjHkTnYFB6x4qb(?Z)mTe!+%^!t`&Z}> zlp%*Rd;rD*iIWY`TMgfeo{FZY9Gd@s=tnKND~+U;<<&avK`Wb*=JCyYZ1;C(yRQ$Q zULHOiJ$KP0agn;0Z=J&fi(hAP7^I8Nnc!Xb^1b{0(OL?)KH*|(y~h>tcfwr`zj&AM zh7(+P>fGU%$gX^UgLgcgzV+esjmKN`guBE2V>!q7*#=uEfS!9Q*Wr(sUmt80_AD8B zBO!MovH`6o86;rFo$qTayo}s zs92II<;d%2@tUXo#&AXj{;_oL%LzjPNJnGtbrqN8g?OVVtd zv^e$2h+N{N@NRVgK#3pd5Grap6p_m9tNQQD%fml^lT;ug#vvsC{QgiLuoDwvMr&Xq zI)fj7b>AL-(^RX@)>wRU`Vo7w&gkU1b|Kk9NgD#{$Vkc1D;FG~L4jz-`CJqAu_kFK zOHP5^n|n$TAbX!R#U3gen!Q5BMb7rqi$6Mf9`q&2^&OLX>_Wq%7t@Zl#l18VTv4^ zKocDbN-~EYnuuUaA1a?V+mw7XXznJGyNO*lQRQqhlC`3G>Y8!+S-mNc33-Cz-kuQ& z=`imYX`14>N!^-EtBw0;sQMzcUw(RhM<>I7=xq80XZTu=dNJsHKEtc1<_KO1DU=|{ zmMZJHC)YZimR=zmj6STWXT_yluj84-(1-z>pG*JIH)TUHW$Jf7zt$_Md}11D;HpDM=gTxT~|MP^ig zMO_n#Om@6d6V<)1e+w~Gy_UtHTEyE8T4U&(br0@wIq_~uX_QPr8B>C~&*hp=XEn8| zFR04VRO%yuFP8IH3r6ezPio~srkFFt;&|OG45Mb+Z^1C8_lEt#m_S`GERM)4wY81F zqoqL_Ee)oArD+cWb@0szqVow2rK^;G+8`Z9-^zj9+aUG{t$xrLa~{vBD>yUq38Moa z6ImFLeJ)FwpEe(l+3PWEV}e~BFTGU^&slT-dRR=!ykj}^f{rmPb|5`vUq_|&ac->~ zdXJ7i`c36#U$;-!{I2ZNryjQBK3!0S z{0;aKMntwwQ@FNI-=fd|V4t3lIwmf?G0m<8PMNZ7n0U=XyFdtvVB=5g7c~DFEOy+d zD{gn#rz;LS+qUh~@2E%Jr)xcbbR)N~UTvR#KfT&MU2(X!Pv2R`wog|QymFsTp3%nL zb)W7q@{0YL`*d<}zPRT;T~XX|pROpc?95U(k+jFuhTzoe;jmHR;ys+$9Sv1eR@0mcNkO$RBS_M*(sw<_wV;Z{DBNB>p};h zf}!rmm+tG~&su6(tGXwkyb++Zwahc1z$#|nS&IstD?pKeL;?eg!6e3W=)cohJ_}&v z``@&T6D%~#7;^n{I`@Vvk|l;eKfZOy!`9o?KpW~(^=%5JwM;JpH{8!XXEoUE0OGJt!jvnL|;!#U_B zuR*ZNN#xhozxI|Fy@!>q>%SHsXizzZW+lCQg+Zc3Fj&(dM2mjL7@vmg(fT!eW-0tv zNugwa7B~e4i!4cgqGR^H>%Gr>N_4;`t&`DdC9>FJ8i`2?mrThLR&;WLFF-9J#cU8# zL7nBLjP&tIidLIr`J8jJ*Ex?Lv$u>V8f4*^6)|)BtX`Cx@kk>fVNvA2mT!ILoWL9x zv*!sR4C71Yos5mMUM?bw)~dkRAiJKWYY1b1aKe}kz%(JX*IrQi%=xpQg3mA*OA`W& zE|$4E!H35T)8MQ;;yD9gXAYc#wlnBT7)wO}q3&YQl%nnRz$3v!b1lX6Yu9VBfQZ6L zC1q@;&}ffw$N9>FR-c?A*Fz)#xjc$D6EQSTNBUVvu%L9ndi}N>&B$ZbW-qpiluBBE ziiH%Ocheg*C<@T%y%@fIiKU!+>=#LV%_b0p!1#Kl>_@Fc9D30h*?OBwjE3Hx#a}M@ zqQrs=3dOc!(^PNn?P&aw%Ghd`#*B(QOvx|#14<;1D5cfhgu>#u=gaw0RzX%;EG;GM zW3O{;3t}&5%nd8A#9LrR^}^3*TapHU!if`Yl#a#Lj5~4U&i0Wc9=tRnKc{_UP13C1 z;K8L;!{Yvu_6oG4Gzb8)wb4id&Qmm0sw8Xa2pn)l8D`o9xO;i6w=Q%pp`P?*rmBuHH zj&g7+Bh~&MnVCdC^UvjGhP5)%gVgrbvsW4zX@z|2LoO(^mg5}#)QI)^w)wTDGoclq zG>a|?SXP^umGO<*4=haLQ^{YxV__m7X+OB3wY-D8(!&l?v~X_-n+i`Yc_m@kDT`Q1 z{z;Vutyd%t`Z<*a9VurnxS+3p9LYf5fAC->+@!y(R=IHSU~EWSUCjVH0z0d4G|j{Q zN;aAGj1+wFRO=l&P>_VSjSgmceU{o5-U}Bj=f(SqAflI$ zGW&{POZxS0*7dvDG9L2IeWhg3Cd-@oG<`bA;Jo^@P}*DoVAPUrRnRVf7ArvsHP&cN z5^S|lacrI1nXi}eoP=Vruiz0G`_l>eI62jG53M1hh_c4-s3E)g6M|8$?aYl$S#^;= zH}E9{FGUcq@g;}-T*+1;hI)mITuI84t7lw1q|H0~;o0m==63!h0o$7$He~*)Cfq`w z`DCkBVTC@OQJ@>QUW4g>uDl7>D8F~}aBtq^ix&SYyn2ZCaIgXO&hP9ClZK`i`gG67j#7zOVbD zjJ%4^pizE7J-oECV`(U(X>6s-dzhr#m6uOKY#wUlG7+qw(|F}{gZBdo*jU-y1$-m{ zo3tA+4~%f?r9I*_dk@9EaWV^Egpez0}3)+C=F^G$#I z_Hp?4&~F``VV@e$!GMM4@1KYK0|6T!QiEs`Q1k1b=KJ9fEw$67?ggj_0+jWhc>)xA z!yFs$opB*_K#>^7Vk}{O7DHJKCjpC|+dB&gR>0)ce;R5?MD`!Qel%+2{cW%@1mgj; zR`{B)32gm}=nbG=fZbML*izmuWj~1@h(=@bO!@iL&dok7=A>hGvwf{roC9<*%sO9T zFbJ;OmV^`0m%1fEjmy@KCBPVpp6ZXeM8;z0RA3Rptssh3z`~Y-YzawAC%je_xD7u51n>=NZ8EYu{!KUJu*TIJrx>aQcb|T%^@jiPgW9G1L* z)*F|7H&I|uyIFveNF95nfc+5U>#1U!75Q}Ye?6`6(Kwn}5r?SU(He)zgrs8*y7Mnd zcO|2661-_hbXo07O=toMyCIRuF*}pFE*BV*R1 zobtvV=utvr_dL{7f!ovc8T@vzF3927f7d)E@o}+1(w6|OwV4a_r5}~45?eO+2GQr- zk;ITz_qkuzdZex_WriblXyonEHg@g(JZ7uM7D=E>8T@z--%>|uXhbuteQXV-esRy8 zh7cud4z;1iM9%t|W&+%(b)n^!8WYedtbX==>fj97LCE*Hwt#!X_;@4;N-IZTc_p~8d ztuby)a!>fbQEsh&L)N&KdrJz8e=xIjPuhwy2S97kjnI~iSmupez<8#dF7R29#301* zes;QCOd!teyt7>~6JFL@Hxl)nXg#NU5_J$*1b5BTDH@XA?GZd3*%>iu$DUV7+>xg% z$rpIKn*AW2jt-;>`3LiKrS+3MT}j)()7=<9u8e};z1-ULZe8rauQQM_C`z=t81?oRh1MI*58m>jgkTe^Pt zDbyeagJ}~l-T^?*l8f-c*+6OiWHwOJw!XEy-9b!3Lv<6qt5=+y-Q@QSYbEg}GW$8y zP)LLeo8JXK>YY!V1kZ+73O@QSebay9Zh2alk4UhO;S7f?0s~H5rzsS`uw9_7Ar!KFPLwJ-;dBn1{`!8y6Q#3t zXJ2${SV0h(d*qVC;mkMR3^!+rLmYA@8if2`9t!)vX&@FfVjd`GG&l_@dKc$GV(~F$ z5b-XmLoU_3BHrc)XwXnq{TCgGs*h%W#*E2_3tGv1DyajBwcaw2YMUOv<>KQ~9H_8M zmuR5cdJ_*!)v!cL1EH`3BL#EY^0OFs`&-iBK4SyLPb! zA$6(nN6?KmFsbOOR|hfmHxw!^O)9lPBfIqIP-^RH9h9rjf=89sn`KZOgtru}>ZgHC zs|jI^j9IKC-y02D*yYQZuXu<0EH$<_(Cd1^3wVs}6bc4Ylf}@%O_PR&B(`zr&?H#H zAdq=SHW@57Q!yQEb>@}_lU1*O4QB1#LW5N{Z!ubJZxFJq-YtR_j!`QlD6y!oQHDZo zztv!AFdqnoH&W9$#4RFiKJ;p7^WhDnHeVe|Y35qv05fp?RhTK0zkvsPtKl7?XHSsl|*jl~Uw?L2-XIrolG;{man-rTFu{V81i>(P+aH{Zsr^wt^YR&AM zz$$ntsyAW(QQ?nxO}*&{VD5&|`_MEr{UFhV*Tf1cJ0)C9NKC{G`wv9v(g%pDyMn&u7b*INWrI=QMuX8+gJW;B9UfiF)7~G(Z{~~Fvqf7f9*ut+zaPKF1NL|X(N2~xVFy9s zkCJf^*er(%d=-dU`gDh<=l>laT~B_pJe{A9&&Pi}``-Wm>Zj%M;_@%! z_~YsFr?;=d$^4gp@#nX{TpYZf{W|{r?GI1G&u8PSv-ztL-o&PFV5_gKMt%)n(BtFR z%`Fg8(5@&VkC&_-MfF&&Th7<}c>sUYtWjI2E(to8(gAW*+k3W}0rBwu0J#86lc8NLYfY z$Nl{aUJEAt!--0I+ekaP-+CoLg@1riP*f?1K30A_}a zK|+-c@aohMG_pnqd(bk@6WCxOEP5jZ3yz<3s}P=kAZGzThYP?h>J&n7j=?Eu7Xr5J zQGbgF&b?J(r%v19L#fza7U<{DNbQvcQr3{FeQ66knV(-S7soKa%a!Ftt}wlr^7|o1 z_&UUYz>VIIE*}o)tQ9E{PCe~1(kK}74kKX{0nWR_NMKxuy30ryIT%OXWn_Y!NUr`U zku~3rtocrnHLpe1lzWV{-srJ5^;j!C)@l#2+C!}N5Ubi7eM0RMYM)U1ggNdXk3~|0 zKDRdVxLgs8ydDE|ib5MAVYF0`4lvj*mr?+K2oqr86(B<+!D}vz@GPw)5)kWd3n3}T zN=WuW3lNRrnKA(uBL1ltvaW?s~a0u;BNJqR#lDtTnVq*pZTt_IrrEo*KNytq_-~@_{e_tYK731Nb(t3Ns4s?`HEgFOog(U)(p~8r$ap!kS?HlhdtIB zGHt?MuP%V1Aq|QEX@#>*2Yc62T;bk-Rw+JD0vY<4=$DT3zOyMncm_WOf({RvI+s9Y$6Gb4s6s4{xKud)1{&yv2uqt=xqV zubx+Y*gDs>URSbCdaaXQ>!jB@>9tOJ&Gu)u9bFaYA?8VKLOzAODhjft4Hz$gGBXUJ z!p`nvnxN8z;EV{9uch#WoBdvBn-o*$*a|r3a)T*~+}=vQXTjZ~2X|}u`QYxGMMMb2 z3pxGTLcO3+zw~A=7N_US)kOt=^8x4gX zwG`#T9IGHgS7^FKn}maC@aw#5A&^@Y7iyaj85s=*36dX8p!!qDfYi!M{auDcpy;$+ z5hMvdYv9)=;6Zqz{df?6+%Z(SfmcuNMDAH`MM<3pCF3cI97$JSE+D}-&;=C9HMVYS1kvuCTzhf&w^vVD>TylcKA*rsVRWrewWrB-V5MQ|!u^hOa3ZtAJ$79nbizBt4%$<>ObDXPnVI1I`+B6vy!aNHt- z6qN`)5mBsMVMDTKd4mIMSu1Z8ue01U7mRUr*~jnGfNHxGII8V>Q><5ypsq1<1-sw-An0<9^J730cfdI*xeZNzOfk zHKual-_T5XVa5K%l7B5v9#8y3gc!8y23DI9{gA-;7sfU#NE43`F zumk0R8ZFPKxDw!^zHnf(?{#w2C3@Ipo!F1bDyKD4!Nz5ZxA*4P+sE#|T~&%ku??LC zuZ(#A&yQVvKp-}_&>^ZICjI=k`?mYDm73$w-cu5#h16DjnYf5nG5gLUDJ%D@LL+~x zD+wm~k(`Xb$;ao}Q4-Ph&(H5&Gx7kMKxM!6eel&=1=uQw*LY1bt4;{=CeF-_`AH=P z@y^*)+vmd6Oc^*GzE~YIKSeA@Dmlyft+3e{^hN~-8@$1QissIYOyZnS$t=oofqu+X zQ|0&DW^)ar5|?M@o)*m&WRP5$IT(S4_>8T8`S-a1$Rn+f=L(}j$wEoy>R|5`1ygJg za3k91;JaLqd`NJ|unr}%4w8e7z~V?0ME(Lwh)GDTgp_|_UA2#1^K9mo32-J~muy4| z3Bg(~`GBw=(x}u9SA(3M<|o%#U*A4n43M#cd@x(31^8K70po*0o~=NC zMP~`L@sfpxt+#TwL1SM)XPn-AnmcZmxApSiqp;3NCOK4`?-V%y)bwI1MKH~`%{=nh9w!o{V=l;cmrlO5;kCFJJYV~6ZR$7%;HCX;Nr#T zKaR1IkxH4Z>Q*GRPN8juJQ7Gj%E)YCtd|aaOpt=aIfaZ8DJN(N9%c>Hgzh+u*9BWY z6fzE#$8go5&`p*kNVpI^1d;&w#+YApc4Rb4)UoYX%*qA0``M9^ZHOm(zbMBZmmIH} zq@dVIWQ|td4+n^p;bJ=r2e!(8n9xdGYk$H4Jh^tp8Vkp2Uw;J4v2&XYZEt<^(WjoR zrxTIWd9NX;fCIt7oG33v<96?hFH^~D-b$3B3qgsWP$kB9o|m< z(|*9SNI!bN$qh(2p*PQ!e)Lqvoz+(Tt|Qpbsj_=p0`BvNoFpywxG`;sSjxv53qK%p zIyLqsQfVzh)iSNcTnkozaE~S=ll(xK1|J^EQIO*I4|hk7g2H+PCThN9wvfo0$sH@K zwdt!k2?W{HtbeDvRq+B`1eT(j>itFR11v~ff6<345SDDw-5$QYp?>+~rVb1!5_ldr z#$(=}B;CW_rTp@vf-MDa3JAIW>uWvhF9{xok1NCJPTEy)?|mwN?&Re<=yFgfWU#TD zU)DiZh=T^-&Wii}yiXfJ-MB@%{df(=@YZ`Ut%$nU8n=~Wv)l8->f}tF#RTH+cGzea z==0-PB#6u~Qpk@&_8uc`lFP@gl0a)Vx&~Mlg}gy)L)`-&udeV*8Hf-gX`%{@vuLvEL?(J1sjo% zx3})s>-)n$4-ExC#WoDqc!dJgUq2t>3o_z^3j=@(hK65%58oet@2!@l?e8fr6Xx2= zTo#yvRm^^{K+4MfQ&(F$KbOgWlML7X{Q5C;Prkji`GZ6O2IxI9U*oliV66lut#q^j zoUJaNd}~p@nl}iXp&tX+u{veTHhzF{Jy!VfYqlmZY5g)jTAe~pGLxP&GR$cVc>{~~ zTfx$NIKeF?V%U2{0bAZYmGuc_L{r0-sQ!u!6Z0xPaoM}bEfInEJ90{YT-)@ndL456 z7z1$z*-DH8;v6}#WsZ>c_Hq^g7Zif)XM=7(RlTqkQ{PJ;>ztWKh-;8$;YuX)nBO&I zDhAWMmh4lXCM%TRG>juA$BK2fRg!PAO=74OyP06ew&v5h2-YhH7 z49dckmIY6)p=>u?-!F?Sgz3yw7LT*!iB_Ly074!mf$O`r4a|#5B5NrIuwN2y@+6l; zbEX`UEP(Hvxl=hLXM}z4RSwBX5kmiYs~k&VY?E=0U5hC?USA=9rPh!Ry^|XivaeEI zkEl8$XLDJnloB+p8|vQIRLwqKp@@t!ZsPQ(k@zr;%ebEmB&p|CR#s;ohlb>h5atF7{oGP0&JSFDY@Y?45mPmp2fjmTc2YoOs^yI zVGdf9CzT6ZD=KB*!l7p8Vo91WaU+#Rve|;so5h+SC@_8=Zu1hKWziVS;bgfd+4OIUISK z7a=l-<18dK5HX0hUT0>LzKPPZz-_*jz_fFHx|YeOF<5L6!hA!pw6H6{u|CWjpIWQGp_}BEM9i1&4$i70a;Pwk3S+MQRgKq)|Ap zHm@D^L~sVJ9AG!bK zoh!myEph}EIMi9*{`uemgyhLE$;B!46dFjpr^ax4uhS_Qt(USDwu@D&5 zik*TUXD171)E!7gChjq5kyG~gdCmLPXoYFkBCgPx>Ow*r#<_mXR$d5u!cQn}M}KRN z6GBOUMK|PA5jka(GWOYKTNx>=w#@H@$OCpN_(|m96h9gDsmR=+Xh;%?lIAOl#`VM} z8pc@ciO*OS(C!o81w;qNDUo0|@LW4xqon_?=Q_y)kDVjCRF{vPmmT()4i_HYjqQvG z3UGWi+cD4Cj@>0}$99YD*nNzffQ=%s{R|R+H#P2@sz=3n#i85Wwachi@fik@Y{v9{ zPMb&Db5DA5lFu?;J)bpf6Q6C^Ouf1oo3B#Fr;YAQ9GvDj*>oy|{|Utz2?q3^sf!JW zE_Q2iRn=lWR|uuZ*=e4u1F-o4%hqSZi=}kDYk!%P{*a^P;I{X5!_iYm@{#X+=jgqE zzHy59hI@%`XJvcwAB4wf4qK?7+OS`L+{>g)=-l6{WELa~`wqL6Z10@+az|yat)#%6 z_w<$zw-{H`a5o5s`B%qQ!7llNiwsIuu`|f8W%@UG%2q+>;lNehyv$4IBxC%4;H4Bf zFT3vzFR%L&9#4Ngb$0aeW(P_3pgQmu?G8#-D`WbFj(NKK)xEz9k^Kwj-A1vOF(ED# zmvM+f6_;oHEx&(a+TadIU(A6vVSIV2nNRZJSD;ntU>+a7oAp@CW9dGOsVn$2CU9ZH2pQ%1^ypv< zaizU*mS(wRK$|Ja$HPY>1D*jxdCau7wWmA?FlMHu?+Sm9kt-Duac8+=r3wWzA?435 zk4m%g*m+ihyTVgdp&k;?C?vbEX=MhWRu)p4;yiqy}E55zNJCJ-h@ zV-J_g*sFhpr_OrNI*&W%=Qh0y#>%hK*02Z2`!SGe_S>vkJ=2=4iN0u-lr0!e?)a>Y zxbvc^wdYxwI8P?T6Z&P;=o_LhOZ;iKiDS_OkpS{_lLY!j6SDUr$*&1-f@=%6FVnBj zPdERr6s@HehVOs>xCt)^_^0*!+6b-8^7EhN+s%I;GuiAsrI0))eQ3G-{Ju<2zUFA) zB}*uc(R!4S*I?m|0-;$+#Z>afEqDb<6%1ZG+uoX@HUiPl6r1rB%gI<#;In*0_J=25 zyZGQBS<6US$?a(3C2wY$N8^f*WZaUagwL6$%aC5eQ+qEAm>qaZ);W_0Tp%nIR~?>w zy^MePw5kgB@3Woiwle9_URTJGFlr^k=mNI(zrNqCQ^k%NEUq|*m0ovIB`-XhnJVC> zyh`)#UV+yfnbOT4UfWEp6~_DbHj{DHU?$It1>5jR5%a7Fh&Q=9^C$Ujn=y(bq*d54;F zs;v~IGq_`hiBW7H5vJiuA886K9QU27c?s|;!3Pw|CC?yN87!H+&!dVcDv6^%rz&Yx zdz9y$OkG_ty$QmG3mzsT+#w-K;Xo}Kkz*W4 zXDW1~iv87Lxy$cdM=OsXA&M}ZM(Mf`0SHg}{{ay`wD&<~>@xqAtXpaGrHr5K;Jy$? ze(HXfT}f(keMhmgQfrFVRQ{^-l=8prahba=LB1fN`ZsR3rpb9)5v zycS}AOX}PcJFUY?)3vuF-ic#%8Lh4AKQtqpub!C-x25M)_FUq{hgAaSq%eQi-f`!- zS|2wpr)a3O4oLzgGJ4GRT0lLsAn(nbFbRvh(=`U&(YRlak%elCJafg3rTo@i!sqWn5 z87HW_wht?($E1l}Im>ZNOV!-ZM`;8GQJQC;Vl1gyyeoj?JBKtoc{(wIUy`_wBVyYkS{rvTxt$%+9DP?}WB3_6%{(c1`Z& zuy)6~lYT~fAvtzT>#Ki_J)t)CL$j*MWuEAZEB4!D=GAKJr8&=c^9r@JFnMq9 z^O+ar@q$!Gfz<1 zp$J2l4^UbXw>LC`4~?=_XtW?K!n>TIus#Lv{wp@oCW==)Lz#alUpPaVM!(Y;ib5ke zzkBEA__XRP&rl|6Z+eC@bAFvOl!%h7$qyCcBEs9Yv+*fNbBu5>hW* zry<*Z_5}xk=_qmJ`Aj`poaQ*;Y(2UW4a#XyJmdLXB17pW#nJm^VJ{~XtM}QmAX#DE zEIiu%E3=Q~%zp;uM9M*In^rF_oI12vrn|bt?az7)J41i2-bSJT+Z-4Yj_fqJSeDM2 zb=6nN4T|ov^#%Qfs8^%H4y#j67*3WaZqHa?zcXosS0k&APqY7ni zWOH9{3Kb}DjA?KHe9UJ zf@oFAh>9kPhE{8m$Pj;xk-ygQ7sOvTo}=;{O>!Dj?ix)0Ag(bauYQUDd6rDF{B-kb z%~}9bpx2{Jv^Z08%|Gc=?kYIgft*vT0T= zL7(SJ3szDlz`TN|Oh8)m1Bt$7j+@=Dn! zQx1fZ6)eAIZDZ#6I;#l;UFq~;mo#5iM0Y^>7lRiiJ~v^6mB((Lc@)8zQ6G8b9D__H z`Y8It$|PmE!#sp2y`aU#;BDS`3u6(oQnnsOI>m0 zV1KP62}yj7r^c#DD_`xo5uFP%_OV#v11PE}(OCAhDpK+aubR2O_K*U$@(cA}BTpVF zlp;*n5u9w3mWut<*aGY$5xMY5vs4_>W#n2$GnzN^O@@c)C2(=RvAu-{jdamkuj*N# zB}w?w=)v&1aP8r>u5Y1L_VLlo+63^l-+%7ng$#7{kK#o)dmS&lZ2iknobuTW^1Cwo z5N^28;)a(6H!`JzxDldWqgwwcY-s64pu%dD=~k6J0vpL#9c*MXjj&OTS7C!4(}eCd z&ros|Dh$D0fVypUDHa`_WiEi>m`f@R3s~^KR*E#zf`vN>7MbtE;aK?<&}c?hK!1bp zHlV>e44^S+rVBT>uI~yQFoipCz!dMp!B}({hr+6*5HL)IYfIE-HMy9pw$HU_X8G!x zHnnd>_r4@gb~EtYl-1QHxe(7BI{T@XZ}LFdoNg>77uT`jFw%2*rdJw+La}nZ zzipN^4{VJM&9DngT3Z3qk6y{`Q-5rN_7TLQP|}R6yKKxB(5+<;z$TFq-cKANZW4ps zq(wQiZ&%~ZQu}CXVbQI4-PKNM5ZbwsLe9PQe0s=>9n$Q2aRVc2?5^TN?Tuboh8%Hw zRz?63f}d=)L;>$egvj&@Iy>%{rq)yIGEruIc4hL^&=Shul}WxIlu47e-hbMO^1eJZ zo-_&vw$sEFJh&52S{S7!3Z)D)VJz(O2rj#0hp*h$8{ZUpdBqMYFP&-2v7lKguWEGJ z1vkN|A-8$GZT9_wy~|zM;A|;uw=}&gNvmNh`nM>x2)&efiz&y0QL9HtJ3|ihY~RGJY?!G?mDKc9XW`FMF_@b_^+kjlDy>d>Q_| ze?0v$nN=xEfD$hM`TZ&0(8>tw0wI(W7S!d>|6YE5`qxO7yAvrSt$)d1M&@IrZsaQ; zWd=zaN^6bjHMGKz@|t!rSU~WtNf_=cq3@v<2I<$rw~TykIwwQ=VHlabHZi<)`jilF zmfBmPV4w%wi^Rju_!}*IuhOCP zKpEtEGaG0Rqt=sJH-7`g+a?l#(Lzm5FxTVe zu^?;+53oK&)fu5JOjOs;=)eWx)TDk*5rdcIEAj0{S~%sDz(CjK2&&lS!0vl5=?I1? ztp4Vl>zM*Rd^$d-ou@V!2ZB3U$Gs8CrM}Cfz~_12<1Fg>om4;4S(IOn)ID!E7$}-M zJDk*i%T9nQq<>EIL_K?oX6M=Cp{gfUf&=l*q9<<=qjEPc;i1`#A9#GKVN(sYlLP9# zo}$kk`Vrm9ssdcNqx>O?+EFaJkzzdANc~+r*LqnsEm|!+bx6a?lWQ@E=j+;^7?mSM z$DQ5gQ;&K#Rm8_P$@t2MwjrrO@C{jGP2`mOz)7m$zEGGUHj?Xb*%8f%o$7|Z1LaEbt3KfDtb$@1EFj6e9WnTFWyUqGwn)Qu!0w>uZ z$5x%dXKTaky*dGI<$Z|d~6^26lJ7tER+}tI8=j<73;54ZD0s9crR$ve(JGi}cJ#9b2 zcz@gu6ZZuw)k9GEy~T!B0==1R@cq?BdL#^ewQ;Wh$|H!8le-V3XVep*NyspAf1sdH z7@yjmQBWuVVdYLi@jsZoO`))$^|uxZD+Ne{^;4m+{``|nfS!gaYQ2p|p+N%Mf9=lB zEA{1htncC5Hl{Z9d4DI`aDD%H`U{BGCIOC@F(ED#0ysC9(fk4vm*(3!Czm=7E*M3- zg}cL5hfAsym-jD@(nuZ;XZ$x-yeU%1+Gr$-`uK^Y7~OsAboaj6>{rh_L!DQ_g2!(E zwFCa3`4=<~I@@^w^*cGZ+O(8PLJmPEWe z@y<5&tS!aTw*7eSdEBx#mbJ4k@BF+AaCS#)m7@WhFT65gp?hoq8fh_aA=EKjW~{~Q zE+Gj%=@Zx1y!1LHnR##D?~`;$V{E02v5GFioVs`Muebf`zt!RBXq0uabAJ$&VRZia zzDgemSO*_FL=}O$AOCh=SAR;W#g4MiB+Ni-$7dMF^VAnE1$Jh$?P>e@Ohk7o4Oy&n3Y5$2PP5SLZd` zjA8<~UQMc3ASC(1{eQ7nId|zTDu;vPDdfpY>Z2XPvdBm&N`xRIBL@ye;ZkVq14RC@ z#q*9vK1#Tp4;?jJ@)0s^D_u)ol25hmPm0%t46sfa6Q#tAQ!-3(7qq)Ma6o{ZLkY>K zXRj}(gvxl5v&}@0KDcW>CA<}#E<<_|PaTww_69sT+D=;dSpiX&=_BL#Nz-Z$i>lz4jr1CCT6FD0Ggp*PB~ zbCa`|CNG=Y6E5~6tcBE|e{rRE(|poJQAIP+dr1B40!>OHH$iUZHryc9N9DoadcKJ4 zT_?w@xgl#g{D0)_M; z?j%X2^GK#$F0Z^|M)LIe_siH;Zv2kAk9&m53}ppA*KkRvEVS)eh>Q<5<)M&B%dyc> zk+V15%lS-;k7NQ5vpWwizt1%m9p=8AOMFY_XZ-PPtAFpU8V=kfMBkiR8X_j{G_`d3 zGMvpUuPCw@%SR3N7b&s`ZGKXbMeNeB$RZ>+DY9I~L^>&XzB74>p>oZs&j_0qS`3h~ z2zM4*gp?}_En?O0LJLeVS^VdD z)M|^+;eXdFx1bLy`^cYDZUKy(sN2shw;*RZni{4{V}T8eEn~qKYAxf*4=S~wAq9vJ zF13hV?<}H9pCYXR@cFgIG4QZz##V6dh@dy_kKVqDyW_ zk2mqxm-nato|;myid^iR2`Xau&yS}xj)qO}u>-cqV1M`X-|pMfpHgUbvwY?l$$rz0 zw=&rwI7JjX2c*EbWzX{;uk$gy)_oz1YXAKF-ieW~Z^PDHR7Qi;WW&&nLaRb5WKbk z(+ViC41abAe}W}j95oyL`nDe8&MVSJnzOK5JCE>Ndj$iEPzu+thglCPel-dO30E?P zP{E*#FMglJX!#huwD@|Q#mM#{YjGK^c$$u!VgAlQTGOKnlV>pyy)gYIX(+2jB zB^Mk&U1aph-dp@-EBksd@St=YD9Y8d>OsgYq}(>?5jthpNUtO`LZy~UDHI3TBfpCn z2|TmO9mIHt<`wviq);mUAnrt+okAgHZ+aQt~DT+mt49MM4XtngYItKMv=($ivs=U3yX!L)#@4@+5cv?kFWwloA(q zmr|aWYn`FANS%y)ZK*py_uhw7Ew+#37Qq4tR-%agYGCGsFH=`J4&7)wWYvy0xbqNT z9CC8brH=a%Z~lr?s)b~g3k_)!x#Ser#edQg^mjRCDp1ByuNFahfZdJ}0GMty8N9LP zE0#5D+N@FD*)fym`_bk8i0!j$D$$tDdRWZ9nTu{HSl4n8xQyTetxDttvza~GY35o+ z_JQ;tudNe*BgXOFbcJd@afv!Dta&8eO$(}?KjrVi*w?!6d>;ryh%=h>E3oEilYfc} zY0}Rc*1}NO^y}g_e+}#AI%#w!qj{HdjhO9rvy}3IsTQR-1&*%PP!W}#t@XvL#bZ;i zk3F{T@$nug?aJQV2QOA8%%UPkLe0zM?aU@1CD&W37%S%`Z?I=`8ea}u5U;t2aamce zCxl@&NuRHr6%X?D6pxP&P!cpA*KRQraiB{_X~J#5T7g(qY$o zX0y~$68oB@#Ia`r5tNNHjTJ;@{$`f7(D*oYY_lDG=WE1{xorUcG!$5UTvM1p%OPzj zhC;^`kg)FqVj8?tA z`|ud7=Nqh*+xZB{im8V@*Ia3@xMQm=)Kef%tMXwO|5H9an1B^h1L)1is#p_=7ZiS8=u|~ zxyMd!>5cRKoizsE5UjN1;9f9CCs*|#wd8kem--C5+MOxZQGZ7%DKV+ja7_0f2$hLD zT+$XWZo4>J@lf;sR~m(eFS0S-_Y$7TaT5V3D!!ph(T^oHuy3Y<#?{ccpMhaiu9{Jy zJS%f|zDNbfr);J6`>rLB-t9Oegyh=!GUEBQ|KG4)2Rp@cH*MR#E+KN9NZ0;G3Ns9c za43aE_UriY=n9;Mp^Hc|Q@e+g1y&iWrodEq^mF(ED$0Wz17 zu_PmxAdN5!mrCj@D3=^;K?r~DUqPT>dIxxyoELIfG9*muA~HlwwfGn{5OKvjarv{iP*Bn|kQhjlw~z#-q`ku!W-gVm>(|;! zV8$aT=&Z%{kQz9rh%q1}=cYfD;S9Y6p98xn(1IK$CF!m;+g z`KEvI`{}rUcycnCh5p;g^l&_V84>yMRsWCvhyFV}po>@iv+=>~B?7pEH(;(hg8h?H zS6$WE!DC+S_0P{=&%C=QM<@U7A6|5RFgu!@^w0Z$KKp;c|Nr{e+3fV}Z+-vE(d^gr z*WJP7ZU5W(+tdBS@w@)V^Piq}za96lk0-DD8jXs+Nl_1BXgZ8B>u7XnBh4c^7`?GL z=9&)P^k>t9{@rMLGXXvOrM{Q4#t7KLFk{3X0!41B+&fv z@9$^dKc9_eW6X4W@py7F!x)d*4Q=yL9>cPUgy#?H21Jr;4+w#z@F_ezc+fwcP7a=r zXD|Dwj~@3g#_wkfiJK{&j(!l6HkAH>sQ?x_`BiNj)`OVop^S9ymUbf`#YP96PAao$|K$L-K4PV{X6E)Y)!)tIw zE!tI;yY|I{$;sJlIy%BEH*XZyef-p=FWyF3AYtc_H7F~!b|iGa0#DSSYNjn!O&K9) zOI3gUJ=MEb_2l?;u4G{-S;}@wq73L90tO{XtmAaoI*#7F`FZ^QblMa}wXlyLTc_w1 zG1qII<_~kNbAr}LX(@KVC=_V1Bfu!IxRZ*xc^J_B^ZxtEi%I_|e4UshU4`H{wjv}UxF15aZkhSnJojBFidA8UHPT%xdOAhHGOwOdJ5$~g-56mlkoJb+i;1$ZHeV!0m#phemDv+&n)5QL?vu7KCsxW(aLJ8My~#ae|>lwDeb3UkNz zZw;C_0=g1Y-9<6)&|FKPs+}+IiGbV)HjaupDXYc2aE>)uj8P=j7&*(DNxy%g6oh1; zzK1(VQ9b0-wNh9D$}&ZZg%}u|RJRubs}u}+Ap;j!U#_1B-$X>B#eZ;r7D3^*0~t#0 znCpcQlDYesH4-O7g;_MFNC*@NvsDPB?AtDv)>ef&xo10q7J>D4xvKHhoy#VRt1DcK zg%H*vG3o}KTx;j&6`$rz4n%)xlhG3Z(i(1R!R|%T>r2f0y*X~HOL>30)l$BurDv9* zEV7|2vY{-pp)9hYEV3PxMNEpEQiH;a40RS)ltqw80Tr^QEJ`sIU(V+$tQNCTEZYOr z%FY5}$2UgW&O(+|q|U|51yeXY(7IOHE`%6>l z)eoCduKB?|$~3XnjU0arO(t1P#4~b+)puueg2(xvg~>T`rr{qZ;k3VJECf>s5=tU!xx{5sd#^2R{c^_@xtUS73*iW z_@5vXBhX;*cy)W!FA{xpd-O8H$CL0{&Occarnr)Xliel>({iQe_oG^Z_3Kd!!Uked zD*N521(61V27(7d20{m7=sA^LoQ&m8qu+Z&(zNP#4}I;2)D3{9)%q0)EfOJhQx>H8 z$h?D{rgr=pZ7F|*NLT&B-!(#1a{yz;x8he7ImR6bAq9idQiw{O03ELrLQAd@IiHFj z=2tFjcUy0~=jPW#@`Vu0xnsND90{pRBY`a$CxB^@?NXW+zdUg1+EHnD816WyEn0r{ z1Q4?SM45MhU%tETw-J4clcH<@X86t%3rrC6>Qo~*Q?-8zu|*9L0DJ6Wr&k?Am;|*$ zZ8*l2{CX~gsH>izb91#Sq8X+)%R2zkT2QEz;Lax{2iT?U3vq(;k^NCKk!lzH9(3_D zW5ZPB4l4vQ{E_+x36U}?S2n*q4QKEg62%O%GY099Xl`kbo7|i-KmiORbye=&jO#~Or_voSktM6H8y;?V=y1@$eD%VGgr*)hK9=N<| z`+wGPvw4@1%_|cDIG52q7!#MbD=xr);I@Cg{l2kPSZkuBzv`^9(2y!yE_V`)x$XBAY|%kGQPN5wj6tfnz~6A4FS?dlnNHs!N_laaiR z5H)k*OOZ=$sRnItv*fA*y_A(j;w)LkVIc!rGB)%g@N->sTyV6(1nc`%_O%Jhyv5{0 zS$tn1A)tBy=@lHi;b-!P#oMo6PMQP+ z4SVQiplb5$qV5v+oWRjcZ%fA}~nC;G06lO3j??A^0B>eUnXIRno3 z(!k5a0b}M zIN=00h>}+D-3bp$U``7ME00QG&ZBWIo;OM9D@Y~#=QlXDt4mPVrDEzuF;4V8FRm5z83@M-3(?M+W7>5MW>007CZ0PQ8-7Zso`xBr2k9Q@(x%qm+a&1w4BytoJXt35U8ge zvF=UjvCvfU+FV+HpK@Gx8FR6k&*Q>;@8%+HsvS|!MWCBIS?8ilxJUa0!Aq$pJr_ba z7v>pA7Z1y@<^hL5mg1-snbf?>9vt#fe1JY`+T+Xkpm^k3F_u4o?Z?9Mz~2uF(Kr@G z2b#?aEm^eXCpm#rI+R|IY3KF0_s)1N_WRW`MP(~bv7sV=HHKQr zOOp6U1=X+au8KNrz`LiII!@i#Nzm}Oh* zBaZEQ!arGm3w0~qt`F)RK)ZxM4{99%mE}N=Bfo4H2;29YoSv?25t5w+pg(n`MSvg% zuwQU#2jE6gZzL*BBobiueQ9Kt`FEucD6*5z(T46&yF0TeCM$P~4j6Op{Y~0h^o~;Q zYf=bP!Fxw0@oXabD~P1OYXJQRiaO6s3T19&b98c-n9VB;0XUaILn#!O4>2yke}X>$ z{r1O6W@V-DCVUOI{@2&H)4!)tbyR|kAB<5#S~vXj^AsLvAYrT@zzDC*@ax;~{q$!q zwFSlj10#(gngD}F5IL6ag$j=nFvNyvR+{aSngNjv68U6+&^&eg`1NDxMqXd4?u0@* z-Ajk(a82MCXBa8StA0iRHRuube+qY2Of%p*IKXFJ%NT#x;rlJU8=MpFn%|Sx-8P^G zq0#QJ0kw}l>1KprAzSr~wp_A4OKw{Y<`NM~3Ggt($cEsxj{%7i#xI&TpA1ZaVjRvcu+Y8O_6bi@5W0^f4*FN^7>M; zU>#9TD&%Y!wdD)*>Xf1_qxIo5CTD~)=9AKxJPM=LW*W<6l+JMK+y1oXzy?ONTWu?? ztrZ5KpMg0HsZ9-?fDXUaOxGrbKaw&;Mrb=an0a37$C5V1(dU#hFotSa{i(V>gowj{ z3SUl0t|81*J!z7pMRv_n43!RaFZun%8m$d@`<&d%+9PRU zaHjoAWUXpy9b;yDDen*qmuJCAGh5pn<{NaJU?I9Y1e@5@Uz>7d@A3<~RY*URDsL_B zM3o4~Z?=}N=*64|iRR-Q*XXhG%Vkff?Ct9rG(LVRZ<2C?H0|Kce=j#Lw;DA9CJHs_ zM<$_#nIy_85CPc=+9FwdEl~N9f}WFvn0hLu-LBQv>mM4|t#-MM^$-1-)MJ%bC@*#f zn8rqr?W{4HW6X0=>1qt3@XQRGHKxDcQFAmmrbs(obzCj-fs1BZY_(^STM}ja8JjKU z(RGL$N@jzF)-AP2e`si0cX-6)k%*(sTyz_sKt@+)rb?BpJWZUQKVq-R<^00 zq;Z`%M>R<%^ZmJ2$C`YjE!W8}UB0O@`{}G?wJAiz%-5WLf55$6@%6RlK%8}{-b&P< z)EQcvBFdM>XL6*5el6v#;P{?wIWT*`*SK!laCv@!LPKVccYM^OXxVf?NcSnVX$F98M6ZNIcxSV*ZyT$H z)3%qqxs6pJrTZDXTZh}Sg$~&zxNPAEtV<_pozw;Ee*!)6bSdLTDM_7-ypB9GkC=QE z(5(`zjt8RQ-ZR!p>^UP~CTI;R3%u;e^V;l(M{|O!UeK2Bxv5s%$@fcREn-^a z5~I|+&gPtyEI~lsWc{!H6R}P3`;I}H)5K-!EKj*@fg(*!TQi!pX3LG&*cGTUh0$6w`9F z%a_QFOcLw@u!98iD}4dQ|~PZ#>?W43J-}lB)%r`Nc?Gaf^C`8-n{bE`^bW zW=h#k3&jB7{w1Y<3FkP^kC*1?aVd$E?2{cNaUQ;Ye($O$?_UQ~2-4ZrqQMvcDeyXs z7m_G6Gd${LULl(VzeJ^Q5Hw3k5BlS)=0R?^zP8>pL2dsGBZYCcH%8!R7Diq+TLi6U z+?X3|!Wm(RGwx{!6{!|a-iLkOfC8Ol%Ie0BlZ6hR!&Dr9=difw^%BgLb>TPhAnzvS zVYFMYzB&efr^wHt(1&EvvmfQ3m>RGuud{y}X8IL&dF%%7FrASk3Eb3Ch{K4gAW!dC zcbIX>@|t;h8{7?VPI+wP6Zg+DrFD!Bqs~#kQKu4(tDcz1GO1*}R@-;Ss<%~s_Zr=B zk%?MFTZ12eW0)p~m>t*DK5?yvU6|u$VT*{Y+id|PomINwySmrcql_R*25X8bZZ!HT z&wtpHnD~zR1{C)R*&=xup{y0&o6yIi!srj0r@<#I=uLdN!Y+wPv9RWv5c1Yj{9g00 zQZR1q;KjXJ^A6z2)ct_c&3OuP#e{Ct6bc=*P1f_27>vS~N|CR4@}6>+`7o7p7X^+P z;*}R8C5RcCUQq#+p%=0tr5U2DDb6_St$`aXgk-j&Eck39L(!F?k@e`=WaaD=2?E0} zNv7+6CcS1)=?G0|H`tR>3q#}qJMfHRvN3(~e%Y5Fd?Vw#IsRS zFufNf1+g12a@pUAw0^X)pKZmGt2g6qA!{CggB*#usj1##_%GTms${A9(BLQ=dT zWotXe^!pZ{PvM_QscH(Lyx>bI+Yf2N0291fTY!1%5eTIg&6=E&{cVD`84s^$CP}Q{ z*xP*dKX zVA?gS0CHX%t(jAe?mOcUt!1R`j;D``;y$(5Scjc;H@KQX#STK4<))eC9RU)Bpd%yH ziY^4m9IC3(TLPrY%Y8>p)EGMMHp?x4T&lK+QHq(`=+cr)ZWzjD$^FU=)nP*L_!VR> zo=gv!8ImNca0`2V7tAX~=TqDh^CiXqG3HA}uVKC%jbBELdvl-|yBhc4MM@?ol}EWh zU`TuE_AJp<6dw*4--ZoEO*fX%eCf;+-3K7PjwZ2IYzZLT(Wu6-qR(~H_<4kXBb0_2 zYZ}h?Il{rcmQ?R`gaGu$EPBHEq9ox6Ej>mONC(Ssk@(HMSu2{S8mT|yIj5%0f&k9k zjMPo3VsjZ*(6S&cOI3#j9n!GXGVBfQVWE&|jsL~=a3$Ie?cr+1*7h*vj=4QNUB_u7 z<4SM|Cc8|UWL5KM-ki}?3mt@i4Q7*M2BdWOy5a6|6aMgLjc$ycB3CeKe_M`3M+xh& zrZl*P&vcyySO!Ae+;xVg_nO`)Z#mH>)Cb-%82?BrdJuW%R&S&Ka>I_5~) z`ISx!O^d}AnxjLKz?#ZJ7n10b6Liy?0i@|_-xPr%Wi-{y{kG8HN!EAKyunk9f9K(J znqqk#uk6(pF8Xd4otrD=d|rS7SR-_{1><(GM38Eye5x*Wr7 zid|=~CqE2r_0`J+)+d|#LHa4A&CtRO_$-Wpj$M+=vT8hxUWT%tT~D6gjtPRE27j<7 zFlfs(szwx9-u@6uOau%@@6!Tge|{$31e7rmrO2woI*DO&v(@|?JWMWZq$@0O{M6m0 zaSQHlq~hIO`cGFoNKajBZkgxNTkscW@U)wJ9nzcH|N8w#-f&*_WX!KOHq>{tO+&JT0ormyJh6_3T)lU}Q4$#O!220)KX_QX!RGaSye;%0k=+%8H z=;&!oqr<*APrU4Lhr`a!TDtP)%N2+1a|-34R_?|d6`*L(TK%XS6`Jxh(OmqrzV!K& z`xHPv6qVfZuwGHz@jgXG`O1BYYV?!tQvguJL;d7VMaA{bR(VD3q4z0j$@jTWQBhsL zPf@Ge-(5Dzt&3W@`3BKqYO^{ui);Dz1*{WH!L#rGluUPOtd&F`&{r!NTxqM7gYW37 zRb2OJs#QeSduo+o_r;$f^z0aYrsN(}C;qo;Lc0`%&{<|>VWtL7pTD7#TU^B|v`6c! zRiIS0nvz*90oA{hYW)KXHOdH=k-z90TO^s0kZ@cceZ1?M1_x^$up(ZqS+6jA7$i^`^< z;ymLTgEUVsAEb+r35A7xd5d~g0(ynkR|)u{HE}rbe~lk@FR~lKOr$RAOio!FTaIK3 zM~;_94kB^@351@$b1;dDq$DxZeHqi|vX0=C@&K8PqMUg>Jvp7Jm0=hbCqWbo)685< zK@!t~C?f*%d{^jo{eDG@dlV+G*N+^G35A1EU1eiX0b5Ujz7}1QfDX~El$Gcr7oWvh zEKppMBwSF;-4$7cpd6T%o4$zQ+o?XwI_nhr(C0O-73xq@LEFG&OP6p-E);(l>~nRT zN>ox{=A-QKMYto69BjLk{rR`NYmMdaVU(<^$yX|2o_~v`R>inHwH}g93Y{T1WOvsjik4Iog)x5_@hC2%)BsU1&bk3+Ge$jUNARU>$HE8LR_%A;@L9zaD-k#)Fl z-aDY3fE4e7_fM1(hfPEs!|8v`00tBkBDF@Cm-I~PrC;HkiVOzLinMiO7)N&!kYf)HiMI^u&7j0Mu9Ou|J~_kJ{K9Vc^F zLs@6uu;qwmdA%EuDqlu9Ipjob&puMOPmx(A`J zWjnbE`FQy52c@Z1i_mJc2Bqwp*v|hjklvuFH+&olJ2Xv&S-VxB!gWGfXU6B?3vyH330NjFGm}!0^07HU9hL?uRZvEK)}Ee#H%mj0XI6y`JonCw5pMz%Pv5M=oMJIipZbRq;zkW_3#g9+6Q{4Cj@Fb z;6mA1R6N^_*XN$J=c)y0d2>lwLvC^v?W(=$maMjJYEnJVI4yIpy`#tnCk zRu9)FRrkvzQUbzeWL?R$euf*U{a+2f?}2ITjgp_GYWpjbVQw6%N+>9>e3|$&h%deP z){Zkta%I)SkgCnK9stRs+2$a>?QLDT4OTfb^I-FD?8*&+vfkaXD^GnJI=9)cU8E}O z|1dQD4+s6OZrtdgHm^B1<_IWdI+g<^YcaLF*9-xfYOaBfM%@H_HMA$%3uO7FAQ081b(95#6Jk zd2Om@L&A|A0K;<_>t(i8!N-OTp;oV+TwLdrSW|1Y-FcNg@?HSeu0q+{`5`t(H3C}U zCqxL|EdvPD31~O-T0MQKdoFAg>wH0O2w5ep4cPWsxM*qC3Ii}=L%FVhAIC)(j*IUU zgknO)oKR150KZ(qFIAoWhMW^HC!k#Hue;^N!l!t=2I0NCt>ueJ47OXW?yc{dp9eHTr}Y-sZW=`@vF60T-;!J`H%W1O zX6BZnEyFVXr47h}Q~EU4cFB>}T5ZFvT8G*H+{zZ9r4Q+=MJ)vc)(5gE4~Q!Q`?W~AGx zHU--Fp>ss+W?pmpy%2(P7*U=nnY$UvB~N7Plo&-A%C`$)HV5^80pdM!Y$!-rbpzx} z0o-#DYiV4)nnjN(#KKFaX{7Wy{eYv?L ztPri{)PW05Xq^-5h2_XG;{Sk!qZQVuMuMy$Ow!5Un7jOKpz1CTAT@U>=AKc$hj_>O zc;Bj#5}+_jMo#tIhm?dI{+zSFOi5^wQ@p>Uk_L#Msw72!nS4qs?x`q)Lc*`p6Y+A7 z_taAlaqJFt)=3ol)jCXPO`As~AJ^f>^oZPJs~Q!zu@#!+vAJJ5&1b1e-O+ThtjE2R zl^y=}?iHGlw1s7}5=(csQTBesn9d6pmlXFSki zUO72w&yUO;^_vrs{={UL#*3#uV3d$9*F4{j$ zTncdSy@&un!6nRiI>J@C)AT8)BfyE7%suPo0pjPDWH%(DoL!)iTIz#`nU%B-oYu9p z?U`ABfE)*=Cp_20*<8n#leNMi7K_yLRe#!vJN6r7p=9H2$Ar6Fvto1oTw_m^PD;6^ z81BB%aJ-W}wjxje*y5p9N>e?)ix-WUV7?poF=3VIvT>*q-lb1)LeqTq{*uYggX9%; z$j`WWb|{pi8!n#5CkLJX0fV{(_zGoiWOHTtWh<1)T#5GSiNr_oX)eVH?l9D6xcp| z{QlWgPd+~eXHsAly{VUH-qJOyq+v!RB@=(7(oX&uEkq7$=836zfAG55Tt>pdXB*4~ zb|8L}1@dyT&!@~HO2^Bie@a}jrp!LlkKdG zT%Z>rc*|5q-icl$M5W`s=tZJc>~BUdBcIRH$|d9>QAKvO@oVH^!P#Q#8L63*ei`8i zhurm;!?5y}HrUDtH90e}^#s$^CBy|=^O${i2NPV*Gy+y2f7!@1GgvyV!!r=ruO?>u zkTWeFk3N;2H^gocqnNIV-3bB2Y{u@)t;Gk{oej(!ffjTXU|zIf0d=*gsHL*tPN>UB zZXfQ2y6hZY^7lhpLuy9dOHmbTj|pZ3+&{He(G>=2(~Www}RJIcJq8iU54jOiABGU=V$lgbLo3SBxZv> zo4Fj>KaN?u5j|C^hfygv7)S?HPYRq}NB{ z%Cs|(xSFvQiOu_Pz+(^lb6eh8e*s2DB{7__l2p~0f3A}ZvYph?lh2_#C!qwmV3?b% zzMLcUb`P3P+rN}F%od%AOf>1u8U~4iq-UOZNak5Yd~Q;z(F22C!UD(v<>+h{pg)bNvx*YBm17~|;k4bGbhrVed0sivXxA&D6TekhVj%^==-P7R| zvD)dnv^t|(@=x=ComN#OoB{huOF9A<=Z;sNe@3_@$DeW9*o_+H=%mJadG7Q%Eii!(E&IaX&wB^|a;(A|m zH5f^sI2xDS=Zuvt)q!aAg#P#>Uc%_aqxWv9v7TSSogq--9bADy8kvtKPuKcsN6LCr zP}?w%e&u-ZxYwR?@M7O-q9U+YrRj!y1e4mz!w7r%wXDdE6-!;K53#5lUJl9O$Ki}h<%c6b}R%UQL!p|ozkxjwlePwdGS{WzPfYE9At0)+>oGv&l6@-(ZwUDYaCFNn z#51-`$QR-&z6O|6+btKG#Wi)ar0G)O2&qjnq-cM$(&CM?LFGh@3bMP%|igss5A4OF&IOUa$`jL#N^xOx>77u zUVQs)|LOpdYRK>X{_p?zC!TBY$P=l7;qHs;^Yg>q-7j(G6e=uuoRd=tR950-3P}AG zI4RbU%PM+W3br7!>%X6zPo{4#N5|vNE8Ks6*S{IfX5;Ba$2VX9{Au>X+u3L~?&#*h z>&e9oOT13*K_q}L@)|)(f|zJu5EkTd-@c&4AeWmiySx3H>E!tBcy`dgdG)$~H~uuc zRruX+mt(B_%NPn>%*Ge9E3ZUNg?@j0HMyQ1kFRb@mp}Sxd~!DWZu05CzZQ>j<3oSE zKgF9~5~XpyyttU$2&y;Bzc^^M*Uf0P_m(IFp#xC|qUn8jr(u)Wzr8-1`M15Zi+^?f zca!PKc-l0Hhy7prAN%hQ=;q7*_;_|eg+i;M*o1_1V3vRkEu?|;uz%S>_}l)6$-7Da zs{1DADA^O7Eum24nCl;Rckel=sqlaBs@Q{$hEe>t1|dVLg*Cm;Iv*B>r-PR1Ymzh3|JCcHoI zkIpAYJxT(roKln%MN*%{SY$LhsUs;PJ|3OcI8H{#r~TFRxF4OK{yhG4ImLh5f7mNI z?ck5W&=;Ru`b1}Ee0t;MTmxz=dIGXZXvy8Ca15$2dYYtSh_AesyK|P{;WoHC<1=O3 zE_bWDTOV}y>XvfkP|$n_OF3E~*5|hLcye(yn~u&DZDbM$f(C*IA`QgQ8D;2< zQXXi3t7lCiM8~{B02Q|y{LFdtaWp*}9i5MF>jM+&1ItEwPYDtoHv)eR`V zku>BqZ-EYuA@{kr{c?&**|r>W^UfaCv|dX{D3Xrk2QyR6D4O}X&754$&OV&|dp!La z=8mVQC~r4SpBPP_)^30LIoP}rGEvCS-wEeio2u^YB`X`q<`gL~W=He15kI78pBNXI?i1Z%`xv;nLEY@snD+caQ<6Qv*sn1t|8@?<5xq6a4n zn&yWaDHnL5ZcBfaEPxrhiOtRx2#V2eH2~hhzkqgV#*Co`)-JhOR7*k=iiIlRy%vdU zxtY=Pvg*B2UxR7gwgI?O+QFZV93!FK!o4VcA#&-sSV(^2T|?FSz?q$(PS&Ex2P#Bp z32XTqNS&$7=OzR>ZQa32^;0BxV-W&qedM@7m%AleXt00fLxhJo)lXhlU=)(z6YdI} zh;1@kfiro!l~q-mxDIki`kHjcAJcTal95}2aM%-uhm5XpxnA%M*x}# zK;-9o$0r%B-0x-YZilpBoZS|V+b=LBHJ1hLBMIWsE4 zDx8kbq~=vPF{k>${NtP$uP|n>vO21Fp#Kd%+t87Z{~G4=-azt{-oWv$H~8;%ZaM+w zH9LQSVB(^Coqz)7sb@b&pwWCuUL2X(waR05Q}x*@v2u1-7Yi9$ZwKqv35{d z0c|aE4F!ZlTDs7Ekh9bPp#6I$(OPJW>rzH>c}hm5`5~%bXy0TM^FRza#(5xQy<`Ip z5uRTz2yjT`yhZmo#qV*H)`VMtB205LGoV3;Qr@y;Q`^LCB*oz1{|aquss zP)r*)0Wc@z^z-lO`{DPVYUb5l15j2FP+V)JWY>Vo};HxbqNTWjG1~%XxJ8`plgFhkhNeH##}OzWsJ;s@HKKFL!sqVMkR!mN*Kt5 zZK7Wh5A&r8U4MIut>(Rr zT%YKQvXtSPXFx|+6_HCbajE_CY(6vnH-Ck5G+5jZ#*|t1^~JU0kb7 zizZKk*AzsD^bKdNG($qVqZn}Vj@o2rldzIr&iog|pS6(qg|Zc4zw9UjpUG8vJ5HO0 z?0e%NM}Ks7oU|10Nv3T`H}NDClyrCC$!X4syue9#MuF?B<=YO-=Uf4|9Ni7%B-1eH z;89Xb=*_o?7vo6VRudb&!Y=0&_XQEHJ}RkD^~o)3`Z&w1#eus?&fN~PaZ3*%?=Wb= z?_W&-6cF%%Qj9C-TtcnFR^7Vm{IbTwmhe}Hy}=-+}$(g^AxFju3Hw9?QA~k5&r1YiUG$hi^+D@ z@qgT62v%lj6W$R**PvO6e@8VgfbCoen?~Eb zQyPhfxaB(#Y96qiS?1^Ch)KVMIv12_hF$sbU6i!kXGI!l(sF}Bovpc08raOc(}}!V zq&j-uOH=*%9I;>wOM#<=vO<8Ju9+TDp6Q^bCzp zIdl#P7oCYI5PE;WoO6FQ4x@9NU0|jeT}O9LXtBIo4>HYmI(2DloEliI=g`CHF70lO0&N}FQ5DW| z+V<30=E|e1ajpDfyEFEMo?g-==F9P19Ckc3=JQ<99V6aLc!waF4hyGWMPs1Ds|i8K zCcid<`QJJU>GUA){)EKylLgn#=%~|!hK?EzuKj;b7pv?29GC3}v8gR9ni`@eDPoeQ zZA&lxQR$CL1KoQ-eubM8?>4mu!>p1(_f^Y&b4??Hk3k?vM9s>i0&pm3*fc6 zqR|aKDLkE1#anKbs3Oct^`#{jO>KH{L{W=o2m>^RE=3W8f#WPgoNZoVDQrMdt>Lt? z@eY67F9oy8NXEOy-PggaQiefS8_3~);Q6JcSk*yogV$Kg2YU~A-Q8)$6eSmqbN;WmrrO6le(&Nt7&wIHOJjOKE{98TyR48{&*9t6d4IsEA@8?f`PPj_N&k| zuIh1BvieGmU0Q)iW1{?T;2HV{X6?+fay{IeqwNiPq`s7Rp1|MKB*`5;Dx^z&d1O*a zt(o*tRkDaN7gfM_3h!F6tQ7O9&x+4?=^e6Id~~*BpMI5x5W1CTrKT8ppp}rGS5ALI z!j5v1{YA&6TPI0Z5x}!u?EC0aLNTi)oxPWwhx^)%b@yKKVVK!!UIIKO20rIYK$0H+-Vro{a>#RslIR@RZ?;$FrZVaOs=Ou>l%PdZ(@%5 zc6X0>{}2)QB`U(2&r!%gTT38t9gBZ7F(jHNg1u(~fht)&HhRRmc$|oskUT{xFJMPX z2CcaIrDBY5=<(Z*YBPAPr+7>Kz?CFY*zm4SYn|8Zt0m_{*02#ub$yk0AvvxwtIjFF z#tnPSje-ju>09@;WiGXIGRPk6jeOrs%?{ffs?uQ?Q8mf=z1$u4qf|2*DlR8h-oEK%}#Qz7{GMycaV9gt4`9`?CfHI_4EEu=4`93)(3xn0o^4@Pi43p zLQvNF4R1wt)^2*MY9YB)x8sojQK9wv7jvU(x^x&d2EVtXcS1?Tg_b_Kla8*^VJ!1f zO>_+XfXMCZQNfOFb#P_hw#M1C+^dKr{rIK|*cyYr-4Ok4aaahZM9W27>ofHAB1&QD zmnm>v-c-AoeGX;rlC*!v9M7An!RKfTV0o*)AyS!C^1aJYUGHD@Inm}qhYs~{uL~;c zFPJ2yqOZSn`}-~Ephk1x4G*usOJ%Q?ZWc2zk0p;E?At-Di{i{DAkK0e2)4Z{+ zk^W`kOQnq^xwQYp*eGr60BQWqte$jYD58b;>lU@qq&8g-z6Xa|o5o{LXn2LIzA(kJ zOLX01(FEEPtgz zkfNTlf4no7h_9J@WQSyfPQsq1@*35>sc`=_qE{mfso}cUScU44~A4PYG8Vr2@7^iCH+sJ5XGW-fVV3w23-GU`1 zJDch?l7~biE=g(JW345+qkZr~d{5pswP`>Kmy~%f6@S0j?w6nZ`nhhA#XHCd=di34 zb*GZm$NiXS5mW#Ae)n=K5^xj{gsM_hSxQA&GGE^(%2g9d+kF4J?NMblKmll~cfTjz zqh2xT>eC#oc%Ib4OWkqsb`KE>Y~aOTD0m)W{g& zJr4i)^M55g&_KdiKOhQcaro<>!yhld_f)g~`fCjCQOMF5qSi=^AaVma4qwWDUZu$i zvS6jqyiEOyX58HQH3{b4MKkR<2>}$|7sJ0|13|C)8NpF&Kq$Q4l5)_GPF`Y6j3@Ur z7IPfp^bw*+_T?knP|h(k=Eyd@5ta?Gn=!_%!+$)W^g{cYQi~;a>mysYrI{EXiApW| z(#)_d3T6Kv?5bg8k6ASnlo?%`vYVH5P`D*KwIKfg(l;BCtt{D7s2wnx#CAy;z z6Mu>T=%RH&q_*VdOGMEGCEG-&xhDLU5O(V(mo(}+8?O_h%X3UcgK1Png?alp!ACY> z$&nso!L6Ll0AD!hxA!Q`S|`}+yGdzp>wAA3O6tf3gU=Q+Q;Sl<$x$zP)lxCUHQy@s zm5lhEQ^6?tO5V_nCTML=6}ww>asIkpwS#Ysb2+g0=KAJ?eQMgG>;C1Q#jib zl+Q9s^qPa)OcE6yKLhvBS+4PL3eTIw7ZXxedTF-h{8t)rdooFC>aF0}xd~O;jfqcN ze>IyW%B5Xqniiod?N;@=7C{e%&(Jzl96mdttr+>5=#jI+Oz@!VoY|i70SR98-tm-!h7b)rAT)QPJ<3H^S1Q-93wK2v8n0HpiX*210!q0Ja-GJj7=iuQFh%ToUo zkab2&!6>#8=y~`exhSQDWO;O}W!pSO&&mr4)UTl5zGgq3xiYR_4N8B2D~T-azAR6O+bpE3)3V(2#bByj=6i$Vbce_K8 z>f!iBxo~an{K{R6DpfiV5K%kSR`N=^qF7q_Cux3W66 zM-b-V?st+3ASGyo(O+jG4ElvmmAZGVECR9T03Vl;@TcIn`8*jsmYsKSVr1?p(sBdmP|yi2 zVnaRUl}H>$q1FB9r8g?}_Wc`~Khs(UvJ6R}N!|7IX1hC?nqq#iv8m<-oH z>VJrr0Dsw3=&SKkzsjfaQb+I$@e+U*8qdT_9mO-fvZegUE8Ed)UU>pkQOIQ)C)jSq zl}r_0;MU5{_&XXMKCgSm69n!=)wcwXcbIaVY&4aQQ}3U`X)Rw*z_k8#&W_*{oaMJX z7dYF2x*!~2%(%FnW*AnAGb6&3-1$cFd8Dbx2`#Ou;d9M-O-NnsmbNkG#5|rygaxHH zk~|IvQ7NGeG-NgpvimFN`2PS{t%{D9k?8?DG#Z{==-#^$FyU4HWRDzo#jI6EX|Y-p@wCH|Dz8S&1Dr(#YU@qp!j_7g9j zu0e0%W!Wph!D6%~^D_`FWvj7GchA^$?R-t6tomE5V^D4sjjx@r5{MKHfDeqg5`S-0 z2=$0B*BB>oaqQ3gX^Vg44 ze86Cob)i920l4}3ck})9du_F_q`D`HCs4Ju#!N|Il`&pM^UCoDLM9F8NSZuJ7PI|N zqUEGT=s182DV){F@HJi&y7fJRklS(HBc>snOk9_JnK6DbJxVR@Sqb|i1&=%Spt#Spe% z;JFUtj=X8*1=?yZIk>AyV~rp{b+4QTGn|ChXnPUFjDJg-foTzokf-IU%q;~kY>S7n zQi0go{*Lb;ITvC!OnaqtwmsIRUUI!Z+&|k*oHoEZ8We=n!;rb3eNOiwi4 zW6Y-}hRaZwXS3F=b;1Ot1J%RdAOfS5nXVrz+z?zn)brHW!)Agg?*LQ-bn(lQwI89I zX5ySO!hf${Hxn<_0s3kHV@KZN!wcWuEXkoPd^IsLd7rM5DH{?HDox~c`02Jw>k|v)fx>;;avOIW4kOp@hBolkg8sNY!8S4i@*drG6GYJ|2LP(DkR>)d##o@{?JBd zs`QbE%;1DqCM>~S$RFWlJDgq2P6+ckntyD4ZaKLDW0V_h?siUYKJ3NX=}kx79^b3+SXV+a$rp6 zy|U0(U^F|$ihsfLK+VL%OLsm5c@vq+>Om4p&(JeApUw0K`~4?^TN5IUWLhkXd;fW$ z6!UKB)Gei6|KZ{0ZL^ce4qpYZEQl|e%6d58Ozzq#Px4(f=|9x9{biSt%_|cDIg{W+ z6qni{4JnsYhc1ez zK0&>E@vtcki^6z2Lu-tXQW{e(jQ4_RN3KB$t@R2M@oXX{l7}W4nMl{UV1y`J_gF?O zOWKh9wT>hCij-)_Zxdaiqc6f9ncGAsLYl|e^vubQ4#X`+VwEn6l|{0oH6$_ zn5T@LaN%Q>5w9uBEarju(MKNJ)+FoQc;Uh9=zUj{YzG5$Uhh=7zNkTKg%7a8U<+@R zqbh|kaW8v`UtxWyKp?JYM%AqfMTRbGJIV1}#@$7J&>P`!#ZTfxmldiVJY^pzi`1wF z|JkyrWS!f8c6MCZ8g^E2E|wMVFNKrh5o|5+Jn7r`O>G$?B6Au=Ft#vve6iOVi`4?a zP0%+8o@98+qKtEOagfN8e0h4X5>}>1Z_YO{hCwLn?qzI%eq+W`EYr;+)O)sw?Bhw( z@(NMxdLsKWC}E_pT%3oP$#FSZYV}FmVkcV^(Q(m#3ndDt&Ai$Tkpq#WzD7`k`Vw1F@`TV>3x=5RQ({vcou(y= zl(2N7%$6io)=TO+T{Zw-(~*Bds0Q$y*QDjBNU4Uvlu$ylT|#OS%LZ)DRTmd%@6zyE zqM=BC{iR^Ul6nhw`gqyUh#QSKb9IZMQIX-%&KMF+QM1oQ_N?u7IGvNN(Ls2n?o75L zbe790%P>1W&EVd+8gX zrFpJ)7h@9Ca_jx|x!lUz=m(_ueYcGc(5dFjJix#M-p9j_Y6Im%D%)7QdZ@OJt#FNh zv8v>6J#63f>b)7a#%YEdi^`$C$!mqK{5_Z7&}HE3>MKP#9b2SAt_oaN$=JSmP_6Zc zk}{ekg&VDr2LycV>X*~sUK&my&FJYZqQ7@VOD^of_ee3YBKuU*yFflzB zT|r*z4r2(ydi`reU**2b7gOPZ`10G^zbMh4ju-HFfw-MLn4+q}x{0{hpeaUx;mN4S zOKsoI7|6q;=IQofdV2qQ`28?z8fX))NH3qiAL0uQMpzdX=Y*4C`Qty!m&3;y>(pkK z{TV@$zqHnv(XOm8l&#Q!(8j!fy%iMaD~+Yx3ux5^vFb?qnxaLpSG445o?P0${kVoiUdd z*Gh&Mgy{|=&P8$9ju2{I$5z3Z=UU_3EZ^XT_iA4Gjpd6JAXLD46=b`Az>UzpBTv-C zL6|WWdEUf1%N#u2{jahtgF;dOm{w7t=Cy0Mj%{ME-Hatx=}CSnR^j_rC8KqRp#rF_ z-#a{#5?@d=Rsg=X`&YC-rZhQ2%@mhF2EmHfyx>OsW|;g@4G>QZrE^11y0mJ!F03a- zW4qRM<*{9zla;r*3DLtEw9}L!miFf|-0N1n-cG}Lj^C|qx!F?I`eL_vjV{3g1B<3# zmvLo269YFeF_Tdz69P9emmvizCYO$oE}VZn|NZ^153(@J&&r`T!aH27LqRkPhp%!R z_2JFKrhI4wdN+-hNPHs6V@&y|_)HXcHRZJM7-mZF@%a%YMw zFr*1Qm05s$rPkLtE`E=#{wcr3G3gU&=-kuTN*xQI+Y%EQVb>Dt!bg-g@e+A^Ih21` z%OI3qNu2nNqbtuW329J8BqTXsnCHF+`YQc4KUKz2V%A&IP_o-I*rz~q;gAE0hzS7LYh@Vdd1qRwhx)E2KUrS94hv* zJd*J+A|{WDZy0z5_Bt&svf-y`rp|vECJV_*_oYxe72Lft#jK}F|D{=Giz zp{wvc?6#eLt4EPb@jwKT%{S&x|)eY~#038&X1ZLy`w-YZGtDtdp+z@Hgy zo>1pHX)NQ$)zw+`0j0$q<3mfKZbe5o_7aVNK@mt3!?Y$zY75!aHIQO0lTM`>YfSPYF0rg}MT3R+yr(M&Ugj!w2=ESa*( zQs!K8CC-lEWBy!YQw0JP%rnMSV5RDEK9otLzG$FPZ(6d2yH3L>?Nj5kdJXL2ZR|mMyqgIt=rZu6Wdc2*8P8?D# zf30qgZAvch^-w=3K~TSW)}cP%<`+Q{_WZs1jq&sx&%p@;YfXQ-mX~lQh;CJVudo<* zWQ-pqhvU^}$cIu4pGMxhCL-w+n0b~Gh37blo}Q-Pe8_IBhDa{Yiy1hqksI+;JWGM} z@!II+4_d8GJS%ZyV<70mN^#1Vs zY6=|_O;XL*pAYc|1e(!>#VcZJ`Qx9RoLf!mXzujL@mhC-xW>C zA7?Zbms}i8a|tAwGYe`;I#FM+c}a+oOZzXGXlUt8V}pMH5^18IgW6;Y(x4>y6EZW^ zp(UX+$V~-0M}~)a7ImB=Zv^iZWfixq(ax01%3A4=0Xmr%H?CV$HiQ zqydzDEzbM(p65+_ai_c=k~Hsz`F(v$oRr(tJfEJmIbSuURp(X;*ViP| zWgDR@N>UtoV^}nJRtUB2(3R;GL0g4Qpq`GmM^FiLZl)0VINSoBjy-Vfe@^Ln)Ac%~ zD@36wS)Vw)uhyCS*mH6a++)z~S^er@()R7d^-l7w$*n`EE=ryHL!^3O;f8~rZsVR8 zP_}s-T0ym8BsN{+z|RG*n6iz~kC* zeqK;360=m0{L+nwBWHDW?yiv3;bG$Y&Z&Dm#Dp--agQo6CfCYNgm0)|RIuq({FiDW z9@;B^s#V8HuB=}u3e#M($guzz*JCYXI2T+W3tpojZG)h?c~;PP>N%fFX%E7yS>O^o zZ!1v1YT@0O-N>@ejt}2A59?}Q*RDUHJHEVe<_MZ8uP^A#zMwlC+PWYxUL@H%1Uotm z=q~r1R{7rLVI`I+!TVY7SNMMFB0Sl6qEH}zLmqoJvDf4)badChFNBNFO9BVsMF($| z|1Gf@V$x$Rg%oN=Am2jhefaR7@8ACN^&b>tmhbwNhQTAF-9fi+nZTclFP##b88qvC7)^zYo2M*VAf__jQJsoD&h{zYfz$hmANlO_eH zp;u^aigyvv74E5njeEYEjlGzqO_8*gydnYx|9fn)`db&8_ExqRpmcSP*+tID7bFK2eN`-lUlLIFl zm4;*B@>_}LCUjeDw(e3h-JN1?hzT9_er(;mvjdk^S1eK8Iq+R1JaxM_bu8&+sC3zO zlF}@xheOICqUQ2&h^~VF!qi9}j)YY`!CAZk5b z?qqxByvlWlt+u<=W0}KkzNZU+RDb4}O*<`u!IgGdtD)^ujVP%y*#64EbfGt27T!wl zD2fRq&1&BLYb305U5+PB+ri@tsCx(G1wqACOt;a~t}(cc`!!SYhr^A{v&rMuZRcT! zx!t^8C6VL)#lAys&TqpXH|LuD@xPa`S4o*3Th4S8S4wY7Wr%Hm?a>zv2HP6g`U?$` z=J`({qmtb8&6_@X*Jt&uTn=Y9GqEELFoGt|j18yKem+?LY69YCmGnXN{ zH6;NzmkK{GGM8XmE(CwM5&rI9L7-o*AHpSvGaRxw1jt>Q>lHaPh*O}gVHC2h+$nV| zLzaWIzrN2zHYlzH z7eiK)*hQ+VHB}pGr5>^G`;Ggwi#e|v_T<7M^Q~r2uoeu zO^$eRw>T1Q5*(33!W`K=!EIzbn~U1=@T^jsS0Jg)rnpvv*{20Ai{?dPNNRIrNQvxP z7MEDeTkvnvKsJAex>QoThG*>$r0O^Zvqj-&YJP#?jEPOk@O^WdDkNKeEq1NivoMGk zD}tw4G-D2I8RycTwe3nx4|CWb=mjSfZ5<^#No}W~EZnRw3ER22tJq6!*9s&k=Tz}* zCG%COkgz}r5fg>x4cyIvZH@}%P}?XNKDIbBa|uh;5b%F7wVkPuxcRR_PuToYaU*NB zb=XJPf+qt0Xfg>OVt$6iu2`5u5=heY>{>NjU`ENw#=~R9VnYL#S|Hk8bp;uOIWRyCxs8Xg zkJWsDM8bbf8-=1nOt(?UVT;;bY;p*T+iGGPn~-mqv|X(xianJqgJRXa@4xTf{P%p^ zJv%#_&RzGzbapbH9Ry^1IPCt?{oMVC4@jfK?)CV1eh`Vgz^9R-w}^x{`w zUblaFG`9g?PR{<*JzEWbJfBR@y8Z6&uYb1R?|y%q&(AOZ)OEj3=D%GY`Qz#P?%n14 z^Cu_c58Yoce|hEKopwj3)1$72LMm@#kQ1$ePOu>|8l9ApFJMs>O#qWK1f_YZ)?T48>cX zeqOUO+<8^ebw5r|r?dU@(ec3{PV~8Py6%He2lPd7hX)y=9uCI zAQCfko8$#xCkpboeE>`$iQ8~bpLVZi)8l{r@%*5B_54NmX8du!w6O*9tI@Ax*l;!< zpUp3xbt1+R7axt2sCsPgr??gaoMBWrg1#zvS)zOm zu-(##l%p4L#NG&w;=!43GJ--u%7gujg1*6ls=M1jRed9|z;m$km^~H=HtK&-lD8}n zbQ~#Xv?6FTz=FZ#Ru&jgfx`YiLAs)_q9|5cwu#4enj!dD@&HZSP3u+$Xj(p}_>e4N z15|H|qq3w0-C%_3fP-38=K9_{YeN1XZO{p5e+ z*}o@n`s^*DV9^h#H3XsD1NMKk6=$n0h-Y+e1cqRHARsrI%N_In7Nn};KicUPsj3x( z{;@h9{0XR!e2w=3`{+m_`eZ9_YR6B8z@QWfh%4oxa3Ay-tQz3cQUL$4F=+Qw2B#~s zz5ht@L_rA!x}clORCl)_+RD{Vj*8C!Y9jH08gil#Jd6#5#@|jTRyKds=-E!QZZIMu z{3WM?O`*&=#mr%&{^%gut=n`uGwNT_A(~{i)d8AZf=^+{?2L^kp)XG6H!9K&MX2Ph zBD9?EmPM#uA@kaEc93TY)t8>tm)%%>Rv=$mmmaMx-X19eW)z;h8@(6AH-6V` zj0BG?`r0dAK4~D&WFUWk{W@=5UjZwi(Wx?$njC@D7T_xf_9^i;tEEf{D4$_;i2+pS zK6rJkn3UH>XhFkHHyRP45G6{r_Zpm(B$RuwqQo|9Z$$#nw^u7S8o?zZOM{lIKqa9f zJ5h~@dfVQbEaQ%X7{Y(;xce}gO-4tj<7Ede)fh&OpB(oV`AmN|b46iQ9?(aJ?W5W2 zG+7WJLp0HKp;wh5nuv6!A)4r;K!gTqYV?Kqn<-AUZWX7hw=YiZrO~Q5)wC=;weOH> z-yzk!`!TDfrM-tq0$*baR%r+4Mo*E4*MS8xnzB^%4s2rB9V-~@E9SKk7`&Yc++;){ z;t1M;;LvO@)e3*@gcXSx?NC`CL0Q;qeMCoXsaPqF>H{&qfJt#=d1Y8gU{H?)?gBQg5S0~D#Eg-zufIgYko`V)|7?^f>s z5;6B6(cb&oGTLk3rJ%h~dZ8|bcn@!9`X0_Y4MpPSI|m=cNz7Y z03I39oI>zu;kRGNMf;9I<(PxO=?2z2IUAdXdDe{t*{%~mB4-!tB#P_|((LW~A8U|K zK4 zFyh{;gmu6~>ld6H47kc;`X&J-JLsX^PI^e}WP48iT7^&@Dd{6xCw2ienov1*TWKVe zJT6zhMwZd1Jf?nuI0#nCF>FFT@#p#YCt6EBUeJnB8lss&$dw0Z5(@%^hG?Q8%sBGkdz)x;HU=81=pvK034(a6e6jn@uErcsBY4LoHMz|KyqlsUFzde707^IJ5G5g zszQud#_}041FY`8CO&^jaGS9^@=5=H<}8w4*KA-REg(fX98{0Jt9@MBk@7v#jx(@$ z(?u94|D&6wPwzkXG?bulDeDXA z{hdrLp^{~ z@?{o)Q`#^LP&NpQWzCPS0>P}%h?5-!60`&u-3M9ySuCiE<&+ zt4kZHC_{356*OH^du6NLmSMBpDTNeYO|lgd<3?r?(h9?qJ$Y0NehaPXFz+z4mJDr` zXO!YC*yZpjkx+j-!Z(FeUTqvOxuTSopvow{*yNysPzZdL(I?-f9xzrY6*wjHStNgg z$KqW$kGjOR%YFQn=)^63AxoSm9Qms|+<%r4@f|dwL@{cOz>-Yy4)q$f?#a zm?>30(}-FCmmrzzom^}^VS&2-sjKd7DWo%<&ktqlx|b@SYyFPORej1z+Xa>sP|DEo zd8Cj=Yb&Rhx=wwXc!Bm`*R#1V4R13~qo!--P+AZ)%Jec0tM*NZ^28Q9sS-BJnu)UO z=hYObWrKfuE|!WWxAuwhj&?pSG`q}sHmiGS1zO+~V$YXey=M=?BwOIMY0$QAQ0@Vd zHt~H%bgOS*#%OKK%-W6nrqJ_qKCRE|m;&;7*!K2_*oaH0m`K<~-Z08f`u$b-Ol$Z1 zC)6467|K9nQLMoz96kWl%oPK!aEaV{z%z{-DHy)Sw*Llt!dUmayS=Ti!p+5K-Q zb<^qL28ha=+MDBaSIsY-0DI7-5WIYJSE;zD9sT`{2A(oHZTWhs9fR4Hu_c3dx-_+} zo84gMya;|FvAk4in&pywo;#)d1Ujs7&^NuTgxNA*m%x$7A<>1>-AQ<V4cP%5hr^gCZ zf_utT2=kPl)i%>vn)OOg8=<{pqZ0^e>@3ELt~;wL2Z_YSXbK>CT(oER|3qcg!C zXzeRd!Wrb067R=Bs-g+OEclWu4(Z7GY@iZzVaB$h*OR4K4v>8ol3ltZ8`@9vpL{Q; zf6|AC3Qh<@btUK80e3sR=r4cB#Y==Kg}}KznXZTC1BzNmvIcK{O53rf?!GGkO>Tn+AJ$)^% z+W_rE*iWPGxLyM~^p}(WzxQiEQ3U-ZH%=JkSD$#6b3nGrEAH<~CscnxPI==30idI( zs(!)!Bu4p;8#`>qGxw89j9*9#6pXqf_}APwVN~z9Z^C9gao>bd+P`nY20w7$1f&rz znE&y86SnFvx^Kc(`Nj85_-e1eZ^Bl1?!E~lwsGHt?B&&P-qGa>=WZMOnrqCPcIV;) z|E7@lUl8YArwV0mWOJA2EG-QKH!wAq(KI&{0Xdg}oe3tFJGd^F0eF|wxGpJwOaoL8y>i672PiS8>gj7Quj)jZQ!ulbz+T)!bY5ATB*Y>o zU<)XaSyq_otbYpmvz2d?=o3wWC?JDgj#Wu38&K}H4IQ*Vy41v_d1sogi}b2IHR%b% z4tZ+QIe|B}GZ|6AI$QaFc7x34SRu!_G zF&LXYvdKQXAY;xUrh$A}wG(hrAv$@&o%VC(y-LpBfO{9zkW`@HAfe(iH_@sT8vaQ~ zuU^Ap63=m#`}R;o;g#&sH`aDPk2ZUaaV?K*4}OtXvUo+(X?T5qtS38?zlQX{$S5E_ zroib78&3LdfwSSh=c%Y1OJ@{SUD*&7B(DP1PEu5vFt|xHRwsq25w=U8rp*Matn;1o zWVEAqS0M$i3tXwiZXp%4rH~vXz{agu8);N%F`LMmNDq8SwVxHE)$KPK*b zik@6##B>9HAK7zj2nWZ7{B&g_p4U7mxjzr>`Q8$1HRE#0B{6-Xh|94Qu#pgM7H?wr zkQ0|2Vb!nM$H>l9f+06qcSJnMM1Sl@2Nb^n(>S=unu!rISM-avW{zfcDrB5ZH|V> z`pa+flN;a03S&0gG4_s_9%g4YQllvmHDzFf62crcm%dlpkN7$AJ<${qkxRscNFd4tb#VoaMOq2mAz6(r4 zf%W)G+2-Emfps!@n{v2ZWtoY5P?VCjsR#Cdlj<{}A5`P*HMG@0-5A_lL+_@l&p1nj zttb^DiA2!#lS=G7e*;Q&Kc~co092}_$1DG64r2vw->Yoy9TKkRJMl&-XlaKzd#BvKp8C?d*C!RXqb$6~>Q$ zS;umYoEi0)frflu$B@3hkCSR^DPI?;o7WQk+=$^%F88Vi%PE{Y+vEhwt3b!jmWQ{) zh2hL0hqLSPSn`5Xe)+PIYmh-oe(XBJVR}tG2@;p-m1nK_$0{fewaZ5Jv(y1UFOLG{ zyn`a{;Z~a`w(xsIl=rrlWwfKTp6T%3DCERtjpQg zHGQz-D}rJFCz2f{I^_*KBiU`IkRY2?L*WpUz(3luhob*=s(QK;kM; zgfpm+B6;5%Y*Zq34sjPG+0)?N}`xeRxUPQNpFkF&{kmx zkNmuuJHV{FNDBzGjoD$6;b712aP zksyup!FxqBhw~)S2x9LS%^Z+>-_JF>s$l!FZs5JQ3J!)j`+fqb@`moDJYk34t4+lxYR>`yx;Ns-G708PvGv=f`J^?8$at7oKK1r2Yt!4S_ zmA*Uvo>~Frv$6JpnU6(jElOxZqG5gjC!OY&TXD7!h%2^hYPa*~v5Wv!ON~5^zA2W8 z#9~ZQU!7Z%i z_QwS;yfTY%Rq+Uc>Na7L!hl2GQn)Df^b7jQ`j;O+Y|2-?37k+8cqCw}1hR&!8fJf# zBD(ZvdW>%`uZN!(4hz8u&Omp3`s8J?c{mnRsX@T)UQR@hDdn=BxiTnY#wdflSrLC zCwO^$;_Q>d%&*&~B)=RcAt|9hJuX5FBCIH1tq!lH5emcq&^v*T9IM83N$wNl{}lZ0K5s4IJQF0i)PlOhL&CMofMj|x-3Mk~*{6}5^&hC!b5wJr(7wP4

eDuvAk8kX#`!A{?@o$^zQRZYPXpQ^ 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%0ALEqZBz^9S}asSIp+AA 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

ZzO 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

Zg6@r_1bt!llMp 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

%T&^|Nsbi4zo+3jvIo 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�^7D^XBB!3lLG3U%*ipwNsk7q)%W3A0C6 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

d=z14VXjYthIXwxQXtLvpr5*aFu=HUi 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%0Ach*G%~c8 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%0A9;3^3o1P!J*E0YVZRK!h2?AR9XDM&8yI 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Ç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

laF3{f*$Md?=L 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�K0CN`nyh*uNIIDKvwFM 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 delta 1544904 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 z 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⪚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Ȥ&BFLldaM18YkZ0ohAmo{-{Se5bHKl(~(!h>> zIZ@mP@=R2BfIKtBeIU<7b=#(wgCmc;0}lBhR8;{6n( zGb@-WcA0iImj()2ZZX##3fGkLq+c}NRr~Ln5u)(uHgwc_2chIL|A%mO3{EL^PRm){ zKc|>p)aps*@|cgkB zz2!=|n=M=RRIlrfk)_()?cHDCRMrR$YDWA@8DR(+dIDEQE z7+#>(mnfC6B#%>jxmICXpi2QaayzjU=a=OK3#KZTD!KbEl*7P(lK%mi4nYeSR*F~3 zpuA0(dN;74X1lz$Jyw5xEVW%wO>coTKK8|S!kau8S^{}Mm9c*SYeV?p%n_{!tLJ2( zSotr0CQ+b!=!Czll#$W{0KF!Ik>VAAUf15(`wo2 zjBz`Z=ao~!1plvs@JbtDWjoefPwlb0cX8s?INgijQt~DY9%y!l3Je9euIno4DZ#h% z+HwiCWI6ZYtGRy^QC+*43%h2JdDoN2f0Noz$rJ29(a*7m19 z>B0tNV<>%uS%tM4zuo~S#`c1*+}egIKypc(2B#}4$NoymZNnLYb>!GRky-TNx=811 zx25xz{6EZ7vpK<+Ydi)j2EV#DR8Ama(2>yP!>r-j%Y`ee+{mjaU+KJX@#RB@YW;QM zq@{Yfy1%YFY&iM&t8C3mWZ^e$$Nmq%{I{1Oivbe@H8?Ss!S(|cmrwsH)PJ!5{q2{X zEMoEf^=`1p1A+wXGtgI@kJNa2DT{+p(L9h6kUxIoWehJWoo zTvC%#UMMt!bxKIoRZTBa8efFbEEOx^hh{aN@_R&9?h1vd zgk_iq$Bo-Edjg8L} zdonF;X#=gMv@WgRAi|7aL}755V=M-6m${r$kRe|8^QFm5VTrBuY%a4jT^zM_x}PH@ z2_cp>^&D9$w!z}AzKp5z`_O2#iV>gpF&5HvEb)LPCdyKyE=xOQOn*i2koSu#y|8{! z+EZcI7B5_tuoW*$yHUakFK~K@fF@Ys6fR15yD>VdwCEwcdKAtsheLtKr0HV=m(lBw zYyO$7F*D$05vR;3xL-WVDjx7=@yn;~6bq>zDKYGwhamC}z_m)kzR)3$OH$p-UI?dslD}ZxV z2`KU*i~VYV5*4OkgDq6f@L)hl;&ws>^g)f)2x*Rszhk1ug&bby&s!=|!%RA^b2#`* zCNZzMijEm32EUaT`Bq3ak-DdzsH#H670Vw>-s1Z+%VS1OSD7+$+IK~J(TipA=0Y=T zfY(#bI7_X99e>vg*vg!DftTW!=ka5LRn=)U3I#oaXrDaxM<57VMKOyHM3A21V-TdH zx`H4*5A#U61woLa497Y;oiAk*VKXn=KhgPaQ?!hpRL#7FPeai}u}YReZ)>tXT!n6Q zC<_9Wl6DE*bnwC%Kau^IaSD7qFiIH(^?dBf0w(pOQhx^Y^J@uQU%&|0gKHi5m_27j zP_9-y8PuP&QC!QqavkTVU8;Fn7$|G%xE(<#AGSt-NpR}wniGR-HhvzByI`o)d;?>l zam`~}__dsu10JuJV}MpUF4EE0X_>h-d&Q?6hT#-8%=1fQ!OUY^f2`}TOM7U1O7WfD zYRjd#R)1`>a3ZMMg{Dk47rnz!MW`vccDp3|_{=%v1U2&~OKI8FW>eC-%C%hlhhg4dFrsK*u`X!DMZh1nkW^qcSjwaR( znjz*PQmmuA-uSlh=jX!BUuZln8)&AzGwCb;6_i5ODsQL_={?Xk! zf`8xzbyD&Hr=e9T4{1l<8ql&jf+Itp8EplvgNjb?mf{iVyys+$%(`0@mPZviKYm65ovc|Ur2-Hp&^kJ`+vt=~w3;%|Y(@M5{YSJa6i6;uq>ZLkWS;E(`_gD*4E{97e?5g7Us=`>An4rhcLC8hx zq$7a$l_D#A_OvgZ;I}&e*{?k&q<=1NFTcJ@t7|ijh$$Vcsk~mPlc599VE_DSA1>Hv-(__cL1#K z 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

<=Mj=oi7ev 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 z�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ⅇ2Cd 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

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/developers/checklists/index.html b/dev/developers/checklists/index.html index c9c48af3db8..9b2a3616d54 100644 --- a/dev/developers/checklists/index.html +++ b/dev/developers/checklists/index.html @@ -62,4 +62,4 @@ ## Optional - - [ ] Add package metadata to `docs/packages.toml` + - [ ] Add package metadata to `docs/packages.toml` diff --git a/dev/developers/contributing/index.html b/dev/developers/contributing/index.html index ced96b7fb45..7e95905b0f0 100644 --- a/dev/developers/contributing/index.html +++ b/dev/developers/contributing/index.html @@ -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 9cbd71fdc49..aeea09e97bc 100644 --- a/dev/developers/custom_solver_binaries/index.html +++ b/dev/developers/custom_solver_binaries/index.html @@ -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 66c46fcd5e9..34493855bf5 100644 --- a/dev/developers/extensions/index.html +++ b/dev/developers/extensions/index.html @@ -301,4 +301,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 319f1966594..b3d8ead73b0 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', 'UA-44252521-1', {'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.

    +

    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.

    diff --git a/dev/developers/style/index.html b/dev/developers/style/index.html index a45cdd77780..ed8350fb924 100644 --- a/dev/developers/style/index.html +++ b/dev/developers/style/index.html @@ -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 a6c38b91272..d8d29b1fcbb 100644 --- a/dev/extensions/DimensionalData/index.html +++ b/dev/extensions/DimensionalData/index.html @@ -39,4 +39,4 @@ 2-element DimArray{ConstraintRef{Model, MathOptInterface.ConstraintIndex{MathOptInterface.ScalarAffineFunction{Float64}, MathOptInterface.LessThan{Float64}}, ScalarShape},1} with dimensions: Dim{:j} Categorical{String} 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 3ca57c3f1a7..0e4c425b005 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', 'UA-44252521-1', {'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 84c43dce78c..10d5faa7d18 100644 --- a/dev/index.html +++ b/dev/index.html @@ -10,4 +10,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 ef4401ef47d..54ecbf26a38 100644 --- a/dev/installation/index.html +++ b/dev/installation/index.html @@ -21,4 +21,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 d787ab7e640..699c4a4eeb1 100644 --- a/dev/manual/callbacks/index.html +++ b/dev/manual/callbacks/index.html @@ -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 c4251289154..6dc9fe58ca0 100644 --- a/dev/manual/complex/index.html +++ b/dev/manual/complex/index.html @@ -148,4 +148,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 7ee1f205bf2..5a938d0d75e 100644 --- a/dev/manual/constraints/index.html +++ b/dev/manual/constraints/index.html @@ -763,4 +763,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 b3272d3e971..a3e9b943131 100644 --- a/dev/manual/containers/index.html +++ b/dev/manual/containers/index.html @@ -224,4 +224,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 583dea1ab08..7ca893e484f 100644 --- a/dev/manual/expressions/index.html +++ b/dev/manual/expressions/index.html @@ -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 b8478105574..8f526665614 100644 --- a/dev/manual/models/index.html +++ b/dev/manual/models/index.html @@ -234,4 +234,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 c40f5a41e35..83a3585fc0c 100644 --- a/dev/manual/nlp/index.html +++ b/dev/manual/nlp/index.html @@ -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 d612326d2aa..c5e79334392 100644 --- a/dev/manual/nonlinear/index.html +++ b/dev/manual/nonlinear/index.html @@ -196,4 +196,4 @@ y[i] = x[i]^i end return sum(y) -end +end diff --git a/dev/manual/objective/index.html b/dev/manual/objective/index.html index 48d7cdc83d5..7f6889615e6 100644 --- a/dev/manual/objective/index.html +++ b/dev/manual/objective/index.html @@ -165,4 +165,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 0448ea02b04..034ab0bcde9 100644 --- a/dev/manual/solutions/index.html +++ b/dev/manual/solutions/index.html @@ -371,4 +371,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 c4aa338df80..2340aeb7900 100644 --- a/dev/manual/variables/index.html +++ b/dev/manual/variables/index.html @@ -582,15 +582,7 @@ julia> @variable(model, x[1:2, 1:2] in SkewSymmetricMatrixSpace()) 2×2 Matrix{AffExpr}: 0 x[1,2] - -x[1,2] 0
    Note

    Even though x is a 2 by 2 matrix, only one decision variable is added to model; the remaining elements in x are linear transformations of the single variable.

    Because the returned matrix x is Matrix{AffExpr}, you cannot use variable-related functions on its elements:

    julia> set_lower_bound(x[1, 2], 0.0)
    -ERROR: MethodError: no method matching set_lower_bound(::AffExpr, ::Float64)
    -[...]

    Instead, you can convert an upper-triangular elements to a variable as follows:

    julia> to_variable(x::AffExpr) = first(keys(x.terms))
    -to_variable (generic function with 1 method)
    -
    -julia> to_variable(x[1, 2])
    -x[1,2]
    -
    -julia> set_lower_bound(to_variable(x[1, 2]), 0.0)

    Example: Hermitian positive semidefinite variables

    Declare a matrix of JuMP variables to be Hermitian positive semidefinite using HermitianPSDCone:

    julia> model = Model();
    + -x[1,2]  0
    Note

    Even though x is a 2 by 2 matrix, only one decision variable is added to model; the remaining elements in x are linear transformations of the single variable.

    Example: Hermitian positive semidefinite variables

    Declare a matrix of JuMP variables to be Hermitian positive semidefinite using HermitianPSDCone:

    julia> model = Model();
     
     julia> @variable(model, H[1:2, 1:2] in HermitianPSDCone())
     2×2 LinearAlgebra.Hermitian{GenericAffExpr{ComplexF64, VariableRef}, Matrix{GenericAffExpr{ComplexF64, VariableRef}}}:
    @@ -634,4 +626,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 310637be0ce..cd68f1278f9 100644 --- a/dev/moi/background/duality/index.html +++ b/dev/moi/background/duality/index.html @@ -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 8ed5b35187d..1524aaf2d8f 100644 --- a/dev/moi/background/infeasibility_certificates/index.html +++ b/dev/moi/background/infeasibility_certificates/index.html @@ -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 f3fc26b49e8..4e5eb1f4f7e 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', 'UA-44252521-1', {'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 ff3a59a5e2d..7278b7071b2 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', 'UA-44252521-1', {'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 c85392d2811..2dc5894111a 100644 --- a/dev/moi/changelog/index.html +++ b/dev/moi/changelog/index.html @@ -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 83ea14db288..ca06d914c35 100644 --- a/dev/moi/developer/checklists/index.html +++ b/dev/moi/developer/checklists/index.html @@ -113,4 +113,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 68f14cee862..93e617d2c44 100644 --- a/dev/moi/index.html +++ b/dev/moi/index.html @@ -10,4 +10,4 @@ year={2021}, doi={10.1287/ijoc.2021.1067}, publisher={INFORMS} -} +} diff --git a/dev/moi/manual/constraints/index.html b/dev/moi/manual/constraints/index.html index a77908cff10..d0dc8bf803f 100644 --- a/dev/moi/manual/constraints/index.html +++ b/dev/moi/manual/constraints/index.html @@ -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 745aa430329..82b1ee3b5e3 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', 'UA-44252521-1', {'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 34ec38345dc..33f43369916 100644 --- a/dev/moi/manual/modification/index.html +++ b/dev/moi/manual/modification/index.html @@ -126,4 +126,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 6298b17c3f3..8abfb12e50c 100644 --- a/dev/moi/manual/solutions/index.html +++ b/dev/moi/manual/solutions/index.html @@ -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 0c5935610b9..a7e5a254b81 100644 --- a/dev/moi/manual/standard_form/index.html +++ b/dev/moi/manual/standard_form/index.html @@ -7,4 +7,4 @@ & \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

    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

    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 362a167fca8..22127d853b0 100644 --- a/dev/moi/manual/variables/index.html +++ b/dev/moi/manual/variables/index.html @@ -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 473a117c78b..b1f840bd0b2 100644 --- a/dev/moi/reference/callbacks/index.html +++ b/dev/moi/reference/callbacks/index.html @@ -33,4 +33,4 @@ MOI.submit(optimizer, MOI.HeuristicSolution(callback_data), x, values) end -endsource
    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
    +endsource
    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 d6a27278ab5..f1bb0bfbace 100644 --- a/dev/moi/reference/constraints/index.html +++ b/dev/moi/reference/constraints/index.html @@ -5,12 +5,12 @@ gtag('config', 'UA-44252521-1', {'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 (i.e. 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
    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},
    -    F::Type{<:MOI.AbstractFunction},
    -    S::Type{<:MOI.AbstractSet},
    -)::Bool

    Return a Bool indicating whether the bridges of type BT support bridging F-in-S constraints.

    Implementation notes

    • This method depends only on the type of the inputs, not the runtime values.
    • There is a default fallback, so you need only implement this method for constraint types that the bridge implements.
    source
    supports_constraint(
    +transform(model, c, LessThan(0.0)) # errors
    source
    MathOptInterface.supports_constraintFunction
    supports_constraint(
         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, e.g. 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(s) 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 correspondng 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(s) 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 statue 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 (e.g., 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, e.g. F-in-S constraints cannot be combined with another type of constraint, it should still return true.

    source
    MOI.supports_constraint(
    +    BT::Type{<:AbstractBridge},
    +    F::Type{<:MOI.AbstractFunction},
    +    S::Type{<:MOI.AbstractSet},
    +)::Bool

    Return a Bool indicating whether the bridges of type BT support bridging F-in-S constraints.

    Implementation notes

    • This method depends only on the type of the inputs, not the runtime values.
    • There is a default fallback, so you need only implement this method for constraint types that the bridge implements.
    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(s) 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 correspondng 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(s) 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 statue 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 (e.g., 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 d7a9ab0ca14..3bc85a57893 100644 --- a/dev/moi/reference/errors/index.html +++ b/dev/moi/reference/errors/index.html @@ -49,4 +49,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 9fcd2bf044f..f796be9f502 100644 --- a/dev/moi/reference/models/index.html +++ b/dev/moi/reference/models/index.html @@ -15,7 +15,7 @@ model::ModelLike, ::Type{ConstraintIndex{F,S}}, name::String, -) where {F,S}

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

    get(model::ModelLike, ::Type{ConstraintIndex}, name::String)

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

    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
    MathOptInterface.get!Function
    get!(output, model::ModelLike, args...)

    An in-place version of get.

    The signature matches that of get except that the the result is placed in the vector output.

    source
    MathOptInterface.setFunction
    function MOI.set(
    +) where {F,S}

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

    get(model::ModelLike, ::Type{ConstraintIndex}, name::String)

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

    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
    MathOptInterface.get!Function
    get!(output, model::ModelLike, args...)

    An in-place version of get.

    The signature matches that of get except that the the result is placed in the vector output.

    source
    MathOptInterface.setFunction
    function MOI.set(
         model::MOI.ModelLike,
         attr::MOI.AbstractConstraintAttribute,
         bridge::AbstractBridge,
    @@ -133,4 +133,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 (e.g., 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, i.e., 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 distingiush between them.

    If a primal or dual infeasibility certificate is available, i.e., 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 (e.g., 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, i.e., 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 distingiush between them.

    If a primal or dual infeasibility certificate is available, i.e., 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 1b62c8190e1..d65687c3d68 100644 --- a/dev/moi/reference/modification/index.html +++ b/dev/moi/reference/modification/index.html @@ -28,4 +28,4 @@ )source
    MathOptInterface.AbstractFunctionModificationType
    AbstractFunctionModification

    An abstract supertype for structs which specify partial modifications to functions, to be used for making small modifications instead of replacing the functions entirely.

    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 48c55881560..963c28b0c43 100644 --- a/dev/moi/reference/nonlinear/index.html +++ b/dev/moi/reference/nonlinear/index.html @@ -79,4 +79,4 @@ )source
    MathOptInterface.constraint_exprFunction
    constraint_expr(d::AbstractNLPEvaluator, i::Integer)::Expr

    Returns a Julia Expr object representing the expression graph for the $i\text{th}$ nonlinear constraint.

    Format

    The format is the same as objective_expr, with an additional comparison operator indicating the sense of and bounds on the constraint.

    For single-sided comparisons, the body of the constraint must be on the left-hand side, and the right-hand side must be a constant.

    For double-sided comparisons (that is, $l \le f(x) \le u$), the body of the constraint must be in the middle, and the left- and right-hand sides must be constants.

    The bounds on the constraints must match the NLPBoundsPairs passed to NLPBlockData.

    Examples

    :(x[MOI.VariableIndex(1)]^2 <= 1.0)
     :(x[MOI.VariableIndex(1)]^2 >= 2.0)
     :(x[MOI.VariableIndex(1)]^2 == 3.0)
    -:(4.0 <= x[MOI.VariableIndex(1)]^2 <= 5.0)
    source
    +:(4.0 <= x[MOI.VariableIndex(1)]^2 <= 5.0)source diff --git a/dev/moi/reference/standard_form/index.html b/dev/moi/reference/standard_form/index.html index bb375a56d00..d0a738ff19b 100644 --- a/dev/moi/reference/standard_form/index.html +++ b/dev/moi/reference/standard_form/index.html @@ -990,4 +990,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 9fdf3dc05a6..75c23290ada 100644 --- a/dev/moi/reference/variables/index.html +++ b/dev/moi/reference/variables/index.html @@ -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 (i.e., 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, i.e., 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, i.e., 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 statue 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, i.e., 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, i.e., 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 statue 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 a9d230f29cd..ac51fa85bc7 100644 --- a/dev/moi/release_notes/index.html +++ b/dev/moi/release_notes/index.html @@ -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 076a5155b16..fd8e74181fa 100644 --- a/dev/moi/submodules/Benchmarks/overview/index.html +++ b/dev/moi/submodules/Benchmarks/overview/index.html @@ -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 c6c26c20d60..679f545a1d5 100644 --- a/dev/moi/submodules/Benchmarks/reference/index.html +++ b/dev/moi/submodules/Benchmarks/reference/index.html @@ -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/list_of_bridges/index.html b/dev/moi/submodules/Bridges/list_of_bridges/index.html index 95a01cf5fed..844addaafff 100644 --- a/dev/moi/submodules/Bridges/list_of_bridges/index.html +++ b/dev/moi/submodules/Bridges/list_of_bridges/index.html @@ -111,4 +111,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 +\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 diff --git a/dev/moi/submodules/Bridges/overview/index.html b/dev/moi/submodules/Bridges/overview/index.html index 771ec8fbb8b..e738e279e97 100644 --- a/dev/moi/submodules/Bridges/overview/index.html +++ b/dev/moi/submodules/Bridges/overview/index.html @@ -54,4 +54,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 0c679a9cb70..4b3edabb73b 100644 --- a/dev/moi/submodules/Bridges/reference/index.html +++ b/dev/moi/submodules/Bridges/reference/index.html @@ -196,4 +196,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 33feb71c343..359e1990752 100644 --- a/dev/moi/submodules/FileFormats/overview/index.html +++ b/dev/moi/submodules/FileFormats/overview/index.html @@ -138,4 +138,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 5b928d130c0..3e4465697cb 100644 --- a/dev/moi/submodules/FileFormats/reference/index.html +++ b/dev/moi/submodules/FileFormats/reference/index.html @@ -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 60159866cae..7302157101c 100644 --- a/dev/moi/submodules/Nonlinear/overview/index.html +++ b/dev/moi/submodules/Nonlinear/overview/index.html @@ -184,4 +184,4 @@ Node(NODE_VARIABLE, 1, 1), ], [2.0], - );

    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 tape is also ordered topologically, so that a reverse pass of the nodes evaluates all children nodes before their parent.

    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.

    + );

    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 tape is also ordered topologically, so that a reverse pass of the nodes evaluates all children nodes before their parent.

    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 5fecdb32f10..29e3b18e156 100644 --- a/dev/moi/submodules/Nonlinear/reference/index.html +++ b/dev/moi/submodules/Nonlinear/reference/index.html @@ -148,4 +148,4 @@ delete(model, c1) evaluator = Evaluator(model) MOI.initialize(evaluator, Symbol[]) -ordinal_index(model, c2) # Returns 1source +ordinal_index(model, c2) # Returns 1source diff --git a/dev/moi/submodules/Test/overview/index.html b/dev/moi/submodules/Test/overview/index.html index bd30cc8f99c..1f5d7cd490a 100644 --- a/dev/moi/submodules/Test/overview/index.html +++ b/dev/moi/submodules/Test/overview/index.html @@ -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 2f7d768c3b1..ba3ed190d61 100644 --- a/dev/moi/submodules/Test/reference/index.html +++ b/dev/moi/submodules/Test/reference/index.html @@ -51,4 +51,4 @@ end return reset_function endsource
    MathOptInterface.Test.version_addedFunction
    version_added(::typeof(function_name))

    Returns the version of MOI in which the test function_name was added.

    This method should be implemented for all new tests.

    See the exclude_tests_after keyword of runtests for more details.

    source
    MathOptInterface.Test.@requiresMacro
    @requires(x)

    Check that the condition x is true. Otherwise, throw an RequirementUnmet error to indicate that the model does not support something required by the test function.

    Examples

    @requires MOI.supports(model, MOI.Silent())
    -@test MOI.get(model, MOI.Silent())
    source
    +@test MOI.get(model, MOI.Silent())source diff --git a/dev/moi/submodules/Utilities/overview/index.html b/dev/moi/submodules/Utilities/overview/index.html index 021c6ad8633..f8bc4e11eb8 100644 --- a/dev/moi/submodules/Utilities/overview/index.html +++ b/dev/moi/submodules/Utilities/overview/index.html @@ -251,4 +251,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 52461f09d5b..37e64aad573 100644 --- a/dev/moi/submodules/Utilities/reference/index.html +++ b/dev/moi/submodules/Utilities/reference/index.html @@ -87,7 +87,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
    MOIU.attach_optimizer(model::GenericModel)

    Call MOIU.attach_optimizer on the backend of model.

    Cannot be called in direct mode.

    source
    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
    MathOptInterface.Utilities.reset_optimizerFunction
    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
    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
    MathOptInterface.Utilities.drop_optimizerFunction
    MOIU.drop_optimizer(model::GenericModel)

    Call MOIU.drop_optimizer on the backend of model.

    Cannot be called in direct mode.

    source
    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

    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!
    @@ -265,4 +265,4 @@
     For performance, it is recommended that the inner loop lies in a separate
     function to gurantee 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 773f0b167d4..ed86808b81e 100644 --- a/dev/moi/tutorials/bridging_constraint/index.html +++ b/dev/moi/tutorials/bridging_constraint/index.html @@ -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 a9611f2802c..d9123de78b7 100644 --- a/dev/moi/tutorials/example/index.html +++ b/dev/moi/tutorials/example/index.html @@ -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 1dea01bdbba..88ef371deae 100644 --- a/dev/moi/tutorials/implementing/index.html +++ b/dev/moi/tutorials/implementing/index.html @@ -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 2196c4adb64..e9bc9c8af5e 100644 --- a/dev/moi/tutorials/latency/index.html +++ b/dev/moi/tutorials/latency/index.html @@ -130,4 +130,4 @@ end

    You can create a flame-graph via

    using SnoopComile
     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 b7291325017..384e14fd987 100644 --- a/dev/moi/tutorials/manipulating_expressions/index.html +++ b/dev/moi/tutorials/manipulating_expressions/index.html @@ -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 dab3eb98706..14aa7ab5e57 100644 --- a/dev/moi/tutorials/mathprogbase/index.html +++ b/dev/moi/tutorials/mathprogbase/index.html @@ -55,4 +55,4 @@ objval = objective_value(model), sol = value.(x) ) -end +end diff --git a/dev/packages/Alpine/index.html b/dev/packages/Alpine/index.html index c20929050a2..6945a7f6f08 100644 --- a/dev/packages/Alpine/index.html +++ b/dev/packages/Alpine/index.html @@ -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 2e68fa5290f..d0e46b636a5 100644 --- a/dev/packages/AmplNLWriter/index.html +++ b/dev/packages/AmplNLWriter/index.html @@ -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 050bd3cb747..234dc3a082f 100644 --- a/dev/packages/BARON/index.html +++ b/dev/packages/BARON/index.html @@ -6,4 +6,4 @@

    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.

    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")

    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 cb8b809c4d4..0a75818b5a1 100644 --- a/dev/packages/BilevelJuMP/index.html +++ b/dev/packages/BilevelJuMP/index.html @@ -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 90c45df6083..6f12ebebfa9 100644 --- a/dev/packages/CDCS/index.html +++ b/dev/packages/CDCS/index.html @@ -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 86bde103143..4d73f2d89fd 100644 --- a/dev/packages/CDDLib/index.html +++ b/dev/packages/CDDLib/index.html @@ -6,4 +6,4 @@

    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 2e8faba0d35..ddbbbc0657e 100644 --- a/dev/packages/COPT/index.html +++ b/dev/packages/COPT/index.html @@ -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 c70dad09671..10e2ba3317a 100644 --- a/dev/packages/COSMO/index.html +++ b/dev/packages/COSMO/index.html @@ -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 14b2961d125..92bcb544cb5 100644 --- a/dev/packages/CPLEX/index.html +++ b/dev/packages/CPLEX/index.html @@ -161,4 +161,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 3ea044959c9..549f97bd76a 100644 --- a/dev/packages/CSDP/index.html +++ b/dev/packages/CSDP/index.html @@ -10,4 +10,4 @@ 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 7f0b51df4d4..d4a6b86d11d 100644 --- a/dev/packages/Cbc/index.html +++ b/dev/packages/Cbc/index.html @@ -9,4 +9,4 @@ 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 dd57a217e65..a61707bf47b 100644 --- a/dev/packages/Clarabel/index.html +++ b/dev/packages/Clarabel/index.html @@ -23,4 +23,4 @@ \text{minimize} & \frac{1}{2}x^T P x + q^T x\\\\[2ex] \text{subject to} & Ax + s = b \\\\[1ex] & s \in \mathcal{K} -\end{array}\]

    with decision variables $x \in \mathbb{R}^n$, $s \in \mathbb{R}^m$ and data matrices $P=P^\top \succeq 0$, $q \in \mathbb{R}^n$, $A \in \mathbb{R}^{m \times n}$, and $b \in \mathbb{R}^m$. The convex set $\mathcal{K}$ is a composition of convex cones.

    For more information see the Clarabel Documentation (stable | dev).

    Clarabel is also available in a Rust implementation with additional language interfaces. See here.

    Features

    • Versatile: Clarabel.jl solves linear programs (LPs), quadratic programs (QPs), second-order cone programs (SOCPs) and semidefinite programs (SDPs). It also solves problems with exponential, power cone and generalized power cone constraints.
    • Quadratic objectives: Unlike interior point solvers based on the standard homogeneous self-dual embedding (HSDE), Clarabel.jl handles quadratic objectives without requiring any epigraphical reformulation of the objective. It can therefore be significantly faster than other HSDE-based solvers for problems with quadratic objective functions.
    • Infeasibility detection: Infeasible problems are detected using a homogeneous embedding technique.
    • JuMP / Convex.jl support: We provide an interface to MathOptInterface (MOI), which allows you to describe your problem in JuMP and Convex.jl.
    • Arbitrary precision types: You can solve problems with any floating point precision, for example, Float32 or Julia's BigFloat type, using either the native interface, or via MathOptInterface / Convex.jl.
    • Open Source: Our code is available on GitHub and distributed under the Apache 2.0 License

    Installation

    • Clarabel.jl can be added via the Julia package manager (type ]): pkg> add Clarabel

    License 🔍

    This project is licensed under the Apache License 2.0 - see the LICENSE.md file for details.

    +\end{array}\]

    with decision variables $x \in \mathbb{R}^n$, $s \in \mathbb{R}^m$ and data matrices $P=P^\top \succeq 0$, $q \in \mathbb{R}^n$, $A \in \mathbb{R}^{m \times n}$, and $b \in \mathbb{R}^m$. The convex set $\mathcal{K}$ is a composition of convex cones.

    For more information see the Clarabel Documentation (stable | dev).

    Clarabel is also available in a Rust implementation with additional language interfaces. See here.

    Features

    • Versatile: Clarabel.jl solves linear programs (LPs), quadratic programs (QPs), second-order cone programs (SOCPs) and semidefinite programs (SDPs). It also solves problems with exponential, power cone and generalized power cone constraints.
    • Quadratic objectives: Unlike interior point solvers based on the standard homogeneous self-dual embedding (HSDE), Clarabel.jl handles quadratic objectives without requiring any epigraphical reformulation of the objective. It can therefore be significantly faster than other HSDE-based solvers for problems with quadratic objective functions.
    • Infeasibility detection: Infeasible problems are detected using a homogeneous embedding technique.
    • JuMP / Convex.jl support: We provide an interface to MathOptInterface (MOI), which allows you to describe your problem in JuMP and Convex.jl.
    • Arbitrary precision types: You can solve problems with any floating point precision, for example, Float32 or Julia's BigFloat type, using either the native interface, or via MathOptInterface / Convex.jl.
    • Open Source: Our code is available on GitHub and distributed under the Apache 2.0 License

    Installation

    • Clarabel.jl can be added via the Julia package manager (type ]): pkg> add Clarabel

    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 1a2573b1aa9..3caaf51aae7 100644 --- a/dev/packages/Clp/index.html +++ b/dev/packages/Clp/index.html @@ -7,4 +7,4 @@ 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 7d5c18f42b9..5697c9d5e74 100644 --- a/dev/packages/DAQP/index.html +++ b/dev/packages/DAQP/index.html @@ -5,4 +5,4 @@ gtag('config', 'UA-44252521-1', {'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
     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/DiffOpt/index.html b/dev/packages/DiffOpt/index.html index 805611a1ea7..139b92a82f7 100644 --- a/dev/packages/DiffOpt/index.html +++ b/dev/packages/DiffOpt/index.html @@ -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/Dualization/index.html b/dev/packages/Dualization/index.html index 565625c68a3..19e4dcf7406 100644 --- a/dev/packages/Dualization/index.html +++ b/dev/packages/Dualization/index.html @@ -10,4 +10,4 @@ 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/ECOS/index.html b/dev/packages/ECOS/index.html index b842bf7c257..94a7a045a43 100644 --- a/dev/packages/ECOS/index.html +++ b/dev/packages/ECOS/index.html @@ -6,4 +6,4 @@

    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 a92fc9500ea..0a7676a7081 100644 --- a/dev/packages/GAMS/index.html +++ b/dev/packages/GAMS/index.html @@ -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 58bd138b3b2..8df91c7543a 100644 --- a/dev/packages/GLPK/index.html +++ b/dev/packages/GLPK/index.html @@ -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 c0f7d962d2b..a008d1e6462 100644 --- a/dev/packages/Gurobi/index.html +++ b/dev/packages/Gurobi/index.html @@ -109,4 +109,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 b5b143d15ad..f9d3149670d 100644 --- a/dev/packages/HiGHS/index.html +++ b/dev/packages/HiGHS/index.html @@ -7,4 +7,4 @@ 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.

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

    diff --git a/dev/packages/Hypatia/index.html b/dev/packages/Hypatia/index.html index efabaa394bc..e3f788bd5aa 100644 --- a/dev/packages/Hypatia/index.html +++ b/dev/packages/Hypatia/index.html @@ -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 ad20940dbbd..725241f65fa 100644 --- a/dev/packages/InfiniteOpt/index.html +++ b/dev/packages/InfiniteOpt/index.html @@ -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 d40cd469bb3..6b6d30a1edb 100644 --- a/dev/packages/Ipopt/index.html +++ b/dev/packages/Ipopt/index.html @@ -118,4 +118,4 @@ export OMP_PROC_BIND=TRUE

    BLAS and LAPACK

    With Julia v1.9 or later, Ipopt and the linear solvers MUMPS (default), SPRAL, and HSL are compiled with libblastrampoline (LBT), a library that can change between BLAS and LAPACK backends at runtime.

    The default BLAS and LAPACK backend is OpenBLAS.

    Using LBT, we can also switch dynamically to other BLAS backends such as Intel MKL and Apple Accelerate. Because Ipopt and the linear solvers heavily rely on BLAS and LAPACK routines, using an optimized backend for a particular platform can improve the performance.

    MKL

    If you have MKL.jl installed, switch to MKL by adding using MKL to your code:

    using MKL  # Replace OpenBLAS by Intel MKL
     using Ipopt

    AppleAccelerate

    If you are using macOS ≥ v13.4 and you have AppleAccelerate.jl installed, add using AppleAccelerate to your code:

    using AppleAccelerate  # Replace OpenBLAS by Apple Accelerate
     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 743fd69b884..8b9a2ac5d85 100644 --- a/dev/packages/Juniper/index.html +++ b/dev/packages/Juniper/index.html @@ -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 3f3df1112ad..cede49f6353 100644 --- a/dev/packages/KNITRO/index.html +++ b/dev/packages/KNITRO/index.html @@ -10,4 +10,4 @@ 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

    KNITRO.jl implements most of Knitro's functionalities. If you aim at using part of Knitro's API that are not implemented in the MathOptInterface/JuMP ecosystem, you can refer to the low-level API, which wraps Knitro's C API (whose templates are specified in the file knitro.h).

    Extensive examples using the C wrapper can be found in examples/.

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

    KNITRO.jl implements most of Knitro's functionalities. If you aim at using part of Knitro's API that are not implemented in the MathOptInterface/JuMP ecosystem, you can refer to the low-level API, which wraps Knitro's C API (whose templates are specified in the file knitro.h).

    Extensive examples using the C wrapper can be found in examples/.

    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. Read GitHub issue #93 for more details.

    diff --git a/dev/packages/Loraine/index.html b/dev/packages/Loraine/index.html index c571741041b..9dfa4501c28 100644 --- a/dev/packages/Loraine/index.html +++ b/dev/packages/Loraine/index.html @@ -29,4 +29,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/MadNLP/index.html b/dev/packages/MadNLP/index.html index 0f6da81d23d..bf900a9ed69 100644 --- a/dev/packages/MadNLP/index.html +++ b/dev/packages/MadNLP/index.html @@ -45,4 +45,4 @@ author={Shin, Sungho and Coffrin, Carleton and Sundar, Kaarthik and Zavala, Victor M}, journal={arXiv preprint arXiv:2010.02404}, year={2020} -}

    Bug reports and support

    Please report issues and feature requests via the GitHub issue tracker.

    +}

    Bug reports and support

    Please report issues and feature requests via the GitHub issue tracker.

    diff --git a/dev/packages/MiniZinc/index.html b/dev/packages/MiniZinc/index.html index 23f3a34688b..fd3138dba73 100644 --- a/dev/packages/MiniZinc/index.html +++ b/dev/packages/MiniZinc/index.html @@ -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.
    +@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.
    diff --git a/dev/packages/MosekTools/index.html b/dev/packages/MosekTools/index.html index 28907529d27..f6fc9c720f3 100644 --- a/dev/packages/MosekTools/index.html +++ b/dev/packages/MosekTools/index.html @@ -7,4 +7,4 @@ 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 f7253d5f803..c5d873dd3cc 100644 --- a/dev/packages/MultiObjectiveAlgorithms/index.html +++ b/dev/packages/MultiObjectiveAlgorithms/index.html @@ -9,4 +9,4 @@ 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 b4b7837be7d..fd5a825db2e 100644 --- a/dev/packages/NEOSServer/index.html +++ b/dev/packages/NEOSServer/index.html @@ -28,4 +28,4 @@ model = Model() do 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 ba0d24f1380..dee8f3fd669 100644 --- a/dev/packages/NLopt/index.html +++ b/dev/packages/NLopt/index.html @@ -6,4 +6,4 @@

    NLopt.jl

    Build Status codecov

    NLopt.jl is a wrapper for the NLopt library.

    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.

    Use with JuMP

    You can use NLopt with JuMP as follows:

    using JuMP, NLopt
     model = Model(NLopt.Optimizer)
    -set_attribute(model, "algorithm", :LD_MMA)

    Options

    The algorithm attribute is required. The value must be one of the supported NLopt algorithms.

    Documentation

    For more details, see the NLopt.jl README or the NLopt documentation.

    +set_attribute(model, "algorithm", :LD_MMA)

    Options

    The algorithm attribute is required. The value must be one of the supported NLopt algorithms.

    Documentation

    For more details, see the NLopt.jl README or the NLopt documentation.

    diff --git a/dev/packages/OSQP/index.html b/dev/packages/OSQP/index.html index f93fef143b0..3b25740c085 100644 --- a/dev/packages/OSQP/index.html +++ b/dev/packages/OSQP/index.html @@ -6,4 +6,4 @@

    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/PATHSolver/index.html b/dev/packages/PATHSolver/index.html index e3c1e95aa65..0e3b41406ec 100644 --- a/dev/packages/PATHSolver/index.html +++ b/dev/packages/PATHSolver/index.html @@ -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 c05816bba7d..595840c848d 100644 --- a/dev/packages/Pajarito/index.html +++ b/dev/packages/Pajarito/index.html @@ -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 44e4bf304fc..938cb360e31 100644 --- a/dev/packages/ParametricOptInterface/index.html +++ b/dev/packages/ParametricOptInterface/index.html @@ -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 32dc39c0c5c..2a83dc9bf73 100644 --- a/dev/packages/Pavito/index.html +++ b/dev/packages/Pavito/index.html @@ -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/Plasmo/index.html b/dev/packages/Plasmo/index.html index c0c561aab6e..ec57d912417 100644 --- a/dev/packages/Plasmo/index.html +++ b/dev/packages/Plasmo/index.html @@ -46,4 +46,4 @@ eprint = {2006.05378}, archivePrefix = {arXiv}, primaryClass = {math.OC} -} +} diff --git a/dev/packages/PolyJuMP/index.html b/dev/packages/PolyJuMP/index.html index 695af90d95f..43dd932742a 100644 --- a/dev/packages/PolyJuMP/index.html +++ b/dev/packages/PolyJuMP/index.html @@ -17,4 +17,4 @@ @constraint(model, a * x * y^2 + y^3 >= a * x)

    you need to specify how to interpret this nonnegativity constraint. To use Sum-of-Arithmetic-Geometric-Exponentials (SAGE), use

    import PolyJuMP
     PolyJuMP.setpolymodule!(model, PolyJuMP.SAGE)

    To use Sum-of-Squares (SOS), use

    import SumOfSquares
     PolyJuMP.setpolymodule!(model, SumOfSquares)

    or replace model = Model() by model = SOSModel().

    Alternatively, the nonnegativity constraint can be explicit:

    @constraint(model, a * x * y^2 + y^3 - a * x in PolyJuMP.SAGE.Polynomials())
    -@constraint(model, a * x * y^2 + y^3 - a * x in SumOfSquares.SOSCone())

    This allows mixing SAGE and SOS constraints in the same model.

    Documentation

    Documentation for PolyJuMP.jl is included in the documentation for SumOfSquares.jl.

    +@constraint(model, a * x * y^2 + y^3 - a * x in SumOfSquares.SOSCone())

    This allows mixing SAGE and SOS constraints in the same model.

    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 2be583858e9..5d3e4394708 100644 --- a/dev/packages/ProxSDP/index.html +++ b/dev/packages/ProxSDP/index.html @@ -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 f5aec81006f..9ec9c82ce9a 100644 --- a/dev/packages/SCIP/index.html +++ b/dev/packages/SCIP/index.html @@ -10,4 +10,4 @@ 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 27106594ed2..70ce5c93ee9 100644 --- a/dev/packages/SCS/index.html +++ b/dev/packages/SCS/index.html @@ -68,4 +68,4 @@ SCS.IndirectSolver SCS.GpuIndirectSolver

    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 9aeadb1e5bd..ef3c8f63cc5 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', 'UA-44252521-1', {'page_path': location.pathname + location.search + location.hash}); -
    +
    diff --git a/dev/packages/SDPA/index.html b/dev/packages/SDPA/index.html index 34c9fd7687d..528854ef159 100644 --- a/dev/packages/SDPA/index.html +++ b/dev/packages/SDPA/index.html @@ -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/SDPNAL/index.html b/dev/packages/SDPNAL/index.html index 89483a418d9..b968d2acb97 100644 --- a/dev/packages/SDPNAL/index.html +++ b/dev/packages/SDPNAL/index.html @@ -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 00c976c4993..5917d6712f5 100644 --- a/dev/packages/SDPT3/index.html +++ b/dev/packages/SDPT3/index.html @@ -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 06be8aeeced..b3f5d2e3c48 100644 --- a/dev/packages/SeDuMi/index.html +++ b/dev/packages/SeDuMi/index.html @@ -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 2f275a7d4bb..bc819b370bf 100644 --- a/dev/packages/SumOfSquares/index.html +++ b/dev/packages/SumOfSquares/index.html @@ -4,4 +4,4 @@ gtag('js', new Date()); gtag('config', 'UA-44252521-1', {'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.

    +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 0859ac245fb..993939d536b 100644 --- a/dev/packages/Tulip/index.html +++ b/dev/packages/Tulip/index.html @@ -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 30a3f7ce3e2..9e047a7c88e 100644 --- a/dev/packages/Xpress/index.html +++ b/dev/packages/Xpress/index.html @@ -8,4 +8,4 @@ import Pkg Pkg.add("Xpress")

    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 support this use case, the XPRESS_JL_SKIP_LIB_CHECK environment variable may be set (to any value) to make Xpress.jl installable (but not usable).

    Use with JuMP

    To use Xpress with JuMP, use:

    using JuMP, Xpress
     model = Model(Xpress.Optimizer)
    -set_optimizer(model, "PRESOLVE", 0)

    Options

    For other parameters use Xpress Optimizer manual or type julia -e "using Xpress; println(keys(Xpress.XPRS_ATTRIBUTES))".

    If logfile is set to "", the log file is disabled and output is printed to the console (there might be issues with console output on windows (it is manually implemented with callbacks)). If logfile is set to a file's path, output is printed to that file. By default, logfile = "" (console).

    Callbacks

    Solver specific and solver independent callbacks are working in MathOptInterface and, consequently, in JuMP. However, the current implementation should be considered experimental.

    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.

    Skipping Xpress.postsolve

    In older versions of Xpress, the command XPRSpostsolve throws an error in infeasible models. In these older versions the post solve should not be executed. To do this, one can use the MOI.RawOptimizerAttribute("MOI_POST_SOLVE") to skip this routine.

    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.

    +set_optimizer(model, "PRESOLVE", 0)

    Options

    For other parameters use Xpress Optimizer manual or type julia -e "using Xpress; println(keys(Xpress.XPRS_ATTRIBUTES))".

    If logfile is set to "", the log file is disabled and output is printed to the console (there might be issues with console output on windows (it is manually implemented with callbacks)). If logfile is set to a file's path, output is printed to that file. By default, logfile = "" (console).

    Callbacks

    Solver specific and solver independent callbacks are working in MathOptInterface and, consequently, in JuMP. However, the current implementation should be considered experimental.

    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.

    Skipping Xpress.postsolve

    In older versions of Xpress, the command XPRSpostsolve throws an error in infeasible models. In these older versions the post solve should not be executed. To do this, one can use the MOI.RawOptimizerAttribute("MOI_POST_SOLVE") to skip this routine.

    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 f4019407395..36c74bfa543 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', 'UA-44252521-1', {'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 631476020be..57412f45082 100644 --- a/dev/release_notes/index.html +++ b/dev/release_notes/index.html @@ -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 feef59ba76b..acfc5d2347b 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.20.1/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\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\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\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\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\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\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\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\nExamples\n\nMOI.initialize(d, Symbol[])\nMOI.initialize(d, [:ExprGraph])\nMOI.initialize(d, MOI.features_available(d))\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\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\n\n\n\n\n","category":"function"},{"location":"moi/reference/nonlinear/#MathOptInterface.eval_constraint","page":"Nonlinear programming","title":"MathOptInterface.eval_constraint","text":"eval_constraint(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\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\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\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\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\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\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\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(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\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\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\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\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\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\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\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\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\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\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\nExamples\n\nThe expression x_1+sin(x_2exp(x_3)) is represented as\n\n:(x[MOI.VariableIndex(1)] + sin(x[MOI.VariableIndex(2)] / exp(x[MOI.VariableIndex[3]])))\n\nor equivalently\n\nExpr(\n :call,\n :+,\n Expr(:ref, :x, MOI.VariableIndex(1)),\n Expr(\n :call,\n :/,\n Expr(:call, :sin, Expr(:ref, :x, MOI.VariableIndex(2))),\n Expr(:call, :exp, Expr(:ref, :x, MOI.VariableIndex(3))),\n ),\n)\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 f(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\nExamples\n\n:(x[MOI.VariableIndex(1)]^2 <= 1.0)\n:(x[MOI.VariableIndex(1)]^2 >= 2.0)\n:(x[MOI.VariableIndex(1)]^2 == 3.0)\n:(4.0 <= x[MOI.VariableIndex(1)]^2 <= 5.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)","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":"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":"info: Info\nThere is no way to modify the coefficient of a quadratic term. Set a new objective instead.","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.20.1/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 (i.e, 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 (i.e., 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, e.g., 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 (i.e., 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.6.6/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.5.4/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":"Plasmo.jl (Platform for Scalable Modeling and Optimization) is a graph-based algebraic modeling framework that adopts a modular style to create mathematical optimization problems and manage distributed and hierarchical structures. The package has been developed as a JuMP extension and consequently supports most JuMP syntax and functions. ","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 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 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 latest 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, constraints, and objective functions to nodes\n@variable(n1, 0 <= x <= 2)\n@variable(n1, 0 <= y <= 3)\n@constraint(n1, x+y <= 4)\n@objective(n1, Min, x)\n\n@variable(n2,x)\n@NLconstraint(n2, exp(x) >= 2)\n\n#add a linkconstraint to couple nodes\n@linkconstraint(graph, 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{JalvingShinZavala2022,\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}","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"There is also a freely available pre-print:","category":"page"},{"location":"packages/Plasmo/","page":"plasmo-dev/Plasmo.jl","title":"plasmo-dev/Plasmo.jl","text":"@misc{JalvingShinZavala2020,\ntitle = {A Graph-Based Modeling Abstraction for Optimization: Concepts and Implementation in Plasmo.jl},\nauthor = {Jordan Jalving and Sungho Shin and Victor M. Zavala},\nyear = {2020},\neprint = {2006.05378},\narchivePrefix = {arXiv},\nprimaryClass = {math.OC}\n}","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.4/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/#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 \"highs\":","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.","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 # 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.20.1/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 - [ ] Add the docstring to `docs/src/submodules/Bridges/list_of_bridges.md`\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.X.Y.schema.json` is updated\n - [ ] The constants `SCHEMA_PATH`, `VERSION`, and `SUPPORTED_VERSIONS` are\n updated in `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":"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 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.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","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","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","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-2","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-2","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-2","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-3","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-3","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-4","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-3","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-5","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-4","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-4","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-6","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-5","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-5","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-7","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-6","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-8","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-7","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-6","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-9","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-8","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-7","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-10","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-9","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-8","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-11","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-10","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 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-12","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-11","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-13","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-12","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-9","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-14","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-13","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 Tips and Tricks\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 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-10","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-14","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-11","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-15","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-15","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-12","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-16","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-16","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-13","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-17","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-17","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-18","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-18","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-14","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-19","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-19","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-20","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-15","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-21","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-20","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-21","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-16","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-22","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-22","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-23","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-17","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-24","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-23","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-18","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-25","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-19","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-26","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-24","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-27","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-25","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-20","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-28","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-26","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-21","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-29","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-27","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-22","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-30","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-28","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-23","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-31","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-29","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-24","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-30","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-25","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-32","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-26","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-33","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-31","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-27","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-34","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-32","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-35","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-28","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-36","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-37","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-29","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-38","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-30","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-31","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] ∈ MathOptInterface.Zeros(2)\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] ∈ MathOptInterface.Nonpositives(2)\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] ∈ MathOptInterface.Nonnegatives(2)\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/#Vectorized-matrix-constraints","page":"Constraints","title":"Vectorized matrix constraints","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"In most cases, you cannot use the non-broadcasting syntax for general matrices. For example:","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)\nERROR: At none:1: `@constraint(model, X >= 0)`: Unsupported matrix in vector-valued set. Did you mean to use the broadcasting syntax `.>=` instead? Alternatively, perhaps you are missing a set argument like `@constraint(model, X >= 0, PSDCone())` or `@constraint(model, X >= 0, HermmitianPSDCone())`.\nStacktrace:\n[...]","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Instead, to represent matrix inequalities you must always use the element-wise broadcasting .==, .>=, or .<=, or use the Set inequality syntax.","category":"page"},{"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[1,2] X[2,2] - 1] ∈ Zeros()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Despite the model showing the matrix in Zeros, 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\nFeasibility problem with:\nVariables: 0\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\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\nFeasibility problem with:\nVariable: 1\n`AffExpr`-in-`MathOptInterface.LessThan{Float64}`: 1 constraint\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\nNames registered in the model: 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, e.g.,\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\nFeasibility problem with:\nVariable: 1\n`AffExpr`-in-`MathOptInterface.LessThan{Float64}`: 1 constraint\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\nNames registered in the model: 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\nFeasibility problem with:\nVariable: 1\n`AffExpr`-in-`MathOptInterface.LessThan{Float64}`: 1 constraint\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\nNames registered in the model: 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 (modifying the coefficient of a quadratic term is not supported) 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":"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_coefficients.","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_coefficients(con, x, [(1, 3.0)])\n\njulia> con\ncon : [3 x, 4 x] ∈ MathOptInterface.Nonnegatives(2)\n\njulia> set_normalized_coefficients(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, e.g.,\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()). 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, y <= x, 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/#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/#Semi-integer-and-semi-continuous-variables","page":"Constraints","title":"Semi-integer and semi-continuous variables","text":"","category":"section"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Semi-continuous variables are constrained to the set x in 0 cup l u.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Create a semi-continuous variable using the Semicontinuous set:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, x in Semicontinuous(1.5, 3.5))\nx in MathOptInterface.Semicontinuous{Float64}(1.5, 3.5)","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Semi-integer variables are constrained to the set x in 0 cup l l+1 dots u.","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"Create a semi-integer variable using the Semiinteger set:","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"julia> model = Model();\n\njulia> @variable(model, x);\n\njulia> @constraint(model, x in Semiinteger(1.0, 3.0))\nx in MathOptInterface.Semiinteger{Float64}(1.0, 3.0)","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/#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/#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[1,2] 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[1,2] X[2,2]] ∈ PSDCone()","category":"page"},{"location":"manual/constraints/","page":"Constraints","title":"Constraints","text":"(Note the (2, 1) element of the constraint is X[1,2], not X[2,1].)","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\nFeasibility problem with:\nVariables: 2\n`GenericNonlinearExpr{GenericVariableRef{Bool}}`-in-`MathOptInterface.EqualTo{Bool}`: 2 constraints\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\nNames registered in the model: 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 # 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 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 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 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":"Logistic regression","title":"Logistic regression","text":"EditURL = \"logistic_regression.jl\"","category":"page"},{"location":"tutorials/conic/logistic_regression/#Logistic-regression","page":"Logistic regression","title":"Logistic regression","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":"This tutorial was originally contributed by François Pacaud.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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. From a modern optimization glance, the resulting problem is convex and differentiable. On a modern optimization glance, it is even conic representable.","category":"page"},{"location":"tutorials/conic/logistic_regression/#Formulating-the-logistic-regression-problem","page":"Logistic regression","title":"Formulating the logistic regression problem","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":"The log-likelihood is given by","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":"and the optimal theta minimizes the logistic loss function:","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"Reformulation as a conic optimization problem","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":"exp(-t_i) + exp(u_i - t_i) leq 1","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":"In this setting, the conic version of the logistic regression problems writes out","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"Fitting logistic regression with a conic solver","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"Logistic regression","text":"It is now time to pass to the implementation. We choose SCS as a conic solver.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"Logistic regression","text":"using JuMP\nimport Random\nimport SCS","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"Logistic regression","text":"info: Info\nThis tutorial uses sets from MathOptInterface. By default, JuMP exports the MOI symbol as an alias for the MathOptInterface.jl package. We recommend making this more explicit in your code by adding the following lines:import MathOptInterface as MOI","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"Logistic regression","text":"Random.seed!(2713);\nnothing #hide","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"ell_2 regularized logistic regression","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":"We generate the dataset.","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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)\nJuMP.optimize!(model)","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"Logistic regression","text":"θ♯ = JuMP.value.(model[:θ])","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"ell_1 regularized logistic regression","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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)\nJuMP.optimize!(sparse_model)","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"Logistic regression","text":"θ♯ = JuMP.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":"Logistic regression","title":"Extensions","text":"","category":"section"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"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":"Logistic regression","title":"Logistic regression","text":" x_0 = i x_i neq 0","category":"page"},{"location":"tutorials/conic/logistic_regression/","page":"Logistic regression","title":"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.20.1/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.\nExperiment design\nLogistic regression\nThe Tips and tricks 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.20.1/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## Examples\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/Test/overview/","page":"Overview","title":"Overview","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.20.1/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.20.1/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\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","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, i.e., 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/#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, e.g., 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","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/","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(model::MOI.ModelLike, ::MOI.DualObjectiveValue, T::Type)::T\n\nCompute the dual objective value of type T using the ConstraintDual results and the ConstraintFunction and ConstraintSet values. Note that the nonlinear part of the model is ignored.\n\n\n\n\n\nget_fallback(model::MOI.ModelLike, ::MOI.ConstraintPrimal,\n constraint_index::MOI.ConstraintIndex)\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(model::MOI.ModelLike, attr::MOI.ConstraintDual,\n ci::MOI.ConstraintIndex{Union{MOI.VariableIndex,\n MOI.VectorOfVariables}})\n\nCompute the dual of the constraint of index ci using the ConstraintDual of other constraints and the ConstraintFunction values. Throws 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 (e.g. 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, i.e.\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\nOnly define this function if it makes sense to!\n\nUse supports_shift_constant to check if the set supports shifting:\n\nif supports_shift_constant(typeof(old_set))\n new_set = shift_constant(old_set, offset)\n f.constant = 0\n add_constraint(model, f, new_set)\nelse\n add_constraint(model, f, old_set)\nend\n\nSee also supports_shift_constant.\n\nExamples\n\nThe call shift_constant(MOI.Interval(-2, 3), 1) is equal to MOI.Interval(-1, 4).\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\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\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 enabble 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\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 gurantee 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 gurantee 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.0.3/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/#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":"moi/","page":"Introduction","title":"Introduction","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.20.1/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.20.1. 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":"A paper describing the design and features of MathOptInterface is available on arXiv.","category":"page"},{"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":"packages/OSQP/","page":"osqp/OSQP.jl","title":"osqp/OSQP.jl","text":"EditURL = \"https://github.com/osqp/OSQP.jl/blob/443706e34c2619acbe65281c60bbe850ca4a8fac/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":"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\nFeasibility problem with:\nVariables: 0\nModel mode: AUTOMATIC\nCachingOptimizer state: EMPTY_OPTIMIZER\nSolver name: HiGHS","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\nFeasibility problem with:\nVariables: 0\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\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\nFeasibility problem with:\nVariables: 0\nModel mode: AUTOMATIC\nCachingOptimizer state: EMPTY_OPTIMIZER\nSolver name: MOA[algorithm=MultiObjectiveAlgorithms.Lexicographic, optimizer=HiGHS]","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\nFeasibility problem with:\nVariables: 0\nModel mode: AUTOMATIC\nCachingOptimizer state: EMPTY_OPTIMIZER\nSolver name: HiGHS","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\nMaximization problem with:\nVariable: 1\nObjective function type: VariableRef\n`VariableRef`-in-`MathOptInterface.GreaterThan{Float64}`: 1 constraint\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\nNames registered in the model: 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\nMinimization problem with:\nVariables: 0\nObjective function type: AffExpr\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.\n\njulia> seekstart(io);\n\njulia> model2 = read(io, Model; format = MOI.FileFormats.FORMAT_MPS)\nA JuMP Model\nMinimization problem with:\nVariables: 0\nObjective function type: AffExpr\nModel mode: AUTOMATIC\nCachingOptimizer state: NO_OPTIMIZER\nSolver name: No optimizer attached.","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/#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{MOIB.LazyBridgeOptimizer{HiGHS.Optimizer}, MOIU.UniversalFallback{MOIU.Model{Float64}}}\nin state EMPTY_OPTIMIZER\nin mode AUTOMATIC\nwith model cache MOIU.UniversalFallback{MOIU.Model{Float64}}\n fallback for MOIU.Model{Float64}\nwith optimizer MOIB.LazyBridgeOptimizer{HiGHS.Optimizer}\n with 0 variable bridges\n with 0 constraint bridges\n with 0 objective bridges\n with inner 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}}\nfallback for MOIU.Model{Float64}\nAn optimizer, which is used to solve the problem\njulia> b.optimizer\nMOIB.LazyBridgeOptimizer{HiGHS.Optimizer}\nwith 0 variable bridges\nwith 0 constraint bridges\nwith 0 objective bridges\nwith inner 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\nFeasibility problem with:\nVariables: 0\nModel mode: AUTOMATIC\nCachingOptimizer state: EMPTY_OPTIMIZER\nSolver name: HiGHS\n\njulia> backend(model)\nMOIU.CachingOptimizer{HiGHS.Optimizer, MOIU.UniversalFallback{MOIU.Model{Float64}}}\nin state EMPTY_OPTIMIZER\nin mode AUTOMATIC\nwith model cache MOIU.UniversalFallback{MOIU.Model{Float64}}\n fallback for MOIU.Model{Float64}\nwith 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 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{MOIB.LazyBridgeOptimizer{HiGHS.Optimizer}, MOIU.UniversalFallback{MOIU.Model{Float64}}}\nin state EMPTY_OPTIMIZER\nin mode AUTOMATIC\nwith model cache MOIU.UniversalFallback{MOIU.Model{Float64}}\n fallback for MOIU.Model{Float64}\nwith optimizer MOIB.LazyBridgeOptimizer{HiGHS.Optimizer}\n with 0 variable bridges\n with 0 constraint bridges\n with 0 objective bridges\n with inner 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\nFeasibility problem with:\nVariables: 0\nModel mode: DIRECT\nSolver name: HiGHS","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.20.1/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":"Tips and Tricks","title":"Tips and Tricks","text":"EditURL = \"tips_and_tricks.jl\"","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#conic_tips_and_tricks","page":"Tips and Tricks","title":"Tips and Tricks","text":"","category":"section"},{"location":"tutorials/conic/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/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"This tutorial was originally contributed by Arpit Bhatia.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"This tutorial is aimed at providing a simplistic introduction to conic programming using JuMP.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"It uses the following packages:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"using JuMP\nimport SCS\nimport LinearAlgebra","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"info: Info\nThis tutorial uses sets from MathOptInterface. By default, JuMP exports the MOI symbol as an alias for the MathOptInterface.jl package. We recommend making this more explicit in your code by adding the following lines:import MathOptInterface as MOI","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"import Random # hide\nRandom.seed!(1234) # hide\nnothing # hide","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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/#Background-theory","page":"Tips and Tricks","title":"Background theory","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","text":"The corresponding dual problem is:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Second-Order Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"The SecondOrderCone (or Lorentz Cone) of dimension n is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"K_soc = (t x) in mathbbR^n t ge x_2 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"It is most commonly used to represent the L2-norm of the vector x:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(t), value.(x)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Rotated-Second-Order-Cone","page":"Tips and Tricks","title":"Rotated Second-Order Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","text":"K_rsoc = (tux) in mathbbR^n 2tu ge x_2^2 tu ge 0 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"When u = 0.5, it represents the sum of squares of a vector x:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(θ), value(t)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Exponential-Cone","page":"Tips and Tricks","title":"Exponential Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"The MOI.ExponentialCone is a set of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"K_exp = (xyz) in mathbbR^3 y exp (xy) le z y 0 ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"It can be used to model problems involving log and exp.","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Exponential","page":"Tips and Tricks","title":"Exponential","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"To model exp(x) le z, use (x, 1, z):","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(z), exp(1.5)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Logarithm","page":"Tips and Tricks","title":"Logarithm","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"To model x le log(z), use (x, 1, z):","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(x), log(1.5)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Log-sum-exp","page":"Tips and Tricks","title":"Log-sum-exp","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"To model t ge logleft(sum e^x_iright), use:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Entropy","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","text":"We can model this problem using an exponential cone by using the following transformation:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"tleq -xlogx iff tleq xlog(1x) iff (t x 1) in K_exp","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"Thus, our problem becomes,","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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)\nobjective_value(model)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","text":"There is also the MOI.RelativeEntropyCone for explicitly encoding the relative entropy function","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nobjective_value(model)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#PowerCone","page":"Tips and Tricks","title":"PowerCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(t), value(x)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"P-Norm","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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 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":"Tips and Tricks","title":"Positive Semidefinite Cone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Example: largest eigenvalue of a symmetric matrix","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","text":"beginaligned\nlambda_1 = min t \ntext st t I-A succeq 0\nendaligned","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nobjective_value(model)","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#GeometricMeanCone","page":"Tips and Tricks","title":"GeometricMeanCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"The MOI.GeometricMeanCone is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"RootDetCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"The MOI.RootDetConeSquare is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"K = (t X) in mathbbR^1+d^2 t le det(X)^frac1d ","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(t), sqrt(LinearAlgebra.det(value.(X)))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"LogDetCone","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","text":"The MOI.LogDetConeSquare is a cone of the form:","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(t), 0.5 * log(LinearAlgebra.det(value.(X) ./ 0.5))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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":"Tips and Tricks","title":"Tips and Tricks","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)\nvalue(t), 0.5 * log(LinearAlgebra.det(value.(X) ./ 0.5))","category":"page"},{"location":"tutorials/conic/tips_and_tricks/#Other-Cones-and-Functions","page":"Tips and Tricks","title":"Other Cones and Functions","text":"","category":"section"},{"location":"tutorials/conic/tips_and_tricks/","page":"Tips and Tricks","title":"Tips and Tricks","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.2/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/#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/#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/#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","page":"Tips and tricks","title":"Trick","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])\n@variable(model, y, Bin)\nM = 100\n@constraint(model, x[1] <= 1 + M * y)\n@constraint(model, x[2] <= 2 + M * (1 - y))","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/#Indicator-constraints","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","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.","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])\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, x[1:2])\n@variable(model, z, Bin)\n@constraint(model, !z => {sum(x) <= 1})","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":"If the solver doesn't support indicator constraints, you an 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])\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])\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":"info: Info\nThis section uses sets from MathOptInterface. By default, JuMP exports the MOI symbol as an alias for the MathOptInterface.jl package. We recommend making this more explicit in your code by adding the following lines:import MathOptInterface as MOI","category":"page"},{"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/#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/#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 has_values(model)\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. 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/","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)","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)","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)","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)","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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"EditURL = \"ellipse_approx.jl\"","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Ellipsoid-approximation","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"The model comes from Section 4.9 \"Applications VII: extremal ellipsoids\" of the book Lectures on Modern Convex Optimization by Ben-Tal and Nemirovski (2001).","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"For a related example, see also the Minimal ellipses tutorial.","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Problem-formulation","page":"Ellipsoid approximation","title":"Problem formulation","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"mathcalS = x_1 ldots x_m subset mathbbR^n","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"E(D c) = x (x - c)^top D ( x - c) leq 1 ","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"contains mathcalS and has the smallest possible volume.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"The optimal D and c are given by the optimization problem:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"where D = Z_* and c = Z_*^-1 z_*.","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Required-packages","page":"Ellipsoid approximation","title":"Required packages","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"This tutorial uses the following packages:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"using JuMP\nimport LinearAlgebra\nimport Plots\nimport Random\nimport SCS","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Data","page":"Ellipsoid approximation","title":"Data","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"We first need to generate some points to work with.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"For the sake of this example, let's take m = 600:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"S = generate_point_cloud(600);\nnothing #hide","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"We will visualise the points (and ellipse) using the Plots package:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"JuMP formulation","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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-6)\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)\nsolution_summary(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/#Results","page":"Ellipsoid approximation","title":"Results","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"D = value.(Z)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"c = D \\ value.(z)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Alternative formulations","text":"","category":"section"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"There's a lot going on here, but the first bullet is:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"@objective(model, Max, 1.0 * t + 0.0);\nnothing #hide","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"Re-printing the active bridges:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"we get * Supported objective: MOI.ScalarAffineFunction{Float64}.","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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)\nsolve_time_1 = solve_time(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"This formulation gives the much smaller graph:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"remove_bridge(model, MOI.Bridges.Constraint.GeoMeanToPowerBridge)\noptimize!(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"This time, the solve took:","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"solve_time_2 = solve_time(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"where previously it took","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"solve_time_1","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"Why was the solve time different?","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"Ellipsoid approximation","text":"print_active_bridges(model)","category":"page"},{"location":"tutorials/conic/ellipse_approx/","page":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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":"Ellipsoid approximation","title":"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, :J, :value), Tuple{Int64, Int64, 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, :J, :value), Tuple{Int64, Symbol, 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(y)\n println(y[key])\n end\n(2, :B)\n(3, :B)","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, :J, :value), Tuple{Int64, Symbol, 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.20.1/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":"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)\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 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)","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":"moi/reference/models/","page":"Models","title":"Models","text":"EditURL = \"https://github.com/jump-dev/MathOptInterface.jl/blob/v1.20.1/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 modified during an optimize! call, that is, the attribute is used to query the result of the optimization.\n\nImportant note when defining new attributes\n\nThis function returns false by default so it should be implemented for attributes that are modified by optimize!.\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\nImportant note when defining new attributes\n\nBy default is_copyable(attr) returns !is_set_by_optimize(attr). A specific method should be defined for attributes which are copied indirectly during copy_to. For instance, both is_copyable and is_set_by_optimize return false for the following attributes:\n\nListOfOptimizerAttributesSet, ListOfModelAttributesSet, ListOfConstraintAttributesSet and ListOfVariableAttributesSet.\nSolverName and RawSolver: these attributes cannot be set.\nNumberOfVariables and ListOfVariableIndices: these attributes are set indirectly by add_variable and add_variables.\nObjectiveFunctionType: this attribute is set indirectly when setting the ObjectiveFunction attribute.\nNumberOfConstraints, ListOfConstraintIndices, ListOfConstraintTypesPresent, CanonicalConstraintFunction, ConstraintFunction and ConstraintSet: these attributes are set indirectly by add_constraint and add_constraints.\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(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\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\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 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 ListOf...AttributesSet.\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\nListOfConstraintAttributesSet\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, e.g., 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 (i.e., 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 (i.e., 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.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.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}())\nMOIU.UniversalFallback{MOIU.Model{Float64}}\nfallback for MOIU.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\nRawOptimizerAttribute\nNumberOfThreads\nRawSolver\nAbsoluteGapTolerance\nRelativeGapTolerance","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 (e.g., `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 seconnds) 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.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/","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 (e.g., 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, i.e., 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 distingiush between them.\n\nIf a primal or dual infeasibility certificate is available, i.e., 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.20.1/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\n72-element Vector{Symbol}:\n :+\n :-\n :abs\n :sqrt\n :cbrt\n :abs2\n :inv\n :log\n :log10\n :log2\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 (i.e., 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 represennted 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 represennted 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/62532341586d447f19c7360715333ba62a42bea9/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 #hide","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)\nTest.@test primal_status(model) == FEASIBLE_POINT #hide\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 termination_status(model) == INFEASIBLE #hide\nTest.@test primal_status(model) == NO_SOLUTION #hide\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)","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/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 for which you can formulate using the language of mathematical programming, that is:","category":"page"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"a set of decision variables\na scalar- or vector-valued 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 many open-source solvers. This is different to modeling languages in Python which require you to download and install a solver yourself.\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 linear programs, which previously required using solver-specific or low-level C++ libraries.\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/#Optimal-control-problems","page":"Should you use JuMP?","title":"Optimal control problems","text":"","category":"section"},{"location":"should_i_use/","page":"Should you use JuMP?","title":"Should you use JuMP?","text":"JuMP supports formulating optimal control problems as large nonlinear programs (see, for example, Optimal control for a Space Shuttle reentry trajectory). However, the nonlinear interface has a number of limitations (for example, the need to write out the dynamics in algebraic form) that mean JuMP might not be the right tool for the job.","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":"CasADi [MATLAB/Python], CasADi.jl\nInfiniteOpt.jl\npyomo.DAE [Python]","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)\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 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 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 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 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 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 termination_status(model) != OPTIMAL\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.termination_status(model) != JuMP.OPTIMAL\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# Examples\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\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)\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 the book Optimization Methods in Finance.","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\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\n\noptimize!(auction)\n\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/c5dee9f929e9d2f4433ae09fa92b8d872c9c43e0/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, \"