基于蒙特卡洛模拟求解城市货运配送路径(python+arcgis)

本文介绍了如何使用蒙特卡洛模拟方法对城市路网数据进行处理,包括arcgis中的数据预处理、Python中利用networkx构建复杂网络以及最短路径计算。重点讲解了如何从路网数据到创建网络模型,以评估配送中心与配送点的最优路径方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、前言


本文主要介绍基于城市路网数据进行借用蒙特卡洛模拟思想进行实验,各个步骤的处理方式并不唯一,达到各环节所需要完成的任务即可。实验操作为本人摸索总结出来的,操作方式仅作参考,并不为最优方法,但为可行方式。不严谨的地方请见谅,欢迎批评与讨论。

2、路网数据预处理


该环节主要在arcgis软件中进行。由于蒙特卡罗模拟的循环过程将采用python进行,所以arcgis在此处仅起到数据预处理作用。通常我们获得的路网数据如图1所示,只是单纯的线要素。首先需要将该线要素构建网络数据集,具体方法可以参考以下链接中的教程:

[1] https://zhuanlan.zhihu.com/p/688360165

[2] arcgis--数据库构建网络数据集_arcgis新建网络数据集-CSDN博客

[3] GIS学习 建立网络数据集_哔哩哔哩_bilibili5

其中比较重要的点是需要保证路网数据的连通性,arcgis提供了拓扑检查工具,对于存在问题的路段可以人工修复。如果路网不连通,则后续实验难以进行。

图1

创建网络数据集后,我们将得到图2中的数据,将该数据导入arcgis后将如图3所示。此时各个节点为路网中各线段的端点,这也是后续实验中进行路径求解的起点与终点的来源。每个的端点需要设置ID,这个ID具有唯一性。创建ID的过程可以在点要素的属性表中通过添加字段完成。

图2
CREATE TABLE IF NOT EXISTS `mk_international_location` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `pid` int(10) unsigned DEFAULT '0' COMMENT '父id/上级id', `path` varchar(255) DEFAULT '' COMMENT '路径', `level` int(10) unsigned DEFAULT '0' COMMENT '层级', `name` varchar(255) DEFAULT '' COMMENT '中文名称', `name_en` varchar(255) DEFAULT '' COMMENT '英文名称', `name_pinyin` varchar(255) DEFAULT '' COMMENT '中文拼音', `code` varchar(50) DEFAULT '' COMMENT '地区代码', `zip_code` varchar(50) DEFAULT '' COMMENT '邮政编码', `status` tinyint(3) unsigned NOT NULL DEFAULT '1' COMMENT '状态值 0无效 1有效', `manager_id` int(10) unsigned DEFAULT '0' COMMENT '操作管理员id', `manager_username` varchar(30) DEFAULT '' COMMENT '操作员账户名', `deleted_at` timestamp NULL DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `lat` varchar(255) DEFAULT NULL COMMENT '百度.纬度', `lng` varchar(255) DEFAULT NULL COMMENT '百度.经度', PRIMARY KEY (`id`), KEY `international_location_pid_index` (`pid`), KEY `international_location_manager_id_index` (`manager_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=4170 ; -- -- 转存表中的数据 `mk_international_location` -- INSERT INTO `mk_international_location` (`id`, `pid`, `path`, `level`, `name`, `name_en`, `name_pinyin`, `code`, `zip_code`, `status`, `manager_id`, `manager_username`, `deleted_at`, `created_at`, `updated_at`, `lat`, `lng`) VALUES (1, 0, ',1,', 1, '亚洲', 'Asia', 'yazhou', '', '', 1, 0, '', NULL, '2019-01-25 02:51:17', NULL, NULL, NULL), (2, 0, ',2,', 1, '欧洲', 'Europe', 'ouzhou', '', '', 1, 0, '', NULL, '2019-01-25 02:51:17', NULL, NULL, NULL);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值