亨利气体溶解度优化算法(Matlab代码实现)

发布于:2022-11-09 ⋅ 阅读:(9) ⋅ 点赞:(0) ⋅ 评论:(0)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现及详细文章

💥1 概述

HGSO 模仿受亨利定律支配的行为,以解决具有挑战性的优化问题。亨利定律是一个基本气体定律,涉及在固定温度下溶解到给定类型和体积的液体的给定气体的量。HGSO 算法模仿 gas 的抱团行为,以平衡搜索空间中的开采和勘探,并避免局部最优。

亨利定律

亨利定律最早由J.W.亨利于1800年提出,这是一种气体定律,规定液体中溶解气体的量与其高于液体的分压成正比。换句话说,在指定温度或压力下可以溶解在特定量的溶剂中的最大溶质量称为溶解度。HGSO 受到亨利定律行为的启发。

📚2 运行结果

🎉3 参考文献

部分代码:

function [vec_Xbest, var_Gbest,vec_Gbest_iter] = HGSO(objfunc, dim,var_down,var_up,var_niter,var_n_gases,var_n_types)
if nargin<5
    [var_n_gases,var_n_types,var_niter]=fun_getDefaultOptions();
end
%constants in eq (7)
l1=5E-03;
l2=100;
l3=1E-02;
%constants in eq (10)
alpha=1;
beta=1;
%constant in eq (11)
M1=0.1;
M2=0.2;
%paramters setting in eq. (7)
K=l1*rand(var_n_types,1);
P=l2*rand(var_n_gases,1);
C=l3*rand(var_n_types,1);
%randomly initializes the position of agents in the search space
X=var_down+rand(var_n_gases,dim)*(var_up-var_down);
%The population agents are divided into equal clusters with the same Henry鐥� constant value
Group=Create_Groups(var_n_gases,var_n_types,X);
% Compute cost of each agent
for i = 1:var_n_types
    [Group{i},best_fit(i),  best_pos{i}] = Evaluate(objfunc,var_n_types,var_n_gases, Group{i},0,1);
end
[var_Gbest, var_gbest] = min(best_fit);
vec_Xbest = best_pos{var_gbest};
for var_iter = 1:var_niter
    [S]=update_variables(var_iter,var_niter,K,P,C,var_n_types,var_n_gases);
    Groupnew=update_positions(Group,best_pos,vec_Xbest,S,var_n_gases,var_n_types,var_Gbest,alpha,beta,dim);
    Groupnew=fun_checkpoisions(dim,Groupnew,var_n_gases,var_n_types,var_down,var_up);
    for i = 1:var_n_types
        [Group{i},best_fit(i),  best_pos{i}] = Evaluate(objfunc,var_n_types,var_n_gases, Group{i},Groupnew{i},0);
        Group{i}=worst_agents(Group{i},M1,M2,dim,var_up,var_down,var_n_gases,var_n_types);
    end
    [var_Ybest, var_index] = min(best_fit);
    vec_Gbest_iter(var_iter)=var_Ybest;
    if var_Ybest<var_Gbest
        var_Gbest=var_Ybest;
        vec_Xbest = best_pos{var_index};
    end
    
end
end
 

🌈4 Matlab代码实现及详细文章