@@ -106,7 +106,7 @@ function annealing(param, graph, I0; kwargs...)
106106 model, recover_allocation = get_model (auxdata)
107107 end
108108
109- if ! options. verbose
109+ if ! options. verbose && model != = nothing
110110 set_silent (model)
111111 end
112112
@@ -139,8 +139,12 @@ function annealing(param, graph, I0; kwargs...)
139139
140140 # rng(0) # set the seed of random number generator for replicability
141141 acceptance_str = [" rejected" , " accepted" ]
142- all_vars = all_variables_except_kappa_ex (model)
143- start_values = start_value .(all_vars)
142+ if model === nothing
143+ start_values = []
144+ else
145+ all_vars = all_variables_except_kappa_ex (model)
146+ start_values = start_value .(all_vars)
147+ end
144148 while T > T_min
145149 accepted = false
146150
@@ -161,26 +165,40 @@ function annealing(param, graph, I0; kwargs...)
161165 end
162166
163167 k = 0
164- set_start_value .(all_vars, start_values) # reset start values
168+ # reset start values
169+ if model === nothing
170+ start_values = []
171+ else
172+ set_start_value .(all_vars, start_values)
173+ end
165174 while k <= num_deepening - 1
166175
167176 auxdata = create_auxdata (param, graph, edges, I1)
168- set_parameter_value .(model. obj_dict[:kappa_ex ], auxdata. kappa_ex)
169-
170- optimize! (model)
171-
172- results = recover_allocation (model, auxdata)
173- score = results[:welfare ]
174-
175- if (! is_solved_and_feasible (model, allow_almost = true ) || isnan (score)) && param. verbose # optimization failed
176- println (" optimization failed! k=$(k) , return flag=$(termination_status (model)) " )
177- k = num_deepening - 1
178- score = - Inf
179- end
180-
181- if param. warm_start
182- vars_solution = value .(all_vars)
183- set_start_value .(all_vars, vars_solution)
177+ if model === nothing
178+ results, status, start_values = recover_allocation (start_values, auxdata, options. verbose)
179+ score = results[:welfare ]
180+ if (! any (status .== [0 , 1 ]) || isnan (score)) && param. verbose # optimization failed
181+ println (" optimization failed! k=$(k) , return flag=$(status) " )
182+ k = num_deepening - 1
183+ score = - Inf
184+ end
185+ if ! param. warm_start
186+ start_values = []
187+ end
188+ else
189+ set_parameter_value .(model. obj_dict[:kappa_ex ], auxdata. kappa_ex)
190+ optimize! (model)
191+ results = recover_allocation (model, auxdata)
192+ score = results[:welfare ]
193+ if (! is_solved_and_feasible (model, allow_almost = true ) || isnan (score)) && param. verbose # optimization failed
194+ println (" optimization failed! k=$(k) , return flag=$(termination_status (model)) " )
195+ k = num_deepening - 1
196+ score = - Inf
197+ end
198+ if param. warm_start
199+ vars_solution = value .(all_vars)
200+ set_start_value .(all_vars, vars_solution)
201+ end
184202 end
185203
186204 if score > best_score
@@ -242,18 +260,31 @@ function annealing(param, graph, I0; kwargs...)
242260 # Last deepening before returning found optimum
243261 has_converged = false
244262 I0 = best_I
245- set_start_value .(all_vars, start_values) # reset start values
263+ # reset start values
264+ if model === nothing
265+ start_values = []
266+ else
267+ set_start_value .(all_vars, start_values)
268+ end
246269 while ! has_converged && counter < 100
247270 # Update auxdata
248271 auxdata = create_auxdata (param, graph, edges, I0)
249- set_parameter_value .(model. obj_dict[:kappa_ex ], auxdata. kappa_ex)
250272
251273 # Solve allocation
252- optimize! (model)
253- if ! is_solved_and_feasible (model, allow_almost = true )
254- println (" Solver returned with error code $(termination_status (model)) ." )
274+ if model === nothing
275+ results, status, start_values = recover_allocation (start_values, auxdata, options. verbose)
276+ if ! any (status .== [0 , 1 ])
277+ println (" Solver returned with error code $(status) ." )
278+ end
279+ else
280+ set_parameter_value .(model. obj_dict[:kappa_ex ], auxdata. kappa_ex)
281+ optimize! (model)
282+ if ! is_solved_and_feasible (model, allow_almost = true )
283+ println (" Solver returned with error code $(termination_status (model)) ." )
284+ end
285+ results = recover_allocation (model, auxdata)
255286 end
256- results = recover_allocation (model, auxdata)
287+
257288 score = results[:welfare ]
258289
259290 # # Fajgelbaum & Schaal always use initial values here.
0 commit comments