我正在努力研究TSP遗传算法。我是GA的新手,我读过很多关于它的文件。我知道需要创建初始化然后找出每个人的适应性然后做突变等等。但是,我对JAVA编程真的很陌生。我不确定如何创建初始化(将所有人口的所有个体初始化为所有有效游览而不重复)。 附:一些资源代码和在线教程对我来说太难了。
这就是我到目前为止所得到的。请指出我需要什么以及我做错了什么以及我还需要在代码中添加什么。
private void initialize(){
for(int i =0; i< population.length; i++){
for(int j =0; j < population[i].length; j++){
}
}
答案 0 :(得分:1)
一般来说,你的问题与遗传算法关系不大,而且很难用Java初始化一组排列。
通常,TSP的答案会被编码为要访问的城市列表。因此,对于4个城市,这可能看起来像[0, 1, 2, 3]
,意思是&#34;访问第一个,然后是第二个,然后是第三个,然后是第四个&#34;。 所有有效答案都是这个基本答案的排列。。如果你对往返(你最后从最后一个城市到第一个城市)感兴趣,那么你可以通过改组最后的N-1元素来避免一些对称。
让我们用Java编写简单的排列方法:
// initialize an ArrayList of n integers, from 0 to N-1
ArrayList<Integer> base = new ArrayList<>();
for (int i=0; i<n; i++) base.add(i);
// initialize each answer to a permutation of the base answer
Random r = new Random(); // use a seed if you want repeatable runs
for (Individual p : population) {
int[] perm = new int[base.size()];
Collections.shuffle(base, r);
base.toArray(perm);
p.setAnswer(perm);
}
我假设您使用的实际int
对象不仅包含答案,还包含健身和其他属性,而不是Individual
的2D数组。