Skip to content
sandeep026Public

About

A lightweight interface for solving CasADi Opti problems using the Uno modular non-linear programming (NLP) solver.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Latest commit

 

History

50 Commits

Folders and files

Repository files navigation

casuno

casuno bridges the CasADi Opti optimization modeling stack with unopy , a modular C++ framework for non-linear optimization. It automatically extracts symbolic expressions, sparsity patterns, and callback structures from CasADi Opti problems to build native unopy.Model instances .

Update

  • Starting with CasADi 3.8+, UNO is officially supported natively, resolving the majority of previous casuno limitations. That said, casuno can still be used if you prefer to test your formulation against the latest unopy release.

Key Features

  • Automated Model Conversion: Converts CasADi decision vectors, nonlinear objective functions, constraints, and bounds into standard unopy models.
  • Sparsity Extraction: Automatically determines and maps sparse Jacobian and lower-triangular Hessian sparsity triplets.
  • Efficient Evaluations: Generates compiled CasADi numerical callbacks for exact Hessians and Lagrangian Hessian-vector products.
  • Solver Flexibility: Works directly with Uno solver presets, including ipopt and filtersqp.

Prerequisites & Installation

  1. Python 3.8+
  2. CasADi
  3. NumPy

Installation can be done either via pip or poetry (recommended).

pip install git+https://github.com/sandeep026/casuno.git
poetry install

Run the following to verify installation.

poetry run python examples.py
python examples.py

Quickstart

import casadi as cs
import unopy
from casuno import opti2unomodel, print_stats

# 1. Define problem with CasADi Opti
opti = cs.Opti()
x = opti.variable(2)

opti.minimize((x[0] - 1)**2 + (x[1] - 2.5)**2)
opti.subject_to(x[0] - 2 * x[1] + 2 >= 0)
opti.subject_to(-x[0] - 2 * x[1] + 6 >= 0)

x0 = [0.0, 0.0]

# 2. Convert Opti problem to unopy Model
model = opti2unomodel(opti=opti, x0=x0)

# 3. Configure Uno Solver
solver = unopy.UnoSolver()
solver.set_preset("ipopt")
# 4. Solve and output stats
result = solver.optimize(model)
print_stats(result)

Core Components

Component Functionality
opti2unomodel(opti, x0) Extracts symbols, jacobians, hessians, and sparse indices from cs.Opti to initialize and return a unopy.Model.
print_stats(result) Prints optimization status, objective value, execution timing, and iteration count from the Uno solution structure.

Running Benchmarks & Tests

To validate casuno against CasADi's built-in IPOPT interface across registered test problems (such as kelly_ocp, racecar_ocp, and hs015_nlp):

pytest

Limitation

While functional, casuno is still in active development. Please keep the following in mind:

  • Simple Bounds: Opti does not treat simple variable bounds ($\underline{x} \le x \le \bar{x}$) differently from general constraints. Consequently, casuno implements these as nonlinear constraints, which is less efficient than native solver bounds.
  • Overhead: For extremely large-scale problems, the data conversion layer (CasADi DM ➔ NumPy ➔ Flattened C-style) may introduce noticeable overhead.
  • Hessian Vector Products: The HVP operator is implemented but requires further verification for edge cases.

Note: Not a limiation of the wrapper but it is important to construct the NLP using Opti() such that the expression graph is efficient. As this user dependent, it adviced to follow best practices mentioned in casadi's Github Wiki.

Quick start

The repository includes:

  • Race Car Problem: A classic trajectory optimization benchmark from the CasADi repository.

  • Move Block: Implementation of the collocation example from Matthew Kelly’s "How to do your own direct collocation"

  • hs015: Hock-Schittkowski suite

  • opti_problems.py - opti models are created here and stored in a dict registry

  • test.py - solves the optimization within casadi's IPOPT and unopy's IPOPT present and checks

  • examples.py - use this run all the problems (nlp and Ocps) from opti_problem.py

The code below runs IPOPT from casadi and IPOPT preset from unopy to solve the set of NLPs.

code

from opti_problems import registry as models
from opti2unopy import opti2unomodel, print_stats
import unopy

