2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
一、山羊优化算法
山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力,有效平衡探索和开发,以解决全局优化问题。
算法原理
山羊优化算法基于山羊的三种关键行为模式来设计其工作机制:
- 自适应觅食策略:山羊在觅食过程中会优先选择营养丰富的区域,同时避开不利区域。这种行为被建模为算法中的探索阶段,使候选解能够在解空间中评估多个区域,从而增强全局搜索能力。
- 跳跃机制:山羊能够通过突然的跳跃到达难以触及的区域,这有助于它们逃避捕食者和获取新的资源。在算法中,这种跳跃机制被用来帮助解逃离局部最优解,提高收敛速度和全局搜索效率。
- 寄生虫回避和环境适应:山羊会本能地避免在寄生虫感染的区域觅食,以确保长期生存和健康。在算法中,这一行为被转化为解的筛选机制,通过动态消除低质量解并重新生成新的候选解,保持种群的多样性和鲁棒性。
算法模型
山羊优化算法的数学模型包括以下几个关键部分:
-
种群初始化:随机生成初始的山羊种群,每个山羊表示为搜索空间中的一个d维向量,其位置在给定的上下界范围内随机生成。
X i = ( x i 1 , x i 2 , … , x i d ) X_i = (x_{i1}, x_{i2}, \ldots, x_{id}) Xi=(xi1,xi2,…,xid)
其中,i = 1, 2, …, N,d是决策变量的个数(维度)。初始种群的生成公式为:
X i = L B + ( U B − L B ) ⋅ rand ( d ) X_i = LB + (UB - LB) \cdot \text{rand}(d) Xi=LB+(UB−LB)⋅rand(d)
其中,rand(d)生成一个d维的随机向量,取值范围在[0,1]之间。 -
探索阶段:每个山羊通过随机移动来探索搜索空间,其新位置的更新公式为:
X i t + 1 = X i t + α ⋅ R ⋅ ( U B − L B ) X_i^{t+1} = X_i^t + \alpha \cdot R \cdot (UB - LB) Xit+1=Xit+α⋅R⋅(UB−LB)
其中, X i t X_i^t Xit是第i个山羊在迭代t的位置,α是探索系数,R是从高斯分布N(0,1)中抽取的随机变量。 -
开发阶段:山羊逐渐向当前最优解移动,以细化解的质量,其位置更新公式为:
X i t + 1 = X i t + α ′ ⋅ ( X leader t − X i t ) X_i^{t+1} = X_i^t + \alpha' \cdot (X_{\text{leader}}^t - X_i^t) Xit+1=Xit+α′⋅(Xleadert−Xit)
其中, X leader t X_{\text{leader}}^t Xleadert是当前最优解,α’是开发系数。 -
跳跃策略:通过跳跃机制帮助山羊逃离局部最优解,其位置更新公式为:
X i t + 1 = X i t + J ⋅ ( X random − X i t ) X_i^{t+1} = X_i^t + J \cdot (X_{\text{random}} - X_i^t) Xit+1=Xit+J⋅(Xrandom−Xit)
其中,J是跳跃系数, X random X_{\text{random}} Xrandom是随机选择的山羊。 -
寄生虫回避和解筛选:对于适应度值位于种群最低20%的山羊,将其位置重置为随机生成的新位置,以保持种群的多样性和鲁棒性。重置公式为:
X i t + 1 = L B + ( U B − L B ) ⋅ rand ( d ) X_i^{t+1} = LB + (UB - LB) \cdot \text{rand}(d) Xit+1=LB+(UB−LB)⋅rand(d)
算法流程
山羊优化算法的完整流程如下:
- 初始化:随机初始化山羊种群,计算每个山羊的适应度值,并确定当前最优解。
- 迭代过程:
- 探索:使用探索方程更新山羊的位置。
- 开发:将山羊向当前最优解移动。
- 跳跃:对部分山羊应用跳跃策略。
- 筛选:移除并重新生成表现较差的解。
- 更新最优解:根据新的位置计算适应度值,并更新当前最优解。
- 停止条件:当达到最大迭代次数、适应度改进低于预设阈值或种群中解的方差变得可忽略不计时,算法终止。
- 输出结果:返回找到的最优解。
复杂度分析
山羊优化算法的计算复杂度主要由适应度函数评估和山羊位置更新决定。每轮迭代评估 N 个解,假设总共有 (T_{\text{max}}) 轮迭代,则总体复杂度为:
O ( N ⋅ T max ⋅ d ) O(N \cdot T_{\text{max}} \cdot d) O(N⋅Tmax⋅d)
这与其他基于群体的算法(如粒子群优化算法和灰狼优化算法)相当。不过,通过引入跳跃策略和寄生虫回避机制,GOA 可以提高效率,避免不必要的局部搜索停滞。
参考文献:
[1]nozari, hamed, and Agnieszka Szmelter-Jarosz. “Goat Optimization Algorithm: A Novel Bio-Inspired Metaheuristic for Global Optimization.” Applied Innovations in Industrial Management (AIIM), 2025.
二、23个函数介绍

