【发布时间】:2011-06-07 21:58:57
【问题描述】:
我是遗传算法的新手,我被分配实施遗传算法来优化药房每个工作日的请求顺序。首先,让我解释一下问题:
有 9 个家庭在工作周的任何一天(周一至周五)都提出了参加的请求。药房每天只能接诊1到3个家庭,不能多也不能少,而且同一周不能重复任何家庭。主要目标是优化每个家庭的最佳就诊时间,这样,药房每周处理的最大请求数会受到问题的限制。优化算法的输入是每个家庭发出的每个请求数的年平均值。例如:
(为了简化示例,我们只使用 3 个系列):
输入:
|周一|周二 |星期三 |星期四 |周五
F1 | 10 | 20 | 2 | 0 | 7
F2 | 20 | 12 | 0 | 1 | 2
F3 | 2 | 0 | 0 | 19 | 3
可能的解决方案:
|星期一 |周二 |周三 |星期四 |周五
| | F2 | F1 | F3 |
到目前为止,我一直在研究遗传学和遗传算法的整个概念。我研究了粒子群优化,但由于我的时间很短,我决定使用一个框架。我正在使用 JGAP,但我的主要问题是我如何提出潜在的解决方案?我的意思是,我应该如何组织染色体上用于交配、繁殖等的基因……?我已经开发了一个适应度函数,但我无法按照我想要的方式对基因进行编码。有什么建议吗?
【问题讨论】:
-
从你所描述的和给出的例子来看,我认为这个问题是一个线性组合优化问题,可以通过适当的方法来解决,例如单纯形或背包算法(不太确定哪个更合适在这种特殊情况下)。您必须使用 GA 还是您对这个项目的愿望?
-
您是每周制定新的时间表,还是提前整理好几周的时间表?
-
5天9个家庭,最多有5^9,100万个解。没那么多,一个简单的 BFS 就可以解决问题。还是没有?
-
您好,感谢您的 cmets。我已经想到了这些解决方案,但我真的必须使用遗传算法来解决问题。这里的想法是制定一个每周使用的时间表,并每 6 个月对其进行修订。输入中的值来自一整年的订单总和
-
为什么不用二进制编码?即 0 表示空闲插槽,1 表示没有。
标签: java optimization genetic-algorithm genetic-programming