Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 遗传算法中的可变长度染色体_Algorithm_Artificial Intelligence_Genetic Algorithm_Evolutionary Algorithm - Fatal编程技术网

Algorithm 遗传算法中的可变长度染色体

Algorithm 遗传算法中的可变长度染色体,algorithm,artificial-intelligence,genetic-algorithm,evolutionary-algorithm,Algorithm,Artificial Intelligence,Genetic Algorithm,Evolutionary Algorithm,如果我有如下矩阵 test case | branch 1 | branch 2 | branch 3 | branch 4 ----------------------------------------------------- Test1 | x | o | x | o Test2 | o | o | x | o Test3 | x | x | x

如果我有如下矩阵

test case | branch 1 | branch 2 | branch 3 | branch 4
-----------------------------------------------------
Test1     | x        | o        | x        | o
Test2     | o        | o        | x        | o
Test3     | x        | x        | x        | o
Test4     | x        | o        | x        | x
Test5     | x        | x        | x        | x
我正在尝试优化最大分支覆盖率,但最小测试这可能意味着我的GA染色体将需要存储100多个测试或仅一个测试

例如,在这个例子中,我只需要Test5,这样我就可以得到一个二元染色体

101
然而,我可能需要更多

101001
这是要使用的表示法吗?如果是这样的话,我需要使用什么样的变异和交叉算子呢?

这可能有效

要进行变异,您可以包括或排除一些测试(或通过所有测试并将它们从包含更改为排除,或以较小的概率将它们从包含更改为排除)

要进行交叉,你可以通过两条染色体,如果两条染色体都包含一个测试,就包含它,如果两条染色体都排除它,就排除它,如果一条染色体包含它,就包含或排除它

为了有效地执行此操作,您应该对测试进行排序,以便测试1和5将是
001101
,而不是
101001

当然,我假设每个测试只能包含一次,但是,如果不是,这不会改变很多方法

我只会选择二进制表示,如果你真的要用二进制存储的话。当在二元水平上进行突变和交叉时,你经常在染色体中使用二元,但在这里它不太可能(例如,将测试3(
11
)更改为测试7(
111
)需要1位更改(很可能),而将测试3(
11
)更改为测试12(
1100
)需要4位更改(不太可能)-因此与其他测试相比,某些测试之间的关系更强,不太可能代表实际的关系(如果有的话,通常会导致糟糕的结果和/或性能),因此您也可以使用十进制表示法(或者是足够小和容易操作的组合)

请记住,这不一定适用于您的特定应用程序,因为测试可能是相互依赖的,这意味着如果包括一个测试,则还需要包括另一个。如果发生这种情况,您可能希望对所有需要彼此的测试进行分组,或者有3个选项(例如0/1/2)如果一种方法依赖于另一种方法,或者可能有其他因素会使上述方法不太理想,那么您只需要考虑突变和交叉的实际作用,以及这对您的应用是否有意义