注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。
肝癌算法(Liver Cancer Algorithm,LCA)是一种受肝细胞癌(Hepatocellular Carcinoma)生物行为启发的新型元启发式优化算法。该算法模拟了肿瘤在肝脏组织中的生长与扩散过程,旨在解决复杂系统中的最优化问题,尤其适用于如医疗建模、工程设计优化等高维非线性场景。LCA的核心机制聚焦于肿瘤在寻找最有利生存环境时所表现出的适应性与侵袭性行为,算法通过演化搜索策略再现肝癌细胞在器官中逐步扩张并主导空间的动态机制,其数学建模确保了算法在解空间内的全局探索能力与局部开采能力之间的高效平衡。
该成果于2023年发表在SCI医学领域二区期刊Computers in Biology and Medicine期刊上,目前被引用高达169次。

LCA算法旨在模拟肝脏肿瘤的生长和扩散行为,肝脏肿瘤是肝脏中的恶性生长,可能严重影响身体功能。为了复制肿瘤的生长和行为,LCA算法由几个阶段组成,每个阶段都涉及不同的数学公式。
1.算法原理
(1)肿瘤体积计算
LCA算法的核心在于肿瘤体积的计算,这是后续阶段的基础。为确定肿瘤的体积,我们采用一种基于数学模型的计算方法,假设肿瘤呈半椭球形,该形态已在包括肝癌在内的多种癌症中被观察到。肿瘤以三个直径表示:宽度、长度和高度。然而,由于高度维度难以直接测量,因此采用数学模型进行近似估计。初始肿瘤体积(位置)通过公式进行计算,该公式引入了随机对立学习(ROBL)机制,用于构建具有多样化搜索能力的初始种群。
其中, , 。 与 分别表示决策变量的下界与上界, 为搜索空间的维度, 是一个介于 之间的随机数,基于当前 的最优目标值与其对立 计算得出,从而建立初始种群。肿瘤位置的体积根据其直径(长度、宽度与高度)的长度进行计算;其中宽度与高度为介于 的随机数。通过数学建模描述了肝脏肿瘤位置体积的增长过程,以构建LCA算法并执行优化任务。肿瘤位置体积的增长通过公式计算:
其中, 为描述特定类型肿瘤的常数
(2)肿瘤体积计算
该阶段表示在肿瘤体积扩展后,疾病进入了危险感染阶段。肿瘤会在同一肝脏器官的其他位置复制自身。用于肝细胞癌增长的指数增长方程适用于计算肿瘤位置的扩展,如以下公式所示。由于肿瘤细胞在不同体积阶段均持续分裂,肿瘤位置体积 的增长满足该指数模型。
其中, 表示肿瘤位置的增长量, 表示椭圆形肿瘤的半径,其取值范围为 ,肿瘤的体积与位置由前述公式计算得出; 为最大迭代次数, 为搜索代理个体数量。肿瘤的扩散行为逐步增强,以在肝脏器官内寻找到最优生存位置,从而模拟疾病控制过程。Lévy飞行函数用于表示该扩散机制,如以下公式所示:
在LCA算法的该阶段中,其设计灵感源自真实肿瘤的扩散过程,假设肿瘤可在竞争环境中逐步选择最优路径深入肝脏的不同区域以实现侵占。因此,认为肿瘤能够依据如下规则评估(决定)其下一步行为,以完成该阶段的模拟。该过程通过以下公式进行描述:

其中, 表示维度空间, 包含在该空间 中随机生成的 个分量。最后, 为待优化的适应度函数。
(3)利用交叉与变异的肿瘤扩散机制
LCA算法的最终阶段表示肿瘤发展为转移性肝癌,这是该疾病的一种晚期形式,起源于肝脏但会扩散到身体的其他部分。LCA采用遗传算子,包括变异和交叉操作,引入额外的变异以实现这一过程。变异:变异操作在LCA的结构任务中作为解目标来实现。每个分量被赋予一个随机数,范围在 之间。当该值接近变异率( )时,目标代理元素的肿瘤位置将被考虑。如果该值小于变异率( ),则使用 或 向量中的一个分量来更新旧的向量。变异算子使用以下公式进行构建,以表示通过变异算子来模拟肿瘤发展:其中,第 维由 和 定义, 包含从 范围内随机生成的 个元素。
交叉:交叉操作用于将两个个体结合,产生新的后代。在LCA中,我们使用随机数 和 的线性组合来创建新的后代 ,如以下公式所定义:
选择:LCA中采用的贪婪选择策略基于差分进化。通过获取评估函数(变异与交叉),生成子代。然后,父代和子代的性能并行评估,如果父代表现良好,它们可以继续留在种群中。使用以下公式来建立贪婪选择的标准:

