信息获取优化器(Information acquisition optimizer, IAO)是一种基于人类信息获取行为启发的元启发式优化算法。该算法由信息收集、信息过滤与评估、信息分析与组织三个关键策略组成,以适应不同的优化需求。IAO算法在收敛速度、求解精度和稳定性方面具有较强的竞争力。此外,Wilcoxon符号秩和检验和Friedman均值秩和检验的结果有力地验证了IAO的有效性和可靠性。
![e321808996f437e4e7fe94d631c5fb59.png](https://img-blog.csdnimg.cn/img_convert/e321808996f437e4e7fe94d631c5fb59.png)
该成果于2024年发表在计算机领域3区SCI期刊“The Journal of Supercomputing”上。IAO方法具有出色的迭代优化性能和鲁棒性。
![abac83b379c3f3ce65f887eb5092ef78.png](https://img-blog.csdnimg.cn/img_convert/abac83b379c3f3ce65f887eb5092ef78.png)
1、算法原理
受启发式算法原理的启发,提出了一个三阶段的算法优化过程:信息收集阶段、信息过滤和评估阶段、信息分析和组织阶段。在信息收集阶段,模拟人类从各种来源收集信息的过程,以构建初始解集。在信息过滤和评估阶段,根据预定义的标准对信息进行评估,消除冗余信息,保留具有潜力的信息。在分析和组织信息的阶段中,可转换的信息被转换成可用的信息,从而识别最优或接近最优的解决方案。
(1)信息采集
信息收集是获得有用信息的关键步骤,为了确保获得更全面的初始信息,个人采用各种方法从不同来源收集信息,从而形成初始信息系统。该过程可表示如下:
其中iter表示当前迭代的次数,iter迭代时i个信息体的状态xiter i,xiter+1 i是初始信息收集后更新的信息体,iter迭代时随机生成的两个信息体xr1 i、xr2 i,并且xiter是[0,1]之间的随机数,用于表征信息收集过程中的影响因素。
(2)信息过滤和评估
在信息过载的当代背景下,信息过滤和评估过程已成为个人快速识别相关和有用信息的关键机制,它不仅有效地消除了不准确和误导性信息,而且还大大提高了所获得信息的整体质量。如图所示。
![a93119bbd97c929328f2aea2404b7743.png](https://img-blog.csdnimg.cn/img_convert/a93119bbd97c929328f2aea2404b7743.png)
该过程启发了IAO算法的探索阶段的数学表示,其可以表示为:
其中rand为[0,1]中生成的随机数,Δ为主观因素对信息进行过滤和评估时产生的误差,由下式定义:
其中Ξ为主观影响因子,作为个体主体性的量化指标,发挥着关键作用。它反映了个体的偏好、经验、情绪和先入为主的观念会对信息做出过于乐观或悲观的判断,从而影响信息的最终获取和应用。此外,由于认知限制和情境影响,Ξ也意味着信息处理中的潜在错误,这些错误可能偶尔发生,也可能是由确认偏见或群体思维等系统性偏见造成的。与Ξ相关的随机性进一步说明了过滤和评价信息所固有的不确定性,这意味着即使提供相同的信息,由于主观状态的变化,不同的个人或同一个人在不同时间点的评价也可能有所不同。Ξ的值由下式计算:
其中v,β和γ是在[0,1]之间生成的随机数。
Γ被定义为可靠性因子,其数学模型的灵感来自于人类动态调整信息过滤和评估过程的能力,随着该处理的进展以及信息从复杂到简单的变化,该数学模型相应地简化。因此,Γ表征了算法通过根据不同迭代阶段的信息质量进行自我调整来优化其行为的能力。这种设计增强了算法的适应性和灵活性,显著提高了方程计算结果的可靠性和有效性,由下式计算得出
其中Max_iter为最大迭代次数,Γ的数学模型由正弦函数部分、对数函数部分和信息质量因子Φ三个主要部分组成。正弦函数的指数处理提供了动态调整机制,初始阶段变化明显,有助于快速调整筛选策略;后期变化率变慢,有利于算法的稳定性和算法的微调。对数部分保证了迭代的稳定性,并随着迭代次数的增加对影响进行平滑处理,模拟了信息处理过程中从粗筛选到精筛选的过渡。信息质量因子Φ保证了信息质量是影响Γ的重要因素,避免了算法过度优化迭代动态而忽略了信息质量的基本要求,其值由下式计算:
其中δ为[0,1]之间生成的随机数。Φ可以看作是迭代次数iter的函数,它通过调整余弦函数的相位和幅度来影响信息获取的质量。该质量因子Φ在迭代过程中通过影响可靠性因子Γ进一步影响个体i的特征值xiter+1 i。这样,IAO算法可以模拟个体在面对不同信息时的自适应调整行为,从而实现最优的信息获取。
(3)信息分析与组织
信息分析和组织的目的是从过滤后的信息中识别出已有的有用信息,并将前一阶段识别出的可转换信息转化为有用信息,从而提高获得最优信息体的概率。该过程如下图所示。
![0c186412d952312a259f62a11fd0949c.png](https://img-blog.csdnimg.cn/img_convert/0c186412d952312a259f62a11fd0949c.png)
对应IAO算法的开发阶段,其数学模型表示为:
式中,xbest i表示前一次迭代过程中生成的最佳信息体, 表示前一次迭代过程中生成的最佳信息体的平均值, ,w表示[0,1]之间生成的随机数,Λ表示分析和组织信息的控制因素,由下式定义:
在信息组织和分析的过程中,个体可以根据信息的质量和可靠性动态优化分析和组织的深度和广度,从而显著提高最终信息的准确性和有效性。这种适应性调节机制体现在Λ;通过动态调整Γ(可靠性因子)的值,Λ可以相应地调整信息处理的严谨性和细节性。当Γ值较高时,说明信息可靠性较强,则Λ值相应增大,使得算法能够进行更深入的信息挖掘和更广泛的信息整合。反之,当Γ值较低时,说明信息可靠性较低,则Λ值也会降低,说明需要更加谨慎地进行信息分析,避免依赖低质量的数据。
在一轮迭代之后,将创建一个新的种群。在下一次迭代中,新的信息主体将完全取代旧的信息主体。本文提出的算法流程图如下图所示。
![89549af58ed6516ce72c85b85e6ec2da.png](https://img-blog.csdnimg.cn/img_convert/89549af58ed6516ce72c85b85e6ec2da.png)
IAO对应的伪代码过程如下图所示
![200262b5031fabdbab0fe2aed7a76ff3.png](https://img-blog.csdnimg.cn/img_convert/200262b5031fabdbab0fe2aed7a76ff3.png)
2、结果展示
3、MATLAB核心代码
%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 信息获取优化器(Information acquisition optimizer, IAO)
function [Best_Finfo,Best_Pinfo,Historical_Info]=IAO(N,Max_iter,LB,UB,Dim,fobj)
% Initialize
Info=initialization(N,Dim,UB,LB); % solution
New_Info=Info;
Ffun=zeros(1,size(Info,1)); % fitness value
Ffun_new=zeros(1,size(New_Info,1));
Best_Pinfo=zeros(1,Dim); % best solution position
Best_Finfo=inf; % best fitness value
Historical_Info = zeros(1,Max_iter);
% Main Loop
iter=1;
while iter<Max_iter+1
% Bounds check and look for the best information
for i=1:size(Info,1)
F_UB=Info(i,:)>UB;
F_LB=Info(i,:)<LB;
Info(i,:)=(Info(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
Ffun(1,i)=fobj(Info(i,:)); % Calculate the fitness value
if Ffun(1,i)<Best_Finfo
Best_Finfo=Ffun(1,i);
Best_Pinfo=Info(i,:);
end
end
% Produce candidate populatioan
for i=1:size(Info,1)
% Select two search agents at random
rn=size(Info,1);
r1=randi([1,rn]);
r2=randi([1,rn]);
theta=unifrnd(-1,+1); %random number between -1 and 1
New_Info(i,:)=Info(i,:)+(Info(r1,:)-Info(r2,:))*theta; % By Eq.(1)
% Bounds check and look for the best information so far
F_UB=New_Info(i,:)>UB;
F_LB=New_Info(i,:)<LB;
New_Info(i,:)=(New_Info(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
Ffun_new(1,i)=fobj(New_Info(i,:));
if Ffun_new(1,i)<Ffun(1,i)
Info(i,:)=New_Info(i,:);
Ffun(1,i)=Ffun_new(1,i);
end
if Ffun(1,i)<Best_Finfo
Best_Finfo=Ffun(1,i);
Best_Pinfo=Info(i,:);
end
end
% Filter and evaluate information
for i=1:size(Info,1)
r3=randi([1,rn]);
r4=randi([1,rn]);
while r3==r4
r4 = randi([1,rn]);
end
xi=2.*(mod(3.468*rand()*(1-rand()*cos(acos(rand()*10^4))),1));
phi=(cos(2.*rand)+1).*(1-(iter./Max_iter));
gamma=sin((pi/4).^(iter./Max_iter))+phi+(log(iter./Max_iter))./8;
delta=cos(pi/2.*sqrt(abs(gamma)))./xi;
lambda=2.^(sqrt(abs(gamma))-2);
% Update position
if rand()<0.5
% By Eq.(2)
New_Info(i,:)=Info(i,:)-delta.*rand.*(Info(r3,:)-Info(i,:));
F_UB=New_Info(i,:)>UB;
F_LB=New_Info(i,:)<LB;
New_Info(i,:)=(New_Info(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
Ffun_new(1,i)=fobj(New_Info(i,:));
if Ffun_new(1,i)<Ffun(1,i)
Info(i,:)=New_Info(i,:);
Ffun(1,i)=Ffun_new(1,i);
end
if Ffun(1,i)<Best_Finfo
Best_Finfo=Ffun(1,i);
Best_Pinfo=Info(i,:);
end
else
New_Info(i,:)=Info(i,:)+delta.*rand.*(Info(r4,:)-Info(i,:));
F_UB=New_Info(i,:)>UB;
F_LB=New_Info(i,:)<LB;
New_Info(i,:)=(New_Info(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
Ffun_new(1,i)=fobj(New_Info(i,:));
if Ffun_new(1,i)<Ffun(1,i)
Info(i,:)=New_Info(i,:);
Ffun(1,i)=Ffun_new(1,i);
end
if Ffun(1,i)<Best_Finfo
Best_Finfo=Ffun(1,i);
Best_Pinfo=Info(i,:);
end
end
% Analyze and organize information
% By Eq. (7)
if phi>=0.5
New_Info(i,:)=Best_Pinfo(1,:).*cos((pi/2).*(sqrt(lambda.^(1/3))))-rand*( mean(Best_Pinfo(1,:))-Info(i,:));
F_UB=New_Info(i,:)>UB;
F_LB=New_Info(i,:)<LB;
New_Info(i,:)=(New_Info(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
Ffun_new(1,i)=fobj(New_Info(i,:)); % Calculate the fitness value
if Ffun_new(1,i)<Ffun(1,i)
Info(i,:)=New_Info(i,:);
Ffun(1,i)=Ffun_new(1,i);
end
if Ffun(1,i)<Best_Finfo
Best_Finfo=Ffun(1,i);
Best_Pinfo=Info(i,:);
end
else
New_Info(i,:)=Best_Pinfo(1,:).*cos((pi/2).*(sqrt(lambda.^(1/3))))- (rand*rand*(Best_Pinfo(1,:))-(2*rand-1)*Info(i,:)).*0.8;
F_UB=New_Info(i,:)>UB;
F_LB=New_Info(i,:)<LB;
New_Info(i,:)=(New_Info(i,:).*(~(F_UB+F_LB)))+UB.*F_UB+LB.*F_LB;
Ffun_new(1,i)=fobj(New_Info(i,:)); % Calculate the fitness value
if Ffun_new(1,i)<Ffun(1,i)
Info(i,:)=New_Info(i,:);
Ffun(1,i)=Ffun_new(1,i);
end
if Ffun(1,i)<Best_Finfo
Best_Finfo=Ffun(1,i);
Best_Pinfo=Info(i,:);
end
end
end
Historical_Info(iter)=Best_Finfo;
iter=iter+1;
end
end
function Info=initialization(N,Dim,UB,LB)
B_no= size(UB,2); % numnber of boundaries
if B_no==1
Info=rand(N,Dim).*(UB-LB)+LB;
end
% If each variable has a different lb and ub
if B_no>1
for i=1:Dim
Ub_i=UB(i);
Lb_i=LB(i);
Info(:,i)=rand(N,1).*(Ub_i-Lb_i)+Lb_i;
end
end
end
微信公众号搜索:淘个代码,获取更多免费代码
%禁止倒卖转售,违者必究!!!!!
%唯一官方店铺:https://mbd.pub/o/author-amqYmHBs/work
%代码清单:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu
参考文献
[1]Wu X, Li S, Jiang X, et al. Information acquisition optimizer: a new efficient algorithm for solving numerical and constrained engineering optimization problems[J]. The Journal of Supercomputing, 2024: 1-56.
完整代码获取
后台回复关键词:
TGDM813
获取更多代码:
或者复制链接跳转:
https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu