One good solution
Keep linear structure for LP/MIP. Use SQP for a small smooth NLP with derivatives. Use fcmaes for a black-box simulation, multimodality or nonsmoothness.
Python · Rust · many-core CPUs · MCP
Turn a model or simulation into a measured search. Choose a solver, give it a CPU and evaluation budget, and check the result.
Five open-source repositories connect parallel black-box search, linear and mixed-integer programming, smooth nonlinear optimization, and durable jobs. Use a library, a shell, or the Model Context Protocol.
MIT-licensed projects. Select by model structure and required evidence; compare candidates on your workload.
01 / Match the problem
Keep linear structure for LP/MIP. Use SQP for a small smooth NLP with derivatives. Use fcmaes for a black-box simulation, multimodality or nonsmoothness.
Use MODE for black boxes. Structured linear or smooth models can use a sequence of scalarized solves; independently filter and check the candidates.
Use MAP-Elites or the Diversifier in fcmaes. Define behavior descriptors that capture the diversity your application actually needs.
Need a large sparse NLP, conic solver, dedicated routing/CP solver or certified global MINLP? The shared guide explains when to use tools outside this ecosystem.
02 / Choose an interface
Libraries solve in your program. The three Rust workers share one job contract and one runner. Python fcmaes remains a library.
Parallel gradient-free optimization for Python: black-box, multi-objective and quality-diversity search.
Use for. Python objectives and simulations; parallel retries or population evaluation; CMA-ES, DE, BiteOpt, MODE and MAP-Elites.
Check first. Heuristic search, with constraints handled by the selected method. No stock job worker or MCP server in this package.
Install. PyPI: fcmaes (2.1.0 and later include the MODE fixes and fcmaes.pareto). Build from source for changes after the latest release.
Native Rust parallel black-box optimization, Python bindings, and a worker for durable optimization jobs.
Use for. Rust objectives, parallel global search, Pareto search and quality diversity. Application workers run registered Rust models as jobs.
Check first. Python callbacks do not gain native Rust parallelism. The experimental surrogate targets small deterministic continuous-box problems; consult its limits before use.
Install. crates.io: fcmaes-core; PyPI: fcmaes-rust (0.2.0 and later include the MODE fixes and ParetoArchive2D). Job worker and experimental surrogate: source only.
Native Rust linear and mixed-integer linear programming with Python bindings and a shell/MCP job worker.
PyPI: lp-ip-craft · crates.io: lp-ip-craft · crates.io: lp-ip-craft-native
Use for. Models with linear objectives and constraints. Libraries take structured models; the job worker accepts a hashed model artifact, with an MPS converter in the repository.
Check first. MIP variables need finite bounds, supplied or inferred. No QP/MIQP. Statuses and gaps are numerical findings under tolerances; benchmark hard industrial MIPs against mature solvers.
Install. PyPI: lp-ip-craft; crates.io: lp-ip-craft and lp-ip-craft-native (since 0.29.0). Job worker: source only.
Rust sequential quadratic programming for smooth constrained optimization, with Python bindings and a shell/MCP job worker.
PyPI: sqp-craft · crates.io: sqp-craft · crates.io: sqp-craft-solver
Use for. Smooth continuous models with gradients and Jacobians, local refinement and multistart. User nonlinear jobs require a registered model in an application worker.
Check first. Dense BFGS with at most 256 variables. Local first-order results, not global certificates. For larger sparse NLPs, consider an IPOPT-family solver.
Install. PyPI: sqp-craft; crates.io: sqp-craft, sqp-craft-solver and the QP backends sqp-craft-clarabel and sqp-craft-activeset (since 0.17.0). Job worker: source only.
Durable optimization jobs for AI agents: local Rust runner, worker SDK and MCP server with a shared CPU budget.
crates.io: optimization-job-api · crates.io: optimization-runner
Use for. An agent needs to discover workers, validate, submit, follow or cancel jobs and read results and artifacts through MCP or a shell.
Check first. Linux, one local node, cooperative CPU accounting. Install and register workers first. No distributed scheduler or exact optimizer-state resume.
Install. crates.io: optimization-job-api and optimization-runner (since 0.3.0); cargo install optimization-runner --locked installs optimization-run and optimization-mcp. No solver is bundled: workers build in their repositories.
Availability checked 2026-10-22. Package releases can lag source changes; read each changelog before using a new feature.
03 / Run and inspect
On Linux with Rust 1.88 or newer, start from one worker repository. Its locked build includes a compatible runner and MCP server. The runnable tutorial initializes a node and exercises example jobs:
git clone https://github.com/dietmarwo/fcmaes-rust
cd fcmaes-rust
cargo build --release --locked -p optimization-runner -p fcmaes-job-worker
cargo build --release --locked -p fcmaes-job-worker --example custom_worker
python3 tutorials/job-api/run.py --root /tmp/fcmaes-job-tutorial
Use a fresh tutorial directory. Read the fcmaes job tutorial for prerequisites, resource settings and output inspection. Equivalent tutorials: LP/MIP and SQP.
Configure its MCP client to launch
optimization-mcp --root /absolute/path/to/node over stdio,
using the absolute executable path. The owner must initialize the node
and register workers first.
Then call get_guide,
describe_node and describe_worker. Use the returned
schemas and examples to validate and submit a job.
Discover the host and worker
limits before choosing outer workers and inner threads. The runner
accounts for outer_workers × inner_threads ≤ cpu_slots;
this is cooperative admission, not physical CPU isolation.
A many-core host often benefits from concurrent trials or starts. Eight inner threads are not automatically the best choice for one solve.
LP/MIP jobs accept model data. A new nonlinear application needs a model registered in a Rust worker; jobs do not carry arbitrary Python callbacks or shell commands. See the shared guide for setup, model registration, limitations and result checks.
04 / Check the evidence
OptunaHub's FastCmaesSampler, by Jacob Pfeil, integrates fcmaes CMA-ES into Optuna. It is an attributable third-party integration of fast-cma-es; it does not validate the other four projects or establish a performance ranking.
The repositories provide their own tests, benchmark harnesses and reproduction instructions. Compare solver versions on the same models, tolerances, CPU allocations and budgets, include failures and repeat seeds. Report wall time and total CPU effort separately.
Reference index and evidence policy · Share a reproducible evaluation