# for discrete OCPs the discretization intervals can be set using n
# solve flag lets u solve nlp from within opti with IPOPT
opti,x0,xsol=models['kelly_ocp'](n=1000,solve=True)
#generate unopy model of NLP from opti 
model=opti2unomodel(opti=opti,x0=x0)   
solver = unopy.UnoSolver() 
# create solver class and configure (ipopt/filtersqp)     
# use the exact hessian. better than lbfgs is most cases tested     
solver.set_preset('ipopt')
solver.set_option("hessian_model", "exact")
solver.set_option('inertia_correction_strategy','primal')
result = solver.optimize(model)
print_stats(result=result)

opti,x0,xsol=models['racecar_ocp'](n=1000,solve=True) 
model=opti2unomodel(opti=opti,x0=x0)   
solver = unopy.UnoSolver()            
solver.set_preset('ipopt')
solver.set_option("hessian_model", "exact") 
solver.set_option('inertia_correction_strategy','primal')
result = solver.optimize(model)
print_stats(result=result)


opti,x0,xsol=models['hs015_nlp'](solve=True) 
model=opti2unomodel(opti=opti,x0=x0) 
solver = unopy.UnoSolver()           
solver.set_preset('ipopt')
solver.set_option("hessian_model", "exact") # better than lbfgs
solver.set_option('inertia_correction_strategy','primal')
result = solver.optimize(model)
print_stats(result=result)

Output

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 https://github.com/coin-or/Ipopt
******************************************************************************

Total number of variables............................:     3003
                     variables with only lower bounds:        0
                variables with lower and upper bounds:        0
                     variables with only upper bounds:        0
Total number of equality constraints.................:     2004
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0


Number of Iterations....: 1

                                   (scaled)                 (unscaled)
Objective...............:   6.0000060000059996e+00    6.0000060000059996e+00
Dual infeasibility......:   1.7763568394002505e-15    1.7763568394002505e-15
Constraint violation....:   2.7040002181788481e-16    2.7040002181788481e-16
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   0.0000000000000000e+00    0.0000000000000000e+00
Overall NLP error.......:   1.7763568394002505e-15    1.7763568394002505e-15


Number of objective function evaluations             = 2
Number of objective gradient evaluations             = 2
Number of equality constraint evaluations            = 2
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 2
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 1
Total seconds in IPOPT                               = 0.036

EXIT: Optimal Solution Found.
      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval
       nlp_f  |        0 (       0)  20.00us ( 10.00us)         2
       nlp_g  |  13.00ms (  6.50ms) 658.00us (329.00us)         2
  nlp_grad_f  |        0 (       0)  43.00us ( 14.33us)         3
  nlp_hess_l  |        0 (       0)  15.00us ( 15.00us)         1
   nlp_jac_g  |        0 (       0)   1.17ms (389.00us)         3
       total  |  46.00ms ( 46.00ms)  37.23ms ( 37.23ms)         1
opti construction+ IPOPT solve time [s]: 0.25543569999717874
opti2unopy construction time [s]: 0.14171770000029937
Original model Python model
3003 variables, 2004 constraints (2004 equality, 0 inequality)
Problem type: NLP
Reformulated model Python model -> no fixed bounds -> equality constrained -> bounds relaxed
3003 variables, 2004 constraints (2004 equality, 0 inequality)
The problem has no inequalities, picking a pure SQP method

