Python PuLP递归错误

时间:2018-07-17 11:57:04

标签: python pandas linear-programming pulp

我正在使用PuLP库处理LP问题,我有些奇怪,我自己无法解释。我有近100个变量和约束,我想将其放入模型中,但我不能。它告诉我

RecursionError: maximum recursion depth exceeded in comparison

首先,我尝试在for循环中对其进行解析:

for cent_artic in df_demand['REQUIRED']:
    display(df_offers[df_offers['REQUIRED']==cent_artic])
    lista = list(df_ofertas1[df_ofertas1['REQUERIDO']==cent_artic]['OFERTADO'])
    display(lista)
    prob += lpSum(lista) >= cent_artic_dict[cent_artic], "Restriccion para cent_artic "+cent_artic 

然后出现RecursionError。

我尝试仅通过一个限制来解决该问题:

prob += lpSum(['c-1_a-2757_p-13','c-1_a-2757_p-12','c-1_a-2757_p-188']) >= cent_artic_dict['c-1_a-2757']

是一样的。如果我尝试仅传递一个方程式,我不明白为什么Python会告诉我一些有关递归错误的信息。

cent_artic_dict = {'c-5_a-17372_p-188': var_c_5_a_17372_p_188,
                   'c-179_a-2757_p-188': var_c_179_a_2757_p_188,
                   'c-18_a-17372_p-188': var_c_18_a_17372_p_188,
                   'c-26_a-2757_p-18': var_c_26_a_2757_p_18,
                   'c-41_a-2757_p-18': var_c_41_a_2757_p_18,
                   'c-156_a-2757_p-188': var_c_156_a_2757_p_188,
                   'c-24_a-17372_p-188': var_c_24_a_17372_p_188, 
                   ...
                  }

现在,df_offers的数据帧的形状为(89,6)。一开始是(89,21)

有人可以解释为什么我遇到RecursionError吗?谢谢。

我已经看到了另一个问题,但是它没有答案,只有一个建议

2 个答案:

答案 0 :(得分:0)

我几乎不知道你在做什么,但我可以指出

prob += lpSum(['c-1_a-2757_p-13','c-1_a-2757_p-12','c-1_a-2757_p-188']) >= cent_artic_dict['c-1_a-2757']

无效,因为lpSum需要LpVariables而不是字符串的列表

答案 1 :(得分:0)

我遇到了类似的问题,并且遇到了相同的递归错误。

对我来说,我遇到了数据类型问题,我的约束值存储为字符串而不是数字!这等效于原始问题中cent_artic_dict['c-1_a-2757']中的值。一旦我的右边约束是一个数字,我就很好了。根据评论,我认为Krakenudo可能正面临类似的情况。