4.7. 使用 MATLAB 语言调用 MindOpt¶
本节通过一个简单的示例展示如何使用 MATLAB 语言调用 MindOpt 实现优化模型的读取与求解。
4.7.1. 编辑.m文件¶
以下我们将展示如何在 .m
文件中调用 MindOpt MATLAB API 读取优化问题模型文件并进行求解。
首先调用 mindopt_read()
函数来读取 MPS/LP 格式的优化问题:
4model = mindopt_read(file);
最后使用 mindopt()
来求解问题,并通过模型属性 X 和 ObjVal 来查看最优解的决策变量值和目标函数值。
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>’ ` 手动设置环境变量。