Optimization and constraint satisfaction for integer linear programs in a user-friendly way
Project description
IntegOR
IntegOR is a framework based on scipy.optimize that aims to traduce an Operation Research problem that can be linearized to a binary integer linear problem, to solve it.
The interest is the ability to easily define your variables as strings and to, from here, create easily constraints and cost vector.
Installation
To install the package, you can use pip:
pip install integor
Usage
Suppose you want to solve the following linear problem:
import numpy as np
def J(x):
"""Function to minimize"""
return x[0] + 2 * x[1] + 3 * x[2] + 4 * x[3]
def f(x):
"""Inequality constraint. f(x) must be positive"""
return np.array([
x[0] + x[1] - 1,
x[2] + x[3] - 1,
x[0] + x[2] - 1,
])
def g(x):
"""Equality constraint. g(x) must be zero"""
return np.array([
x[1] + x[3] - 1,
])
Import
from integor import set_variable_names, Variable, get_cost_matrix, solve_ilp, get_solution
Set variable names
set_variable_names(["x0", "x1", "x2", "x3"])
Define variables as python objects
x0 = Variable("x0")
x1 = Variable("x1")
x2 = Variable("x2")
x3 = Variable("x3")
Define the constraints from the variables
constraint1 = x0 + x1 >= 1
constraint2 = x2 + x3 >= 1
constraint3 = x0 + x2 >= 1
constraint4 = x1 + x3 == 1
constraints = [constraint1, constraint2, constraint3, constraint4]
Define the cost from the variables
cost_matrix = get_cost_matrix(x0 + 2 * x1 + 3 * x2 + 4 * x3)
Specify integrality ie type of the solution : 0 for continuous, 1 for integer-bounded
integrality = np.ones(len(cost_matrix)) * 1 # You can let this as it is
Solve the problem
# Solve
res = solve_ilp(cost_matrix=cost_matrix, constraints=constraints, integrality=integrality)
solution_vector = res.x
print(res)
print("\nSolution vector: ", solution_vector)
print("\nVerify that the solution satisfies the constraints:")
verify(res.x)
print("\nGet the solution as a dictionary:")
print(get_solution(res.x))
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
integor-1.2.tar.gz
(5.2 kB
view details)
Built Distribution
integor-1.2-py3-none-any.whl
(6.5 kB
view details)
File details
Details for the file integor-1.2.tar.gz
.
File metadata
- Download URL: integor-1.2.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9223da4c7d547dec800579305401bb862f5075899ec1a24f159693c28d7bdf6 |
|
MD5 | 8b893e7d989eb2d42fdadd792c942081 |
|
BLAKE2b-256 | ebf7f2033be87db98972a99fcc0da13c42ada6da1369f7fd522e059bd85ba11f |
File details
Details for the file integor-1.2-py3-none-any.whl
.
File metadata
- Download URL: integor-1.2-py3-none-any.whl
- Upload date:
- Size: 6.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0db843912782b0f06b453221bff5a26ad1ec52227a36c78db986a94855a3ab75 |
|
MD5 | 8544be526253ca1062cf682e0843fb36 |
|
BLAKE2b-256 | 05c55c9c6375298b76702f50f8aba69bd0b094410e924584a51a1d84a1c8995b |