如何使用Python将集合输入OPL(优化编程语言)模型

问题描述 投票:0回答:1

在输入集的 OPL 中,我们定义如下:

tuple Damage_line_Nodes {
int value;
};

// Declare a set with a few tuples
{Damage_line_Nodes} Damage_line_Node = ...;

在 python 中(我们尝试使用下面给出的 python 代码向 OPL 模型提供输入)

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。 *** 错误 [GENERATE_001] 位于 828:2-19 C:/Users/VCGA/opl/MEG/MEG.mod:无法使用类型 value:int 作为 int。 *** 错误 [GENERATE_001] 位于 837:2-19 C:/Users/VCGA/opl/MEG/MEG.mod:无法使用类型 value:int 作为 int。 致命的 Python 错误:已中止

我们遇到的错误消息表明 OPL 模型中预期的内容和提供的内容之间存在类型不匹配。具体来说,OPL 模型不接受类型 value:int 作为 int 的有效类型。建议我在 OPL 和 python 中正确使用 python 将输入提供给 OPL 模型。

optimization cplex opl
1个回答
0
投票

您可以使用元组列表,如https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoocallopl.py

Buses=[
        (40,500),
        (30,400)
        ]

# Create an OPL model from a .mod file
with create_opl_model(model="zootupleset.mod") as opl:
    # tuple can be a list of tuples, a pandas dataframe...
    opl.set_input("buses", Buses)

    # Generate the problem and solve it.
    opl.run()

根据您的情况,转动

Damage_Nodes = [
{8, 9, 12, 6, 19, 23, 24, 27, 30} 
]

进入

Damage_Nodes = [
(8,), (9,), (12,) , (6,) , (19,) , (23,) , (24,) , (27,) , (30,), 
]
© www.soinside.com 2019 - 2024. All rights reserved.