Docplex的Solution对象kpi_value_by_name方法报错问题咨询
Docplex
SolveSolution类kpi_value_by_name异常问题解答 你遇到的是Docplex旧版本的已知Bug,该问题存在于2.23及更早的发行版中,根因是docplex.mp.solution模块内SolveSolution类的kpi_value_by_name方法,错误调用了DecisionKPI类不存在的私有方法_raw_solution_value。
官方修复情况
该问题在2.24及之后的正式版本中已完成修复,官方修复逻辑和你测试的可行方案一致:将原方法中kpi._raw_solution_value(self)的调用,替换为kpi._get_solution_value(self)。
如果可以升级依赖版本,直接将Docplex升级到2.24及以上版本即可彻底解决该问题。
临时规避方案
如果暂时无法升级Docplex版本,可选用以下两种方案规避:
- 优先通过模型侧的同名方法获取KPI值,该方法在全版本中均可正常运行:
print(sol.model.kpi_value_by_name("my_kpi")) - 自行封装安全调用方法,替换默认实现:
def safe_get_kpi_by_name(sol, kpi_name, match_case=True): kpi = sol.model.kpi_by_name(kpi_name, try_match=True, match_case=match_case) return kpi._get_solution_value(sol) # 调用示例 print(safe_get_kpi_by_name(sol, "my_kpi"))
内容的提问来源于stack exchange,提问作者GuglielmoSanchini
相关产品推荐
相关产品推荐

