一个简洁的小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车遭遇低谷,已成陌路黄瓜。所以“神马都是浮云,只有运筹永存:)”。

原文地址:https://www.cnblogs.com/leapms/p/10128077.html

时间: 2024-10-12 12:14:30

一个简洁的小H车调运模型的相关文章

iOS开发UI篇—实现一个私人通讯录小应用(二)

iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议. 1 //注销按钮 2 - (IBActi

iOS开发UI篇—实现一个私人通讯录小应用(二) - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3777087.html iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意: 注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)butto

成唯一正式进入美国市场单车企业:ofo小黄车凭何出海?

共享单车在中国市场已经走过了数年光阴,在这场蓬勃发展的共享经济浪潮中,不同品牌的共享单车各使神通.竞相竞技. 然而在短短数年时间的市场洗礼中,不同品牌的共享单车也迎来了结局各异的局面,一些本着风口逐利的品牌已经烟消云散,而一些自始至终坚持服务.技术与创新的共享单车品牌,却得到了市场的青睐并成为这场浪潮的决胜者.在这场更迭的浪潮中,ofo小黄车以及一些其他共享单车品牌,是这股浪潮的引领者与推动者. 而日前有报道称ofo小黄车已获西雅图共享单车运营许可.成为唯一一家正式进入美国市场的中国共享单车企业

Cocos2d-X开发一个简单的小游戏

学了这么久Cocos2d-X,今天终于可以做出一个简单的小游戏了,游戏非常简单,通过菜单项控制精灵运动 在做游戏前,先学一个新概念 调度器(scheduler): Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Cocos2d-x暂停时,调度器也会停止.当Cocos2d-x重新开始时,调度器也会自动继续启动. Cocos2d-x封装了一个供各种不同平台使用的调度

iOS开发UI篇—实现一个私人通讯录小应用(一)

iOS开发UI篇—实现一个私人通讯录小应用(一) 一.该部分主要完成内容 1.界面搭建                        2.功能说明 (1).只有当账号和密码输入框都有值的时候,登录按钮才能交互 (2).当取消勾选记住密码后,自动登录按钮也随之取消:当勾选了自动登录按钮时,记住密码按钮也一同勾选. (3).点击登陆后,弹出蒙版,界面不可交互,程序能够简单判断账号和密码是否正确,如果不正确则给出相应的提示,如果正确则跳转到联系人列表界面. 二.实现过程和代码 项目文件结构图和界面搭建

GLUT的一个简洁OO封装

毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记录在此,如有同学有兴趣可以下载. GLUT应用程序 直接使用GLUT的程序是这样的: #include <GL/glut.h> #include <stdio.h> void display() { // OpenGL commands } // 一般按键(所有可打印字符,ESC也在内

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

自从班上A片小王子的7个T资源被封了以后,本小白为造福全班同学,尝试拿下个小H网,先用webrobot搜某些只有小H网才会出现的关键词 本以为直接导出放御剑里跑就行了,然并软.于是用awvs扫了一下,也没什么用.从cms下手吧放进椰树里 百度一下maxcms的漏洞看到这样一条 http://www.2cto.com/index.php/364.html发现注入点 http://www.xxxxx.com/inc/ajax.asp?action=videoscore&id=11 ,放进sqlmap

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

? 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文

【C++】实现一个简洁版的class String

//实现一个简洁版的class String #include <iostream> #include <string.h> using namespace std; class String { public: String() { _str = new char[1]; _str[0] = '\0'; } String(const char *str) { _str = new char[strlen(str) + 1]; strcpy(_str, str); } String