Skip to main content

Python bindings for the AIMMS optimization platform, built with pybind11 for seamless C++ integration. Enables efficient data exchange and interaction with AIMMS projects using pandas, polars, and pyarrow. Ideal for advanced optimization workflows requiring high-performance native code.

Reason this release was yanked:

old

Project description

AIMMS Python library

This is a BETA version of the AIMMS Python library. Any feedback, bug reports, or feature requests are welcome.

With this library it is possible to interact with AIMMS models from Python.

Features

  • Seamless integration with AIMMS models from Python
  • Assign and retrieve data using Python dicts, Pandas, Polars, or Arrow tables
  • Execute AIMMS procedures and retrieve results programmatically
  • Built with pybind11 for high-performance C++ integration
  • Flexible data return types for different workflows

Getting Started

To use the AIMMS Python library, you need to have an AIMMS developer version installed (see https://www.aimms.com/support/downloads/), a valid license (see https://licensing.aimms.cloud/license) and an already existing AIMMS project. Below is a step-by-step example of how to use the library to solve a simple transportation optimization problem.

Step 1: Initialize the AIMMS Project

First, initialize the AIMMS project by specifying the AIMMS executable path, project path, and other configurations.

Note: Ensure that the aimms_path points to a valid AIMMS Bin (or Lib on linux) folder of an installed AIMMS version. You use can the utility function find_aimms_path to automatically search your system for that path.

import os
from aimms.project.project import Project 
from aimms.utils import find_aimms_path

# Initialize the AIMMS project
my_aimms = Project(
    # path to the AIMMS Bin folder (on linux the Lib folder)
    aimms_path=find_aimms_path("25.4.3.3"),

    # path to the AIMMS project
    aimms_project_file=R"C:\AimmsProjects\MyAimmsProject\MyAimmsProject.aimms",

    # url
    license_url=R"wss://licensing.aimms.cloud/license-ws/license?profile=community&license=12345678-90ab-cdef-1234-567890abcdef"
)

Step 2: Assign Data to Parameters

This is an example of assigning data to parameters with Pandas DataFrames.

demand_df = pd.DataFrame({
    "c": ["Houston", "Phoenix", "Philadelphia"],
    "demand": [50.0, 60.0, 40.0]
})

supply_df = pd.DataFrame(data={
    "w": ["NewYork", "LosAngeles", "Chicago"],
    "supply": [70.0, 80.0, 60.0]
})

unit_transport_cost_df = pd.DataFrame({
    "w": ["NewYork", "NewYork", "NewYork", "LosAngeles", "LosAngeles", "LosAngeles", "Chicago", "Chicago", "Chicago"],
    "c": ["Houston", "Phoenix", "Philadelphia", "Houston", "Phoenix", "Philadelphia", "Houston", "Phoenix", "Philadelphia"],
    "unit_transport_cost": [5.0, 6.0, 4.0, 3.0, 2.0, 7.0, 4.0, 5.0, 3.0]
})

my_aimms.demand.assign( demand_df)
my_aimms.supply.assign( supply_df)
my_aimms.unit_transport_cost.assign( unit_transport_cost_df)

You can assign doubles, integers, strings to AIMMS parameters. The library will automatically convert the data types to the appropriate AIMMS types. The sets will be filled automatically based on the data you assign to the parameters.

Step 3: Execute the Optimization Procedure

It is possible in AIMMS to define procedures that encapsulate the logic of your optimization model. These procedures can be executed from Python using the AIMMS Python library. In this example we run the main procedure in the AIMMS project to solve the optimization problem.

my_aimms.MainExecution()

It is also possible to run procedures with arguments for example:

my_aimms.run_procedure(test1=5.0, test2=10.0, test3="hello")

Make sure the order of the arguments is correct, as well as the types.

Step 4: Retrieve and Display Results

Retrieve the results of the optimization, such as the total transport cost and the transport plan.

# Retrieve results
print(f"Total Transport Cost: {my_aimms.total_transport_cost.data()}")
print(f"Transport Plan: {my_aimms.transport.data()}")

The .data() function is used to fetch the current value of an AIMMS identifier (e.g., a parameter, variable, or set) into Python. This function is efficient and only fetches data if it has changed since the last fetch.

Data Types Returned by .data()

depending on the data_type_preference you set in the Project constructor, the .data() function will return different types of Python objects:

Sets always return a list of strings.

For parameters and variables, .data() can return:

  • A scalar value (e.g., float or int or string) if the parameter or variable is scalar.
  • A dictionary where the keys are tuples of strings (representing indices) and the values are float, int, string.
  • A Arrow Table or Pandas or Polars DataFrame depending on the data_type_preference set in the Project constructor.

Example Output

Depending on you return type preference the python object returned from the .data() function will be different, the output for dictionaries can look like this:

Total Transport Cost: 150.0
Transport: {("NewYork", "Houston"): 30, ("LosAngeles", "Phoenix"): 50, ...}

for Pandas DataFrames can look like this:

Total Transport Cost: 150.0
Transport:
        w               c               transport
    0   NewYork         Houston         30
    1   LosAngeles      Phoenix         50
    2   Chicago         Philadelphia    40
    3   NewYork         Philadelphia    20

extra

it is possible to generate a stub file for your project which can greatly help with autocompletion in your IDE. This stub file contains all the identifiers in your AIMMS project and their types. You can generate this stub file by running the following command:

my_aimms.generate_stub_file( "my_project_stub.py" )

To use this stub file you can the following to the top of your python script:

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from my_project_stub import Project

License

This project is licensed under the MIT License.

Support

For questions, bug reports, or feature requests, please contact AIMMS B.V. via support. Or post an question on the AIMMS Community. We are happy to help you with any issues or questions you may have.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aimmspy-1.0.1.post53-cp313-cp313-win_amd64.whl (563.7 kB view details)

Uploaded CPython 3.13Windows x86-64

aimmspy-1.0.1.post53-cp313-cp313-manylinux_2_27_x86_64.whl (718.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post53-cp312-cp312-win_amd64.whl (563.8 kB view details)

Uploaded CPython 3.12Windows x86-64

aimmspy-1.0.1.post53-cp312-cp312-manylinux_2_27_x86_64.whl (718.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post53-cp311-cp311-win_amd64.whl (562.0 kB view details)

Uploaded CPython 3.11Windows x86-64

aimmspy-1.0.1.post53-cp311-cp311-manylinux_2_27_x86_64.whl (717.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post53-cp310-cp310-win_amd64.whl (561.5 kB view details)

Uploaded CPython 3.10Windows x86-64

aimmspy-1.0.1.post53-cp310-cp310-manylinux_2_27_x86_64.whl (716.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

Details for the file aimmspy-1.0.1.post53-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 025ce376209d239c882fdc97c14b10f6161628e34b79d5ea4a5824a49995ec9b
MD5 016b5ae17b7077409b44409044a447f0
BLAKE2b-256 295614b8b9fc3558b0fd74b64d93546c1ede8db7c49e9664c4b19cd5ee1912cc

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp313-cp313-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 145d2ae7a411bfda62f3ab2c7c834f03e6a5d24812b0763193a2c793ac5ca023
MD5 220844f2beff69bae9c2a0097e3daf45
BLAKE2b-256 7885a0c6385521ecc17c50d9689096ba6f7417215ad5a0e35d31b5de16ef1a00

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 040c5db3c65ad81fe2e1f58b896b42f1b157c86fae5320ddbd05b6b0bd7833d0
MD5 cd48cc0d0e542c3c451bff250e63be1b
BLAKE2b-256 1b24be7c6dd3b09abe13df2d10091f760d37f5c82092449bba1989855e9419d4

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp312-cp312-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 b30d4247d4dea64ee25c61656dbf020b5f715dc3f6c75b9a11018d536054f33f
MD5 5f8652ac918da2a41fdf91dd298095e3
BLAKE2b-256 68cf4d0a29a5f74e6178613f0aa6f6bf3991a9f4bcb4446fe9cc1f53c27c5f77

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b36528bccf6eb26dd122a1b83c7421ba4d0737f64a48631788774fae785ab2ab
MD5 2e05211e570c3ea67305b1d963408033
BLAKE2b-256 6555f5dc2af1bef598e8e651de704a7c155683406c9eb5a5315e59036a3fac31

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp311-cp311-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 8ea2c0bc53c1cfbccb74d87d941462d21a3c245db4581d569954a1e714b7e868
MD5 34875d93106815602a655bba97cd92a6
BLAKE2b-256 99a6fbf8c617a9c40609b1290f6650a575a11eeb08d7c49661fca5dcbdf17211

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 92217191dad69cf932c812f6c558580aa56a138916f701e9b1faea8da1fc5e81
MD5 5e5685c34c6b59f1603b5bb4cb019c2b
BLAKE2b-256 ba041b3926a922d046012b5d48050833dfda3e6f5818a9b7d6294608be9aa318

See more details on using hashes here.

File details

Details for the file aimmspy-1.0.1.post53-cp310-cp310-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post53-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 f8e0eb84ef29fb55f556a0d565660d0a7473ab88152d00ac6edc93bce7346594
MD5 ca2ca191207e243ad3c842b791fd2620
BLAKE2b-256 157f1849da26bd0a3c59b5a773585987b365dab0358a27970fca16003c8e4d98

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page