规划工具的算法

时间:2009-12-02 19:46:58

标签: algorithm language-agnostic planning

我正在编写一个小型软件应用程序,需要作为当地学校的简单规划工具。它需要解决的“问题”是相当基本的。也就是说,老师需要与所有孩子的父母交谈。然而,有些孩子当然有不同群体的兄弟姐妹,所以这些谈话需要安排在彼此旁边,以避免父母在下午6点和另一个晚上10点进行谈话。因此,简而言之,鉴于一群 n 孩子,其中一些孩子有一个或多个兄弟姐妹,制定一个时间表,这些孩子的所有谈话都是彼此相邻的。

现在,也许问题可以解决得非常容易,但另一方面我觉得这可能是一个非常复杂的问题,需要并且可以通过某种算法来解决。典雅。但我是对的吗?在那儿?我查看了Hungarian算法,但它并不适用于这个特殊问题。

编辑:我忘了提及,所有会谈都花费相同的时间。

谢谢!

4 个答案:

答案 0 :(得分:3)

我认为这很容易。

首先将属于一起的孩子归为一类,因为他们分享父母。连续安排一个小组内的孩子,将其余的安排为随机。

抽象它并使问题更容易的另一种方法是从父视角看,将兄弟姐妹视为“孩子”并给他们更多时间。然后你可以随意安排父母,但有些人需要更多时间(因为他们有多个孩子)。

答案 1 :(得分:3)

一种方法可能是在声明性约束语言中定义问题,然后让它为您解决问题。我最后一次这样做时,使用了ECLiPSe,这是一种漂亮的小语言,您可以通过约束来定义问题空间,然后让它找到满足这些约束的允许值。

例如,我相信你有两类约束:

  1. 老师可能只有一个 一次会议
  2. 同一家庭的所有学生都必须 有连续的插槽
  3. 在ECLiPSe中定义这些内容后,它将计算满足要求的每个学生的值。如果你这样做,你也可以根据需要轻松添加约束。例如,很容易说教师Y不能使用教学,或者教师必须轮流做行政工作等。

答案 2 :(得分:1)

这种类似于“背包算法”类型的问题。您需要将家庭成员组合在一起,然后适当填充插槽。

如果你谷歌“背包算法”,你会看到足够的报道让你的头脑旋转,还有一些很好的编码解决方案。

答案 3 :(得分:1)

我认为如果每次演讲都可以简化为“活动”,其中每个活动都有开始时间和结束时间,您可以使用计算机科学中研究的活动选择算法。它基于贪婪的方法,可以在O(n)中解决(其中n是活动的数量)。您可以找到更多信息here。我相信你需要在这里做一个预处理,以便能够将兄弟/姐妹问题减少为相同类型的活动。