2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB

一、山羊优化算法

山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力,有效平衡探索和开发,以解决全局优化问题。

算法原理

山羊优化算法基于山羊的三种关键行为模式来设计其工作机制:

  1. 自适应觅食策略:山羊在觅食过程中会优先选择营养丰富的区域,同时避开不利区域。这种行为被建模为算法中的探索阶段,使候选解能够在解空间中评估多个区域,从而增强全局搜索能力。
  2. 跳跃机制:山羊能够通过突然的跳跃到达难以触及的区域,这有助于它们逃避捕食者和获取新的资源。在算法中,这种跳跃机制被用来帮助解逃离局部最优解,提高收敛速度和全局搜索效率。
  3. 寄生虫回避和环境适应:山羊会本能地避免在寄生虫感染的区域觅食,以确保长期生存和健康。在算法中,这一行为被转化为解的筛选机制,通过动态消除低质量解并重新生成新的候选解,保持种群的多样性和鲁棒性。

算法模型

山羊优化算法的数学模型包括以下几个关键部分:

  • 种群初始化 :随机生成初始的山羊种群,每个山羊表示为搜索空间中的一个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)

算法流程

山羊优化算法的完整流程如下:

  1. 初始化:随机初始化山羊种群,计算每个山羊的适应度值,并确定当前最优解。
  2. 迭代过程
    • 探索:使用探索方程更新山羊的位置。
    • 开发:将山羊向当前最优解移动。
    • 跳跃:对部分山羊应用跳跃策略。
    • 筛选:移除并重新生成表现较差的解。
    • 更新最优解:根据新的位置计算适应度值,并更新当前最优解。
  3. 停止条件:当达到最大迭代次数、适应度改进低于预设阈值或种群中解的方差变得可忽略不计时,算法终止。
  4. 输出结果:返回找到的最优解。

复杂度分析

山羊优化算法的计算复杂度主要由适应度函数评估和山羊位置更新决定。每轮迭代评估 N 个解,假设总共有 (T_{\text{max}}) 轮迭代,则总体复杂度为:
O ( N ⋅ T max ⋅ d ) O(N \cdot T_{\text{max}} \cdot d) O(N⋅Tmax⋅d)

这与其他基于群体的算法(如粒子群优化算法和灰狼优化算法)相当。不过,通过引入跳跃策略和寄生虫回避机制,GOA 可以提高效率,避免不必要的局部搜索停滞。

参考文献:

1nozari, 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 fasterJ. IEEE transactions on evolutionary computation, 1999, 3(2):82-102.

三、部分代码及结果

dart 复制代码
clear;
clc;
close all;
warning off all;

SearchAgents_no=50;    %Number of search solutions
Max_iteration=500;    %Maximum number of iterations

Func_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代码见下方名片

相关推荐
大数据在线3 小时前
布局Agentic AI,亚马逊云科技组合拳再升级
人工智能·openai·亚马逊云科技·智能体·agentic ai
8Qi84 小时前
回文子串(Palindromic Substrings)—— 题解
算法·leetcode·职场和发展·动态规划
皮皮学姐分享-ppx7 小时前
政府绿色采购数据库(2015-2024.3)
大数据·网络·数据库·人工智能·制造
GIS数据转换器7 小时前
基于3D GIS的监控视频精准标定平台
人工智能·物联网·3d·音视频·无人机·知识图谱
珺毅同学7 小时前
YOLO生成预测json标签迁移问题
python·yolo·json
骑士雄师7 小时前
18.4 长期记忆可修改版
python
专注VB编程开发20年8 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
深小乐8 小时前
Claude Fable5 尝鲜,效果挺不错
人工智能
~小先生~8 小时前
Python从入门到放弃(一)
开发语言·python
Nayxxu8 小时前
Gemini + RAG 企业知识库教程:从文档切片到答案生成
运维·人工智能