如何用Python向OPL模型输入集合?类型不匹配问题求助
Python向OPL集合输入数据的类型匹配问题解决
问题背景
OPL中定义的集合结构如下:
tuple Damage_line_Nodes { int value; }; // Declare a set with a few tuples {Damage_line_Nodes} Damage_line_Node = ...;
原Python输入代码:
from doopl.factory import create_opl_model # Data Damage_Nodes = [ {8, 9, 12, 6, 19, 23, 24, 27, 30} ] my_set_list = list(Damage_Nodes) model_path = "C:/Users/VCGA/opl/MEG/MEG.mod" with create_opl_model(model=model_path) as opl: opl.set_input("Damage_line_Node", Damage_Nodes) opl.set_input('Damage_line_Node',my_set_list) opl.run()
运行后报错:
*** ERROR[GENERATE_001] at 795:25-42 C:/Users/VCGA/opl/MEG/MEG.mod: Cannot use type <value:int> for int. *** ERROR[GENERATE_001] at 828:2-19 C:/Users/VCGA/opl/MEG/MEG.mod: Cannot use type <value:int> for int. *** ERROR[GENERATE_001] at 837:2-19 C:/Users/VCGA/opl/MEG/MEG.mod: Cannot use type <value:int> for int. Fatal Python error: Aborted
错误原因
OPL中的Damage_line_Node是元组类型的集合,每个元素必须是包含value字段的Damage_line_Nodes元组。但原Python代码传入的是普通整数集合/列表,和OPL定义的元组结构不匹配,导致类型转换失败。
修正后的代码
需要将Python数据转换成符合OPL元组结构的格式,每个元素以字典形式对应元组的字段:
from doopl.factory import create_opl_model # 转换为符合OPL元组结构的数据:每个元素是带value键的字典 Damage_Nodes = [{"value": 8}, {"value": 9}, {"value": 12}, {"value": 6}, {"value": 19}, {"value": 23}, {"value": 24}, {"value": 27}, {"value": 30}] model_path = "C:/Users/VCGA/opl/MEG/MEG.mod" with create_opl_model(model=model_path) as opl: opl.set_input("Damage_line_Node", Damage_Nodes) opl.run()
- 每个整数都被包装成字典,键名
value必须和OPL元组中定义的字段名完全一致 - 直接传入这个字典列表即可匹配OPL的元组集合类型,无需额外嵌套集合
内容的提问来源于stack exchange,提问作者Vikas Gautam
相关产品推荐
相关产品推荐

