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

Uploaded CPython 3.13Windows x86-64

aimmspy-1.0.1.post41-cp313-cp313-manylinux_2_27_x86_64.whl (717.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post41-cp312-cp312-win_amd64.whl (563.2 kB view details)

Uploaded CPython 3.12Windows x86-64

aimmspy-1.0.1.post41-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.post41-cp311-cp311-win_amd64.whl (561.4 kB view details)

Uploaded CPython 3.11Windows x86-64

aimmspy-1.0.1.post41-cp311-cp311-manylinux_2_27_x86_64.whl (717.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post41-cp310-cp310-win_amd64.whl (560.9 kB view details)

Uploaded CPython 3.10Windows x86-64

aimmspy-1.0.1.post41-cp310-cp310-manylinux_2_27_x86_64.whl (716.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8ae53dbc9c0f03eda6c1390b86fabd552d4ce1505d29bda0404fdc0fcaff0705
MD5 6900987cdd239092de3eb8f2519638c8
BLAKE2b-256 9d12916cff5ccbb70e9ef92d82d094897bb81dd515777f392413907945044539

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 47c2a3478d993823a14789e6f4c7a9650a6186bd28209236cd52beec819dd472
MD5 f1a437455d4484ba20db4f5fb482aff7
BLAKE2b-256 aa6f59c260f99e9856cba05fc18756bbeacd9968dbf57f8cb9c90ee45ae1f8df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aba37633d1816f831e26906cd50b6317f49284e25a533cfce4720052c9cc0589
MD5 b0f98bd8751fe4adbec9713a6170d510
BLAKE2b-256 ac963ddf5b5d4ba290448e4f5fc2c939062109ef140f7d45665f6fc001808def

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 07a47bc2aafc356ac60af254546393afa48d1478995d189006cf6a7476836a8a
MD5 695f908e2505f923becdc667fb945ae6
BLAKE2b-256 1243ed76d63448f595bdfe6e16afc1ea52366f192151e197a39cc5572fb16650

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1a875c289c1698e6bfe2c29fca3a9422b4c96e22cc5ab666ed96b2261a422c53
MD5 437cd2eeed946b89b71b81d4acb68085
BLAKE2b-256 de538b814a11bb612884b939ad405f40987453ce2ff04a929e5266f76c8d1330

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 9177d0b6a977e38a1fd559164db814f64a3952958f25b119115bf4b1758c8d23
MD5 3236e0c4651861cad911b5fe59c3b488
BLAKE2b-256 c96b27a235fdb291416b8de6ab102f54501cef7ce3a00d3989c417c5b6af8c7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c3fc4a53ca09dd82261be6d7182735b0374e4c1f772f89489f522d588205fec2
MD5 7e0e6cf2e48a46a4e581713fd07a3be9
BLAKE2b-256 bf9083f170b8c2e092c9c2b1d629cb048b918ce99c2d659fc39597246b83769b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post41-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 a4f57799934fa36f29828c26e0c7a9334d5e76fdcd5498b92086304293865bec
MD5 1ac105ad92cac46a1c7b79e24edc1cc3
BLAKE2b-256 07bbef5117b8026675134897c2e1a69c239f400bc23b4c1f8dff5104bb6ecaa0

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