港口系统仿真大作业.pdf
港口系统仿真课程设计港口系统仿真课程设计交运 172 王星宇 2017106111581.在计算机上利用线性同余法或乘同余法产生0,1 区间独立均匀分布的随机数序列。(A)要求产生 2 组随机数序列,每组1000 个。(B)计算每组随机数的均值,并且以0.1 为间隔,(0,0.1),(0.1,0.2),(0.2,0.3),.画出随机数落在每个子区间内的频率分布曲线。解:(1)用 a=9,c=7,m=215,x0=7 生成一个 1000 行 1 列的矩阵,用循环语句生成 1000个 0 到 1 之间的随机数,用 mean 函数求平均值并用 histfit 进行作图,如图 1 以及图 2。图 1图 2(2)以下是第二组随机数的生成,流程与第一小组随机数相同,如图3 和图 4。图 3图 42.为模拟船舶的装卸过程,首先需要模拟船舶的到港过程,假设泊位充足,且船舶的到达服从每天平均 3.6 艘船的泊松分(A)以T1 产生的第一组随机数为基础,按照上述分布特点产生1000 艘船舶的到港时间间隔(以 min 为单位),并计算你所产生的这1000 个到达时间间隔的平均值。(B)以 100min 为划分间隔,画出产生到达时间间隔在各区间的频率分布图解:首先将每天3.6 艘船的单位进行转换,然后建立循环语句,因为船舶达港服从泊松到达过程且符合指数分布,所以到达间隔时间可以用R=1-e(a*x),然后求出平均数并作图,如图 5 和图 6。图 5图 63.为仿真船舶的装卸过程,需模拟船舶的装卸过程。为此,研究人员统计了200 艘船舶的装卸所需时间,如下表所示:区间2446688101011(小时)频数4050603020(A)根据该数据拟合出装卸服务时间这个随机变量的累积分布函数(B)以T1 产生的第二组随机数为基础,按照上述统计规律模拟产生1000 艘船舶的装卸服务时间(单位:min),并计算所产生的 1000 艘船舶装卸服务时间的平均值。(C)以 100min 为区间间隔,画出产生数据在各区间的频率分布图。解:可以套用累积分布函数得到函数 tan(i)=(x(i+1)-x(i)/(y(i+1)-y(i)并利用 switch 语句生成装卸时间。如图 7 与图 8。图 7图 8利用 histfit 作图可得出如下装卸时间的分布,如图9。图 94.采用 T2 产生的 1000 个船舶到港时间间隔数据,T3 产生的 1000 艘船舶装卸服务时间,假设只有 1 台桥吊,对 1000 艘船舶的装卸排队服务过程进行仿真:统计桥吊利用率、每艘船舶平均在港总时间、每艘船舶平均等待时间解:吊桥利用率=总服务时间/总时间平均在港时间=(总服务时间+总装卸时间)/船舶数量平均等待时间=总等待时间/船舶数量其中总的服务时间就是第一艘船开始到最后一艘船的结束,如图10,11,12,13。图 10图 11图 12图 135.假设有 2 台桥吊(桥吊 A 和桥吊 B,在 A 和 B 均空闲时,选择让 A 服务),重复对 1000 艘船舶的装卸过程进行仿真,并统计相关统计量(桥吊利用率、每艘船舶平均在港总时间、每艘船舶平均等待时间)。解:根据题意,利用循环嵌套的语句进行解答比较合适,A 与 B 同时空闲就选择 A,A 空闲B 在忙就选择 A,B 空闲 A 在忙就选择 B,如图 14,15,16,17,18。本题全代码如下nextA=0nextB=0arrival=0sumstevedoreA=0sumstevedoreB=0sumawait=0sumstevedore=sum(stevedore)for i=1:1000if arrival=nextA&arrival=nextBnextA=arrival+stevedore(i)sumstevedoreA=sumstevedoreA+stevedore(i)elseif arrival=nextA&arrivalnextBnextA=arrival+stevedore(i)sumstevedoreA=sumstevedoreA+stevedore(i)elseif arrival=nextBnextB=arrival+stevedore(i)sumstevedoreB=sumstevedoreB+stevedore(i)elseif nextA=nextBzong=nextAelsezong=nextBend图 14图 15 吊桥 A 利用率图 16 吊桥 B 利用率图 17 平均在港时间图 18 平均等待时间6如果上述服务规则改为:如果A 和 B 均空闲,则以 0.6 的概率选择 B,重复上述仿真本题的思路与第五题大致相同,就是在判断语句有所改变,代码如下并如图 19,20,21,22。nextA=0nextB=0arrival=0sumstevedoreA=0sumstevedoreB=0sumawait=0a=9;c=7;m=215;x0=9;B=zeros(1000,1);n=1;while n=nextA&arrival=nextBprobability=B(i,1);if probability=0.6nextA=arrival+stevedore(i)sumstevedoreA=sumstevedoreA+stevedore(i)elsenextB=arrival+stevedore(i)sumstevedoreB=sumstevedoreB+stevedore(i)endelseif arrival=nextBnextB=arrival+stevedore(i)sumstevedoreB=sumstevedoreB+stevedore(i)elseif arrival=nextA&arrivalnextBsumawait=sumawait+(nextB-arrival)nextB=nextB+(nextB-arrival)sumstevedoreB=sumstevedoreB+stevedore(i)elseif nextA=0.6sumawait=sumawait+(nextA-arrival)nextA=nextA+(nextA-arrival)sumstevedoreA=sumstevedoreA+stevedore(i)elsesumawait=sumawait+(nextB-arrival)nextB=nextB+(nextB-arrival)sumstevedoreB=sumstevedoreB+stevedore(i)endendendarrival=arrival+interval(i)endif nextA=nextBzong=nextAelsezong=nextBend图 19图 20 吊桥 A 利用率图 21 吊桥 B 利用率图 22 平均在港时间原代码:1.a=9;c=7;m=215;x0=7;B=zeros(1000,1);n=1;while n=1000n=n+1;x=rem(a*x0+c),m);x0=x;s=x/m;B(n-1,1)=s;endmean(B)histfit(B,10)a=11;c=0;m=215;x0=7;D=zeros(1000,1);n=1;while n=1000n=n+1;x=rem(a*x0+c),m);x0=x;s=x/m;D(n-1,1)=s;endmean(D)图 23 平均等待时间histfit(D,10)2.pingju=3.6jiange=3.6/1440interval=zeros(1000,1);n=1;while narrivalsumawait=sumawait+(nextwork-arrival)nextwork=arrival+(nextwork-arrival)elsenextwork=arrival+stevedore(i)endarrival=arrival+interval(i)end5.nextA=0nextB=0arrival=0sumstevedoreA=0sumstevedoreB=0sumawait=0sumstevedore=sum(stevedore)for i=1:1000if arrival=nextA&arrival=nextBnextA=arrival+stevedore(i)sumstevedoreA=sumstevedoreA+stevedore(i)elseif arrival=nextA&arrivalnextBnextA=arrival+stevedore(i)sumstevedoreA=sumstevedoreA+stevedore(i)elseif arrival=nextBnextB=arrival+stevedore(i)sumstevedoreB=sumstevedoreB+stevedore(i)elseif nextA=nextBzong=nextAelsezong=nextBend6.nextA=0nextB=0arrival=0sumstevedoreA=0sumstevedoreB=0sumawait=0a=9;c=7;m=215;x0=9;B=zeros(1000,1);n=1;while n=nextA&arrival=nextBprobability=B(i,1);if probability=0.6nextA=arrival+stevedore(i)sumstevedoreA=sumstevedoreA+stevedore(i)elsenextB=arrival+stevedore(i)sumstevedoreB=sumstevedoreB+stevedore(i)endelseif arrival=nextBnextB=arrival+stevedore(i)sumstevedoreB=sumstevedoreB+stevedore(i)elseif arrival=nextA&arrivalnextBsumawait=sumawait+(nextB-arrival)nextB=nextB+(nextB-arrival)sumstevedoreB=sumstevedoreB+stevedore(i)elseif nextA=0.6sumawait=sumawait+(nextA-arrival)nextA=nextA+(nextA-arrival)sumstevedoreA=sumstevedoreA+stevedore(i)elsesumawait=sumawait+(nextB-arrival)nextB=nextB+(nextB-arrival)sumstevedoreB=sumstevedoreB+stevedore(i)endendendarrival=arrival+interval(i)endif nextA=nextBzong=nextAelsezong=nextBend