# Set\_start\_value in JuMP for SCIP

**URL:** <https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [February 8, 2021, 7:59am UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829 "2021-02-08T07:59:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ahmadreza-marandi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ahmadreza-marandi/32/13490_2.png) [@ahmadreza-marandi](https://discourse.julialang.org/u/ahmadreza-marandi)\
**Post date:** [February 8, 2021, 7:59am UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/1 "2021-02-08T07:59:46Z")

</div>

Hi all,

I am using _set\_value\_start_ function in JuMP 0.19 to pass a warm start to SCIP. Though, the solver doesn’t seem to use it.  
When I plug in an optimal solution to the problem as the warm start, nothing changes in the iterations! So, I am wondering if that is an issue with SCIP or JuMP!

Any recommendations/suggestions to resolve this issue?

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [February 8, 2021, 8:08am UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/2 "2021-02-08T08:08:09Z")

</div>

First, read [Please read: make it easier to help you](https://discourse.julialang.org/t/psa-make-it-easier-to-help-you/14757). It helps to provide a minimal working example.

Second, upgrade to JuMP 0.21. (0.19 is quite old, and this may be fixed in a new version.)

---

<div class="post-metadata">

**Author:** ![ahmadreza-marandi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ahmadreza-marandi/32/13490_2.png) [@ahmadreza-marandi](https://discourse.julialang.org/u/ahmadreza-marandi)\
**Post date:** [February 8, 2021, 9:45am UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/3 "2021-02-08T09:45:15Z")

</div>

I thought it might be a general question and not specific, and that was the reason I didn’t put a code.  
I updated to 0.21.5 and the same issue.  
As for small examples it is not that clear, I am attaching the code including the parameters.  
In the code, commenting the _set\_start\_value_ lines results in the same iterations, while the initial solution is optimal (so basically the preprocessing should be sufficient):

```julia
using JuMP, SCIP
n_x = 5;
A=[4.71035485409373 -0.7751694462183467 -4.460951531509877 2.8703677438748088 1.300770216708976 0.0881938474285846 0.6768615711390176 -1.908091328247854 2.471359728851893 -1.6333914978208597 3.833543766081192 -1.6634408044595417 2.960145688677045 3.0478382878017527 -4.497613236900087 -0.9749486915835828 4.651916428940266 -0.8562405649283136 -1.6947642937175447 1.3637235434048192 3.5802537020945273 2.8828398402691864 0.3840974318120649 2.4167044633103725 2.397206071131034 -0.5520539317627993 3.5040985825171376 -0.054651402236029156 4.4815753481283345 2.9778818949409604 -3.6695541654037847 -2.622302456147605 -3.7227653290599805 0.3412039894735388 -4.433033100418235 -0.31425001616150805 4.82687802974098 1.8222116159655313 3.7090071806482747 -0.037894345501243265 -2.1233778937127132 -3.169806826128326 4.612190124109825 2.562614757098565 4.503534905139837 1.7126664903197977 -3.139453898747886 -2.1015804185690334 -4.417921755030026 -4.5593377758989595; -2.204411686749931 -3.2953037917919223 1.7710055976967638 4.024179283262306 -1.480126783431528 -3.9984148391785546 2.930022357344697 -0.315675709650308 1.873412068935579 1.8307852874741624 -0.785641141303457 1.593425261209637 1.334271292093053 0.2514600876634985 -3.087185501778469 0.11906009740829315 2.483302628034771 -0.801730833339672 2.374794194777838 1.8646773390446958 4.557260125426689 -1.9209353866983503 -1.5769913745050026 -1.1296642799433112 -4.7382409464156385 1.3354640511713232 0.6525105904520725 -1.3448858716876866 -0.7854130114082132 -0.3779972797069071 -1.8556122394277397 -2.7433830865159123 -3.840631159292495 -3.6603389432181577 4.465234436605673 -0.07567028731607373 2.482136269464225 -1.890648404512313 -4.922947152328464 1.15621671090482 -1.424266607197425 1.4882907105690109 3.459772286069734 -3.986467879802529 0.8830183432177954 0.8238218860658639 0.2180376075211221 -0.45400170123477057 4.667020050639909 -3.1769304234358953; 0.5939212880371381 1.2647448939104846 -4.698700027257624 1.4227305727190949 3.3816113172677813 -1.0486398339353622 -0.6265779694176041 -4.151172219287163 0.8137747401912163 3.716819764413229 -2.930929229089899 -4.053899677636762 -3.1204780056668016 1.6783657674205896 2.324209055025097 1.310104488917502 -0.3179384501862632 -1.856376689812289 1.414666623123825 0.6202689538430226 1.6372666925021617 -3.7512295558532402 1.740271752071604 1.803112782208732 4.301201440619472 3.2881969114144116 -3.218996453427392 4.492406272330845 -3.0037715105804086 -2.82319338215279 -4.91478062740815 -1.9937342155488427 -2.2552917726986212 0.8644845073563125 -1.0344715251684677 -3.1359722615126175 -1.0718360133168936 -3.45406160182236 3.323044543698485 -3.5024792579850326 1.7954595170230814 2.5008998348854297 -4.851099917868478 -3.5775350188692934 -4.693443957550308 3.0869551273792446 -4.528540446900562 1.6618147810229313 -0.4396756441686813 3.0299637928610803; -1.4156109417905949 -4.746659548955744 -2.8141184370688355 2.1091490003479247 0.48920786284250006 3.6969303269399134 2.3883565579405284 -3.9676986757029664 4.714332142847491 2.3871260754906762 -4.8614242317498295 1.791216660669396 -0.1449726895549528 -4.652816495337153 -3.855603794792024 -4.23374889350921 1.078246783268355 -2.6653414800481876 -3.579885564509767 0.3017319826341316 4.303013382289329 1.169027702994021 1.898919176137282 -2.6557413332821813 -2.9315614007650312 -4.6263373408308865 1.6336496597836838 0.0725457062625745 -0.1419955067281622 3.6169500871873552 4.655149044462856 2.5968793532313104 -2.533205519081634 1.762674610030083 2.593054447404983 0.8618981404835857 3.224392670562917 4.268351454066988 1.3756687794255127 -4.8106213252176335 -3.1565936884747856 -4.73259290797468 4.349986710269958 -0.1553264165682844 2.947855590357559 -0.43164659908791947 -0.05790739082700824 -0.7428604750139982 3.917721551316541 3.7428511994270846; 1.33150369522766 -2.077206872049091 -2.083216596127083 -2.544999563280671 2.043479202181498 2.7461187292845493 3.2265356115860637 3.0618964573372534 -2.4622904651663555 3.0049986076873 1.2970872246262042 -2.6849843282760153 -1.189232384455312 -0.46798359597814976 0.005595581097153968 0.40571545174245927 -1.5485484136417629 -2.0856997196375335 2.0352859027723182 4.340784145306802 0.9417475729457303 0.9309077274486688 2.3873103386017434 -1.273568164709209 -0.46729624393541247 0.09375564521364765 4.287108353047554 -0.4921219335195506 1.3743486805373486 -0.4063614217584375 0.5377445941475676 -4.587673410754788 3.0220217890640075 1.7151163491690378 -2.9967240520942884 -4.854136265084266 2.6316602510701967 0.6751175986235038 1.5421380080684841 1.3474038850614969 2.3433020074257263 3.8732657945182574 1.6590901047365385 -3.793253985672812 2.1373559183832977 -0.5277282012007625 1.4098235277243445 1.4889612861605563 1.783753944971921 -4.411723609319451];
b=[0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0];
D=[ 1.0 0.0 0.0 0.0 0.0
  0.0 1.0 0.0 0.0 0.0
  0.0 0.0 1.0 0.0 0.0
  0.0 0.0 0.0 1.0 0.0
  0.0 0.0 0.0 0.0 1.0
 -1.0 -0.0 -0.0 -0.0 -0.0
 -0.0 -1.0 -0.0 -0.0 -0.0
 -0.0 -0.0 -1.0 -0.0 -0.0
 -0.0 -0.0 -0.0 -1.0 -0.0
 -0.0 -0.0 -0.0 -0.0 -1.0];
 d=[ 5.0
 2.5
 1.6666666666666667
 1.25
 1.0
 0.2
 0.4
 0.6
 0.8
 1.0];
 a=3;
 J=[[1, 2, 3, 4, 5],
 [6, 7, 8, 9, 10],
 [11, 12, 13, 14, 15],
 [16, 17, 18, 19, 20],
 [21, 22, 23, 24, 25],
 [26, 27, 28, 29, 30],
 [31, 32, 33, 34, 35],
 [36, 37, 38, 39, 40],
 [41, 42, 43, 44, 45],
 [46, 47, 48, 49, 50]];
 Best_upp_x2=136.216102;
 best_solution=[ 1.7829526292444393
 2.1573064385462466
 0.0
 1.25
 0.0];
K=size(J,1);
total_J=sum(size(J[k],1) for k=1:K);
 tolerr=0;
model = Model(SCIP.Optimizer)
set_optimizer_attribute(model, "limits/time", 60)

@variable(model, x[1:n_x]>=0)
@variable(model, y[1:total_J])# y[]=A[:,j]'*x+b[j]
@variable(model, z[1:total_J-K])# maximum with yi and zi

## initialization
for tt=1:n_x
	set_start_value(x[tt], best_solution[tt]);
end

global up_to_k=0;
y_help=zeros(total_J,1);
z_help=zeros(total_J-K,1);
for k=1:K
	y_help[1+up_to_k:up_to_k+size(J[k],1)]=A[:,J[k]]'*best_solution+b[J[k]];
	for tt=1+up_to_k:up_to_k+size(J[k],1)
		set_start_value(y[tt],y_help[tt] );
	end
	z_help[up_to_k-(k-1)+1]=max(y_help[up_to_k+1],y_help[up_to_k+2]);
	set_start_value(z[up_to_k-(k-1)+1], z_help[up_to_k-(k-1)+1])
	for i=2:size(J[k],1)-1
		z_help[up_to_k-(k-1)+i] = max(z_help[up_to_k-(k-1)+i-1],y_help[up_to_k+i+1]);
		set_start_value(z[up_to_k-(k-1)+i],max(z_help[up_to_k-(k-1)+i-1],y_help[up_to_k+i+1]) );
	end
	global up_to_k=up_to_k+size(J[k],1);
end

#model construction
@constraint(model, D*x .<= d + tolerr*ones(size(D,1),1));
@NLconstraint(model, log(sum(exp(x[i]) for i=1:n_x))<=a+tolerr);
@objective(model, Max, sum(z[sum(size(J[k_tilde],1) for k_tilde=1:k)-(k-1)-1] for k=1:K));
@constraint(model,sum(z[sum(size(J[k_tilde],1) for k_tilde=1:k)-(k-1)-1] for k=1:K)<=Best_upp_x2);
global up_to_k=0;

for k=1:K
	@constraint(model, y[1+up_to_k:up_to_k+size(J[k],1)] .== A[:,J[k]]'*x+b[J[k]])
	@NLconstraint(model,z[up_to_k-(k-1)+1]==max(y[up_to_k+1],y[up_to_k+2]))
	for i=2:size(J[k],1)-1
		@NLconstraint(model, z[up_to_k-(k-1)+i]==max(z[up_to_k-(k-1)+i-1],y[up_to_k+i+1]) );
	end
	global up_to_k=up_to_k+size(J[k],1);
end

optimize!(model)

```

---

<div class="post-metadata">

**Author:** ![leethargo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leethargo/32/6004_2.png) [@leethargo](https://discourse.julialang.org/u/leethargo)\
**Post date:** [February 8, 2021, 1:45pm UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/4 "2021-02-08T13:45:43Z")

</div>

Your example does not work. With `using JuMP, SCIP` added, I get:

```julia
UndefVarError: total_J not defined

```

Whether or not SCIP uses the start values could be seen from the log (in either case, I think). I suspect that the warm start solution is not used, because none of your variables are integral. It might be possible to work around that by parameter settings.

Also note that SCIP is a global solver and uses an algorithm based on LP-based relaxations and spatial branching. So, even given the optimal solution as a warm start, it’s not true that the solver should stop immediatly, because it still needs to prove optimality.

For nonlinear problems, it’s highly recommended to provide finite bounds for all related variables.

---

<div class="post-metadata">

**Author:** ![ahmadreza-marandi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ahmadreza-marandi/32/13490_2.png) [@ahmadreza-marandi](https://discourse.julialang.org/u/ahmadreza-marandi)\
**Post date:** [February 8, 2021, 3:00pm UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/5 "2021-02-08T15:00:20Z")

</div>

Apologies for the inconvenience. I have updated the code.

I totally agree with you, but I also put the optimal value as the active cut. So, the use of warm start and checking the feasibility should be fine to prove optimality.

As you said, I see that SCIP doesn’t use the warm start from the log. It basically do the same iterations as if there is no warm start given.

Regarding your point on integer values, that is a bit strange to me. Are you sure about it?

---

<div class="post-metadata">

**Author:** ![leethargo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leethargo/32/6004_2.png) [@leethargo](https://discourse.julialang.org/u/leethargo)\
**Post date:** [February 8, 2021, 3:44pm UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/6 "2021-02-08T15:44:17Z")

</div>

> [@ahmadreza-marandi](#):
>
> As you said, I see that SCIP doesn’t use the warm start from the log. It basically do the same iterations as if there is no warm start given.

But does it give a reason for it? Usually, it prints something like “Constraint […] violated in partial solution” or so.

> [@](#):
>
> Regarding your point on integer values, that is a bit strange to me. Are you sure about it?

It was just a hint, but I had a related problem in the past, where I fixed only a subset of the integer variables and SCIP didn’t attempt to solve the subproblem.

Check the [parameters](https://www.scipopt.org/doc/html/PARAMETERS.php) within `/heuristics/completesol`.

You could also try to write out the problem and warm start to files and run SCIP directly.

---

<div class="post-metadata">

**Author:** ![ahmadreza-marandi](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ahmadreza-marandi/32/13490_2.png) [@ahmadreza-marandi](https://discourse.julialang.org/u/ahmadreza-marandi)\
**Post date:** [February 8, 2021, 4:05pm UTC](https://discourse.julialang.org/t/set-start-value-in-jump-for-scip/54829/7 "2021-02-08T16:05:10Z")

</div>

> But does it give a reason for it? Usually, it prints something like “Constraint […] violated in partial solution” or so.

Below, you can find the log of the first iterations.

> It was just a hint, but I had a related problem in the past, where I fixed only a subset of the integer variables and SCIP didn’t attempt to solve the subproblem.
> 
> Check the [parameters](https://www.scipopt.org/doc/html/PARAMETERS.php) within `/heuristics/completesol` .

I did check it, and no changes.

> You could also try to write out the problem and warm start to files and run SCIP directly.

That is a bit challenging, as I am solving many randomly generated instances, and no that familiar with SCIP to directly make a for-loop there. At least this is what I am avoiding.

```julia
******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit http://projects.coin-or.org/Ipopt
******************************************************************************

feasible solution found by trivial heuristic after 2.0 seconds, objective value 0.000000e+00
presolving:
(round 1, fast) 0 del vars, 10 del conss, 0 add conss, 11 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
(round 2, fast) 0 del vars, 10 del conss, 0 add conss, 109 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
(round 3, fast) 0 del vars, 10 del conss, 1 add conss, 109 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
(round 4, fast) 0 del vars, 10 del conss, 1 add conss, 110 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 0 clqs
presolving (5 rounds: 5 fast, 1 medium, 1 exhaustive):
 0 deleted vars, 10 deleted constraints, 1 added constraints, 110 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients
 0 implications, 0 cliques
presolved problem has 96 variables (0 bin, 0 int, 0 impl, 96 cont) and 93 constraints
     51 constraints of type <linear>
     42 constraints of type <nonlinear>
Presolving Time: 2.00

 time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
  2.0s| 1 | 0 | 531 | - | 1798k | 0 | 96 | 93 | 104 | 1 | 0 | 0 | 0 | 1.362161e+02 | 0.000000e+00 | Inf | unknown
  2.0s| 1 | 0 | 541 | - | 2802k | 0 | 96 | 93 | 119 | 16 | 1 | 0 | 0 | 1.362161e+02 | 0.000000e+00 | Inf | unknown
  2.0s| 1 | 0 | 568 | - | 2802k | 0 | 96 | 93 | 120 | 17 | 2 | 0 | 0 | 1.362161e+02 | 0.000000e+00 | Inf | unknown
  2.0s| 1 | 0 | 575 | - | 2802k | 0 | 96 | 93 | 132 | 29 | 3 | 0 | 0 | 1.362161e+02 | 0.000000e+00 | Inf | unknown
  2.0s| 1 | 0 | 576 | - | 2802k | 0 | 96 | 93 | 133 | 30 | 4 | 0 | 0 | 1.362161e+02 | 0.000000e+00 | Inf | unknown
  2.0s| 1 | 2 | 576 | - | 2802k | 0 | 96 | 93 | 133 | 30 | 6 | 0 | 0 | 1.362161e+02 | 0.000000e+00 | Inf | unknown
* 3.0s| 67 | 45 | 1008 | 12.9 | LP | 54 | 96 | 99 | 267 | 273 | 2 | 6 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 0.43%
  3.0s| 100 | 64 | 1226 | 10.8 | 3630k | 54 | 96 | 101 | 193 | 408 | 2 | 8 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 0.43%
  4.0s| 200 | 116 | 2236 | 10.5 | 4309k | 54 | 96 | 118 | 171 | 975 | 4 | 25 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 0.43%
  4.0s| 300 | 170 | 3098 | 9.8 | 4549k | 54 | 96 | 132 | 167 |1496 | 3 | 39 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 0.43%
  5.0s| 400 | 212 | 4642 | 11.2 | 4714k | 54 | 96 | 135 | 292 |2278 | 13 | 49 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 20.79%
  5.0s| 500 | 278 | 5792 | 11.3 | 5621k | 54 | 96 | 139 | 262 |2921 | 2 | 54 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 20.79%
  5.0s| 600 | 350 | 7586 | 12.4 | 6146k | 54 | 96 | 140 | 215 |3846 | 3 | 55 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 20.79%
  5.0s| 700 | 416 | 8498 | 11.9 | 6272k | 54 | 96 | 144 | 173 |4395 | 8 | 60 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 20.80%
  5.0s| 800 | 472 | 9744 | 12.0 | 6612k | 54 | 96 | 151 | 193 |5037 | 1 | 68 | 0 | 1.362161e+02 | 1.127854e+02 | 20.77%| 21.22%

```
