В настоящее время я создаю код, который может преобразовать существующую смешанную целочисленную матрицу таблиц линейного программирования в PuLP-совместимую модель.Хотя эта программа работает на одном компьютере, она неоднократно выходила из строя из-за ошибки максимальной глубины рекурсии на другом.Оба компьютера используют максимальную глубину рекурсии, равную 1000. Модель, которую копирует этот код, невелика, поскольку это тестовая модель, имеющая приблизительно 250 переменных и 90 ограничений.
Код создает переменные x иЦелевая функция модели, но не выполняется во время первой итерации блока кода, используемого для создания пустых ограничений.Ограничения модели не возвращают значение
# Import PuLP modeler functions
from pulp import *
# base model
model = LpProblem("MASTRS_LP",LpMinimize)
# shape of existing tableau matrix
[m,n]=np.shape(A)
# positive X variables
xVar = {}
for i in range(1,n+1):
if i-1 in e[:,1]: # if i is in array holding indexes of integer variables
xVar[i] = LpVariable(name='xNodeI_%s' % (i),lowBound=0, upBound=1,cat=LpInteger) #Integers
else:
xVar[i] = LpVariable(name='xRoute_%s' % (i),lowBound=0, upBound=None,cat=LpContinuous) # Routes
# Objective Function
model += lpSum([0]), "Sum of Total Supply Chain"
for i in range(1,n):
model.objective.addterm(xVar[i+1], c[0,i])
# Constraints
for i in range(0,m):
# Create empty constraint
if s[i]==1:
model += lpSum([0]) <= b[i]
if s[i]==0:
model += lpSum([0]) == b[i]
if s[i]==-1:
model += lpSum([0]) >= b[i]
# add variables to constraint
for j in range(0,n):
if A[i,j]!=0:
model.constraints['_C'+str(i+1)].addterm(xVar[j+1], A[i,j])
# delete existing transshipment variables
del A,b,s,c
# solve transshipment model
status = model.solve()
Верхняя строка ошибки повторяется много раз,
ошибка выглядит так:
File "C:\Python27\ArcGIS10.3\lib\site-packages\pulp\pulp.py", line 735, in subInPlace
self.subInPlace(e)
File "C:\Python27\ArcGIS10.3\lib\site-packages\pulp\pulp.py", line 735, in subInPlace
self.subInPlace(e)
File "C:\Python27\ArcGIS10.3\lib\site-packages\pulp\pulp.py", line 733, in subInPlace
or isinstance(other, Iterable)):
File "C:\Python27\ArcGIS10.3\lib\abc.py", line 132, in __instancecheck__
if subclass is not None and subclass in cls._abc_cache:
File "C:\Python27\ArcGIS10.3\lib\_weakrefset.py", line 75, in __contains__
return wr in self.data
RuntimeError: maximum recursion depth exceeded in cmp