第1个回答 2011-09-30
B题 交巡警服务平台的设置与调度
“有困难找警察”,是家喻户晓的一句流行语。警察肩负着刑事执法、治安管理、交通管理、服务群众四大职能。为了更有效地贯彻实施这些职能,需要在市区的一些交通要道和重要部位设置交巡警服务平台。每个交巡警服务平台的职能和警力配备基本相同。由于警务资源是有限的,如何根据城市的实际情况与需求合理地设置交巡警服务平台、分配各平台的管辖范围、调度警务资源是警务部门面临的一个实际课题。
试就某市设置交巡警服务平台的相关情况,建立数学模型分析研究下面的问题:
(1)附件1中的附图1给出了该市中心城区A的交通网络和现有的20个交巡警服务平台的设置情况示意图,相关的数据信息见附件2。请为各交巡警服务平台分配管辖范围,使其在所管辖的范围内出现突发事件时,尽量能在3分钟内有交巡警(警车的时速为60km/h)到达事发地。
对于重大突发事件,需要调度全区20个交巡警服务平台的警力资源,对进出该区的13条交通要道实现快速全封锁。实际中一个平台的警力最多封锁一个路口,请给出该区交巡警服务平台警力合理的调度方案。
根据现有交巡警服务平台的工作量不均衡和有些地方出警时间过长的实际情况,拟在该区内再增加2至5个平台,请确定需要增加平台的具体个数和位置。
(2)针对全市(主城六区A,B,C,D,E,F)的具体情况,按照设置交巡警服务平台的原则和任务,分析研究该市现有交巡警服务平台设置方案(参见附件)的合理性。如果有明显不合理,请给出解决方案。
如果该市地点P(第32个节点)处发生了重大刑事案件,在案发3分钟后接到报警,犯罪嫌疑人已驾车逃跑。为了快速搜捕嫌疑犯,请给出调度全市交巡警服务平台警力资源的最佳围堵方案。
附件1:A区和全市六区交通网络与平台设置的示意图。
附件2:全市六区交通网络与平台设置的相关数据表(共5个工作表)。
这是参考答案:
http://wenku.baidu.com/view/92631cc0d5bbfd0a795673ad.html希望对你有帮助。
第2个回答 2011-09-12
城市交通巡警平台的设置与调度
摘要:
关键字:最短路径、效率最高、动态规划、surfer作图、
一.问题的重述
警察肩负着刑事执法、治安管理、交通管理、服务群众四大职能。为了更有效地贯彻实施这些职能,需要在市区的一些交通要道和重要部位设置交巡警服务平台。每个交巡警服务平台的职能和警力配备基本相同。根据城市的实际情况与需求合理地设置交巡警服务平台、分配各平台的管辖范围、调度警务资源。就某市设置交巡警服务平台的相关情况,建立数学模型分析研究下面的问题:
(1)为各交巡警服务平台分配管辖范围,使其在所管辖的范围内出现突发事件时,尽量能在3分钟内有交巡警(警车的时速为60km/h)到达事发地。
对于重大突发事件,需要调度全区20个交巡警服务平台的警力资源,对进出该区的13条交通要道实现快速全封锁。实际中一个平台的警力最多封锁一个路口,请给出该区交巡警服务平台警力合理的调度方案。
根据现有交巡警服务平台的工作量不均衡和有些地方出警时间过长的实际情况,拟在该区内再增加2至5个平台,请确定需要增加平台的具体个数和位置。
(2)针对全市(主城六区A,B,C,D,E,F)的具体情况,按照设置交巡警服务平台的原则和任务,分析研究该市现有交巡警服务平台设置方案(参见附件)的合理性。如果有明显不合理,请给出解决方案。
如果该市地点P(第32个节点)处发生了重大刑事案件,在案发3分钟后接到报警,犯罪嫌疑人已驾车逃跑。为了快速搜捕嫌疑犯,请给出调度全市交巡警服务平台警力资源的最佳围堵方案。
二、问题的分析
问题一中有三个小问题,分别讨论在现有巡警台不变的情况下,确定出每个巡警台的控制范围,要求在三分钟之内尽可能到达;当有案件发生时,各交巡警按预定的路线到达指定路口封锁该路口,要求我们给出各节点接到指示时他们的行车路线;根据现有交巡警服务平台的工作量不均衡和有些地方出警时间过长的实际情况,拟在该区内再增加2至5个平台,请确定需要增加平台的具体个数和位置。根据给出的地图和其他数据,运用matlab软件使用Dijkstra算法以及floyd算法,确定出了最短路径,从而可以计算得出每个巡警台所能控制的范围。不仅仅要考虑运行路线的最短和优化性,还要考虑时间尽可能较少的优化。
问题二
三.基本假设
1.不考虑巡警在实际工作中所出现的故障而导致延误追捕。
2.假设各站点的警力量是平均一致且为一固定值(巡警台人数高峰期和低潮期的平均值为单一均值)。
3.在整个路途中,通过各种通讯工具,走的路程都是最短路程。
4.不考虑巡警车在行驶过程中出现的塞车、抛锚等耽误时间的情况。
5.不考虑警员所消耗的时间。
7.在整个路途中,转弯处不需要花费时间
8.假设逃犯与警察的速度是相同的。
9.假设路径是单向的。
变量说明:
: 任意两个标志点 与 间的距离
: 标志点间的距离组成的距离矩阵
: 标志点的邻接矩阵
: 邻接矩阵的元素。
: 相邻标志点间的距离矩阵。
: 相邻标志点 与 间的距离
: 标志点的权值矩阵
: 标志点间的最短距离矩阵
: 标志点 与 之间的最短距离。
: 恒定车速
: 图中标数与实际比例
T: 出警所用最大时间
V: 接到报警到到达出事地点所用最大时间
L(θ): 从交巡警平台到达出事地块所行驶的最大路程
四、模型定义
1.Dijksta算法:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将 加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度⑴。
2.最优化问题:采用问量表示法,例如前面例子中的(r.H)可以看做是二维问题中的一个向量区的两个分量,即
或
对于n维向量空间Rn中一个向量X的n个分量,即
或
于是前面所描述的求极小值问题可以简记为:minf(X)
这里的f(X)称为向量变量的实值函数。
设有L个向量变量的实值函数:h1(X), h2(X), …,hL(X)
给定X后,又可以把这L个实值函数看做是L维空间RL中的一个向量h(X)的L个分量,记为:h(X)=[ h1(X), h2(X), …,hL(X)]T。
按照这种表示方法,具有L个等式约束的求极小问题可记为:
(1-1)
其中s.t是subject to 缩写,表示“满足于”,“受…约束”
最优化问题有如下形式:
一般式:
(1-2)
向量式:
(1-3)
式中f(X)称为目标函数(或求它的极小,或求它的极大)。
优化过程就是优选X,使目标函数达到最优值:f(X)->Optimization
si(X)称为不等式约束,它的向量表示法可以写成:
s(X)=[ s1(X), s2(X), …,sm(X)]T
hj(X)称为等式约束
X∈Ω,称为集约束,在我们的问题中集约束是无关重要的,这是因为有时Ω≡Rn,不然的话,Ω也可以用不等式约束表达出来,如:
对 ,其中 ,此时集约束可以用不等式来代替,如
故今后不再考虑集约束。
例如:前面例子球铸成圆柱体,
这个问题的集约是:
实际上都可以用不等式约束来代替:
则
floyd算法:
1,从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。
2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
3,不可思议的是,只要按排适当,就能得到结果。
5.邻接矩阵:邻接矩阵(Adjacency Matrix):是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}。G的邻接矩阵是一个具有下列性质的n阶方阵:
①对无向图而言,邻接矩阵一定是对称的,而且对角线一定为零,有向图则不一定如此。
②在无向图中,任一顶点i的度为第i列所有元素的和,在有向图中顶点i的出度为第i行所有元素的和,而入度为第i列所有元素的和。③用邻接矩阵法表示图共需要n^2个空间,由于无向图的邻接矩阵一定具有对称关系,所以扣除对角线为零外,仅需要存储上三角形或下三角形的数据即可,因此仅需要n(n-1)/2个空间。
五.模型的建立与求解
对于问题一,模型求解:
根据我们建立的模型,我们进行了编程,主要代码如下:
(1)Dijkstra算法的C++代码:
#include<iostream.h>
void main()
{
int infinity=100,j,i,n,k,t,**w,*s,*p,*d;
cout<<"input the value of n:";
cin>>n;
cout<<endl;
d=new int[n];
s=new int[n];
p=new int[n];
w=new int*[n];
for(i=0;i<n;i++) {w[i]=new int[n];}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>w[i][j];
for(s[0]=1,i=1;i<n;i++)
{
s[i]=0;d[i]=w[0][i];
if(d[i]<infinity) p[i]=0;
else p[i]=-1;
}
for(i=1;i<n;i++)
{
t=infinity;k=1;
for(j=1;j<n;j++)
if((!s[j])&&(d[j]<t)) {t=d[j];k=j;}
s[k]=1;//point k join the S
for (j=1;j<n;j++)
if((!s[j])&&(d[j]>d[k]+w[k][j]))
{d[j]=d[k]+w[k][j];p[j]=k;}
}
cout<<"从源点到其它顶点的最短距离依次如下:";
for(i=1;i<n;i++) cout<<d[i]<<" ";
}
(2)floyd算法:
#include <iostream>
#include <iomanip>
using namespace std;
#define MAX_VERTEX_NUM 10 //最大顶点个数
#define TRUE 1
#define FALSE 0
#define INFINITY 32767 /* 用整型最大值代替∞ */
typedef char VERTYPE;
typedef struct
{
VERTYPE vexs[MAX_VERTEX_NUM]; //顶点向量
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
}mgraph, * MGraph;
typedef int DistancMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //存放路径长度
typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM][MAX_VERTEX_NUM];
//存放路径,P[0][1][]表示顶点0到顶点1的路径,经过哪个点P[0][1][i]就是TRUE。
void init_mgraph(MGraph &g) //初始化图
{
g=(MGraph)malloc(sizeof(mgraph));
g->vexnum=0;
g->arcnum=0;
for(int i=0;i<MAX_VERTEX_NUM;i++)
g->vexs[i]=0;
for(i=0;i<MAX_VERTEX_NUM;i++)
for(int j=0;j<MAX_VERTEX_NUM;j++)
g->arcs[i][j]=INFINITY;
}
void add_vexs(MGraph &g) //增加顶点
{
cout<<"请输入顶点的个数:"<<endl;
cin>>g->vexnum;
cout<<"请输入顶点的值"<<endl;
for(int i=0;i<g->vexnum;i++)
{
cin>>g->vexs[i];
}
}
void add_arcs(MGraph &g) //增加边
{
cout<<"请输入边的个数:"<<endl;
cin>>g->arcnum;
VERTYPE ch1,ch2;
int row,col,weight;
for(int i=0;i<g->arcnum;i++)
{
cin>>ch1>>ch2>>weight;
for(int j=0;j<g->vexnum;j++)
{
if(g->vexs[j]==ch1)
{
row=j;
}
if(g->vexs[j]==ch2)
{
col=j;
}
}
g->arcs[row][col]=weight; //有向带权图只需把1改为weight
}
}
void creat_mgraph(MGraph &g) //创建图
{
add_vexs(g); //增加顶点
add_arcs(g); //增加边
}
void print_mgraph(MGraph &g) //打印图
{
for(int i=0;i<g->vexnum;i++)
cout<<" "<<g->vexs[i]<<" ";
cout<<endl;
for(i=0;i<g->vexnum;i++)
{
cout<<g->vexs[i]<<" ";
for(int j=0;j<g->vexnum;j++)
{
cout<<setw(5)<<g->arcs[i][j]<<" ";
}
cout<<endl;
}
}
void ShortestPath_FLOYD(MGraph &g, PathMatrix &P, DistancMatrix &D)
{
//用Floyd算法求有向网G中各顶点对v和w之间的最短路径P[v][w]及其带权长度D[v][w]。
//若P[v][w][u]为TRUE,则u是从v到w当前求得最短路径上的顶点。
int v,w,u,i;
for(v=0; v<g->vexnum; ++v)
for(w=0; w<g->vexnum; ++w)
{
D[v][w] = g->arcs[v][w];
for(u=0; u<g->vexnum; ++u) //初始化
P[v][w][u] = FALSE;
if(D[v][w] < INFINITY) //从v到w有直接路径
{
P[v][w][v] = TRUE; //起点
P[v][w][w] = TRUE; //终点
}//if
}//for
for(u=0; u<g->vexnum; ++u)
for(v=0; v<g->vexnum; ++v)
for(w=0; w<g->vexnum; ++w)
{
if(u==v || v==w || w==u)
continue;
if(D[v][u] + D[u][w] < D[v][w]) //从v经u到w的一条路径更短
{
D[v][w] = D[v][u] + D[u][w];
for(i=0; i<g->vexnum; ++i)
P[v][w][i] = P[v][u][i] || P[u][w][i];
}//if
}
}
void print_PathMatrix(MGraph &g, PathMatrix &P) //打印路径矩阵
{
cout<<" ";
for(int i=0;i<g->vexnum;i++)
cout<<g->vexs[i]<<" ";
cout<<endl;
for(i=0;i<g->vexnum;i++)
{
for(int j=0;j<g->vexnum;j++)
{
cout<<i<<"-->"<<j<<": ";
for(int k=0;k<g->vexnum;k++)
cout<<P[i][j][k]<<" ";
cout<<endl;
}
cout<<endl;
}
}
void print_DistancMatrix(MGraph &g, DistancMatrix &D) //打印距离矩阵
{
for(int i=0;i<g->vexnum;i++)
cout<<" "<<g->vexs[i]<<" ";
cout<<endl;
for(i=0;i<g->vexnum;i++)
{
cout<<g->vexs[i]<<" ";
for(int j=0;j<g->vexnum;j++)
{
cout<<setw(5)<<D[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
MGraph G;
init_mgraph(G); //初始化图
creat_mgraph(G); //创建图
print_mgraph(G); //打印图
DistancMatrix D;
PathMatrix P;
ShortestPath_FLOYD(G,P,D);
print_DistancMatrix(G,D); //打印距离
print_PathMatrix(G,P); //打印路径
return 0;
}
得到的作图结果如下图所示:
覆盖范围(单位:百米)
为了达到效率最大化,6,9,14平台不需要进行警力调配,设置警力范围,做出如下范围图示带有颜色的线条,为邻近交巡警服务台的管辖范围。
通过模糊数学知识和匈牙利算法计算可以得出,20个巡警台最快的调度方案所用时间为t=8.015,调度方案如下:第12号路口的交警去12号路口
第16号路口的交警去14号路口,第 9号路口的交警去16号路口,第14号路口的交警去21号路口,第13号路口的交警去23号路口,第 4号路口的交警去62号路口,第10号路口的交警去22号路口,第11号路口的交警去24号路口,第15号路口的交警去28号路口,第 7号路口的交警去29号路口,第 8号路口的交警去30号路口,第 2号路口的交警去38号路口,第 5号路口的交警去48号路口
由图中可以看出,可以新增多个巡警台,分别为图中38,48,29,71,90,54,61,92点为巡警台设备选址合理点,再考虑经济效益最大化以及环保节能化,以增加4个垃圾站为首选,分别是:29,92,61,38点较为合适。
对于问题二:
根据犯罪率和人口密度与巡警台的正比关系,可以得出,人口密度越大,犯罪率越高的地方,更应该增加巡警台的设置,形象地表示A区每个标点的犯罪率高低以及人口密度,从而更好地得出结论
A区各结点犯罪率的标示图
B区各结点犯罪率的标示图
C区各结点犯罪率的标示图
D区各结点犯罪率的标示图
E区各结点犯罪率的标示图
F区各结点犯罪率的标示图
由于犯罪率和人口密度与巡警台的正比关系以及图中所表示的情况可以得出,当前设置的巡警台存在不合理性,更改的结果是:A区情况第一问已经给出,B区警力配置基本合理,不需再多做调度。C区需要增加一个,增加在273路口处。D区中应该新增8个巡警台。E区中需要增加4个巡警台F区中新增4个巡警台较为合理。
对于追捕逃犯问题,针对案发后犯罪嫌疑人去向不明,我们采用圈套式方法,利用动态规划进行分析,找出人力,物力及时间达到一个平衡点。根据第一题的第二小问,我们可以计算出来,A区13个交通要道出口的每个封锁时间为t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,及用时最长的路口时间为T1和用时最短的路口的时间为T2。同时,找到从P出A区最短的线路(见图P)事实上,经过计算得出,犯罪嫌疑人只有可能在两个区中,即A区和C区,我们先考虑犯罪嫌疑人跑出A区到C区的情况一:犯罪嫌疑人由P->节点30,大约需要1.8分钟,也就是说犯罪嫌疑人在3分钟之后已经离开A区,进入C区,所以此时我们应该考虑C区巡警台的围捕问题。经计算可以得出,出动173,174 号平台的警力封锁216,299号节点即可。情况二:犯罪嫌疑人还在A区,可供他选择也就是两个方向,第一小方面是往左边逃跑(如情况二图一),也就只有三种可能出项的情况,通过计算可以得出,巡警台15封锁28号路口,10平台封锁26路口,14平台封锁14路口即可。另一方面是往右边逃跑(如情况二图二),通过计算得出,2,3,4号巡警台往最近的路口处进行封堵就可以达到围捕成功。 (图P)
七.优化结果分析及误差分析:
误差主要体现在距离计算上面,某些站点之间距离不方便计算。为了计算方便,也设定路径是单向的。还有每个巡警台的工作效率和警力是不一致,不是恒定的。假设模型为了实现方便,假定逃犯的速度与警力的速度是一致的,但从实际看,逃犯速度不是恒定不变的而一个完善合理的计划,还应包含一个着眼与长期的计划,由于时间限制,我们也没有深入研究这个问题,但可以作为今后努力的方向。
巡警台发生故障的考虑:在实际操作中,巡警台工作发生故障是一个很大的影响因素,我们应该进一步考虑在调度系统中如何反映与处理故障,以及对路线安排有何影响。
八.模型的评价
上文从巡警台的选址,路线的效率最大化以及巡警台中警员的调度,花费最小化这些方面进行了分析,建立了一个多目标的非线性的数学模型。成功地通过实验和数据分析得出较为准确和可行性高的结果。
九、参考文献:
十、附录:
第3个回答 2011-09-11
全国大学生数学建模竞赛B题个人见解:# `7 t' S4 @+ g7 h7 k6 A- m
/ U2 s* `; j2 \# j1 R
这个题目一看就知道是个优化问题;' I- q9 R1 T! V, E5 ~, `# i
1、第一问有三段话,每一段其实是对方案的一次帅选;针对第一段内容,傻子都知道首先建立3分钟区域圈,然后可以得出一些方案,这里可能得出好几个甚至无数个方案,不过不要担心;
! ^) ?/ @2 m' _$ l |2 {$ n至于筛选规则,提醒下大家:不要筛没了,也不要留的太多(一般情况下,晒到处理不好,方案没了)! x5 y7 ^4 l3 `& W
第二段主要让你给出调度方案,就是一个配置问题,设计或者选用合适算反来解决是王道!
: X8 b4 Z8 Z$ {/ T第三段是要你添加一些点,这个应该不难做吧,可以参考下图论的那些个经典算法;
f" C) y& D1 w% p2 M
, H2 v5 \" Q, e- p本题还有其他的解题思路:就是通过建立目标规划模型解决!重点还是实现上啦,其实图论及目标规划很简单,关键是求解算法及实现,这个大家可得花功夫奥!8 M7 h/ V0 x( v) J- {. Z' `/ F
" Q8 l0 V2 x: I" X2、这一问其实是一个全局的配置问题;过多的我也不能做解释了,大家自己思考吧,找出一些问题,尤其是区域边界处的设点拥挤问题;
: a2 }1 E% S- R5 j9 p% w5 V6 D下面是给你一个问题,让你给出一个方案,这个问题是个资源调配问题,把握两个原则:时间最短、围堵区域最小。