【发布时间】: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