random.shuffle Randomness
我正在尝试编写一种遗传算法进行作业,以解决旅行商问题。
我正在尝试的变异函数之一是在巡回赛中使用
阅读
1 2 3 4 5 | 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. |
有人可以在此函数中解释"随机"参数的功能吗?
我已经阅读了这个问题,但是没有回答我的问题。
如果我可以某种方式控制混洗的随机性,我尤其想使用此功能(如果有任何意义)
如果从随机数生成器两次返回相同的数字,则随机播放将是相同的。例如,
1 2 3 4 5 6 7 8 9 10 11 | 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交换成对),然后随机化(使用您要定义的一些参数)对每个新基因集执行多少操作。
从理论上讲,您可以开发一个随机数例程,该例程将使您可以精确控制随机播放的随机播放次数;但这意味着您需要确切地了解
简短的答案,如果您需要对改组进行特定的约束,例如"仅交换相邻的元素",那么最好自己实现,也许可以使用改组源代码作为指南。
如Johan所说,random参数只是为shuffle函数使用提供了随机性。因此,您可以使用默认值或提供您自己的默认值。因此,如果您希望它具有更好的随机性,则可以找到比python更好的库。
根据您对我评论的回复,听起来您正在寻找距离而不是随机性。您可能需要一组n个随机混洗并最大化距离。要计算距离,您可以使用一些我没有寻找但确实存在的实现方法。