# CPLEX - Setting branching priority

**URL:** https://discourse.julialang.org/t/cplex-setting-branching-priority/11644
**Category:** Optimization (Mathematical)
**Created:** [June 13, 2018, 1:11pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644 "2018-06-13T13:11:39Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![Lefteris\_Manousakis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lefteris_manousakis/32/10832_2.png) [@Lefteris\_Manousakis](https://discourse.julialang.org/u/Lefteris_Manousakis)
#### Post date: [June 13, 2018, 1:11pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/1 "2018-06-13T13:11:39Z")

</div>

Hi all!

I have been trying to set branching priority (in CPLEX) for a set of my variables (z) but I cannot do it. I tried using the linear indices and the internal model, but I get a method not found error.

Source code:

```
model_indices = zeros(length(indices.V)*length(indices.H))
priorities = zeros(length(indices.V)*length(indices.H))
idx = 1
for i=indices.V_cus, t=indices.H
    lin_idx = linearindex(z[i,t])
    model_indices[idx] = lin_idx
    priorities[idx] = 10
    idx += 1
end
CPLEX.set_branching_priority(m.internalModel, model_indices, priorities)

```

Error:  
LoadError: MethodError: no method matching set\_branching\_priority(::CPLEX.CplexMathProgModel, ::Array{Float64,1}, ::Array{Float64,1})  
Closest candidates are:  
set\_branching\_priority(::Any, ::Any, ::Any, !Matched::Any) at C:\Users\lmano.julia\v0.6\CPLEX\src\cpx\_solve.jl:21  
set\_branching\_priority(!Matched::CPLEX.Model, ::Any, ::Any) at C:\Users\lmano.julia\v0.6\CPLEX\src\cpx\_solve.jl:18  
set\_branching\_priority(!Matched::CPLEX.Model, ::Any) at C:\Users\lmano.julia\v0.6\CPLEX\src\cpx\_solve.jl:15  
while loading C:\MyWork[Workspace] MIRP\Julia\MIRP\src\run.jl, in expression starting on line 34

The problem seems to be that CPLEX.jl set\_branching\_priority function needs a CPLEX.Model object while the internal model is a CPLEX.CplexMathProgModel. Is that a possible mismatch that needs to be fixed or I am doing something wrong. Any ideas on how to fix this?

Thanks,  
Lefteris

---

<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: [June 13, 2018, 8:17pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/2 "2018-06-13T20:17:59Z")

</div>

Hi Lefteris,

You can access the CPLEX `Model` as `JuMP.internalmodel(m).inner`.

`m.internalModel` is actual a MathProgBase wrapper of the internal C model. You can see the struct here:  
[https://github.com/JuliaOpt/CPLEX.jl/blob/81d7dbb9947960f56c81f7b32dcdf612fa99f7ba/src/CplexSolverInterface.jl#L3-L14](https://github.com/JuliaOpt/CPLEX.jl/blob/81d7dbb9947960f56c81f7b32dcdf612fa99f7ba/src/CplexSolverInterface.jl#L3-L14)

In regard to `set_branching_priority`, you seem to know what your are doing. You can find the source in CPLEX.jl here:  
[https://github.com/JuliaOpt/CPLEX.jl/blob/ab9099cd4886c8d12ffb20218f80391ae61f5cea/src/cpx\_solve.jl#L24-L37](https://github.com/JuliaOpt/CPLEX.jl/blob/ab9099cd4886c8d12ffb20218f80391ae61f5cea/src/cpx_solve.jl#L24-L37)

You can find the C documentation for `copyorder` here:  
[https://www.ibm.com/support/knowledgecenter/SSSA5P\_12.6.1/ilog.odms.cplex.help/refcallablelibrary/mipapi/copyorder.html](https://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.1/ilog.odms.cplex.help/refcallablelibrary/mipapi/copyorder.html)

---

<div class="post-metadata">

### Author: ![Lefteris\_Manousakis](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lefteris_manousakis/32/10832_2.png) [@Lefteris\_Manousakis](https://discourse.julialang.org/u/Lefteris_Manousakis)
#### Post date: [June 13, 2018, 9:02pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/3 "2018-06-13T21:02:37Z")

</div>

Thank you very much Oscar! Indeed it works when I use the inner field of the internalmodel struct.

---

<div class="post-metadata">

### Author: ![CanLi1](https://avatars.discourse-cdn.com/v4/letter/c/6a8cbe/32.png) [@CanLi1](https://discourse.julialang.org/u/CanLi1)
#### Post date: [March 17, 2019, 7:28pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/4 "2019-03-17T19:28:33Z")

</div>

Hi Oscar and Lefteris,

Thanks for your post. I’m also using set\_branching\_priority. I encounter a problem. Before I use CPLEX to solve the model, model.internalModel seems to be Void.

So I tried to solve(model) first, then model.internalModel.inner becomes a CPLEX object. I did the following experiment

priorities = [1, 2]  
model\_indices = [1, 2]  
CPLEX.set\_branching\_priority(m.internalModel.inner, model\_indices, priorities)

Then I got the following error

Root node processing (before b&c):  
Real time = 0.00 sec. (0.25 ticks)  
Sequential b&c:  
Real time = 0.00 sec. (0.00 ticks)  
------------  
Total (root+branch&cut) = 0.00 sec. (0.25 ticks)  
ERROR: CPLEX: error getting error message(!)  
Stacktrace:  
[1] get\_error\_msg(::CPLEX.Env, ::Int32) at /home/canl1/.julia/v0.6/CPLEX/src/cpx\_env.jl:71  
[2] Type at /home/canl1/.julia/v0.6/CPLEX/src/cpx\_env.jl:89 [inlined]  
[3] optimize!(::CPLEX.Model) at /home/canl1/.julia/v0.6/CPLEX/src/cpx\_solve.jl:11  
[4] optimize!(::CPLEX.CplexMathProgModel) at /home/canl1/.julia/v0.6/CPLEX/src/CplexSolverInterface.jl:191  
[5] #solve#116(::Bool, ::Bool, ::Bool, ::Array{Any,1}, ::Function, ::JuMP.Model) at /home/canl1/.julia/v0.6/JuMP/src/solvers.jl:175  
[6] solve(::JuMP.Model) at /home/canl1/.julia/v0.6/JuMP/src/solvers.jl:150

I would appreciate it if you can share some solutions to this problem. Thanks!

Best regards,  
Can

---

<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: [March 18, 2019, 1:30pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/5 "2019-03-18T13:30:40Z")

</div>

Please provide a minimum working example:

> [@Please read: make it easier to help you](https://discourse.julialang.org/t/psa-make-it-easier-to-help-you/14757):
>
> Welcome to the Julia Discourse! We are enthusiastic about helping Julia programmers, both beginner and experienced. This public service announcement (PSA) outlines best practices when asking for help. Following these points makes it easier for us to help you and more likely you’ll get a prompt, useful answer. Keywords are highlighted to make it easier to refer to specific points. Choose a descriptive title that captures the key part of your question, eg “plots with multiple axes” instead of …

---

<div class="post-metadata">

### Author: ![CanLi1](https://avatars.discourse-cdn.com/v4/letter/c/6a8cbe/32.png) [@CanLi1](https://discourse.julialang.org/u/CanLi1)
#### Post date: [March 18, 2019, 2:19pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/6 "2019-03-18T14:19:06Z")

</div>

```julia
using JuMP
using CPLEX
m = Model(solver=CplexSolver())
@variable(m, x[i in 1:2], Bin)
@objective(m, Min, x[1] + x[2])
priorities = [1, 2]
model_indices = [1, 2]
CPLEX.set_branching_priority(m.internalModel.inner, model_indices, priorities)

```

The error is

```julia
ERROR: LoadError: type Void has no field inner
Stacktrace:
 [1] include_from_node1(::String) at ./loading.jl:576
 [2] include(::String) at ./sysimg.jl:14
 [3] process_options(::Base.JLOptions) at ./client.jl:305
 [4] _start() at ./client.jl:371
while loading /home/canl1/work/learnbranching/temp.jl, in expression starting on line 8

```

---

<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: [March 18, 2019, 2:25pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/7 "2019-03-18T14:25:29Z")

</div>

Run `JuMP.build(m)` prior to setting the branching priority.

---

<div class="post-metadata">

### Author: ![CanLi1](https://avatars.discourse-cdn.com/v4/letter/c/6a8cbe/32.png) [@CanLi1](https://discourse.julialang.org/u/CanLi1)
#### Post date: [March 20, 2019, 1:53pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/8 "2019-03-20T13:53:01Z")

</div>

Thanks Oscar!

---

<div class="post-metadata">

### Author: ![SalmaHammani](https://avatars.discourse-cdn.com/v4/letter/s/5fc32e/32.png) [@SalmaHammani](https://discourse.julialang.org/u/SalmaHammani)
#### Post date: [March 26, 2024, 5:02pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/9 "2024-03-26T17:02:23Z")

</div>

Hi everyone,

I was wondering if the CPLEX.set\_branching\_priority function still exists in the latest versions please?  
I tried running the suggested codes but I always get

_UndefVarError: `set_branching_priority` not defined_

Can anyone help me please?  
Thank you

---

<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: [March 26, 2024, 7:41pm UTC](https://discourse.julialang.org/t/cplex-setting-branching-priority/11644/10 "2024-03-26T19:41:37Z")

</div>

Hi @SalmaHammani, welcome to the forum.

> I was wondering if the CPLEX.set\_branching\_priority function still exists in the latest versions please?

It does not exist.

You’ll need to use [https://www.ibm.com/docs/en/icos/20.1.0?topic=c-cpxxcopyorder-cpxcopyorder](https://www.ibm.com/docs/en/icos/20.1.0?topic=c-cpxxcopyorder-cpxcopyorder)

Here’s an example:

```julia
julia> using JuMP, CPLEX

julia> function c_column(cplex::CPLEX.Optimizer, x::VariableRef)
           return Cint(CPLEX.column(cplex, index(x)) - 1)
       end
c_column (generic function with 1 method)

julia> model = direct_model(CPLEX.Optimizer())
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: DIRECT
Solver name: CPLEX

julia> @variable(model, x[1:3], Bin)
3-element Vector{VariableRef}:
 x[1]
 x[2]
 x[3]

julia> cplex = backend(model)
Ptr{Nothing} @0x00007fb4b18c1a30

julia> indices = c_column.(cplex, x)
3-element Vector{Int32}:
 0
 1
 2

julia> priority = Cint[1, 2, 1]
3-element Vector{Int32}:
 1
 2
 1

julia> direction = [CPX_BRANCH_UP, CPX_BRANCH_UP, CPX_BRANCH_UP]
3-element Vector{Int64}:
 1
 1
 1

julia> CPLEX.CPXcopyorder(cplex.env, cplex.lp, length(indices), indices, priority, direction)
0

```
