专栏内容(赛前预售价99,比赛期间299): 2024数学建模国赛期间会发布思路、代码和优秀论文。(本专栏达不到国一的水平,适用于有一点点基础冲击省奖的同学,近两年有二十几个国二,但是达不到国一,普遍获得省奖,请勿盲目订阅)
python全套教程(一百篇博客):从新手到掌握使用python,可以对数学建模问题进行建模分析。
35套模型算法(优秀论文示例):马尔科夫模型、遗传算法、逻辑回归、逐步回归、蚁群算法、蒙特卡洛模拟、聚类模型、线性规划、粒子群算法、神经网络、相关系数、灰色预测、灰色关联分析、模糊综合评价、模拟退火、时间序列ARMA、方差分析支持向量机、插值、排队论、拟合模型、微分方程、层次分析法、小波分析、多元回归、图论floyd算法、图论Dijkstra模型、因子分析、动态规划、博弈论、决策树、典型相关分析、元胞自动机、主成分分析、TOPSIS法。
目录
摘要
本文主要研究 12306 网站出售火车票系统中目前队列处理数据的能力以及错误率,同时根据所建立数学模型对现行的网站分时策略提出优化方案,并结合现时情况关于缓解网站访问压力提出合理建议。
第一问:首先将每 1000 个数据为一组分别使用 spss 软件以获取号码次数为因变量得到频数分布表,接着构造出 10 个样本数据并计算每个样本平均每秒处理的数据量。其次使用无偏估计量估计样本整体每秒处理的数据量为 59.6550,然后在合理假设下根据附表数据计算错误率是 1.52%,最后为保证模型的可靠性使用区间估计对整体每秒处理的数据量进行正态检验。
第二问:首先根据 Aleax 网站提供的 12306 网站访问量走势图采用实际测量法 估 计 出 1 月 17 号 该 网 站 的 总 访 问 量 , 接 着 使 用 Fibonacci 级 数 原 理并在 VC6.0++环境下编程,模拟出各个时间段的访
问量;然后根据分表数据研究得到访问者到达间隔时间分布和服务时间分布分别服从参数为 和 的负指数分布;再次在各个时间段分别建立 / /M M n 模型,在7.0matlab 中编程求的每一个队列模型的概率、队长、排队长、逗留时间、等待时间五个数量指标,并进一步从中抽象出符合整体的队列模型,最后计算整体队列模型的数量指标,在合理假设下列出方程求出需要 6 个队列能够满足需求。
第三问:首先对第二问模型给出简单评价并指出了在实际操作中存在的诸如网站成本,顾客消耗时间成本等问题技术建立愿望模型,接着确立了消费者购票等待时间成本的研究方向对第二中的模型进行优化;然后根据第二问已得到的各时间段队列的数量指标重新抽象概括出总体的队列模型,并求出需要 18 个队列能满足需求。
最后,本文给出了关于解决 12306 网站拥堵问题的具体意见,如合理分配网络放票量与车站售票量、实行“查购分开”、 按需生产、增加“记忆功能、精简网页内容、增加透明度,加强管理,自觉接受监督等形成建议书,供中国铁路总公司参考,希望可以进一步完善网上订票系统。
关键字:参数估计 Fibonacci 级数 / /M M n 模型 排队论 愿望模型
一、问题重述
火车,是人们出行的重要的交通工具之一。中国从 2011 年开始实行网络售票,购买火车票的方式从只能到火车票售票口排队购票,逐步发展为可通过电话订票和网站订票等多种便利的途径。网络售票给人带来便利的同时,也出现了不少问题。典型的是 2013 年春节的时候,购票网站出现了包括登录、购买、付款等各个环节的问题。为了保证网站更稳定的工作,需要你帮忙提出优化意见。为了便于对问题的分析,现对网站的订票过程做如下简化:
1、登录网站:根据用户名和密码登录网站;
2、查询余票:查找某趟列车的剩余车票;
3、生成订单:锁定剩余车票中的一张作为购买的车票,根据车票信息和购票人信息生成支付订单;
4、付款完成:车票购买完成;付款失败:车票回收继续等待预定。经分析,网站订票的瓶颈可能是以下两方面的原因:
第一,网站并发问题,也就是同一时刻订票人数过多的问题。在同一时刻(例如 1 秒之间)访问网站的人数过多,服务器无法响应所有人的请求,导致无法登录、无法查询票车票等问题。在春节期间网站的访问量是非常大的,网站的日访问量可以参考 alexa 的记录(见参考资料)。为了缓解同一时间段内网站访问量过大的问题,网站采取了分时购票的方法,相当于分散了请求量,减轻了同一时间段并发访问过大的问题。
第二,唯一资源问题,也就是唯一的一张车票。所有来订票的人先要锁定一张车票,如果出现多人同时请求订购同一张票,那么系统就无法判断这张车票该给谁锁定,这样系统就会让请求重试。如果一直无法锁定车票,就会导致系统死锁、订票失败。为了应对车票这唯一资源的分配问题,网站又采取了排队的方法,即请求到来先获取一个号码等待排队,这样就避免了对车票直接造成死锁。获取一个号码,入队列的过程相对于处理一张车票的过程(包括锁定车票、生成订单、检测支付等一系列操作)是非常快速的。(这个过程可以和银行的操作流程对比,先获取一个号码排队等待处理,服务窗口是处理器,按照队列先进先出的顺序依次处理)。
订票网站想要利用一种队列来满足现在的订票需要,附件给出了这个队列的测试数据:一个队列的入队列数据和一个队列的出队列数据,这些数据只是测试队列性能使用的,不是预测这一时间网站请求量的依据。根据资料回答以下问题:
1、根据队列的数据估计该队列每秒最多能处理多少数据,错误率是多少。
2、根据网站日累计访问量数据(见参考资料)和现行的网站分时策略,模拟 2013 年 1 月 17 日的网站订票请求量数据,计算需要多少个队列可以满足需求(总的票数用 N 表示,要求入队列错误率低于 0.1%,要求队列排队的时间不超过 30 分钟)。
3、评价现行的分时购票策略是否合理,可以如何优化(要求分时不超过 10个)根据优化的分时策略重新计算第 2 问的问题。
4、给网站提出一个建议书,可以包括其他的方面,例如预售期、退票等,不需要建模模型说明。
二、模型假设
1.假定模型引用的数据真实可靠,都可以用来计算;
2.每个测试组内的时间都是连续无间断的;
3.假设获取号码所耗时间为顾客到达的时间;获取号码即认为已经进入队列;
4.假设出队列时间极短,可忽略不计,则题目所给出队时间为服务时间;
5.假设 12306 网站每增加一个售票时间点即认为是增加一个服务台。
三、符号说明
四、问题分析
第一问:要求根据 10 组样本数据估计总体的每秒处理数据量及错误率。首先看到数据表中存异常数据,需要对异常数据进行处理;接着根据修正后的数据,利用 spss 软件得出频数分布表;其次以获取号码次数是 1、2、3 的为服务器成功处理的数据,获取号码次数是 4 次的为数据处理失败;然后根据已得数据得到每秒处理数据量的样本量和错误率的样本量;最后使用参数估计法得到总体的平均每秒处理的数据量和平均错误率。
第二问:要求根据局 Aleax 网站提供的 12306 网站日累计访问量,模拟出各个时间段的访问量,并根据题目要求求出需要的队列数。首先在给出的参考网站上找到一月份 12306 网站访问量趋势,并从图中进得出每百万人中日均访问量;接着从国家统计局网站找到最新的国家人口总数,根据同比列原则求出在 1 月17 日当天的总访问量;其次考虑到网站日访问量为各个时间段的累计访问量这一特点,我们利用 Fibonacci 级数原理并在 VC6++环境下编写程序估计各个时间段的访问量;然后对各个时间段使用排队模型,并用 matlab 编程求出系统空闲的概率、队长、排队长、逗留时间、等待时间等 5 个数量指标,找出最符合生活实际的排队模型并推广到整个售票时间段;最后根据推广的模型及相关数量指标求出需要的队列数。
第三问:要求简要评价第二问的模型并给出模型的优化方案。首先应该对第二问已经建立的模型简要评价,并指出在实际操作可能存在的一些问题,并就其中的一个问题展开研究;确定研究顾客等待时间成本之后,由于顾客消耗时间成本无法用金钱等实物衡量,故建立“愿望模型”,即顾客希望在进入网站后能在尽可能短的时间买到票。为实现这一目标,我们使用第二问中已经计算出的五个数量指标,重新比较,进一步抽想、概括出整体的队列模型,并计算整体队列的五个数量指标,并根据该类指标和前文估计的日均总访问量计算出能够满足需求的队列个数。
本文最后根据已经建立的数学模型及相关参考资料和生活经验,给出若干解决网站拥堵的参考意见!
五、问题一的模型建立与求解
六、问题二的模型建立与求解
七、问题三的模型建立与求解
7.1 对现行分时购票策略的评价
从第六部分计算的数量指标积分此结果看,分时策略可以分散请求量,缓解
了访问量过大的问题,尽可能的使更多的人能够从网上买到票,可以说分时策略
是一个很好的解决春运购票难的问题。但是还存在一些问题:(1)没有考虑成本;
(2)在现行的分时策略下很容易出现大量抢票软件,构成新的社会不公平,甚
至引发社会稳定问题;(3)现行分时策略下,在各时间段开始售票的火车站数量
不尽相同,且大站与小站的搭配不尽合理问题等。这些都是导致网络阻塞,购票
困难原因。本文接下来就问题(1)进行研究解决。
7.2 购票策略的优化与计算结果
7.2.1 愿望模型的提出
这里的成本不一定是用钱来衡量,12306 网站增设一个服务器可以很容易用
钱衡量,但顾客因买票而等待的时间是难以用钱来衡量的。因此在这里我们不研
究 12306 网站增设服务器的成本,而着重研究顾客因买票等待时间的“成本”。
这里的成本不能用钱等其他实物来衡量,我们提出使用“愿望模型”来解决该问
题。所谓愿望模型就是顾客希望在最短时间内购到所需火车票的愿望。用排队论
中的术语就是平均逗留时间(排队等待时间和服务时间之和)最短。
7.2.2 模型的优化
本文第二问仅从生活实际的角度考虑选取第九组数据的排队论模型作为整
体的队列,而没有充分考虑顾客的愿望,因此在这里模型的选取不仅要考虑生活
实际更要加入顾客愿望这一要素。
我们现已第八组数据为基础,分别计算有 5、6、7、8、9 个服务台是 5 个数
量指标,并使用 matlab 画出服务台个数与话务强度的关系图。
八、关于第四问
针对春运一票难求的问题结合本文的模型和数量指标提供如下意见供参考:
(1)合理分配网络放票量与车站售票量。虽然网络售票能给消费者带来极大的
便利,减少不必要的开支(如打的到车站等),但应注意在我国仍有不少人不会
上网或不具备上网购票的条件,因此从社会公平角度考虑应合理分配网络售票与
车站售票的比例,并根据实际情况适时做 出调整。
(2)实行“查购分开”。即火车票信息查询与车票购买分开,可以适当放权,让
一些具有公信力的网站缓存查询结果,减少对 12306 网站的查询压力,进而增大
网友购票成功的机会。
(3)按需生产。允许网友(消费者)提前预订车票,铁路总局再根据预订信息
来安排春运与其他节假日的运营能力。
(4)建议网站增加“记忆功能”。也就是说让网站变得聪明一些,能够记住网友
的购买信息。一些网友在购票失败后会重新登录,再重新走一遍购票的全流程,
这无疑增大了服务器的工作量(相同的工作可能要做好几遍),因此增加记忆功
能,记录网友的乘车区间,再次登录后可以减少对其他网页的点击,直接进入付
账购票环节。
(5)减少一些购票过程中不必要的累赘网页,精简网页内容。从现行的网站售
票系统看,购买一张票需要点击多个网页,不如减少步骤,按网络的“思维”设
置购票程序,而不是照搬车站的购票方式;精简网页内容可以防止网友点击与购
票无关的页面。
(6)增加透明度,加强管理,自觉接受监督。每年春运“黄牛党”等非法倒票
现象屡禁不止,即使在实名制下,一些精明的“黄牛党”仍获利不少。因此铁路
总局应在不涉及国家或政府秘密的前提下公开总售票量,自觉接受社会各界监
督,加大市场监管力度,压力打击黄牛党等非法倒票人员。
九、模型的总结与推广
9.1 模型的总结
本文以 12306 网站售票系统为背景,主要利用排队论知识对购票系统建立相
应的的数学模型,并对模型相关参数进行计算和分析,并根据题目要求完成了任
务,为网络售票系统提供了理论依据。
本文所用模型不多,且为常见模型这正是本文的特点。我们认为对于实际数
学问题,所用的数学方法越简单越有利用相关部门采纳使用,也可增加文章的可
读性。
本文所用模型的主要特征:
(1)第一问中主要使用无偏估计、区间估计等传统数学模型。这类模型发
展比较成熟完善,且已形成了使用该类模型的基本步骤。在现有的数学建模问题
中,大数据量已成为其基本特征,因此样本估计总体的思路处处可见。本文主要
是在前人的研究基础上恰当的估计了每秒最多能处理的数据量。
(2)第二问中分别使用了 Fibonacci 级数原理和排队论模型,且排队论模型
贯穿于全文。 Fibonacci 级数在数学模型中的使用还不是很多,本文主要是使用
Fibonacci 级数的原理来近似模拟各个时间段网站的累计访问量;排队论模型是
本文的主要模型,使用该模型主要是为了计算各个数量指标并进行计算分析,顺
利解决题目中提出的要求;。
(3)排队论本身并不是很难,主要工作应该在从已经搜集的数据中概括抽象
出到达的时间间隔分布和服务时间分布,因此本文化了大量篇幅来证明这个问
题,只有抽象的时间间隔分布、服务时间分布的模型合理,排队论的后续工作才
有意义,才能使后续工作顺利进展。
9.2 模型的推广
Fibonacci 级数源于兔子的繁殖,但其基本原理在实际生活有着极大的用途;
Fibonacci 级数的使用也使得 VC6++应用实际数学中,因此在学习数学,特别是
在数学模型的建立过程抽出其原理、本质,用大家耳熟能详模型解决实际问题,
使文章更具可读性。
排队论模型的应用非常广泛。小到在菜市场买菜、食堂打饭大到网络访问、
医院就医等,排队论处处可见。排队论的使用应该跟加注意数据的搜集、整理过
程,这一过程的合理性直接影响排队论模型的可用性。因此在以后的使用过程中
应更加注重数据来源的可靠性、数据处理的合理性。
本文主要使用 / /M M n 模型,该模型的研究使用比较完善,在许多领域都
有广泛的应用。特别是 / /M M n 模型的优化设计更具有使用价值,但现有的资
料对其研究并不深刻,这可能是今后的一个重要研究课题;另一方面对于一个队
列多个服务台串联或是多个队列多个服务台的模型则需要进一步研究,相信若这些模型应用到本文将能更好的解决相关问题。
十、参考文献
[1] 叶慈南,曹伟丽.应用数理统计[M].北京:机械工业出版社,2004.6.
[2] 王雪萍.排队论在体检系统中的应用研究[D].华中师范大学,2008.6.
[3] 钱颂迪等.运筹学(第三版)[M].北京:清华大学出版社,2005:312-314,
324-326.
[4] 谷海兰,张威.应用 matlab 软件解决排队论模型问题[J].河北企业,2011,
第四期.
[5] 赵静,但琦.数学建模与数学实验[M].北京:到高等教育出版社,2008.3.
[6] 郑莉,董渊,何江舟.C++语言程序设计[M].北京:清华大学出版社,2010:
97.
[7] 解争龙,李向军.基于排队论模型的网络拥塞率研究[A].计算机工程与设计,
2007,28(17)
[8] 贾俊平,何晓琼,金勇进.统计学[M].北京:中国人民大学出版社,2012.6.
附录
#include <iostream>
using namespace std;
long int fib(int n)
{int f=1,f2=1;
If (n==2||n==1)
f=1;
else f=fib(n-1)+fib(n-2);
return f;
}
int main()
{int n;
cout<<"请输入一个正整数:";
cin>>n;
long int y=fib(n);
cout<<y<<endl;
return 0;
}
附录 2:计算排队论数量指标的 matlab 源程序:(本程序中用 s 表示服务台个数,
只需在 command window 中输入相应的参数并调用 f(lambda,mu,s))
function x=f(lambda,mu,s)
ro=lambda/mu;ros=ro/s
sum1=0;
for (i=0:s-1)
sum1=sum1+ro.^i/factorial(i);
end
sum2=ro.^s/factorial(s)/(1-ros);
p0=1/(sum1+sum2);
p=ro.^s.* p0/factorial(s)/(1-ros);
Lq=p.*ros/(1-ros);
L=Lq+ro;
W=L/lambda;
Wq=Lq/lambda;
x(1)=p0 ;
x(2)=p ;
x(3)=Lq ;
x(4)=L ;
x(5)=W;
x(6)=Wq;end