@@ -59,156 +59,8 @@ optprob = OptimizationProblem(optsys,
5959sol = solve(optprob, HiGHS.Optimizer())
6060```
6161
62- <!--
63- ```julia
64- using Enzyme
65- objective(u, p) = u[14]
66-
67- constraints(res,u,p) = res .= [
68- u[1] + u[6] - u[9] # January
69- ,u[2] + u[7] - u[10] - 1.01u[1] + 1.003u[9] # February
70- ,u[3] + u[8] - u[11] - 1.01u[2] + 1.003u[10] # March
71- ,u[4] - u[12] - 1.02u[6] - 1.01u[3] + 1.003u[11] # April
72- ,u[5] - u[13] - 1.02u[7] - 1.01u[4] + 1.003u[12] # May
73- ,-u[14] - 1.02u[8] - 1.01u[5] + 1.003u[13] # June
74- ]
75-
76- optf = OptimizationFunction(objective, Optimization.AutoModelingToolkit(), cons = constraints)
77- optprob = OptimizationProblem(optf, [zeros(13)..., 300]; lb = zeros(14), ub = vcat(ones(5).*100, fill(Inf, 9)), lcons = [150, 100, -200, 200, -50, -300], ucons = [150, 100, -200, 200, -50, -300], sense = Optimization.MaxSense)
78- sol = solve(optprob, HiGHS.Optimizer())
79- ```
80- -->
8162## Mixed Integer Nonlinear Optimization
8263
83- <!--
84- ```julia
85- using Juniper, Ipopt, HiGHS
86-
87- ModelingToolkit.@variables b[1:4] [bounds = (0, 1)]
88- ModelingToolkit.@variables i[1:24]
89- ModelingToolkit.@variables objvar
90-
91- for j in 1:16
92- push!(vars, i[j])
93- ModelingToolkit.setmetadata(i[j], ModelingToolkit.VariableBounds, (0, 5))
94- end
95-
96- ModelingToolkit.setmetadata(i[21], ModelingToolkit.VariableBounds, (0, 15))
97- ModelingToolkit.setmetadata(i[22], ModelingToolkit.VariableBounds, (0, 12))
98- ModelingToolkit.setmetadata(i[23], ModelingToolkit.VariableBounds, (0, 9))
99- ModelingToolkit.setmetadata(i[24], ModelingToolkit.VariableBounds, (0, 6))
100-
101- constraints = [
102- -0.1 * b[1] - 0.2 * b[2] - 0.3 * b[3] - 0.4 * b[4] - i[21] - i[22] - i[23] -
103- i[24] + objvar ~ 0.0
104- ,9.0 ≲ i[21] * i[1] + i[22] * i[2] + i[23] * i[3] + i[24] * i[4]
105- ,7.0 ≲ i[21] * i[5] + i[22] * i[6] + i[23] * i[7] + i[24] * i[8]
106- ,12.0 ≲ i[21] * i[9] + i[22] * i[10] + i[23] * i[11] + i[24] * i[12]
107- ,11.0 ≲ i[21] * i[13] + i[22] * i[14] + i[23] * i[15] + i[24] * i[16]
108- ,-330 * i[1] - 360 * i[5] - 385 * i[9] - 415 * i[13] + 1700 * b[1] ≲ 0.0
109- ,-330 * i[2] - 360 * i[6] - 385 * i[10] - 415 * i[14] + 1700 * b[2] ≲ 0.0
110- ,-330 * i[3] - 360 * i[7] - 385 * i[11] - 415 * i[15] + 1700 * b[3] ≲ 0.0
111- ,-330 * i[4] - 360 * i[8] - 385 * i[12] - 415 * i[16] + 1700 * b[4] ≲ 0.0
112- ,330 * i[1] + 360 * i[5] + 385 * i[9] + 415 * i[13] - 1900 * b[1] ≲ 0.0
113- ,330 * i[2] + 360 * i[6] + 385 * i[10] + 415 * i[14] - 1900 * b[2] ≲ 0.0
114- ,330 * i[3] + 360 * i[7] + 385 * i[11] + 415 * i[15] - 1900 * b[3] ≲ 0.0
115- ,330 * i[4] + 360 * i[8] + 385 * i[12] + 415 * i[16] - 1900 * b[4] ≲ 0.0
116- ,-i[1] - i[5] - i[9] - i[13] + b[1] ≲ 0.0
117- ,-i[2] - i[6] - i[10] - i[14] + b[2] ≲ 0.0
118- ,-i[3] - i[7] - i[11] - i[15] + b[3] ≲ 0.0
119- ,-i[4] - i[8] - i[12] - i[16] + b[4] ≲ 0.0
120- ,i[1] + i[5] + i[9] + i[13] - 5 * b[1] ≲ 0.0
121- ,i[2] + i[6] + i[10] + i[14] - 5 * b[2] ≲ 0.0
122- ,i[3] + i[7] + i[11] + i[15] - 5 * b[3] ≲ 0.0
123- ,i[4] + i[8] + i[12] + i[16] - 5 * b[4] ≲ 0.0
124- ,b[1] - i[21] ≲ 0.0
125- ,b[2] - i[22] ≲ 0.0
126- ,b[3] - i[23] ≲ 0.0
127- ,b[4] - i[24] ≲ 0.0
128- ,-15 * b[1] + i[21] ≲ 0.0
129- ,-12 * b[2] + i[22] ≲ 0.0
130- ,-9 * b[3] + i[23] ≲ 0.0
131- ,-6 * b[4] + i[24] ≲ 0.0
132- ,8.0 ≲ i[21] + i[22] + i[23] + i[24]
133- ,-b[1] + b[2] ≲ 0.0
134- ,-b[2] + b[3] ≲ 0.0
135- ,-b[3] + b[4] ≲ 0.0
136- ,-i[21] + i[22] ≲ 0.0
137- ,-i[22] + i[23] ≲ 0.0
138- ,-i[23] + i[24] ≲ 0.0
139- ]
140-
141- i_idxs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22, 23, 24]
142- vars = [b..., [i[j] for j in i_idxs]..., objvar]
143-
144- @named optsys = OptimizationSystem(objvar, vars, [], constraints = constraints)
145- optprob = OptimizationProblem(optsys, vcat(ones(24), 5), int = vcat(fill(true, 24), false), grad = true, cons_j = true, hess = true, cons_h = true)
146-
147- nl_solver = OptimizationMOI.MOI.OptimizerWithAttributes(Ipopt.Optimizer,
148- "print_level" => 0)
149- mip_solver = OptimizationMOI.MOI.OptimizerWithAttributes(HiGHS.Optimizer,
150- "output_flag" => false
151- )
152- minlp_solver = OptimizationMOI.MOI.OptimizerWithAttributes(Juniper.Optimizer,
153- "nl_solver" => nl_solver,
154- "mip_solver" => mip_solver)
155- opt = OptimizationMOI.MOI.OptimizerWithAttributes(Alpine.Optimizer,
156- "minlp_solver" => minlp_solver,
157- "nl_solver" => nl_solver,
158- "mip_solver" => mip_solver)
159- sol = solve(optprob, opt)
160- ```
161- -->
162- <!--
163- ```julia
164- using Juniper, Ipopt
165-
166- LB = [100, 1000, 1000, 10, 10, 10, 10, 10]
167- UB = [10000, 10000, 10000, 1000, 1000, 1000, 1000, 1000]
168-
169- ModelingToolkit.@variables x[1:8]
170- ModelingToolkit.@variables y[1:5] [bounds = (0, 1)]
171-
172- for j in 1:8
173- ModelingToolkit.setmetadata(x[j], ModelingToolkit.VariableBounds, (LB[j], UB[j]))
174- end
175-
176- function cons(res, u, p)
177- x, y = u[1:8], u[9:13]
178- res .= [0.0025 * (x[4] * y[1] + x[6] * y[2])
179- ,0.0025 * (x[5] - x[4] * y[1] + x[7])
180- , 0.01(x[8] - x[5] * y[3]),
181- 100 * x[1] - x[1] * x[6] * y[1] + 833.33252 * x[4] * y[1]
182- ,x[2] * x[4] * y[4] - x[2] * x[7] - 1250 * x[4] + 1250 * x[5],
183- x[3] * x[5] * y[2] * y[5] - x[3] * x[8] * y[5] - 2500 * x[5] * y[1] * y[4] + 1250000,
184- y[1] * y[2] * y[3],
185- y[4] * y[5] - (y[2] * y[3]),
186- y[1] * y[5] - (y[2] * y[4]),
187- ]
188- end
189- lcons = fill(-Inf, 9)
190- ucons = [1, 1, 1, 83333.333, 0, 0, 0, 0, 0]
191- objective = (u,p) -> u[1] + u[2] + u[3]
192- optf = OptimizationFunction(objective, Optimization.AutoForwardDiff(), cons = cons)
193- # @named optsys = OptimizationSystem(objective, [x..., y...], [], constraints = constraints)
194- optprob = OptimizationProblem(optf, vcat((LB + UB) ./ 2,zeros(5));lb = vcat(LB, fill(0, 5)), ub = vcat(UB, fill(1, 5)), lcons, ucons, int = vcat(fill(false, 8), fill(true, 5)))
195-
196- nl_solver = OptimizationMOI.MOI.OptimizerWithAttributes(Ipopt.Optimizer,
197- "print_level" => 0)
198- mi_solver = OptimizationMOI.MOI.OptimizerWithAttributes(HiGHS.Optimizer,
199- "presolve" => "on",
200- "log_to_console" => false,
201- )
202- minlp_solver = OptimizationMOI.MOI.OptimizerWithAttributes(Juniper.Optimizer,
203- "nl_solver" => nl_solver,
204- "mip_solver" => mi_solver)
205- opt = OptimizationMOI.MOI.OptimizerWithAttributes(Alpine.Optimizer,
206- "minlp_solver" => minlp_solver,
207- "nlp_solver" => nl_solver,
208- "mip_solver" => mi_solver)
209- sol = solve(optprob, minlp_solver)
210- ```
211- -->
21264We choose an example from the [ Juniper.jl readme] ( https://github.com/lanl-ansi/Juniper.jl#use-with-jump ) to demonstrate mixed integer nonlinear optimization with Optimization.jl. The problem can be stated as follows:
21365
21466``` math
0 commit comments