我会在一个日历月内随机给一个团队安排8天的假期。在
我想随机选择8天,休息日分配应该尽量均匀。例如,我的意思是,8天的假期不应该在每月的前8天集中。在
例如:[1,5,8,14,18,24,27,30]就是一个好的分布。
[1,2,3,4,26,27,28,29]不是一个好的分布。在
实际上,一个船员不能连续工作7天。每7天必须休息一天。在
所有的日子都一视同仁。船员也可以在周末工作。在
我想一天一天的休息。不是8个人同时在一起。在
你能推荐一种使用python实现这一点的算法吗?在
并非一个月的所有日子都可以休假。在
谨致问候
Tags:
使用^{} 从序列中获取随机集。列出可用的天数,然后将其传递给
.sample()
函数:在上面的例子中,我使用了一个月的某一天,列表中省略了某些天(例如,星期天和一个月的最后10天),然后我们从该总体中随机选择8天。在
你应该把总天数平分。在
不管有多少天都在休息,不管需要多少天。在
舍入时会出现一些问题,列表索引可能会超出范围。在
这里的关键是:
Actually, a crew can't work 7 consecutive days. In every 7 days, there must be 1 day-off.
改写问题,每7天随机抽取2天(或根据需要将一个月分成四段时间)。然后保证你的分配是均匀的。按照Martijn Pieters的建议使用
random.sample()
。在你可以从第一周开始使用这种方法生成两个值,如果你想一个接一个的话,就按顺序生成它们。在
编辑:
正如tcaswell所观察到的,仍然有一些情况下你会连续工作十天。为了解决这一问题,您可以每三天安排一天休假,创建一个10天的列表,并从不会使连续7天标准失效的天数子集中随机删除两天。在
或者,您可以继续使用原始算法生成列表,直到它符合条件为止,因为无论如何您都很可能得到一个有效的解决方案。你必须编写一个验证函数,但是这很容易做到,因为你只是在计算最长的连续天数。在
代码:
第二种选择的实现。在
相关问题 更多 >
编程相关推荐