Non-default options:
linear_solver = MUMPS

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major  Minor  Penalty   Barrier   Steplength Phase Regulariz ||Step||  Objective  Infeas    Statio    Compl     Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 0      -      -         -         -          OPT   -         -         5.005e-01  5.00e+00  1.00e-03  0.00e+00  initial point 
 1      1      -         -         1.00e+00   OPT   0.00e+00  6.99e+00  6.000e+00  3.00e-13  1.78e-14  0.00e+00  ✔ (h-type)    
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major  Minor  Penalty   Barrier   Steplength Phase Regulariz ||Step||  Objective  Infeas    Statio    Compl     Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Uno 2.7.1 (LS Waechter-filter restoration pure SQP method with exact Hessian and primal inertia correction)
Fri May  1 06:18:55 2026
────────────────────────────────────────
Optimization status:                    Success
Solution status:                        Feasible KKT point
Objective value:                        6.000006
Primal feasibility:                     2.996752e-13
┌ Stationarity residual:                1.776357e-14
│ Primal feasibility:                   2.996752e-13
└ Complementarity residual:             0
CPU time:                               0.032s
Iterations:                             1
Objective evaluations:                  2
Constraints evaluations:                2
Objective gradient evaluations:         2
Jacobian evaluations:                   2
Hessian evaluations:                    1
Number of subproblems solved:           1
Optimization Status: OptimizationStatus.SUCCESS
Solution Status    : SolutionStatus.FEASIBLE_KKT_POINT
Objective Value    : 6.000006000006482
cpu                : 0.032
iterations         : 1
Total number of variables............................:     3003
                     variables with only lower bounds:        0
                variables with lower and upper bounds:        0
                     variables with only upper bounds:        0
Total number of equality constraints.................:     2003
Total number of inequality constraints...............:     2002
        inequality constraints with only lower bounds:        1
   inequality constraints with lower and upper bounds:     1000
        inequality constraints with only upper bounds:     1001


Number of Iterations....: 29

                                   (scaled)                 (unscaled)
Objective...............:   1.9046834150970160e+00    1.9046834150970160e+00
Dual infeasibility......:   3.2030740282351644e-09    3.2030740282351644e-09
Constraint violation....:   9.2370555648813024e-14    9.2370555648813024e-14
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   4.1985839630552773e-09    4.1985839630552773e-09
Overall NLP error.......:   4.1985839630552773e-09    4.1985839630552773e-09


Number of objective function evaluations             = 31
Number of objective gradient evaluations             = 30
Number of equality constraint evaluations            = 31
Number of inequality constraint evaluations          = 31
Number of equality constraint Jacobian evaluations   = 30
Number of inequality constraint Jacobian evaluations = 30
Number of Lagrangian Hessian evaluations             = 29
Total seconds in IPOPT                               = 0.744

EXIT: Optimal Solution Found.
      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval
       nlp_f  |        0 (       0)  35.00us (  1.13us)        31
       nlp_g  |  17.00ms (548.39us)   9.40ms (303.29us)        31
  nlp_grad_f  |        0 (       0) 174.00us (  5.61us)        31
  nlp_hess_l  |  69.00ms (  2.38ms)  41.83ms (  1.44ms)        29
   nlp_jac_g  |  23.00ms (741.94us)  40.77ms (  1.32ms)        31
       total  | 749.00ms (749.00ms) 744.94ms (744.94ms)         1
opti construction+ IPOPT solve time [s]: 0.7915601000022434
opti2unopy construction time [s]: 0.029683599997952115
Original model Python model
3003 variables, 4005 constraints (2003 equality, 2002 inequality)
Problem type: NLP
Reformulated model Python model -> no fixed bounds -> equality constrained -> bounds relaxed
5005 variables, 4005 constraints (4005 equality, 0 inequality)

