当前位置: 首页 > news >正文

OptaPlanner笔记2

1.5.3 使用maven

修改pom.xml

导入optaplanner-bom以避免为每一个依赖项重复添加版本号

<project>...<dependencyManagement><dependencies><dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-bom</artifactId><type>pom</type><version>...</version><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-core</artifactId></dependency><dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-persistence-jpa</artifactId></dependency>...</dependencies>
</project>

2.2.5 领域对象建模

在这里插入图片描述

2.2.5.1 Timeslot

Timeslot类表示教授课程的时间段,例如:星期一上午10:30-11:30或星期二13:30-14:30。为简单起见,所有时间段的持续时间相同,午餐或其他休息时间没有时间段。
时间段没有日期,因为高中的课程表每周都是一样的。 因此,无需进行连续规划(18.4)

因为在求解过程中Timeslot实例不会改变,所以称Timeslot为problem fact(问题事实)。 这种类不需要使用任何OptaPlanner注解。

注意:保证toString()方法的输出简短,这样OptaPlanner的DEBUG/TRACE日志会更易读。

2.2.5.2 Room

Room 类表示教授课程的地点,例如,Room A或 Room B。为简单起见,所有房间都没有容量限制,他们可以容纳所有课程。
Room实例在求解过程中不会改变,这也是一个问题事实。

2.2.5.3. Lesson

Lesson类表示一节课程(一名教师给一组学生教授一个主题),例如,A.Turing给9年纪学生教授的数学课 或 M.Curie为10年纪学生教授的化学课 。如果同一名教师每周向同一学生组多次教授相同一门科目,那么这样几个Lesson实例只能通过id来区分。 例如,9年级每周有六节数学课。

在求解过程中,OptaPlanner会更改Lesson类的timeslot和room字段,来为每节课分配到一个时间段和一个房间。因为OptaPlanner更改了这些字段,所以Lesson 是一个planning entity(计划实体)
在这里插入图片描述
上图中除了橙色字段的大多数字段都包含输入数据:在输入数据中,lesson的timeslot和room字段没有赋值,而是在输出数据中被赋值了。OptaPlanner在求解过程中会更改这些字段。此类字段称为planning variables(规划变量)。 为了让OptaPlanner识别规划变量, timeslot和room字段都需要添加**@PlanningVariable注解。包含规划变量的类Lesson,需要使用@PlanningEntity**注解。

import org.optaplanner.core.api.domain.entity.PlanningEntity;
import org.optaplanner.core.api.domain.lookup.PlanningId;
import org.optaplanner.core.api.domain.variable.PlanningVariable;// 标识这个类在求解过程中需要变更,因为他会包含至少一个规划变量。
@PlanningEntity
public class Lesson {@PlanningIdprivate Long id;...// 标识这个值可以变更@PlanningVariableprivate Timeslot timeslot;@PlanningVariableprivate Room room;...
}

为了查找可以给规划变量字段赋值的潜在Timeslot实例,OptaPlanner会根据变量类型来链接一个提供List的*( value range provider)值域提供器*(4.3.5.2),并从中取值。

参考:领域建模指南

相关文章:

OptaPlanner笔记2

1.5.3 使用maven 修改pom.xml 导入optaplanner-bom以避免为每一个依赖项重复添加版本号 <project>...<dependencyManagement><dependencies><dependency><groupId>org.optaplanner</groupId><artifactId>optaplanner-bom</art…...

c++文件流详细笔记

