轮盘赌选择:& 不支持的操作数类型:'numpy.float64' 和 'numpy.float64'
Roulette Wheel Selection : unsupported operand type(s) for &: 'numpy.float64' and 'numpy.float64'
我在 python 中构建 parent 遗传算法选择与轮盘赌。
acc['left']
是左边界,acc['right']
是每个个体概率累积的右边界。 rw
是轮盘的随机数,而n_rw
是rw
.
的数
这是 acc
数据框:
accuracy rank prob_fitness left right
0 0.825152 6.0 0.109091 0.000000 0.109091
1 0.839545 9.0 0.163636 0.109091 0.272727
2 0.807727 2.5 0.045455 0.272727 0.318182
3 0.840000 10.0 0.181818 0.318182 0.500000
4 0.807727 2.5 0.045455 0.500000 0.545455
5 0.820152 4.0 0.072727 0.545455 0.618182
6 0.832576 8.0 0.145455 0.618182 0.763636
7 0.821364 5.0 0.090909 0.763636 0.854545
8 0.802727 1.0 0.018182 0.854545 0.872727
9 0.829091 7.0 0.127273 0.872727 1.000000
这是 rw
:
'array([ 0.89676, 0.8007 , 0.35212, 0.08043, 0.51044, 0.61213, 0.3392 , 0.96687, 0.2554 , 0.97215])'
我正在尝试使用此代码确定哪一个将成为 parent 候选者。但是没用。
acc['parent'] = np.zeros(pop_size)
o = 0
b = 0
while o < pop_size:
o = o+1
while b < n_rw:
acc['parent'] = (rw[b] > acc['left'][o] & rw[b] <= acc['right'][o])
if acc['parent'] == True:
b = n_rw
else:
b = b+1
acc
结果为:
TypeError: unsupported operand type(s) for &: 'numpy.float64' and 'numpy.float64'
你能帮帮我吗?提前致谢
在你的情况下,像这样的东西应该可以完成工作:
acc['parent'] = np.full(pop_size, False, dtype=bool)
o = 0
while o < pop_size:
b = 0
while b < n_rw:
acc.loc[o,'parent'] = ((rw[b] > acc['left'][o]) & (rw[b] <= acc['right'][o]))
现在您正在写入 DataFrame 并实际更改之前启动的值。
if acc.loc[o,'parent'] == True:
break
else:
b = b+1
o = o+1
print acc
但是,我不确定您的代码在做什么。
我在 python 中构建 parent 遗传算法选择与轮盘赌。
acc['left']
是左边界,acc['right']
是每个个体概率累积的右边界。 rw
是轮盘的随机数,而n_rw
是rw
.
这是 acc
数据框:
accuracy rank prob_fitness left right
0 0.825152 6.0 0.109091 0.000000 0.109091
1 0.839545 9.0 0.163636 0.109091 0.272727
2 0.807727 2.5 0.045455 0.272727 0.318182
3 0.840000 10.0 0.181818 0.318182 0.500000
4 0.807727 2.5 0.045455 0.500000 0.545455
5 0.820152 4.0 0.072727 0.545455 0.618182
6 0.832576 8.0 0.145455 0.618182 0.763636
7 0.821364 5.0 0.090909 0.763636 0.854545
8 0.802727 1.0 0.018182 0.854545 0.872727
9 0.829091 7.0 0.127273 0.872727 1.000000
这是 rw
:
'array([ 0.89676, 0.8007 , 0.35212, 0.08043, 0.51044, 0.61213, 0.3392 , 0.96687, 0.2554 , 0.97215])'
我正在尝试使用此代码确定哪一个将成为 parent 候选者。但是没用。
acc['parent'] = np.zeros(pop_size)
o = 0
b = 0
while o < pop_size:
o = o+1
while b < n_rw:
acc['parent'] = (rw[b] > acc['left'][o] & rw[b] <= acc['right'][o])
if acc['parent'] == True:
b = n_rw
else:
b = b+1
acc
结果为:
TypeError: unsupported operand type(s) for &: 'numpy.float64' and 'numpy.float64'
你能帮帮我吗?提前致谢
在你的情况下,像这样的东西应该可以完成工作:
acc['parent'] = np.full(pop_size, False, dtype=bool)
o = 0
while o < pop_size:
b = 0
while b < n_rw:
acc.loc[o,'parent'] = ((rw[b] > acc['left'][o]) & (rw[b] <= acc['right'][o]))
现在您正在写入 DataFrame 并实际更改之前启动的值。
if acc.loc[o,'parent'] == True:
break
else:
b = b+1
o = o+1
print acc
但是,我不确定您的代码在做什么。