kam*_*aci 7 java algorithm genetic-algorithm
对于遗传算法,通常基因符号如下:
PARENT1: 101101010101001001001001110011100110101011101101
PARENT2: 010100111011010101110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
如此交叉,突变可以通过这种表示来完成,如:
选择一个交叉点:
PARENT1: 1011010101010010 01001001110011100110101011101101
PARENT2: 0101001110110101 01110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
执行交叉生成孩子:
CHILD: 1011010101010010 01110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
然后变成一条全新的染色体:
CHILD: 101101010101001001110101001001101011001010010110
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在Java中表示每周计划基因?
示例来自本文:http://secretgeek.net/content/bambrilg.pdf
我正在克服Java中的这个时间表问题,并希望代表
FIGURE 10: An Entire University Timetable
Run Code Online (Sandbox Code Playgroud)
在Java中.
下面的代码可能会让您了解如何解决该问题。一种解决方案(即大学时间表)由一系列单间组成。这些单间每个都有一个二维数组,其中列是天,行是小时。我将时间设置为 16 点,因为我认为晚上不会有课。因此,第 1 行时间将是一天中的第一个小时……可能是早上 7 点到 8 点。数组的值显示预订的舱位。
public class SingleRoom {
static final int DAYS = 7;
static final int HOURS = 16;
. . .
private int[][] timetable = new int[DAYS][HOURS]; //0 would say room is not booked, >0 indicates the booked class (english advanced (12), object oriented programming (139), etc..)
}
public class Solution {
static final int AVAILABLE_ROOMS = 26;
. . .
private SingleRoom[] university_timetable = new SingleRoom[AVAILABLE_ROOMS];
}
Run Code Online (Sandbox Code Playgroud)
突变:
更改类别突变 - 将类别更改为另一个随机类别或为零 = 不预订
打开/关闭课程 - 如果预订了特定房间每天的一个小时,如果没有预订,则将其关闭,使用随机课程打开它,这是为了让算法有可能不预订时间,因为在变化类突变 0 被选择的概率很低
约束:创建解决方案后,检查所有约束并保留有效的解决方案。新的有效解决方案必须插入到您的总体(解决方案)中,如果它们比您总体中已有的其他解决方案更好,或者它们是否增强了人口的多样性
但在您提到的文档中,它很好地描述了如何针对此问题实施 GA(从第 16 页开始)。
我为多目标优化算法mPOEMS(具有进化改进步骤的多目标原型优化)编写了一个通用的java框架,这是一个使用进化概念的GA。
您可以在这里找到代码,它可能会让您了解如何解决您的问题:
您可以使用该算法找到的解决方案已在科学工作中与最先进的算法 SPEA-2 和 NSGA 进行了比较,并且已证明该算法的性能相当甚至更好,具体取决于您的指标来衡量性能。
你可以在这里找到它。
更多资源:我的论文将该框架应用于项目选择问题: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf
该框架的文档: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf
mPOEMS 演示文稿: http://portal.acm.org/itation.cfm? id=1792634.1792653
实际上,只要有一点热情,您就可以轻松地根据您的需要调整通用框架的代码。
你是在工作中还是在学生的时候写这个 GA 的?