LCA优化算法的伪代码如下所示:

LCA优化算法的流程图如下所示:

2.结果展示
23个经典函数结果:
3.MATLAB核心代码
3、MATLAB核心代码
%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 肝癌算法(Liver Cancer Algorithm,LCA)
function [Tumor_Energy,Tumor_Location,CNVG]=LCA(N,T,lb,ub,dim,fobj)
disp('LCA is now tackling your problem')
tic
% initialize the location and Energy of the tumor
Tumor_Location=zeros(1,dim);
Tumor_Energy=inf;
%Initialize the locations of tumor
X=initialization(N,dim,ub,lb);
CNVG=zeros(1,T);
t=0; % Loop counter
while t<T
for i=1:size(X,1)
% Check boundries
FU=X(i,:)>ub;FL=X(i,:)<lb;X(i,:)=(X(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;
% fitness of locations
fitness=fobj(X(i,:));
% Update the location of tumor
if fitness<Tumor_Energy
Tumor_Energy=fitness;
Tumor_Location=X(i,:);
end
end
r=rand();
v=r*t;
% Update the location of tumor
for i=1:size(X,1)
f=1;
l=rand();
w=rand();
w=rand();
if abs( v)<=5
q=rand();
rand_Hawk_index = floor(N*rand()+1);
X_rand = X(rand_Hawk_index, :);
%tumor calculation f=(1.5*l)/(l*w)^1.5;
q=3.14/6*(l*w)^1.5;
% f=(1.5*l)/(l*w)^1.5;
q=3.14/6*(l*w)^1.5;
if q<2
% perch based on other family members
% X(i,:)=X_rand-rand()*abs(X_rand-2*rand()*X(i,:));
X(i,:)=(Tumor_Location(1,:)-mean(X))-rand()*((ub-lb)*rand+lb);
elseif q<=2
% perch on a random tall tree (random site inside group's home range)
X(i,:)=(Tumor_Location(1,:)-mean(X))-rand()*((ub-lb)*rand+lb);
end
elseif q>=2&&q<5
p = 2/3; %growth of tumor
Jump_strength=v^p; % random jump strength of the tumor
X(i,:)=(Tumor_Location-X(i,:))- v*abs(Jump_strength*Tumor_Location-X(i,:));
% Jump_strength=v^q;
X1=Tumor_Location- v*abs(Jump_strength*Tumor_Location-X(i,:));
X1=MutationU(dim,T,Tumor_Location,t);
X1=Tumor_Location- v*abs(Jump_strength*Tumor_Location-X(i,:));
X1=MutationU(dim,T,Tumor_Location,t);
if fobj (X1(i,:)')<fobj (X(i,:)'); % improved move?
X(i,:)=X1;
else
X2=Tumor_Location- v*abs(Jump_strength*Tumor_Location-X(i,:))+rand(1,dim).*Levy(dim);
X2=MutationU(dim,T,Rabbit_Location,t);
if fobj(X2(i,:)')<fobj(X(i,:)'); % improved move?
X(i,:)=X2;
end
X3=rand.*X2+(1-rand).*X1;
if fobj(X3(i,:)')<fobj(X(i,:)'); % improved move?
X(i,:)=X3;
end
end
end
end
t=t+1;
CNVG(t)=Tumor_Energy;
end
toc
display(['At speed ', num2str(toc), ' the best speed is ', num2str(toc)]);
end
% ___________________________________
function o=Levy(d)
beta=1.5;
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
u=randn(1,d)*sigma;v=randn(1,d);step=u./abs(v).^(1/beta);
o=step;
end
4.参考文献
参考文献 :Houssein E H, Oliva D, Samee N A, et al. Liver cancer algorithm: A novel bio-inspired optimizer[J]. Computers in Biology and Medicine, 2023, 165: 107389.
本期算法代码获取
后台回复关键词:
TGDM843
获取更多代码:
或者复制链接跳转:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu