如何在Python中约束两个变量(纸浆包,优化)?

时间:2018-01-26 17:22:08

标签: python variables optimization constraints pulp

我对以下代码有疑问。在这个问题中,我们试图找到x(i)的最大值。找到最佳可行解决方案需要三个变量,我不会打扰你的细节。在定义目标函数之后,我们继续定义约束。参数d_ajs包含a,j和s的所有组合的整数值。现在的问题是,将两个变量相乘会返回以下错误:非常量表达式不能相乘

任何人都可以帮助我吗?导致此错误的原因是什么?如何解决?

提前致谢!

from pulp import *
prob = LpProblem("Model2", LpMaximize) 

# Variables
x = pd.Series(index=b_i.index)
for i in b_i.index:
    x[i] = LpVariable("x"+str(i), cat = 'Binary') 

y = pd.DataFrame(index=employees, columns=shifts)
for i in employees:
    for j in shifts:
        y.loc[i][j] = LpVariable("y"+str(i)+","+str(j), cat='Binary')

p = {}
for a in aeroplanes:
    p[a] = pd.DataFrame(index=employees, columns=shifts)
    for i in employees:
        for j in shifts:
            p[a].loc[i][j] = LpVariable("p"+str(a)+","+str(i)+","+str(j), cat='Binary')


# Objective 
obj = ''
for i in employees:
    obj += x[i]
prob += obj

# Constraints
s1 = time.time()
# Enough for the employees for the jobs
for a in aeroplanes:
    for j in shifts:
        for s in skills:
            nr = ""
            for i in employees:
                nr += y.loc[i][j]*p[a].loc[i][j]
            prob += nr >= d_ajs[a].loc[j][s]

1 个答案:

答案 0 :(得分:0)

Hi Pulp不支持非线性编程,并且通过将两个变量相乘,可以使问题成为非线性。

我建议您考虑一下您的问题并查看是否有任何方法可以将其转换为线性问题,或者使用其他支持非线性问题的工具。