python - random.shuffle 随机性

标签 python random optional-parameters shuffle

我正在尝试为家庭作业编写一个遗传算法来解决旅行商问题。

我正在尝试的变异函数之一是在游览中使用 random.shuffle

当我阅读 random.shuffle 的文档时,我看到:

shuffle(self, x, random=None, int=<type 'int'>) method of random.Random instance
x, random=random.random -> shuffle list x in place; return None.

Optional arg random is a 0-argument function returning a random
float in [0.0, 1.0); by default, the standard random.random.

有人可以解释一下这个函数中“random”参数的作用吗? 我读过this question ,但它没有回答我的问题。

如果我能以某种方式控制洗牌的随机性(如果这有意义的话),我特别想使用这个函数

最佳答案

random 参数用于指定(另一个)随机数生成器。它是一个函数,期望返回 0<=x<1

范围内的统一随机数

如果随机数生成器两次返回相同的数字,则洗牌将相同。例如,

def mynonrandom():
 return 0.1

q
[1, 2, 3, 4]
random.shuffle(q, mynonrandom)
q
[2, 3, 4, 1]
random.shuffle(q, mynonrandom)
q
[3, 4, 1, 2]

请注意,在这种特殊情况下,我每次都得到 -1 的转变。随机输入的确切结果可能取决于 random.shuffle 的实现。

对于遗传算法,您希望能够具有可变大小的洗牌随机性。 random.shuffle 没有做到这一点。您可能需要定义一些示例更改(例如,距离 N 交换的配对),然后随机化(使用您将定义的一些参数)您为每组新基因执行的这些操作的数量。

关于python - random.shuffle 随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9072955/

相关文章:

java - 用连续的数字播种 java.util.Random

f# - 使用 F# 的可选参数和选项类型

java - Java 中的可选方法参数

python - 使用 regex 基于括号后的大写字符删除首字母缩略词

javascript - 获取错误 SyntaxError : Unexpected token < django-jquery-fileupload

python - 用于存储巨大(>5GB)排序文件的数据结构

java - 有没有更好的方法让我的计算机对手生成 (3 > 随机长度 <= 7) 的单词?

c++ - 避免使用相同生成器 <random> c++ 11 的相同随机数

C# 为所有可选参数提供值

python - 用于时变颜色的 Matplotlib Line3DCollection