Skip to content
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

Closed
312223105 opened this issue Oct 18, 2017 · 4 comments
Closed

如何实现取值为0或1的基因? #4

312223105 opened this issue Oct 18, 2017 · 4 comments

Comments

@312223105
Copy link

312223105 commented Oct 18, 2017

使用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操作去掉后,能够正常工作了

@PytLab
Copy link
Owner

PytLab commented Oct 18, 2017

非常感谢你提的issue,这里当时我主要只是考虑了浮点数变量的问题,因为人为定好精度和范围后,二进制的长度也就随之确定了,但是固定长度的二进制数的范围可能会超出原有的范围,例如我定好精度和范围后对应的所有可能变量是从00001010但是在遗传操作过程中可能会出现1101这种超出范围的数,因此我就在初始化的时候重新计算了近似的精度。

关于你的问题我后面会在初始化的时候进行下判断,确定是否要重新计算精度。也欢迎直接Pull Request哈

@PytLab
Copy link
Owner

PytLab commented Dec 4, 2017

版本更新到0.4.4,此bug目前已修复。非常感谢

@PytLab PytLab closed this as completed Dec 4, 2017
@WenyanZhao
Copy link

使用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操作去掉后,能够正常工作了

基因去0或者1,ranges为什么不是(0,1)而是(0,2)

@WenyanZhao
Copy link

非常感谢你提的issue,这里当时我主要只是考虑了浮点数变量的问题,因为人为定好精度和范围后,二进制的长度也就随之确定了,但是固定长度的二进制数的范围可能会超出原有的范围,例如我定好精度和范围后对应的所有可能变量是从00001010但是在遗传操作过程中可能会出现1101这种超出范围的数,因此我就在初始化的时候重新计算了近似的精度。

关于你的问题我后面会在初始化的时候进行下判断,确定是否要重新计算精度。也欢迎直接Pull Request哈

我range取(0,1)时 length = int(log2((b - a)/eps)) for i, ((a, b), eps) in enumerate(zip(self.ranges, self.eps)):得到的length全部为0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants