Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 固定时间窗上固定时间窗约束的可移动时间窗_Javascript_Algorithm - Fatal编程技术网

Javascript 固定时间窗上固定时间窗约束的可移动时间窗

Javascript 固定时间窗上固定时间窗约束的可移动时间窗,javascript,algorithm,Javascript,Algorithm,我有一套工作 客户请求作业。 客户划分时间(例如:“您可以在8:00开始,在13:00结束)。 内部算法将生成此作业的估计执行时间(即使此作业有5个小时,此人员也可以在2小时内完成此作业)。 这意味着这家伙可以在8:00到10:00或10:30到12:30之间完成工作 在工作日的时间窗口中(8:00至17:00),我们将尝试将作业分配给列表,然后将此列表分配给工作人员。有多个列表和工作人员 列表上唯一的限制是,我们不能同时执行两个作业。(但是,例如,您可以有J1(8:00到12:00,执行时间1

我有一套工作

客户请求作业。 客户划分时间(例如:“您可以在8:00开始,在13:00结束)。 内部算法将生成此作业的估计执行时间(即使此作业有5个小时,此人员也可以在2小时内完成此作业)。 这意味着这家伙可以在8:00到10:00或10:30到12:30之间完成工作

在工作日的时间窗口中(8:00至17:00),我们将尝试将作业分配给列表,然后将此列表分配给工作人员。有多个列表和工作人员

列表上唯一的限制是,我们不能同时执行两个作业。(但是,例如,您可以有J1(8:00到12:00,执行时间1小时)和J2(8:00到12:00,执行时间2小时)这是可行的。因为J1可以在8:00到9:00执行,而J2可以在9:00到11:00执行)

在javascript中,我的对象有一个开始时间、一个结束时间和估计的持续时间(使用有用且强大的矩.js)

列表只是一个带有专门推送的数组,如果可以添加作业,则返回true

这里是一个例子,我们有棕色作业,红色的估计执行时间,它们在一天的时间窗口上(黑色)。 最上面的作业是最后一个插入的作业,要做的事情是尝试知道作业列表是否仍然可行。因此,这里需要做的是在其他两个作业之间滑动(绿色箭头)一段时间的执行时间。 首先,我试图找到一种方法来知道一个作业是否可以插入到作业列表中

然后我做了一个算法,在作业窗口时间内执行时间总是ASAP,但我认为我可以改进这个算法


有没有关于如何满足约束条件并允许在列表中插入最多个作业的适当方法的建议?

我建议您先尝试在论文或其他内容上思考一些解决方案,如果找不到,再尝试一些研究

小贴士:试着把事情分类,看看这是否有助于做出决定

这是一个经典的算法问题,您应该查找
调度算法,并查看一些方法。
也看看这个。

这里有一个递归示例(可以作为堆栈进行迭代),其中时间线和持续时间的位表示在半小时内。它耗尽了所有可能性,如果不适合,就提前退出(当然,如果适合,您可以只输出第一个并退出,而不是像示例中那样全部返回)

功能托宾(开始,持续时间){
返回((1)