# How to get the dual of a non convex MIQCP Gurobi

**URL:** https://discourse.julialang.org/t/how-to-get-the-dual-of-a-non-convex-miqcp-gurobi/129257
**Category:** Optimization (Mathematical)
**Tags:** jump, optimization, gurobi
**Created:** [May 22, 2025, 10:41pm UTC](https://discourse.julialang.org/t/how-to-get-the-dual-of-a-non-convex-miqcp-gurobi/129257 "2025-05-22T22:41:51Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![manoj.centura](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/manoj.centura/32/216443_2.png) [@manoj.centura](https://discourse.julialang.org/u/manoj.centura)
#### Post date: [May 22, 2025, 10:41pm UTC](https://discourse.julialang.org/t/how-to-get-the-dual-of-a-non-convex-miqcp-gurobi/129257/1 "2025-05-22T22:41:51Z")

</div>

hi All,  
I need to get the duals of a nonconvex MIQCP i tried below code from

```using

model = Model(Gurobi.Optimizer)
set_optimizer_attribute(model, "NonConvex", 2)
@variable(model, x, Bin)
@variable(model, y >= 0)
@constraint(model, x * y <= 10) # Non-convex bilinear term
@objective(model, Max, y)

@constraint(model,linear_constraint_name,x+y<=10)
optimize!(model)

# Fix binaries and solve as convex QCP (if possible)
fixed_model = copy(model)
set_optimizer(fixed_model, Gurobi.Optimizer)
set_optimizer_attribute(model, "QCPDual", 1)
fix(x, value(x); force=true)
fix(y, value(y); force=true)
set_optimizer_attribute(fixed_model, "QCPDual", 1)
optimize!(fixed_model)

# Retrieve duals (if convex)
dual_value = shadow_price(fixed_model[:linear_constraint_name])
```

---

<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: [May 22, 2025, 11:37pm UTC](https://discourse.julialang.org/t/how-to-get-the-dual-of-a-non-convex-miqcp-gurobi/129257/2 "2025-05-22T23:37:07Z")

</div>

See this tutorial [Computing the duals of a mixed-integer program · JuMP](https://jump.dev/JuMP.jl/stable/tutorials/linear/mip_duality/) and use [`JuMP.fix_discrete_variables`](https://jump.dev/JuMP.jl/stable/api/JuMP/#fix_discrete_variables):

```Julia
julia> using JuMP, Gurobi

julia> begin
           model = Model(Gurobi.Optimizer)
           set_silent(model)
           set_attribute(model, "NonConvex", 2)
           @variable(model, x, Bin)
           @variable(model, y >= 0)
           @constraint(model, x * y <= 10)
           @objective(model, Max, y)
           @constraint(model, linear_constraint_name, x + y <= 10)
           optimize!(model)
           undo_relax = fix_discrete_variables(model)
           set_attribute(model, "QCPDual", 1)
           optimize!(model)
           dual_value = shadow_price(linear_constraint_name)
       end
Set parameter LicenseID to value 890341
1.0

```
