搜索
您的当前位置:首页正文

计算机模拟模型 实验报告

来源:六九路网
08信息 08207010113 高信波 安徽建筑工业学院

一、实验内容

题目1

从题1、2中任选一题 题目2

从题3—12中任选一题 二、实验目的

1. 了解时间步长仿真和事件步长仿真的概念

2. 掌握利用计算机模拟一些实际系统的一般原理和基本方法 3. 学会用计算机对一些随机现象和复杂系统进行动态模拟 三、注意事项

1. 时间步长对模拟结果的影响. 2. 随机数的生成法.

3. 在各种事件中正确找出作为步长的事件,明确事件间的触发关系、事件

对系统状态的影响、事件表的刷新

四、参考资料

①《数学建模与数学实验》第2版 赵静 但琦 高等教育出版社 ②《运筹学》杨茂盛 黄己立 西安建筑工业大学出版社 ③《数据结构》 严蔚敏 清华大学出版社 五、实验过程

(一)问题分析:该问题是?连续模型/离散模型;采用仿真方法?时间步

长仿真/事件步长仿真

(二)系统假设:包括随机数服从的分布 (三)符号说明:定义变量,含义说明 (四)模拟框图

(五)程序代码(语言不限)

(六)运行结果(包括部分中间过程和最后结果)

(七)模型检验:计算模型解析解,与仿真结果对比,检验仿真效果

六、结果及分析 原问题的回答及分析

题目: 学号 0 1 2 3 4 5 6 7 8 9 题号 1 2 3 4 5 6 7 8 9 10 11 12 题目 《数学建模实验》P335例1 盐水浓度变化 《数学建模实验》P338例2 库存问题 《数学建模实验》P345例2 可靠性问题 《运筹学》P319例3 排队论 《运筹学》P321例4 排队论 《运筹学》P323例5 排队论 《运筹学》P325例6 排队论 《运筹学》P328例7 排队论 《运筹学》P330例8 排队论 《运筹学》P341习题12.2 排队论 《运筹学》P342习题12.3 排队论 《运筹学》P343习题12.11 排队论 function out=MMSkteam(s,k,mu1,mu2,T) %多服务台

%s——服务台个数 %k——最大顾客等待数 %T——时间终止点

%mu1——到达时间间隔服从指数分布 %mu2——服务时间服从指数分布 %事件表:

% arrive_time——顾客到达事件 % leave_time——顾客离开事件 %mintime——事件表中的最近事件 %current_time——当前时间 %L——队长

%tt——时间序列 %LL——队长序列

%c——顾客到达时间序列 %b——服务开始时间序列 %e——顾客离开时间序列 %a_count——到达顾客数 %b_count——服务顾客数 %e_count——损失顾客数

%初始化

arrive_time=exprnd(mu1); leave_time=[]; current_time=0; L=0; LL=[L];

tt=[current_time]; c=[]; b=[]; e=[];

a_count=0; b_count=0; e_count=0;

%循环

while min([arrive_time,leave_time])current_time=min([arrive_time,leave_time]);

tt=[tt,current_time]; %记录时间序列

if current_time==arrive_time %顾客到达子过程

arrive_time=arrive_time+exprnd(mu1); % 刷新顾客到达事件 a_count=a_count+1; %累加到达顾客数 if Lb_count=b_count+1;%累加服务顾客数

c=[c,current_time];%记录顾客到达时间序列 b=[b,current_time];%记录服务开始时间序列

leave_time=[leave_time,current_time+exprnd(mu2)];%产生新的顾客离开事件

leave_time=sort(leave_time);%离开事件表排序 elseif Lb_count=b_count+1;%累加服务顾客数

c=[c,current_time];%记录顾客到达时间序列 else %顾客损失

e_count=e_count+1;%累加损失顾客数 end

else %顾客离开子过程

leave_time(1)=[];%从事件表中抹去顾客离开事件 e=[e,current_time];%记录顾客离开时间序列 if L>s %有顾客等待

L=L-1; %更新队长

b=[b,current_time];%记录服务开始时间序列

leave_time=[leave_time,current_time+exprnd(mu2)]; leave_time=sort(leave_time);%离开事件表排序 else %无顾客等待

L=L-1; %更新队长 end end

LL=[LL,L]; %记录队长序列 end

Ws=sum(e-c(1:length(e)))/length(e); Wq=sum(b-c(1:length(b)))/length(b); Wb=sum(e-b(1:length(e)))/length(e); Ls=sum(diff([tt,T]).*LL)/T;

Lq=sum(diff([tt,T]).*max(LL-s,0))/T; fprintf('到达顾客数:%d\\n',a_count)%到达顾客数 fprintf('服务顾客数:%d\\n',b_count)%服务顾客数 fprintf('损失顾客数:%d\\n',e_count)%损失顾客数 fprintf('平均逗留时间:%f\\n',Ws)%平均逗留时间 fprintf('平均等待时间:%f\\n',Wq)%平均等待时间 fprintf('平均服务时间:%f\\n',Wb)%平均服务时间 fprintf('平均队长:%f\\n',Ls)%平均队长

fprintf('平均等待队长:%f\\n',Lq)%平均等待队长 if k~=inf

for i=0:s+k

p(i+1)=sum((LL==i).*diff([tt,T]))/T;%队长为i的概率 fprintf('队长为%d的概率:%f\\n',i,p(i+1)); end else

for i=0:3*s

p(i+1)=sum((LL==i).*diff([tt,T]))/T;%队长为i的概率 fprintf('队长为%d的概率:%f\\n',i,p(i+1)); end end

fprintf('顾客不能马上得到服务的概率:%f\\n',1-sum(p(1:s)))%顾客不能马上得到服务的概率

out=[Ws,Wq,Wb,Ls,Lq,p];

因篇幅问题不能全部显示,请点此查看更多更全内容

Top