该【数学建模渡口问题 】是由【1485173816】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【数学建模渡口问题 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。1/12
建模问题(渡口问题)
摘要
本文建立了一个关于如何安排过河车辆位置问题的模型
本文首先对各种车辆达到情况作统计,并对车辆之间得特性进行分析,得出以下安排车辆位置方案:摩托车少而且站位小,以插空的方式进入车队列,这样安排明显减少了空间浪费。本文重概率论角度,引进均匀分部函数已经随机数,对来的车辆先后进行描述,随后通过若干组数据统计,最后得出一般规律并解决安排车辆问题。
问题重述与分析:
一个渡口的渡船营运者拥有一只甲板长32米,可以并排停放两列车辆的渡船。他正在考虑怎样在甲板上安排过河车辆的位置,才能安全地运过最多数量的车辆,并关心一次可以运多少辆车,其中有多少小汽车,多少卡车,多少摩托车,他观察了数日,发现每次情况不尽相同,但他得到下列数据和情况:
(1)车辆随机到达,形成一个等待上船的车列。
(2)来到渡口的车辆中,轿车占40%,卡车占55%,摩托车占5%
(3)~,卡车车身长为8~10米。
请考虑以下问题:
(1)应该怎样安排摩托车?
(2)怎样描述一辆车的车身长度?
(3)到达的车要加入甲板上两列车队的哪一列中去?
(4)如何考虑“安全”问题?
请就以上问题建立数学模型,最终保证安全,并运用计算机进行模拟车辆到达、安排停车过程。
模型假设与建立:
营运者需要在安全情况下运过最多数量的车,摩托车如果横着放的话会节省很多空间,所以我们假定把摩托车横着放置在两辆车的中间,这时就要考虑摩托车的宽度而不是长度了。~(为方便起见,后文中摩托车的“宽度”都说成“长度”)。
一共有三种车:轿车、卡车和摩托车。
三种车的出现概率不同,每辆车的车身长度也不相同,我们想到可以用随机数来确定每一辆车的类型和长度。
2/12
卡车轿车摩托车
图1
如图1所示,用一个0到1之间的随机数的分布来确定车的所属类型。当random=0~,为卡车;当random=~,为轿车;当random=~,为摩托车。
车身的长度问题也应用这个思路。~,重新定义一个0~1之间的随机数random。,即:random*2,所以轿车的车身长度为:
Length=(+random*2)。同理得出:卡车的车身长度为:length=8+random*2,摩托车的车身长度为:length=+random*2。(图2)
轿车
82
卡车
摩托车
图2
3/12
(3)由于甲板上一共可以停放两列车,所以车上甲板的顺序就不确定。
通过我们的研究发现,如果将这一问题考虑的过于复杂会导致算法过于复杂,问题复杂化。
所以我们设定先来的车先都上同一个甲板,当第一个甲板排满之后再排第二个甲板。
(4)船在海上行驶的时候会有摇晃,为了保证安全,车辆之间应该留有一定的空间,。
。最后一辆车通常情况下一定会和船尾有一定距离,所以不需再空出距离了。
具体解决问题:
经过讨论决定使用java语言来编译一个模拟环境,模拟出两个甲板和每个甲板上停车的数量、类型。
首先我们编写了3个车的类:Car、Truck和Motorcycle。
接着是假定每个相同车类组成的队列类:CarDateBase、TruckDateBase、
MotorcycleDateBase。
最后是模拟类:Demo。
(详见附录)
最后用这几个类组成一个完整的模拟程序。
测试出来的结果如下。
测试结果:
(1)随机出来的车的长度:
车的类型
长度
1
轿车
2
轿车
3
轿车
4
轿车
5
轿车
6
轿车
7
摩托车
8
摩托车
4/12
9
摩托车
10
摩托车
11
摩托车
12
摩托车
13
卡车
14
卡车
15
卡车
16
卡车
17
卡车
18
卡车
……
……
……
轿车数量
卡车数量
摩托车数量
总长度
测试1
1
3
0
测试2
0
3
0
31
测试3
0
3
2
测试4
0
3
1
测试5
6
0
0
……
……
……
……
……
测试出来的每个板上的车的种类和数量:
5/12
总结:
以上只是一部分测试数据,总体上来看,我们完成了题目中的要求。
由于是第一次参赛而且时间比较紧,我们的这个建模做得还不是很完美,有几个细节的地方只能是假定一种情况,而不能将所有的情况都写出来。
希望下次能将我们所想的全部都表达出来。
最重要的是我们通过这次活动学到很多,为我们的专业学习也带来了很大的帮助,以后一定会继续努力,争取在建模和编程上有所成就!
附录
模拟停车的java程序:
(1)Car类:
publicclassCar
{
privatedoublelength;
publicCar(doubled)
{
=d;
}
publicdoublegetLength()
{
returnlength;
}
}
(2)Truck类:
classTruck
{
privatedoublelength;
publicTruck(doublel)
{
=l;
}
6/12
publicdoublegetLength()
{
returnlength;
}
}
(3)Motorcycle类:
classMotorcycle
{
privatedoublelength;
publicMotorcycle(doublel)
{
=l;
}
publicdoublegetLength()
{
returnlength;
}
}
(4)CarDataBase类:
.*;
classCarDataBase
{
privateVectorcars;
publicCarDataBase()
{
cars=newVector();
}
publicvoidaddCar(Carinitialcar)
{
(initialcar);
}
publicIteratorgetCarIterator(){
();
7/12
}
publicCargetCar(floatlength){
for(Iteratori=();();){
Cartemp=(Car)();
if(()==length)
returntemp;
}
returnnull;
}
publicintgetNumberOfCars(){
();
}
}
(5)TruckDataBase类:
.*;
classTruckDataBase
{
privateVectortrucks;
publicTruckDataBase()
{
trucks=newVector();
}
publicvoidaddTruck(Truckinitialcar)
{
(initialcar);
}
publicIteratorgetTruckIterator(){
();
}
publicTruckgetTruck(floatlength){
for(Iteratori=();();){
Trucktemp=(Truck)();
if(()==length)
returntemp;
}
returnnull;
}
8/12
publicintgetNumberOfTrucks(){
();
}
}
(6)MotorcycleDataBase类:
.*;
classMotorcycleDataBase
{
privateVectormotorcycles;
publicMotorcycleDataBase()
{
motorcycles=newVector();
}
publicvoidaddMotorcycle(Motorcycleinitialmotorcycle)
{
(initialmotorcycle);
}
publicIteratorgetMotorcycleIterator()
{
();
}
publicMotorcyclegetMotorcycle(floatlength){
for(Iteratori=();();){
Motorcycletemp=(Motorcycle)();
if(()==length)
returntemp;
}
returnnull;
}
publicintgetNumberOfMotorcycle(){
();
}
}
9/12
(7)Dome类:
.*;
publicclassDome
{
privateCarDataBasecardatabase;
privateTruckDataBasetruckdatabase;
privateMotorcycleDataBasemotorcycledatabase;
privateintNUMBEROFCARS=0;
privateintNUMBEROFTRUCKS=0;
privateintNUMBEROFMOTORCYCLES=0;
privatedoubleTOTLELENGTH=0;
privatestaticintRAN;
publicDome()
{
cardatabase=loadCar();
truckdatabase=loadTruck();
motorcycledatabase=loadMotorcycle();
}
publicstaticvoidmain(String[]args)
{
Domea=newDome();
Domeb=newDome();
for(inti=0;i<10;i++){
RAN=(int)(()*1000);
();
}
("NUMBEROFCARSare"+);
("NUMBEROFTRUCKSare"+);
("NUMBEROFMOTORCYCLESare"+);
("TOTLELENGTHis"+(double)(((int)(*100))/100));
for(intj=0;j<10;j++){
RAN=(int)(()*1000);
();
}
("NUMBEROFCARSare"+);
("NUMBEROFTRUCKSare"+);
("NUMBEROFMOTORCYCLESare"+);
("TOTLELENGTHis"+(double)(((int)(*100))/100));
10/12
}
privateCarDataBaseloadCar()
{
// ("loadCar!");
CarDataBasecardatabase=newCarDataBase();
for(inti=0;i<10;i++){
doubleran=(double)(()*2);
(newCar(+ran)); }
returncardatabase;
}
privateTruckDataBaseloadTruck()
{
TruckDataBasetruckdatabase=newTruckDataBase();
for(inti=0;i<4;i++){
doubleran=(double)(()*2);
(newTruck(+ran));
}
returntruckdatabase;
}
privateMotorcycleDataBaseloadMotorcycle()
{
MotorcycleDataBasemotorcycledatabase=newMotorcycleDataBase();
for(inti=0;i<100;i++){
doubleran=(double)(()*);
(newMotorcycle(+ran));
}
returnmotorcycledatabase;
}
privatebooleanJudge(){
if(TOTLELENGTH<=32){
returntrue;
}else{
returnfalse;
}
}
publicvoidrun(){
数学建模渡口问题 来自淘豆网m.daumloan.com转载请标明出处.