如何让 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)
我正在使用 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)