AttributeError: 'NoneType' object has no attribute 'get_values'

AttributeError: 'NoneType' object has no attribute 'get_values'

我是编码新手,需要您的帮助。 我收到以下错误:

line 159, in _get_solution
    xs = np.array(ms.get_values(self.int_var)).reshape(self.path_n, self.orderbook_n)
AttributeError: 'NoneType' object has no attribute 'get_values'

到达这部分代码后:

line 159, in _get_solution
    xs = np.array(ms.get_values(self.int_var)).reshape(self.path_n, self.orderbook_n)

当我使用:print(dir(ms)) 检查可能导致此问题的原因时,它会给我以下信息:

['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

我如何继续获取代码 运行?

这部分的完整代码是:

def _get_solution(self):
    '''function to solve the optimization model, save result and print outputs'''
    self.print_content = ''
    self.trade_solution = OrderedDict()
    ms = self.solve()
    xs = np.array(ms.get_values(self.int_var)).reshape(self.path_n, self.orderbook_n)
    zs = xs * self.precision_matrix
    nonzeroZ = list(zip(*np.nonzero(zs)))
    nonzeroZ = sorted(nonzeroZ, key=lambda x: x[0])

错误告诉您变量 ms 的计算结果为 None,这就是它没有 get_values() 方法的原因。

假设错误消息中的第159行是_get_solution()中的对应行,这意味着在上面的行中

ms = self.solve()

调用 self.solve() returned None

您需要检查 self.solve() 以了解它为什么这样做。

由于您是 Python 的新手,请记住,当函数或方法没有 return 语句,或从未达到有效的 return 语句时,它将 return None 默认。

如果模型不可行,

Model.solve() 可能 return None。在假设找到解决方案之前,您应该始终检查 None,如:

s = model.solve()
if s:
   # do whatever is appropriate for a solution
else:
   print("model has no solution")

DOcplex 具有处理不可行模型的技术和工具,请参阅此笔记本 有关不可行模型的教程:

https://github.com/IBMDecisionOptimization/docplex-examples/blob/master/examples/mp/jupyter/infeasible.ipynb