Set_start_value to reduce iterations

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.

Hi @Annaquest, welcome to the forum. This is a bit easier to have a conversation on than StackOverflow.

Do you have a reproducible example that I can copy-paste? I would have expected this to improve things.

Do you also have a log of the Ipopt solves?