当前位置: 首页 > 知识库问答 >
问题:

规划变量中的规划变量

程和畅
2023-03-14

在制定时间表时,你必须遵守法律(硬性要求),该法律规定,作为一名员工,你每七天只能工作一定的时间。它没有说日历周的原因是在创建时间表时为雇主提供一些回旋空间(通常是提前4-16周)。一旦设置了此计划期的开始日期,在您想要进行完整的重新规划之前,该日期无法更改,但您需要通知员工。所以它可以被视为一个变量,直到你接受了时间表,然后它就变成了一个常数。当然,这是每个员工的个人情况。该开始日期将由您的第一个指定班次的开始日期ofc隐式设置,但通常不足以微调时间表。

因此,假设我们想为Alice和Bob在一年的前3个日历月创建一个新的时间表,他们每人将被分配一个开始日期,该日期可能与第一个分配的班次相同,也可能不同(不能在ofc之后:)。

因此,基本上,一旦Optaplanner为员工分配了一个开始日期,它应该尝试从中制定出最佳的时间表,但同时可以自由更新开始日期,以创建更好的时间表,对于下一个计划期,这不应再被标为计划变量。你能在不改变代码的情况下设置它吗?

我的问题是如何在员工模型中声明这个StartDate变量?正如您在下面的模型中所看到的,它是规划变量中的一个纯规划变量。或者它被归类为锚定变量?如何将值范围声明为{20200101-20203030}?它可以降到小时和分钟,但不能降到秒和毫秒。

我阅读了链式变量,但我的实体(Shift Assignments)本身并不像TSP问题那样链式或相互依赖。

public Employee {
   String name
   
   Date startDate <-- PlanningVariable?, AnchorVariable? how to declare the valuerange?
}

public Shift {
    Date start
    
    Date end
}

@PlanningEntity
public ShiftAssignment {
    Shift shift
    
    @PlanningVariable(valueRangeProviderRefs = {"employeeRange"})   <--Employee is a planningvariable here
    Employee employee
}

@PlanningSolution
public ShiftRooster {
   
   @ProblemFactCollectionProperty
   private List<Employee> employees
   
   @PlanningEntityCollectionProperty
   private List<ShiftAssignment> shiftAssignments
}

我是否需要将Employee中的startDate封装在类中才能对其进行注释?

共有1个答案

穆旭尧
2023-03-14

从商业角度来看,我觉得奇怪的是,员工的“七天工作日开始”不是计划问题的输入。因为要么:

>

你有机会对所有员工的“七天工作日开始”进行颠覆性重置,同时引入一个全新的计划系统(祝你好运!)。考虑到可能2-3个月的计划窗口,你将在一段时间内做出决定,这段时间不涉及圣诞节和/或暑假,这些事件可能会给那些与七天相关的约束带来压力。

在第一阶段,我会将其排除在优化启动的范围之外,将其作为输入参数,使用他们一直使用的值。在第二阶段,我将在一年的计划窗口中运行模拟,以防新员工加入并且您希望自动决定“工作日七天的开始”。

此外,如果员工的第一次轮班从2月4日开始,那么在2月2日开始他/她的“七天工作日开始”仍然是最佳选择,例如,如果2月20日这一周是一半员工在PTO的时刻,那么在2月23日重新设置他/她的七天工作日将是理想的选择。

 类似资料:
  • 我用增量java解决了optaPlanner的一个问题,其中有一个规划变量和一个规划实体,但是现在在我们的项目中有很多规划变量的需求,比如我们要找到最好的房间(容量,isAC等),汽车(totalSeatsLeft,isAC等),我们不知道有多少资源,因为我们每天都需要根据用户的需求增加更多的资源,比如会议室设施等,所以给我一些想法,这样我们就可以为optaPlanner做一个域。多谢了。

  • 我正在研究来自OptaPlanner的示例用例。我也找不到任何类似的例子,可以在一个规划实体中求解多个规划变量。例如,在护士名册中,一个轮班的每个可能需要多个分配的。在这种情况下,如何利用planner和编写规则呢?

  • 各位opatplanner用户, 我的规划问题是:获取遥感卫星星座的有效时间表。 @PlanningEntity: @PlanningVariable: 我的问题数据主要是这样的: Image_Strip: D1 Sat2 22-12-2015 11:02:24.051 D1 Sat1 22-12-2015 11:04:24.122 A2 Sat3 22-12-2015 11:06:24.172

  • 我是Optaplanner的新手,我一直在考虑将VRP扩展到一个不同的问题空间。我用的是6.1.0-final。这是一个很难计算的问题,但下面是: 规划实体-装运(扩展Standstill),由运输商(即货船)锚定规划变量-终端(货物目的地),当然隐含运输商(作为VRP示例中的Vehicle这样的影子变量) 在这个路径问题中,货物直接运输到一个终端,然后再运回工厂。即一个运输机服务于一个终点站,然

  • 以下数据供参考: 使用 Dubbo 的会员服务项目 每天接收 4 亿次远程调用 使用 12 台网站标配机器提供服务(8 核 CPU,8G 内存) 平均负载在 1 以下(对于 8 核 CPU 负载很低) 平均响应时间 2.3 到 2.5 毫秒,网络开销约占 1.5 到 1.6 毫秒(和数据包大小有关) 使用 Dubbo 的产品授权服务项目 每天接收 3 亿次远程调用 使用 8 台网站标配机器提供服务

  • 我对解决硬币交换问题的一种变体感兴趣。回想一下硬币交换问题的正式定义: 给定一个值N,如果我们想改变N分,并且我们有无穷多的S={S1,S2,…,Sm}整值硬币,我们有多少种方法可以改变?硬币的顺序无关紧要。例如,对于N=4和S={1,2,3},有四种解决方案:{1,1,1},{1,1,2},{2,2},{1,3}。所以输出应该是4。对于N=10和S={2,5,3,6},有五个解:{2,2,2,2