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,...