约束优化用法 – 创build社区服务组织的最优志愿者表

我是一名志愿担任当地社区服务机构项目经理的大学生。 我工作中的一大部分工作是将志愿者时间表(通过文本和电子邮件提交给我)与老师时间表(由教师通过谷歌表格提交)进行匹配。 在过去的两年中,我一直在用Excel表格和颜色编码手动将自己需要的时间与志愿者的可用性进行匹配。 到目前为止,这很容易,因为我收到了相对较less的导师请求和志愿者注册。

在过去的两个月里,我一直努力在我pipe理的学校增加辅导课程。 这个学期,我收到了超过25名学生的18个申请表格。 为这么多人手工匹配志愿者时间表,需要几个小时甚至几天才能完成。 鉴于我的工作量,我觉得必须有更好的方法来解决这个问题。

我很好奇,如果你们中的任何一个有限制的编程经验可以帮助我(1)解决我的日程安排问题或(2)推荐可以帮助的软件。 下面我将更详细地概述调度过程,并列出调度转移时必须考虑的约束条件。

调度过程

我要求我的志愿者们给我星期一到星期四的可用性,格式如下:

男:9:30 – 12:00 T:2:00 – 4:30 W:12:00 – 1:30 Th:10:00 – 11:30

学校距离机场15-20分钟车程,所以我依靠“司机”把其他志愿者安排在1小时的class里。 如果志愿者有一辆车,并且愿意拼车,那么我试着让至less两名其他的志愿者与那个司机相同的可用性(因为这个车有足够的空间,并且老师请求那个导师在那个时间段)。

然后,我祈祷一位老师已经要求这个拼车的时间段的导师。 如果没有,那么拼车是不好的,我不得不手动想出另一个解决scheme。

约束和variables

显然,在制定进度时有几个限制和variables。 我会列出尽可能多的我可以在下面:

  • 导师是“司机”吗?
  • 如果导师是“司机”,他有多less个座位?
  • 司机的可用性是否与任何要求的时间段相匹配?
  • 是否还有其他非驾驶导师与驾驶员具有相同的可用性? (即有没有人可以和司机拼车)
  • 所有在拼车的志愿者都有一个可以辅导的学生吗?
  • 老师是否要求个人或小组辅导(即一个或多个学生的一个或多个导师)?
  • 如果是的话,老师要求多less名导师?
  • 请记住,一名志愿者可以导师不止一名学生

这是我可以从头顶上想出的约束和variables的一小部分。

那么任何人都可以提供这个调度问题的解决scheme? 那些没有约束编程知识的人可以使用OptaPlanner来解决这个问题吗?

感谢您阅读并提供您的build议。

你可以使用OptaPlanner来解决这个问题,但感觉Minizinc可能是一个更好的select。 我的观点是,在Minizinc的情况下,你描述了一个解决scheme所需的属性 ,而不是实现工作stream和algorithm来pipe理variables,约束,input数据的parsing器等,OptaPlanner的情况下。

如果一个人没有经历约束满足感,那么可以简单得多 – 只要在文本configuration文件中描述允许/不允许的configuration并运行求解器即可。 你甚至可以提供一个简单的GUI来生成input数据。

Interesting Posts