ruby-on-rails – ruby​​rails中的约会调度

ruby-on-rails – ruby​​rails中的约会调度,第1张

概述我正在使用rails中的呼叫中心软件,需要为可以处理客户呼叫的代理安排约会.说完呼叫中心软件后,需要确保我尽可能利用整个代理的时间表安排预约,留出最少的漏洞数量(代理商没有预约). 考虑到代理商的时间表,例如某一天上午9:00到下午5:30,下午1:00到下午1:30午休时间为30分钟,我需要安排不同长度的约会,约60分钟和大约90分钟. 如果出于某种原因,午休时间会在时间表上留下一些漏洞,我应该 我正在使用rails中的呼叫中心软件,需要为可以处理客户呼叫的代理安排约会.说完呼叫中心软件后,需要确保我尽可能利用整个代理的时间表安排预约,留出最少的漏洞数量(代理商没有预约).

考虑到代理商的时间表,例如某一天上午9:00到下午5:30,下午1:00到下午1:30午休时间为30分钟,我需要安排不同长度的约会,约60分钟和大约90分钟.

如果出于某种原因,午休时间会在时间表上留下一些漏洞,我应该可以在午休时间30分钟/ –,而不是下午1点到下午1点30分,它可以在下午1点30分到下午2点之间移动或者下午12:30 – 下午1:00.

我开始创建午餐休息作为一种约会,它将提供移动starts_at和finishes_at属性的灵活性.约会是60分钟或90分钟,这是30分钟的倍数,午餐也是30分钟,我开始将代理商的时间表分成每个30分钟的时间段.

因此,对于特定日期的特定代理,查看他的日程安排我实例化了一系列时段,每个时段的持续时间为30分钟,starts_at和finishes_at属性类似于上午9:00 – 上午9:30,上午9:30 – 上午10:00,等等

我需要一些帮助来循环通过这个预约插槽阵列并拉出2个连续插槽或3个连续插槽,具体取决于60或90分钟的持续时间预约,请记住我应该能够移动午餐/ – 30分钟.

任何帮助深表感谢.

解决方法 看看你的问题:

>约会时间为60或90分钟.
>午餐时间间隔为90分钟,时间间隔为12:30-2:00

我们希望尽量减少没有约会的分钟数.

现在,您有一个时间间隔填写,即上午9:00到下午5:30.假设约会在9:00-5:30之间,我们可以使用贪心算法根据最早的完成时间(source)和您的附加约束进行区间调度.

基本上算法如下(伪)

Let R be the set of all appointmentsLet R11 be the set of appointments from R before 12:30 that are compatible with 12:30-1:00 and R12 be the set of appointments from R after 1:00 that are compatible with 12:30-1:00Let R21 be the set of appointments from R before 1:00 that are compatible with 1:00-1:30 and R22 be the set of appointments from R after 1:30 that are compatible with 1:00-1:30Let R31 be the set of appointments from R before 1:30 that are compatible with 1:30-2:00 and R32 be the set of appointments from R after 2:00 that are compatible with 1:30-2:00Let R1Comb = findSet(R11) + 12:30-1:00 + findSet(R12)Let R2Comb = findSet(R21) + 1:00-1:30 + findSet(R22)Let R3Comb = findSet(R31) + 1:30-2:00 + findSet(R32)Function findSet(R)     Let A be the time interval to fill        While R is not empty        Choose a request r in R that has the smallest finishes_at        Add r to A        Remove all appointments in R that are not compatible with r    EnDWhile    Return AEndFunctionReturn the R that has the smallest amount of holes in R1Comb,R2Comb,R3Comb

该算法使用了一些概念

>如果重叠,则约会r1与r2不兼容.
>由于#1,我们知道i = 1,2,3的Ri1 / Ri2不会相互冲突.因为如果Ri2中的约会与Ri1不兼容,那么它也与午餐期不兼容,这是一个矛盾,因为我们取出了所有不兼容的约会.
>一旦我们分开了约会集,那么就可以解决2个调度问题,这些问题可以贪婪地解决.

这个算法仍然是O(n log n),因为你正在做贪心算法6次(一个常数),每次贪婪迭代都是O(n log n),前几行和最后一行都是O( N).

人们在日程安排上写下论文,这不是一个简单的问题.我建议你看看http://www.asap.cs.nott.ac.uk/watt/resources/university.html以便更好地理解.

祝好运 :)

总结

以上是内存溢出为你收集整理的ruby-on-rails – ruby​​ / rails中的约会调度全部内容,希望文章能够帮你解决ruby-on-rails – ruby​​ / rails中的约会调度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存