降低基因的非均匀分布

问题描述

我目前有一个可以在 [1,1500] 中取整数值的基因。

我不喜欢 1500 的上限,它就像一个神奇的数字。每个整数都可以统一选择,但是在探索时我觉得从 1 到 2 的变化与从 1001 到 1002 的变化不同(但两者的概率相同)。

是否有一种常见/已知的方式:

  1. 非均匀地选择一个值,概率降低:比如说“小”值(例如“5”)作为比中等值(例如“200”)更高的被选择概率,以及“中等” ' 值比高值(例如'1000')有更高的概率被选中,'更高'需要以某种方式定义......
  2. 探索没有边界的完整整数范围,但避免从一开始就拥有疯狂的高值(可能类似于有界演化范围)

解决方法

您是否考虑过随机分布,例如正态分布?

对于正态分布,您可以指定随机值的中心以及标准偏差的宽度。由这种正态分布生成的随机数在指定中心附近的可能性要高得多,而不是在 1、2 或 3 个标准差之外的值区域。正态分布的值分布如下所示:

normal distribution plot 资料来源:[3]

您可以在维基百科 [2] [3] 上阅读有关正态分布或标准差的更多信息

如果您不喜欢这个特定的概率分布,因为您认为它太平坦或太阶梯,那么还有很多其他分布可供选择。


在代码中,这可以用 Numpy 实现:

import numpy as np

rng = np.random.default_rng()
gene_value = int(np.abs(rng.normal(loc=0,scale=500)))

这利用了 Numpy 随机法线生成器 [4]。中心设置为 0,标准差设置为 500,使得值更接近 0 的可能性更大,而接近 1500 或更高的值的可能性很小。


[2] https://en.wikipedia.org/wiki/Normal_distribution

[3] https://en.wikipedia.org/wiki/Standard_deviation

[4] https://numpy.org/doc/stable/reference/random/generated/numpy.random.Generator.normal.html