问题标签 [roulette-wheel-selection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
55319 浏览

genetic-algorithm - 遗传算法中的轮盘赌选择

任何人都可以为轮盘赌选择功能提供一些伪代码吗?我将如何实现这一点:

替代文字

我真的不明白如何阅读这个数学符号。我从不接受任何概率或统计数据。

0 投票
12 回答
90346 浏览

algorithm - 轮盘选择算法

任何人都可以为轮盘赌选择功能提供一些伪代码吗?我将如何实现这个:我真的不明白如何阅读这个数学符号。我想要通用算法。

0 投票
3 回答
6826 浏览

genetic-algorithm - 遗传算法中的轮盘赌选择。人口需要先排序?

在遗传算法中,当使用轮盘选择方法选择成员进行交叉时,是否首先需要对种群进行适应度排序?

可能性似乎是:

  1. 首先按适应度升序对种群进行排序
  2. 按适应度降序对种群进行排序
  3. 不要对人口进行排序,让轮盘赌球落在它可能的地方。

我认为无论哪种方式进行排序都可能没有效果 - 无论较大的切片是否组合在一起,随机落在包含不同大小(按健身)切片的轮子上的鹅卵石将具有完全相同的结果机会。但我不是 100% 相信的。

你怎么看?

每一代都需要进行排序也会影响算法的速度,所以我不希望这样做(如果使用精英主义,我会进行排序,但我不在这种情况下)。谢谢,如果你知道,因为我无法通过谷歌等找到明确的答案。

0 投票
1 回答
2891 浏览

c - 健身比例“轮盘赌”选择的高效实施

我目前正在用 C 语言编写键盘布局优化算法(例如由 Peter Klausler 设计的算法),并且我想按照此处所述(PDF 链接)实现适合度成比例的选择:

通过轮盘赌选择,您可以根据轮盘赌模式选择人口成员。做一个饼图,其中成员切片的面积与整个圆圈的面积是成员适应度与总人口的比值。正如你所看到的,如果圆的圆周上的一个点被随机挑选,那些具有较高适应度的人口成员将有更高的概率被选中。这确保了自然选择的发生。

问题是,我看不到如何有效地实施它。我想到了两种方法:一种不可靠,另一种很慢。

首先,慢的:

对于长度为 N 的键盘池,创建一个长度为 N 的数组,其中数组的每个元素实际上包含两个元素,一个最小值和一个最大值。每个键盘都有对应的最小值和最大值,范围取决于键盘的适应度。例如,如果键盘 0 的适应度为 10,键盘 1 的适应度为 20,键盘 2 的适应度为 25,则如下所示: 代码:

(在这种情况下,适合度越低越好,因为这意味着需要更少的努力。)

然后生成一个随机数。无论该数字属于哪个范围,相应的键盘都会被“杀死”并替换为不同键盘的后代。根据需要重复此操作多次。

问题在于它非常慢。它需要 O(N^2) 次操作才能完成。

接下来是快速的:

首先弄清楚键盘的最低和最高适应度是什么。然后在(最低适应度)和(最高适应度)之间生成一个随机数,并杀死所有适应度高于生成数的键盘。这是有效的,但不能保证只杀死一半的键盘。它还具有与“轮盘赌”选择有些不同的机制,因此它甚至可能不适用。

所以问题是,什么是有效的实现?

这本书的第 36 页有一个有效的算法(链接),但问题是,只有当您只进行一次或几次轮盘选择时,它才有效。有什么有效的方法可以同时进行许多轮盘赌选择吗?

0 投票
1 回答
693 浏览

sql - 使用 SQL 查询进行轮盘赌选择

我正在实施轮盘赌选择,我想在 SQL 中保留尽可能多的代码。我的尝试产生了下面的查询。$1 是一个随机变量,其范围与我发送给 SQL 代码的权重相同(不清楚如何使 random() 只被调用一次)。重量是车轮上行槽的大小。random() 是一个返回随机数的 SQLITE 函数。这是完整的查询:

我的问题是,这还是轮盘赌吗?基本算法需要对所有权重求和,然后选择 0..sum 范围内的随机值——这将确定选择哪一行。相反,这个例程首先过滤所有满足一个随机数的行,然后打乱它们的顺序并选择第一个。

一个微妙的变化是使用 $1 而不是第二次调用 random()。这可能会使例程更加公平,但我不确定它是否确实如此——这意味着每一行都有自己的机会被过滤或不被过滤。

所以,我想我是在问这个镜子轮盘赌多少钱,因为它显然遵循不同的步骤。但它反映了结果吗?

0 投票
7 回答
52784 浏览

java - 用 Java 编写的 GA

我正在尝试根据我从“游戏程序员的人工智能技术”一书中学到的技术编写一个遗传算法,该技术使用二进制编码和适应度比例选择(也称为轮盘赌选择)对人口的基因进行选择在程序中随机生成一个二维数组。

我最近遇到了一段伪代码并尝试实现它,但是在我需要做的细节方面遇到了一些问题。我检查了许多书籍和一些开源代码,但仍在努力取得进展。我知道我必须得到人口总适应度的总和,在总和和零之间选择一个随机数,然后如果该数字大于父母将其覆盖,但我正在努力实现这些想法.

由于我的 Java 生锈了,因此非常感谢您对实现这些想法的任何帮助。

0 投票
3 回答
6191 浏览

flash - 聊天的体系结构

有人可以向我解释一下聊天背后的架构吗?我正在考虑一个类似的项目,它只会实现音频支持(对于初学者)。设置闪存服务器的最佳方法是什么?如果是这样,我应该如何进入闪存,我需要 flex 4 吗?我有一些 c++、c# 和 java 的初学者经验,但我从来没有为 web 开发过任何东西。

我还想知道随机发生器如何匹配参与者。你将如何编写这样的代码。

我显然在这里毫无头绪,我非常感谢有关此问题的一些建议-我不希望复制和粘贴解决方案。很高兴听到你们将如何解决这个问题。

非常感谢你

0 投票
2 回答
1433 浏览

java - 遗传算法的轮盘选择函数

所以我为我的遗传算法编写了一个轮盘赌选择函数,如下所示:

问题是它有时会返回空白字符串,它只是为了满足返回条件而放置的。这通常不是问题,但在某些运行期间,它会导致 GA 终止,因为下一步涉及交叉阶段。有任何想法吗?

0 投票
1 回答
12351 浏览

selection - 遗传算法 - 什么是稳态选择?

我正在做关于遗传算法的最后一年项目 - 特别是 Dawkins Weasel 类型。我已经完成了轮盘赌选择和锦标赛选择,仍然要做稳态选择,但我不确定它到底是什么,我在网上找到的参考资料都很模糊。

有谁知道应该如何实施?任何指针都会很棒。

非常感谢。

0 投票
2 回答
1938 浏览

genetic-algorithm - 用遗传算法、适应度、变异解决填字游戏

我正在努力为学校做一个实验室。我正在尝试使用遗传算法解决填字游戏。问题是这不是很好(它仍然太随机)我将尝试简要说明我的程序现在是如何实现的:

如果我有拼图(# 是块,0 是空白)

以及作为该谜题解决方案候选词的集合。我的 DNA 只是作为一维阵列的矩阵。

我的第一组人从我的话包含的字母池中随机生成了 DNA。

我使用轮盘赌选择进行选择。有一些关于组合和突变机会的参数,但如果发生突变,那么我总是会改变 25% 的 DNA。我用我的字母池中的随机字母对其进行更改。(这可能会产生负面影响,因为突变会破坏已经形成的单词)

现在是适应度函数:我横向和纵向遍历矩阵:如果我找到一个单词然后 FITNESS += word.lengh +1

如果我发现一个字符串是某个单词的一部分,那么 FITNESS += word.length / (puzzle_size*4) 。无论如何,它应该给出一个介于 0 和 1 之间的值。因此它可以从“工具”中找到“到”并将 X 广告到 FITNESS,然后在它从“工具”中找到“太”并将另一个 Y 添加到 FITNESS 之后。

我的几代人实际上并没有随着时间的推移而改善。它们看起来是随机的。因此,即使在 400 代之后,池中的 1000-2000(这些数字并不重要),当解决方案应该有 6 个单词时,我也会得到一个包含 1-2 个单词(2 或 3 个字母)的解决方案。