【问题标题】:Genetic algorithm: Request optimization遗传算法:请求优化
【发布时间】: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


【解决方案1】:

我以什么方式呈现潜力 解决办法?

每个家庭都应该安排一天。因此,您可以存储每个家庭的预定日期。一个基因将是 5 天之一,铬将有 9 个,每个家庭一个

         1 2 3 4 5 6 7 8 9
Chrome   M T T F W H T M T

所以家庭 1 在星期一,家庭 2 和 3 在星期二,等等。您应该在适应度函数中施加所有其他约束 (The pharmacy can only attend 1 to 3 families per day)。

另一种编码可能是

 M1 M2 M3 T1 T2 T3 W1 W2 W3 ... F2 F3
 1  2  -  -  5  -  9  -  3  ... 4  -

因此,您将接受所有可能的约会并填写家庭成员,或将其留空。在这种情况下,健身功能应该确保每个家庭都有一个约会。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 2013-07-02
    • 1970-01-01
    • 2021-03-03
    • 2011-05-24
    • 2020-07-08
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多