我发现了一些问题,xpress 的优化结果不遵循指定的变量类型。我在创建 xpress 变量时设置了 vartype=xp.binary,但有些结果的值是 0.13333、0.36667、0.5。
我发现这是由其中一个约束引起的。当我禁用大多数约束时,这些值都是二进制的。然后,我一个一个地启用约束,并找到一组导致该值非二进制的约束。
有没有人观察过这个?关于如何将变量值强制为二进制的任何建议?
谢谢!
我发现了一些问题,xpress 的优化结果不遵循指定的变量类型。我在创建 xpress 变量时设置了 vartype=xp.binary,但有些结果的值是 0.13333、0.36667、0.5。
我发现这是由其中一个约束引起的。当我禁用大多数约束时,这些值都是二进制的。然后,我一个一个地启用约束,并找到一组导致该值非二进制的约束。
有没有人观察过这个?关于如何将变量值强制为二进制的任何建议?
谢谢!
为了完整起见,将 Erwin Kalvelagen 的评论扩展为一个答案:整数变量的分数值通常在问题不可行时发生。返回后solve()
,您需要检查attributes.mipstatus
以确保您确实有可用的解决方案(另请参阅此处MIP 状态的潜在值):
p = xp.problem()
...
p.solve()
print(p.getProbStatus(), p.getProbStatusString())
if p.attributes.mipstatus == xp.mip_solution or \
p.attributes.mipstatus == xp.mip_optimal:
print(p.getProbStatusString())
print(p.getSolution())
else:
print('No feasible solution', p.getProbStatusString())
获取问题状态的另一种方法是 function p.getProbStatus()
。