【智能算法】吉萨金子塔建造算法(GPC)原理及实现

news/2025/3/14 18:25:40/

在这里插入图片描述

目录


1.背景

2021年,S Harifi等人受到观古代遗迹构造启发,提出了吉萨金子塔建造算法(Giza Pyramids Construction, GPC)。

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

2.算法原理

2.1算法思想

GPC模拟了古埃及人通过神奇的运动方式推动石块以搭建金字塔的过程,工人根据其表现在工地上的角色和地位进行分类,表现好的工人得到地位提升作为奖励。通过内部竞争机制,优秀的工人获得提升,而表现差的工人可能被更有活力的工人替换,模拟自然选择,提高劳动效率。工人在完成任务过程中积累经验和专业知识,提升其解决复杂任务的能力。有效管理资源如劳动力和材料,考虑物理因素如坡道坡度和摩擦力,优化石块的运输和安装。

在这里插入图片描述

2.2算法过程

工人推动石块时的受力分析,fk为动摩擦力:
f k = μ k m g cos ⁡ θ (1) f_k=\mu_kmg\cos\theta \tag{1} fk=μkmgcosθ(1)

在这里插入图片描述
算法的每次迭代中,初始速度被认为是一个随机数,因为每次工人试图移动石块时,所施加的力都会根据工人消耗的功率而变化:
v 0 = r a n d ( 0 , 1 ) (2) v_0=rand(0,1)\tag{2} v0=rand(0,1)(2)
GPC基本思想是推动石料的工人不断移动或晃动,以获得对石料的最佳支配和最佳控制。这些冲击使工人进行非重复性动作以更好地推动石块,工人的位置更新方式为:
x = ν 0 2 2 g sin ⁡ θ (3) x=\frac{\nu_0^2}{2g\sin\theta}\tag{3} x=2gsinθν02(3)
计算石料位移和工人运动:
p ⃗ = ( p ⃗ i + d ) × x ϵ ⃗ i (4) \vec{p}=\begin{pmatrix}\vec{p}_i+d\end{pmatrix}\times x\vec{\epsilon}_i\tag{4} p =(p i+d)×xϵ i(4)
ϵ ⃗ \vec{\epsilon} ϵ 是服从均匀、正态或莱维分布,工人们会通过协作而进行位置替换:
ζ k = { ψ k , i f r a n d [ 0 , 1 ] ≤ 0.5 φ k , o t h e r w i s e (5) \left.\zeta_k=\left\{\begin{array}{l}\psi_k,ifrand[0,1]\leq0.5\\\varphi_k,otherwise\end{array}\right.\right.\tag{5} ζk={ψk,ifrand[0,1]0.5φk,otherwise(5)

伪代码

在这里插入图片描述

3.结果展示

使用测试框架,测试GPC性能 一键run.m

  • 【智能算法】省时方便,智能算法统计指标——一键运行~

CEC2017-F7
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.参考文献

[1] Harifi S, Mohammadzadeh J, Khalilian M, et al. Giza Pyramids Construction: an ancient-inspired metaheuristic algorithm for optimization[J]. Evolutionary Intelligence, 2021, 14(4): 1743-1761.


http://www.ppmy.cn/news/1434644.html

相关文章

Modbus转Profinet网关接电表与工控机通讯

Modbus转Profinet网关(XD-MDPN100/300)的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议,支持Modbus RTU主站/从站,并可以与RS485接口的设备,如变频器…

C++从入门到出门

C 概述 c 融合了3中不同的编程方式: C语言代表的过程性语言C 在C语言基础上添加的类代表的面向对象语言C 模板支持的泛型编程 1、在c语言中头文件使用扩展名.h,将其作为一种通过名称标识文件类型的简单方式。但是c得用法改变了,c头文件没有扩展名。但是…

【k8s】(四)kubernetes1.29.4离线部署之-组件安装

(一)kubernetes1.29.4离线部署之-安装文件准备 (二)kubernetes1.29.4离线部署之-镜像文件准备 (三)kubernetes1.29.4离线部署之-环境初始化 (四)kubernetes1.29.4离线部署之-组件安装…

Ubuntu Pycharm安装

下载PyCharm,https://www.jetbrains.com/pycharm/download/?sectionlinux 然后按照下图执行安装: 安装的时候可能出现的问题: 问题1:No JDK found. Please validate either PYCHARM_JDK, JDK_HOME or JAVA_HOME environment var…

Day3: 5道C++ 面向对象高频题整理

1、虚函数表是针对类的还是针对对象的?同一个类的两个对象的虚函数表是怎么维护的? 答:虚函数表,或者称为vtable,是针对类的。虚函数表是一个存储类中所有虚函数地址的数组。当我们定义一个类,并在其中声明…

软件游戏缺失d3dcompiler_43.dll怎么修复?分享多种靠谱的解决方法

在我们日常频繁地操作和使用电脑的过程中,时常会遇到一些突发的技术问题。其中一种常见的情况是,在尝试启动或运行某个应用程序时,系统会弹出一个错误提示窗口,明确指出当前电脑环境中缺少了一个至关重要的动态链接库文件——d3dc…

【2024官方文档版学习笔记】React-脱围机制

系列文章 一、 React快速入门 二、React描述IU 三、React添加交互 四、React状态管理 五、React脱围机制 五、脱围机制 “脱围机制”(Fallback Mechanism)通常指的是在组件加载过程中,当遇到加载失败或者加载时间过长的情况时,能…

Springboot的日常操作技巧

文章目录 1、自定义横幅2、容器刷新后触发方法自定义3、容器启动后触发方法自定义**CommandLineRunner**ApplicationRunner 不定时增加 参考文章 1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 ,默认它会找叫做banner的文件,各种格式…