matlab 实验案例 理发店模拟

合集下载

计算机仿真与建模实验报告

计算机仿真与建模实验报告

中南大学计算机仿真与建模实验报告题目:理发店的服务过程仿真姓名:XXXX班级:计科XXXX班学号:0909XXXX日期:2013XXXX理发店的服务过程仿真1 实验案例 (2)1.1 案例:理发店系统研究 (2)1.1.1 问题分析 (3)1.1.2 模型假设 (3)1.1.3 变量说明 (3)1.1.4 模型建立 (3)1.1.5 系统模拟 (4)1.1.6 计算机模拟算法设计 (5)1.1.7 计算机模拟程序 (6)1实验案例1.1 案例:理发店模拟一个理发店有两位服务员A和B顾客随机地到达该理发店,每分钟有一个顾客到达和没有顾客到达的概率均是1/2 , 其中60%的顾客理发仅用5分钟,另外40%的顾客用8分钟. 试对前10分钟的情况进行仿真。

(“排队论”,“系统模拟”,“离散系统模拟”,“事件调度法”)1.1.1 问题分析理发店系统包含诸多随机因素,为了对其进行评判就是要研究其运行效率,从理发店自身利益来说,要看服务员工作负荷是否合理,是否需要增加员工等考虑。

从顾客角度讲,还要看顾客的等待时间,顾客的等待队长,如等待时间过长或者等待的人过多,则顾客会离开。

理发店系统是一个典型的排队系统,可以用排队论有关知识来研究。

1.1.2 模型假设1.60%的顾客只需剪发,40%的顾客既要剪发,又要洗发; 2.每个服务员剪发需要的时间均为5分钟,既剪发又洗发则花8分钟; 3.顾客的到达间隔时间服从指数分布; 4. 服务中服务员不休息。

1.1.3 变量说明u :剪发时间(单位:分钟),u=5m ;v: 既剪发又理发花的时间(单位:分钟),v=8m ;T : 顾客到达的间隔时间,是随机变量,服从参数为λ的指数分布,(单位:分钟)T 0:顾客到达的平均间隔时间(单位:秒),T 0=λ1;1.1.4 模型建立由于该系统包含诸多随机因素,很难给出解析的结果,因此可以借助计算机模拟对该系统进行模拟。

考虑一般理发店的工作模式,一般是上午9:00开始营业,晚上10:00左右结束,且一般是连续工作的,因此一般营业时间为13小时左右。

MATLAB教程第8章MATLAB综合实训

MATLAB教程第8章MATLAB综合实训

MATLAB教程第8章MATLAB综合实训MATLAB综合实训是对之前学过的知识进行综合运用的一个实践环节。

在该实训中,我们需要利用所掌握的MATLAB技能完成一个综合性的任务,包括数据处理、图像处理、信号处理等方面。

在本章中,我们将介绍MATLAB综合实训的基本要求和步骤,并给出一个具体的实例来帮助理解。

1.数据处理:从给定的数据集中提取出需要的数据,并进行相应的处理。

例如,计算数据的平均值、方差等统计量,或者对数据进行排序、过滤等操作。

2.图像处理:对给定的图像进行处理,可以包括图像增强、滤波、边缘检测等操作。

也可以利用图像处理工具箱中的函数完成一些特定的任务。

3.信号处理:对给定的信号进行处理,可以包括信号滤波、谱分析、频域变换等操作。

也可以利用信号处理工具箱中的函数完成一些特定的任务。

4. 建模与仿真:根据给定的问题,设计相应的数学模型,并进行仿真分析。

例如,可以利用ODE求解器求解一些常微分方程,或者使用Simulink进行系统级建模与仿真。

下面以一个实例来说明MATLAB综合实训的步骤和方法。

假设我们有一组学生成绩数据,包括学号、姓名和成绩。

我们需要完成以下任务:1.根据成绩对学生进行排名,并输出前5名学生的学号和姓名;2.计算所有学生的平均成绩和方差,并绘制成绩的直方图;3.根据成绩数据,计算学生之间的相关系数矩阵,并绘制热力图;4.假设我们有一个学生的成绩缺失,根据其他学生的成绩数据,利用K近邻算法进行插补;5.在插补后的数据上,利用线性回归建立学生的成绩预测模型,并进行模型评估。

首先,我们需要读取成绩数据。

可以使用MATLAB中的readtable函数将Excel文件中的数据读入到MATLAB的表格结构中。

```matlabdata = readtable('scores.xlsx');```接下来,我们可以根据成绩对学生进行排名,并输出前5名学生的学号和姓名。

matlab数学建模100例

matlab数学建模100例

matlab数学建模100例Matlab是一种强大的数学建模工具,广泛应用于科学研究、工程设计和数据分析等领域。

