【发布时间】:2012-08-19 04:38:24
【问题描述】:
一年多来,我一直在研究一个多目标优化问题,该问题使用遗传算法来显示最佳解决方案。
问题涉及根据一些标准将人员分配到不同的团队。我已经完成了初始化阶段,适应度函数编码也完成了。但是,我无法将生成的(二维数组)解决方案保存为对象并将它们暂时保存在内存中,以便它们可以在 GA 的后期阶段使用:选择、交叉和变异。
我正在使用轮盘赌选择和略有不同的交叉和变异算法。我对这些没有问题。只是我无法找到一种方法将一个生成的解决方案(在这种情况下是完整的团队分配)暂时保存在内存中,然后生成另一个解决方案并将其保存在内存中,然后再保存一个,依此类推。
我尝试了很多我能想到的不同的东西,其中我能记住的有两个: (i) 将 2d 数组类型从 int 更改为 Object,但这会产生错误,因为创建团队的 2d 数组使用另一个 int 数组来定位列表中的人员 ID 索引位置; (ii) 使用静态类字段变量,在初始种群生成类运行后每次递增。
我已经研究了几个月,并尝试了我能想到的一切。如果有人可以指导我,甚至给我一个关于如何保存二维数组以便我可以将其用于 GA 后期阶段的提示,那将是非常有帮助的。
谢谢
已编辑:这是具有创建团队的 2d 数组位的初始人口类:每一行代表团队编号,列是成员 ID(我已经排除了一些引用其他类的代码,而是将其放在文字中):
【问题讨论】:
-
您说您不能将生成的解决方案暂时存储在内存中……我的第一个问题是,“这个数据集有多大?”其次,您能否为我们提供一些专门用于这部分的代码?第三,从
int到Object不是一个好主意,如果你能看到使用包装类的优势,你至少要升级到Integer。 -
您能否提供有关您的实施的详细信息?关于您的“二维”阵列的信息怎么样?它有多大?为什么不能保存解决方案?你尝试了什么?
-
我已编辑帖子以添加团队创建二维数组的示例代码。我最初想重复组创建 120 次,因为要在 120 个个体上应用选择、交叉和变异,所以实际上二维数组是创建 120 个不同的团队分配并将这 120 个团队分配保存在临时内存中
-
@Makoto:我也尝试过 Integer to Object 但这也没有用
-
这是唯一的位置
noTeams填充了一个整数值吗?如果是这样,您的数组将无法工作的原因是因为您在第一维中没有分配空间。
标签: java genetic-algorithm multidimensional-array