关于外卖配送最短路径问题补充

简介: 关于外卖配送最短路径问题补充

欢迎订阅关注公众号:赵KK日常技术记录

首先区分各种场景

从配送源区分为

单源正权值最短路径

多源正权值最短路径

从配送场景区分

单源正权值配送时效最短路径

多源正权值配送时效最短路径

针对单源正权值最短路径有了基本代码,亲测5000+客户用时7043ms,时间复杂度O(N*(N-1))。代码如下

private static void backTracking(HashMap<String, String> map, String warehouse, List<String> list1) {

        HashMap<String, BigDecimal> hashMap = new HashMap<>();
        BigDecimal temp = BigDecimal.ZERO;
        if (map.isEmpty()) {
            return;
        } else {
            for (Map.Entry<String, String> entry : map.entrySet()) {

                Random random = new Random();
                BigDecimal db = new BigDecimal(random.nextInt(100));

                BigDecimal baseKilometreNum = db.setScale(2,BigDecimal.ROUND_DOWN);
                if (temp.compareTo(BigDecimal.ZERO) == 0) {
                    temp = baseKilometreNum;
                    hashMap.put(entry.getKey(), baseKilometreNum);
                } else {
                    boolean flag = true;
                    for (Map.Entry<String, BigDecimal> entry1 : hashMap.entrySet()) {
                        flag = entry1.getValue().compareTo(baseKilometreNum) > 0 ? true : false;
                    }
                    if (flag) {
                        hashMap.clear();
                        hashMap.put(entry.getKey(), baseKilometreNum);
                    }
                }
            }
            for (Map.Entry<String, BigDecimal> entry1 : hashMap.entrySet()) {
                warehouse = map.get(entry1.getKey());
                map.remove(entry1.getKey());
                list1.add(entry1.getKey());
                log.info("开始送达至->{}",entry1.getKey());
            }

        }
        //移除此元素,且最短距离设置为下一次仓库
        backTracking(map, warehouse, list1);

    }

面对多源正权值最短路径时,首先考虑外卖员自身距离商家的位置,然后按照最短路径来看把每个商家也视为客户,这样就是先去第一个最近的商家取餐,然后看下一个距离最近的点,有可能是客户点,有可能是商家,但最终就转化为第一种情况了,如果加入权重为配送时效的话就不一样了,从距离优先转化为最近时效问题。
image.png

涉及算法如下

动态规划(dynamic programming )、

列生成算法(column generation)、

分支切割(branch-and-cut)、

分支切割定价(branch-and-cut-and-price)等精确计算算法,

禁忌搜索(tabu search)、

模拟退火(simulated annealing algorithm)、

基于插入搜索的算法(insertion-based heuristic)、

自适应大邻域搜索(adaptive large neighborhood search)、

变深度搜索(variable-depth search algorithm)

以及启发式算法(Two-Stage Fast Heuristic)

目录
相关文章
考研真题)某银行提供了 1 个服务窗口和 10 个供顾客等待时使用的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾
考研真题)某银行提供了 1 个服务窗口和 10 个供顾客等待时使用的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾
|
存储 安全 数据挖掘
外卖跑腿/同城跑腿/校园跑腿/同城配送外卖系统开发规则玩法/案例设计/逻辑方案/需求程序/源码
外卖跑腿、同城跑腿、校园跑腿和同城配送外卖系统开发,是指开发一个用于管理和协调外卖送餐和快递物品的平台或应用程序。该系统能够连接顾客、骑手和商家,提供顾客下单、骑手接单、派送商品等功能。
|
缓存 测试技术
[蓝桥杯 2019 省 A] 外卖店优先级
[蓝桥杯 2019 省 A] 外卖店优先级
104 0
|
缓存
(模拟)1241. 外卖店优先级
(模拟)1241. 外卖店优先级
59 0
(模拟)(笔记)1241. 外卖店优先级
(模拟)(笔记)1241. 外卖店优先级
80 0
L2-007 家庭房产 (25 分)(并查集)
L2-007 家庭房产 (25 分)(并查集)
137 0
|
机器学习/深度学习 安全
2100. 适合打劫银行的日子 : 前缀和运用题(面试高频题)
2100. 适合打劫银行的日子 : 前缀和运用题(面试高频题)
好客租房137-获取当前定位数据的函数
好客租房137-获取当前定位数据的函数
71 0
|
供应链 算法
从“货”出发 重构“人—货”关系
从“货”出发 重构“人—货”关系
139 0
|
存储 传感器 人工智能
全球第一个机器人配送站来了,无人配送真的可行吗?
“你的外卖已经到楼下了,麻烦你下楼取一下。”
全球第一个机器人配送站来了,无人配送真的可行吗?