一个简洁的小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车调运模型的更多相关文章

  1. 微信小程序ofo小黄车+thinkphp5.0打造全栈应用

    原文地址:https://www.imooc.com/article/20310 ofo至今还没有微信小程序(很费解),每次用ofo都得去支付宝,很不方便,我用微信用的比较多,无意间在简书上面看到某人 ...

  2. 苹果版小黄车(ofo)app主页菜单效果

    代码地址如下:http://www.demodashi.com/demo/12823.html 前言: 最近又是公司项目上线一段时间了,又是到了程序汪整理代码的节奏了.刚好也用到了ofo主页菜单的效果 ...

  3. 关于小黄车(ofo共享单车)使用的问题

    小黄车即ofo共享单车,号称是全球创立最早.成长最快.规模最大的无桩共享单车创业公司,缔造了"共享单车"概念,致力于解决城市出行问题.它的出现给大家带来了方便,作为一个商业运行的公 ...

  4. hihocoder 1347 小h的树上的朋友

    传送门 时间限制:18000ms单点时限:2000ms内存限制:512MB 描述 小h拥有$n$位朋友.每位朋友拥有一个数值$V_i$代表他与小h的亲密度.亲密度有可能发生变化.岁月流逝,小h的朋友们 ...

  5. 【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

    ​ 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写 ...

  6. 【渗透笔记】拿下某小H网的全过程

    自从班上A片小王子的7个T资源被封了以后,本小白为造福全班同学,尝试拿下个小H网,先用webrobot搜某些只有小H网才会出现的关键词 本以为直接导出放御剑里跑就行了,然并软.于是用awvs扫了一下, ...

  7. 小H和密码

    链接:https://www.nowcoder.com/acm/contest/72/B来源:牛客网 题目描述     小H在击败怪兽后,被一个密码锁挡住了去路     密码锁由N个转盘组成,编号为1 ...

  8. 一个简洁、好用的Pytorch训练模板

    一个简洁.好用的Pytorch训练模板 代码地址:https://github.com/KinglittleQ/Pytorch-Template 怎么使用 1) 更改template.py 替换 __ ...

  9. 【Wannafly挑战赛10 - B】小H和密码(DP)

    试题链接:https://www.nowcoder.com/acm/contest/72/B 题目描述     小H在击败怪兽后,被一个密码锁挡住了去路     密码锁由N个转盘组成,编号为1~N,每 ...

随机推荐

  1. golang接口三个特性

    类型和接口 因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍.go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编译阶段中有明确的变量类型,比如像:int.float32.MyTy ...

  2. 学习ASP.NET Core Razor 编程系列十——添加新字段

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. 将函数声明为Static的作用

    表示静态函数,它为所有类共有的.调用该函数直接使用类名加上修饰符,如:Windows win;Windows::W_SIZE();而不是:win.W_SIZE();静态函数只能处理静态数据成员,不能处 ...

  4. BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP

    BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP 题意: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁 ...

  5. BZOJ_3038_上帝造题的七分钟2_线段树

    BZOJ_3038_上帝造题的七分钟2_线段树 题意: XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分 ...

  6. BZOJ_4726_[POI2017]Sabota?_树形DP

    BZOJ_4726_[POI2017]Sabota?_树形DP Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属 ...

  7. 虚拟机console基础环境配置——安装VMware Tools

    1. 虚拟机设置中点击安装2. 虚拟机中挂载VMware Tools镜像3. 解压安装4. 配置共享目录5. 有关VMware Tools 1. 虚拟机设置中点击安装 VMware workstati ...

  8. Windows核心编程第一章.错误处理

    Windows核心编程第一章,错误处理. 一丶错误处理 1.核心编程学习总结 不管是做逆向,开始做开发.在Windows下.你都需要看一下核心编程这本书.这本书确实写得很好.所以自己在学习这本书的同时 ...

  9. html学习之路--简单图片轮播

    一个简单的图片轮播效果 photo.html页面代码,基本的HTML结构,在main中显示图片,此处图片依次命名为1.jpg.2.jpg.3.jpg.4.jpg. <!DOCTYPE html& ...

  10. 2.App Inventor 2编程流程

    一.Chrome浏览器打开App Inventor 2编程网站注册登陆:     可选:          A. http://ai2.appinventor.mit.edu/          网速 ...