问题标签 [genetic-algorithm]
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.
algorithm - 使用遗传算法进行稀疏参数选择
我面临一个参数选择问题,我想使用遗传算法 (GA) 来解决这个问题。我应该从 3000 个可能的参数中选择不超过 4 个参数。使用二进制染色体表示似乎是一种自然的选择。评估函数惩罚过多的“选择”属性,如果属性的数量可以接受,则评估选择。
问题是在这些稀疏的条件下,遗传算法几乎无法改善人口。平均适应度成本和“最差”个体的适应度都不会在几代人中得到改善。我所看到的只是最好个人的分数略有(甚至很小)的提高,我想这是随机抽样的结果。
使用参数索引对问题进行编码也不起作用。这很可能是因为染色体是有方向的,而选择问题不是(即染色体 [1, 2, 3, 4]; [4, 3, 2, 1]; [3, 2, 4, 1] 等相同)
你会建议什么问题表示?
PS 如果这很重要,我使用PyEvolve。
algorithm - 使用旅行商求解器确定哈密顿路径
这是一个项目,我被要求为旅行商优化问题以及哈密顿路径或循环决策问题实施启发式算法。我不需要实施本身的帮助,但对我的前进方向有疑问。
我已经有一个基于遗传算法的 TSP 启发式算法:它假设一个完整的图,从一组随机解作为总体,并努力改进几代人的总体。我也可以用它来解决哈密顿路径或循环问题吗?而不是优化以获得最短路径,我只想检查是否有路径。
现在任何完整的图都将有一条哈密顿路径,因此 TSP 启发式必须扩展到任何图。如果两个城市之间没有路径,这可以通过将边设置为某个无穷大值来完成,并返回第一条有效的哈密顿路径。
这是处理它的正确方法吗?或者我应该对哈密顿路径使用不同的启发式方法?我主要关心的是它是否是一种可行的方法,因为我可以肯定 TSP 优化是有效的(因为你从解决方案开始并改进它们),但如果哈密顿路径决定器会在固定代数中找到任何路径,则不是。
我认为最好的方法是自己测试它,但我受到时间的限制,并认为在沿着这条路线走之前我会问......(我可以为哈密顿路径找到不同的启发式)
unit-testing - 我应该如何测试遗传算法
我做了很多遗传算法;他们工作(他们很快找到一个合理的解决方案)。但我现在发现了TDD。有没有办法以 TDD 方式编写遗传算法(严重依赖随机数)?
为了更笼统地提出这个问题,您如何测试非确定性方法/功能。这是我的想法:
使用特定的种子。如果我首先在代码中犯了错误,这将无济于事,但有助于在重构时发现错误。
使用已知的数字列表。与上面类似,但我可以手动跟踪代码(这将非常乏味)。
使用一个常数。至少我知道会发生什么。当 RandomFloat(0,1) 始终返回 1 时,最好确保骰子始终读取 6。
尝试将尽可能多的非确定性代码移出 GA。这似乎很愚蠢,因为这是其目的的核心。
链接到非常好的测试书籍也将不胜感激。
genetic-algorithm - 如何找到遗传算法的最佳参数?
一些遗传算法框架,例如http://www.aforgenet.com/需要很多参数,例如突变率、种群大小等
这些参数有通用的最佳数字吗?我相信这取决于问题(适应功能延迟、突变延迟、重组延迟、进化率等)。我的第一个想法是使用一个 GA 来配置另一个 GA。
有更好的想法吗?
c++ - C ++中遗传算法的最佳数据结构?
我需要实现为我的问题(大学项目)定制的遗传算法,第一个版本将其编码为短矩阵(每条染色体的位数 x 人口大小)。
那是一个糟糕的设计,因为我声明了一个简短但只使用“0”和“1”值......但它只是一个原型,它按预期工作,现在是我开发一个新的时候了, 改良版。性能在这里很重要,但也很简单。
我四处研究并提出:
对于染色体: - 字符串类(如“0100100010”) - 布尔数组 - 向量(向量似乎针对布尔进行了优化) - 位集(听起来最自然)
对于人口: - C Array[] - Vector - Queue
我倾向于为染色体选择向量,为流行选择数组,但我想听听任何对此主题有经验的人的意见。
提前致谢!
selection - 遗传算法中比赛选择的多次迭代
嘿,伙计们,我对锦标赛选择的多次迭代如何工作感到有些困惑。
我知道您开始选择随机配对(或 k 个成员)并将获胜者放入交配池。你继续这样做,直到交配池被填满。
但是,我不确定之后会发生什么。
我们只是开始在交配池中随机交配吗?然后通过从新一代中选择随机对来重新开始选择过程?
谢谢。
c - 健身比例“轮盘赌”选择的高效实施
我目前正在用 C 语言编写键盘布局优化算法(例如由 Peter Klausler 设计的算法),并且我想按照此处所述(PDF 链接)实现适合度成比例的选择:
通过轮盘赌选择,您可以根据轮盘赌模式选择人口成员。做一个饼图,其中成员切片的面积与整个圆圈的面积是成员适应度与总人口的比值。正如你所看到的,如果圆的圆周上的一个点被随机挑选,那些具有较高适应度的人口成员将有更高的概率被选中。这确保了自然选择的发生。
问题是,我看不到如何有效地实施它。我想到了两种方法:一种不可靠,另一种很慢。
首先,慢的:
对于长度为 N 的键盘池,创建一个长度为 N 的数组,其中数组的每个元素实际上包含两个元素,一个最小值和一个最大值。每个键盘都有对应的最小值和最大值,范围取决于键盘的适应度。例如,如果键盘 0 的适应度为 10,键盘 1 的适应度为 20,键盘 2 的适应度为 25,则如下所示: 代码:
(在这种情况下,适合度越低越好,因为这意味着需要更少的努力。)
然后生成一个随机数。无论该数字属于哪个范围,相应的键盘都会被“杀死”并替换为不同键盘的后代。根据需要重复此操作多次。
问题在于它非常慢。它需要 O(N^2) 次操作才能完成。
接下来是快速的:
首先弄清楚键盘的最低和最高适应度是什么。然后在(最低适应度)和(最高适应度)之间生成一个随机数,并杀死所有适应度高于生成数的键盘。这是有效的,但不能保证只杀死一半的键盘。它还具有与“轮盘赌”选择有些不同的机制,因此它甚至可能不适用。
所以问题是,什么是有效的实现?
这本书的第 36 页有一个有效的算法(链接),但问题是,只有当您只进行一次或几次轮盘选择时,它才有效。有什么有效的方法可以同时进行许多轮盘赌选择吗?
artificial-intelligence - 您能否提供一些与 AI 相关的主题想法,以便在项目中使用?
我需要与人工智能相关的主题想法,我将以此为基础。我最感兴趣的是遗传算法和神经网络技术。我已经有了一些想法,但似乎没有一个能打动我!
任何帮助将不胜感激!:)
artificial-intelligence - 人工智能世界中有哪些令人印象深刻的算法或软件?
我一直很喜欢人工智能和进化算法的想法。不幸的是,众所周知,该领域的发展速度并没有早期预期的那么快。
我正在寻找的是一些具有“哇”因素的示例:
以意想不到的方式适应的自主学习系统。
特别动态并产生意想不到的策略的博弈代理
实际上产生了一些有意义和有见地的输出的符号表示系统
多代理系统中有趣的紧急行为。
让我们不要进入定义 AI 的语义。如果它看起来或听起来像 AI,让我们听听吧。
我先讲一个1997 年的故事。
Adrian Thompson 博士正在尝试使用遗传算法在 FPGA 中创建语音识别电路。几千代之后,他成功地让设备区分“停止”和“开始”语音命令。他检查了器件的结构,发现一些有源逻辑门与电路的其余部分断开了连接。当他禁用这些本应无用的门时,电路停止工作......
编辑
我们可以尝试继续讨论产生令人印象深刻的技术/算法吗?如果我想了解数以千计的处于早期阶段但显示出前景的人工智能技术,我可以谷歌搜索。
artificial-intelligence - 什么时候应该使用遗传算法而不是神经网络?
是否有经验法则(或一组示例)来确定何时使用遗传算法而不是神经网络(反之亦然)来解决问题?
我知道在某些情况下您可以混合使用两种方法,但我正在寻找两种方法之间的高级比较。