4.1. 命令行调用 MindOpt¶
本节介绍如何使用 MindOpt 命令行工具来求解优化问题。使用前用户必须先设置环境变量后;有关环境变量设置的详细说明,请参阅 安装说明。
4.1.1. 调用方式简述¶
MindOpt 的调用如下:
mindopt <filename> [options]
<filename>
:MPS/LP、.dat-s 格式的优化问题。options
:主要用于求解参数设置。关于参数的详细介绍,请参阅 可选输入参数 一节。
其他命令行指令options:
MindOpt [options] |
英文说明 |
中文说明 |
---|---|---|
-h (or - -help) |
list options |
列出可操作指令 |
-v (or - -version) |
print release version |
打印当前软件的发布版本号 |
-d (or - -disable_file_output) |
disable solution (.bas and .sol files) output |
关闭求解器的解的输出( .bas and .sol files) |
-r (or - -relax) |
relax all integrality requirements |
松弛问题中所有的整数性要求 |
-c (or - -check_license) |
run license diagnostic tool |
运行License检查工具 |
- -desensitize |
desensitize the optimization model files |
对优化问题模型进行脱敏,删除变量名约束名等业务相关名称 |
- -sensitize |
recover the model which has been desensitized |
对已经脱敏的文件进行恢复 |
4.1.2. 示例¶
以下为求解一个线性规划问题的示例:
cd <MDOHOME>/examples/data
mindopt afiro.mps
以下则为执行时的输出:
MindOpt Version 0.19.0 (Built: 20220410)
Copyright (c) 2020-2021 Alibaba Cloud.
Reader started. File : ../data/afiro.mps
Reader terminated. Time : 0.001s
Checking license : /home/mindopt/mindopt/mindopt.lic
Your license will expire in 51 days.
Concurrent optimization started.
- Num. threads : 12
- Num. optimizers : 2
- Registered optimizers.
+ : Simplex method (1 thread, enabled output)
+ : Interior point method (11 threads, disabled output)
Model summary.
- Num. variables : 32
- Num. constraints : 27
- Num. nonzeros : 83
- Bound range : [4.4e+01,5.0e+02]
- Objective range : [3.2e-01,1.0e+01]
- Matrix range : [1.1e-01,2.4e+00]
Presolver started.
Presolver terminated. Time : 0.000s
Simplex method started.
Iteration Objective Dual Inf. Primal Inf. Time
0 -5.21810e+02 0.0000e+00 4.1717e+02 0.00s
4 -4.64753e+02 0.0000e+00 0.0000e+00 0.00s
Postsolver started.
Simplex method terminated. Time : 0.002s
Concurrent optimization terminated.
Optimizer summary.
- Optimizer used : Simplex method
- Optimizer status : OPTIMAL
- Total time : 0.006s
Solution summary. Primal solution Dual solution
- Objective : -4.6475314286e+02 -4.6475314286e+02
- Norm : 5.00e+02 2.29e+00
- Var. viol. : 1.42e-14 0.00e+00
- Cons. viol. : 0.00e+00 5.55e-17
4.1.3. 输入文件MPS/LP、dat-s¶
MindOpt 支持下列优化模型的储存格式:
.dat-s
格式, 如SDP问题示例.nl
格式,可在 MindOpt 对接建模语言的模块mindoptampl
来调用,也支持命令行运行,详见 确认安装 mindoptampl 应用 。
这些格式最初是为(混合整数)线性规划问题设计的,现在已扩展到支持二次锥优化。在使用这些格式之前,请先阅读 MPS 格式 和 LP 格式 的规范。
Warning
- 关于
LP
格式和MPS
格式的命名,需要遵守严格的规范,否则在实际使用过程当中容易出错,且不易排查。
4.1.4. 输入参数¶
用户可以透过以下命令来更改默认参数:
<param>=<value>
:将参数<param>
的数值修改为<value>
。
例如,以下命令使 MindOpt 求解 afiro.mps
,将优化方法 (“Method”) 更改为 原始单纯形法,并将迭代次数 (“SPX/MaxIterations”) 限制为 10000。
mindopt afiro.mps Method=0 SPX/MaxIterations=10000
关于参数的细节,请参阅 可选输入参数 一节。
4.1.5. 数据脱敏¶
--sanitize
和 --undo_sanitize
接口的作用是数据脱敏和还原。其脱敏原理可以参考 博客。
本接口支持的文件类型包含:
MPS:文件扩展名必须为
.mps
、.mps.gz
或.mps.bz2
。LP:文件扩展名必须为
.lp
、.lp.gz
或lp.bz2
。
例如,我们以安装目录的 examples/data
文件夹的 80bau3b.mps
为示例。
通过命令行输入如下指令来实现脱敏:
mindopt ./data/80bau3b.mps --sanitize
在脱敏后,会生成两个文件:
–
80bau3b_sanitized.mps
脱敏后的文件,里面的变量名和约束名等,均会被转换成 Rxx 和 Cxx 的顺序编码形式,清除业务相关信息,仅保留数值数据。—
80bau3b_mapping.json
文件是脱敏后的文件和脱敏前文件的变量约束的对应关系。
脱敏后的文件,可以通过 80bau3b_mapping.json
文件来恢复原文件,将两个文件放置在同一个目录,然后命令行指令如下:
mindopt ./data/80bau3b_mapping.json --undo_sanitize
然后会生成 80bau3b_sanitized_undo_sanitized.mps
文件,对比原问题文件 80bau3b.mps
可以看到已经恢复。