[Matlab 알고리즘] Gray Wolf Optimization 알고리즘 문제(완전한 MATLAB 코드 사용)

회색늑대 최적화 알고리즘 문제

머리말

회색늑대 최적화(GWO)회색늑대의 사회적 행동을 시뮬레이션하는 휴리스틱 최적화 알고리즘입니다. 2014년 Seyedali Mirjalili 등이 제안한 이 개념은 회색늑대의 사회 구조에서 계층 구조와 협력 관계를 관찰하는 데 영감을 받았습니다.

알고리즘 설명:

그룹 위치 초기화: 알고리즘은 회색 늑대 그룹을 검색 공간에서 위치가 무작위로 분포된 잠재적 솔루션의 후보 세트로 나타내는 것으로 시작됩니다.

회색늑대 레벨 결정: 체력 수치에 따라 각 회색늑대의 레벨을 결정합니다. 체력이 높을수록 레벨도 높아집니다.

리더 회색늑대 결정: 적합도가 가장 좋은 회색늑대를 리더로 선택하고, 그 위치는 현재 검색 공간에서 잠재적인 최적의 솔루션으로 간주됩니다.

회색 늑대 위치 업데이트: 회색 늑대의 사회적 행동 규칙에 따라 개별 회색 늑대는 리더의 위치와 다른 회색 늑대의 위치를 ​​기반으로 자신의 위치를 ​​업데이트합니다. 이 프로세스에는 다음 세 단계가 포함됩니다.

추격: 개별 회색늑대는 리더의 위치를 ​​모방하여 위치를 업데이트합니다. 여기서는 회색늑대의 위치를 ​​조정하기 위해 선형 보간법을 사용했습니다.

다음: 회색늑대는 쫓는 상태에서 다른 회색늑대의 위치를 ​​모방하여 위치를 업데이트합니다.

탐색: 추적 및 추적 외에도 Gray Wolf는 알고리즘에 전역 검색 기능이 있는지 확인하기 위해 어느 정도 무작위 탐색을 수행합니다.

체력 평가: 업데이트 후 각 회색늑대의 체력 값을 계산합니다.

리더 업데이트: 회색 늑대가 현재 리더보다 체력이 더 좋으면 해당 회색 늑대를 새 리더로 설정합니다.

반복 반복: 최대 반복 횟수에 도달하거나 적합도가 충분히 수렴하는 등 중지 조건이 충족될 때까지 4~6단계를 반복합니다.

알고리즘 기능:

그룹 지능: 회색 늑대 최적화 알고리즘은 회색 늑대의 사회적 행동을 시뮬레이션하고 그룹 지능의 특성을 사용하여 협력과 경쟁을 통해 검색 프로세스를 안내합니다.

간단하고 효과적입니다. 회색 늑대 최적화 알고리즘은 아이디어가 간단하고 구현하기 쉬우며 많은 최적화 문제에서 좋은 성능을 발휘합니다.

전역 검색 및 로컬 검색: 회색 늑대 최적화 알고리즘은 검색 공간에서 전역 검색과 로컬 검색을 동시에 수행하여 리더 및 추적 동작을 통해 전역 탐색을 구현하고 추적 및 탐색 동작을 통해 로컬 검색을 구현합니다.

문제에 의존하지 않음: Gray Wolf 최적화 알고리즘은 문제의 특정 형태에 의존하지 않으며 다양한 유형의 최적화 문제에 적합합니다.
여기에 이미지 설명을 삽입하세요.

텍스트

