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

Uploaded CPython 3.13Windows x86-64

aimmspy-1.0.1.post38-cp313-cp313-manylinux_2_27_x86_64.whl (717.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.12Windows x86-64

aimmspy-1.0.1.post38-cp312-cp312-manylinux_2_27_x86_64.whl (717.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.11Windows x86-64

aimmspy-1.0.1.post38-cp311-cp311-manylinux_2_27_x86_64.whl (717.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.10Windows x86-64

aimmspy-1.0.1.post38-cp310-cp310-manylinux_2_27_x86_64.whl (716.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4152c0e0efac4f03eff66dea9488f548d998021d884027cc3e70e01985f484a0
MD5 e55e006a5b93933e01d5c9bd34ccb9ec
BLAKE2b-256 c869b03e21769c3e7960fa4dd09cf0485f99d9c5dda186a7c56745812f0ea6f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 0c0b7819acc76db387da60874f8817905a9ffc98b0106b033297fc02a7afc94c
MD5 b7eeefc215e41e78647c4a9d431b4be3
BLAKE2b-256 eb160ebb19a0aa288856762ff2def1df0422ad96e5af8edee3d1611fe688a347

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0c23c8dcd2d37f1e8326278ec1f165373dfcf1861488b508946f92b3e1700ace
MD5 a56ccbda5d82ac9f29a5e565ef4e3017
BLAKE2b-256 f5a6abdf0acb4c4bb763a994cf92113d036a6e49d725ddcc6cffe98209490392

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 9849e00d773a20b073771f2172a7cd25d3feca9b6b7579ee282961f22248a54e
MD5 8f4baf51a30933fab5e2c269a53625d2
BLAKE2b-256 ecbc12e6d82a2423f03ea97eee6098cbcc6d1673b8f17afb1731bec18d125304

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3818670f0e37702dee6e2eae5930a1db3aa20a5d0cf9ec5d6ed0149e90c2569b
MD5 73d23c9456f66a07385a944ebc071824
BLAKE2b-256 4cfa9b256f41bdcc2726140c716cbc2bfb37e405ba6b4d9760d5096c35124f92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 00f117712c1ab97b4f9e6b4e8136970f948a06afff8dc72825d3c604175cfe76
MD5 ec64c9f445cf218693cc6b66a164a9be
BLAKE2b-256 c525b3ada85f43ab73be845a940e44bdb0ffeacda6f4144850d369718736f8ac

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c8f2b04ecb27c6619c5d261317ee3608559afc863c5326de56179a23689f9813
MD5 e01ec58fc99aabde8b70e48ba388e5ef
BLAKE2b-256 1368b5b3ba99ebb1ae87b70abda6c6454431ec2119f5afb11652a36f100d48c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post38-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 18416c647b6dc2bac4be42e06cdaa79be6d751d616c9f222e088b2b7a5201489
MD5 e7f134cc2005b5650cd1d02947cf0424
BLAKE2b-256 5e74e4c2417049aa0f4f979778af4e548698ea1a293e7e2d76fbdc49659a23ac

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