我正在尝试为家庭作业编写一个遗传算法来解决旅行商问题。
我正在尝试的变异函数之一是在游览中使用 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/