Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
Math 如何使用约束行和列的遗传算法子代创建N皇后问题?_Math_Artificial Intelligence_Genetic Algorithm - Fatal编程技术网

Math 如何使用约束行和列的遗传算法子代创建N皇后问题?

Math 如何使用约束行和列的遗传算法子代创建N皇后问题?,math,artificial-intelligence,genetic-algorithm,Math,Artificial Intelligence,Genetic Algorithm,对于发现的N-Queen问题,我正在尝试实现一个遗传算法来解决它 然而,让我们假设我正试图限制这个问题。我们知道,要获得攻击值0,不能在同一行和同一列中有皇后。我限制每块板上每个女王都有不同的行和列。我想让遗传算法找到一个对角线也不攻击的解决方案 我的问题是使用遗传算法为这个解决方案创建一个孩子。从两个母板生成子板的好方法是什么,即子板的行和列不能重叠?避免行和列重叠在遗传算法中是很困难的。典型的方法是通过数组中的索引隐式表示列,然后用数字1..N表示皇后 因此,8皇后问题的解决方案可以用(51

对于发现的N-Queen问题,我正在尝试实现一个遗传算法来解决它

然而,让我们假设我正试图限制这个问题。我们知道,要获得攻击值0,不能在同一行和同一列中有皇后。我限制每块板上每个女王都有不同的行和列。我想让遗传算法找到一个对角线也不攻击的解决方案


我的问题是使用遗传算法为这个解决方案创建一个孩子。从两个母板生成子板的好方法是什么,即子板的行和列不能重叠?

避免行和列重叠在遗传算法中是很困难的。典型的方法是通过数组中的索引隐式表示列,然后用数字1..N表示皇后

因此,8皇后问题的解决方案可以用(51842736)表示

如果您获取数组的任何子集,您可以将其与另一个数组混合,并确保每列(或每行)中有一个皇后,不管您怎么想


通过使用组合数学,可以避免列和行重叠(因此有N!个排列而不是N^N),但问题是这样做所需的表示(实际上可以使用整数表示完整的配置)对于交叉操作不起作用。您还将遇到整数表示的限制。使用如上所述的数组效果相当好,因此我建议首先探索这种方法。

这个问题缺乏对您的环境的关注。请显示您拥有的,例如,电路板的限制。如果你只询问如何创建孩子,那么展示所有其他需要的东西。