title: Python equivalent for Matlab's fmincon for constrained nonlinear optimization
body: <p>I'm currently trying to implement a Python script for solving a constrained nonlinear optimization problem with ~1000 variables and ~700 constraints (both linear and nonlinear). There already exists a Matlab implementation of this script, so I'm essentially just trying to find a Python solver that has equivalent performance to Matlab's <code>fmincon()</code>.</p>
  <p>The Matlab code has analytic solutions for both the objective and constraint hessian and jacobian, which I've rewritten entirely in Python. I've verified that the Python code is correct by calling the Python hessian/jacobian function from <code>fmincon()</code> and making sure that the same solution is reached. For reference, the Matlab code passes the following options to <code>fmincon()</code>:</p>
  <pre><code>fmincon options:
  
     Options used by current Algorithm ('interior-point'):
     (Other available algorithms: 'active-set', 'sqp', 'sqp-legacy', 'trust-region-reflective')
  
     Set properties:
                      Algorithm: 'interior-point'
                 CheckGradients: 0
                        Display: 'none'
           HessianApproximation: 'on'
                     HessianFcn: @(x,lambda)hessian(x,lambda,bCells,d0,rBX,rBY,mask)
         MaxFunctionEvaluations: 1000000
                  MaxIterations: 2000
            OptimalityTolerance: 1.0000e-06
      SpecifyConstraintGradient: 1
       SpecifyObjectiveGradient: 1
  
     Default properties:
             BarrierParamUpdate: 'monotone'
            ConstraintTolerance: 1.0000e-06
       FiniteDifferenceStepSize: 'sqrt(eps)'
           FiniteDifferenceType: 'forward'
             HessianMultiplyFcn: []
                    HonorBounds: 1
                 ObjectiveLimit: -1.0000e+20
                      OutputFcn: []
                        PlotFcn: []
                   ScaleProblem: 0
                  StepTolerance: 1.0000e-10
            SubproblemAlgorithm: 'factorization'
                       TypicalX: 'ones(numberOfVariables,1)'
                    UseParallel: 0
  </code></pre>
  <p>So far I've attempted to use <code>trust-constr</code> algorithm in <code>scipy.optimize.minimize</code> and <code>cyipopt</code> but neither of these have worked. <code>trust-constr</code> doesn't perform as well and in particular might be struggling with parameter scaling (variables with smaller values are far away from the optimal value), while <code>cyipopt</code> doesn't converge at all. Both of these optimizers are also much slower than <code>fmincon()</code>. Are there any other Python packages that come close to the performance of <code>fmincon()</code>?</p>