在这篇文章中,我们将介绍100个使用Matlab进行数学建模的例子,帮助读者更好地理解和应用这个工具。

1. 线性回归模型:使用Matlab拟合一组数据点,得到最佳拟合直线。

2. 多项式拟合:使用Matlab拟合一组数据点,得到最佳拟合多项式。

3. 非线性回归模型:使用Matlab拟合一组数据点,得到最佳拟合曲线。

4. 插值模型:使用Matlab根据已知数据点,估计未知数据点的值。

5. 数值积分:使用Matlab计算函数的定积分。

6. 微分方程求解:使用Matlab求解常微分方程。

7. 矩阵运算:使用Matlab进行矩阵的加减乘除运算。

8. 线性规划:使用Matlab求解线性规划问题。

9. 非线性规划:使用Matlab求解非线性规划问题。

10. 整数规划:使用Matlab求解整数规划问题。

11. 图论问题:使用Matlab解决图论问题,如最短路径、最小生成树等。

12. 网络流问题:使用Matlab解决网络流问题,如最大流、最小费用流等。

13. 动态规划:使用Matlab解决动态规划问题。

14. 遗传算法:使用Matlab实现遗传算法,求解优化问题。

15. 神经网络:使用Matlab实现神经网络,进行模式识别和预测等任务。

16. 支持向量机:使用Matlab实现支持向量机,进行分类和回归等任务。

17. 聚类分析:使用Matlab进行聚类分析,将数据点分成不同的类别。

18. 主成分分析:使用Matlab进行主成分分析,降低数据的维度。

19. 时间序列分析:使用Matlab进行时间序列分析,预测未来的趋势。

20. 图像处理:使用Matlab对图像进行处理,如滤波、边缘检测等。

21. 信号处理:使用Matlab对信号进行处理,如滤波、频谱分析等。

22. 控制系统设计:使用Matlab设计控制系统,如PID控制器等。

matlab大作业实验报告

matlab大作业实验报告

matlab大作业学号姓名:年级:专业:1、产生一个10 10的随机矩阵A,要求A中元素均为整数,范围[1,50]。

1)求出A中所有元素之和S,平均值M。

2)找到所有小于平均值,且能被3整除的元素。

3)绘制出A的二维纵向柱状图,横坐标为[8 5 9 1 2 3 4 7 10 13],条形宽度为0.7的“stacked”样式。