다음으로 다음 함수에 대해 최적화할 것입니다:
f ( x ) = A ⋅ exp ⁡ ( − Bu x − c Bu 2 σ 2 ) f(\mathbf{x}) = A \cdot \exp\left(-\frac { \|\mathbf{x} - \mathbf{c}\|^2}{\sigma^2}\right)에프 ( 엑스 )=특급( -2??? x-????2)
여기서:
xxx 는 현재 점의 좌표를 나타내는 입력 벡터입니다.
AAA 는 피크 높이를 제어하는 ​​데 사용되는 진폭입니다.
참조c 는 피크의 위치를 ​​제어하는 ​​데 사용되는 무작위로 생성된 중심점입니다.
σ σσ 는 가우스 분포의 표준 편차를 제어하는 ​​데 사용되는 확산 매개변수입니다.
이 표현식은 가우스 분포의 기여도를 나타내며, 에서는objectiveFunction이러한 가우스 분포가 여러 개 루프를 통해 함께 누적되어 다중 모드 함수의 모양을 시뮬레이션합니다.

암호

clear
clc
close all
warning off

num_wolves = 10;
num_dimensions = 3;
num_iterations = 100;

[best_solution, best_fitness] = greyWolfOptimization_x(num_wolves, num_dimensions, num_iterations);

function [best_solution, best_fitness] = greyWolfOptimization_x(num_wolves, num_dimensions, num_iterations)
    % 参数说明:
    % num_wolves:狼群大小
    % num_dimensions:问题的维度
    % num_iterations:迭代次数

    % 初始化灰狼群的位置
    wolves_positions = rand(num_wolves, num_dimensions);

    % 初始化灰狼群的适应度
    wolves_fitness = zeros(num_wolves, 1);

    % 初始化最佳解和最佳适应度
    best_solution = rand(1, num_dimensions);
    best_fitness = inf;

    % 主循环
    for iteration = 1:num_iterations
        % 更新每只狼的适应度
        for i = 1:num_wolves
            % 计算适应度,这里的目标函数需要根据具体问题修改
            wolves_fitness(i) = objectiveFunction(wolves_positions(i, :));

            % 更新最佳解和最佳适应度
            if wolves_fitness(i) < best_fitness
                best_fitness = wolves_fitness(i);
                best_solution = wolves_positions(i, :);
            end
        end

        % 更新每只狼的位置
        a = 2 - iteration * (2 / num_iterations); % 调整参数a
        for i = 1:num_wolves
            r1 = rand(); % 随机数
            r2 = rand(); % 随机数

            A1 = 2 * a * r1 - a; % 计算A1
            C1 = 2 * r2; % 计算C1

            D_alpha = abs(C1 * best_solution - wolves_positions(i, :)); % 计算D_alpha
            X1 = best_solution - A1 * D_alpha; % 计算X1

            r1 = rand(); % 随机数
            r2 = rand(); % 随机数

            A2 = 2 * a * r1 - a; % 计算A2
            C2 = 2 * r2; % 计算C2

            D_beta = abs(C2 * best_solution - wolves_positions(i, :)); % 计算D_beta
            X2 = best_solution - A2 * D_beta; % 计算X2

            r1 = rand(); % 随机数
            r2 = rand(); % 随机数

            A3 = 2 * a * r1 - a; % 计算A3
            C3 = 2 * r2; % 计算C3

            D_delta = abs(C3 * best_solution - wolves_positions(i, :)); % 计算D_delta
            X3 = best_solution - A3 * D_delta; % 计算X3

            % 更新狼的位置
            wolves_positions(i, :) = (X1 + X2 + X3) / 3;
        end
    end
end

function fitness = objectiveFunction(x)
    % 复杂的目标函数示例,多峰函数
    % 这里使用了多个高斯分布的和,模拟多个峰值

    num_peaks = 5; % 设置峰值数量
    amplitude = 10; % 设置峰值的振幅
    spread = 5; % 控制分布的宽度

    % 计算多个峰值的贡献
    peaks = zeros(num_peaks, 1);
    for i = 1:num_peaks
        peaks(i) = amplitude * exp(-(norm(x - rand(1, numel(x))) / spread)^2);
    end

    % 多峰函数的值为所有峰值的和
    fitness = sum(peaks);
end

Acho que você gosta

Origin blog.csdn.net/AlbertDS/article/details/135074562
Recomendado
Clasificación