【发布时间】:2021-09-01 19:43:24
【问题描述】:
我有一个非常大的优化,它不能解决大型数据集。我想看看约束条件,看看哪些是持有的,哪些不是。这个可以吗?
【问题讨论】:
标签: optimization constraints pulp
我有一个非常大的优化,它不能解决大型数据集。我想看看约束条件,看看哪些是持有的,哪些不是。这个可以吗?
【问题讨论】:
标签: optimization constraints pulp
我不知道LpConstraint 类的方法,它允许您轻松检查现有“解决方案”是否已满足它(不是真正的解决方案,因为不满足所有约束)。 link to LpConstraint docs
不久前有人问过similar question,它没有答案,所以我怀疑这个功能不存在。可能值得在 pulp GitHub page 上提交功能请求。
与此同时,您可能可以按照以下方式组合一些可能有效的东西(其中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
【讨论】: