RoutingSolver:处理最大容量的首选方法

问题描述

我想在我的车队中增加一个尺寸,以限制每辆车可以行驶的距离。我的优化目标是时间。因此,我为仪表添加了另一个维度。现在,我发现除了设置尺寸容量之外,还可以调用一个名为SetSpanUpperBoundForVehicle函数。我假设这具有平衡每条路线的仪表的作用?

示例

  • 这是我的路由求解器类中的一些代码,它启用了最大车辆约束
  • 参数balance存在,因此我可以使用启用和禁用SetSpanUpperBoundForVehicle
def add_max_vehicle_meters(self,capacity: int,balance: bool = True):
    
    def meters_callback(ix: int,iy: int):
        nx = self.x2n(ix)
        ny = self.x2n(iy)
        return self.matrices.meters[nx][ny]

    self.meters_callback = meters_callback
    self.meters_callback_index = self.routing_model.RegisterTransitCallback(meters_callback)
    self.routing_model.AddDimension(evaluator_index=self.meters_callback_index,slack_max=0,capacity=capacity,fix_start_cumul_to_zero=True,name='meters')

    log.info(f'added max max vehicle meters with capacity = {capacity}')
    
    if balance:
        meters_dimension = self.routing_model.GetDimensionorDie('meters')
        for vehicle_ix in range(self.req.max_vehicles):
            meters_dimension.SetSpanUpperBoundForVehicle(capacity,vehicle_ix)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)