回国后,没有时间休息,一是工作不能耽误,二是很多杂乱的事情要处理,因此,公众号很久没有更新,实在抱歉!

本期的推文是关于旅行商问题(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实现相关推荐

  1. latex语法_【研创基地科研实训】关于举办第27期“LaTeX使用技巧交流分享会” 线上科研实训交流活动的通知...

    关于举办第27期"LaTeX使用技巧交流分享会" 线上科研实训交流活动的通知 LaTeX是一种基于TeX的排版系统,在数学式的处理上有着得天独厚的优势,能快速生成很多具有书籍质量的 ...

  2. 中科方德技术专家直播:如何基于 OpenStack、Ceph 构建私有云平台? | 第 27 期

    「龙蜥大讲堂」第 27 期来啦!本期龙蜥大讲堂邀请了中科方德云计算架构师樊志成来分享<基于开源 OpenStack.Ceph 构建企业私有云平台>,快来扫码入群,预定前排小板凳观看直播吧! ...

  3. 现代职业教育杂志现代职业教育杂志社现代职业教育编辑部2022年第27期目录

    现代职业教育杂志现代职业教育杂志社现代职业教育编辑部2022年第27期目录 课题_教育研究     新时代高职学生家国情怀现状调研及教育路径探索 朱敏姬;彭玉颖;王尔熙; 1-3     国内青年职业 ...

  4. Emscripten 单词_(第30期:英语教师备课资料) 英文标识记单词 有趣有用又高效...

    必须提醒 请你首先点击标题下方的蓝色字:高中英语教学资源,进入公众号,然后点击自己所需要的菜单,就可以看到你想要的菜了. 有效学习单词的要素: 在语篇语境中,有语义能语用 英文标识是语篇,有语境和语义 ...

  5. hashtable允许null键和值吗_【29期】Java集合框架 10 连问,你有被问过吗?

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 首先要说一下,本文对这些Java集合框架的面试题只做了一个总结式的回答,对每一道题目,都值得深入去了解一下(什么是扎 ...

  6. 《强化学习周刊》第27期:MIT研究表明通用LTL目标的强化学习很难实现

    关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和资讯,智源社区结合领域内容,撰写为第27期<强化学习周刊>.本期 ...

  7. 【区块链技术工坊27期实录】李庆华:HPB底层P2P网络实践

    1,活动基本信息 1)题目: [区块链技术工坊27期]HPB底层P2P网络实践 2)议题: HPB芯链是融入硬件加速引擎的全新体系架构,打造基于BOE硬件加速芯片驱动的高性能公链.作为开放式公链,任何 ...

  8. 《痞子衡嵌入式半月刊》 第 27 期

    痞子衡嵌入式半月刊: 第 27 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期. 本期刊是开源项目(GitHub: JayHeng/pz ...

  9. dubbo调用超时回滚_微服务痛点基于Dubbo + Seata的分布式事务(AT模式)

    前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...

最新文章

  1. 【洛谷 2782】友好城市
  2. 面试官:项目中常用的 .env 文件原理是什么?如何实现?
  3. jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...
  4. Flink State 有可能代替数据库吗?
  5. 华为慧通值不值得去_华为 Mate 40太难抢,上半年的P40Pro还香吗?
  6. java自定义classloader_java自定义ClassLoader加载指定的class文件操作
  7. 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
  8. 温故知新----css布局
  9. 计算机系统中引入多道程序设计的目的在于,引入多道程序的目的在于什么
  10. java新闻发布系统源代码_Java新闻发布系统源代码
  11. dos 命令检索文件
  12. infer的用法_infer的用法总结大全
  13. 使用pthread后,界面假死现象问题
  14. 02_爬取灌篮高手全国大赛漫画
  15. arcengine cliasic code(转)基于ArcGIS Engine + C#实现用户自定义动态电力符号
  16. doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件。包含多项功能改进,及Bug修复。...
  17. DHCP服务器搭建操作步骤
  18. 使用 CMake 解决编译出来的 so 文件过大的问题
  19. G003-182-18组
  20. JS中的数组转变成JSON格式字符串的方法

热门文章

  1. sklearn自定义svm核函数(外部和内部定义)
  2. spring-boot ffmpeg 搭建一个音频转码服务
  3. nginx 的源码安装
  4. HDU-神、上帝以及老天爷
  5. ubuntu下 ls: error initializing month strings
  6. 上海交通大学软件学院2005学年度第一学期工程硕士课程安排表
  7. c语言数字黑洞123问题,PAT-B 1019 数字黑洞 (C语言)
  8. python tkinter frame加入窗口_Python ---(五)Tkinter窗口组件:LabelFrame
  9. 实现ip数据包抓取并分析_一些网站https证书出现问题的情况分析
  10. android 2.0 qq同步,Android刷机:QQ同步助手恢复手机资料攻略