You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OptaPlanner求解器输入数据组织方法咨询——9.44.0版本示例困惑

OptaPlanner 9.44.0课程表调度示例输入数据结构解析

核心数据文件对应关系

该示例的输入数据采用CSV格式,每个文件直接映射到示例中的Java业务实体,对应关系如下:

  • curriculum.csv:存储课程组数据,每行对应一个课程组,字段包含课程组ID、名称等,用于关联同组的课程与学生。
  • course.csv:存储课程核心数据,字段包含课程ID、名称、所属课程组ID、所需课时数、授课教师ID等,是调度的核心对象。
  • room.csv:存储教室数据,字段包含教室ID、名称、容量,用于约束课程的容纳人数。
  • teacher.csv:存储教师数据,字段包含教师ID、名称,关联课程的授课主体。
  • student_group.csv:存储学生组数据,字段包含学生组ID、名称、人数、所属课程组ID,决定课程的受众群体。

约束的实现逻辑

示例中的约束并非直接写在输入数据文件中,而是通过数据关联+规则代码共同定义:

  • 硬约束(必须满足):比如"同一教师不能同时授课",是通过course.csv中课程与教师的关联,结合规则文件curriculumCourseConstraints.drl中的规则实现的。
  • 软约束(优先满足):比如"课程尽量安排在学生偏好时段",若涉及偏好数据,会通过额外的CSV文件(如student_preference.csv)存储偏好关系,再由规则调用这些数据进行约束计算。

快速理解的验证方法

  1. 查看示例的Java实体类(如src/main/java/org/optaplanner/examples/curriculumcourse/domain/Course.java),类上的@PlanningEntity、@PlanningVariable注解,以及字段的CSV映射注解,可直接对应到CSV文件的列。
  2. 打开规则文件src/main/resources/org/optaplanner/examples/curriculumcourse/solver/curriculumCourseConstraints.drl,规则中会直接引用输入数据的字段(如$course : Course(teacher != null)),以此关联到CSV中的对应字段。

内容的提问来源于stack exchange,提问作者Vincent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:04:58