我有一个非常大的优化,不能解决大数据集。我想看看约束条件,看看哪些是有效的,哪些不是。这能做到吗?
我不知道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