-
Notifications
You must be signed in to change notification settings - Fork 218
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如何实现取值为0或1的基因? #4
Comments
非常感谢你提的issue,这里当时我主要只是考虑了浮点数变量的问题,因为人为定好精度和范围后,二进制的长度也就随之确定了,但是固定长度的二进制数的范围可能会超出原有的范围,例如我定好精度和范围后对应的所有可能变量是从 关于你的问题我后面会在初始化的时候进行下判断,确定是否要重新计算精度。也欢迎直接Pull Request哈 |
版本更新到0.4.4,此bug目前已修复。非常感谢 |
基因去0或者1,ranges为什么不是(0,1)而是(0,2) |
我range取(0,1)时 length = int(log2((b - a)/eps)) for i, ((a, b), eps) in enumerate(zip(self.ranges, self.eps)):得到的length全部为0 |
使用
GAIndividual(ranges=[(0,2),(0,2)], encoding='binary', eps=1.0)
生成的永远是全0。我看了源码,在GAIndividual的构造函数中,
self.precisions = [(b - a)/(2**l-1) for l, (a, b) in zip(self.lengths, self.ranges)]
,这么一句,把精度重新计算了一下,因为在2**l-1
中有减1的操作,无论设置何值,precisions都不可能等于1。我这里有一个疑问,是否必须要在此减1?
我为了解决这个问题,定义了一个子类,重写了构造方法,将减1操作去掉后,能够正常工作了
The text was updated successfully, but these errors were encountered: