linopy: Linear optimization with N-D labeled variables#

Welcome to Linopy! This Python library is designed to make linear programming easy, flexible, and performant. Whether you’re dealing with Linear, Integer, Mixed-Integer, or Quadratic Programming, Linopy is as a user-friendly interface to define variables and constraints. It serves as a bridge, connecting data analysis packages such like xarray & pandas with problem solvers.

Main features#

linopy is heavily based on xarray which allows for many flexible data-handling features:

• Define (arrays of) contnuous or binary variables with coordinates, e.g. time, consumers, etc.

• Apply arithmetic operations on the variables like adding, subtracting, multiplying with all the broadcasting potentials of xarray

• Apply arithmetic operations on the linear expressions (combination of variables)

• Group terms of a linear expression by coordinates

• Get insight into the clear and transparent data model

• Modify and delete assigned variables and constraints on the fly

• Use lazy operations for large linear programs with dask

• Choose from different commercial and non-commercial solvers

• Fast import and export a linear model using xarray’s netcdf IO

• Support of various solvers - Cbc - GLPK - HiGHS - MindOpt - Gurobi - Xpress - Cplex - MOSEK - COPT

Citing Linopy#

If you use Linopy in your research, please cite it as follows:

Hofmann, F., (2023). Linopy: Linear optimization with n-dimensional labeled variables. Journal of Open Source Software, 8(84), 4823, https://doi.org/10.21105/joss.04823

A BibTeX entry for LaTeX users is

@article{Hofmann2023, doi = {10.21105/joss.04823}, url = {https://doi.org/10.21105/joss.04823}, year = {2023}, publisher = {The Open Journal}, volume = {8}, number = {84}, pages = {4823}, author = {Fabian Hofmann}, title = {Linopy: Linear optimization with n-dimensional labeled variables}, journal = {Journal of Open Source Software} }