- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有两个 parent ABCDEEDCBA
我可以从两者中选择一个子集吗:来自父级一:ACD来自父级二:EDC
然后,我将父代复制到子代,但将所选子集按父代二元顺序复制,如下所示:后代一:DBCAE后代二:CDEBA
最佳答案
回答标题问题:
1 /**
2 * OrderedCrossoverFunction.java
3 *
4 * Copyright 2009, 2010 Jeffrey Finkelstein
5 *
6 * This file is part of jmona.
7 *
8 * jmona is free software: you can redistribute it and/or modify it under the
9 * terms of the GNU General Public License as published by the Free Software
10 * Foundation, either version 3 of the License, or (at your option) any later
11 * version.
12 *
13 * jmona is distributed in the hope that it will be useful, but WITHOUT ANY
14 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * jmona. If not, see <http://www.gnu.org/licenses/>.
19 */
20 package jmona.example.tsp.crossover;
21
22 import java.util.Collections;
23 import java.util.List;
24 import java.util.Vector;
25
26 import jmona.CrossoverFunction;
27 import jmona.functional.Range;
28 import jmona.random.RandomUtils;
29
30 /**
31 * Ordered crossover (also known as OX) for a tour in the traveling salesman
32 * problem.
33 *
34 * @author Jeffrey Finkelstein
35 * @since 0.1
36 */
37 // TODO references for the original authors of TSP crossover functions
38 public class OrderedCrossoverFunction implements
39 CrossoverFunction<List<Integer>> {
40
41 /**
42 * Perform ordered crossover (also known as OX) on the specified tours.
43 *
44 * Ordered crossover works in two stages. First, a random slice is swapped
45 * between the two tours, as in a two-point crossover. Second, repeated cities
46 * not in the swapped area are removed, and the remaining integers are added
47 * from the other tour, in the order that they appear starting from the end
48 * index of the swapped section.
49 *
50 * @param tour1
51 * A tour.
52 * @param tour2
53 * Another tour.
54 * @see jmona.CrossoverFunction#crossover(Object, Object)
55 */
56 @Override
57 public void crossover(final List<Integer> tour1, final List<Integer> tour2) {
58
59 // get the size of the tours
60 final int size = tour1.size();
61
62 // choose two random numbers for the start and end indices of the slice
63 // (one can be at index "size")
64 final int number1 = RandomUtils.randomData().nextInt(0, size - 1);
65 final int number2 = RandomUtils.randomData().nextInt(0, size);
66
67 // make the smaller the start and the larger the end
68 final int start = Math.min(number1, number2);
69 final int end = Math.max(number1, number2);
70
71 // instantiate two child tours
72 final List<Integer> child1 = new Vector<Integer>();
73 final List<Integer> child2 = new Vector<Integer>();
74
75 // add the sublist in between the start and end points to the children
76 child1.addAll(tour1.subList(start, end));
77 child2.addAll(tour2.subList(start, end));
78
79 // iterate over each city in the parent tours
80 int currentCityIndex = 0;
81 int currentCityInTour1 = 0;
82 int currentCityInTour2 = 0;
83 for (final int i : new Range(size)) {
84
85 // get the index of the current city
86 currentCityIndex = (end + i) % size;
87
88 // get the city at the current index in each of the two parent tours
89 currentCityInTour1 = tour1.get(currentCityIndex);
90 currentCityInTour2 = tour2.get(currentCityIndex);
91
92 // if child 1 does not already contain the current city in tour 2, add it
93 if (!child1.contains(currentCityInTour2)) {
94 child1.add(currentCityInTour2);
95 }
96
97 // if child 2 does not already contain the current city in tour 1, add it
98 if (!child2.contains(currentCityInTour1)) {
99 child2.add(currentCityInTour1);
100 }
101 }
102
103 // rotate the lists so the original slice is in the same place as in the
104 // parent tours
105 Collections.rotate(child1, start);
106 Collections.rotate(child2, start);
107
108 // copy the tours from the children back into the parents, because crossover
109 // functions are in-place!
110 Collections.copy(tour1, child2);
111 Collections.copy(tour2, child1);
112 }
113
114 }
更多理论:http://www.dmi.unict.it/mpavone/nc-cs/materiale/moscato89.pdf (镜像:http://www.scribd.com/doc/101866504/1989-On-Genetic-Crossover-Operators-for-Relative-Order-Preservation)
相关:http://www.scribd.com/doc/53306810/35/ORDERED-CROSSOVER :
关于artificial-intelligence - 如何实现有序交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11782881/
我们正在为跳棋游戏开发神经网络。在我们的训练数据中, 0代表空白单元格,1代表白 block ,-1代表白王,2代表黑 block ,-2代表黑王 因此,我们需要的是范围为 [-2, 2] 的激活函数
我回答了一个问题,其中给出了两个启发式算法,要对其进行 A* 以找到从起始状态到目标状态的路径。 其中一种启发式方法通过减少一个节点的扩展找到了一条路径 - 现在出于这个原因,我们可以说这种启发式方法
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试用 C 语言实现一些 AI 规划算法,但被基本概念困住了 :) 在跳到主要问题之前,我尝试实现一些支持命题逻辑的小框架: FORMULA f = PROPOSITION(a + 3 > 0)
我知道决策树试图将具有高熵的分类器放在决策树上。然而,信息增益如何发挥作用呢? 信息增益定义为: InformationGain = EntropyBefore - EntropyAfter 决策树是
我正在研究梳子方法,以减少模糊逻辑规则的“组合爆炸”。有一个示例,摘自“Programming Game AI from example”(由 Mat Buckland 撰写): The theory
我知道人工智能领域非常广阔,有很多关于它的书籍。但我只想知道我可以得到所有人工智能技术的简单介绍的任何资源,例如 它希望有 1 或 2 页的介绍所有技术及其示例,说明如何应用它们或将它们用于什么目的。
我最近对游戏中应用的蒙特卡罗树搜索产生了兴趣。 我读过几篇论文,但我使用“蒙特卡罗树搜索”Chaslot, G 的博士论文,因为我发现它更容易理解蒙特卡罗树搜索的基础知识 我试图对其进行编码,但遇到了
我最近开始在 coursera 上学习概率图形模型,开始后 2 周我开始相信我在概率方面不是那么好,因此我什至无法关注第一个主题(贝叶斯网络)。话虽如此,我想努力学习这门类(class),所以您能否向
我觉得这应该是AI的问题。 是否有任何算法可以在给定任何数字序列的情况下找到模式? 模式可以是抽象的,因为它可以是... 例如: 12112111211112 ... ( increasing num
这是我了解神经网络开始的一件事,是我不太了解最初要设置“偏见”的原因吗? 我了解Perceptron会根据以下内容计算其输出: P * W + b> 0 然后可以基于b = b + [G-O]计算学习
我正在尝试为“连续蛇”游戏实现 AI。它与普通的蛇游戏非常不同,至少就 AI 而言。基本上,蛇的驾驶方式有点像汽车,两个玩家中第一个撞上他的踪迹或另一个人的踪迹输掉比赛。此外,屏幕环绕其边框。 如果您
有人可以用非常简单的词来解释它是什么。也提供一个例子。因此,例如,如果您必须找到某事物的启发式函数,它应该是什么样子的? 以问题为例: 对于水壶问题http://www.math.tamu.edu/~
我想要一个词(例如“Apple)并处理一个文本(或者更多)。我想提出相关的术语。例如:处理Apple的文档并发现iPod,iPhone,Mac是与“苹果”相关的术语。 关于如何解决这个问题的任何想法?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
关闭。这个问题需要debugging details .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve this questio
我计划将 Nguyen-Widrow 算法用于具有 的 NN多个隐藏层 .在研究的过程中,我发现了很多歧义,我想澄清一下。 以下是 Nguyen-Widrow 算法的伪代码 Initial
我喜欢在强化学习方面做兼职研究。近年来(截至2009年)在rl-competition.org举办了强化学习竞赛。有一些非常有趣的问题,但这似乎已停止。我很想提高我的技能和知识,并与该领域的其他爱好者
假设我的第一个输入层有 10 个输入节点/神经元。假设我的隐藏层也有 10 个神经元。我的第三层也是最后一层是一个输出神经元。 如何连接层?有没有一种技术可以确定最好的方法来做到这一点,还是只是将每个
我想开发 RISK 棋盘游戏,其中包括面向计算机玩家的 AI。另外,我看了两篇文章,this和 this ,关于它,我意识到我必须学习蒙特卡罗模拟和马尔可夫链技术。我认为我必须一起使用这些技术,但我想
我是一名优秀的程序员,十分优秀!