【智能算法】青蒿素优化算法(AO)原理及实现

news2024/9/20 4:27:23

目录

    • 1.背景
    • 2.算法原理
      • 2.1算法思想
      • 2.2算法过程
    • 3.结果展示
    • 4.参考文献
    • 5.代码获取


1.背景

2024年,C Yuan受到青蒿素药物治疗疟疾过程启发,提出了青蒿素优化算法(Artemisinin Optimization, AO)。

在这里插入图片描述
在这里插入图片描述

2.算法原理

2.1算法思想

AO灵感来自于疟疾的青蒿素药物治疗过程,该过程涉及全面根除人体内的疟疾寄生虫。AO包括三个优化阶段:模拟全局探索的全面消除阶段,局部开发的局部清除阶段,以及增强算法逃避局部最优能力的后巩固阶段

在这里插入图片描述

2.2算法过程

全面消除阶段

在疟疾治疗的初始阶段,给病人更大剂量的药物,以迅速控制疾病的进展。青蒿素一旦被吸收,就会随着血液被输送到人体的各个部位而扩散到全身。药物扩散过程:
{ a i , j t + 1 = a i , j t + c × a i , j t × ( − 1 ) t , r a n d < 0.5 a i , j t + 1 = a i , j t + c × b e s t j t × ( − 1 ) t , r a n d > 0.5 (1) \left.\left\{\begin{matrix}\mathrm{a_{i,j}^{t+1}=a_{i,j}^{t}+c\times a_{i,j}^{t}\times(-1)^{t},rand<0.5}\\\mathrm{a_{i,j}^{t+1}=a_{i,j}^{t}+c\times best_{j}^{t}\times(-1)^{t},rand>0.5}\end{matrix}\right.\right.\tag{1} {ai,jt+1=ai,jt+c×ai,jt×(1)t,rand<0.5ai,jt+1=ai,jt+c×bestjt×(1)t,rand>0.5(1)
青蒿素类药物在人体内的扩散遵循药代动力学原理,考虑到药物浓度会随着时间的推移而降低,c表示药物浓度在人体内的衰减指数,青蒿素药物浓度的衰减可以用单室模型描述:
d C d t = − k × C C ( t ) = C 0 × e ( − k × t ) (2) \frac{dC}{dt}=-k\times C\\C(t)=C_{0}\times e^{(-k\times t)}\tag{2} dtdC=k×CC(t)=C0×e(k×t)(2)
因此,青蒿素药物浓度的指数c表述为:
c = 1 × e − ( 4 × f M a x f ) (3) c=1\times e^{-(4\times\frac f{Maxf})}\tag{3} c=1×e(4×Maxff)(3)
概率系数K表述为:
K = 1 − f 1 / 6 M a x f 1 / 6 (4) K=1-\frac{f^{1/6}}{Maxf^{1/6}}\tag{4} K=1Maxf1/6f1/6(4)
综合淘汰阶段策略:
{ a i , j t + 1 = a i , j t + c × a i , j t × ( − 1 ) t , r a n d < 0.5 a i , j t + 1 = a i , j t + c × b e s t j t × ( − 1 ) t , r a n d > 0.5 , r 1 < K (5) \left.\left\{\begin{matrix}a_{i,j}^{t+1}=a_{i,j}^{t}+c\times a_{i,j}^{t}\times(-1)^{t},\mathrm{rand}<0.5\\a_{i,j}^{t+1}=a_{i,j}^{t}+c\times best_{j}^{t}\times(-1)^{t},rand>0.5\end{matrix}\right.,r_{1}<K\right.\tag{5} {ai,jt+1=ai,jt+c×ai,jt×(1)t,rand<0.5ai,jt+1=ai,jt+c×bestjt×(1)t,rand>0.5,r1<K(5)
在最初的治疗阶段之后,随着疾病得到控制,治疗过渡到维持阶段,以确保彻底治愈疟疾。
在这里插入图片描述

局部清除阶段

局部清除阶段的目标是消除体内任何残留的疟疾寄生虫,防止其繁殖和疟疾症状的复发。在这一阶段,患者继续接受低剂量青蒿素及其衍生物的治疗,以确保完全根除疟疾寄生虫,尽量减少在人体内发生不良反应的风险。局部清除阶段策略:
a i t + 1 = a b 3 t + d × ( a b 1 t − a b 2 t ) , i f r a n d < F i t n o r m ( i ) F i t n o r m ( i ) = f i t ( i ) − min ⁡ ( f i t ) max ⁡ ( f i t ) − min ⁡ ( f i t ) b 1 , b 2 , b 3 ∼ U ( 1 , N ) , b 1 ≠ b 2 ≠ b 3 (6) a_{i}^{t+1}=a_{b_{3}}^{t}+d\times\left(a_{b_{1}}^{t}-a_{b_{2}}^{t}\right),if rand<Fit_{norm}(i)\\Fit_{norm}(i)=\frac{fit(i)-\min{(fit)}}{\max(fit)-\min{(fit)}}\\b_{1},b_{2},b_{3}\sim U(1,N),b_{1}\neq b_{2}\neq b_{3}\tag{6} ait+1=ab3t+d×(ab1tab2t),ifrand<Fitnorm(i)Fitnorm(i)=max(fit)min(fit)fit(i)min(fit)b1,b2,b3U(1,N),b1=b2=b3(6)

后巩固阶段

对疾病的严重程度漠不关心和治疗期间的松懈是危险的有害因素,在这种策略中,假设不活跃的寄生虫形式仍然存在于人体内。不幸的是,尽管这些休眠寄生虫持续存在,一些患者仍可能再次出现疟疾。该策略表述为:
{ a i , j t + 1 = a i , j t , i f r a n d < 0.05 a i , j t + 1 = b e s t i , j , i f r a n d < 0.2 (7) \left\{\begin{matrix}a_{i,j}^{t+1}=a_{i,j}^{t},if rand<0.05\\a_{i,j}^{t+1}=best_{i,j},if rand<0.2\end{matrix}\right.\tag{7} {ai,jt+1=ai,jt,ifrand<0.05ai,jt+1=besti,j,ifrand<0.2(7)

在这里插入图片描述
流程图

在这里插入图片描述

伪代码

在这里插入图片描述

3.结果展示

在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Yuan C, Zhao D, Heidari A A, et al. Artemisinin optimization based on malaria therapy: Algorithm and applications to medical image segmentation[J]. Displays, 2024: 102740.

5.代码获取

资源清单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1703248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在C++中自定义命名空间,在命名空间中定义string变量,同时定义一个函数实现单词逆置

代码 #include <iostream> #include <cstring> using namespace std; namespace my_space {string s;void reverse(string s);//定义逆置函数 } using namespace my_space; void my_space::reverse(string s){int lens.size();int i0;int jlen-1;while(i<j){//…

MongoDB 和 AI 赋能行业应用:电信和媒体

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第二篇。 本系列重点介绍 AI 应用于不同行业的关键用例&#xff0c;涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 电信行业的经营环境以利润空间狭小为特点&#xff0c;尤其是在差异化极小的商品…

markdown画时序图的时候,如何自动显示每一条时序的序号

1: 现象描述 今天画时序图的时候&#xff0c;发现时序上面没有显示序号&#xff0c;看起来不够清晰&#xff0c;只有单纯的说明; 如下图所示 刚测试CSDN的时序图&#xff0c;默认是带序号的&#xff0c;看起来和实际使用的markdown工具有关系&#xff1b; 2&#xff1a;解决办…

MIT6.828 Lab2-1 Using gdb

Using gdb gdb使用&#xff1a; xv6 gdb调试方法 问题1&#xff1a; Looking at the backtrace output, which function called syscall? 按照提示开启gdb后键入&#xff1a; b syscall c layout src backtrace输出结果&#xff1a; (gdb) backtrace #0 syscall () at k…

nodejs开发入门01启动服务器

目录 1 创建项目2 初始化项目3 创建app.js4 服务器启动代码5 浏览器里访问6 部署到云服务器总结 nodejs是一个服务器运行环境&#xff0c;可以让我们搭建我们自己的服务器&#xff0c;接收客户端的请求&#xff0c;并给出响应。第一篇我们介绍一下服务器的搭建以及启动过程。 1…

Compose学习记录(1)

Compose学习记录(1) 简易使用HelloWorld。 新建一个工程&#xff0c;它已经默认启用了compose特性。MainActivity继承自 ComponentActivity&#xff0c;可以用compose来编写UI界面。 // sample 1: simple VersionsetContent {Text("Hello World.")}一个函数&#xf…

【项目】教你手把手完成博客系统(三)显示用户信息 | 实现退出登录 | 实现发布博客

文章目录 教你手把手完成博客系统&#xff08;三&#xff09;7.实现显示用户信息1.约定前后端交互接口2.前端通过ajax发起请求3.服务器处理请求 8.实现退出登录1.约定前后端的接口2.前端发起请求3.服务器处理请求 9.实现发布博客1.约定前后端的交互接口2.前端构造请求3.服务器处…

.NET调用阿里云人脸核身服务端 (ExecuteServerSideVerification)简易流程保姆级教学

需要注意的是&#xff0c;以下内容仅限基础调用 功能说明 该功能是输入核验人的姓名和身份证以及人脸照片&#xff0c;去阿里库里面匹配&#xff0c;3个信息是否一致&#xff0c;一致则验证通过&#xff0c;需要注意的是&#xff0c;人脸有遮挡&#xff0c;或者刘海&#xff0…

三分钟“手撕”顺序表与ArrayList

前言&#xff1a; 实现顺序表的代码放开头&#xff0c;供大家更好的查阅&#xff0c;每个方法都有代码的实现。 其次我会讲解Java自带的ArrayList的实例&#xff0c;扩容机制ArrayList使用方法&#xff0c;遍历以及它的优缺点。 目录 一、自己实现的顺序表 二、Java的ArrayLi…

Flutter中如何让Android的手势导航栏完全透明?

Flutter 开发中 安卓机器都有 像ios 的手势操作栏&#xff0c; 也就是屏幕底下的 那条线。 但这条线默认是有颜色的 &#xff08;像下面这样&#xff09; 一、全屏幕方式 void main() {// 全屏沉浸式SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []…

解决Error: error:0308010C:digital envelope routines::unsupported的四种解决方案

问题描述&#xff1a; 报错&#xff1a;Error: error:0308010C:digital envelope routines::unsupported 报错原因&#xff1a; 主要是因为 nodeJs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制&#xff0c;nodeJs v17 之前版本没影响&am…

ROS学习笔记(16):夹缝循迹

0.前言 在笔记的第15期对巡墙驾驶的原理进行了简单讲解&#xff0c;而这期我们来讲一下夹缝循迹&#xff0c;也常被叫follow the gap&#xff0c;也更新一些概念。 1.探索式路径规划与避障 1.概念 无预先建图的路径规划叫探索式路径规划&#xff0c;例如巡墙循迹和夹缝循迹&…

解决 Spring Boot 应用启动失败的问题:Unexpected end of file from server

解决 Spring Boot 应用启动失败的问题&#xff1a;Unexpected end of file from server 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的…

启动docker报错:Failed to listen on Docker Socket for the API.

说明&#xff1a; 1、安装部署docker完成后&#xff0c;启动docker报错&#xff1a;Failed to listen on Docker Socket for the API&#xff0c;如下图所示&#xff1a; 2、将SocketGroupdocker更改成&#xff1a;SocketGrouproot即可 一、解决方法&#xff1a; 1、执行命令…

nodejs安装配置

nodejs安装 打开nodejs官网(https://nodejs.org/en/download/package-manager)&#xff0c;参考安装步骤操作。 更新镜像源 输入以下命令&#xff0c;将npm的镜像源设置为淘宝镜像。网上资料中&#xff0c;淘宝镜像地址多为https://registry.npm.taobao.org&#xff0c;这个…

OpenBayes 一周速览|TripoSR 开源:1 秒即 2D 变 3D、经典 GTZAN 音乐数据集上线

公共资源速递 This Weekly Snapshots &#xff01;5 个数据集&#xff1a; FER2013 面部表情识别数据集 GTZAN 音乐流派分类数据集 MVTec-AD 工业异常检测数据集 UCAS-AOD 遥感目标检测数据集 Oxford 102 Flowers 花卉图片数据集 3 个教程&#xff1a; Latte 全球首个开…

C++青少年简明教程:switch语句

C青少年简明教程&#xff1a;switch语句 在C中&#xff0c;switch语句用于基于一个表达式的值来执行不同的代码块。这个表达式通常是一个整数类型&#xff08;如int&#xff0c;char&#xff0c;或枚举类型&#xff09;&#xff0c;并且case标签必须是整数常量表达式。 语法格…

VBA高级应用30例:实现在列表框内及列表框间实现数据拖动

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

【学习记录】服务器转发使用tensorboard

场景 代码在服务器上运行&#xff0c;想使用tensorboard查看训练的过程。 但是服务器上不能直接访问地址&#xff0c;所以要转发端口到本地&#xff0c;从而在本地网页中能够打开tensorboard。 参考&#xff1a;https://zhuanlan.zhihu.com/p/680596384 这时我们需要建立本地…

cad角度如何精确到0.1

可以通过更改角度精度的方式把角度的标注精确到小数点后几位&#xff0c;具体方法如下&#xff1a; 1、打开一个CAD文档&#xff0c;在文档中画一个角&#xff0c;如下图&#xff1a; 文章源自设计学徒自学网-https://www.sx1c.com/47920.html 2、给此角进行角度的标注&#…