Non-default options:
linear_solver = MUMPS

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major  Minor  Penalty   Barrier   Steplength Phase Regulariz ||Step||  Objective  Infeas    Statio    Compl     Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 0      -      -         -         -          OPT   -         -         1.000e+00  2.30e+01  1.00e+00  9.90e-01  initial point 
 1      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  2.20e-02  1.002e+00  2.29e+01  2.20e+00  9.93e-01  ✔ (h-type)    
 2      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  2.29e-01  1.037e+00  2.30e+01  4.98e+00  1.01e+00  ✔ (h-type)    
 3      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  3.66e+00  1.664e+00  1.73e+03  8.28e+02  1.46e+00  ✔ (h-type)    
 4      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  2.74e+00  1.883e+00  9.56e+01  8.73e+01  1.62e-01  ✔ (h-type)    
 5      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  3.79e-01  1.918e+00  5.82e+01  5.30e+01  1.08e-01  ✔ (h-type)    
 6      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  3.46e-01  2.083e+00  3.67e+01  3.45e+01  9.94e-02  ✔ (h-type)    
 7      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  9.52e-01  2.440e+00  1.95e-01  5.38e+00  7.03e-02  ✔ (h-type)    
 8      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  4.30e-01  2.869e+00  1.21e-01  7.76e-01  3.11e-02  ✔ (h-type)    
 9      1      -         2.00e-02  1.00e+00   OPT   0.00e+00  5.53e-01  3.422e+00  1.09e+01  2.16e-01  2.33e-02  ✔ (h-type)    
 10     1      -         2.00e-02  1.00e+00   OPT   0.00e+00  1.09e-01  3.508e+00  1.84e+00  3.15e-02  2.25e-02  ✔ (h-type)    
 11     1      -         2.83e-03  1.00e+00   OPT   0.00e+00  1.92e-01  3.316e+00  6.73e-02  6.72e-02  4.15e-03  ✔ (h-type)    
 12     1      -         2.83e-03  1.00e+00   OPT   0.00e+00  5.22e-01  2.794e+00  6.24e-01  4.73e-02  3.34e-03  ✔ (h-type)    
 13     1      -         2.83e-03  1.00e+00   OPT   0.00e+00  6.75e-02  2.862e+00  3.39e-02  3.99e-04  2.84e-03  ✔ (h-type)    
 14     1      -         1.50e-04  1.00e+00   OPT   0.00e+00  3.85e-01  2.477e+00  3.12e-01  1.14e-02  9.15e-04  ✔ (h-type)    
 15     1      -         1.50e-04  1.00e+00   OPT   0.00e+00  3.60e-01  2.117e+00  5.86e-01  4.54e-02  3.02e-04  ✔ (h-type)    
 16     1      -         1.50e-04  1.00e+00   OPT   0.00e+00  1.66e-01  2.024e+00  6.37e-01  -         -         ✘ (h-type)    
 -      2      -         -         5.00e-01   -     -         8.29e-02  2.071e+00  4.52e-01  2.35e-02  2.28e-04  ✔ (h-type)    
 17     1      -         1.50e-04  1.00e+00   OPT   0.00e+00  7.17e-02  2.031e+00  8.81e-02  6.92e-04  1.55e-04  ✔ (h-type)    
 18     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  9.03e-02  1.961e+00  1.29e-01  1.43e-03  6.51e-05  ✔ (h-type)    
 19     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  2.18e-01  1.936e+00  8.76e-02  2.66e-02  3.68e-05  ✔ (h-type)    
 20     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  2.41e-01  1.917e+00  4.31e-02  5.05e-02  1.59e-05  ✔ (h-type)    
 21     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  3.72e-01  1.908e+00  1.07e-02  2.08e-02  9.39e-06  ✔ (h-type)    
 22     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  4.37e-01  1.907e+00  1.29e-04  1.93e-05  4.08e-06  ✔ (h-type)    
 23     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  1.88e-01  1.907e+00  5.69e-08  -         -         ✘ (f-type)    
 -      2      -         -         5.00e-01   -     -         9.42e-02  1.907e+00  6.46e-05  5.51e-02  2.60e-06  ✔ (f-type)    
 24     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  7.57e-02  1.907e+00  1.32e-08  1.99e-06  1.89e-06  ✔ (h-type)    
 25     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  1.82e-01  1.905e+00  3.38e-05  1.13e-02  8.75e-07  ✔ (f-type)    
 26     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  2.06e-01  1.905e+00  2.02e-05  1.84e-02  4.71e-07  ✔ (f-type)    
 27     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  3.05e-01  1.905e+00  4.29e-06  5.67e-02  1.76e-07  ✔ (f-type)    
 28     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  2.74e-02  1.905e+00  6.48e-08  3.78e-02  9.57e-08  ✔ (f-type)    
 29     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  4.94e-03  1.905e+00  1.38e-11  7.55e-03  2.48e-08  ✔ (f-type)    
 30     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  3.26e-03  1.905e+00  4.05e-13  2.97e-09  4.07e-09  ✔ (f-type)    
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major  Minor  Penalty   Barrier   Steplength Phase Regulariz ||Step||  Objective  Infeas    Statio    Compl     Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Uno 2.7.1 (LS Waechter-filter restoration primal-dual interior-point method with exact Hessian and primal inertia correction)
Fri May  1 06:18:57 2026
────────────────────────────────────────
Optimization status:                    Success
Solution status:                        Feasible KKT point
Objective value:                        1.904683
Primal feasibility:                     4.046774e-13
┌ Stationarity residual:                2.967755e-09
│ Primal feasibility:                   4.046774e-13
└ Complementarity residual:             4.067326e-09
CPU time:                               0.461s
Iterations:                             30
Objective evaluations:                  33
Constraints evaluations:                34
Objective gradient evaluations:         33
Jacobian evaluations:                   33
Hessian evaluations:                    30
Number of subproblems solved:           30
Optimization Status: OptimizationStatus.SUCCESS
Solution Status    : SolutionStatus.FEASIBLE_KKT_POINT
Objective Value    : 1.904683414990099
cpu                : 0.461
iterations         : 30
Total number of variables............................:        2
                     variables with only lower bounds:        0
                variables with lower and upper bounds:        0
                     variables with only upper bounds:        0
