4.4. 使用 Python 语言调用 MindOpt

本节通过一个简单的示例展示如何使用 Python 语言调用 MindOpt 实现优化模型的读取与求解。

4.4.1. 安装mindoptpy库

MindOpt 的 Python 库可通过两种方式进行安装。在正式安装之前,请留意以下注意事项。

Note

  • 建议通过 conda 创建虚拟环境,并在该虚拟环境下安装 MindOpt 软件包 (conda的安装请参考: conda文档)。

  • 对于使用 conda 环境的 macOS 用户,需保持 conda 和 macOS 的架构信息相符,可通过判断 conda info 输出的 __archspec 字段与 uname -m 的输出是否一致进行判断。

conda info
uname -m

确认 conda info 输出中的 __archspec 字段的值和 uname -m 的输出一致。

4.4.1.1. 方式一:通过 pip install 安装 (推荐)

此安装方式适用于 0.24.1 及之后的版本,执行以下指令安装 mindoptpy 库:

pip install mindoptpy

若已经安装了旧版本的 mindoptpy 包,可以执行以下指令以升级到最新 mindoptpy 包:

pip install --upgrade mindoptpy

本安装方式内嵌了一个特定 License,有效期是:2023/01/01 ~ 2024/12/31。不依赖本地安装包,不支持 命令行调用 MindOpt 等其他功能。如需其他功能,请完整安装,参阅 安装说明

4.4.1.2. 方式二:通过 MindOpt 单机版安装 Python SDK

MindOpt 单机版的安装请参阅 安装说明

首先执行以下指令安装依赖包:

pip install numpy scipy

最后进入 Python SDK 所在目录,执行以下指令安装 mindoptpy 库。以 Linux x86 平台为例:

cd <MDOHOME>/linux64-x86/lib/python
python setup.py install

4.4.2. 编辑.py文件

以下我们将展示如何在 .py 文件中调用 MindOpt Python API 读取优化问题模型文件并进行求解。

首先导入 Python 模块:

1from mindoptpy import *

然后创建环境和启动环境:

17    env = Env()
18    env.start()

使用 read() 来读取 MPS/LP 格式的优化问题:

18    model = read(filename, env)

最后,使用 optimize() 来求解问题,并通过模型属性 ObjVal 来查看最优解的目标函数值。

21        model.optimize()
22        print(model.objval)

以下为完整的源代码文件 read_mps.py

 1from mindoptpy import *
 2import argparse
 3
 4
 5if __name__ == "__main__":
 6
 7    # Register arguments.
 8    parser = argparse.ArgumentParser(description='Run MindOpt.')
 9    parser.add_argument('--filename', type=str, default='../data/afiro.mps', help='Input LP/MPS filename.')
10    args = parser.parse_args()
11    filename = args.filename
12
13    print("Started MindOpt.")
14    print(" - Filename  : {0}".format(filename))
15
16    env = Env()
17    env.start()
18    model = read(filename, env)
19
20    try:
21        model.optimize()
22        print(model.objval)
23
24    except MindoptError as e:
25        print("Received MindOpt exception.")
26        print(" - Code          : {}".format(e.errno))
27        print(" - Reason        : {}".format(e.message))
28    except Exception as e:
29        print("Received exception.")
30        print(" - Reason        : {}".format(e))
31    finally:
32        model.dispose()

在安装路径 <MDOHOME>/<VERSION>/examples/python 下中可以找到更多 Python 语言相关示例文件。

4.4.3. Linux和macOS上执行

我们在安装路径 <MDOHOME>/<VERSION>/examples/python 下提供了示例文件。执行以下指令运行示例代码以完成优化求解:

cd <MDOHOME>/examples/python
python read_mps.py --filename=../data/afiro.mps

4.4.4. Windows平台上执行

我们在安装路径 <MDOHOME>\<VERSION>\examples\python 下提供了示例文件。执行以下指令运行示例代码以完成优化求解:

cd <MDOHOME>\examples\python
python read_mps.py --filename=..\data\afiro.mps

Note

  • 为使应用程序能够正确地定位到动态库,用户需在环境变量中指定动态库的路径。若环境变量未指定,则用户需按照操作系统查找动态库的逻辑,将动态库文件置于合适位置。关于环境变量的设置,请参阅 安装说明

  • 关于 Python 语言编译器版本的支持,请参阅 支持平台 中的说明。