【发布时间】:2011-01-14 10:13:30
【问题描述】:
问题
您认为遗传算法是否值得尝试解决以下问题,还是我会遇到局部最小值问题?
我认为问题的某些方面对于生成器/健身功能风格的设置来说可能很棒。 (如果你搞砸了一个类似的项目,我很乐意听取你的意见,而不是做类似的事情)
感谢您提供有关如何构建事物并确保正确性的任何提示。
问题
我正在寻找一种很好的调度算法来解决以下实际问题。
我有一个这样的 15 个插槽的序列(数字可能从 0 到 20 不等):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
(并且这种类型一共有10个不同的序列)
每个序列都需要展开成一个数组,其中每个槽可以占据1个位置。
1 1 0 0 1 1 1 0 0 0 1 1 1 0 0
1 1 0 0 1 1 1 0 0 0 1 1 1 0 0
0 0 1 1 0 0 0 1 1 1 0 0 0 1 1
0 0 1 1 0 0 0 1 1 1 0 0 0 1 1
对矩阵的约束是:
- [按行,即水平]放置的数量,必须是11或111
- [row-wise]两个1的序列之间的距离需要最小为00
- 每列的总和应该与原始数组匹配。
- 应该优化矩阵中的行数。
然后数组需要分配 4 个不同的矩阵之一,这些矩阵可能有不同的行数:
A, B, C, D
A、B、C 和 D 是现实世界的部门。负载需要在 10 天期间合理分配,不干扰其他部门目标。
每个矩阵都与 10 个不同原始序列的扩展进行比较,因此您有:
A1, A2, A3, A4, A5, A6, A7, A8, A9, A10
B1, B2, B3, B4, B5, B6, B7, B8, B9, B10
C1, C2, C3, C4, C5, C6, C7, C8, C9, C10
D1, D2, D3, D4, D5, D6, D7, D8, D9, D10
可能会保留其中的某些位置(不确定我是否应该将其仅保留/不保留或基于功能)。 预留的位置可能是会议和其他活动
每行的总和(例如所有 A)应在 2% 内大致相同。即 sum(A1 到 A10) 应该与 (B1 到 B10) 等大致相同。
行数可以变化,例如:
A1:5 行 A2:5行 A3:1 行,例如,单行可以是:
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0
等等。
子问题*
我很乐意只解决部分问题。例如能够输入:
1 1 2 3 4 2 2 3 4 2 2 3 3 2 3
并获得一个适当的序列数组,其中 1 和 0 在上述约束之后的行数上最小化。
【问题讨论】:
-
我了解优化第一个矩阵中的行数所描述的问题。恐怕我迷失了 A、B、C、D 是什么以及随后的步骤。你能澄清一下吗?
-
我和克里斯一起要求澄清。第一个矩阵的行优化是整个问题,还是这仅仅是 A、B、C、D “事物”之后的初始要求?也许 ABCD 是解决方案的暂定方法?无论哪种情况,我都无法得到这个 ABCD 东西......
-
您通常可以通过随机化初始种群并确保初始个体在解决方案空间中的合理分布来解决局部最小值问题。
-
也许我误解了这个问题,但我看不出你的例子有什么解决方案。末尾的“... 3 2 3”不能应用“11”或“111”;最后两个值将始终为“0 1”,不能应用“11”或“111”。您能进一步解释一下吗?