Javascript 不存在';t1-for-1映射

Javascript 不存在';t1-for-1映射,javascript,genetic-algorithm,traveling-salesman,Javascript,Genetic Algorithm,Traveling Salesman,这不是家庭作业,纯粹是为了我的副业 我正在为遗传算法实现置换交叉算子(求解旅行商,其中每个数字代表一个城市指数),当没有1对1映射时,我对边界情况有一些问题 考虑下面的两个基因组,并假设最后两个条目是交换的。因此,5映射到6,6映射到7。那么当我点击数字6时会发生什么呢?我应该把它改成5还是7,这会导致一个无效的旅游,一个城市会被访问两次 //initial case GenomeA: [ 2, 3, 1, 4, 0, 7, 5, 6 ] GenomeB: [ 1, 2, 0, 3, 4, 5,

这不是家庭作业,纯粹是为了我的副业

我正在为遗传算法实现置换交叉算子(求解旅行商,其中每个数字代表一个城市指数),当没有1对1映射时,我对边界情况有一些问题

考虑下面的两个基因组,并假设最后两个条目是交换的。因此,5映射到6,6映射到7。那么当我点击数字6时会发生什么呢?我应该把它改成5还是7,这会导致一个无效的旅游,一个城市会被访问两次

//initial case
GenomeA: [ 2, 3, 1, 4, 0, 7, 5, 6 ]
GenomeB: [ 1, 2, 0, 3, 4, 5, 6, 7 ]

5 <--> 6
6 <--> 7

//after mapping
GenomeA: [ 2, 3, 1, 4, 0, 6, 6, 7 ]
GenomeB: [ 1, 2, 0, 3, 4, 6, 5, 6 ]
//初始情况
热那亚:[2,3,1,4,0,7,5,6]
GenomeB:[1,2,0,3,4,5,6,7]
5  6
6  7
//测绘后
热那亚:[2,3,1,4,0,6,6,7]
GenomeB:[1,2,0,3,4,6,5,6]
如果已经映射了一个数字,我是否应该随机选择另一个数字?或者我不应该切换任何已经映射的数字

比如说,

a) Evaluate first set of numbers (5 <--> 6) 
b) Since 5 has not been mapped, map 5 to 6 and vice versa
c) Evaluate second set of numbers (6 <--> 7)
d) Since 6 is already mapped to 7, ignore this set of numbers
a)计算第一组数字(5-6)
b) 由于5尚未映射,请将5映射到6,反之亦然
c) 评估第二组数字(6 7)
d) 因为6已经映射到7,所以忽略这组数字

我发现了一种在多重映射的情况下产生合法后代的简单方法(5 6 7)


如果你正在解决基于排列的问题,我建议你看看。这是一种非常聪明的表示置换的方法,可以使用简单的交叉和变异算子。
a) First check if any number outside the substring exchanged ("originalNumber" is contained within the mapping
b) Let the mapped value of "originaNumber" be called "replacement"
c) Check if "replacement" is also contained within the mapping (if it is, this implies that there will be a clash if we set "originalNumber" to "replacement") If it isn't, simply set "originalNumber" to "replacement"
d) Otherwise, find the mapped value of "replacement" and set "originalNumber" to it.