2012-10-10 115 views
2

我从Mike Swanson看了this video,在那里他需要一个算法来规划PDC或TechED等大事件的会话。我正在考虑代表解决方案的最佳方式。他的方法非常简单,他有一个将索引映射到时隙空间的阵列,解决方案是一个包含这些索引列表的简单数组,其中每个时隙空间元素在被拾取后从数组中移除。Sessions Scheduling的遗传算法

例如,给定3个时隙和3间,这是阵列映射的时隙+房间:
0:0时隙,房间0
1:时隙0,房间1
2:时隙0,室2
3:时隙1,房间0
4:时隙1,房间1
5:时隙1,房间2
6:时隙2,房间0
7:时隙2,房间1
8:时间段2,房间2

假设有9个会议需要安排。样本解决方案是5,5,2,1,2,3,1,1,0,其翻译为:
会话0,时隙1,会议室2
会话1,时隙2,房间0
会话2,时隙0,室2
会话3,时隙0,房间1
会话4,时隙1,房间1
会话5,时隙2,室2
会话6,时隙1,房间0
会话7,时隙2,房间1
会话8,时隙0,房间0

(如果不清楚,视频很快会在25:30解释清楚)

现在,我有一些遗传算法的经验,并纠正我,如果我错了,但我一直认为解决方案由交叉和变异产生的个体必须与产生它的解决方案相似?即如果我在两个解之间进行交叉,生成的解决方案必须非常类似于生成它的方案(以及类似的突变方法)。这不是演化的原理吗?看起来,马克斯旺森代表解决方案的方式并没有考虑到这一点。

例如,在交叉的情况下:
父1:5,5,2,1,2,3,1,1,0
父2:0,0,0,0,4, 3,2,1,0
孩子:5,5,2,1,4,3,2,1,0(在这种情况下,交叉指数是4)

孩子有4个与父母共有的基因1和5与父母2,但如果你写下实际的解决方案,如上所述(会议x,时间x,房间x),你会很快意识到,子解决方案几乎没有什么共同的父母2。这不是问题吗?

又如,对于突变这段时间:
突变前:5,5,2,1,2,3,1,1,0
突变后:0,5,2,1,2, 3,1,1,0

这个小小的变化导致了实际最终解决方案中的9个变化中的6个。

这些事情我提出了实际问题?或者它并不重要,因为遗传算法无论如何都能正常工作?如果这些都是问题,你能否提出更好的解决方案?

我的另一个问题是:如果一个会议必须安排多次?在这种情况下,你会如何表达解决方案?

任何帮助非常感谢。

谢谢!

+0

事实上,这个交叉运算符会破坏第二个父项的输入 - 但这可能不是很重要!如果变异算子只是稍微扰动了解,那么你甚至不需要交叉爬山就可以找到一个好的解决方案,但偶尔出现的“严重变异”(这就是这种交叉的有效方法)可以避免你陷入困境当地最优秀。 –

+0

我同意你@satoshi,这似乎是一个遗传算法可怜的模型。短期“好主意”的有意义的重组是进化计算的本质;无向突变不能有效处理解空间。 –

回答

1

如果一个会话需要多次调度会怎么样?

创建一个Lecture实例,每次需要安排会话安排讲座而不是会话。