current_time=min([arrive_time,leave_time]);
tt=[tt,current_time];%记录时间序列
ifcurrent_time==arrive_time%顾客到达子过程
arrive_time=arrive_time+exprnd(mu1);%刷新顾客到达事件
a_count=a_count+1;%累加到达顾客数
ifL
L=L+1;%更新队长
b_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);%离开事件表排序
elseifL
L=L+1;%更新队长
b_count=b_count+1;%累加服务顾客数
c=[c,current_time];%记录顾客到达时间序列
else%顾客损失
e_count=e_count+1;%累加损失顾客数
end
else%顾客离开子过程
leave_time
(1)=[];%从事件表中抹去顾客离开事件
e=[e,current_time];%记录顾客离开时间序列
ifL>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
%----------------------模拟结果--------------------------------------------
length(e);length(c);
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;%平均队长
fprintf('到达顾客数:
%d\n',a_count)%到达顾客数
fprintf('服务顾客数:
%d\n',b_count)%服务顾客数
fprintf('损失顾客数:
%d\n',e_count)%损失顾客数
out=[Wq,Wb,Ls];
end
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
3.2连续系统模拟
连续系统是指系统的状态变量随时间连续变化的系统,因为系统状态按照
一定规律随时间连续地变化,通常用微分方程模型、代数方程模型、状态空间
模型、传递函数模型等来描述,但模拟推算过程仍需要将连续系统模型转变为
能在计算机上运行的离散模型。
3.2.1捕食者与被捕食者模型(Volterra模型)模拟分析与设计
意大利生物学家D’Ancona曾致力于鱼类种群相互制约关系的研究,在研究
过程中他无意中发现了第一次世界大战期间地中海各港口捕获的几种鱼类占捕
获总量百分比的资料,从这些资料中他发现各种食肉鱼,如鲨鱼等(称之为捕
食者)占总渔获量的百分比,在1914~1923年期间,意大利阜姆港收购的捕食
者所占的比例有明显的增加,数据见表1。
他知道,捕获的各种鱼的比例基本上
代表了地中海渔场中各种鱼类的比例。
战争中捕获量大幅度下降,当然使渔场
中食用鱼(称之为食饵)增加,以此为生的鲨鱼也随之增加。
但是捕获量的下
降为什么会使鲨鱼的比例增加,即对捕食者而不是对食饵有利呢?
表1鱼类捕获量中鲨鱼所占百分比
年代19141915191619171918
百分比11.921.422.121.236.4
年代19191920192119221923
百分比27.316.015.914.819.7
他无法解释这个现象,于是求助于著名的意大利数学家V.Volterra,希望建立一个食饵—捕食者系统的数学模型,定量地回答这个问题。
基本假设:
(1)捕食者的存在使食饵的增长率降低,假设降低的程度与捕食者数量成
正比。
(2)捕食者由于食饵为它提供食物的作用使其死亡率降低,或使之增长,
假设这个作用与食饵数量成正比。
试对该捕食者与被捕食者模型(Volterra模型)进行模拟并分析。
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
一、系统分析与建模
设下列变量表示:
x1(t)为食饵在t时刻的数量,x2(t)为捕食者在t时刻的数量;
r1为食饵独立生存时的增长率,r2为捕食者独立存在时的死亡率;
λ1为捕食者掠取食饵的能力,λ2为食饵对捕食者的供养能力。
(1)因为大海中鱼类的资源丰富,可以假设如果食饵独立生存则食饵将以
增长率r1按指数规律增长,即有:
;但捕食者的存在使食饵的增长率
降低,降低的程度与捕食者数量成正比,于是x1(t)满足方程:
(2)同理,捕食者离开食饵无法生存,设它独自存在时死亡率r2,即有:
;但食饵为捕食者提供食物的作用使其死亡率降低或增长,设该作
用的程度与食饵数量成正比,于是x2(t)满足方程:
(3)不考虑人工捕获的捕食者与被捕食者数学模型为:
该模型反映了在没有人工捕获的自然环境中,食饵与捕食者之间的制约关系,
没有考虑食饵和捕食者自身的阻滞作用。
二、系统模拟
设食饵和捕食者初始数量分别为:
x1(0)=25,x2(0)=2;
r1=1,λ1=0.1;
r2=0.5,λ2=0.02。
则模型为:
三、系统模拟源程序
(1)建立m文件shier.m
functiondx=shier(t,x)
dx=zeros(2,1);
dx
(1)=x
(1)*(1-0.1*x
(2));
dx
(2)=x
(2)*(-0.5+0.02*x
(1));
(2)建立主程序文件shark.m
x0=0;xf=15;
[t,x]=ode45(‘shier’,[x0,xf],[25,2]);
plot(t,x(;,1),‘b-’,t,x(:
2),’r*’)
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
3.2.2网民数量扩散模型(BASS模型)模拟分析与设计
技术扩散是指创新在一定时间内,通过某种渠道,在社会系统成员中进行
传播的过程。
在过去的几十年中,社会学家、地理学家、经济学家和管理学家
们对社会系统中的扩散现象,如新闻、谣言和创新传播等诸多方面进行了深入
研究,并引入微分方程用于这些扩散问题的建模,其中最有影响的是FrankBass
提出的预测消费品扩散的模型,即Bass模型。
在该模型中,假设新产品的潜在
采用者会受到2种传播方式的影响:
(1)大众媒体,此类的采用者称为创新者。
(2)口碑,此类的采用者称为模仿者。
现以网民数量扩散为研究对象,用n(t)表示t时刻的网民数量,M表示总体市场容量,那么潜在网民数量为M-n(t)。
假定平均每个网民单位时间内带来的新网民数量与潜在网民数量呈现线性关系。
假定潜在网民的转化率与当前潜在网民的数量呈线性关系。
那么网民数量增加的速率可以用如下方程式表示:
试对上述网民数量扩散问题进行建模,并根据给定的初始值和模拟模型,按照一定的模拟步长,依次模拟模拟时钟上的系统状态。
3.3多智能体系统模拟
对于结构简单系统,可用数学建模方法来刻画。
对于结构复杂系统,很难
用统一的公式来描述。
而简单的智能体间的交互作用可以产生复杂的行为,每
一个智能体是对复杂系统中某个单独个体的简单模拟。
个体之间存在动态、自
主的交互行为,通过交互、合作与协调机制,多个功能单一的智能体能实现一
系列复杂现象。
对于异构、分散的复杂系统,基于多智能体的模拟是最适当的
建模方式,其建模元素具有更高的主动性、自治性和智能性。
多智能体模拟能实现更加复杂、传统方法无法完成的模拟建模分析,充分利用计算机系统的并行计算和分布式计算的能力,主要基于2方面进行模拟:
(1)对人类的学习、合作、协商等行为进行模拟。
(2)对自然、生态中的演化行为的仿真等。
3.3.1萤火虫优化系统模拟
自然界中约有2000多种萤火虫,多数种类的萤火虫会发出短促、有节奏的
荧光,不同种类的萤火虫发光目的不同,其真实原因仍在探讨当中。
一般认为,
萤火虫成虫发光的生物学意义是利用物种特有的闪光信号来定位并吸引异性,
借此完成求偶交配及繁殖的使命;少数萤火虫利用闪光信号进行捕食,还有一
种作用是作为警戒信号,即当萤火虫受到刺激时会发出亮光。
萤火虫优化系统
就是模拟自然界中萤火虫的发光行为构造出的随机优化算法,但在算法中舍弃
了萤火虫发光的一些生物学意义,只利用其发光特性来根据其搜索区域寻找伙
伴,并向邻域结构内位置较优的萤火虫移动,从而实现位置进化。
仿生原理:
用搜索空间中的点模拟萤火虫个体,将搜索和优化过程模拟成萤火虫个体
的吸引和移动过程,将求解问题的目标函数度量成个体所处位置的优劣,将个
体的优胜劣汰过程类比为搜索和优化过程中用好的可行解取代较差可行解的迭
代过程。
数学模型:
(1)萤火虫的相对荧光亮度为:
(2)萤火虫的吸引度为:
(3)萤火虫i被吸引向萤火虫j移动的位置更新根据下式:
算法实现优化的过程是:
先将萤火虫群体随机散布在解空间,每一只萤火
虫因为所处位置不同发出的荧光亮度也不同,通过比较(根据式
(1)),亮度高的萤火虫可以吸引亮度低的萤火虫向自己移动,移动的距离主要取决于吸引度的
大小(根据式
(2)),为了加大搜索区域,避免过早陷入局部最优,在位置更新过程中增加了扰动项
,根据式(3)来计算更新后的位置。
这样通过多次移动后,所有个体都将聚集在亮度最高的萤火虫位置上,从而实现寻优。
试对上述萤火虫优化系统进行编程模拟,并对给出的复杂函数进行优化求解。
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%
%初始化算法基本参数
clearr;clc;formatlong
D=2;%D是待优化函数的维数;
numFireflies=20;%萤火虫的数目;
MaxT=300;%最大迭代次数;
alpha=0.02;%扰动因子;
gamma=1;%光强吸收系数;
update=0.5;%萤火虫更新率
lb=-2;%设置下限
ub=2;%设置上限
%-------------------------------------------------------------------------------------
%Step1:
Generatinginitiallocationsofnfireflies
fori=1:
numFireflies
forj=1:
D
x(i,j)=lb+rand*(ub-lb);%随机初始化位置;
end
end
LightIntensity=zeros(1,numFireflies);%存放目标函数值,初始值置为0
result=zeros(1,MaxT);%result矩阵存放每一轮迭代找到的最优值,初
始值置为0;
%------------------------------------------------------------------------------
%Step2:
迭代开始
forg=1:
MaxT
fori=1:
numFireflies
LightIntensity(i)=fitness(x(i,:
),D);%计算目标函数值,存放在
LightIntensity矩阵;
end
[result(g),indexBest]=min(LightIntensity);
y=x;li=LightIntensity;
fori=1:
numFireflies
forj=1:
i%numFireflies
r=norm(x(i,:
)-y(j,:
));%计算距离
if(li(j)beta0=1;%萤火虫的最大吸引度(r=0处)