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

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

Uploaded CPython 3.13Windows x86-64

aimmspy-1.0.1.post39-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.post39-cp312-cp312-win_amd64.whl (563.0 kB view details)

Uploaded CPython 3.12Windows x86-64

aimmspy-1.0.1.post39-cp312-cp312-manylinux_2_27_x86_64.whl (717.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.11Windows x86-64

aimmspy-1.0.1.post39-cp311-cp311-manylinux_2_27_x86_64.whl (716.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

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

Uploaded CPython 3.10Windows x86-64

aimmspy-1.0.1.post39-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.post39-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 19015bbb2bc958f392ebea10efed1ab01396e38477ceff88b2966f44e5817655
MD5 8b5216d04951b6613203c3d9599b4788
BLAKE2b-256 372912da7797d614bd4790d1c9150dce5eab321b19a588e2de0bd37ed8c09c4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ececa2f069773779411a210898d6a3c5fd139bbac800d9212ea01271ab0a4cb8
MD5 0264fe37c1e32b1b0e0e080627840c36
BLAKE2b-256 fdc366195fd761773819b8288b90cc0fb13af62ec876d2d765d789ffbf258e5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3c09258b2cc135308cb2113db90cb8019caee20d4b576b96b46dd068fae2ed07
MD5 9d177c586bb0b82c3c33c6bbf96d5a9b
BLAKE2b-256 80f3dc9699d9c28898bb4432fe51b788d36f164836473a5fec73fc010612a75f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ec16542df741f2136ddb30f661fe51dc5b1ca04b33dc3e7d247304ba08a5ab6a
MD5 376e9f8fc6a6a00af9523080bd583cea
BLAKE2b-256 c43b4b8e7839093adbaf0bef95711f5d24c6479bbf31a7a60d4049a38152e49a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 de9bf7219d178b47bbd2732f8e2815c5aedc16ece3b996209ae040875e28ad89
MD5 7c2613b839214908ca092dc1f574121e
BLAKE2b-256 fefb696044fb0e869d2a7047637f9280ae539d03cfb6f609fbe6c29f1f2ad0b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 1026d67591432b10eea1bf2611db620b452ccd661b1930d8f3ffc75d4473d58a
MD5 5c6839574d8a55d1194ee17fde4de7b8
BLAKE2b-256 4b834f080b22512b849414d1ac67f11f6db0c49a97631d55291018d5dafe522f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5ebb1b467f55fcf0d084963e2ded83c42a0754ce679c7ed988ddbc95ad7140a9
MD5 68265c10bf5c7136ef922df0fd5b3088
BLAKE2b-256 c864cee72eefc7a8c17a74e58e022403fce5fb11a09d750910dc33933540e9b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post39-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 4196725e62e3b32906f97261f27b73226329f7077169f9014b65b4f25cfae510
MD5 7d882595d7a3c49c0ae2e8086b742cfa
BLAKE2b-256 8fff735a625a26181d4a6620370d96050ec5bb56777c5db1917615ad9a46583f

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