一个简洁的小H车调运模型
一个简洁的小H车调运模型
不久前, 帝都B城市到处都是小H车, 理想的小H车应该是布朗运动\均匀分布,可是现实上它们就是不均匀。于是有如下问题:
观察帝都 HD区SY村区域,将其划分成10个用车点,用大数据回归预测出第二天(周一)的用车数据如下,夜晚开始调运,务必满足第二天的需求,极小化调运总里程。
数据项 | 符号 | 用车点 | |||||||||
地区 | i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
X-坐标 | X[i] | 0 | 200 | 155 | 70 | 90 | 45 | 88 | 44 | 60 | 111 |
Y-坐标 | Y[i] | 0 | 200 | 30 | 120 | 199 | 210 | 21 | 188 | 70 | -22 |
夜晚有车数 | P[i] | 114 | 223 | 213 | 234 | 56 | 777 | 5 | 30 | 321 | 222 |
第二天需求数 | R[i] | 110 | 345 | 110 | 333 | 407 | 233 | 100 | 100 | 333 | 123 |
调运车辆走的是城市距离,B城市交通道路复杂,假设城市距离是地点之间直线距离的1.56倍。为简化起见,上面的数据刻意地使得又车总数和需求总数相等。
建模
小H车问题看似复杂,其实模型十分简单。不过五分钟内写出并测试模型,需要你:第一、熟悉混合整数规划建模,有建模经验;第二、 有一个好用的建模语言。这里用+Leapms建模语言。
用x[i][j]表示从i到j的运车数量,于是目标是极小化总的调运量,即:
minimize sum{i=1,...,n; j=1,...,n; i<>j} x[i][j] D[i][j] // (1)
上面的 D[i][j]=1.56 sqrt((X[i]-X[j])^2 + (Y[i]-Y[j])^2) 是i,j之间的城市距离。
对用车点 i,夜晚保有车数 P[i] 加上调入进来的车数 sum{*}x[*][i], 减去调出的车数sum{*}x[i][*] 应该大于第二天的需求R[i], 即:
P[i]+sum{j=1,...,10;j<>i}x[j][i]-sum{j=1,...,10;j<>i}x[i][j]>=R[i] | i=1,...,n
当然,上式子可以简化,即只有有车数 P[j]>R[j] 时才可以调出, ..
P[i]+sum{j=1,...,10;j<>i;P[j]>R[j]}x[j][i]-sum{j=1,...,10;j<>i;P[i]>R[i]}x[i][j]>=R[i] | i=1,...,n //(2)
由(1),(2)就完成了对问题的建模。
试求解
完整模型需要补充对符号的说明(where段)和数据段(data和data_relation), 其中的data是原始数据段,data_relation是在原始数据基础上的导出数据(方便模型表达),例如D[i][j]就是由坐标数据X和Y导出的。
在+Leapms环境中,用load命令调入并解析,随后使用mip命令(混合整数规划求解命令)就得到求解结果,过程如下(其中可见到带行号的完整模型):
+Leapms>load
Current directory is "ROOT".
.........
LittleYlwBike.leap
.........
please input the filename:littleylwbike
================================================================
1: minimize -->
2: sum{i=1,...,n;j=1,...,n;i<>j;P[i]>=R[i]}-->
3: D[i][j]x[i][j] //(1)
4:
5: Subject to
6:
7: P[i]+sum{j=1,...,n;j<>i;P[j]>R[j]}x[j][i]-->
8: -sum{j=1,...,10;j<>i;P[i]>R[i]}x[i][j]-->
9: >=R[i] | i=1,...,10 //(2)
10:
11: where
12:
13: n is a number
14: X,Y,R,P are sets
15:
16: x[i][j] is a variable of nonnegative integer-->
17: | i=1,...,10;j=1,...,n;i<>j;P[i]>=R[i]
18:
19: D[i][j] is a number | i=1,...,n;j=1,...,n;i<>j
20:
21: data
22:
23: X={0 200 155 70 90 45 88 44 60 111}
24: Y={0 200 30 120 199 210 21 188 70 -22}
25: P={114 223 213 234 56 777 5 30 321 222}
26: R={110 345 110 333 407 233 100 100 333 123}
27:
28: data_relation
29:
30: n=_$(X)
31:
32: D[i][j]=1.56*(sqrt((X[i]-X[j])^2+(Y[i]-Y[j])^2))-->
33: | i=1,...,n;j=1,...,n
34:
================================================================
>>end of the file.
Parsing model:
1D
2R
3V
4O
5C
6S
7End.
..................................
number of variables=36
number of constraints=10
..................................
+Leapms>solve
The LP is solved to optimal.
找到线性规划最优解.非零变量值和最优目标值如下:
.........
x1_9*=4
x3_2*=98
x3_9*=5
x6_2*=24
x6_4*=99
x6_5*=351
x6_8*=70
x10_7*=95
x10_9*=3
.........
Objective*=83995
.........
+Leapms>
从结果上看,第6用车点调出的车辆最多。
其他
B城市很大,当问题规模扩大后模型是否还可用。我认为是可用的,本题是一个网络流模型,可解的规模很大。另外模型在真实应用时可以做很多改进,例如采用嵌套结构、剔出距离D[i][j]大于某数量的变量(谁也不会傻到从B城东北角向最西南角凋车的地步),等等。
小H车遭遇低谷,已成陌路黄瓜。所以“神马都是浮云,只有运筹永存:)”。
一个简洁的小H车调运模型的更多相关文章
- 微信小程序ofo小黄车+thinkphp5.0打造全栈应用
原文地址:https://www.imooc.com/article/20310 ofo至今还没有微信小程序(很费解),每次用ofo都得去支付宝,很不方便,我用微信用的比较多,无意间在简书上面看到某人 ...
- 苹果版小黄车(ofo)app主页菜单效果
代码地址如下:http://www.demodashi.com/demo/12823.html 前言: 最近又是公司项目上线一段时间了,又是到了程序汪整理代码的节奏了.刚好也用到了ofo主页菜单的效果 ...
- 关于小黄车(ofo共享单车)使用的问题
小黄车即ofo共享单车,号称是全球创立最早.成长最快.规模最大的无桩共享单车创业公司,缔造了"共享单车"概念,致力于解决城市出行问题.它的出现给大家带来了方便,作为一个商业运行的公 ...
- hihocoder 1347 小h的树上的朋友
传送门 时间限制:18000ms单点时限:2000ms内存限制:512MB 描述 小h拥有$n$位朋友.每位朋友拥有一个数值$V_i$代表他与小h的亲密度.亲密度有可能发生变化.岁月流逝,小h的朋友们 ...
- 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏
内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...
- 【渗透笔记】拿下某小H网的全过程
自从班上A片小王子的7个T资源被封了以后,本小白为造福全班同学,尝试拿下个小H网,先用webrobot搜某些只有小H网才会出现的关键词 本以为直接导出放御剑里跑就行了,然并软.于是用awvs扫了一下, ...
- 小H和密码
链接:https://www.nowcoder.com/acm/contest/72/B来源:牛客网 题目描述 小H在击败怪兽后,被一个密码锁挡住了去路 密码锁由N个转盘组成,编号为1 ...
- 一个简洁、好用的Pytorch训练模板
一个简洁.好用的Pytorch训练模板 代码地址:https://github.com/KinglittleQ/Pytorch-Template 怎么使用 1) 更改template.py 替换 __ ...
- 【Wannafly挑战赛10 - B】小H和密码(DP)
试题链接:https://www.nowcoder.com/acm/contest/72/B 题目描述 小H在击败怪兽后,被一个密码锁挡住了去路 密码锁由N个转盘组成,编号为1~N,每 ...
随机推荐
- Travel 并查集
题意:给一个图,若干询问,每次询问只经过边权<=w的边,x能到达的点数 并查集啊,对询问和边排序,直接合并,维护size,查询 #include<cstdio> #include&l ...
- 轻量化卷积神经网络MobileNet论文详解(V1&V2)
本文是 Google 团队在 MobileNet 基础上提出的 MobileNetV2,其同样是一个轻量化卷积神经网络.目标主要是在提升现有算法的精度的同时也提升速度,以便加速深度网络在移动端的应用.
- asp.net core系列 61 Ocelot 构建服务发现简单示例
一.概述 Ocelot允许指定服务发现提供程序,如Consul或Eureka. 这二个中间件是用来实现:服务治理或秒服务发现,服务发现查找Ocelot正在转发请求的下游服务的主机和端口.目前Ocelo ...
- DBA_OBJECTS
类型:View Owner:SYS 内容:记录了数据库中所有的对象 字段: OWNER:对象的Owner OBJECT_NAME:对象名称 SUBOBJECT_NAME:对象的子对象名字,例如分区 O ...
- SpringBoot SpEL表达式注入漏洞-分析与复现
目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...
- Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成
一.前言 谈到优化,首先第一步,肯定是把一个大功能,拆分成一个个细小的环节,再单个拎出来找到可以优化的点,App 的网络优化也是如此. 在 App 访问网络的时候,DNS 解析是网络请求的第一步,默认 ...
- 【Android Studio安装部署系列】十七、Android studio引用第三方库、jar、so、arr文件
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在Android开发过程,经常需要用到第三方库以及jar.so.arr文件,那么如何引用到项目中呢?下面简单介绍下. 引用第三方库 ...
- es6学习笔记-class之继承
继承 上一篇学习了class的概念,在es5时,对象的继承有好几种,原型链继承,借用构造函数继承,组合继承,原型式继承,寄生式继承以及寄生组合式继承,都是按照函数的形式去集成的,现在class也有它的 ...
- Github:修改Github仓库中项目语言类型
前述 有的时候我们把项目上传到github仓库上时语言会显示错误语言 比如一个java项目可能因为有js文件的存在而被识别为js项目 这种时候我们就要手动去修改Github的项目语言类型 解决办法 在 ...
- vue全家桶安装以及修改webpack配置新增vue项目启动方式
一.安装node环境(自带npm) 下载地址 二.替换下载源 // 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taob ...