c++流 IO :向设备输入数据和输出数据 C++的IO流 设备: 文件控制台特定的数据类型(stringstream)c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出) 文件流 文件流: 对文件进行读写操作 头文件: 类库: ifstream 对文件输入(读文件) ofstream 对文件输出(写…...

CNN经典网络模型之GoogleNet论文解读

目录 1. GoogleNet 1.1 Inception模块 1.1.1 1x1卷积 1.2 辅助分类器结构 1.3 GoogleNet网络结构图 1. GoogleNet GoogleNet&#xff0c;也被称为Inception-v1&#xff0c;是由Google团队在2014年提出的一种深度卷积神经网络架构&#xff0c;专门用于图像分类和特征提取任…...

【C++】开源:CGAL计算几何库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍CGAL计算几何库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…...

Redis分布式锁相关

Redis分布式锁实现Redisson 15问 分布式锁:Redisson源码解析-MultiLock、RedLock 看懂Redisson分布式锁源码&#xff0c;其实并不难...

Nginx环境搭建以及Docker环境部署

目录 Nginx环境搭建 1.首先创建Nginx的目录并进入 2.下载Nginx的安装包 可以通过FTP工具上传离线环境包&#xff0c;也可通过wget命令在线获取安装包 没有wget命令的可通过yum命令安装 3.解压Nginx的压缩包 4.下载并安装Nginx所需的依赖库和包 安装方式一 安装方式二 --- 也…...

2023牛客暑期多校训练营7(C/I/M)

目录 C.Beautiful Sequence I.We Love Strings M.Writing Books C.Beautiful Sequence 思路&#xff1a;显然若得到了a[1]&#xff0c;则整个序列a我们都知道了。所以我们要求出第k大的a[1]&#xff0c;这个可以利用序列a为不递减序列的性质来得出。 首先&#xff0c;由题…...

阿里云服务器手动搭建FTP教程(Windows操作系统)

阿里云百科介绍使用阿里云服务器搭建FTP教程&#xff0c;云服务器为Windows操作系统&#xff0c;当需要远程连接Windows实例进行文件传输时&#xff0c;可以通过搭建FTP站点实现。本文将介绍如何在Windows实例中搭建FTP站点。 目录 准备工作 步骤一&#xff1a;添加IIS以及F…...

idea+gradle阅读spring5.2.9源码之源码构建报错解决方案

注意 1、先确保gradle版本和spring、jdk版本对应 本文:gradle:5.6.4/spring 5.2.9/jdk1.8&#xff08;gradle和jdk都要先安装好&#xff0c;gradle还要配置好本地资源文件路径&#xff09; 2、原来项目乱了的话&#xff0c;先重新导入下载的源码项目 3、进入源码所在根目录&…...

一文详解Git

一. Git 概述 1.1 什么是 Git Git 是一个免费的、开源的分布式版本控制工具&#xff0c; 主要用于管理开发过程中的源代码文件&#xff0c;在软件开发过程中被广泛使用。通过Git仓库来存储和管理这些文件&#xff0c;Git仓库分为二种&#xff1a; 本地仓库&#xff1a;开发人…...

【单片机】DS2431英文手册,中文手册,翻译

DS2431是一款1024位的1-Wire EEPROM芯片&#xff0c;以每个256位的四个内存页面组织。数据被写入8字节的暂存区&#xff0c;经过验证&#xff0c;然后复制到EEPROM存储器中。作为一个特殊功能&#xff0c;四个内存页面可以单独地被写保护&#xff0c;或者被置于EPROM仿真模式&a…...

centos7部署openldap开启memberof并接入jumpserver

文章目录 前言1.yum安装openldap2.配置密码3.导入配置4.定义域5.配置memberof6.配置base dn7.安装phpldapadmin管理8.调整httpd的配置9.调整php的配置10.登陆php管理页面11.同步旧ldapsever用户数据(可省略)12.客户端配置13.对接jumpserver 前言 介绍如何在centos7上部署openl…...

Unity游戏源码分享-仿开心消消乐Match3Jewel

Unity游戏源码分享-仿开心消消乐Match3Jewel 工程地址&#xff1a; https://download.csdn.net/download/Highning0007/88198762...

知识图谱基本工具Neo4j使用笔记 四 :使用csv文件批量导入图谱数据

文章目录 一、系统说明二、说明三、简单介绍1. 相关代码以及参数2. 简单示例 四、实际数据实践1. 前期准备&#xff08;1&#xff09; 创建一个用于测试的neo4j数据库&#xff08;2&#xff09;启动neo4j 查看数据库 2. 实践&#xff08;1&#xff09; OK 上面完成后&#xff0…...

[bug修复]状态数据在useEffect初始化时更新无效

&#xff08;bug修复类型的博客还是用汉语写捏&#xff09; 前两天在做一个管理页面前端的时候&#xff0c;出现了这样的问题 function Son(props){const [a,seta]useState(0)useEffect(()>{seta(props.name)},[])return(<div>{a}</div>) } 这是当时情况的一…...

使用 API Gateway Integrator 在 Quarkus 中实施适用于 AWS Lambda 的 OpenAPI

AWS API Gateway 集成使得使用符合 OpenAPI 标准的 Lambda Function 轻松实现 REST API。 关于开放API 它是一个 允许以标准方式描述 REST API 的规范。 OpenAPI规范 (OAS) 为 REST API 定义了与编程语言无关的标准接口描述。这使得人类和计算机都可以发现和理解服务的功能&am…...

【JVM】JVM中的分代回收

文章目录 分代收集算法什么是分代分代收集算法-工作机制MinorGC、 Mixed GC 、 FullGC的区别是什么 分代收集算法 什么是分代 在java8时&#xff0c;堆被分为了两份&#xff1a; 新生代和老年代【1&#xff1a;2】 其中&#xff1a; 对于新生代&#xff0c;内部又被分为了三…...

C# Linq源码分析之Take方法

概要 Take方法作为IEnumerable的扩展方法&#xff0c;具体对应两个重载方法。本文主要分析第一个接收整数参数的重载方法。 源码解析 Take方法的基本定义 public static System.Collections.Generic.IEnumerable Take (this System.Collections.Generic.IEnumerable source…...

从后往前读取列表的方法

从后往前读取列表的方法 方法1&#xff1a;使用for循环遍历列表时&#xff0c;可以使用reverse()函数将列表反转&#xff0c;然后再遍历。 # 列表 num [0, 1, 2, 3]# 反向遍历 for i in reversed(num):print(i)输出结果&#xff1a; 3 2 1 0方法2&#xff1a;先计算列表长度…...

数据库--数据类型

数据库相关链接&#xff1a; 数据库基础操作--增删改查&#xff1a;http://t.csdn.cn/189CF 数据库--三大范式、多表查询、函数sql&#xff1a;http://t.csdn.cn/udJSG 数据类型 创建表的时候&#xff0c;我们在类型这里给出了不同的选项&#xff0c;比如有int &#xff0c;…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...