Pagmo.NET.Ipopt 1.0.0

dotnet add package Pagmo.NET.Ipopt --version 1.0.0
                    
NuGet\Install-Package Pagmo.NET.Ipopt -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Pagmo.NET.Ipopt" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Pagmo.NET.Ipopt" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="Pagmo.NET.Ipopt" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Pagmo.NET.Ipopt --version 1.0.0
                    
#r "nuget: Pagmo.NET.Ipopt, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Pagmo.NET.Ipopt@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Pagmo.NET.Ipopt&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=Pagmo.NET.Ipopt&version=1.0.0
                    
Install as a Cake Tool

Pagmo.NET.Ipopt

The IPOPT (Interior Point OPTimizer) native runtime for Pagmo.NET. This is a pure native payload: it bundles the libipopt shared library and its dependency closure (MUMPS, OpenBLAS, the GCC runtime) and nothing else. The base Pagmo.NET package already contains the ipopt algorithm, which loads this library at runtime via dlopen; this package simply supplies it so the algorithm works out of the box.

Add it alongside Pagmo.NET (this package depends on the base — you get both). If you would rather bring your own IPOPT (a system install, or the PAGMONET_IPOPT_LIBRARY override), use the base Pagmo.NET package on its own.

IPOPT is a gradient-based interior-point solver for large-scale nonlinear constrained optimization. It requires the problem to supply gradients (has_gradient() = true).

Using Java or Kotlin? The equivalent companion is PagmoNet4j.ipopt.

Requirements

  • .NET 8.0+
  • The base Pagmo.NET package (a dependency of this one — restored automatically)
  • No separate IPOPT installation required — the native binaries are bundled here

Installation

Once published to NuGet.org:

dotnet add package Pagmo.NET.Ipopt --version 1.0.0

Usage

using pagmo;

// IPOPT requires gradients — implement has_gradient() and gradient() on your problem.
using var algo = new ipopt();
algo.set_integer_option("print_level", 0);   // suppress console output
algo.set_numeric_option("tol", 1e-8);        // convergence tolerance

using var island = Island.Create(algo, myGradientProblem, popSize: 1, seed: 42);
island.Evolve(1);
island.WaitCheck();

Useful IPOPT options

Option Type Description
tol numeric Convergence tolerance (default 1e-8)
max_iter integer Maximum iterations (default 3000)
print_level integer Console verbosity 0–12 (default 5)
linear_solver string mumps (default when available), ma27, ma57, ma86, ma97, pardiso
hessian_approximation string exact or limited-memory (L-BFGS)

Log extraction

using var evolved = algo.evolve(pop);
foreach (var line in algo.GetTypedLogLines())
    Console.WriteLine($"iter obj={line.Objective:F6} feasible={line.Feasible}");

int code = algo.GetLastOptimizationResultCode();
// 0 = Solve_Succeeded, 1 = Solved_To_Acceptable_Level

Known limitations

  • Linear solver: MUMPS only (SPRAL / HSL not included). This package bundles the prebuilt conda-forge ipopt binary as-is, so its linear-solver set is conda-forge's build decision, not ours: conda-forge builds IPOPT with the open-source MUMPS solver (the standard default) and without SPRAL or the license-restricted HSL (MA27/MA57/…). MUMPS covers general nonlinear constrained problems. If you specifically need SPRAL or HSL, build your own IPOPT with them and point PAGMONET_IPOPT_LIBRARY at it.

License

This package is licensed under the EPL-2.0, matching IPOPT. See LICENSE and NOTICE.

It bundles pre-built native binaries from the following third-party projects, each under its own license:

Component License Linking
IPOPT EPL-2.0 Dynamic (bundled), loaded at runtime via dlopen — never linked into the base
MUMPS CeCILL-C Dynamic (bundled), part of the IPOPT dependency closure
OpenBLAS BSD-3-Clause Dynamic (bundled), part of the IPOPT dependency closure
pagmo2 LGPL-3.0-or-later / GPL-3.0-or-later Static (via base Pagmo.NET)
Boost.Serialization BSL-1.0 Static (via base Pagmo.NET)
NLopt LGPL-2.1-or-later Static (via base Pagmo.NET)
Intel TBB Apache-2.0 Static (via base Pagmo.NET)

pagmo2 and NLopt (from the base package) are statically linked under the LGPL; you may modify them and relink against your modified versions. Source for all bundled components is available from their upstream repositories. EPL-2.0 (IPOPT) permits use in proprietary applications without source-disclosure obligations.

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 154 8/12/2026
1.0.0-rc.7 79 7/27/2026
1.0.0-rc.6 86 7/27/2026
1.0.0-rc.5 83 7/25/2026
1.0.0-rc.4 68 7/16/2026