嘿伙计们,我想知道我是否可以就提高实施遗传算法的程序的整体效率提出一些建议.是的,这是一个分配问题,但我已经完成了我自己的任务,并且只是想找到一种方法来让它更好地执行 问题描述
我的程序目前读取由成分类型h或p构成的给定链(示例hphpphhphpphphhpphph)对于每个H和P,它生成随机移动(向上,向下,向左,向右)并将移动添加到arrayList包含在"染色体"对象中.一开始,该计划为10,000个染色体产生了19个动作
SecureRandom sec = new SecureRandom();
byte[] sbuf = sec.generateSeed(8);
ByteBuffer bb = ByteBuffer.wrap(sbuf);
Random numberGen = new Random(bb.getLong());
int numberMoves = chromosoneData.length();
moveList = new ArrayList(numberMoves);
for (int a = 0; a < numberMoves; a++) {
int randomMove = numberGen.nextInt(4);
char typeChro = chromosoneData.charAt(a);
if (randomMove == 0) {
moveList.add(Move.Down);
} else if (randomMove == 1) {
moveList.add(Move.Up);
} else if (randomMove == 2) {
moveList.add(Move.Left);
} else if (randomMove == 3) {
moveList.add(Move.Right);
}
}
Run Code Online (Sandbox Code Playgroud)
在此之后,选择从种群到交叉的染色体.我的交叉函数从最适合的20%的人群中随机选择第一条染色体,另一条从最高的20%之外随机选择.然后交叉选择的染色体并调用突变功能.我相信我受影响最大的领域是计算每个染色体的适应度.目前我的健身功能创建了一个二维数组作为网格,从上面显示的函数生成的移动列表中按顺序放置移动,然后循环遍历数组进行适应度计算.(IE发现,位置[2,1]的H是Cord …