# About JuMP.is\_solved\_and\_feasible

**URL:** <https://discourse.julialang.org/t/about-jump-is-solved-and-feasible/126868>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [March 12, 2025, 12:36pm UTC](https://discourse.julialang.org/t/about-jump-is-solved-and-feasible/126868 "2025-03-12T12:36:15Z")\
**Posts on this page:** 1\
**Showing post:** 17

<div class="post-metadata">

**Author:** ![WalterMadelim](https://avatars.discourse-cdn.com/v4/letter/w/3e96dc/32.png) [@WalterMadelim](https://discourse.julialang.org/u/WalterMadelim)\
**Post date:** [March 13, 2025, 10:23pm UTC](https://discourse.julialang.org/t/about-jump-is-solved-and-feasible/126868/17 "2025-03-13T22:23:18Z")

</div>

```julia
import JuMP, Gurobi
function objf(x, y) return (y - 2)^2/4 - x * y end
B = JuMP.Model(() -> Gurobi.Optimizer());
JuMP.@variable(B, 0 <= x <= 1);
JuMP.@variable(B, 0 <= y);
JuMP.@objective(B, Min, objf(x, y));
JuMP.optimize!(B); # see the following logging
JuMP.solution_summary(B) # see the following printing

Gurobi Optimizer version 12.0.1 build v12.0.1rc0 (win64 - Windows 11.0 (26100.2))

CPU model: 11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz, instruction set [SSE2|AVX|AVX2|AVX512]
Thread count: 4 physical cores, 8 logical processors, using up to 8 threads

Optimize a model with 0 rows, 2 columns and 0 nonzeros
Model fingerprint: 0x5b406e53
Model has 2 quadratic objective terms
Coefficient statistics:
  Matrix range [0e+00, 0e+00]
  Objective range [1e+00, 1e+00]
  QObjective range [5e-01, 2e+00]
  Bounds range [1e+00, 1e+00]
  RHS range [0e+00, 0e+00]

Continuous model is non-convex -- solving as a MIP

Found heuristic solution: objective 1.0000000
Found heuristic solution: objective 0.8925000
Presolve removed 0 rows and 2 columns
Presolve time: 0.00s
Presolve: All rows and columns removed

Explored 0 nodes (0 simplex iterations) in 0.00 seconds (0.00 work units)
Thread count was 1 (of 8 available processors)

Solution count 3: -3 0.8925 1 
No other solutions better than -3

Optimal solution found (tolerance 1.00e-04)
Best objective -3.000000000000e+00, best bound -3.000000000000e+00, gap 0.0000%

User-callback calls 90, time in user-callback 0.00 sec

* Solver : Gurobi

* Status
  Result count : 3
  Termination status : OPTIMAL
  Message from the solver:
  "Model was solved to optimality (subject to tolerances), and an optimal solution is available." 

* Candidate solution (result #1)
  Primal status : FEASIBLE_POINT
  Dual status : NO_SOLUTION
  Objective value : -3.00000e+00
  Objective bound : -3.00000e+00
  Relative gap : 0.00000e+00
  Dual objective value : -3.00000e+00

* Work counters
  Solve time (sec) : 0.00000e+00
  Simplex iterations : 0
  Barrier iterations : 0
  Node count : 0

```

I find that JuMP’s `solution_summary` appears to be seriously incorrect.  
As a comparison, Gurobi’s logging is correct:

```julia
Optimal solution found (tolerance 1.00e-04)
Best objective -3.000000000000e+00, best bound -3.000000000000e+00, gap 0.0000%

```

Gurobi’s is correct in that it singled out this vital standalone quantity `best bound`, which in math sense called “best dual bound”, This quantity is **from the dual side** , it is **not related to any primal side solutions**.  
However, `JuMP.solution_summary` did NOT furnish this vital quantity. Or it incorrectly put it in the block entitled `Candidate solution (result #1)`.

The `Objective bound` associated with `Candidate solution (result #1)` is **nonsensical**. (it is not the value `1e100` nonsensical, it is the relationship incorrect.) (Did I express myself well?)

---

_[View the full topic](https://discourse.julialang.org/t/about-jump-is-solved-and-feasible/126868)._