Total number of equality constraints.................:        0
Total number of inequality constraints...............:        3
        inequality constraints with only lower bounds:        2
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        1


Number of Iterations....: 16

                                   (scaled)                 (unscaled)
Objective...............:   1.2738984854970598e+01    3.0649997561059257e+02
Dual infeasibility......:   4.3165471197426086e-13    1.0385612370100716e-11
Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   2.5062671019034313e-09    6.0300786471796554e-08
Overall NLP error.......:   2.5062671019034313e-09    6.0300786471796554e-08


Number of objective function evaluations             = 25
Number of objective gradient evaluations             = 17
Number of equality constraint evaluations            = 0
Number of inequality constraint evaluations          = 25
Number of equality constraint Jacobian evaluations   = 0
Number of inequality constraint Jacobian evaluations = 17
Number of Lagrangian Hessian evaluations             = 16
Total seconds in IPOPT                               = 0.009

EXIT: Optimal Solution Found.
      solver  :   t_proc      (avg)   t_wall      (avg)    n_eval
       nlp_f  |        0 (       0)  29.00us (  1.16us)        25
       nlp_g  |        0 (       0)  31.00us (  1.24us)        25
  nlp_grad_f  |        0 (       0)  24.00us (  1.33us)        18
  nlp_hess_l  |        0 (       0)  49.00us (  3.06us)        16
   nlp_jac_g  |        0 (       0)  37.00us (  2.06us)        18
       total  |  10.00ms ( 10.00ms)  10.07ms ( 10.07ms)         1
opti construction+ IPOPT solve time [s]: 0.014597200002754107
opti2unopy construction time [s]: 0.0013611000031232834
Original model Python model
2 variables, 3 constraints (0 equality, 3 inequality)
Problem type: NLP
Reformulated model Python model -> no fixed bounds -> equality constrained -> bounds relaxed
5 variables, 3 constraints (3 equality, 0 inequality)

