4.7. 使用 MATLAB 语言调用 MindOpt

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

4.7.1. 编辑.m文件

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

首先调用 mindopt_read() 函数来读取 MPS/LP 格式的优化问题:

4model = mindopt_read(file);

最后使用 mindopt() 来求解问题,并通过模型属性 XObjVal 来查看最优解的决策变量值和目标函数值。

 5result = mindopt(model);
 6
 7for v=1:length(result.X)
 8    fprintf('%s %d\n', model.varnames{v}, result.X(v));
 9end
10fprintf('Obj: %e\n', result.ObjVal);

以下为完整的源代码文件 readmps.m

 1function[objval] = readmps(file);
 2%H1 read a model and solve it
 3
 4model = mindopt_read(file);
 5result = mindopt(model);
 6
 7for v=1:length(result.X)
 8    fprintf('%s %d\n', model.varnames{v}, result.X(v));
 9end
10fprintf('Obj: %e\n', result.ObjVal);
11
12objval = result.ObjVal;

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

4.7.2. Linux平台上执行

我们在安装路径 <MDOHOME>/<VERSION>/examples/matlab 下提供了示例文件。首先从终端启动 MATLAB IDE(否则`MINDOPT_HOME` 环境变量不会被继承):

open /usr/local/bin/matlab

然后在 MATLAB IDE 命令行窗口中执行 startup 命令加载环境变量,最后运行示例程序完成优化求解:

startup
readmps ../data/afiro.mps

另一种方式是直接通过命令行运行示例程序,这种方式比较直接,不需要加载环境变量。

matlab -batch "readmps ../data/afiro.mps"

Note

在 Linux x64 平台上,如果遇到 MATLAB 退出时崩溃,可以通过预加载求解器自带的 libiomp5.so 库解决。

# 执行以下指令以预加载库的方式启动 MATLAB IDE:
LD_PRELOAD=$MINDOPT_HOME/linux64-x86/lib/libiomp5.so /usr/local/bin/matlab
# 执行以下指令以预加载库的方式运行示例程序:
LD_PRELOAD=$MINDOPT_HOME/linux64-x86/lib/libiomp5.so matlab -batch "readmps ../data/afiro.mps"

4.7.3. macOS平台上执行

我们在安装路径 <MDOHOME>/<VERSION>/examples/matlab 下提供了示例文件。首先从终端启动 MATLAB IDE(否则`MINDOPT_HOME` 环境变量不会被继承):

open /Applications/MATLAB_R2024b.app

然后在 MATLAB IDE 命令行窗口中执行 startup 命令加载环境变量,最后运行示例程序完成优化求解:

startup
readmps ../data/afiro.mps

另一种方式是直接通过命令行运行示例程序,这种方式比较直接,不需要加载环境变量。

/Applications/MATLAB_R2024b.app/bin/matlab -batch "readmps ../data/afiro.mps"

4.7.4. Windows平台上执行

我们在安装路径 <MDOHOME>/<VERSION>/examples/matlab 下提供了示例文件。首先启动 MATLAB IDE,然后在 MATLAB IDE 命令行窗口中执行 startup 命令加载环境变量,最后运行示例程序完成优化求解:

startup
readmps ../data/afiro.mps

另一种方式是直接通过命令行运行示例程序,这种方式比较直接,不需要加载环境变量。

"C:\Program Files\MATLAB\R2024b\bin\matlab.exe" -batch "readmps ../data/afiro.mps"

Note

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

  • 如果用户通过安装程序安装求解器,环境变量会自动设置。从终端启动 MATLAB IDE 时,环境变量会自动继承,否则,用户需要通过替换 <MDOHOME>/<VERSION>/examples/matlab/startup.m 的语句 mdo_env = getenv(‘MINDOPT_HOME’)mdo_env = ‘<MDOHOME>/<VERSION>’ ` 手动设置环境变量。