遗传算法实现之python VS matlab

说实话,之前由于听多了关于python性能不足方面的言论,深感python太慢,今天与matlab比较之后,顿时觉得python根本就不慢,然后回想起用python做过的应用,也没觉得性能有哪里差了,所以以后还是要自己亲自动手才会知道事情的真相!


在利用python实现算法之前,有一个不得不说的地方就是python的引用,用惯了matlab或者R的那种变量赋值方式为值的传递的人,再去用python的这种引用的方式来对变量赋值,肯定会觉得非常别扭,起码对于我个人来说就是这样,花了好长的时间才理解了python的变量传递机制,下面就总结一下,如果理解有偏差,还请大家指点指点!
总的来说就是,如果两个变量共同引用了一个对象,然后其中一个变量进行了‘父级’的操作时,两个变量的引用就分开了,如果其中的一个变量进行了‘子级’的操作时,这时两个变量共同引用的这个对象发生改变,但是两个变量还是引用这个对象,所以两个变量的引用还是绑定在同一个对象之上,只是这个对象发生了改变。
举个例子:
e.g.1

a = 1
b = a
b = 0
print a
print b

程序运行结果:

1
0

a的结果没有因为b的改变而改变,b引用了a,a引用了1这个值,所以b其实是引用了1,当b赋值为0的时候,b引用了0,但a还是引用了1,所以a还是1,b为0
e.g.2

a = [1,2,3,4,5]
b = a
a[0] = 0
print a
print b

程序运行结果:

[0,2,3,4,5]
[0,2,3,4,5]

上面的结果是b随着a的改变又改变了,看起来是跟上面的例子有矛盾,其实没有,可以这样理解,a,b都引用了[1,2,3,4,5],但是a[0] = 0之后,a引用的这个列表就变成了[0,2,3,4,5],之前的列表[1,2,3,4,5]就不存在了,现在就只有[0,2,3,4,5]所以b也是引用了[0,2,3,4,5]。
好了,现在进入正题比较matllab和python实现的遗传算法的性能,在介绍具体比较结果之前,我们来看看官方给出的比较结果,图片是比较各种语言和julia的运行效率,julia语言的时间是实际时间,其他的都是相对于julia的倍数。
这里写图片描述

我们采用相同的目标函数f(x,y,z) = x^2+3*sin(x*y*z)+y^2-z^2,求解这个目标函数在x(-10,10),y(-10,10),z(-10,10)的范围内这个函数的最大值以及最大值所对应的x,y,z的坐标。matlab由于它的矩阵运算已经经过优化了,所以矩阵运算也是相当快的,python遗传算法的实现是基于numpy库的数组运算,下面来比较两个语言的效率,由于博主功力有限,可能没有按照两种语言的最高效率的方式编写程序,但是写完之后,两种程序的风格还是很相似的,循环运用的地方也基本相同。而这两种语言影响效率的地方基本都是在循环的运用,所以最后的效率比较应该是很客观的。下面来看运行效果图:

matlab运行结果:
这里写图片描述

python的运行结果:
这里写图片描述


matlab使用了3.16s,python使用了1.68s,在这次的比较中可以看出来,基于numpy的遗传算法的效率几乎是matlab的一倍!也有可能是由于python将文件编译成了.pyc格式,从而加速程序了吧,由此看来python的效率不一定真的就很低,随着计算机硬件的发展,各种语言的效率的差距将会越来越小,而这时语言的通用性和可扩展性以及算法的实现效率将成为一种语言最大的竞争力。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要将Python遗传算法转化为MATLAB遗传算法,您需要将以下步骤进行转换: 1. 编码方式: 在Python中,遗传算法通常使用二进制编码或浮点数编码来表示个体。在MATLAB中,您可以选择相同的编码方式,或者根据问题的特性选择其他编码方式。 2. 适应度函数: 将Python中的适应度函数转化为MATLAB语法。确保适应度函数能够接受个体的编码方式,并返回适应度值。 3. 初始化种群: 在Python中,通常会使用随机函数来初始化种群。在MATLAB中,可以使用rand或randn函数来生成随机数,并将其转化为适当的编码方式。 4. 选择操作: 在Python中,选择操作通常使用轮盘赌或排名选择等方法。在MATLAB中,您可以使用相同的选择方法,或者根据您的需求自定义选择方法。 5. 交叉操作: 在Python中,交叉操作用于生成新的个体。在MATLAB中,可以使用相同的交叉操作方法,或者根据问题的特性选择其他交叉操作。 6. 变异操作: 在Python中,变异操作用于引入新的基因变体。在MATLAB中,您可以使用相同的变异操作方法,或者根据问题的特性选择其他变异操作。 7. 进化循环: 将Python中的进化循环转化为MATLAB语法。确保循环能够正确地更新种群,并执行选择、交叉和变异操作。 8. 结果输出: 根据您的需求,将最优解或最优个体的结果输出到MATLAB的工作空间或文件中。 请注意,以上步骤只是一个转换的指导,具体的转换方式可能会根据您的代码实现和问题的特性有所调整。确保在转换过程中检查代码的正确性,并进行适当的调试和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值