果蠅優化演算法

2021-07-05 06:46:46 字數 2276 閱讀 1592

1、隨機初始果蠅群體位置。 

x_axis=10*rand(); 

y_axis=10*rand(); 

2、附與果蠅個體利用嗅覺搜尋食物之隨機方向與距離。

x(i)=x_axis+2*rand()-1; 

y(i)=y_axis+2*rand()-1; 

3、由於無法得知食物位置,因此先估計與原點之距離(dist),再計算味道濃度判定值(s),此值為距離之倒數。

d(i)=(x(i)^2+y(i)^2)^0.5; 

s(i)=1/d(i); 

4、味道濃度判定值(s)代入味道濃度判定函式(或稱為 fitness function)以求出該果蠅個體位置的味道濃度(smelli)

smell(i)=3-s(i)^2; 

5、找出此果蠅群體的中味道濃度最高的果蠅(求極大值)。 

[bestsmell bestindex]=max(smell); 

6、保留最佳味道濃度值與 x、y 座標,此時果蠅群體利用視覺往該位置飛去。

x_axis=x(bestindex); 

y_axis=y(bestindex); 

smellbest=bestsmell; 

7、進入迭代尋優,重複執行步驟 2-5,並判斷味道濃度是否優於前一迭代味道濃度,若是則執行步驟6。

matlab**如下:

clcclear

%初始化果蠅群體位置空間區間為[0,10]

x_axis=10*rand();

y_axis=10*rand();

%設定引數

maxgen=100;   %迭代次數

sizepop=20;   %種群規模

%***果蠅尋優開始,利用嗅覺尋找食物。

for i=1:sizepop 

%***附與果蠅個體利用嗅覺搜尋食物之隨機方向與距離,區間為[-1,1]。

x(i)=x_axis+2*rand()-1; 

y(i)=y_axis+2*rand()-1; 

%計算味道濃度判定值

d(i)=(x(i)^2+y(i)^2)^0.5; 

s(i)=1/d(i); 

%將s代入適應度函式y=3-x.^2,計算果蠅個體位置的味道濃度

smell(i)=3-s(i)^2; 

end%***找出此果蠅群體的中味道濃度最高的果蠅(求極大值)。

[bestsmell bestindex]=max(smell);

%***保留最佳值位置,此時果蠅群體利用視覺往該位置飛去。

x_axis=x(bestindex);

y_axis=y(bestindex);

smellbest=bestsmell;

%根據公式更新粒子位置和速度,並且根據新粒子的適應度值更新個體極值和群體極值

%果蠅迭代尋優開始

for g=1:maxgen

for i=1:sizepop 

x(i)=x_axis+2*rand()-1; 

y(i)=y_axis+2*rand()-1; 

d(i)=(x(i)^2+y(i)^2)^0.5; 

s(i)=1/d(i); 

smell(i)=3-s(i)^2; 

end[bestsmell bestindex]=max(smell);

if (bestsmell >smellbest)

x_axis=x(bestindex);

y_axis=y(bestindex);

smellbest=bestsmell;

end%***每代最優smell值紀錄到yy陣列中,並記錄最優迭代座標 

yy(g)=smellbest;  

xbest(g)=x_axis; 

ybest(g)=y_axis; 

end%***繪製迭代味到濃度與果蠅飛行路徑趨勢圖 

figure(1)  %圖1為迭代次數與適應度值的關係,即收斂圖

plot(yy) 

title('optimization process','fontsize',12) 

xlabel('iteration number','fontsize',12);ylabel('smell','fontsize',12); 

figure(2) 

plot(xbest,ybest,'b.'); 

title('fruit fly flying route','fontsize',14) 

xlabel('x-axis','fontsize',12);ylabel('y-axis','fontsize',12); 

Python實現果蠅演算法

import numpy as np import matplotlib.pyplot as plt 定義需要解的函式 名稱為fun1 def fun1 arr y 2 arr 2 1 return y 果蠅演算法 初始化果蠅引數 popsize 30 果蠅種群規模 maxgen 100 果蠅最大迭...

演算法 演算法優化

傳統最優化方法的設計思想主要是通過傳統的序列計算實現的,無法與硬體的並行架構完美相容,這降低了傳統最優化方法在具有大資料背 計算為核心的分布式優化應運而生,這也使得最優化方法得到了比以往任何時候都更加廣泛的應用。平行計算要首先把乙個問題分解成若干個可以同時計算的子問題 部分 並將每個子問題進一步細分...

python優化演算法 python 優化演算法

設k k,n 是從金鑰k開始的長度為n的唯一數的個數.然後,k k,n 1 sum k i,n 其中i在可以從鍵k跳轉到的鍵的範圍內.這可以使用動態程式設計有效地計算 這是一種占用o n 時間和o 1 空間的方法 jumpmap map int,x for x in 46,68,79,48,039,...