2010年认证杯SPSSPRO杯数学建模
D题 服务网点的分布
原题再现:
服务网点、通讯基站的设置,都存在如何设置较少的站点,获得较大效益的问题。通讯基站的覆盖范围一般是圆形的,而消防、快餐、快递服务则受到道路情况和到达时间的限制。现在我们将问题简化。假设城市道路构成一个 n × n 的正方形网格,交叉点称为节点,相邻节点的距离等于 1。服务站设置在某个节点上,只能沿着道路对节点服务,并且最大服务距离为 2。
第一阶段问题:
(1) 服务网点设置太多或位置不合理,可能出现多个服务点都能为同一个节点服务的现象,造成浪费;服务网点设置太少或位置不合理,可能有一些节点得不到服务。现在要求每个节点都能得到服务,而服务站点最少,请给出服务站点的设置方案,并对 n = 100, 101, 102 三种情况求出最少的服务站点数。
(2) 假设服务站是快餐派送网点,在不考虑货源成本的前提下,请问需要知道哪些数据来确定服务站点的设置方案,并建立合理的模型,给出使利润最大化的设置方法。
整体求解过程概述(摘要)
我们知道,服务网点的分布对公司企业有很大的作用。人们都想以最少的投入获取最大的利益。但是,单单是从服务网点的分布上看,要做到这一点也并不容易。本文探讨的就是在一定的服务距离内如何能以最少的服务站覆盖最多的节点,却又不造成浪费的方法。
问题一)在此,我们设计了四个方案。方案一,我们对2*2的正方形做了一个外切圆,圆心为服务站,如图1,当n=100时,我们需建立1156个服务站,此方案的优点是不会出现多个服务站都为同一个节点服务的现象,但因为圆的半径较小,所以需设的服务站较多。第二个方案中,以半径为2的圆相接,如图2,当 n=100时,需设645个服务站。此方案需建设较少的服务站,但却出现了多个服务站都为有一节点服务的现象。而第三个方案中,虽然同时用了半径为2的圆,但设置方法与方案二有所不同,如图4,n=100时,需设893个服务站,此方案服务了最大面积的范围,但其缺点也是需设置较多的服务站。在方案四中,当 时,需设置629个服务站,为最少。我们是从设置最少站点为优先考虑,因此,方案四为最优设计。
问题二)就第二个问题,我们需要知道城市的面积,有城市面积来设计我们的方案,而油费,服务站的建设成本以及其他花费来我们假设每个站的成本都相同。所以,我们所设置的每个快餐派送点能够服务最多的点且不造成过多的浪费,此方案就为最优方案。
问题重述
服务网点、通讯基站的设置,都存在如何设置较少的站点,获得较大的利益的问题。通讯基站的覆盖范围一般是圆形的,而消防、快餐、快递服务则受到道路情况和到达时间的限制。
现在我们将问题简化。假设城市道路构成一个 的正方形网格,交叉点称为节点,相邻节点的距离为1,。服务站设置在某个节点上,只能沿着道路对节点服务,并且最大服务距离为2。现在我们需要每个、节点都能得到服务,而服务站点最少,减少浪费,并对 时的最少服务站点数。又假设服务站是快餐派送网点,不考虑货源成本,需要哪些数据来确定服务站点的设置方案,并给出利润最大化得设置方法。
对于以上所述的问题,我们将通过建立数学模型的方法,以最少的服务站覆盖最多的节点,获取最大的经济利益。
模型的假设:
1. 假设城市道路构成一个 的正方形网格,用圆将正方形网络覆盖.尽量用最少的圆覆盖正方形网络的每一个节点。
2. 每个圆的圆心必须是网络的节点,取圆心为所设的服务网点。
3. 假设快餐派送网点与快餐需求量和供应量有关。
论文缩略图:
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
clc;clear;close all;
L=5;
R=2;
M=zeros(L);
N=0;
ss=1;
[m,n]=meshgrid(1:L)
axis([0,L,0,L]);
axis square;
hold on;
Ar=linspace(0,pi*2,200);
scale=0;
A1=gca;x=2; y=0; C=rand(1,3); axes(A1);grid onplot(x,y,'*','color',C); plot(x+i*y+R*exp(i*Ar),'color',C); x=5; y=2; C=rand(1,3); axes(A1);grid onplot(x,y,'*','color',C); plot(x+i*y+R*exp(i*Ar),'color',C); x=0; y=3; C=rand(1,3); axes(A1);grid onplot(x,y,'*','color',C); plot(x+i*y+R*exp(i*Ar),'color',C); x=3; y=5; C=rand(1,3); axes(A1);grid onplot(x,y,'*','color',C); plot(x+i*y+R*exp(i*Ar),'color',C);