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.