Python實現果蠅演算法

2021-08-28 21:11:24 字數 1876 閱讀 6786

import numpy as np

import matplotlib.pyplot as plt

#定義需要解的函式(名稱為fun1)

def fun1(arr):

y = 2*arr**2-1

return y

#######果蠅演算法######

##初始化果蠅引數

popsize = 30 #果蠅種群規模

maxgen = 100 #果蠅最大迭代次數

r = 1 #果蠅飛行半徑

d = 1 #優化變數個數

x = np.zeros([popsize,d])

dist = np.zeros([popsize,d])

s = np.zeros([popsize,d])

smell = np.zeros([popsize,1])

x = np.zeros([popsize,d])

y = np.zeros([popsize,d])

fitness = np.zeros([maxgen,1])

#賦予果蠅群體初始位置

x_axis = np.random.rand(1,d)

y_axis = np.random.rand(1,d)

#賦予果蠅種群飛行半徑

for i in range(popsize):

x[i,:] = x_axis + r*(2*np.random.rand(1,d)-1)

y[i,:] = y_axis + r*(2*np.random.rand(1,d)-1)

#計算距離dist

dist[i,:] = np.sqrt(x[i,:]**2+y[i,:]**2)

#計算味道濃度的倒數作為味道濃度判定值

s[i,:] = 1/dist[i,:]

#帶入味道濃度函式中求出味道濃度值

smell[i] = fun1(s[i,:])

#找出味道濃度最大值

smellbest,index = np.min(smell),np.argmin(smell)

bestsmell = smellbest

#保留最佳味道濃度處的果蠅

x_axis = x[int(index),:]

y_axis = y[int(index),:]

#果蠅種群進入迭代尋優

for j in range(maxgen):

for i in range(popsize):

x[i,:] = x_axis + r*(2*np.random.rand(1,d)-1)

y[i,:] = y_axis + r*(2*np.random.rand(1,d)-1)

#計算距離dist

dist[i,:] = np.sqrt(x[i,:]**2+y[i,:]**2)

#計算味道濃度的倒數作為味道濃度判定值

s[i,:] = 1/dist[i,:]

#帶入味道濃度函式中求出味道濃度值

smell[i] = fun1(s[i,:])

smellbest,index = np.min(smell),np.argmin(smell)

if smellbest < bestsmell:

bestsmell = smellbest

x_axis = x[int(index),:]

y_axis = y[int(index),:]

fitness[j] = bestsmell

plt.figure(1)

plt.plot(range(maxgen),fitness)

plt.xlabel('迭代次數')

plt.ylabel('味道濃度值')

果蠅優化演算法

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

python 實現演算法 Python實現演算法 一

1.二分查詢 def binary search mylist,item low 0 high len mylist 1 while low high mid low high 2 如果 low high 2不是偶數,python自動將mid向下圓整。guess mylist mid if gues...

python實現快排演算法 Python實現快排

挖坑法思路 取乙個元素p 第乙個元素 使元素p歸位 列表被p分成兩部分,左邊的數一定不大於p,右邊的數一定不小於p 遞迴完成排序。python 示例 lst 5,7,4,3,1,2,9,8 def quick sort d,l,r if l r m partition d,l,r quick sor...