繁体   English   中英

java将2d数组保存为遗传算法中的对象

[英]java saving 2d array as an object in genetic algorithm

一年多以来,我一直在研究使用遗传算法显示最佳解决方案的多目标优化问题。

问题涉及根据许多标准将人员分配到不同的团队。 我已经完成了初始化阶段,适应度函数编码也已完成。 但是,我在将生成的(二维数组)解决方案另存为对象时遇到麻烦,无法将它们临时保存在内存中,以便可以在GA的后续阶段中使用它们:选择,交叉和变异。

我正在使用轮盘赌选择和稍微不同的交叉和变异算法。 我没有这些问题。 只是我一直无法找到一种方法来临时将1个生成的解决方案(在这种情况下为完整的团队分配)保存在内存中,然后生成另一个解决方案并将其保存在内存中,然后再等等。

我尝试了很多我可以想到的不同事情,其中​​我可以记住的两件事是:(i)将2d数组类型从int更改为Object,但这产生了错误,因为创建团队的2d数组使用另一个int数组,用于在列表中定位人员ID索引位置; (ii)使用静态类别字段变量,该变量将在运行初始总体生成类别后每次递增。

我已经研究了几个月,并尝试了所有我能想到的。 如果有人可以指导我甚至给我一个提示,说明如何保存2d数组,以便将其用于GA的后续阶段,将大有帮助。

谢谢

编辑:这是具有2d数组位的初始人口类别,用于创建团队:每行代表团队编号,列是会员ID(我已经排除了一些引用其他类别的代码,而是用语言写出来):

您的问题是体系结构之一。 您是在单独的类别中创建人口,而没有将其发送到任何地方。 您想将初始化包装在另一个类中。 当我编写新的GA时,我通常会这样做。

class GeneticAlgorithm {

  public static int[][] population;
  public static double mutationRate;
  public static double crossoverRate;

  public int[][] initializePopulation //this is where your createTeams method would go
  public int[][] mutation 
  public int[][] crossover

  public void runGA

}

这是我用于通用航空的基本结构。 在runGA方法中,您可以根据自己的退出条件或静态数循环任意多的代。 每一代,您只需将当前种群传递给您的变异和交叉函数,然后返回您得到的种群。 在执行所有这些操作时,您的总体将安全地存储在一个变量中,该变量可以在GA终止后保存或输出。

希望能有所帮助,并祝您好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM