如何使用random.randint查找具有不等概率的随机0和1

时间:2016-06-15 01:36:27

标签: python random genetic-algorithm deap

我在Python中使用DEAP工具箱进行遗传算法。

toolbox.register("attr_bool", random.randint, 0, 1)是GA中随机选择0和1的函数。我想迫使GA随机选择0和1,但例如80%一个,其余为零。

我认为srng.binomial(X.shape, p=retain_prob)是一种选择,但我想使用random.randint函数。想知道我们怎么做到这一点?

3 个答案:

答案 0 :(得分:2)

一种自然的方式是使用表达式

.col-content {
  overflow: hidden;
  border-style: solid;
  border-color: rgba(5, 47, 90, 0.8);
  border-width: medium;
  border-radius: 5px;
  padding: 0 15px;
  max-height: auto;
  }

您可以将其抽象为函数:

1 if random.random() <= 0.8 else 0

然后def bernoulli(p): return 1 if random.random() <= p else 0 将给出1或0所需的概率。我不熟悉你正在使用的GA库,但bernoulli(0.8)是可调用的,因此它应该可以工作。

答案 1 :(得分:2)

toolbox.register的参数必须是一个函数,以及运行它时要传递给该函数的参数

由于0 if random.randint(0, 4) == 0 else 1不是函数(它是一个随机数),因此出现错误。修复方法是将此表达式打包到一个可以传递给toolbox.register的函数中:

# returns 1 with probability p and 0 with probability 1-p
def bernoulli(p):
    if random.random() < p:
        return 1
    else:
        return 0

toolbox.register("attr_bool", bernoulli, 0.8)

答案 2 :(得分:1)

random.randint不提供此类功能,但如果您想留在random包中,则可以使用random.choice([0] * 1 + [1] * 4)

numpy.random还通过np.random.choice([0, 1], p=[0.2, 0.8])提供此功能。