# KKT condition solves the bilevel optimization problem

**URL:** <https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289>\
**Category:** Optimization (Mathematical)\
**Tags:** question\
**Created:** [July 18, 2020, 3:22pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289 "2020-07-18T15:22:28Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 18, 2020, 3:22pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/1 "2020-07-18T15:22:28Z")

</div>

Is there a package for solving bilevel optimization problems with KKT conditions? Specifically, the inequality constrained KKT conditions are linearized by the large M method. Finally, the two-layer problem is turned into a single layer.  
I would be very grateful if you could help me！

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 18, 2020, 3:27pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/2 "2020-07-18T15:27:51Z")

</div>

large M method : Branch and bound method  
kπ==0  
Can be equivalent to  
k\<=Mw;  
π\<=M(1-w);  
w 0-1 variables  
M An infinite number

---

<div class="post-metadata">

**Author:** ![ericphanson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ericphanson/32/215186_2.png) [@ericphanson](https://discourse.julialang.org/u/ericphanson)\
**Post date:** [July 18, 2020, 3:36pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/3 "2020-07-18T15:36:49Z")

</div>

Maybe [https://github.com/matbesancon/BilevelOptimization.jl](https://github.com/matbesancon/BilevelOptimization.jl)?

---

<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:** [July 18, 2020, 3:50pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/4 "2020-07-18T15:50:33Z")

</div>

Checkout: [https://github.com/joaquimg/BilevelJuMP.jl](https://github.com/joaquimg/BilevelJuMP.jl)

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 19, 2020, 12:46am UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/5 "2020-07-19T00:46:46Z")

</div>

I’ll try. Thank you

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 19, 2020, 12:46am UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/6 "2020-07-19T00:46:59Z")

</div>

I’ll try it. Thank you

---

<div class="post-metadata">

**Author:** ![abcde](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abcde/32/16180_2.png) [@abcde](https://discourse.julialang.org/u/abcde)\
**Post date:** [July 19, 2020, 3:29pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/7 "2020-07-19T15:29:25Z")

</div>

![image](https://global.discourse-cdn.com/julialang/original/3X/3/4/34c79b5dc702ac5fcd63fe737b8c6e12f9bfbda5.png)  
We have encountered some problems in installing this package. Please guide us. 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:** [July 19, 2020, 5:47pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/8 "2020-07-19T17:47:06Z")

</div>

This is a question for @joaquimg

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [July 19, 2020, 8:32pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/9 "2020-07-19T20:32:20Z")

</div>

That is a version compatibility issue.  
I will look into it.  
@abcde can you send the result of  
`] st`  
So that I can see you package version and provide a fix faster.

---

<div class="post-metadata">

**Author:** ![abcde](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/abcde/32/16180_2.png) [@abcde](https://discourse.julialang.org/u/abcde)\
**Post date:** [July 20, 2020, 4:31am UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/10 "2020-07-20T04:31:06Z")

</div>

[Info: Precompiling BilevelJuMP [485130c0-026e-11ea-0f1a-6992cd14145c]  
ERROR: LoadError: LoadError: UndefVarError: OptimizerFactory not defined  
Stacktrace:  
[1] top-level scope at C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\packages\Dualization\w9SXv\src\dualize.jl:82  
[2] include(::Module, ::String) at .\Base.jl:377  
[3] include(::String) at C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\packages\Dualization\w9SXv\src\Dualization.jl:1  
[4] top-level scope at C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\packages\Dualization\w9SXv\src\Dualization.jl:29  
[5] include(::Module, ::String) at .\Base.jl:377  
[6] top-level scope at none:2  
[7] eval at .\boot.jl:331 [inlined]  
[8] eval(::Expr) at .\client.jl:449  
[9] top-level scope at .\none:3  
in expression starting at C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\packages\Dualization\w9SXv\src\dualize.jl:82  
in expression starting at C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\packages\Dualization\w9SXv\src\Dualization.jl:29  
ERROR: LoadError: Failed to precompile Dualization [191a621a-6537-11e9-281d-650236a99e60] to C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\compiled\v1.4\Dualization\4dgyK\_7Kp2G.ji.  
Stacktrace:  
[1] error(::String) at .\error.jl:33  
[2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1272  
[3] \_require(::Base.PkgId) at .\loading.jl:1029  
[4] require(::Base.PkgId) at .\loading.jl:927  
[5] require(::Module, ::Symbol) at .\loading.jl:922  
[6] include(::Module, ::String) at .\Base.jl:377  
[7] top-level scope at none:2  
[8] eval at .\boot.jl:331 [inlined]  
[9] eval(::Expr) at .\client.jl:449  
[10] top-level scope at .\none:3  
in expression starting at C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\packages\BilevelJuMP\SMaq9\src\BilevelJuMP.jl:7  
ERROR: LoadError: Failed to precompile BilevelJuMP [485130c0-026e-11ea-0f1a-6992cd14145c] to C:\Users\27990.juliapro\JuliaPro\_v1.4.2-1\compiled\v1.4\BilevelJuMP\IKUgG\_7Kp2G.ji.  
Stacktrace:  
[1] error(::String) at .\error.jl:33  
[2] compilecache(::Base.PkgId, ::String) at .\loading.jl:1272  
[3] \_require(::Base.PkgId) at .\loading.jl:1029  
[4] require(::Base.PkgId) at .\loading.jl:927  
[5] require(::Module, ::Symbol) at .\loading.jl:922  
in expression starting at untitled-45e6eb6976edbac250090377eb48b5d1:1  
Hello,This is my program reporting error,thanks

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [July 20, 2020, 2:37pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/11 "2020-07-20T14:37:52Z")

</div>

This problem is fixed on master,  
`] add Example#master`  
should fix it.  
I will release version 0.2.0 today.

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [July 20, 2020, 3:48pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/12 "2020-07-20T15:48:03Z")

</div>

Update, version 0.2.0 was just released with a fix to that problem.

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 21, 2020, 3:28pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/13 "2020-07-21T15:28:54Z")

</div>

![批注 2020-07-21 232530](https://global.discourse-cdn.com/julialang/original/3X/c/5/c584215c422b1db81313b7271b2e51635431358f.png)  
ERROR: Unsatisfiable requirements detected for package Weave [44d3d7a6]:  
Weave [44d3d7a6] log:  
├─Weave [44d3d7a6] has no known versions!  
└─restricted to versions \* by an explicit requirement — no versions left

sorry,I still can’t install this package, error as shown in the figure。I’m helpless 😭

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [July 21, 2020, 3:48pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/14 "2020-07-21T15:48:36Z")

</div>

That does not seem related to BilevelJuMP.

Try removing weave: `] rm Weave`

Otherwise, try a new environment from scratch:

```julia
] activate choose_an_env_name
] add BilevelJuMP

```

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 22, 2020, 7:32am UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/15 "2020-07-22T07:32:06Z")

</div>

i got it. thank you so much.

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 22, 2020, 7:59am UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/16 "2020-07-22T07:59:50Z")

</div>

sorry,excuse me again. I have installed the package and run the example in the readme file. I still report the following error. I don’t know what the reason is.

 ![批注 2020-07-22 155704](https://global.discourse-cdn.com/julialang/original/3X/1/7/17ae594ee03e0921c99e9719a13fb7855241179a.png)

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [July 22, 2020, 1:26pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/17 "2020-07-22T13:26:08Z")

</div>

No problem.  
I see you added version 0.1.0  
The readme is for the latest version: 0.2.0  
Add Bilevel was the very first command after activating the new env?  
Can you run

```julia
] st

```

And send the result here?

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 22, 2020, 1:32pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/18 "2020-07-22T13:32:00Z")

</div>

![11](https://global.discourse-cdn.com/julialang/original/3X/d/2/d289827a0d279ca26b31266e1d3af5449cd8daba.png)

I re installed juliapro, and this time I added the installation package without error, but running the example in the readme file is still the same problem.

---

<div class="post-metadata">

**Author:** ![dty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dty/32/16885_2.png) [@dty](https://discourse.julialang.org/u/dty)\
**Post date:** [July 22, 2020, 1:36pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/19 "2020-07-22T13:36:06Z")

</div>

So how do I add a 0.2.0 package

---

<div class="post-metadata">

**Author:** ![joaquimg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joaquimg/32/223_2.png) [@joaquimg](https://discourse.julialang.org/u/joaquimg)\
**Post date:** [July 22, 2020, 1:36pm UTC](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289/20 "2020-07-22T13:36:20Z")

</div>

This looks like a dependency problem, because you have BilevelJuMP v0.1.0 while the latest is 0.2.0. Some locked package might be blocking other.  
try exactly:

```julia
] activate db
] add BilevelJuMP

```

nothing else.

[Next page](https://discourse.julialang.org/t/kkt-condition-solves-the-bilevel-optimization-problem/43289.md?page=2)
