I have written an algorithm where I update a penalty parameter, ρ, if some conditions are not satisfied. Then I update the objective function with the new increased parameter and call optimize! Like this,
ρ = ρ*10
initial_guess = value.(all_variables(model));
@objective(model, Min, obj + ρ * b ); # b and obj is some expression calculated (not changing)
set_start_value.(all_variables(model), initial_guess);
optimize!(model)
However, the algorithm seems happier without the set_start_value as it uses even more iterations with set_stat_value and sometimes even fails to find the solution. I also tried this,
variable_primal, constraint_solution,nlp_dual_start = get_start_values(model);
@objective(model, Min, obj + ρ * b );
set_optimal_start_values(model,variable_primal, constraint_solution,nlp_dual_start)
optimize!(model)
where get_start_values(model)
and set_optimal_start_values(...)
is doing the same as the set_optimal_start_values
found at [Primal and dual warm-starts · JuMP]. Am I doing this the wrong way? Can I use set_optimal_start_value
if I modify the objective? I know I can’t do this,
set_optimal_start_values(model)
@objective(model, Min, obj + ρ * b );
optimize!(model)
I don’t know if my question was clear. I want to try to reduce the number of iterations by using the optimal start value function. I was wondering if I am doing it correctly.