找出纸浆优化在时间限制内没有解决时哪些约束不成立



我有一个非常大的优化,不能解决大数据集。我想看看约束条件,看看哪些是有效的,哪些不是。这能做到吗?

我不知道LpConstraint类的方法是否允许您轻松检查它是否已被现有的"解决方案"所满足。(不是真正的解决方案,因为不满足所有约束)。链接到LpConstraint文档

一个类似的问题被问了一会儿,它没有答案,所以我怀疑这个功能不存在。在纸浆GitHub页面上提交一个特性请求可能是值得的。

与此同时,你可能会拼凑一些可能工作的东西,沿着下面的行(其中prob是您的Pulp问题对象):

soln_dict = {i.name: i.varValue for i in prob.variables()}
for c in prob.constraints.values():
c_dict = c.toDict()
# print(c_dict)
satisfied = False

LHS = sum([soln_dict[i['name']]*i['value'] for i in c_dict['coefficients']])
LHS = LHS + c_dict['constant']

if c_dict['sense'] == 0:
satisfied = (LHS == 0)

if c_dict['sense'] == -1:
satisfied = (LHS <= 0)

if c_dict['sense'] == 1:
satisfied = (LHS >= 0)

print(c)

if satisfied:
#print('LHS: ', LHS)
print('is satisfied')
else:
#print('LHS: ', LHS)
print('not satisfied')

看代码看起来约束有一个有效的函数,不在文档

def valid(self, eps=0):
val = self.value()
if self.sense == const.LpConstraintEQ:
return abs(val) <= eps
else:
return val * self.sense >= -eps

相关内容

  • 没有找到相关文章

最新更新