求解器用户手册
优化求解器的用户手册,介绍求解器的调用方式、如何输入问题和求解器的APIs清单。
由于本软件APIs比较多,且还在高频增加功能中,因此APIs的介绍会较多地引导至另一个《MindOpt用户使用手册——完整版》上查看细节。给您带来的不连贯阅读体验敬请谅解。
优化求解器调用方式
在使用之前,请先下载和安装求解器SDK,并获取使用权限,见快速入门(开通和使用)和求解器SDK下载和安装。
下面列出简单的示例,求解器细节的调用方式和完整案例可查看更多。
命令行调用示例:
linux以及osx下,假设用户已按照安装文档,将MindOpt安装到$HOME/mindopt下
mindopt $HOME/mindopt/0.19.0/examples/data/afiro.mps
windows下
mindopt %MINDOPT_HOME%\examples/data/afiro.mps
C/C++/Java/Python语言调用示例:
// 方法1:从0.19.0版本开始引入新式的创建模型方式
MdoEnvPtr env;
MdoMdlPtr model;
Mdo_createEnv(&env);
Mdo_createMdlWithEnv(&model, env);
Mdo_readProb(model, filename);
Mdo_solveProb(model);
Mdo_displayResults(model);
Mdo_freeMdl(&model);
// C SDK 需要手动释放 env
Mdo_freeEnv(&env);
// 方法2:旧式的创建模型方式仍然支持
/*
MdoMdlPtr model;
Mdo_createMdl(&model);
Mdo_readProb(model, filename);
Mdo_solveProb(model);
Mdo_displayResults(model);
Mdo_freeMdl(&model);
*/
// 方法1:从0.19.0版本开始引入新式的创建模型方式
using mindopt::MdoEnv;
MdoEnv env;
MdoModel model(env);
model.readProb(filename);
model.solveProb();
model.displayResults();
// 方法2:旧式的创建模型方式仍然支持
/*
MdoModel model;
model.readProb(filename);
model.solveProb();
model.displayResults();
*/
// load动态链接库,比如c:\mindopt\0.19.0\win64_x86\lib\mindopt_0_19_0.dll
Mdo.load("c:\mindopt\0.19.0\win64_x86\lib\mindopt_0_19_0.dll");
// 方法1:从0.19.0版本开始引入新式的创建模型方式
MdoEnv env = new MdoEnv();
MdoModel model = env.createModel();
model.readProb(filename)
model.solveProb();
model.displayResult();
model.free();
// JAVA SDK 需要手动释放 env
env.free();
// 方法2:旧式的创建模型方式仍然支持,但被标记为过时,将在以后的版本中移除
/*
MdoModel model = new MdoModel();
model.readProb(filename)
model.solveProb();
model.displayResult();
*/
# 方法1:从0.19.0版本开始引入新式的创建模型方式
env = mindoptpy.MdoEnv()
model = mindoptpy.MdoModel(env)
model.read_prob(filename)
model.solve_prob()
model.display_results()
# 方法2:旧式的创建模型方式仍然支持
# model = mindoptpy.MdoModel()
# model.read_prob(filename)
# model.solve_prob()
# model.display_results()
完整例子的代码请查看更多。
优化问题的输入的建模方式
优化问题支持3种输入方式:文件输入、数据建模APIs输入、外部建模工具调用。
方式2:建模APIs输入
相关联的APIs有多种,同一个数据也可以有多种输入方式。
按行输入Python示例简述:
用
mindoptpy.MdoModel.set_int_attr()
将目标函数设置为最小化;用
mindoptpy.MdoModel.add_var()
来添加四个优化变量,并分别定义其下界、上界、名称和类型;用
mindoptpy.MdoModel.add_cons()
来添加约束。
按列输入Python示例简述:
用
mindoptpy.MdoModel.set_int_attr()
将目标函数设置为最小化;开始时调用
mindoptpy.MdoModel.add_cons()
来创建带有指定的左侧和右侧值的约束(无非零元素);创建临时的列对象
mindoptpy.MdoCol()
来按顺序地保存约束和非零元素的值;最后调用
mindoptpy.MdoModel.add_var()
来创建新的变量,及其相应的目标函数系数、列向量中的非零元、下界和上界、变量名以及变量类型。
方式3:外部建模工具 AMPL、Pyomo、PuLP
MindOpt支持一些常见的建模工具,当前支持以下几种:
1. AMPL
使用 AMPL 调用 MindOpt 之前需要先安装 MindOpt 和 AMPL 。mindoptampl 应用位于安装包的\bin\mindoptampl
。mindoptampl 提供了一些可配置的参数,用户可以通过 AMPL 的option
命令设置 mindoptampl_options
参数,如:
ampl: option mindoptampl_options 'numthreads=4 maxtime=1e+4';
更详细的介绍和案例请查看更多。
2. Pyomo
使用 Pyomo 调用 MindOpt 之前需要先安装 MindOpt 和 Pyomo。调用 MindOpt 求解器的 Pyomo API 需要使用接口文件 mindopt_pyomo.py
。 MindOpt 的 Pyomo 接口是继承自 Pyomo 的 DirectSolver
类,实现代码在安装包的\lib\pyomo\mindopt_pyomo.py
。在 Python 代码中导入该文件:
from mindopt_pyomo import MindoDirect
3. PuLP
使用 PuLP 调用 MindOpt 之前需要先安装 MindOpt 和 PuLP。调用 MindOpt 求解器的 PuLP API 需要使用接口文件 mindopt_pulp.py
。 MindOpt 的 PuLP 接口继承自 PuLP 的 LpSolver
类,实现代码在安装包的\lib\p