使用AMPLPY时对dat文件进行加密解密的可行性咨询
AMPL加密数据存储调用实现方案
- 方案1:内存直传数据,完全规避dat文件落地
你无需将数据导出为明文dat文件再读取,amplpy原生支持直接将Python中的数据结构(列表、字典、pandas对象等)赋值给AMPL的集合、参数、变量等实体,全程数据仅在内存中流转,不会产生明文落地文件。
示例代码如下:
from amplpy import AMPL import pandas as pd # 初始化AMPL实例 ampl = AMPL() # 加载模型文件(若模型也需加密可同理读取加密内容后用ampl.eval加载) ampl.read("your_model.mod") # 直接给AMPL集合赋值 ampl.get_set("PROD").set_values(["p1", "p2", "p3"]) # 给参数赋值,支持直接传入Python字典、pandas Series/DataFrame cost_data = {"p1": 10, "p2": 15, "p3": 20} ampl.get_parameter("cost").set_values(cost_data) # 直接执行求解逻辑,全程无dat文件生成 ampl.solve()
方案2:加密持久化数据,运行时解密后内存传递
如果有数据持久化存储需求,可以将建模用的Python数据结构用对称加密算法(如AES)加密后落地为二进制文件,运行时将文件解密读取到内存中,再用上述amplpy直传API赋值给AMPL即可,全程不需要生成明文dat文件。方案3:内存生成dat格式内容,直接调用AMPL解析
如果你已经有成熟的dat内容生成逻辑,可以把dat内容生成为Python字符串,不需要写入磁盘,直接调用ampl.eval()方法加载:
# dat_content为内存中生成的dat格式字符串,无磁盘落地 dat_content = """ set PROD := p1 p2 p3; param cost := p1 10 p2 15 p3 20; """ ampl.eval(dat_content)
若你的模型文件(.mod)也有加密需求,可使用同样逻辑:读取加密的模型文件解密为内存字符串后,调用
ampl.eval()加载,无需落地明文mod文件。
内容的提问来源于stack exchange,提问作者user903772
相关产品推荐
相关产品推荐

