Skip to content

alex-87/qaekwy-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Qaekwy Python Client

An Open-source Python framework for constraint programming and optimization

GitHub License PyPI - Version PyPI - Downloads

The Qaekwy Python Client serves as a powerful tool to interact with the Qaekwy optimization solver engine through its API. This client provides a convenient and programmatic way to create, model, and solve optimization problems by streamlining the process of formulating complex problems and finding optimal solutions.

Qaekwy is small optimization problem solver engine designed to provide powerful modeling capabilities and efficient solving algorithms to find optimal solutions to complex problems.

Features

  • Variables: Supports integer, float, and boolean variables, including arrays for complex models.
  • Constraints: Offers a wide range of constraints for flexible problem modeling.
  • Optimization: Minimize or maximize objective functions to find optimal solutions.
  • Flexible Search Strategies: Choose from algorithms like Depth-First Search (DFS) and Branch and Bound (BAB).

Documentation

Explore the Qaekwy Documentation for in-depth guides, examples, and usage details.

Getting Started

Prerequisites

  • Python 3.12 or higher
  • pip (Python package manager)

Installation

pip install qaekwy

Verify the installation

python -m qaekwy --version

Code

Get started with Qaekwy in just a few steps:

  • Create a model by defining:
    • variables
    • constraints
    • objectives (optional)
  • Run your model and retrieve solutions.

See the Example below for a practical demonstration:

from qaekwy.engine import DirectEngine
from qaekwy.model.specific import SpecificMaximum
from qaekwy.model.variable.integer import (
    IntegerVariable,
    IntegerExpressionVariable
)
from qaekwy.model.modeller import Modeller
from qaekwy.model.searcher import SearcherType

# Define the optimization model
class SimpleOptimizationProblem(Modeller):
    def __init__(self):
        super().__init__()

        # Define integer variables with domain [0, 10]
        x = IntegerVariable("x", domain_low=0, domain_high=10)
        y = IntegerVariable("y", domain_low=0, domain_high=10)
        z = IntegerExpressionVariable("z", expression=y - x)

        # Add variables to the model
        self.add_variable(x).add_variable(y).add_variable(z)

        # Define constraints
        self.add_constraint(y > 2 * x)
        self.add_constraint(x >= 4)

        # Set objective: Maximize z
        self.add_objective(
            SpecificMaximum(variable=z)
        )

        # Set search strategy
        self.set_searcher(SearcherType.BAB)

# Instantiate the cloud-based solver
qaekwy_engine = DirectEngine()

# Build and solve the model
model = SimpleOptimizationProblem()
response = qaekwy_engine.model(model=model)

# Display solutions
for solution in response.get_solutions():
    print(f"Optimal solution:")
    print(f"- x = {solution.x}")
    print(f"- y = {solution.y}")
    print(f"- z = {solution.z}")

Output:

Optimal solution:
- x = 4
- y = 10
- z = 6

License