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 支持下列优化模型的储存格式:

这些格式最初是为(混合整数)线性规划问题设计的,现在已扩展到支持二次锥优化。在使用这些格式之前,请先阅读 MPS 格式LP 格式 的规范。

Warning

关于 LP 格式和 MPS 格式的命名,需要遵守严格的规范,否则在实际使用过程当中容易出错,且不易排查。
  • LP 格式的 命名规范,包括:首字母不可为数字、句点或字母 eE 等。用户在使用 API (参考 完整的API说明) 输入变量名或约束名时,需要注意。

  • 在用 MindOpt 建模生成 MPSLP 文件时,若命名格式不合规范,则 MindOpt 会改为默认命名输出。

  • 变量名或约束名的长度不能超过 160 个 char

  • 变量名或约束名中不能包含计算符号,如 “+-” 等,否则求解器可能会将这些符号当做计算符而非变量名,从而导致解析出错。

  • 变量名或约束名中可以带有一定的中文,但为了稳定性起见,最好不要这样做。

Note

MindOpt 目前还支持以下压缩文件格式:

即, MindOpt 可以直接读取 .mps.gz 文件和 .mps.bz2 文件。

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.gzlp.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 可以看到已经恢复。