Non-default options:
linear_solver = MUMPS

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major  Minor  Penalty   Barrier   Steplength Phase Regulariz ||Step||  Objective  Infeas    Statio    Compl     Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 0      -      -         -         -          OPT   -         -         9.090e+02  4.02e+00  2.41e+03  2.50e+00  initial point 
 1      1      -         1.00e-01  1.00e+00   OPT   0.00e+00  9.90e-03  9.006e+02  4.00e+00  2.39e+03  7.72e-01  ✔ (h-type)    
 2      1      -         1.00e-01  1.00e+00   OPT   0.00e+00  7.04e-02  7.534e+02  3.85e+00  2.96e+03  6.82e-01  ✔ (h-type)    
 3      1      -         1.00e-01  1.00e+00   OPT   0.00e+00  1.95e+00  2.338e+01  1.24e+00  4.19e+03  1.26e-01  ✔ (h-type)    
 4      1      -         1.00e-01  1.00e+00   OPT   0.00e+00  5.47e-01  1.034e+01  1.54e+00  4.31e+03  8.15e-02  ✔ (h-type)    
 5      1      -         1.00e-01  1.00e+00   OPT   0.00e+00  2.30e+00  4.508e+02  5.68e+00  -         -         ✘ (h-type)    
 -      2      -         -         5.00e-01   -     -         1.15e+00  8.305e+01  2.19e+00  -         -         ✘ (h-type)    
 -      3      -         -         2.50e-01   -     -         5.75e-01  9.160e+00  1.51e+00  9.95e+03  1.26e-01  ✔ (h-type)    
 6      1      -         1.00e-01  1.00e+00   OPT   1.34e+04  2.88e-02  7.901e+00  1.47e+00  9.31e+03  5.53e-02  ✔ (h-type)    
 7      1      -         1.00e-01  1.00e+00   OPT   1.34e+04  2.88e-04  7.892e+00  1.47e+00  9.33e+03  5.54e-02  ✔ (h-type)    
 8      1      -         1.00e-01  1.00e+00   OPT   1.34e+04  6.23e-04  7.910e+00  1.47e+00  9.29e+03  5.53e-02  ✔ (h-type)    
 9      1      -         1.00e-01  1.00e+00   OPT   1.34e+04  5.18e-01  3.238e+01  1.24e+00  8.83e+04  7.03e+01  ✔ (h-type)    
 10     1      -         1.00e-01  1.00e+00   OPT   0.00e+00  1.99e-03  3.239e+01  1.24e+00  6.60e+04  4.55e+01  ✔ (h-type)    
 11     1      -         1.00e-01  1.00e+00   OPT   0.00e+00  2.20e-01  4.483e+01  1.14e+00  5.57e+04  3.92e+01  ✔ (h-type)    
 12     1      -         1.00e-01  1.00e+00   OPT   0.00e+00  2.59e+00  3.068e+02  1.17e+00  -         -         ✘ (h-type)    
 -      2      -         -         5.00e-01   -     -         1.29e+00  1.465e+02  8.65e-01  1.77e+04  1.04e+01  ✔ (h-type)    
 13     1      -         1.00e-01  1.00e+00   OPT   0.00e+00  2.17e+00  3.067e+02  2.93e-01  7.33e+03  4.00e+00  ✔ (h-type)    
 14     1      -         1.00e-01  1.00e+00   OPT   0.00e+00  2.93e-01  3.067e+02  1.28e-10  5.37e-02  2.27e-01  ✔ (h-type)    
 15     1      -         1.50e-04  1.00e+00   OPT   0.00e+00  2.73e-03  3.065e+02  4.74e-07  9.14e-05  2.15e-04  ✔ (f-type)    
 16     1      -         1.84e-06  1.00e+00   OPT   0.00e+00  3.03e-06  3.065e+02  8.83e-13  1.45e-10  1.85e-06  ✔ (f-type)    
 17     1      -         2.51e-09  1.00e+00   OPT   0.00e+00  3.68e-08  3.065e+02  9.99e-16  4.55e-13  2.51e-09  ✔ (f-type)    
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  Iterations
 Major  Minor  Penalty   Barrier   Steplength Phase Regulariz ||Step||  Objective  Infeas    Statio    Compl     Status        
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Uno 2.7.1 (LS Waechter-filter restoration primal-dual interior-point method with exact Hessian and primal inertia correction)
Fri May  1 06:18:57 2026
────────────────────────────────────────
Optimization status:                    Success
Solution status:                        Feasible KKT point
Objective value:                        306.5
Primal feasibility:                     9.992007e-16
┌ Stationarity residual:                4.547474e-13
│ Primal feasibility:                   9.992007e-16
└ Complementarity residual:             2.506011e-09
CPU time:                               0.088s
Iterations:                             17
Objective evaluations:                  21
Constraints evaluations:                22
Objective gradient evaluations:         21
Jacobian evaluations:                   21
Hessian evaluations:                    17
Number of subproblems solved:           17
Optimization Status: OptimizationStatus.SUCCESS
Solution Status    : SolutionStatus.FEASIBLE_KKT_POINT
Objective Value    : 306.4999754950125
cpu                : 0.088
iterations         : 17

About

A lightweight interface for solving CasADi Opti problems using the Uno modular non-linear programming (NLP) solver.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages