資源簡介
人工免疫算法,用于計算函數的極值問題,收斂性極佳,迭代不到10次就可以找到最優解,而且與理論解完全吻合
代碼片段和文件信息
import?numpy?as?np
import?matplotlib.pylab?as?plt
import?timeit
import?xlwt
def?initialize_pop(mn):
????pop?=?np.random.randint(02(mn))
????return?pop
def?value2to10(x):
????val?=?np.zeros(x.shape[0])
????for?i?in?range(3):
????????val?=?val?+?x[:?i]?*?(2?**?(2-i))
????for?i?in?range(3?x.shape[1]):
????????val?=?val?+?x[:i]*(2**-(x.shape[1]-i-1))
????return?val
def?affinityFunction(x):
????#f?=?x?+?10*np.sin(5*x)?+?7*np.cos(4*x)
????#f?=?-?x**2?+?2*x?+3
????f?=?1/3*x**3-5*x**2+9*x
????return?f
def?bubbleSort(x?y):
????for?i?in?range(len(y)):
????????for?j?in?range(len(y)-i-1):
????????????if?y[j]?????????????????y[j]?y[j+1]?=?y[j+1]?y[j]
????????????????x[j:]?x[j+1:]?=?x[j+1:]?x[j:]
????return?x
def?activate(pop?m?n?Fn?Ncl):
????y?=?affinityFunction(value2to10(pop))
????sortpop?=?bubbleSort(pop?y)
????for?i?in?range(int(m*(1-Fn))):
????????ca?=?np.tile(sortpop[i?:]?(Ncl?1))
????????for?j?in?range(1?Ncl):
????????????ind?=?np.ceil((n-1)*np.random.rand(3))
????????????for?k?in?range(3):
????????????????if?ca[j?int(ind[k])]?==?0:
評論
共有 條評論