0

我正在尝试使用 Python PuLP 对以下方程进行建模

在此处输入图像描述

我编写了以下 Python 代码

prob = LpProblem('Resource', LpMaximize)

# x variables

xs = [LpVariable("x{0}{1}{2}".format(i + 1, j + 1, k + 1), cat = "Binary")

    for i in range(0, 3)
    for j in range(0, 5)
    for k in range(0, 2)
]

print("\nX Variable\n")

for i in range(0, len(xs)):
    print(xs[i])

# y variables

ys = [LpVariable("y{0}{1}".format(i + 1, j + 1), cat = "Binary")

    for i in range(0, 3)
    for j in range(0, 5)
]

print("\nY Variable\n")
for i in range(0, len(ys)):
    print(ys[i])


for j in range(0, 5):
    for k in range(0, 2):
    for i in range(0, 3):
    con = "x{0}{1}{2} <= y{3}{4}".format(i + 1, j + 1, k + 1, i + 1, j + 1)
prob += LpAffineExpression(LpElement(con))
print(con)

status = prob.solve()

这给出了以下纸浆错误:

回溯(最后一次调用):文件“C:\Python34\Cloud 3.py”,第 446 行,在资源(请求,pmachine,l,q)文件“C:\Python34\Cloud 3.py”,第 136 行,在资源状态 = prob.solve() 文件“C:\Python34\lib\site-packages\pulp-1.6.1-py3.4.egg\pulp\pulp.py”,第 1643 行,在求解状态 = 求解器.actualSolve(self, **kwargs) 文件“C:\Python34\lib\site-packages\pulp-1.6.1-py3.4.egg\pulp\solvers.py”,第 1303 行,在 actualSolve 中返回 self.solve_CBC (lp, **kwargs) 文件“C:\Python34\lib\site-packages\pulp-1.6.1-py3.4.egg\pulp\solvers.py”,第 1325 行,在 solve_CBC tmpMps 中,重命名 = 1)文件“C:\Python34\lib\site-packages\pulp-1.6.1-py3.4.egg\pulp\pulp.py”,第 1431 行,在 writeMPS 中如果 mip 和 v.cat == LpInteger: AttributeError: 'LpElement' 对象没有属性 'cat'

什么AttributeError: 'LpElement' object has no attribute 'cat'以及为什么会产生这个错误?

4

1 回答 1

0

AttributeError: 'LpElement' object has no attribute 'cat'问题变量(在这种情况下是)prob = LpProblem('Resource', LpMaximize)与添加的约束之间存在不兼容时,会产生 。

LpAffineExpression(LpElement(con))这可以通过在使用指定的 PuLP 定义变量时摆脱冗余调用来解决,LpVariable.dicts而不是像上面所做的那样动态生成变量。

合并更改的更好方法如下:

prob = LpProblem('Resource', LpMaximize)

xdict = LpVariable.dicts('', ["x{0}{1}{2}".format(i + 1, j + 1, k + 1)
        for i in range(0, len(request))
        for j in range(0, len(pmachine))
        for k in range(0, pmachine[j].npj)
    ],
    0, 1, cat = 'Binary')

ydict = LpVariable.dicts('', ["y{0}{1}".format(i + 1, j + 1)
        for i in range(0, len(request))
        for j in range(0, len(pmachine))
    ],
    0, 1, cat = 'Binary')

for i in range(0, len(request)):
    for j in range(0, len(pmachine)):
        for k in range(0, pmachine[j].npj):
            con = xdict["x{0}{1}{2}".format(i + 1, j + 1, k + 1)] <= ydict["y{0}{1}".format(i + 1, j + 1)]
            prob += con
            print(con)
于 2016-05-27T14:33:14.763 回答