首页 > 解决方案 > xpress 的优化结果不遵循指定的变量类型

问题描述

我发现了一些问题,xpress 的优化结果不遵循指定的变量类型。我在创建 xpress 变量时设置了 vartype=xp.binary,但有些结果的值是 0.13333、0.36667、0.5。

我发现这是由其中一个约束引起的。当我禁用大多数约束时,这些值都是二进制的。然后,我一个一个地启用约束,并找到一组导致该值非二进制的约束。

有没有人观察过这个?关于如何将变量值强制为二进制的任何建议?

谢谢!

标签: optimizationmixed-integer-programmingxpress-optimizer

解决方案


为了完整起见,将 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()


推荐阅读