网站开发本地环境网站正在建设中页面 英文
文章目录
- 功能介绍
- 使用方法
- 执行脱敏
- 检查是否脱敏后数据
- 反脱敏
功能介绍
V0.24.0版本的MindOpt优化求解器新增了数据脱敏功能,可以对输入模型文件进行数据脱敏。将优化问题中问题名、决策变量、约束条件名称这些和业务场景相关的数据进行脱敏变更,使得优化问题的数据仅保留看不出用途的数值信息,隐藏业务信息。方便外发数据去做技术可行性验证、方案咨询、测试等。
数据脱敏可以称为数据的去隐私化,是对敏感数据进行修改或者转换的一种技术机制,在很大程度上能解决敏感数据直接在非可靠环境下使用的问题。比如在电商行业快递单上,会使用**号部分遮挡买家的个人信息,也能有效将数据脱敏,提供给外部使用。
优化建模文件中的主要敏感数据是业务的逻辑,比如优化问题名字、决策变量和约束条件名。业界的脱敏方案大致有这几种:无效化、随机值、数据替换、对称加密、平均值、偏移和取整。MindOpt求解器使用的是**“数据替换”**这一方案,顾名思义,数据替换就是设置一个虚拟值去替换真值。
如下表示意,脱敏前后的文件内容片段对比,脱敏前名称字符里面包含了业务逻辑,脱敏后信息都用固定的顺序数字来表示,删除业务逻辑,实现脱敏。

使用方法
执行脱敏
MinOpt新增的脱敏功能是在命令行里面。 主要通过以下两个命令行参数调用:
- sanitize :对模型文件中的敏感数据进行重命名脱敏。
- undo_sanitize :对已脱敏后的模型文件进行反脱敏(恢复数据)。
在命令行 Terminal 或者 Notebook的Cell magic运行(增加感叹号!),可以看到接口说明。
用户可以根据文档指引下载本地运行版的安装包,安装到自己本机来运行数据脱敏。下载地址:https://help.aliyun.com/document_detail/298275.html

脱敏功能支持 .mps/.lp 以及对应的压缩文件(.bz2/.gz)的文件格式,我们可以用安装包examples中的模型文件 afiro.mps作为例子,如下方式运行来实现脱敏。
mindopt <path/to/data>/afiro.mps --sanitize
#<path/to/data>为文件路径
比如云平台Notebook中可以这样运行
!mindopt /home/jupyter/mindopt/0.24.0/examples/data/afiro.mps MaxTime=10800 SPX/MaxIterations=1000000000 --sanitize
运行完成后,会输出结果的说明:
Reader started. File : /home/jupyter/mindopt/0.24.0/examples/data/afiro.mps
Reader terminated. Time : 0.001sProbName Sanitized.Sanitized variables count : 32
Sanitized constraints count : 27
File Sanitized : /home/jupyter/mindopt/0.24.0/examples/data/afiro_sanitized.mps
File Mapping : /home/jupyter/mindopt/0.24.0/examples/data/afiro_mapping.json
第1行:展示了读的是哪个文件
第6-7行:总结了模型有多少个变量,多少个约束。
第8-9行:脱敏完成,输出文件映射的地址,并在脱敏前文件的同级目录下生成脱敏后模型文件 afiro_sanitized.mps 和映射文件 afiro_mapping.json。
检查是否脱敏后数据
我们打开脱敏的优化问题文件 afiro_sanitized.mps,可以里面名称中的敏感信息是否已经被替换掉。命名规以R/C开头,十六进制整数递增就代表脱敏成功了,再检查没有其他问题就可以外发去测试了。
脱敏后的数据保留的数值还是原来的对应关系,不影响求解结果,比如我们用MindOpt运行脱敏后的文件:
mindopt afiro_sanitized.mps
运行后得到结果如下,与脱敏前运行结果一致。

反脱敏
脱敏时,生成的映射文件 afiro_mapping.json是用来后面恢复数据用的。此功能没有实际用途,主要是方便验证,请外发的时候不要发此映射文件。
这里我们打开映射文件 afiro_mapping.json查看一下映射关系,文件格式如下所示。如果脱敏前文件不包含模型名或模型名为空时,映射文件不展示 ProbName。

这里我们可以把数据存在同一个目录,然后执行反脱敏命令:
!mindopt ./data/afiro_mapping.json --undo_sanitize
会得到如下输出示意:
./data/afiro_sanitized.mps
Reader started. File : ./data/afiro_sanitized.mps
Reader terminated. Time : 0.000sProbName undo sanitized.Undo sanitized variables count : 32
Undo sanitized constraints count : 27
File undo sanitized : ./data/afiro_sanitized_sanitized.mps
运行后还原脱敏模型文件,生成 afiro_sanitized_sanitized.mps文件。
运行 afiro_sanitized_sanitized.mps文件结果与上文一致。

