日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

樽海鞘算法

發(fā)布時間:2024/6/21 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 樽海鞘算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  樽海鞘是一種透明的桶狀生物,和水母比較相似。它通過吸水、噴水來移動的。由于它生活在寒帶的深海里面,給我們的研究造成了一定的困擾。但是,這并不影響我們對它的研究。在深海里,樽海鞘是以樽海鞘鏈的形式存在,這就是我們感興趣的群體行為之一。

  首先,我們將樽海鞘鏈分為兩組:1、領導者;2、追隨者。

  領導者就是樽海鞘鏈前端的部分;追隨者就是樽海鞘鏈后端的部分。

  首先,領導者的位置跟新公式:

  

  最后,更新追隨者位置

  為了不誤導大家,我給直接給出結果

  

clc;
clear all;
close all;
%%  問題定義

CostFunction = @(x) sphere(x);  %  目標函數(shù)

nVar = 5;                       %  變量的維數(shù)

VarSize = [1,nVar];             %  變量的矩陣大小

VarMin = -10;                   %  變量的下確界
VarMax =  10;                   %  變量的上確界

%%  SSA參數(shù)

MaxIt = 1000;            % 最大迭代次數(shù)

nPop = 50;               % 種群大小

%%  初始化

% 樽海鞘模板
empty_slaps.Position = [];
empty_slaps.Cost = [];
empty_slaps.Best.Position = [];
empty_slaps.Best.Cost = [];

% 創(chuàng)建種群數(shù)組
slaps = repmat(empty_slaps,nPop,1);

% 初始化食物的適應度
Food.Cost = inf;

% 初始化種群
for i=1:nPop
    
    % 生成隨機解
    slaps(i).Position = unifrnd(VarMin,VarMax,VarSize);
    
    % 評價
    slaps(i).Cost = CostFunction(slaps(i).Position);
    
    % 更新最優(yōu)個體 
    slaps(i).Best.Position = slaps(i).Position;
    slaps(i).Best.Cost = slaps(i).Cost;
    
    % 更新食物的位置
    if slaps(i).Best.Cost < Food.Cost
       Food = slaps(i).Best;
    end
        
end

BestCosts = zeros(MaxIt,1);

%%  SSA算法的主程序

it = 1;
while it < MaxIt+1
    

    
    c1 = 2*exp(-(4*it/MaxIt)^2);               % 設置參數(shù)
    
    for i=1:nPop
        
        if i <= nPop/2
            c2=rand();
            c3=rand();
            %%%%%%%%%%%%% % Eq. (3.1) in the paper %%%%%%%%%%%%%%
            if c3<0.5 
                slaps(i).Position =Food.Position + c1*((VarMax - VarMin)*c2 + VarMin);
            else
                slaps(i).Position =Food.Position - c1*((VarMax - VarMin)*c2 + VarMin);
            end
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        elseif i > nPop/2 && i < nPop+1
            
            point1 = slaps(i-1).Position;
            point2 = slaps(i).Position;
            
            slaps(i).Position = (point2 + point1)/2;
        end
        
    end
    
    for i=1:nPop
        
        slaps(i).Position = max(slaps(i).Position,VarMin);
        
        slaps(i).Position = min(slaps(i).Position,VarMax);
        
        slaps(i).Cost = CostFunction(slaps(i).Position);            %  計算每個體的適應度值
        
        if slaps(i).Cost < slaps(i).Best.Cost
            
            slaps(i).Best.Position = slaps(i).Position;
            slaps(i).Best.Cost = slaps(i).Cost;
            
            if slaps(i).Best.Cost < Food.Cost
                
                Food = slaps(i).Best;
                
            end 
            
        end        
        
        
    end
    
    BestCosts(it) = Food.Cost;
    
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
   
    it = it + 1;
end

%%  Results

figure;
% plot(BestCosts,'LineWidth',2);
semilogy(BestCosts,'LineWidth',2);
xlabel('Iterations');
ylabel('Best Cost');
grid on;
function z = sphere(x)
%%  目標函數(shù)
    z = sum(x.^2);
end

 

總結

以上是生活随笔為你收集整理的樽海鞘算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。