4.1. 命令行调用 MindOpt

本节介绍如何使用 MindOpt 命令行工具来求解优化问题。使用前用户必须先设置环境变量后;有关环境变量设置的详细说明,请参阅 安装说明

4.1.1. 调用方式简述

MindOpt 命令行工具的调用格式如下:

mindopt <filename> [options]
  • <filename>:用于设置优化问题模型文件的路径。

  • 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. 示例

以下示例使用命令行工具求解安装路径 <MDOHOME>examples/data 下的示例问题 afiro.mps

cd <MDOHOME>/examples/data
mindopt afiro.mps

命令执行后的输出如下:

MindOpt Version 0.25.0 (Build date: 20230706)
Copyright (c) 2020-2023 Alibaba Cloud.

Start license validation (current time : 07-JUL-2023 02:38:36).
License validation terminated. Time : 0.002s

Reader started. File    : mindopt/0.25.0/examples/data/afiro.mps
Reader terminated. Time : 0.002s

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.004s

Simplex method started.
Model fingerprint: =Y2dhV2dudXY

    Iteration       Objective       Dual Inf.     Primal Inf.     Time
            0     0.00000e+00      2.9000e+00      0.0000e+00     0.01s
            5    -4.64753e+02      0.0000e+00      0.0000e+00     0.01s
Postsolver started.
Simplex method terminated. Time : 0.004s

Optimizer summary.
 - Optimizer used     : Simplex method
 - Optimizer status   : OPTIMAL
 - Total time         : 0.014s

Solution summary.       Primal solution
 - Objective          : -4.6475314286e+02

4.1.3. 输入文件格式

MindOpt 命令行支持下列格式的优化模型输入:

  • .mps 格式

  • .lp 格式

  • .qps 格式

  • .dat-s 格式

这些格式最初是为(混合整数)线性规划问题设计的,现在已扩展到支持二次锥优化。关于 .mps 格式和 .lp 格式的规范,请阅读 MPS 格式LP 格式.nl 格式的模型文件可使用 MindOpt 建模语言应用 mindoptampl 进行调用,详见 mindoptampl 应用

Warning

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

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

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

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

  • 为了稳定性起见,变量名或约束名中应尽量避免使用中文。

Note

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

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

4.1.4. 参数设置

用户可以通过以下格式的命令将参数 <参数名> 的值修改为 <参数值>

<参数名>=<参数值>

例如下例在求解 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

通过如下命令行指令来实现模型文件脱敏:

mindopt afiro.mps --sanitize

在脱敏后,会生成两个文件:

  • afiro_sanitized.mps 脱敏后的模型文件,里面的变量名和约束名等会被转换成 Rxx 和 Cxx 的顺序编码形式,清除业务相关信息,仅保留数值数据。

  • afiro_mapping.json 文件记录了脱敏后文件和脱敏前文件中变量约束的对应关系。

脱敏后的文件,可以通过 afiro_mapping.json 文件来恢复原文件,将两个文件放置在同一个目录,然后执行以下命令行指令:

mindopt afiro_mapping.json --undo_sanitize

执行命令生成的 afiro_sanitized_undo_sanitized.mps 文件与原问题文件 afiro.mps 内容一致。