数学建模渡口问题.docx

上传人:b****5 文档编号:27839536 上传时间:2023-07-05 格式:DOCX 页数:16 大小:27.32KB
下载 相关 举报
数学建模渡口问题.docx_第1页
第1页 / 共16页
数学建模渡口问题.docx_第2页
第2页 / 共16页
数学建模渡口问题.docx_第3页
第3页 / 共16页
数学建模渡口问题.docx_第4页
第4页 / 共16页
数学建模渡口问题.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数学建模渡口问题.docx

《数学建模渡口问题.docx》由会员分享,可在线阅读,更多相关《数学建模渡口问题.docx(16页珍藏版)》请在冰豆网上搜索。

数学建模渡口问题.docx

数学建模渡口问题

建模问题(渡口问题)

摘要

本文建立了一个关于如何安排过河车辆位置问题的模型

本文首先对各种车辆达到情况作统计,并对车辆之间得特性进行分析,得出以下安排车辆位置方案:

摩托车少而且站位小,以插空的方式进入车队列,这样安排明显减少了空间浪费。

本文重概率论角度,引进均匀分部函数已经随机数,对来的车辆先后进行描述,随后通过若干组数据统计,最后得出一般规律并解决安排车辆问题。

 

问题重述与分析:

一个渡口的渡船营运者拥有一只甲板长32米,可以并排停放两列车辆的渡船。

他正在考虑怎样在甲板上安排过河车辆的位置,才能安全地运过最多数量的车辆,并关心一次可以运多少辆车,其中有多少小汽车,多少卡车,多少摩托车,他观察了数日,发现每次情况不尽相同,但他得到下列数据和情况:

(1)车辆随机到达,形成一个等待上船的车列。

(2)来到渡口的车辆中,轿车占40%,卡车占55%,摩托车占5%

(3)轿车车身长为~5.5米,卡车车身长为8~10米。

请考虑以下问题:

(1)应该怎样安排摩托车

(2)怎样描述一辆车的车身长度

(3)到达的车要加入甲板上两列车队的哪一列中去

(4)如何考虑“安全”问题

请就以上问题建立数学模型,最终保证安全,并运用计算机进行模拟车辆到达、安排停车过程。

模型假设与建立:

(1)营运者需要在安全情况下运过最多数量的车,摩托车如果横着放的话会节省很多空间,所以我们假定把摩托车横着放置在两辆车的中间,这时就要考虑摩托车的宽度而不是长度了。

我们假定摩托车的宽度是~米(为方便起见,后文中摩托车的“宽度”都说成“长度”)。

(2)一共有三种车:

轿车、卡车和摩托车。

三种车的出现概率不同,每辆车的车身长度也不相同,我们想到可以用随机数来确定每一辆车的类型和长度。

 

0

 

卡车轿车摩托车

图1

 

如图1所示,用一个0到1之间的随机数的分布来确定车的所属类型。

当random=0~时,为卡车;当random=~时,为轿车;当random=~时,为摩托车。

车身的长度问题也应用这个思路。

题中给出轿车的长度为~,重新定义一个0~1之间的随机数random。

和之间的差值是2,即:

random*2,所以轿车的车身长度为:

Length=(+random*2)。

同理得出:

卡车的车身长度为:

length=8+random*2,摩托车的车身长度为:

length=+random*2。

(图2)

 

2

 

轿车

82

 

卡车

 

摩托车

图2

 

(3)由于甲板上一共可以停放两列车,所以车上甲板的顺序就不确定。

通过我们的研究发现,如果将这一问题考虑的过于复杂会导致算法过于复杂,问题复杂化。

所以我们设定先来的车先都上同一个甲板,当第一个甲板排满之后再排第二个甲板。

(4)船在海上行驶的时候会有摇晃,为了保证安全,车辆之间应该留有一定的空间,我们假定为米。

首辆车距离甲板头我们定为0.5米。

最后一辆车通常情况下一定会和船尾有一定距离,所以不需再空出距离了。

具体解决问题:

经过讨论决定使用java语言来编译一个模拟环境,模拟出两个甲板和每个甲板上停车的数量、类型。

首先我们编写了3个车的类:

Car、Truck和Motorcycle。

接着是假定每个相同车类组成的队列类:

CarDateBase、TruckDateBase、

MotorcycleDateBase。

最后是模拟类:

Demo。

(详见附录)

最后用这几个类组成一个完整的模拟程序。

测试出来的结果如下。

