Skip to content

Commit b78ad89

Browse files
committed
Refactor block_solver to include additional starting values for improved solver robustness
1 parent 7c2ff36 commit b78ad89

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

src/MacroModelling.jl

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5352,22 +5352,25 @@ function block_solver(parameters_and_solved_vars::Vector{T},
53525352

53535353
if cold_start
53545354
guesses = any(guess .< 1e12) ? [guess, fill(1e12, length(guess))] : [guess] # if guess were provided, loop over them, and then the starting points only
5355+
start_vals = (fail_fast_solvers_only ? [false] : Any[false, 1.206, 1.5, 0.7688, 2.0, 0.897])
53555356

53565357
for g in guesses
53575358
for p in parameters
53585359
for ext in [true, false] # try first the system where values and parameters can vary, next try the system where only values can vary
5359-
if !isfinite(sol_minimum) || sol_minimum > tol.NSSS_acceptance_tol# || rel_sol_minimum > rtol
5360-
if solved_yet continue end
5361-
5362-
sol_values, total_iters, rel_sol_minimum, sol_minimum = solve_ss(SS_optimizer, SS_solve_block, parameters_and_solved_vars, closest_parameters_and_solved_vars, lbs, ubs, tol, total_iters, n_block, verbose,
5363-
# sol_values, total_iters, rel_sol_minimum, sol_minimum = solve_ss(SS_optimizer, ss_solve_blocks, parameters_and_solved_vars, closest_parameters_and_solved_vars, lbs, ubs, tol, total_iters, n_block, verbose,
5364-
g,
5365-
p,
5366-
ext,
5367-
false)
5368-
5369-
if isfinite(sol_minimum) && sol_minimum < tol.NSSS_acceptance_tol
5370-
solved_yet = true
5360+
for s in start_vals
5361+
if !isfinite(sol_minimum) || sol_minimum > tol.NSSS_acceptance_tol# || rel_sol_minimum > rtol
5362+
if solved_yet continue end
5363+
5364+
sol_values, total_iters, rel_sol_minimum, sol_minimum = solve_ss(SS_optimizer, SS_solve_block, parameters_and_solved_vars, closest_parameters_and_solved_vars, lbs, ubs, tol, total_iters, n_block, verbose,
5365+
# sol_values, total_iters, rel_sol_minimum, sol_minimum = solve_ss(SS_optimizer, ss_solve_blocks, parameters_and_solved_vars, closest_parameters_and_solved_vars, lbs, ubs, tol, total_iters, n_block, verbose,
5366+
g,
5367+
p,
5368+
ext,
5369+
s)
5370+
5371+
if isfinite(sol_minimum) && sol_minimum < tol.NSSS_acceptance_tol
5372+
solved_yet = true
5373+
end
53715374
end
53725375
end
53735376
end

0 commit comments

Comments
 (0)