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 its 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

Note: The AIMMS Python library is tested with Python 3.10 or higher. Currently only the windows platform is supported.

Getting Started

To use the AIMMS Python library, you need to have an AIMMS installed and a correct organization license and an 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 folder of an installed AIMMS version. Additionally, you must have the appropriate AIMMS license configured. Failure to provide a valid path or license will result in errors.

The exposed_identifier_set_name parameter controls which AIMMS identifiers are accessible in Python. For example, setting it to "AllIdentifiers" exposes all identifiers in your AIMMS project which is an easy way to get started.

The data type preference can be set to DataReturnTypes.DICT, DataReturnTypes.ARROW DataReturnTypes.PANDAS or DataReturnTypes.POLARS. The default is DataReturnTypes.DICT.

import os
from aimms.project.project import Project

# Initialize the AIMMS project
my_aimms = Project(
    # path to the AIMMS Bin folder
    aimms_path=os.getenv("AIMMSPATH"),

    # path to the AIMMS project folder
    aimms_project_path=os.getenv("AIMMSPROJECTPATH"),

    # the name of an aimms set containing identifiers. 
    exposed_identifier_set_name="AllIdentifiers",  # Limit access to specific identifiers,
    data_type_preference=DataReturnTypes.DICT,
)

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="hallo")

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.post36-cp313-cp313-win_amd64.whl (563.0 kB view details)

Uploaded CPython 3.13Windows x86-64

aimmspy-1.0.1.post36-cp313-cp313-manylinux_2_27_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post36-cp312-cp312-win_amd64.whl (563.1 kB view details)

Uploaded CPython 3.12Windows x86-64

aimmspy-1.0.1.post36-cp312-cp312-manylinux_2_27_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post36-cp311-cp311-win_amd64.whl (561.3 kB view details)

Uploaded CPython 3.11Windows x86-64

aimmspy-1.0.1.post36-cp311-cp311-manylinux_2_27_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post36-cp310-cp310-win_amd64.whl (560.8 kB view details)

Uploaded CPython 3.10Windows x86-64

aimmspy-1.0.1.post36-cp310-cp310-manylinux_2_27_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7c763b208b01e361f61d169e31273fc3f8b11c6dab8373d9bb339ac7cd141675
MD5 85f6f42ab3a815b22974b2c543cd02ac
BLAKE2b-256 444464aca8c001a7edf0a62a4fcd83f82bad7ee53fe770bce23ab5db1fa74ebf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 32e99596254715bfaee9c248f129178fae5f4f0bcc254c345b38a81c79eef975
MD5 9b198ed951c16fa40f0b605efeb25a0f
BLAKE2b-256 228fc86b4d0b1392fd99d32171e25dd1c50dab2da60289c22f716af35ef63fc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8a968a7c8b2c7e495e2e417d965d3e9acb0d12703d668c091f54f1b04dfdec8e
MD5 e909c32620b64e2f12916a343dad1507
BLAKE2b-256 9010dc676c71e2986efe3af6854d503bc1c9d846805a0ed057d4a65011d10a91

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 4bec5ad87f54fc1206c2516a01355e1354f710b836942483ad423023fab7a0a1
MD5 aeebe8ac9688531a3b03a1f604c7334d
BLAKE2b-256 8af354ac561a5bfdf1be6dfd51e64c6568e37cdd7f675bbf4f5705ffb6de417b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 53c5e0d4e23b7dff5cf29f8d2d5fd990a0a35e6b92a18e1118651958d45ba59e
MD5 ea88ef1aca78e46eb22c73d2c16cacf0
BLAKE2b-256 a6812d805ce54433ad0c838b052c13e8891477a429e1c9ed747606125739a056

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 246d7711a4818df4d583f12d87eeb7ff4089f2c442515a3867c3bf8f48241576
MD5 f950d0ef29f00bc730ba1d7755470dbc
BLAKE2b-256 7266d4b110acd93f6a8d9be67b02ac518e456ed55ad57ee63295babba07c8c56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 93e798bbfabc927d842eb1c7931f6f924a5658e9b1fffb8a00567527f71e141a
MD5 7ed3c52b4c59618049a90f7af110e4df
BLAKE2b-256 5fbb3360081c876cce4b455bb96f8fec47d3330c341c548a2768b082799c0801

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post36-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 3b3e5b0a8a978e9eff902ff38b4f2e2143341c2642c51c1604b911bd13345e2d
MD5 ca1c1e3dad4300363dbe3dc1f31ad8da
BLAKE2b-256 884b5fae0da1b3975f5f58706a2f3a08bd9d57bc91e665a2b56fb7b9b6622880

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