目录
0 引言
青蒿素优化算法(AlgorithmArtemisinin optimization, AO)是学者Yuan等人研究一种新型的元启发式算法,其模拟高剂量青蒿素控制疟疾症状并迅速减少寄生虫数量的过程,通过青蒿素分子结构及其药理作用机制启发的群体智能优化算法,在“攻击-扩散-平衡”机制中实现全局最优解。
1 数学模型
AO的数学模型构建是以青蒿素高剂量全面消除阶段、局部消除阶段和巩固阶段进行模型构建,具体如下:
1)初始化阶段:患者通过口服或注射方式将青蒿素类药物引入体内。受这一现实启发,本文将药物微粒概念化为算法的搜索代理,这些搜索代理的整体集合构成算法的解集。公式1对青蒿素初始化种群“
式中T和B表示解空间的边界,R表示一组随机数序列,其取值范围为[0,1]。
2)全面消除淘汰阶段:在疟疾治疗的初始阶段,患者会接受较大剂量的药物治疗以迅速控制病情发展。青蒿素被吸收后,会随着血液输送至人体各部位而扩散。下式2为模拟药物扩散过程。
式中中,a_(i,j)^(t+1)和a_(i,j)^t分别表示更新前后的搜索代理,best为当前最优。同时,青蒿素类药物在人体内的扩散遵循药代动力学原理。该策略考虑到药物浓度会随着时间的推移而降低这一事实。式(2)中,c表示药物在人体内浓度的衰减指数。青蒿素药物浓度的衰减可以用单室模型描述,如下所示:
式中变量C表示药物浓度,k表示速率常数;C(t)表示t时刻的药物浓度。在该模型中,随着时间的推移,药物浓度C(t)呈指数衰减。因此,青蒿素药物浓度的指数c可由式(5)计算
在该策略中,考虑到患者病情严重程度存在差异以及生理因素各不相同,这导致用药剂量和治疗时长各不相同,患者可能在此相位停留不同时长。为体现这种固有变异性,引入概率系数K表示,如公式(6)所示:
K作为概率系数,通过整合算法的评估进度来模拟客观场景——患者在此阶段根据个体状况会表现出差异化的反应时长。采用下式最终进行全面消除相位策略:
式中r1是一个范围为[0,1]的随机数。
2)局部清除阶段:虽然早期治疗通常能迅速缓解症状,但仍有少量疟原虫可能在体内持续存在,特别是在严重感染病例中。在此阶段,患者继续接受较低剂量的青蒿素及其衍生物治疗,以确保完全清除疟原虫,同时最大限度降低人体出现不良反应的风险。故采用下式青蒿素的运动过程进行局部清除阶段策略。
式中,Fit_norm (i)表示归一化的适应度值,将适应度值转化为概率分布,作为个体间的相对权重。d表示系数,取[0.1,0.6]之间的随机值。这一策略模拟了少量青蒿素清除人体内潜在疟疾寄生虫的过程。
3)巩固阶段:患病消除进入后期,患者必须严格遵循治疗方案才有机会彻底治愈疟疾。本部分呈现了巩固治疗后的情况,考虑到意外状况的可能性并模拟这种特殊情境。该策略假设人体内仍存在非活动状态的寄生虫形态。部分患者仍可能遭遇疟疾再次发作。该策略的数学模型由公式(11)表示:
式中best_(i,j)表示第j维当前最优解的子向量。式(11)表示由于进入休眠阶段而未被消灭的疟原虫。
2 优化方式
前篇对BP神经网络原理讲解,从BP神经网络matlab代码运算过程中,可以看到BP神经网络收权值和阈值控制。因此结合上述AO原理介绍,可以将BP神经网络的权值和阈值向量作为青蒿素颗粒的种群向量位置,每个种群位置对应BP神经网络的预测值,以此进行上述运动描述,加强BP神经网络的泛化能力。
3 MATLAB代码
3.1 伪代码
3.2 主函数AO代码
% 初始化参数
FEs=0;
%% 初始化种群
pop=initialization(N,dim,ub,lb);
%适应度
for i=1:N
Fitness(i)=SYD(pop(i,:),net);
net.trainParam.showWindow = false;
FEs=FEs+1;
end
[fmin,x]=min(Fitness);
New_pop=zeros(N,dim);
Fitnorm=zeros(1,N);
Convergence_curve=[];
%最优解
best=pop(x,:);
bestfitness=fmin;
%% 主循环函数
while FEs<=MaxFEs
K= 1-((FEs)^(1/6)/(MaxFEs)^(1/6));
E =1*exp(-4*(FEs/MaxFEs));
%
for i=1: N
Fitnorm(i)= (Fitness(i)-min(Fitness))/(max(Fitness)-min(Fitness));
for j=1:dim
if rand<K
if rand<0.5
New_pop(i,j) = pop(i,j)+E.*pop(i,j)*(-1)^FEs;
else
New_pop(i,j) = pop(i,j)+E.*best(j)*(-1)^FEs;
end
else
New_pop(i,j)=pop(i,j);
end
if rand<Fitnorm(i)
A=randperm(N);
beta=(rand/2)+0.1;
New_pop(i,j)=pop(A(3),j)+beta.*(pop(A(1),j)-pop(A(2),j));
end
end
New_pop(i,:)=Mutation(New_pop(i,:),pop(i,:),best,dim);
New_pop(i,:)=Transborder_reset(New_pop(i,:),ub,lb,dim,best);
tFitness=SYD(New_pop(i,:),net);
net.trainParam.showWindow = false;
FEs=FEs+1;
if tFitness<Fitness(i)
pop(i,:)= New_pop(i,:);
Fitness(i)=tFitness;
end
end
[fmin,x]=min(Fitness);
if fmin<bestfitness
best=pop(x,:);
bestfitness=fmin;
end
Convergence_curve=bestfitness ;
Leader_pos=best;
end
3.3 AO-BP的MATLAB代码
AO优化BP神经网络的单输出、多输出、时间序列和分类的MATLAB代码如下:
()