.NET interface to Ipopt non-linear optimizer
C# Visual Basic F# Shell
Switch branches/tags



Copyright (c) 2010-2013 Anders Gustafsson, Cureos AB.
Published under the Eclipse Public License.


csipopt provides a small and simple C# interface to the Ipopt non-linear optimizer. If the interface is contained in a .NET class library, the interface is accessible via any .NET language. .NET Framework 2.0 or higher is required.

It is also possible to build and use csipopt in Silverlight applications using elevated trust privileges and Windows Store applications.

The most up-to-date usage information can be found on the wiki pages.


To successfully run an application calling the C# Ipopt interface, a dynamic linked library of Ipopt is additionally required. Pre-compiled libraries can be downloaded from the following location.

At the time of this writing, the most up-to-date binaries, version 3.11.0, can be downloaded here.

Download binaries suitable for your platform, unpack the compressed Ipopt binary archive, from the folder ./lib/PLATFORM/ReleaseMKL (where PLATFORM is win32 or x64) copy the DLL files and place them in a folder that is accessible from the application or system path.

(Note! The actual name of the DLL is of course dependent upon which version of Ipopt binaries you are downloading.)


It is possible to build stand-alone class libraries with all csipopt code from the Cureos.Numerics solution. Open this solution in Visual Studio 2010 or 2012 and build the Cureos.Numerics (.NET 4 and higher) or Metro.Cureos.Numerics (Windows Store applications) project, then reference the built project in your own application.

To use the C# interface in your own code, you can also copy the C# files Ipopt*.cs to your class library. (Potentially, you may need to redefine the IpoptDllName in the IpoptAdapter.cs file to match the name of the native Ipopt DLL.)

A number of build scripts are provided in the build sub-folder to demonstrate example usage of the C# Ipopt interface.

Visual Studio examples

When running from the Visual Studio command prompt, create a class library by running the batch script


Create an example application from the C# file Program.cs by running the batch script


There is an alternative C# build script enforcing the intermediate callback method (introduced in Ipopt 3.9) to be utilized. To create an example application using the intermediate callback method, run


Analogously, create an example application from the Visual Basic file Program.vb or F# file Program.fs by running either of the batch scripts


To run the respective applications, type


Mono examples

The interface is also applicable to Mono, and can be compiled using the gmcs compiler. When running from the Mono command prompt, create a class library by running the batch script


Create an example application from the C# file Program.cs by running the batch script


To run the example application, type

mono hs071_cs_mono.exe

NOTE! The Mono runtime is more conservative when handling array marshaling in unmanaged function pointers, i.e. the callback functions. This is handled through a modification of the signatures of the Eval_Jac_G_CB and Eval_H_CB delegates and explicit copying of arrays in the managed function wrappers in IpoptProblem. To access these modifications, build the library with the MONO symbol defined.


Last updated on May 27, 2013 by Anders Gustafsson, anders[at]cureos[dot]com, http://www.cureos.com.