gpt4 book ai didi

algorithm - 如何生成随机的唯一数字,其中相邻数字在指定范围内?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:13:54 26 4
gpt4 key购买 nike

所以假设我想在a[]n之间生成一个不重复的0随机整数数组。但我也要确保n。应允许缠绕,以便

abs(a[i]-(a[i+1]+a.length)) < maxRange || abs((a[i]+a.length)-a[i+1]) || abs(a[i]-a[i+1]) < maxRange.

总是真的。例如,如果 abs(a[i]-a[i+1]) < maxRangen=6则数组 maxRange =2有效,因为 a={1,3,2,4,0,5}
但是 3-1 = 2, 3-2 = 1, 4-2 = 2, (0+n)-4 = 2, and (0+n)-5 = 1无效,因为 a={0,3,2,4,1,5}
差异的分布应均匀且在 3-0=3 and 4-1=3abs(a[i]-(a[i+1]+a.length))范围内
我觉得肯定已经有一个算法可以做到这一点,但我似乎无法通过谷歌找到它(也许我使用了不正确的术语)。我能想到的实现这一点的唯一方法是对每一个可能的置换进行强制搜索,并检查是否满足确定有效置换的条件,然后随机选择其中一个置换。然而,对于较长的阵列,这可能会变得非常昂贵的计算也许最好把它看作是一个不重复的随机游走或其他东西。但我不知道如何实现。有什么想法吗?语言不可知论的解决方案会很好。
为了提供一些额外的信息,我想用这个在一个地理位置或地理位置都不重要的遗传算法中进行锦标赛选择例如,个人a[0]和a[1]将参加一个锦标赛(根据健康状况选择赢家),输家将被超越/替换然后a[2]和a[3]等。我之所以要这样做,是为了让我可以一次性评估所有个体,然后一次性完成交叉阶段,然后重复这些阶段直到完成我之所以要这样做,是因为我可以保证每一代人都经过评估,不像典型的稳态遗传算法。

最佳答案

这是一个发表在回答中的评论,因为它要大到适合一个评论。这不是一个答案,因为它只给了我们一个方向,而不是最终的解决方案。
当我读到这篇文章的标题时,我明白了你的思考方式可能是阻止你看到答案的障碍。在标题中,您使用了random一词,但在描述问题的方式中,您使用了walk一词。
也许最好把它看作是一个不重复的随机游走或其他东西。
正如菲利普·奥利维尔在评论中指出的那样
一个不到20行代码的简单约束规划模型可以通过一个随机变量/值选择的启发式方法非常有效地解决这个问题。
我也认为解决这个问题的方向是像你提到的那样使用步行和菲利普提到的约束,但是要把它放到一个已经很好知道的上下文中,Hamiltonian pathalgorithms)。
当您注意到tournament selection时,您实际上描述了一些约束,即值是整数,它们的数量是固定的,它们是连续的。
在标题中,当你注意到within a specified range你实际上描述了其他约束,在两个节点之间有一个最大的距离,并且访问节点形成一个周期。
真正有趣的是,在体育比赛的意义上,你也使用这个词,但是如果你在图论的上下文中查找这个词,你会发现大量与你所寻求的有关的信息。
另一种方法可能是tournament的变化。

关于algorithm - 如何生成随机的唯一数字,其中相邻数字在指定范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52808790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com