测试结果:

(1)随机出来的车的长度:

车的类型

长度

1

轿车

2

轿车

3

轿车

4

轿车

5

轿车

6

轿车

7

摩托车

8

摩托车

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

……

……

……

……

……

(3)测试出来的每个板上的车的种类和数量:

 

总结:

以上只是一部分测试数据,总体上来看,我们完成了题目中的要求。

由于是第一次参赛而且时间比较紧,我们的这个建模做得还不是很完美,有几个细节的地方只能是假定一种情况,而不能将所有的情况都写出来。

希望下次能将我们所想的全部都表达出来。

最重要的是我们通过这次活动学到很多,为我们的专业学习也带来了很大的帮助,以后一定会继续努力,争取在建模和编程上有所成就!

 

附录

模拟停车的java程序:

(1)Car类:

publicclassCar

{

privatedoublelength;

publicCar(doubled)

{

=d;

}

publicdoublegetLength()

{

returnlength;

}

}

(2)Truck类:

classTruck

{

privatedoublelength;

publicTruck(doublel)

{

=l;

}

publicdoublegetLength()

{

returnlength;

}

 

}

(3)Motorcycle类:

classMotorcycle

{

privatedoublelength;

publicMotorcycle(doublel)

{

=l;

}

publicdoublegetLength()

{

returnlength;

}

}

(4)CarDataBase类:

import.*;

classCarDataBase

{

privateVectorcars;

publicCarDataBase()

{

cars=newVector();

}

publicvoidaddCar(Carinitialcar)

{

}

publicIteratorgetCarIterator(){

return();

}

publicCargetCar(floatlength){

for(Iteratori=();();){

Cartemp=(Car)();

if()==length)

returntemp;

}

returnnull;

}

publicintgetNumberOfCars(){

return}

}

(5)TruckDataBase类:

import.*;

classTruckDataBase

{

privateVectortrucks;

publicTruckDataBase()

{

trucks=newVector();

}

publicvoidaddTruck(Truckinitialcar)

{

}

publicIteratorgetTruckIterator(){

return();

}

publicTruckgetTruck(floatlength){

for(Iteratori=();();){

Trucktemp=(Truck)();

if()==length)

returntemp;

}

returnnull;

}

publicintgetNumberOfTrucks(){

return}

}

(6)MotorcycleDataBase类:

import.*;

classMotorcycleDataBase

{

privateVectormotorcycles;

publicMotorcycleDataBase()

{

motorcycles=newVector();

}

publicvoidaddMotorcycle(Motorcycleinitialmotorcycle)

{

}

publicIteratorgetMotorcycleIterator()

{

return();

}

publicMotorcyclegetMotorcycle(floatlength){

for(Iteratori=();();){

Motorcycletemp=(Motorcycle)();

if()==length)

returntemp;

}

returnnull;

}

publicintgetNumberOfMotorcycle(){

return}

}

 

(7)Dome类:

import.*;

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));

}

 

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(){

if(RAN>=0&&RAN<450){

for(Iteratori=();();){

Carcars=(Car)();

if(TOTLELENGTH==0){

TOTLELENGTH+=;

}else

if(TOTLELENGTH<={

TOTLELENGTH+=;

}

TOTLELENGTH+=();

if(Judge()){

"Thiscar'lengthis"+(double)((int)()*1000))/1000);

NUMBEROFCARS++;

}else{

TOTLELENGTH-=();

}

}

}else

if(RAN>=450&&RAN<=950){

for(Iteratori=();();){

Trucktrucks=(Truck)();

if(TOTLELENGTH==0){

TOTLELENGTH+=;

}else

if(TOTLELENGTH<={

TOTLELENGTH+=;

}

TOTLELENGTH+=();

if(Judge()){

"Thistruck'lengthis"+(double)((int)()*1000))/1000);

NUMBEROFTRUCKS++;

}else{

TOTLELENGTH-=();

}

}

}else

if(RAN>950&&RAN<=1000)

for(Iteratori=();();){

Motorcyclemotorcycles=(Motorcycle)();

if(TOTLELENGTH==0){

TOTLELENGTH+=;

}else

if(TOTLELENGTH<={

TOTLELENGTH+=;

}

TOTLELENGTH+=();

if(Judge()){

"Thismotorcycle'lengthis"+(double)((int)()*1000))/1000);

NUMBEROFMOTORCYCLES++;

}else{

TOTLELENGTH-=();

}

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1