title: Trying to solve model using pyomo and bonmin. Model not passed to solver correctly
body: <p>I wish to use Pyomo and Bonmin in an operations research seminar concerning the "Extended Supporting Hyperplane Algorithm" from Kronqvist. I wish to use bonmin to compare the performance of the algorithm. First I want to test, whether Bonmin is installed correctly and it is working in together with pyomo, so I modeled an example from the paper mentioned above. It is a convex problem, so bonmin should be able to solve it.</p>
  
  <p>My OS is Windows 7, so I installed Bonmin using Cygwin and added it to my PATh. I did not notice any error message during the installation. For Programming I am using Anaconda with Jupyter Notebook.</p>
  
  <p>I am currently reading through the pyomos documentation, but did not have any luck so far.</p>
  
  <pre><code>from pyomo.environ import *
  import numpy
  import scipy
  
  # Konkretes Optimierungsproblem
  
  model = ConcreteModel(name = "Example 1")
  
  model.x1 = Var(bounds=(1,20), within=Reals)
  model.x2 = Var(bounds=(1,20), within=Integers)
  
  model.obj = Objective(expr=(-1)*model.x1-model.x2)
  
  model.g1 = Constraint(expr=0.15*((model.x1 - 8)**2)+0.1*((model.x2 - 6)**2)+0.025*exp(model.x1)*((model.x2)**(-2))-5&lt;=0)
  model.g2 = Constraint(expr=(model.x1)**(-1) + (model.x2)**(-1) - (model.x1)**(-0.5) * (model.x2) ** (-0.5)+4&lt;=0)
  model.l1 = Constraint(expr=2 * (model.x1) - 3 * (model.x2) -2&lt;=0)
  
  #Just some output to analze the generated model
  
  print(model)
  dir(model)
  print(model.g2.expr)
  model.x1 = 5
  print(value(model.x1))
  
  opt = SolverFactory('bonmin')
  #opt.options['bonmin.algorithm'] = 'Bonmin'
  print('using Bonmin')
  # Set Options for solver.
  opt.options['bonmin.solution_limit'] = '1'
  opt.options['bonmin.time_limit'] = 1800
  results = opt.solve(model)
  results.write()
  </code></pre>
  
  <p>These are the results:</p>
  
  <pre><code>using Bonmin
  WARNING: Loading a SolverResults object with a warning status into
      model=Example 1;
          message from solver=bonmin\x3a Infeasible problem
  # ==========================================================
  # = Solver Results                                         =
  # ==========================================================
  # ----------------------------------------------------------
  #   Problem Information
  # ----------------------------------------------------------
  Problem: 
  - Lower bound: -inf
    Upper bound: inf
    Number of objectives: 1
    Number of constraints: 0
    Number of variables: 0
    Sense: unknown
  # ----------------------------------------------------------
  #   Solver Information
  # ----------------------------------------------------------
  Solver: 
  - Status: warning
    Message: bonmin\x3a Infeasible problem
    Termination condition: infeasible
    Id: 220
    Error rc: 0
    Time: 0.16000056266784668
  # ----------------------------------------------------------
  #   Solution Information
  # ----------------------------------------------------------
  Solution: 
  - number of solutions: 0
    number of solutions displayed: 0
  </code></pre>
  
  <p>As you can see, the model ist not transferred to the solver correctly, since according to the solver the problem has neither constraints nor variables.</p>
  
  <p>Could the problem be the warning stauts of the Solver meaning it is not installed correctly or is this due to the problem being infeasible?</p>
  
  <p>Edit: As suggested by Bethany Nicholson in the comments, I added the option <code>tee=tree</code> in the code, which lead to the following output</p>
  
  <pre><code>using Bonmin
  Bonmin 1.8.7 using Cbc 2.10.0 and Ipopt 3.12.12
  bonmin: bonmin.solution_limit=1
  bonmin.time_limit=1800
  bonmin.solution_limit=1
  bonmin.time_limit=1800
  
  
  ******************************************************************************
  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
  ******************************************************************************
  
  NLP0012I 
                Num      Status      Obj             It       time                 Location
  NLP0014I             1      INFEAS 4.0986776       27 0.031
  NLP0014I             2      INFEAS 4.0986776       27 0.015
  Cbc0006I The LP relaxation is infeasible or too expensive
  
      "Finished"
  WARNING: Loading a SolverResults object with a warning status into
      model=Example 1;
          message from solver=bonmin\x3a Infeasible problem
  # ==========================================================
  # = Solver Results                                         =
  # ==========================================================
  # ----------------------------------------------------------
  #   Problem Information
  # ----------------------------------------------------------
  Problem: 
  - Lower bound: -inf
    Upper bound: inf
    Number of objectives: 1
    Number of constraints: 0
    Number of variables: 0
    Sense: unknown
  # ----------------------------------------------------------
  #   Solver Information
  # ----------------------------------------------------------
  Solver: 
  - Status: warning
    Message: bonmin\x3a Infeasible problem
    Termination condition: infeasible
    Id: 220
    Error rc: 0
    Time: 0.23000025749206543
  # ----------------------------------------------------------
  #   Solution Information
  # ----------------------------------------------------------
  Solution: 
  - number of solutions: 0
    number of solutions displayed: 0
  </code></pre>
  
  <p>Edit 2: I have tried other simple problems. While the problem is solved correctly (x1=4, x2=2, minvalue=-10) by Bonmin, its output states that the problems passed to the solver has no constraints, when it clearly has five (even though four might be interpreted as bounds). Furthermore, the output still appears a little strange to me. Why does it state "number of solutions = 0"? (I am still not through with the complete documentation of pyomo, maybe I just have to set additional parameters)
  Here is the linear problem:</p>
  
  <pre><code>from pyomo.environ import *
  import numpy
  import scipy
  
  model = ConcreteModel(name = "Linear problem")
  
  model.x1 = Var(domain = Reals)
  model.x2 = Var(domain = Reals)
  
  model.obj = Objective(expr=-1*(2*model.x1+model.x2))
  
  model.l1 = Constraint(expr=model.x1&gt;=0)
  model.l2 = Constraint(expr=model.x2&gt;=0)
  model.l3 = Constraint(expr=model.x1&lt;=4)
  model.l4 = Constraint(expr=model.x2&lt;=4)
  model.l5 = Constraint(expr=model.x1+model.x2&lt;=6)
  model.pprint()
  2 Var Declarations
      x1 : Size=1, Index=None
          Key  : Lower : Value : Upper : Fixed : Stale : Domain
          None :  None :  None :  None : False :  True :  Reals
      x2 : Size=1, Index=None
          Key  : Lower : Value : Upper : Fixed : Stale : Domain
          None :  None :  None :  None : False :  True :  Reals
  
  1 Objective Declarations
      obj : Size=1, Index=None, Active=True
          Key  : Active : Sense    : Expression
          None :   True : minimize : - (2*x1 + x2)
  
  5 Constraint Declarations
      l1 : Size=1, Index=None, Active=True
          Key  : Lower : Body : Upper : Active
          None :   0.0 :   x1 :  +Inf :   True
      l2 : Size=1, Index=None, Active=True
          Key  : Lower : Body : Upper : Active
          None :   0.0 :   x2 :  +Inf :   True
      l3 : Size=1, Index=None, Active=True
          Key  : Lower : Body : Upper : Active
          None :  -Inf :   x1 :   4.0 :   True
      l4 : Size=1, Index=None, Active=True
          Key  : Lower : Body : Upper : Active
          None :  -Inf :   x2 :   4.0 :   True
      l5 : Size=1, Index=None, Active=True
          Key  : Lower : Body    : Upper : Active
          None :  -Inf : x1 + x2 :   6.0 :   True
  
  8 Declarations: x1 x2 obj l1 l2 l3 l4 l5
  
  opt = SolverFactory('bonmin')
  opt.options['bonmin.solution_limit'] = '1'
  opt.options['bonmin.time_limit'] = 1800
  results = opt.solve(model, tee = True)
  results.write()
  
  Bonmin 1.8.7 using Cbc 2.10.0 and Ipopt 3.12.12
  bonmin: bonmin.solution_limit=1
  bonmin.time_limit=1800
  bonmin.solution_limit=1
  bonmin.time_limit=1800
  
  Cbc3007W No integer variables - nothing to do
  
  ******************************************************************************
  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
  ******************************************************************************
  
  NLP0012I 
                Num      Status      Obj             It       time                 Location
  NLP0014I             1         OPT -10        4 0
  Cbc3007W No integer variables - nothing to do
  
      "Finished"
  # ==========================================================
  # = Solver Results                                         =
  # ==========================================================
  # ----------------------------------------------------------
  #   Problem Information
  # ----------------------------------------------------------
  Problem: 
  - Lower bound: -inf
    Upper bound: inf
    Number of objectives: 1
    Number of constraints: 0
    Number of variables: 2
    Sense: unknown
  # ----------------------------------------------------------
  #   Solver Information
  # ----------------------------------------------------------
  Solver: 
  - Status: ok
    Message: bonmin\x3a Optimal
    Termination condition: optimal
    Id: 3
    Error rc: 0
    Time: 0.20000028610229492
  # ----------------------------------------------------------
  #   Solution Information
  # ----------------------------------------------------------
  Solution: 
  - number of solutions: 0
    number of solutions displayed: 0
  </code></pre>
  
  <p>I am sorry if I appear to be spamming my post with code. Just thought it would be helpful, since I think this indicated that the problem lies with the solver rather than the modelling with pyomo.</p>