【发布时间】:2013-04-27 08:03:26
【问题描述】:
假设我想构建一个函数,可以在一周内正确安排三个公交车司机开车,但有以下限制:
- 每位司机每周驾驶次数不得超过五次
- 每天必须有两个司机开车
- 他们每周休息一天(不会与其他司机的休息日冲突)
什么样的算法可以用来解决这样的问题?
我浏览了几个网站,发现了这些:
1) Backtracking algorithm (brute force)
2) Genetic algorithm
3) Constraint programming
坦率地说,这些对我来说都是“文化冲击”,因为我过去从未学习过任何类型的线性编程。我想知道两件事:
1) 哪种算法最适合上述情况?
2) 解决这个问题的最简单算法是什么?
3) 请建议我可以研究的任何其他算法来解决上述问题。
【问题讨论】:
-
我对第三个约束有点困惑。每个司机开车不超过五天这一事实是否意味着他们每周至少休息两天?每天必须有两个司机这一事实意味着最多一个人可以在某一天休息。第三个约束在这里似乎是多余的。
-
有时需要冗余约束以更快地减少可能的解决方案集。
-
您想将问题解决到最优还是接近最优(启发式选择的解决方案)就足够了?
标签: java algorithm constraints linear-programming