我想知道我是否可以在纸浆中建立一个多目标函数,通过这样做我可以使纸浆中的最小Z=max(a,b,c),但是当使用这个代码时
ilp_prob = pulp.LpProblem("Miniimize Problem", pulp.LpMinimize)
x = []
if m >3:
return 1,1
for i in range(m):
temp = []
for j in range(len(jobs)):
temp += [pulp.LpVariable("x_%s_%s" %((i+1),(j+1)),0,1, cat = 'Binary')]
x+= [temp]
ilp_prob += max([pulp.lpSum([jobs[j]*x[i][j] for j in range(len(jobs))] for i in range(m))])
for i in range(len(jobs)):
ilp_prob += pulp.lpSum([x[j][i] for j in range(m)])==1
ilp_prob.solve()
它只返回x[0]中的所有1,以及x[0]中的所有0。在
我敢肯定你不能只使用python的(!)
max
关于pulp的内部表达式!这些求解者正在研究一个非常具体的问题规范,LP标准格式,这里没有这个概念!在例外的情况是,如果pulp会为它的数据结构重载max函数(不知道在python中这是否可能),但我很确定pulp不支持这样的重新公式(有一些需要;同样:目标是标准形式)。在
例如,cvxpy不重载,但引入了自定义的max函数,这些函数在内部转换您的问题。在
尽管如此,我很惊讶你的代码运行时没有出现严重错误。但我懒得查纸浆的来源。在
看看常用的LP/IP配方指南。在
第一个想法是:
目标:
min (max(a,b,c))
重新制定:
z >= a
z >= b
z >= c
z
(最大化会给你带来麻烦,因为问题会变得无限大!)min(z)
备注:必须注意问题仍然是线性/凸的(取决于求解器)。在本例中(我们的简单示例;我没有检查您的整个模型),我看不出问题,但是在更复杂的情况下,
min(max(complex_expression))
subjective to complex constraints
,这可能会引入非凸性(并且不能由圆锥解算器(包括LP解算器)解决)。在只需在环中添加一个关键字:您的方法/目标听起来有点像robust-optimization,其中通常会优化一些最坏的情况。并不是所有的多目标优化问题都是这样处理多目标组件的。在
相关问题 更多 >
编程相关推荐