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

订票系统的optaplanner约束设计

戴高远
2023-03-14

我想用optaplanner设计一个预订系统,按照我的商业模式:

Customers (id, name) //Customer table
Services(id, name, description, duration)  //services that a customer can book, duration can be 15min, 30min, ..., N x 15min
Employees(id, name)  //Employee tables
Appointment(id, customerId, employeeId, serviceId, startTime, endTime) 

要预订预约,客户将选择:

    null
@Entity
public class Service extends PanacheEntityBase {

    @Id
    @GeneratedValue
    @NotNull
    private Long id;

    @NotBlank
    private String name;
    private int durationInGrains;
}

public class TimeGrain  {

    public static final int GRAIN_LENGTH_IN_MINUTES = 15;

    private int grainIndex; // unique
    private int startingMinuteOfDay;
}


@Entity
public class Employee extends PanacheEntityBase {

    @PlanningId
    @Id
    @GeneratedValue
    @NotNull
    private Long id;

    @NotBlank
    private String name;
}

@Entity
public class Appointment extends PanacheEntityBase {

    @Id
    @GeneratedValue
    @NotNull
    private Long id;

    private Employee employee;
    private Service service;

    private LocalDateTime startTime;
    private LocalDateTime endTime;
}

@PlanningEntity
public class Availability {

    @PlanningVariable(valueRangeProviderRefs = { "timeGrainRange" })
    private TimeGrain startingTimeGrain;
    
    @PlanningVariable(valueRangeProviderRefs = "providerRange")
    private Provider provider;
    
    private Service service;
}

@PlanningSolution
public class AppointmentAvailability {

    @ValueRangeProvider(id = "timeGrainRange")
    @ProblemFactCollectionProperty
    private List<TimeGrain> timeGrainList;

    @ProblemFactCollectionProperty
    @ValueRangeProvider(id = "providerRange")
    private List<Provider> providerList;

    @ProblemFactCollectionProperty
    @ValueRangeProvider(id = "appointmentsRange")
    private List<Appointment> appointmentList;
    
    @PlanningEntityCollectionProperty
    private List<Availability> availabilityList;

    @PlanningScore
    private HardMediumSoftScore score;
}

由于我对optaplanner是个新手,你能告诉我这是不是该走的路吗?

更新1:出于设计目的,我已经将问题简化到最小。

共有1个答案

桑飞语
2023-03-14

看看optaplanner-examples中的会议调度示例,获得如何建模的启发。请参阅Design Patterns一节中的文档中的Time Grain模式。“学校时间表快速启动”改为采用时隙模式。

 类似资料:
  • 我试图解决一个调度问题,它围绕着以下安排: 是否可以使用和实现约束?我尝试过以下路线: 我认为应该没有问题,但不确定如何获得这个来实现我想要的。这里是否需要?还是有一个不同的、更好的整体方法? 作为参考,ShiftAssignment类可以很容易地拥有如下所示的方法:

  • 主要内容:1.订单系统在企业中的角色,2.订单系统与各业务系统的关系,3.订单系统上下游关系,4.订单系统的业务架构1.订单系统在企业中的角色 在搭建企业订单系统之前,需要先梳理企业整体业务系统之间的关系和订单系统上下游关系,只有划分清业务系统边界,才能确定订单系统的职责与功能,进而保证各系统之间高效简洁的工作。 2.订单系统与各业务系统的关系 2.1 对外系统 所有给企业外部用户使用的系统都在这一层,包括官网、普通用户使用的C端,还包括给商户使用的商家后台和在各个销售渠道进行分销的系统,比如与

  • 我正在评估OptaPlanner的一个规划问题。我已经看到了几个关于这个话题的回应,但没有一个完全像我正在寻找的。 似乎OptaPlanner在求解时需要静态数量的实体/变量。 如有任何指示,将不胜感激。

  • 本文向大家介绍C语言实现飞机订票系统,包括了C语言实现飞机订票系统的使用技巧和注意事项,需要的朋友参考一下 问题描述与题目要求 问题描述: 假定某民航有M个航次的班机,每个航次都只到达一个地方。试为该机场售票处设计一个自动订票和退票系统,要求系统具有以下功能: (1) 订票:若该航次余票大于等于乘客订票数,则在该航次的乘客表中,插入订票乘客的信息项,并修改该航次有关数据,否则给出相应信息。 (2)

  • 本文向大家介绍C语言实现航班订票系统,包括了C语言实现航班订票系统的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现航班订票系统的具体代码,供大家参考,具体内容如下 描述: 点定义两个链表,一个存储航班信息,一个存储客户信息; 进行一系列简单的增删查找; 代码如下 更多学习资料请关注专题《管理系统开发》。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐

  • 什么是差分约束系统? 差分约束系统是一种特殊的N元一次不等式组,它包含N个变量以及M个约束条件,每个约束条件都是由两个变量作差得到的,形如,其中是常数。 我们根据题目要求,并用这M个约束条件求出某个不等式的最值,例如的最大值。 怎么解? 转化: 把上面不等式稍微变形一下可以得到,令,,,得到,是不是联想到了最短路算法? 因此我们可以把这M个不等式转化到图中,例如对于,则在图中连一条从 j 到 i