VRP问题

一、关于vrp问题

车辆路径问题,可以看成旅行商问题的推广

有N辆车,都从原点出发,每辆车访问一些点后回到原点,要求所有的点都要被访问到,求最短的车辆行驶距离或最少需要的车辆数

Thinking:有哪些应用领域,适用于VRP问题

快递公司,给司机分配送货线路 拼车软件,为司机分配接送乘客的路线

常见的限制要求: 车辆具有可携带的最大重量或数量

司机需要在指定时间窗口内访问某位置 点的访问顺序等

二、VRP问题的流程:

使用RoutingModel进行路径规划管理

1)设置城市个数,车辆数,起点下标

2)设置距离回调函数 distance_callback

3)设置初始可行解算法 PATH_CHEAPEST_ARC,从start节点开始,找到CHEAPEST的路径

4)在初始可行解的基础上进行优化(使用local search) search_parameters.local_search_metaheuristic = (     routing_enums_pb2.LocalSearchMetaheuristic.GUIDED_LOCAL_SEARCH) #搜索时间限制 search_parameters.time_limit.seconds = 120

三、指定城市的旅行商问题

Step1,数据预处理

1)所有城市的位置(经度、维度)

2)城市之间的距离矩阵 针对常用的功能,可以封装为自己的工具包 from cylearn import common_tools

# 读取,写入指定的pickle result = common_tools.load_pickle('result.pkl') common_tools.save_pickle(result, 'result.pkl')

# 计算两点之间的距离 dist = common_tools.compute_distance(longitude1, latitude1, longitude2, latitude2)

Step2,根据指定的城市,计算TSP,得到路径route 创建tsp类

1)def __init__(self, city_names=None): 类初始化 __init__,定义常用的变量

2)def create_data_model(self): 初始化data,得到data字典,记录distance_matrix,num_vehicles,depot等数据

3)def get_solution(self, routing, solution): 返回路径(这里为index list,比如[0, 1, 2]) 以及 总距离

4)def work(self):

# 定义路由,比如10个节点,1辆车 manager = RoutingIndexManager(10, 1, starts_ends)

# 创建 Routing Model. routing = pywrapcp.RoutingModel(manager)

# 计算两点之间的距离 def distance_callback(from_index, to_index):    

# 将路由变量Index转化为 距离矩阵ditance_matrix的节点index    

from_node = manager.IndexToNode(from_index)    

to_node = manager.IndexToNode(to_index)    

return data['distance_matrix'][from_node][to_node]

Step3,可视化交互

1)选择指定的城市 // 表单提交

// checkbox使用

2)画出车辆行驶路径(基于百度地图API) 基于 map_line1.html 进行改写

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值