title: scipy - why isn't COBYLA respecting constraint?
body: <p>I'm using COBYLA to do a cost minimization on a linear objective function with constraints. I'm implementing lower and upper bounds by including a constraint for each.</p>
  
  <pre><code>import numpy as np
  import scipy.optimize
  
  def linear_cost(factor_prices):
      def cost_fn(x):
          return np.dot(factor_prices, x)
      return cost_fn
  
  
  def cobb_douglas(factor_elasticities):
      def tech_fn(x):
          return np.product(np.power(x, factor_elasticities), axis=1)
      return tech_fn
  
  def mincost(targets, cost_fn, tech_fn, bounds):
  
      n = len(bounds)
      m = len(targets)
  
      x0 = np.ones(n)  # Do not use np.zeros.
  
      cons = []
  
      for factor in range(n):
          lower, upper = bounds[factor]
          l = {'type': 'ineq',
               'fun': lambda x: x[factor] - lower}
          u = {'type': 'ineq',
               'fun': lambda x: upper - x[factor]}
          cons.append(l)
          cons.append(u)
  
      for output in range(m):
          t = {'type': 'ineq',
               'fun': lambda x: tech_fn(x)[output] - targets[output]}
          cons.append(t)
  
      res = scipy.optimize.minimize(cost_fn, x0,
                                    constraints=cons,
                                    method='COBYLA')
  
      return res
  </code></pre>
  
  <p>COBYLA doesn't respect the upper or lower-bound constraints, but it does respect the technology constraint.</p>
  
  <pre><code>&gt;&gt;&gt; p = np.array([5., 20.])
  &gt;&gt;&gt; cost_fn = linear_cost(p)
  
  &gt;&gt;&gt; fe = np.array([[0.5, 0.5]])
  &gt;&gt;&gt; tech_fn = cobb_douglas(fe)
  
  &gt;&gt;&gt; bounds = [[0.0, 15.0], [0.0, float('inf')]]
  
  &gt;&gt;&gt; mincost(np.array([12.0]), cost_fn, tech_fn, bounds)
         x: array([ 24.00010147,   5.99997463])
   message: 'Optimization terminated successfully.'
     maxcv: 1.9607782064667845e-10
      nfev: 75
    status: 1
   success: True
       fun: 239.99999999822359
  </code></pre>
  
  <p>Why wouldn't COBYLA respect the first factor constraint (i.e. upper-bound @ 15)?</p>