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