Releases: PagmoNET/pagmoNet
Release list
pagmoNet v1.0.0
Release Notes
v1.0.0
First stable release of the PagmoNet family — C# (Pagmo.NET) and Java/Kotlin (PagmoNet4j)
bindings for pagmo2, built from one shared SWIG + native layer.
Highlights
- Deferred-load IPOPT (MPL base, EPL companion). The base packages contain the
ipopt
algorithm but link no IPOPT — it loadslibipoptat runtime viadlopen/LoadLibrary, so the
base stays MPL-2.0 and EPL-free (NLopt is statically included under LGPL). Add the
Pagmo.NET.Ipopt/pagmonet4j-ipoptEPL-2.0 companion to bundle alibipoptfor every
platform, install one system-wide, or pointPAGMONET_IPOPT_LIBRARYat your own. Without one,
ipoptdegrades gracefully — checkOptionalSolverAvailability.IsIpoptAvailable/
isIpoptAvailable(). - Cross-language parity. The C# and Java/Kotlin APIs are kept deliberately close (pagmo's
snake_case names are identical across both). Both expose typed structured logs for every
wrapped algorithm (GetTypedLogLines()/getTypedLogLines()), the managed problem/algorithm
(UDP/UDA) architecture, thread-safe and cloneable problems, archipelago migration policies, and a
grid_searchdemonstration UDA. A "Porting from Pagmo.NET" guide lists the handful of C#→Java
translate-time differences. - Kotlin DSLs.
pagmonet4j-kotlinprovides idiomatic Kotlin over islands, archipelagos,
problems, and algorithms, plus multi-objective utilities, hypervolume, and batch-fitness evaluation. - Platforms. Windows x64, Linux x64, and macOS (arm64 + x86_64 universal). Native runtimes are
bundled in every package — no separate installation on any supported platform. - Reproducible release. The release pipeline regenerates the SWIG bindings and rebuilds the
native layer the same way the build/test pipeline does (ship == test); a single version tag
publishes all five packages in lockstep at one single-sourced version. - Licensing. Base packages are MPL-2.0; the IPOPT companions are EPL-2.0. Each package ships the
verbatim texts of its statically-linked third-party components (pagmo2 / NLopt LGPL, GPL, Boost,
Intel TBB) plus aRELINKING.mddescribing the LGPL relink path. SeeLICENSING.md.
Breaking / Behavior Notes
- Archipelago topology validation. Setting a connected topology whose vertex count exceeds the
archipelago's island count (e.g.new ring(8)on an archipelago that is not already 8 islands) now
throws a clear error immediately, instead of failing later insideevolve()with a cryptic
cannot access the migrants of the island. Set an empty topology on an empty archipelago and grow
it withpush_back, or size the topology to match the existing islands. - No other breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Historical — superseded by v1.0.0. This entry describes the pre-release "superset"
model in which IPOPT was statically linked into the base and
OptionalSolverAvailability.IsIpoptAvailablereturnedtrueout of the box. As of
v1.0.0 the base links no IPOPT and loadslibipoptat runtime viadlopen; IPOPT is
unavailable unless thePagmo.NET.Ipoptcompanion (or a system/PAGMONET_IPOPT_LIBRARY
library) is present. The IPOPT rows in the environment matrix below reflect the old model.
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64... |
pagmoNet v1.0.0-rc.7
Release Notes
v1.0.0
First stable release of the PagmoNet family — C# (Pagmo.NET) and Java/Kotlin (PagmoNet4j)
bindings for pagmo2, built from one shared SWIG + native layer.
Highlights
- Deferred-load IPOPT (MPL base, EPL companion). The base packages contain the
ipopt
algorithm but link no IPOPT — it loadslibipoptat runtime viadlopen/LoadLibrary, so the
base stays MPL-2.0 and EPL-free (NLopt is statically included under LGPL). Add the
Pagmo.NET.Ipopt/pagmonet4j-ipoptEPL-2.0 companion to bundle alibipoptfor every
platform, install one system-wide, or pointPAGMONET_IPOPT_LIBRARYat your own. Without one,
ipoptdegrades gracefully — checkOptionalSolverAvailability.IsIpoptAvailable/
isIpoptAvailable(). - Cross-language parity. The C# and Java/Kotlin APIs are kept deliberately close (pagmo's
snake_case names are identical across both). Both expose typed structured logs for every
wrapped algorithm (GetTypedLogLines()/getTypedLogLines()), the managed problem/algorithm
(UDP/UDA) architecture, thread-safe and cloneable problems, archipelago migration policies, and a
grid_searchdemonstration UDA. A "Porting from Pagmo.NET" guide lists the handful of C#→Java
translate-time differences. - Kotlin DSLs.
pagmonet4j-kotlinprovides idiomatic Kotlin over islands, archipelagos,
problems, and algorithms, plus multi-objective utilities, hypervolume, and batch-fitness evaluation. - Platforms. Windows x64, Linux x64, and macOS (arm64 + x86_64 universal). Native runtimes are
bundled in every package — no separate installation on any supported platform. - Reproducible release. The release pipeline regenerates the SWIG bindings and rebuilds the
native layer the same way the build/test pipeline does (ship == test); a single version tag
publishes all five packages in lockstep at one single-sourced version. - Licensing. Base packages are MPL-2.0; the IPOPT companions are EPL-2.0. Each package ships the
verbatim texts of its statically-linked third-party components (pagmo2 / NLopt LGPL, GPL, Boost,
Intel TBB) plus aRELINKING.mddescribing the LGPL relink path. SeeLICENSING.md.
Breaking / Behavior Notes
- Archipelago topology validation. Setting a connected topology whose vertex count exceeds the
archipelago's island count (e.g.new ring(8)on an archipelago that is not already 8 islands) now
throws a clear error immediately, instead of failing later insideevolve()with a cryptic
cannot access the migrants of the island. Set an empty topology on an empty archipelago and grow
it withpush_back, or size the topology to match the existing islands. - No other breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Historical — superseded by v1.0.0. This entry describes the pre-release "superset"
model in which IPOPT was statically linked into the base and
OptionalSolverAvailability.IsIpoptAvailablereturnedtrueout of the box. As of
v1.0.0 the base links no IPOPT and loadslibipoptat runtime viadlopen; IPOPT is
unavailable unless thePagmo.NET.Ipoptcompanion (or a system/PAGMONET_IPOPT_LIBRARY
library) is present. The IPOPT rows in the environment matrix below reflect the old model.
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64... |
pagmoNet v1.0.0-rc.6
Release Notes
v1.0.0
First stable release of the PagmoNet family — C# (Pagmo.NET) and Java/Kotlin (PagmoNet4j)
bindings for pagmo2, built from one shared SWIG + native layer.
Highlights
- Deferred-load IPOPT (MPL base, EPL companion). The base packages contain the
ipopt
algorithm but link no IPOPT — it loadslibipoptat runtime viadlopen/LoadLibrary, so the
base stays MPL-2.0 and EPL-free (NLopt is statically included under LGPL). Add the
Pagmo.NET.Ipopt/pagmonet4j-ipoptEPL-2.0 companion to bundle alibipoptfor every
platform, install one system-wide, or pointPAGMONET_IPOPT_LIBRARYat your own. Without one,
ipoptdegrades gracefully — checkOptionalSolverAvailability.IsIpoptAvailable/
isIpoptAvailable(). - Cross-language parity. The C# and Java/Kotlin APIs are kept deliberately close (pagmo's
snake_case names are identical across both). Both expose typed structured logs for every
wrapped algorithm (GetTypedLogLines()/getTypedLogLines()), the managed problem/algorithm
(UDP/UDA) architecture, thread-safe and cloneable problems, archipelago migration policies, and a
grid_searchdemonstration UDA. A "Porting from Pagmo.NET" guide lists the handful of C#→Java
translate-time differences. - Kotlin DSLs.
pagmonet4j-kotlinprovides idiomatic Kotlin over islands, archipelagos,
problems, and algorithms, plus multi-objective utilities, hypervolume, and batch-fitness evaluation. - Platforms. Windows x64, Linux x64, and macOS (arm64 + x86_64 universal). Native runtimes are
bundled in every package — no separate installation on any supported platform. - Reproducible release. The release pipeline regenerates the SWIG bindings and rebuilds the
native layer the same way the build/test pipeline does (ship == test); a single version tag
publishes all five packages in lockstep at one single-sourced version. - Licensing. Base packages are MPL-2.0; the IPOPT companions are EPL-2.0. Each package ships the
verbatim texts of its statically-linked third-party components (pagmo2 / NLopt LGPL, GPL, Boost,
Intel TBB) plus aRELINKING.mddescribing the LGPL relink path. SeeLICENSING.md.
Breaking / Behavior Notes
- Archipelago topology validation. Setting a connected topology whose vertex count exceeds the
archipelago's island count (e.g.new ring(8)on an archipelago that is not already 8 islands) now
throws a clear error immediately, instead of failing later insideevolve()with a cryptic
cannot access the migrants of the island. Set an empty topology on an empty archipelago and grow
it withpush_back, or size the topology to match the existing islands. - No other breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Historical — superseded by v1.0.0. This entry describes the pre-release "superset"
model in which IPOPT was statically linked into the base and
OptionalSolverAvailability.IsIpoptAvailablereturnedtrueout of the box. As of
v1.0.0 the base links no IPOPT and loadslibipoptat runtime viadlopen; IPOPT is
unavailable unless thePagmo.NET.Ipoptcompanion (or a system/PAGMONET_IPOPT_LIBRARY
library) is present. The IPOPT rows in the environment matrix below reflect the old model.
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64... |
pagmoNet v1.0.0-rc.5
Release Notes
v1.0.0
First stable release.
Highlights
- Release pipeline regenerates SWIG bindings, so the published package is assembled the same way as the tested one (ship == test). A shared SWIG step is used by both the build and release workflows to prevent drift.
- Single-source version via
Directory.Build.props— one<Version>for the whole package instead of per-csproj tags. - Base
Pagmo.NETincludes theipoptalgorithm but links no IPOPT (it loadslibipoptat runtime viadlopen), so the base stays MPL-2.0 and EPL-free. Add thePagmo.NET.Ipoptcompanion package to supply a bundledlibipopt, or bring your own viaPAGMONET_IPOPT_LIBRARY. (NLopt is statically included.)
Breaking / Behavior Notes
No breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Historical — superseded by v1.0.0. This entry describes the pre-release "superset"
model in which IPOPT was statically linked into the base and
OptionalSolverAvailability.IsIpoptAvailablereturnedtrueout of the box. As of
v1.0.0 the base links no IPOPT and loadslibipoptat runtime viadlopen; IPOPT is
unavailable unless thePagmo.NET.Ipoptcompanion (or a system/PAGMONET_IPOPT_LIBRARY
library) is present. The IPOPT rows in the environment matrix below reflect the old model.
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64, .NET 8+ | Supported |
| Windows x64, IPOPT enabled | Included — statically linked via vcpkg (coin-or-ipopt:x64-windows-static-md with overlay port fixing LAPACK detection). OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Windows x64, NLopt enabled | Included — statically linked via vcpkg (nlopt:x64-windows-static-md). OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| Linux x64, .NET 8+ | Supported — libPagmoWrapper.so is fully self-contained (pagmo2, Boost, TBB, NLopt, IPOPT all statically linked via vcpkg x64-linux-static-pic triplet). Runtime requires only libstdc++ and libgcc. |
| Linux x64, IPOPT enabled | Included — statically linked. OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Linux x64, NLopt enabled | Included — statically linked. OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| .NET Framework | Not supported |
| x86 / ARM | Not supported in v1 |
| macOS arm64 + x86_64 universal, .NET 8+ | Supported — libPagmoWrapper.dylib universal binary (pagmo2, Boost, TBB, NLopt statically linked via vcpkg arm64-osx-static-pic / x64-osx-static-pic triplets). Runtime requires only system libstdc++ / libc++. |
Repo note:
- The shipped library/package target is
.NET 8(consumers on .NET 8, 9, or 10 can reference it). - Building and running the full test suite on Linux requires the .NET 10 SDK (the .NET 8 SDK has a VsTest discovery limitation on Linux that causes only ~198 of 593 tests to be enumerated).
- Tests, examples, and documentation tooling target
net10.0internally.
pagmoNet v1.0.0-rc.4
Release Notes
v1.0.0
First stable release.
Highlights
- Release pipeline regenerates SWIG bindings, so the published package is assembled the same way as the tested one (ship == test). A shared SWIG step is used by both the build and release workflows to prevent drift.
- Single-source version via
Directory.Build.props— one<Version>for the whole package instead of per-csproj tags. - Base
Pagmo.NETincludes theipoptalgorithm but links no IPOPT (it loadslibipoptat runtime viadlopen), so the base stays MPL-2.0 and EPL-free. Add thePagmo.NET.Ipoptcompanion package to supply a bundledlibipopt, or bring your own viaPAGMONET_IPOPT_LIBRARY. (NLopt is statically included.)
Breaking / Behavior Notes
No breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64, .NET 8+ | Supported |
| Windows x64, IPOPT enabled | Included — statically linked via vcpkg (coin-or-ipopt:x64-windows-static-md with overlay port fixing LAPACK detection). OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Windows x64, NLopt enabled | Included — statically linked via vcpkg (nlopt:x64-windows-static-md). OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| Linux x64, .NET 8+ | Supported — libPagmoWrapper.so is fully self-contained (pagmo2, Boost, TBB, NLopt, IPOPT all statically linked via vcpkg x64-linux-static-pic triplet). Runtime requires only libstdc++ and libgcc. |
| Linux x64, IPOPT enabled | Included — statically linked. OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Linux x64, NLopt enabled | Included — statically linked. OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| .NET Framework | Not supported |
| x86 / ARM | Not supported in v1 |
| macOS arm64 + x86_64 universal, .NET 8+ | Supported — libPagmoWrapper.dylib universal binary (pagmo2, Boost, TBB, NLopt statically linked via vcpkg arm64-osx-static-pic / x64-osx-static-pic triplets). Runtime requires only system libstdc++ / libc++. |
Repo note:
- The shipped library/package target is
.NET 8(consumers on .NET 8, 9, or 10 can reference it). - Building and running the full test suite on Linux requires the .NET 10 SDK (the .NET 8 SDK has a VsTest discovery limitation on Linux that causes only ~198 of 593 tests to be enumerated).
- Tests, examples, and documentation tooling target
net10.0internally.
pagmoNet v1.0.0-rc.3
Release Notes
v1.0.0
First stable release.
Highlights
- Release pipeline regenerates SWIG bindings, so the published package is assembled the same way as the tested one (ship == test). A shared SWIG step is used by both the build and release workflows to prevent drift.
- Single-source version via
Directory.Build.props— one<Version>for the whole package instead of per-csproj tags. - Base
Pagmo.NETincludes theipoptalgorithm but links no IPOPT (it loadslibipoptat runtime viadlopen), so the base stays MPL-2.0 and EPL-free. Add thePagmo.NET.Ipoptcompanion package to supply a bundledlibipopt, or bring your own viaPAGMONET_IPOPT_LIBRARY. (NLopt is statically included.)
Breaking / Behavior Notes
No breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64, .NET 8+ | Supported |
| Windows x64, IPOPT enabled | Included — statically linked via vcpkg (coin-or-ipopt:x64-windows-static-md with overlay port fixing LAPACK detection). OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Windows x64, NLopt enabled | Included — statically linked via vcpkg (nlopt:x64-windows-static-md). OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| Linux x64, .NET 8+ | Supported — libPagmoWrapper.so is fully self-contained (pagmo2, Boost, TBB, NLopt, IPOPT all statically linked via vcpkg x64-linux-static-pic triplet). Runtime requires only libstdc++ and libgcc. |
| Linux x64, IPOPT enabled | Included — statically linked. OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Linux x64, NLopt enabled | Included — statically linked. OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| .NET Framework | Not supported |
| x86 / ARM | Not supported in v1 |
| macOS arm64 + x86_64 universal, .NET 8+ | Supported — libPagmoWrapper.dylib universal binary (pagmo2, Boost, TBB, NLopt statically linked via vcpkg arm64-osx-static-pic / x64-osx-static-pic triplets). Runtime requires only system libstdc++ / libc++. |
Repo note:
- The shipped library/package target is
.NET 8(consumers on .NET 8, 9, or 10 can reference it). - Building and running the full test suite on Linux requires the .NET 10 SDK (the .NET 8 SDK has a VsTest discovery limitation on Linux that causes only ~198 of 593 tests to be enumerated).
- Tests, examples, and documentation tooling target
net10.0internally.
pagmoNet v1.0.0-rc.2
Release Notes
v1.0.0
First stable release.
Highlights
- Release pipeline regenerates SWIG bindings, so the published package is assembled the same way as the tested one (ship == test). A shared SWIG step is used by both the build and release workflows to prevent drift.
- Single-source version via
Directory.Build.props— one<Version>for the whole package instead of per-csproj tags. - Base
Pagmo.NETincludes theipoptalgorithm but links no IPOPT (it loadslibipoptat runtime viadlopen), so the base stays MPL-2.0 and EPL-free. Add thePagmo.NET.Ipoptcompanion package to supply a bundledlibipopt, or bring your own viaPAGMONET_IPOPT_LIBRARY. (NLopt is statically included.)
Breaking / Behavior Notes
No breaking API changes from beta.6.
v1.0.0-beta.6
Highlights
macOS support
Windows x64, Linux x64, and macOS (arm64 + x86_64 universal binary) are all now supported.
CI builds on all three platforms. The NuGet package bundles the macOS universal binary at
runtimes/osx/native/. No additional installation required on macOS.
Archipelago and island resource cleanup fixes
- C#:
archipelago.Dispose()now explicitly disposes per-island problem clones created
forIThreadCloneableProblemusers, instead of relying on GC finalization. - Java:
archipelago.close()now closes clone adapters on the same code path.
island.close()removes its entry from the staticconstructionRootsmap and closes
the wrapped problem objects, eliminating a slow map-accumulation leak.
Orbital maneuver example
New maneuver scenario in both the C# and Java example runners: a 2-burn Hohmann-like
LEO→MEO transfer with SMA and eccentricity equality constraints solved via
cstrs_self_adaptive wrapping de. Demonstrates ManagedProblemBase.get_nec(),
constraint normalisation (SMA residual in km vs dimensionless eccentricity), and a
multi-seed retry loop for reliable stochastic convergence.
Constraint normalisation fix in ManeuverOptimizationProblem
SMA residual is now divided by 1000 before being returned as a fitness component, making
it dimensionless and comparable in scale to the eccentricity residual. Without this,
cstrs_self_adaptive ignored eccentricity because the SMA violation dominated by orders
of magnitude.
Breaking / Behavior Notes
No breaking changes from beta.2.
v1.0.0-beta.2
Highlights
Per-thread problem cloning (IThreadCloneableProblem)
Managed problems that declare ThreadSafety.None can now participate in threaded
execution paths (archipelago.push_back_island, thread_bfe) by implementing
IThreadCloneableProblem and overriding Clone() on ManagedProblemBase:
public override ThreadSafety get_thread_safety() => ThreadSafety.None;
public override IProblem Clone() => new MyProblem(); // fresh independent copyEach island receives its own exclusive clone; thread_bfe creates one clone per OS
thread via managed_thread_bfe. Problems that return null from Clone() (the default)
continue to be rejected on threaded paths as before — the feature is fully opt-in.
IPOPT included in Windows build
The Windows NuGet package now includes IPOPT statically linked (via a vcpkg overlay port
that fixes LAPACK detection under the x64-windows-static-md triplet, with Intel MKL as
the BLAS/LAPACK backend to avoid the OpenBLAS DllMain conflict).
OptionalSolverAvailability.IsIpoptAvailable returns true out of the box on both
Windows and Linux.
NuGet package improvements
- Consumer-focused readme on NuGet.org (installation, quickstart, feature table).
- Package logo.
--verboseflag added to the examples runner — prints algorithm logs after each scenario.
Breaking / Behavior Notes
No breaking changes from beta.1.
ManagedProblemBase now implements IThreadCloneableProblem with virtual Clone() => null.
Subclasses that previously had no Clone() method are unaffected.
v1.0.0-beta.1
Overview
First public beta of Pagmo.NET - a C# wrapper for pagmo2.
Targets Windows x64 and Linux x64. The managed library targets .NET 8 (consumers on .NET 8, 9, or 10 can reference it).
Highlights
Managed C# problem and algorithm extensibility
- Implement
IProblem/ManagedProblemBaseto define custom optimization problems in pure C#.
Full lifecycle (fitness, bounds, gradients, hessians, batch evaluation, seed, thread safety)
is supported, with exception-safe callback boundaries. - Implement
IAlgorithmto define custom optimization algorithms in pure C#. Managed algorithms
participate inislandandarchipelagotype-erased execution paths (evolve, wait, migrate).
Broad algorithm and problem coverage
All major pagmo algorithms are wrapped with typed extension helpers and log projections:
bee_colony, cmaes, compass_search, cstrs_self_adaptive, de, de1220, gaco,
gwo, ihs, maco, mbh, moead, moead_gen, nsga2, nspso, pso, pso_gen,
sade, sea, sga, simulated_annealing, xnes.
Optional/feature-gated solvers: ipopt, nlopt (build-dependent; availability is
asserted by tests). snopt7 is supported for users who build from source with their
own SNOPT7 license; see README for build instructions.
All built-in benchmark problems are wrapped: ackley, cec2006/2009/2013/2014, decompose,
dtlz, golomb_ruler, griewank, hock_schittkowski_71, inventory, lennard_jones,
luksan_vlcek1, minlp_rastrigin, null_problem, rastrigin, rosenbrock, schwefel,
translate, unconstrain, wfg, zdt.
Island and archipelago orchestration
- Full
islandandarchipelagomanaged API with topology wrappers (ring,fully_connected,
unconnected,free_form), migration type/handling controls, and island snapshot access. - Managed replacement and selection policies:
RPolicyCallback/SPolicyCallbackbase classes
for custom policies, plus built-infair_replace/select_best.
Batch fitness evaluators
default_bfe,thread_bfe,member_bfewith safe managed-problem dispatch.
Multi-objective utilities
non_dominated_front_2d,crowding_distance,sort_population_mo,select_best_N_mo,
ideal,nadir,decompose_objectives,hypervolumeand related APIs.
Runnable examples and docs
Examples/Examples.Pagmo.NET: three teaching scenarios (single-island, archipelago topology,
migration policies).docs/: concept-first walkthroughs linked to runnable example code.
Breaking / Behavior Notes
This is a first beta. No public stable API surface has been previously released.
C# naming conventions: bridge and enum types use PascalCase as idiomatic C#.
Pagmo-compatible snake_case is preserved for method names that mirror the pagmo C++ API
(e.g. get_bounds(), fitness(), evolve()).
Notable type renames from internal pre-release names:
- Enum types:
ThreadSafety,EvolveStatus,MigrationType,MigrantHandling,
SgaCrossover,SgaMutation,SgaSelection - Bridge types:
ProblemCallback,ManagedProblem,AlgorithmCallback,ManagedAlgorithm,
RPolicyCallback,ManagedRPolicy,SPolicyCallback,ManagedSPolicy,NullProblemCallback
Known Limitations
- Thread-clone strategy - Resolved in beta.2 via
IThreadCloneableProblem.
Supported Environment Matrix
| Environment | Status |
|---|---|
| Windows x64, .NET 8+ | Supported |
| Windows x64, IPOPT enabled | Included — statically linked via vcpkg (coin-or-ipopt:x64-windows-static-md with overlay port fixing LAPACK detection). OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Windows x64, NLopt enabled | Included — statically linked via vcpkg (nlopt:x64-windows-static-md). OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| Linux x64, .NET 8+ | Supported — libPagmoWrapper.so is fully self-contained (pagmo2, Boost, TBB, NLopt, IPOPT all statically linked via vcpkg x64-linux-static-pic triplet). Runtime requires only libstdc++ and libgcc. |
| Linux x64, IPOPT enabled | Included — statically linked. OptionalSolverAvailability.IsIpoptAvailable returns true in the released build. |
| Linux x64, NLopt enabled | Included — statically linked. OptionalSolverAvailability.IsNloptAvailable returns true in the released build. |
| .NET Framework | Not supported |
| x86 / ARM | Not supported in v1 |
| macOS arm64 + x86_64 universal, .NET 8+ | Supported — libPagmoWrapper.dylib universal binary (pagmo2, Boost, TBB, NLopt statically linked via vcpkg arm64-osx-static-pic / x64-osx-static-pic triplets). Runtime requires only system libstdc++ / libc++. |
Repo note:
- The shipped library/package target is
.NET 8(consumers on .NET 8, 9, or 10 can reference it). - Building and running the full test suite on Linux requires the .NET 10 SDK (the .NET 8 SDK has a VsTest discovery limitation on Linux that causes only ~198 of 593 tests to be enumerated).
- Tests, examples, and documentation tooling target
net10.0internally.
PagmoNet4j.ipopt v1.0.0-rc.1
Changelog
v1.0.0
First stable release.
Highlights
- Pure native payload.
pagmonet4j-ipoptships onlylibipoptand its dependency closure and takes a hard dependency on the basepagmonet4jartifact. The base carries theipoptalgorithm, which loadslibipoptat runtime viadlopen(no IPOPT is ever linked into the base). Depend on this artifact alongsidepagmonet4j— you get both. - Bring-your-own IPOPT. Prefer a system install or the
PAGMONET_IPOPT_LIBRARYoverride? Depend on the basepagmonet4jartifact on its own; theipoptalgorithm is there and will find your library. - Self-contained payload. The published JAR bundles the IPOPT dependency closure (IPOPT, MUMPS, OpenBLAS, GCC runtime) under
natives/<rid>/; the baseNativeLoaderextracts it at load time — nojava.library.pathor external IPOPT install required on Windows x64, Linux x64, or macOS (arm64 + x86_64). - Clean-room verification. CI resolves the published-shaped base + companion in a clean Gradle project and runs an IPOPT solve, gating publish on the artifacts working for a first-time user.
- Single-source version via
gradle.properties.
Breaking / Behavior Notes
- The interim "self-sufficient superset" pre-release model (bundle the whole API, link IPOPT, depend on this artifact alone) is removed for licensing reasons: the base stays MPL-2.0 and never links EPL IPOPT. Depend on both
pagmonet4jandpagmonet4j-ipopt.
v1.0.0-beta.6
Highlights
- Initial release as a standalone repository, split from
pagmoNet.ipopt. - Windows x64, Linux x64, and macOS (arm64 + x86_64) are all supported via CI.
- JUnit 5 test suite covering availability, instantiation, option setting, evolve improvement, and name verification.
- CI checks out PagmoNet4j, builds the native JNI library with IPOPT enabled, publishes
pagmonet4jtomavenLocal, then runs the add-on tests.
Known limitations
- The MA27 linear solver in this build uses IPOPT's HSL runtime-load model. The internal result code may not reflect full convergence status.
- MUMPS and SPRAL linear solvers are not included in this build.