在输入集的 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 模型。
您可以使用元组列表,如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,),
]