如何让 demand_callback 考虑依赖于 ortools 中的 to_node 的变量?

How do I make demand_callback consider a variable that depends on to_node in ortools?

我正在使用 google ortools 解决车辆路径问题,我需要 demand_calback 函数考虑 time_visits(这取决于 from_node 和它正在工作)和两个节点之间的位移(取决于 from_node 和 to_node)。

问题是 demand_callback 函数不接受除 from_node 之外的另一个参数,所以我不能调用 to_node(因此我不能考虑位移时间)。

我的代码是:

# Add Capacity constraint.
def demand_callback(from_index):
   """Returns the demand of the node."""
   # Convert from routing variable Index to demands NodeIndex.
   from_node = manager.IndexToNode(from_index)
   '''Creates callback to get demands at each location.'''
   _time_visits = data['time_visits']
   return _time_visits[from_node] 

我希望代码看起来像这样:

 def demand_callback(from_index, to_index):
    """Returns the demand of the node."""
    # Convert from routing variable Index to demands NodeIndex.
    from_node = manager.IndexToNode(from_index)
    to_node = manager.IndexToNode(to_index)

    '''Creates callback to get demands at each location.'''
    _time_visits = data['time_visits']
    _displacements = data['matrix_displacement'][from_node]

    result = _time_visits[from_node] + _displacements[from_node][to_node]
    return result

在示例中,对于需求维度,我们宣传使用一元回调。
在这里,您似乎想使用常规回调...

def demand_callback(from_index, to_index):
    """Returns the demand of the node."""
    # Convert from routing variable Index to demands NodeIndex.
    from_node = manager.IndexToNode(from_index)
    to_node = manager.IndexToNode(to_index)

    '''Creates callback to get demands at each location.'''
    _time_visits = data['time_visits']
    _displacements = data['matrix_displacement'][from_node]

    result = _time_visits[from_node] + _displacements[from_node][to_node]
    return result

然后使用RegisterTransitCallback()而不是RegisterUnaryTransitCallback()注册它。

demand_callback_index = routing.RegisterTransitCallback(demand_callback)