【问题标题】:Docplex bug for kpi_value_by_name method of Solution object解决方案对象的 kpi_value_by_name 方法的 Docplex 错误
【发布时间】:2021-11-12 15:38:30
【问题描述】:

我想我在https://ibmdecisionoptimization.github.io/docplex-doc/mp/_modules/docplex/mp/solution.html#SolveSolution.kpi_value_by_name 中发现了一个很小的错误

最小的可重现示例:

from docplex.mp.model import Model

mdl = Model("test")

a = mdl.integer_var(lb=0, ub=mdl.infinity, name="a")
b = mdl.integer_var(lb=0, ub=mdl.infinity, name="b")

mdl.add_constraint(3*a + 2*b >= 100)

mdl.minimize(a + b)

mdl.add_kpi(7*a-2*b, "my_kpi")

sol = mdl.solve()

if sol is not None:
    print(sol.model.kpi_value_by_name("my_kpi"))

    print(sol.kpi_value_by_name("my_kpi"))

输出:

238.0
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/var/folders/d1/zqvc60g1013bbmyhtrn3q8ym0000gn/T/ipykernel_8220/3312768846.py in <module>
     14 print(sol.model.kpi_value_by_name("my_kpi"))
     15 
---> 16 print(sol.kpi_value_by_name("my_kpi"))

~/.../venv/lib/python3.7/site-packages/docplex/mp/solution.py in kpi_value_by_name(self, name, match_case)
   1195         '''
   1196         kpi = self.model.kpi_by_name(name, try_match=True, match_case=match_case)
-> 1197         return kpi._raw_solution_value(self)
   1198 
   1199     @classmethod

AttributeError: 'DecisionKPI' object has no attribute '_raw_solution_value'

模型上的方法有效,而对象上的方法无效。

要么使用kpi._get_solution_value(self),要么, 如在docplex/mp/model.py 中所做的那样,使用kpi.compute()

my_kpi_fromModel = sol.model.kpi_by_name("my_kpi")

print(my_kpi_fromModel.compute())

print(my_kpi_fromModel._get_solution_value())

输出:

238.0
238.0

【问题讨论】:

  • 2.22.213 版本解决了这个错误

标签: python optimization cplex docplex


【解决方案1】:

我试过了

if sol is not None:
    print("kpi1:",sol.model.kpi_value_by_name("my_kpi"))

    print("kpi2:",sol.kpi_value_by_name("my_kpi"))

这给了

kpi1: 238.0
kpi2: 238.0

【讨论】:

  • 好的,我刚刚查看了 PyPI 上的更改列表,上面写着:修复了 SolveSolution.kpi_value_by_name 中的一个错误,我使用的是 '2.21.207',这就是原因
猜你喜欢
  • 1970-01-01
  • 2014-08-19
  • 2010-11-29
  • 2022-08-18
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
相关资源
最近更新 更多