参考文献:
[1] Yao X, Liu Y, Lin G M. Evolutionary programming made faster[J]. IEEE transactions on evolutionary computation, 1999, 3(2):82-102.
三、部分代码及结果
clear;
clc;
close all;
warning off all;SearchAgents_no=50; %Number of search solutions
Max_iteration=500; %Maximum number of iterationsFunc_name='F1'; % Name of the test function% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_F(Func_name); tic;
[Best_score,Best_pos,cg_curve]=(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
tend=toc;% figure('Position',[500 500 901 345])
%Draw search space
subplot(1,2,1);
func_plot(Func_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Func_name,'( x_1 , x_2 )'])%Draw objective space
subplot(1,2,2);
semilogy(cg_curve,'Color','m',LineWidth=2.5)
title(Func_name)% title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');axis tight
grid on
box on
legend('')display(['The running time is:', num2str(tend)]);
display(['The best fitness is:', num2str(Best_score)]);
display(['The best position is: ', num2str(Best_pos)]);




四、完整MATLAB代码见下方名片
相关文章:
2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
一、山羊优化算法 山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力&…...
MySQL数据实时同步至Elasticsearch的高效方案:Java实现+源码解析,一文搞定!
引言:为什么需要实时同步? MySQL擅长事务处理,而Elasticsearch(ES)则专注于搜索与分析。将MySQL数据实时同步到ES,可以充分发挥两者的优势,例如: 构建高性能搜索服务 实时数据分析…...
Spring-事务
Spring 事务 事务的基本概念 🔹 什么是事务? 事务是一组数据库操作,它们作为一个整体,要么全部成功,要么全部回滚。 常见的事务场景: 银行转账(扣款和存款必须同时成功) 订单系统…...
Git系列之git tag和ReleaseMilestone
以下是关于 Git Tag、Release 和 Milestone 的深度融合内容,并补充了关于 Git Tag 的所有命令、详细解释和指令实例,条理清晰,结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交(commit…...
考研机试常见基本题型
1、求100以内的素数 sqrt()函数在cmath头文件中。 #include <iostream> #include <cmath> using namespace std;int main() {int count 0; // 用于统计素数的个数// 遍历 100 到 200 之间的每一个数for (int num 100; num < 200; num) {bool isPrime true…...
Android AudioFlinger(四)—— 揭开PlaybackThread面纱
前言: 继上一篇Android AudioFlinger(三)—— AndroidAudio Flinger 之设备管理我们知道PlaybackThread继承自Re’fBase, 在被第一次引用的时候就会调用onFirstRef,实现如下: void AudioFlinger::Playbac…...
C语言基础系列【20】内存管理
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
JavaScript基础-递增和递减运算符
在JavaScript编程中,递增()和递减(--)运算符是用于对数值进行加一或减一操作的基础工具。它们简洁且强大,但如果不正确地使用,可能会导致混淆或错误。本文将详细介绍这两种运算符的不同形式及其…...
计算机毕业设计SpringBoot+Vue.js社区医疗综合服务平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
3.6c语言
#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…...
Unity开发——CanvasGroup组件介绍和应用
CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha:控制UI的透明度 类型:float,0.0 ~1.0, 其中 0.0 完全透明,1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...
深度学习驱动的跨行业智能化革命:技术突破与实践创新
第一章 深度学习的技术范式演进与核心架构 1.1 从传统机器学习到深度神经网络的跨越 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代…...
php配置虚拟主机
在PHP中配置虚拟主机,通常是通过Apache或Nginx等Web服务器来进行设置的。下面我将分别介绍如何在Apache和Nginx中配置PHP虚拟主机。 1. Apache 配置虚拟主机 Apache是最常用的Web服务器之一,配置虚拟主机的步骤如下: 步骤一:确保A…...
RESTful API 设计指南
RESTful API 介绍 大佬的总结:RESTful API 设计指南 - 阮一峰的网络日志 json-server github地址 这里介绍一个快速搭建 REST API 服务的工具包 接口测试工具 介绍几个接口测试工具 apipost apifox postman https://www.apipost.cn/ (中文) https://www.apifox…...
在虚拟机上安装Hadoop
以下是在虚拟机上安装Hadoop的一般步骤: 准备工作 - 安装虚拟机软件:如VMware Workstation或VirtualBox等。 - 创建虚拟机:选择合适的操作系统镜像,如Ubuntu或CentOS等Linux发行版,为虚拟机分配足够的CPU、内存和磁盘…...
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。 答题思路 理解需求:要写一个函数,它能接收一个字符串,然后把这个字符串里每个单词的第一个字母变成大写。分解步骤 拆分单词:一般单词之间是用空格隔…...
【VUE2】第三期——样式冲突、组件通信、异步更新
目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...
深度学习代码解读——自用
代码来自:GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割(WSSS)所需的伪掩码(Pseudo-Masks),是 Stage2 训练的前置步骤。其核心流程为&a…...
Linux 配置静态 IP
一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址,每次启动虚拟机服务都是不一样的 IP,因此要配置静态 IP 地址避免每次都发生变化,下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念: 动态 IP…...
Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
背景:问题如上标题,H3C所有交换机配置的model都是comware 解决方案: 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
