dijikstra 旅行商问题_第27期:基于旅行商问题(TSP)的配送网络优化—R实现
回国后,没有时间休息,一是工作不能耽误,二是很多杂乱的事情要处理,因此,公众号很久没有更新,实在抱歉!
本期的推文是关于旅行商问题(TSP)的配送网络优化,也是因为最近在指导学生参加省大学生现代物流设计大赛,才有此推文。在此,我要特别感谢我指导的学生!
一、问题描述
云通物流配送中心要配货至8个步步高门店,设计一条运输费用最低的配送路线。各节点地理坐标如下表所示:
显然,配送路线的优化要考虑很多因素,本期只简单的运用旅行商问题(TSP)进行优化设计。
library(knitr)
library(dplyr)
library(ggplot2)
#9个节点
n
#各节点间的经度和纬度最大值
#from 0 to ...
max_x
max_y
#设置随机种子,便于结果重现
set.seed(20201130)
#读取各节点原始数据
codes
#各节点散点图展示
ggplot(codes,aes(x, y)) + geom_point()
#计算各节点距离
distance
dist_fun
vapply(seq_along(i), function(k)distance[i[k], j[k]], numeric(1L))
}
#基于ompr包构建模型
library(ompr)
model %
#构建节点i到节点j的决策变量
add_variable(x[i, j], i = 1:n, j = 1:n,
type = "integer", lb =0, ub = 1) %>%
# a helper variable for the MTZ formulationof the tsp
add_variable(u[i], i = 1:n, lb = 1, ub = n)%>%
# minimize travel distance
set_objective(sum_expr(dist_fun(i, j) *x[i, j], i = 1:n, j = 1:n), "min") %>%
# 配送路线不能走相同的节点
set_bounds(x[i, i], ub = 0, i = 1:n) %>%
# 离开每个节点
add_constraint(sum_expr(x[i, j], j = 1:n) ==1, i = 1:n) %>%
# 到达每个节点
add_constraint(sum_expr(x[i, j], i = 1:n) ==1, j = 1:n) %>%
#确保没有子汇总(弧约束)
add_constraint(u[i] >= 2, i = 2:n) %>%
add_constraint(u[i] - u[j] + 1 <= (n - 1)* (1 - x[i, j]), i = 2:n, j = 2:n)
model
#计算结果如下
#我们使用GPLK算法计算该混合整数规划问题
library(ompr.roi)
library(ROI.plugin.glpk)
result
result
#Status: optimal
#Objective value: 25.79845
solution %
filter(value > 0)
kable(head(solution, 9))
#配送路线如下
#将各配送节点连接并可视化
paths %
rename(from = i, to = j) %>%
mutate(trip_id = row_number()) %>%
tidyr::gather(property, idx_val, from:to) %>%
mutate(idx_val = as.integer(idx_val)) %>%
inner_join(codes, by = c("idx_val" = "id"))
kable(head(arrange(paths, trip_id), 6))
#结果
ggplot(codes, aes(x, y)) +
geom_point() +
geom_line(data = paths, aes(group = trip_id)) +
ggtitle(paste0("Optimal route with cost: ",round(objective_value(result), 2)))
参考文献:
Michael Hahsler&KurtHornik.TSP Infrastructure for the Traveling Salesperson Problem,Journal of StatisticalSoftware, 2007(12).
dijikstra 旅行商问题_第27期:基于旅行商问题(TSP)的配送网络优化—R实现相关推荐
- latex语法_【研创基地科研实训】关于举办第27期“LaTeX使用技巧交流分享会” 线上科研实训交流活动的通知...
关于举办第27期"LaTeX使用技巧交流分享会" 线上科研实训交流活动的通知 LaTeX是一种基于TeX的排版系统,在数学式的处理上有着得天独厚的优势,能快速生成很多具有书籍质量的 ...
- 中科方德技术专家直播:如何基于 OpenStack、Ceph 构建私有云平台? | 第 27 期
「龙蜥大讲堂」第 27 期来啦!本期龙蜥大讲堂邀请了中科方德云计算架构师樊志成来分享<基于开源 OpenStack.Ceph 构建企业私有云平台>,快来扫码入群,预定前排小板凳观看直播吧! ...
- 现代职业教育杂志现代职业教育杂志社现代职业教育编辑部2022年第27期目录
现代职业教育杂志现代职业教育杂志社现代职业教育编辑部2022年第27期目录 课题_教育研究 新时代高职学生家国情怀现状调研及教育路径探索 朱敏姬;彭玉颖;王尔熙; 1-3 国内青年职业 ...
- Emscripten 单词_(第30期:英语教师备课资料) 英文标识记单词 有趣有用又高效...
必须提醒 请你首先点击标题下方的蓝色字:高中英语教学资源,进入公众号,然后点击自己所需要的菜单,就可以看到你想要的菜了. 有效学习单词的要素: 在语篇语境中,有语义能语用 英文标识是语篇,有语境和语义 ...
- hashtable允许null键和值吗_【29期】Java集合框架 10 连问,你有被问过吗?
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 首先要说一下,本文对这些Java集合框架的面试题只做了一个总结式的回答,对每一道题目,都值得深入去了解一下(什么是扎 ...
- 《强化学习周刊》第27期:MIT研究表明通用LTL目标的强化学习很难实现
关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和资讯,智源社区结合领域内容,撰写为第27期<强化学习周刊>.本期 ...
- 【区块链技术工坊27期实录】李庆华:HPB底层P2P网络实践
1,活动基本信息 1)题目: [区块链技术工坊27期]HPB底层P2P网络实践 2)议题: HPB芯链是融入硬件加速引擎的全新体系架构,打造基于BOE硬件加速芯片驱动的高性能公链.作为开放式公链,任何 ...
- 《痞子衡嵌入式半月刊》 第 27 期
痞子衡嵌入式半月刊: 第 27 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期. 本期刊是开源项目(GitHub: JayHeng/pz ...
- dubbo调用超时回滚_微服务痛点基于Dubbo + Seata的分布式事务(AT模式)
前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...
最新文章
- 【洛谷 2782】友好城市
- 面试官:项目中常用的 .env 文件原理是什么?如何实现?
- jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...
- Flink State 有可能代替数据库吗?
- 华为慧通值不值得去_华为 Mate 40太难抢,上半年的P40Pro还香吗?
- java自定义classloader_java自定义ClassLoader加载指定的class文件操作
- 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
- 温故知新----css布局
- 计算机系统中引入多道程序设计的目的在于,引入多道程序的目的在于什么
- java新闻发布系统源代码_Java新闻发布系统源代码
- dos 命令检索文件
- infer的用法_infer的用法总结大全
- 使用pthread后,界面假死现象问题
- 02_爬取灌篮高手全国大赛漫画
- arcengine cliasic code(转)基于ArcGIS Engine + C#实现用户自定义动态电力符号
- doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件。包含多项功能改进,及Bug修复。...
- DHCP服务器搭建操作步骤
- 使用 CMake 解决编译出来的 so 文件过大的问题
- G003-182-18组
- JS中的数组转变成JSON格式字符串的方法
热门文章
- sklearn自定义svm核函数(外部和内部定义)
- spring-boot ffmpeg 搭建一个音频转码服务
- nginx 的源码安装
- HDU-神、上帝以及老天爷
- ubuntu下 ls: error initializing month strings
- 上海交通大学软件学院2005学年度第一学期工程硕士课程安排表
- c语言数字黑洞123问题,PAT-B 1019 数字黑洞 (C语言)
- python tkinter frame加入窗口_Python ---(五)Tkinter窗口组件:LabelFrame
- 实现ip数据包抓取并分析_一些网站https证书出现问题的情况分析
- android 2.0 qq同步,Android刷机:QQ同步助手恢复手机资料攻略