python据说功能强大,触角伸到各个领域,网上搜了一下其科学计算和工程计算能力也相当强,具备各种第三方包,除了性能软肋外,其他无可指摘,甚至可以同matlab等专业工具一较高下。
从网上找了一个使用遗传算法实现数据拟合的例子学习了一下,确实Python相当贴合自然语言,终于编程语言也能说人话了,代码整体简洁、优雅。。
代码功能:给出一个隐藏函数 例如 z=x^2+y^2,生成200个数据,利用这200个数据,使用遗传算法猜测这些数据是什么公式生成的。 (说的太直白,一点都不高大上)
代码如下:
result = deepcopy(t)
result.children = [self.mutate(c, pc, probchange)
rows = []
x = randint(0, 10)
x=uniform(-1,1)
y = randint(0, 10)
y=uniform(-1,1)
rows.append([x, y, self.hiddenfunction(x, y)])
dif = 0
scores = [(self.scorefunction(t, dataset), t) scores.sort()
scores = rankfunction(population)
newpop.append(
self.mutate(self.crossover(scores[selectindex()][1], scores[selectindex()][1], probswap=breedingrate), pc,
probchange=mutationrate))
newpop.append(self.makerandomtree(pc))
population = newpop
e=opera()
a=opera()
row2=a.buildhiddenset()
fig = plt.figure()
ax = fig.add_subplot(111, projection= X = [1, 1, 2, 2]
Y = [3, 4, 4, 3]
Z = [1, 2, 1, 1]
rx=[]
ry=[]
rz=[]
rx.append(i[0])
ry.append(i[1])
rz.append(i[2])
ax.plot_trisurf(rx, ry, rz)
rz2=[]
rf = a.getrankfunction(row2)
final = a.evolve(2, 100, rf, mutationrate=0.2, breedingrate=0.1, pexp=0.7, pnew=0.1,maxgen=500)
final.display()
rz2.append(final.evaluate([rx[j],ry[j]]))
fig2 = plt.figure()
ax2 = fig2.add_subplot(111, projection= ax2.plot_trisurf(rx, ry, rz2)
plt.show()
main(0)
看懂不一定写的出来,这是这次写这个程序最大的体会, 得定时拿出来复习复习。