Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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
Java 一种用变量代替二进制数字作为总体的遗传算法_Java_Algorithm_Optimization_Computer Science_Genetic Algorithm - Fatal编程技术网

Java 一种用变量代替二进制数字作为总体的遗传算法

Java 一种用变量代替二进制数字作为总体的遗传算法,java,algorithm,optimization,computer-science,genetic-algorithm,Java,Algorithm,Optimization,Computer Science,Genetic Algorithm,所以我知道bog标准遗传算法使用一个字符串/二进制数字数组作为总体,然后从中创建一系列染色体。运行后,具有最高适应度的染色体被认为是最理想的解决方案。我的问题是,我可以使用数组引用来替换二进制字符串/数组吗 例如,我正在尝试创建一个算法,该算法可以自动化飞机排队等待一条跑道。有两种输入:希望起飞的飞机和希望降落的飞机。不需要太多细节,当飞机飞行时,它会在后面产生扭曲的空气(),这对后续飞机来说是极其危险的。飞机的重量/大小与其产生的尾迹湍流大小成正比。为了防止它危及其他飞机,每架飞机之间都有一段

所以我知道bog标准遗传算法使用一个字符串/二进制数字数组作为总体,然后从中创建一系列染色体。运行后,具有最高适应度的染色体被认为是最理想的解决方案。我的问题是,我可以使用数组引用来替换二进制字符串/数组吗

例如,我正在尝试创建一个算法,该算法可以自动化飞机排队等待一条跑道。有两种输入:希望起飞的飞机和希望降落的飞机。不需要太多细节,当飞机飞行时,它会在后面产生扭曲的空气(),这对后续飞机来说是极其危险的。飞机的重量/大小与其产生的尾迹湍流大小成正比。为了防止它危及其他飞机,每架飞机之间都有一段规定的等待时间,这取决于领先飞机的大小。这方面的示例如下所示:

Succeeding Aircraft   Lead Aircraft   Wake Turbulence Gap (NM)
-------------------   -------------   --------------------------
        H                   H                    4
        M                   H                    5
        S                   H                    6
        L                   H                    7
        H                   M                    3
...
其中H=重,M=中,S=小,L=轻,NM=海里

这些数据将保存在一个单独的数组中,该数组可由fitness函数调用。我想知道的是,我是否能做出一个有效的遗传算法,主要利用交叉,因为我看不到一种方法,我可以使用变异

人口会是这样的:

input: N001,N002,N003,N004,N005,...,N###
以“,”分隔的字符串或一维数组

每个基因(即N001)将指2D阵列中的一个位置,在该位置将存储尾迹湍流类别(H、M、S、L)及其所需动作(起飞或着陆)。(即dataArray[001][1]=尾流湍流类别)

为了计算适合度,我得出以下结论:

input = "N001.N002.N003.N004.N005.N006. ... Nnnn";

String [] aircraft = input.split(".");
double totalWeight = 0;

for (i = 0; i <= aircraft.length; i++) {
   priority = Array[i+1][1];
   action1 = Array[i][2];
   action2 = Array[i+1][2];
   wakeTurb1 = Array[i][3];
   wkaeTurb2 = Array[i+1][3];

   if(priority == 1) {
      totalWeight = totalWeight + 2^i;
   }

   if(action1 == 0 && action2 == 0) {
      wakeTurbVal = tAftT[wakeTurb2][wakeTurb1]; }
   else if(action1 == 0 && action2 == 1) {
      wakeTurbVal = lAftT[wakeTurb2][wakeTurb1]; }
   else if(action1 == 1 && action2 == 1) {
      wakeTurbVal = lAftL[wakeTurb2][wakeTurb1]; }
   else if(action1 = 1 && action2 == 0) {
      wakeTurbVal = tAftL[wakeTurb2][wakeTurb1]; }

   totalWeight = totalWeight + wakeTurbVal;
}
input=“N001.N002.N003.N004.N005.N006…Nnnn”;
字符串[]飞机=输入。拆分(“.”);
双倍总重量=0;

对于(i=0;i)来说,这是一个有趣的问题,但是因为它不属于堆栈溢出的范围(在这个问题上有两个悬而未决的接近投票)。例如,如果你可以编辑你的问题,并用你的编码尝试来丰富它,那么这将是一个很好的问题。看看MOEA框架(www.moeaframework.org)。它提供了极好的优化选项,并允许在遗传算法中使用二进制以外的变量。您的问题也可能更适合多目标方法。