Modern Python library for reinforcement learning for combinatorial optimization.
Project description
Gyozas
A pure-Python reinforcement learning library for combinatorial optimization, built on top of PySCIPOpt and Gymnasium.
Gyozas provides a modular RL environment that lets you train agents to make decisions inside SCIP's branch-and-bound solver -- variable selection (branching) and node selection -- with pluggable rewards, observations, and problem instance generators.
Features
- Gymnasium-style API --
reset()/step()/render()interface - Branching & node selection dynamics -- control variable branching or node selection decisions
- Bipartite graph observations -- LP-based features following Gasse et al. (NeurIPS 2019)
- Multiple reward functions -- node count, solving time, LP iterations, primal/dual integrals
- Built-in instance generators -- set cover, independent set, combinatorial auction, capacitated facility location
- Branch-and-bound tree visualization
Prerequisites
Gyozas requires the SCIP solver (version 8+). But latest version should be installed when PySCIPOpt is installed automatically with Gyozas dependencies
Installation
pip install gyozas
Or install from source:
pip install .
You can install extra packages for enhanced visualization of branch and bound tree state using
pip install "gyozas[viz]"
Quick Start
import gyozas
# Create an instance generator
instances = gyozas.SetCoverGenerator(n_rows=100, n_cols=200)
# Create the RL environment
env = gyozas.Environment(
instance_generator=instances,
observation_function=gyozas.NodeBipartite(),
reward_function=gyozas.NNodes(),
)
# Run one episode
obs, action_set, reward, done, info = env.reset()
while not done:
action = action_set[0] # pick first available action
obs, action_set, reward, done, info = env.step(action)
env.close()
Coming from Ecole?
Gyozas is a drop-in replacement for Ecole with a near-identical API:
| Ecole | Gyozas | |
|---|---|---|
| Install | C++ build, CMake, custom SCIP | pip install gyozas |
| Language | C++ core + Python bindings | Pure Python |
| Maintained | Last release 2023 | Active |
| Python | 3.7--3.10 | 3.10+ |
| Custom components | Subclass C++ base classes | Any object with reset()/extract() |
| Node selection | Not supported | NodeSelectionDynamics |
| Gymnasium wrapper | Not included | GymnasiumWrapper for SB3/CleanRL |
See the full migration guide for detailed API mapping.
Components
Dynamics
BranchingDynamics-- control variable selection in branching (default)NodeSelectionDynamics-- control which node to explore nextConfiguringDynamics-- single-step algorithm configuration (set SCIP params, then solve)PrimalSearchDynamics-- LP-probing primal heuristic; agent provides partial variable assignmentsExtraBranchingActions-- sentinel actions (SKIP,CUT_OFF,REDUCE_DOMAIN) for branching
Rewards
NNodes-- change in number of explored nodesSolvingTime-- wall-clock time per stepLPIterations-- change in LP iterationsDualIntegral/PrimalIntegral/PrimalDualIntegral-- bound integralsDone-- binary completion statusArithmeticMixin-- compose rewards with Python operators:-NNodes() * 0.5 + SolvingTime().cumsum()
Observations
NodeBipartite/NodeBipartiteEcole-- pure-Python bipartite graph with configurable featuresNodeBipartiteSCIP-- thin wrapper around PySCIPOpt's built-in C implementationPseudocosts-- per-variable pseudocost scores accumulated across branching historyStrongBranchingScores-- full and partial strong-branching scores via LP probing
Instance Generators
SetCoverGenerator-- random set cover problemsIndependentSetGenerator-- random independent set problemsCombinatorialAuctionGenerator-- random combinatorial auction problemsCapacitatedFacilityLocationGenerator-- random facility location problemsFileGenerator-- load instances from files on disk
Instance Modifiers
Modifiers wrap any generator and post-process the model before it reaches the environment:
EmbedObjective-- embed the objective function as a variable + equality constraintSetParameters-- apply arbitrary SCIP parametersSetNoCuts/SetNoHeuristics/SetNoDisplay/SetDFSNodeSelection/SetBFSNodeSelection-- convenience presets
Gymnasium Wrapper
GymnasiumWrapper exposes any Environment as a standard Gymnasium environment, compatible with Stable-Baselines3, CleanRL, and other RL frameworks.
Tests
uv sync
uv run pytest
Contributors
| Name | Affiliation | GitHub |
|---|---|---|
| Olivier JUAN | EDF Lab | @olivierjuan |
| Paul STRANG | EDF Lab · CNAM · ISAE | @abfariah |
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gyozas-1.0.0.tar.gz.
File metadata
- Download URL: gyozas-1.0.0.tar.gz
- Upload date:
- Size: 837.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20be30396438ddbb020e656bfe256d1ec7720a5c7346872f86cda258e85559bb
|
|
| MD5 |
05537889130c0df39093b66f15b2a409
|
|
| BLAKE2b-256 |
d381ea75b6d19231499ad30e89bf149d0bc1cffe643854ee3634b89e0f80808c
|
File details
Details for the file gyozas-1.0.0-py3-none-any.whl.
File metadata
- Download URL: gyozas-1.0.0-py3-none-any.whl
- Upload date:
- Size: 54.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59e40948a77f39017b06d860fc892087fb914b7635b8e31801599b44664fadf3
|
|
| MD5 |
b27a8f8c95ab9425380a192dbd2857db
|
|
| BLAKE2b-256 |
b546225cfe6cd105ef2653398507017f7e3bd62038a59698d34330e9c2367c5d
|