This is a template repository for using Ecole C++ library from Python. You can easily define a new reward function, observation function, or environment in C++ without having editing Ecole source code.
⚠️ This is project is in beta
⚠️ The Ecole C++ library is unstable: API changes can be introduced in any minor version.
⚠️ This project requires ecole>=0.8 wich is not released yet. You can install Ecole development version withconda install -c conda-forge/label/ecole_dev ecole
Install CookieCutter and create your new project
python -m pip install cookiecutter
python -m cookiecutter https://github.com/ds4dm/ecole-extensionCookieCutter will prompt you for information such as the name of your project to replace it in the template. CookieCutter is no longer required from now on.
Optionally, you can initialize the newly created folder as a git repository with
git init.
If you wish to get the dependencies (including Ecole and SCIP) through conda, then first install
them with
conda env create --name my-ecole-extension --file environment.yamlThen install your extension with
python -m pip install --no-deps --no-build-isolation .You can install your extension directly with pip, it will fetch Ecole and all dependencies with
python -m pip install .However, installing Ecole through pip may not be straightforward, as it curretly need to access
a compiler and an existing installation of SCIP.
For an interative installation, install all dependencies and then install your extension with
python -m pip install --no-deps --no-build-isolation .See Also: Ecole installation instructions
Eventually, you will want to make your own changes. There is no simple explanation of all the modifications that you will need to make, as it is mostly case dependent. Be sure to check the following files in your extension:
CMakeLists.txtcontains the list of C++ files to compile. If you add or rename C++ files, you will need to edit the list there.bindings.cppcontains the PyBind11 code to interface C++ code to Python. It contains the name of classes, functions, and methods. If you change or add any of them, be sure to add the changes there.- Python submodule such as
__init__.pymay import the code from the C++ extension to have nicer module names. If your code is not imported how you like, check these files as well. setup.pycontains the path the extension submodules. Unless you restructure the whole project, you should not need to make any changes there.