问题标签 [rostering]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optaplanner - 员工排班示例的编辑规则
我目前正在为我的项目实施这个。
我需要为“每位员工每周最多四次轮班分配”添加一条规则。我是 Java 和流口水的新手。有没有一种简单的方法来编辑下面的规则以匹配我正在寻找的约束?
vba - 显示行号而不移动列
我已经建立了一个 12 个月的名册,其中我有 365 天的 365 列,我的 120 名员工列在每一行,一直到第 120 行。
我正在寻找一些 VBA 代码,它允许我(例如)显示第 120 行,同时保持显示活动列。
我目前正在使用下面的简单代码,它确实突出显示了该行,但将列集重置为显示 A 列。我正在使用切换按钮来启动宏。
任何提示、解决方案或建议将不胜感激!
谢谢!
minizinc - 迷你锌。计算循环中的班次数
继续另一篇文章(Minizinc:生成有效班次)。我试图在双 ls 之间最多有 2 分钟。使用常规约束执行此操作非常困难,因为转换表会很大(路径太多)。有什么办法可以解决吗?我试过这个,但它给了我错误:
嗨,帕特里克……我又卡住了……我继续开发正则表达式,但我达到了 55 个状态……然后我停止了。我正在尝试一种不同的方法,即在连续工作日之间建立一系列休息时间。例如:mmmtnllmmlttlnnlllm(m1 早上 6 点到 13 点;m 早上 7 点到 14 点开始;t 晚上 14 点到 21 点;晚上 22 点到 7 点;l 休息日;o 办公室 10 点到 14 点;im 早上 6 点到 14 点待命;它on call night 13 to 22; ino on call night 21 to 7) 应该创建一个数组,如 17,17,24,24,48,48,17,48,48,16... 这是轮班的开始时间 [day+ 1] - (轮班开始时间 [天] + 轮班持续时间 [天])。这是编码的。连续工作班次之间必须有 12 小时或更长时间。
当有休息日(l)时,我打算重复最后一个休息时间(示例中为 48,48)。这个我不知道该怎么做。然后的想法是计算周期之间的工作日以检查以下内容: - 连续工作班次之间至少 12 小时 - 在 48 小时或更长时间休息之前的周期最多有 5 个工作日。- 休息 54 小时或更长时间前的周期最多为 6 个工作日。
夜晚的限制(一晚后 48 小时,除非是另一个晚上或休息日,两晚后 54 小时)我已经用约束完成了它,或者我可以用正则表达式来做......这很好
有任何想法吗?
minizinc - Minizinc名册约束
我的问题是创建一个具有以下轮班类型的花名册:
• 早上 (m):7:30 至 14:45 • 清晨 (m1):6:45 至 14:00
• 早上待命 (im):6:30 至 14:45
• 下午(t):14:45 至 22:00
• 下午随叫随到 (it):13:45 至 22:00
• 夜间(n):22:00 至次日 7:30
• 待命之夜 (ino):21:00 至次日 7:30
• 办公室:10 至 14
• 休息日 (l):即使工人在当天早上 7 点完成工作,也被视为一夜后的第二天休息
适用规则:一个周期由6个或更少的上述班次组成(办公室和休息除外),然后需要48小时或54小时休息(见下文)
- 如果周期有 5 个工作日 (m,m1,im,t,it,n,ino) 其余的必须是 48 小时或更多
- 如果周期有 6 个工作日 (m,m1,im,t,it,n,ino),其余的必须是 54 小时或更多
- 一个班次结束和下一个班次开始之间必须至少有 12 小时(包括办公室)。所以不可能有 n,t 例如
- 晚上:在一个晚上 (n) 或随叫随到的夜晚 (ino) 之后,必须休息 48 小时,除非您需要休息 54 小时的另一个夜晚 (nn) 或休息和夜晚 (nln)。所以有效的例子是 nllm(提供 48 小时休息)或 nnllt 或 nlnllt(提供 54 小时休息)。
- 一个周期最多接受 5 个早晨/清晨/随叫随到的早晨。
- 办公室不被视为工作日,但不计为休息,因此它必须遵守 12 小时休息作为其他类型的轮班,但每个周期的 5 或 6 天不计为工作日。
- 每个周期最多有 2 个呼叫班次。
名册必须满足每天每个班次(m,m1,t,n)的工人数量给出的特定配置。随叫随到的轮班不是必须遵守的。这部分没有问题。
至此,第 3 到第 7 条规则已经完成。我遇到的问题是 1 和 2,因为我无法通过常规约束来做到这一点(它变得太复杂了)。我正在尝试在我所做的连续轮班之间创建和排列休息时间的方法(图像的第三行)。例子:
问题是第四行:将连续休息时间相加(从一个班次结束+ 休息天数+ 到下一个班次开始),即将零与剩下的工作日(1)相加。然后统计>=48小时前的工作日,检查是否有5个或更少;计算 >=54 小时之前的工作日,以检查是否有 6 个或更少……只是一个想法。谢谢你的帮助!
这是到目前为止的代码(我在代码中包含了一个有效的 RosterCalculated 可以修改以通过手动更改代码而不是 var RosterCalculated 来测试代码。在这种情况下,也应该删除测试配置的约束)。我相信这更好地测试约束是否真的有效......
python - 如何使用范围不等式向 pyomo 添加约束
我正在研究一个约束优化问题,我正在使用 pyomo 和 abc 求解器,我正在尝试添加一个范围的约束。
到目前为止我写的代码是
我试图补充的约束条件是,最短轮班时间应为 8 小时,最长轮班时间应为 12 小时。一周的总工作时间不应超过 52 小时。我正在关注以下文章以优化班次分配。
最后一个约束确保 12 小时轮班,我不确定如何为 8 小时轮班添加约束。
我对pyomo和优化问题很陌生。
combinatorics - 人员调度基准实例
人员调度是组合优化研究中的一个主要主题,但由于某种原因,几乎所有的研究(几十年)都集中在护士排班上。因此,很少有可用的基准问题实例用于护士排班以外的主题。
护士排班是对诸如轮班模式之类的问题的一个非常具体的表述。此外,现实世界中存在许多复杂的约束,而在护理操作中不存在。例如,酒店排班包括轮班和跨多个部门和工作类型的多技能员工排班,然而,这个问题在学术文献中没有得到提及。事实上,整个酒店业几乎什么都没有。
我只想问,首先,这是什么原因?第二,有人,任何人,请给我指出一个与护理以外的事情有关的基准问题实例吗?
请注意,我知道这里有玩具多活动实例,但任务调度并不感兴趣。
deployment - 在 AWS Lambda 上运行 optaplanner 是否足够好?
我们预期的 OptaPlanner 实施将管理 100 名员工-客户和 600 次访问的数据集的 20-25 个约束(硬约束和软约束)。
以您的经验,知道 15 分钟的限制使用 AWS Lambda 是否可行?如果我们在 OptaPlanner 超过该时间时停止它,我们能否在该限制下获得相当好的结果?
java - 这是一个没有得到妥善解决的过度约束的排班问题吗?
我正在尝试基于护士排班示例实施轮班调度系统。不幸的是,我做错了。显然,这似乎是一个过度约束的问题,需要特别注意和详细的自定义动作(我还没有开发任何自定义动作)和/或调整权重,并且可能重新定义一些约束。我不确定,也找不到出路。以下是问题详情:
- 365 天(或至少 180 天)
- 每天有昼夜2班
- 25家药店(无特殊技能)分为2组:
- A 组包含 zone1 药房
- B 组包含 zone2 药房
- 3 药房具有相同的地址(同一 B 组的成员),但被认为是独立的。
约束
- 员工一天一班硬约束
- 公平分配的白班、夜班和总作业的最小和最大数量。软约束。
- 交替移位模式(DN 或 ND)-> 不需要的模式(NN)和(DD)硬约束
- 工作日之间的最短空闲天数软约束
- 无连续工作日 硬约束
- 区域覆盖范围:应将每个区域的 1 个药房分配日班和夜班。软约束
- 对于同一地址的员工:同一天没有 2 个任务硬约束,它们之间的时间 = 3 天(硬约束,但如果需要缓解问题可以是软约束)
从输入文件:dataset.xml
规则
getFairnessValue($sum.intValue(),$sumSquared.intValue()));
scoreHolder.addSoftConstraintMatch(kcontext,-1*getFairnessValue($sum.intValue(),$sumSquared.intValue())); 结尾
无论我做什么,我都没有得到好的解决方案。可能是 2 个约束 freesequence 和同一地址药店的 freedays 之间的冲突吗?性能很糟糕,我看到求解器陷入局部最小值。有任何想法吗?