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 (or Lib on linux) folder of an installed AIMMS version. Next you need a valid AIMMS license url, obtained via https://licensing.cloud.aimms.com/license, or an already preconfigured AIMMS developer license.

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 DataReturnTypes, Project 

# Initialize the AIMMS project
my_aimms = Project(
    # path to the AIMMS Bin folder (on linux the Lib folder)
    aimms_path=os.path.join(os.getenv("LOCALAPPDATA"), "AIMMS", "IFA", "Aimms", "25.4.3.3-x64-VS2022", "Bin"),

    # 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="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.post48-cp313-cp313-win_amd64.whl (563.3 kB view details)

Uploaded CPython 3.13Windows x86-64

aimmspy-1.0.1.post48-cp313-cp313-manylinux_2_27_x86_64.whl (718.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post48-cp312-cp312-win_amd64.whl (563.3 kB view details)

Uploaded CPython 3.12Windows x86-64

aimmspy-1.0.1.post48-cp312-cp312-manylinux_2_27_x86_64.whl (717.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post48-cp311-cp311-win_amd64.whl (561.6 kB view details)

Uploaded CPython 3.11Windows x86-64

aimmspy-1.0.1.post48-cp311-cp311-manylinux_2_27_x86_64.whl (717.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

aimmspy-1.0.1.post48-cp310-cp310-win_amd64.whl (561.0 kB view details)

Uploaded CPython 3.10Windows x86-64

aimmspy-1.0.1.post48-cp310-cp310-manylinux_2_27_x86_64.whl (716.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b77eb030c9cc5ffcbf1a11631f09d51b6f64bc6b989d6f6c32d86f86758ab052
MD5 9506e97e66fc0fa523c4f9b05f182f78
BLAKE2b-256 374a2e4b6f51b9d1cd7e0c729ea0c3afec49c18b901bbffa9e8083645b41e306

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 2b050a392177e296875c591569ecdf1cd28875e1c8d2ba5350341a0c568f477d
MD5 c7dedc5423259d8b091291dd98c17be0
BLAKE2b-256 84d3b12e30796c0b7b611177218df691682d14c3f62f3b0fd88d257eacdeef81

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a748b52a4dcd2421da2f7006463d6dfcca6cd5f3831702da7b2826ac8e8a7e7e
MD5 75c6684db0b73e40f8d9dd5d630c1f9d
BLAKE2b-256 31dcfbd3f8aaa1b7f55f6137a824653e91b0ff1bc39d20aa932c41a4ca302508

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 2976d8382d47ef21447b2c02ff508e92b78abfaa225ef22d408b77a76902b86f
MD5 c9932ed127c4f2c3bd39e70f32016340
BLAKE2b-256 4c77df98c2feaca3e4a0eaca6d5689b1118c788edf7d8b7b19e1d73e61d204e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fcb197d9b929ff75c22ae2ea95202663ddb7462f80aba9f78cdd6e6fa204f344
MD5 18cfd8fcaacbc281439bdd035112c62a
BLAKE2b-256 17e531d5763b565436e713a5b371f793a407a2115859c5702efd189c864f9e56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 9246ae9c329c432274e6ba5f2107cbaa625ba46d67c8752978e918c75fc53dd6
MD5 3407b4badde33cba395b06bcc323b867
BLAKE2b-256 68c2bd1bbebeb76c2985b24639ec537c8b51ccaa68df35fff1b2b20f374b7862

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 86aed6066d010f202c8a71cf343865b544facd4f6166e6d52413f817cca608c2
MD5 2549a00afbd8622cfb69b5dc9e94fb4b
BLAKE2b-256 52d1f9cdaa263d628ed3c661d48a4ee96db7cdd6fdd0fd2764af7d32eb5e6763

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for aimmspy-1.0.1.post48-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 c570da760917c79d69475ae72f4bdfe216db44eff5de3368c0df84385fc700ce
MD5 d2d79599c932069f81a6a30e11be7f90
BLAKE2b-256 cfc2f41d90a23522f7f2b060ba4f8a9e9e362949972abfd64fa54f96056cdc27

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