解决车间日程安排问题的最有效方法是什么?

时间:2019-05-27 06:57:28

标签: algorithm optimization combinatorics minimization max-flow

我正在尝试设计一种解决车间调度问题的算法。

问题如下: 我必须安排一个由有限数量的时隙和有限数量的学生组成的讲习班。每个时隙都有一个容量,必须满足。每个学生都有一个偏好列表,该偏好列表对应于他/她想在其中工作的一组时隙。

例如,描绘以下车间: 其中时隙1,1具有容量3,时隙1,2具有容量4,依此类推。

我想优化日程安排,使学生的开销最小。开销定义为必须在工作之间“等待”。例如,下图显示了一个学生,该学生一天可以工作所有三个时隙,但是只分配给第一个和最后一个时隙,因此有一个时隙开销。 因此:我的目标功能是找到可行的解决方案,同时最大程度地减少学生的总开销。

我对解决方法的想法是,构造一个图(见下图),运行最大流量算法以确定可行的解决方案,计算总开销(罚款),引入某种随机化方法来更改计划并计算新的开销。任意重复最后3个步骤,以找到局部最小值。

图: 编辑:图形说明:上图显示5个学生,每个学生最多可以连接3个时隙。学生和一个时隙之间的每个边都表示该学生想在该特定时隙上工作。这些边缘中的每一个具有1的容量。源节点S对每个学生具有无限容量的边缘,因为每个学生可以根据自己的意愿进行任意工作。从一个时隙到宿节点T的每个边缘的容量都等于特定时隙的容量。

伪代码

function solve-this(timeslots, students) {
    create graph from time slots and students
    run ford-folkerson max-flow algorithm to determine a feasible solution
    while(local optimal solution not found) {
        compute penalty / overhead
        if(computed penalty < current solution) {
            current solution = this solution
        }
        change schedule based on some sort of randomization factor
    }
    return solution
}

有没有更聪明的方法来做到这一点?这是找到某种最佳解决方案而不检查每个可能的时间表的最佳方法吗?

非常感谢您的帮助,评论和/或反馈。

0 个答案:

没有答案