You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:16:13