代码如下:clc,clear all,close allA=round(rand(10,10)*50);disp(A)S=sum(sum(A));P=mean(mean(A));disp(S)disp(P)disp('所有小于平均数且能被三整除的元素')XPS=H((mod(H,3)==0)&(H<P));disp(XPS')subplot(1,1,1),bar(A,0.7,'stacked'),title('ygh');set(gca,'XTickLabel',{'8','5','9','1','2','3','4','7','10','13'})2、产生一个随机四位密码。

用户用“input”进行输入对比。

猜错提示“WRONG”,正确提示“RIGHT”同时退出程序,最多五次机会。

代码如下:clc,clear all,close alldisp('请输入密码')A=round(8999*rand(1,1))+1000;m=1;while m<=5N=input('请输入一个四位数:');if A==N;disp('RIGHT');breakelsedisp('WRONG');endm=m+1;enddisp('密码是:')disp(A)disp('输入结束')3、按照脚本文件的编程风格,用for和while循环嵌套输出如下的乘法口诀表。

如何使用MATLAB进行数据处理和模拟实验

如何使用MATLAB进行数据处理和模拟实验

如何使用MATLAB进行数据处理和模拟实验第一章:MATLAB简介MATLAB是一种强大的数值计算软件,广泛应用于科学与工程领域。

它具备丰富的数学和统计函数库,可以进行各种数据处理和模拟实验。

在本章中,我们将简要介绍MATLAB的基本特点和使用方法。

1.1 MATLAB的特点MATLAB具备以下特点:(1)矩阵计算:MATLAB内置了矩阵运算功能,使得数据处理更加简便和高效。

(2)图形显示:MATLAB可以生成高质量的二维和三维图形,方便数据可视化。

(3)函数丰富:MATLAB内置了大量的数学和统计函数,能够满足各种数值计算需求。

(4)易于学习:MATLAB的语法简单易懂,上手较容易,适合初学者。

1.2 MATLAB的安装和启动要使用MATLAB进行数据处理和模拟实验,首先需要安装MATLAB软件。

(1)从MathWorks官方网站下载MATLAB安装程序。

(2)运行安装程序,并按照提示进行安装。

(3)安装完成后,通过启动菜单或桌面图标启动MATLAB。

1.3 MATLAB的基本语法MATLAB的语法类似于其他编程语言,主要包括变量定义、函数调用、循环和条件判断等基本操作。

(1)变量定义:使用等号将数值或表达式赋给变量,例如:x = 2.5。

(2)函数调用:通过函数名和参数调用函数,例如:y =sin(x)。

(3)循环:使用for或while循环重复执行一段代码,例如:for i = 1:10。

(4)条件判断:使用if语句根据条件执行不同的代码块,例如:if x > 0。

第二章:数据处理数据处理是指从原始数据中提取、转换和整理信息的过程。

在MATLAB中,通过使用各种数据处理函数和工具箱可以实现对数据的各种操作。

2.1 数据导入和导出MATLAB支持多种数据格式的导入和导出,包括文本文件、Excel文件、图像文件等。

通过导入数据,可以将数据加载到MATLAB工作空间中进行处理。

(1)导入文本文件:使用readtable函数可以将文本文件中的数据读取为一个表格变量。

MATLAB实训报告

MATLAB实训报告

MATLAB实训报告摘要:本实训通过运用MATLAB软件进行数据分析和图像处理的实践,深入了解MATLAB的基本操作和功能,通过对实际问题进行实践,提高了数据分析和图像处理的能力。

本实训将主要内容分为两个部分,第一部分是数据分析,主要包括数据导入、数据处理、数据统计和数据可视化;第二部分是图像处理,主要包括图像读取、灰度转换、滤波处理和图像增强。

实训结果表明,通过MATLAB可以方便快捷地进行数据分析和图像处理,提高了数据分析和图像处理的效率和精度。

关键词:MATLAB,数据分析,图像处理,数据可视化,图像增强一、引言MATLAB是一款功能强大的科学计算和工程仿真软件,广泛应用于科学研究、工程设计和教学领域。

MATLAB提供了丰富的函数库和工具箱,可以用于数据处理、图像处理、信号处理、优化和统计分析等应用。

本实训旨在通过实践,掌握MATLAB的基本操作和功能,提高数据分析和图像处理的能力。

二、数据分析1.数据导入首先,我们需要将要分析的数据导入到MATLAB中。

MATLAB支持导入多种数据文件,如Excel、文本文件、MAT文件等。

在实训过程中,我们将导入一个Excel文件,其中包含了企业一段时间内的销售额数据。

通过使用MATLAB的“xlsread”函数,我们成功将Excel文件导入到MATLAB 中。

2.数据处理在数据导入之后,我们需要对数据进行进一步的处理。

MATLAB提供了丰富的数据处理函数,如数据排序、数据筛选、数据合并等。

在实训中,我们对导入的销售额数据进行了排序和筛选。

通过使用MATLAB的“sort”和“find”函数,我们可以方便地对数据进行排序和筛选。

3.数据统计在数据处理之后,我们可以进一步对数据进行统计分析。

MATLAB提供了丰富的统计分析函数,如均值、方差、相关系数等。

在实训中,我们对销售额数据进行了均值和方差的计算。

通过使用MATLAB的“mean”和“var”函数,我们可以方便地计算数据的均值和方差。

《Matlab基础与应用》实训指导书

《MATLAB基础与应用》实训指导书目录实训一认识MATLAB实训二 MATLAB数据操作实训三 MATLAB程序设计(一)实训四 MATLAB程序设计(二)实训五 MATLAB二维绘图实训六 MATLAB特殊二维绘图实训七 MATLAB三维绘图实训八 MATLAB符号函数的运算实训九 MATLAB符号微积分实训十 MATLAB符号方程求解实训十一 MATLAB数据分析与统计实训十二 MATLAB数值运算实训十三 MATLAB常微分方程的数值求解实训十四认识GUI实训十五图形用户界面设计实训十六 Simulink仿真实训十七 MATLAB综合实训(一)实训十八 MATLAB综合实训(二)实训一 认识MATLAB【实训目的】1.认识MATLAB 操作界面2.MATLAB 帮助系统的使用方法 3.掌握数据操作的有关知识 【主要软件设备】MATLAB 软件 【实训内容】1.认识MATLAB 操作界面2.MATLAB 帮助系统的使用方法 3.掌握数据操作的有关知识 【实训题目】1.通过帮助浏览器查找max 函数的用法。

2.通过帮助浏览器查找并比较ceil 、floor 、fix 、round 、rem 和sign 函数的用法。

3.gcd 函数用于求两个整数的最大公约数。

先用help 命令查看该函数的用法,然后利用该函数求15和35的最大公约数。

4.已知A=2.1,B=-4.5,C=6,D=3.5,E=-5,计算⎪⎪⎪⎪⎭⎫⎝⎛+D BC E A ππ22arctan 的值。

5.已知96.4=a ,11.8=b ,计算)ln(b a e ba +-的值。

【实训注意事项】1. 在所实训的机房,必须保持机房的整洁2. 在所实训机房,未经允许不要对计算机进行操作及其他操作3. 实训必须按照实训报告要求进行 【实训报告要求】1. 通过帮助浏览器查找函数的用法在实训报告上只填写所编程序2. 数据操作的有关知识的程序必须按照MATLAB 软件上所编程序书写,书写格式一定要正确实训二 MATLAB 数据操作【实训目的】1.掌握数据操作的有关知识 2.掌握矩阵的基本运算 3.掌握数据和文件操作 【主要软件设备】MATLAB 软件 【实训内容】1.矩阵的基本运算 2.数据和文件操作3.理解数据操作的有关知识 【实训题目】1.已知矩阵101241205A -⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦、010213112B -⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦,求2A+B 、23A B -、A*B 、B*A 、A.*B 、A\B 、 A/B 、A. \B 、A. /B 。

matlab实验案例 一个修理厂的模拟

实验案例 一个修理厂的模拟1 实验案例 (1)1.1 案例:一个修理厂的模拟 (1)1.1.1 问题描述 (1)1.1.2 模拟模型 (1)1.1.3 模拟程序 (2)1.1.4 模拟结果 (3)1 实验案例1.1 案例:一个修理厂的模拟1.1.1 问题描述某修理厂设有3个停车位置,其中一个位置供正在修理的汽车停放。

现以一天为一个时段,每天最多修好一辆车,每天到达修理站的汽车数有如下概率分布:到达数 0 1 2概率 0.6 0.2 0.2假定在一个时段内一辆汽车能够修好的概率为0.7,本时段内未能完成修理的汽车于正在等待修理的汽车一起进入下一时段。

试问:该停车厂有无必要增加停车位置,并说明理由。

1.1.2 模拟模型这种排队论方面的问题采用固定时间增量法模拟。

模拟以一天为一个时段,模拟纵时间最好在1000天以上。

模拟汽车到达数量,根据概率分布:产生在[0,1]上均匀分布的随机数t ,如果6.00<≥t t 且,则认为当天到达的车辆数为0辆;如果8.06.0<≥t t 且,则认为当天到达的车辆数为1辆,如果18.0<≥t t 且,则认为当天到达的车辆数为2辆。

模拟修理情况:由于一天最多修好一辆,而一个时段内一辆汽车修好的概率为0.7,则模拟每两车的修理情况,如果这些车所能修好数目大于等于1辆,则以当天修好1辆计。

1.1.3模拟程序本模拟程序编写了一个主函数queue,另外在函数queue中编写了2个子函数:getcome:模拟车辆到来情况,返回当天到来的车辆数目getrepaired:模拟修理情况,返回修好的车辆数目整个模拟程序如下:(2005/6/6新版本)function queue%2005-6-6%排队模拟主程序%排队问题模拟%numdays=input('请输入模拟天数:')numstay=0;%假定最初修理站还没有待修理的汽车LEN=6;%定义常量matfrequence=zeros(1,LEN);%第i个元素表示当天末还有i-1辆车在没有修好的时段频数leave_norepair=0;%存储来到,但没有停车位置而离开的车辆数for days=1:numdays%主循环,模拟numdays个时段temp= getcome;if numstay + temp>3 ,leave_norepair = leave_norepair + (numstay + temp - 3);end%numcome=numstay+getcome;%2004-10-10:这里有问题,受限制与停车位置数量numcome=min(3,numstay + temp);%%头一天还没有修好的车辆数+当天新到来的车辆数%numstay表示当天末还没有修理好的车辆数目numstay=max(0,numcome - getrepaired(numcome));% matfrequence(numstay+1)=matfrequence(numstay+1) + 1 ; endmatfrequenceprob=matfrequence/numdaysdisp(sprintf('平均每天夜里停放在修理站的车辆数=%4.2f',...sum(matfrequence/numdays.*[0:LEN-1])))%sprintf('=%.4f',sum(matfrequence/numdays.*[0:LEN-1])) disp(sprintf('平均每天因位置而未修理而离开修理站的车辆数=%4.2f',...leave_norepair/numdays))%sprintf('=%.4f',leave_norepair/numdays)leave_norepairfunction num=getcome%模拟车辆到来情况,返回当天到来的车辆数目t=rand;if t>=0 & t<0.6num= 0;%当天到来车俩数为0辆elseif t>=0.6 & t<0.8num=1;%当天到来车俩数为1辆elsenum=2;%当天到来车俩数为2辆endfunction r=getrepaired(num_cur)%模拟修理情况,返回修好的车辆数目%n为需要修理的车辆数目%r为n辆车修好了r辆%num_cur 当前(天)车辆数r=0;if num_cur<=0,%如果根本没有车,当然就没有修好车returnend%只考虑当前正在修的这辆车是否能够修好if rand<0.7,%(0,0.7) 认为修好,[0.7,1)认为没有修好r=1;end1.1.4模拟结果程序运行结果如下:请输入模拟天数: (100): 10000numdays =10000matfrequence =4230 2729 2375 666 0 0 prob =0.4230 0.2729 0.2375 0.0666 0 0平均每天夜里停放在修理站的车辆数=0.95平均每天因位置而未修理而离开修理站的车辆数=0.09leave_norepair =883模拟10000次的结果如下表所示:留夜的车辆数0 1 2 3频数4230 2729 2375 666频率0.4230 0.2729 0.2375 0.0666 最后得到平均每天夜里停放在修理站的车辆数约为0.95辆。

数学建模——理发店问题的蒙特卡洛仿真

数学建模课程设计题目:理发店问题学生:一、课程设计题目一个理发店有两位服务员A 和B,顾客们随机到达店内,其中60% 的顾客仅剪发,每位花5 分钟时间;40% 的顾客既剪发又洗发,每位花8 分钟时间。

设计算法,利用计算机对理发店的服务情况进行模拟。

并统计以下量:1. 最大队列长度2. 顾客平均等待3. 顾客总等待时间4. 平均队列长度二、设计思路利用蒙特卡洛模拟原理,利用计算机对以上排队问题进行模拟。

蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数估计量和统计量,进而研究其分布特征的方法。

具体的,当系统中各个单元的可靠性特征量已知,但系统的可靠性过于复杂,难以建立可靠性预计的精确数学模型或模型太复杂而不便应用时,可用随机模拟法近似计算出系统可靠性的预计值;随着模拟次数的增多,其预计精度也逐渐增高。

蒙特卡洛模拟方法的原理是当问题或对象本身具有概率特征时,可以用计算机模拟的方法产生抽样结果,根据抽样计算统计量或者参数的值;随着模拟次数的增多,可以通过对各次统计量或参数的估计值求平均的方法得到稳定结论。

对于本题,我们假定顾客到达时间间隔服从均值为3min的指数分布,模拟一定数量顾客情况下理发店的排队状况。

三、设计代码arrive_t=exprnd(3,10,1); %顾客到达时间q=zeros(10,1);t=zeros(10,1);t0=zeros(10,1);rannum=unifrnd(0,1,10,1);%产生均匀分布随机数customer=zeros(10,1);%设定顾客wait_time1=0;wait_time2=0;flag=0;%确定是否有人等待for i=1:10%分出第一种和第二种状况if(rannum(i,1)<=0.6)customer(i,1)=5;%只剪elsecustomer(i,1)=8;%剪和洗endendtf=0;t(1,1)=tf+arrive_t(1,1);%到达时间wait_time=0;%等待时间t0(1,1)=t(1,1)+customer(1,1);%服务时间q(1,1)=0;%队列长度t(2,1)=t(1,1)+arrive_t(2,1);t0(2,1)=t(2,1)+customer(2,1);t(3,1)=t(2,1)+arrive_t(3,1);if (t(3,1)>t0(2,1)||t(3,1)>t0(2,1))t0(3,1)=t(3,1)+customer(3,1);elsewait_time1=t0(1,1)-t(3,1);wait_time2=t0(2,1)-t(3,1);if (wait_time1>wait_time2)t0(3,1)=t(3,1)+wait_time2+customer(3,1);wait_time=wait_time2;elset0(3,1)=t(3,1)+wait_time1+customer(3,1);wait_time=wait_time1;endendi=4;while(i<=10)t(i,1)=t(i-1,1)+arrive_t(i,1);q(i,1)=q(i-1,1)+1;wait_time1=t0(i-1,1)-t(i,1);wait_time2=t0(i-2,1)-t(i,1);if (flag==0)if (wait_time1>0)&&(wait_time2>0)if wait_time1>wait_time2flag=1;t0(i,1)=t(i,1)+wait_time2+customer(i,1); wait_time=wait_time+wait_time2;elseflag=1;t0(i,1)=t(i,1)+wait_time1+customer(i,1); wait_time=wait_time+wait_time1;endi=i+1;elseif (wait_time1<=0)&&(wait_time2>0)t0(i,1)=t(i,1)+customer(i,1);q(i)=q(i)-1;flag=0;i=i+1;elseif (wait_time1>0)&&(wait_time2<=0)t0(i,1)=t(i,1)+customer(i,1);q(i)=q(i)-1;flag=0;i=i+1;elseif (wait_time1<=0)&&(wait_time2<=0)t0(i,1)=t(i,1)+customer(i,1);q(i)=q(i)-1;flag=0;i=i+1;endelsewait_time1=t0(i-2,1)-t(i-1,1)-arrive_t(i,1);wait_time2=t0(i-3,1)-t(i-1,1)-arrive_t(i,1);if wait_time1>wait_time2t0(i,1)=t(i,1)+wait_time2+customer(i,1);wait_time=wait_time+wait_time2;elset0(i,1)=t(i,1)+wait_time1+customer(i,1);wait_time=wait_time+wait_time1;endflag=0;endendave_t=t(10,1)./1;ave_q=wait_time./t(10,1);maxq=max(q);fprintf('最大队列长度%f\n',maxq);fprintf('总等待时间%f\n',wait_time);fprintf('平均等待时间%f\n',ave_t);fprintf('平均队列长度%f\n',ave_q);四、运行结果运行一次程序,可以得到以下结果(依据蒙特卡洛仿真原理,每次结果会在一定范围内波动)最大队列长度7.000000总等待时间 93.656144平均等待时间 19.465428平均队列长度 4.811410。

MATLAB智能算法30个案例分析

MATLAB 智能算法30个案例分析第1 章1、案例背景遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。

遗传算法的做法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算来交换种群中染色体的信息,最终生成符合优化目标的染色体。

在遗传算法中,染色体对应的是数据或数组,通常是由一维的串结构数据来表示,串上各个位置对应基因的取值。

基因组成的串就是染色体,或者叫基因型个体( Individuals) 。

一定数量的个体组成了群体(Population)。

群体中个体的数目称为群体大小(Population Size),也叫群体规模。

而各个个体对环境的适应程度叫做适应度( Fitness) 。

2、案例目录:1.1 理论基础1.1.1 遗传算法概述1. 编码2. 初始群体的生成3. 适应度评估4. 选择5. 交叉6. 变异1.1.2 设菲尔德遗传算法工具箱1. 工具箱简介2. 工具箱添加1.2 案例背景1.2.1 问题描述1. 简单一元函数优化2. 多元函数优化1.2.2 解决思路及步骤1.3 MATLAB程序实现1.3.1 工具箱结构1.3.2 遗传算法中常用函数1. 创建种群函数—crtbp2. 适应度计算函数—ranking3. 选择函数—select4. 交叉算子函数—recombin5. 变异算子函数—mut6. 选择函数—reins7. 实用函数—bs2rv8. 实用函数—rep1.3.3 遗传算法工具箱应用举例1. 简单一元函数优化2. 多元函数优化1.4 延伸阅读1.5 参考文献3、主程序:1. 简单一元函数优化:clcclear allclose all%% 画出函数图figure(1);hold on;lb=1;ub=2; %函数自变量范围【1,2】ezplot('sin(10*pi*X)/X',[lb,ub]); %画出函数曲线xlabel('自变量/X')ylabel('函数值/Y')%% 定义遗传算法参数NIND=40; %个体数目MAXGEN=20; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0.95; %代沟px=0.7; %交叉概率pm=0.01; %变异概率trace=zeros(2,MAXGEN); %寻优结果的初始值FieldD=[PRECI;lb;ub;1;0;1;1]; %区域描述器Chrom=crtbp(NIND,PRECI); %初始种群%% 优化gen=0; %代计数器X=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换ObjV=sin(10*pi*X)./X; %计算目标函数值while gen<MAXGENFitnV=ranking(ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异X=bs2rv(SelCh,FieldD); %子代个体的十进制转换ObjVSel=sin(10*pi*X)./X; %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群X=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=min(ObjV);trace(1,gen)=X(I); %记下每代的最优值trace(2,gen)=Y; %记下每代的最优值endplot(trace(1,:),trace(2,:),'bo'); %画出每代的最优点grid on;plot(X,ObjV,'b*'); %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(2,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestY=trace(2,end);bestX=trace(1,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])2. 多元函数优化clcclear allclose all%% 画出函数图figure(1);lbx=-2;ubx=2; %函数自变量x范围【-2,2】lby=-2;uby=2; %函数自变量y范围【-2,2】ezmesh('y*sin(2*pi*x)+x*cos(2*pi*y)',[lbx,ubx,lby,uby],50); %画出函数曲线hold on;%% 定义遗传算法参数NIND=40; %个体数目MAXGEN=50; %最大遗传代数PRECI=20; %变量的二进制位数GGAP=0.95; %代沟px=0.7; %交叉概率pm=0.01; %变异概率trace=zeros(3,MAXGEN); %寻优结果的初始值FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1]; %区域描述器Chrom=crtbp(NIND,PRECI*2); %初始种群%% 优化gen=0; %代计数器XY=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换X=XY(:,1);Y=XY(:,2);ObjV=Y.*sin(2*pi*X)+X.*cos(2*pi*Y); %计算目标函数值while gen<MAXGENFitnV=ranking(-ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,px); %重组SelCh=mut(SelCh,pm); %变异XY=bs2rv(SelCh,FieldD); %子代个体的十进制转换X=XY(:,1);Y=XY(:,2);ObjVSel=Y.*sin(2*pi*X)+X.*cos(2*pi*Y); %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群XY=bs2rv(Chrom,FieldD);gen=gen+1; %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=max(ObjV);trace(1:2,gen)=XY(I,:); %记下每代的最优值trace(3,gen)=Y; %记下每代的最优值endplot3(trace(1,:),trace(2,:),trace(3,:),'bo'); %画出每代的最优点grid on;plot3(XY(:,1),XY(:,2),ObjV,'bo'); %画出最后一代的种群hold off%% 画进化图figure(2);plot(1:MAXGEN,trace(3,:));grid onxlabel('遗传代数')ylabel('解的变化')title('进化过程')bestZ=trace(3,end);bestX=trace(1,end);bestY=trace(2,end);fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\nZ=',num2str(bestZ), '\n']) 第2 章基于遗传算法和非线性规划的函数寻优算法1.1案例背景1.1.1 非线性规划方法非线性规划是20世纪50年代才开始形成的一门新兴学科。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验案例理发店模拟1 实验案例 (1)1.1 案例:理发店系统研究 (1)1.1.1 问题分析 (2)1.1.2 模型假设 (2)1.1.3 变量说明 (2)1.1.4 模型建立 (2)1.1.5 系统模拟 (3)1.1.6 计算机模拟算法设计 (4)1.1.7 计算机模拟程序 (5)1.1.8 思考题 (8)1实验案例1.1 案例:理发店模拟例子:一个理发店有两位服务员A和B,顾客们随机到达店内,其中60%的顾客仅需剪发,每位花5分钟时间,另外40%顾客既要剪发又要洗发,每位用时8分钟。

理发店是个含有多种随机因素的系统,请对该系统进行模拟,并对其进行评判。

(准备怎么做)可供参考内容“排队论”,“系统模拟”,“离散系统模拟”,“事件调度法”1.1.1 问题分析理发店系统包含诸多随机因素,为了对其进行评判就是要研究其运行效率,从理发店自身利益来说,要看服务员工作负荷是否合理,是否需要增加员工等考虑。

从顾客角度讲,还要看顾客的等待时间,顾客的等待队长,如等待时间过长或者等待的人过多,则顾客会离开。

理发店系统是一个典型的排队系统,可以用排队论有关知识来研究。

1.1.2 模型假设1.60%的顾客只需剪发,40%的顾客既要剪发,又要洗发; 2.每个服务员剪发需要的时间均为5分钟,既剪发又洗发则花8分钟; 3.顾客的到达间隔时间服从指数分布; 4. 服务中服务员不休息。

1.1.3 变量说明u :剪发时间(单位:分钟),u=5m ;v: 既剪发又理发花的时间(单位:分钟),v=8m ;T : 顾客到达的间隔时间,是随机变量,服从参数为λ的指数分布,(单位:分钟)T 0:顾客到达的平均间隔时间(单位:秒),T 0=λ1;1.1.4 模型建立由于该系统包含诸多随机因素,很难给出解析的结果,因此可以借助计算机模拟对该系统进行模拟。

考虑一般理发店的工作模式,一般是上午9:00开始营业,晚上10:00左右结束,且一般是连续工作的,因此一般营业时间为13小时左右。

这里以每天运行12小时为例,进行模拟。

这里假定顾客到达的平均间隔时间T 0服从均值3分钟的指数分布,则有3小时到达人数约为603603=⨯人, 6小时到达人数约为1203606=⨯人, 10小时到达人数约为20036010=⨯人, 这里模拟顾客到达数为60人的情况。

(如何选择模拟的总人数或模拟总时间)1.1.5系统模拟根据系统模拟的一般方法,需要考虑系统的如下数据、参数。

1.状态(变量)(1)等待服务的顾客数;(2)A是否正在服务;(3)B是否正在服务;2.实体:两名服务员、顾客们3.事件:(1)一名新顾客的到达;(2)A开始服务;(3)A结束服务;(4)B开始服务;(5)B结束服务;4.活动:(1)顾客排队时间(2)顾客们到达的间隔时间(3)A的服务时间(4)B的服务时间;在系统模拟时,为了研究系统的整体情况,这里考虑顾客到达后不离开,且等待队长不限。

要考虑如果服务员均空闲时,顾客先选择谁服务?要考虑模拟的时间设置还有顾客数目。

模拟终止条件是根据顾客数目还是根据营业时间终止?1.1.6计算机模拟算法设计自行设计finished=0;初始化运行时钟while finished==0if 产生的顾客数不到规定数目时then,产生该顾客的有关数据;将顾客加入等待队列;else运行时钟继续;endif处理服务员的状态(包括工作状态,空闲时间);获得服务员的服务优先顺序;根据服务员优先顺序从等待队列中安排服务;endwhile有无参考算法?离散系统仿真算法:事件调度法1.1.7 计算机模拟程序顾客到达的间隔时间T 的计算机产生方法,利用T=rand T rand ln ln 10-=-λ,%理发店系统的模拟(案例分析之一)%关键词:面向事件的计算机模拟技术clear allcurclock=0;%当前时刻,动态变化totalcustomer=0;%总共服务的顾客数numsrv=2;srvstatus=zeros(numsrv,5);%服务员有关数据%srvstatus 第1列:服务状态(0空闲,1正在服务);第2列:当前服务顾客编号;% 第3列:当前服务结束时刻;第4列:服务员空闲时间;第5列:服务的顾客总数endtime =0;%结束时间waiting=[];%等待队列数据%waiting 第1列:顾客编号;第2列:顾客到达时刻;第3列:顾客开始接受服务时刻;% 第4列:接受服务时间;第5列:顾客结束服务时刻;第6列:间隔时间 cur=zeros(1,6);%当前产生顾客的数据,对应关系同waitingavgwaitlen=[];%平均等待队长avgwaittime =[];% 平均等待时间ujiange=5;%平均间隔时间finished=0;numsimucustumer=yesinput('输入等待模拟的顾客数:',10,[101000]);while finished==0,if totalcustomer < numsimucustumer%产生一个顾客的到达及其有关性质的数据totalcustomer = totalcustomer+1;jiange= -log(rand)*ujiange;%与上一个顾客的到达的间隔时间curclock = curclock + jiange;cur(1)= totalcustomer ;% 第1列:顾客编号cur(2) = curclock;%第2列:顾客到达时刻cur(6) = jiange; 第6列:间隔时间%下面产生接受服务时间(可改进模型)if rand<0.6, %产生顾客有关性质:这里是产生接受服务时间cur(4) = 5;elsecur(4) = 8;end%放入等待队列if isempty(waiting),waiting= cur;else[m,n]=size(waiting);waiting(m+1,:)= cur;endelsecurclock = curclock + (-log(rand)*ujiange);end%if totalcustomer<%分配等待队列(看是否有服务员空闲,如果有则分配;否则继续执行)%处理服务员的服务状态for i=1:numsrv,if srvstatus(i,1)==1 & srvstatus(i,3) <= curclock,srvstatus(i,1)=0;%设置为空闲状态srvstatus(i,4)= curclock-srvstatus(i,3);%目前已经空闲的时间elseif srvstatus(i,1)==1 & srvstatus(i,3) > curclock, srvstatus(i,4)= 0;%没有休息(正在忙)elsesrvstatus(i,4)= curclock-srvstatus(i,3);%目前已经空闲的时间endend%处理服务员服务的先后顺序(依据空闲时间)(精细处理)tmp=srvstatus(:,4);for i=1:numsrv,[value,id]=max(tmp);b(i)=id;tmp(id)=0;%已经排序了end%此时等待队列必然不为空for j=1:numsrv,i=b(j);%确定服务员的序号if(srvstatus(i,1)==0)%找一个顾客开始服务,同时计算该顾客什么时候接受服务,结束服务;[m,n]=size(waiting);if m==0,break;endif waiting(1,5)==0,%还没有开始接受服务waiting(1,3)= curclock;waiting(1,5)= waiting(1,3)+waiting(1,4);%结束时刻srvstatus(i,1)=1;%设置为忙状态srvstatus(i,2)=waiting(1,1);%顾客编号srvstatus(i,3)= waiting(1,5);%结束时刻srvstatus(i,5)=srvstatus(i,5)+1;%又服务了一个顾客%计算等待时间avgwaittime(end+1) = waiting(1,3)-waiting(1,2); disp(sprintf('间隔时间(%8.2f) 顾客编号:%5d 接受服务员(%4d)服务(到达时刻%10.2f)',waiting(1,6),waiting(1,1),i,waiting(1,2)))endtime=max(endtime,waiting(1,5))waiting(1,:)=[];%从等待队列中离开endend%ifend%for[m,n]=size(waiting);%计算队长(这里的计算式子可以参考排队论有关术语进行确定)if totalcustomer < numsimucustumeravgwaitlen(end+1)=m;endif sum(srvstatus(:,5))>=numsimucustumer,%队列为空,结束finished=1;endend%whiledisp('服务顾客数:')disp(srvstatus(:,5)')disp('平均队长');disp(mean(avgwaitlen));disp('运行时间(分钟,小时)');disp(sprintf('%8.f%8.f',curclock,curclock/60));disp('平均等待时间(分钟)');disp(mean(avgwaittime ));disp('结束时间(分钟)');disp(endtime );figurehist(avgwaitlen)title('平均队长')figurehist(avgwaittime)title('平均等待时间');1.1.8思考题请运行模拟程序,并分析运行结果。

相关文档
最新文档