当前位置: 首页 > 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;…...

你的全能系统维护盘:除了装系统,Ventoy U盘还能这样玩(附插件配置)

Ventoy U盘&#xff1a;解锁系统维护工具的终极潜力 你是否曾经遇到过这样的情况&#xff1a;电脑突然蓝屏&#xff0c;重要文件无法访问&#xff0c;或者需要快速测试一个新系统&#xff1f;传统的U盘启动盘往往只能解决单一问题&#xff0c;而Ventoy则完全不同。这个看似简单…...

【技术解析】ABLIC S-8254A:如何为3/4串锂电池构筑高精度“安全网”?

1. ABLIC S-8254A&#xff1a;锂电池安全的“智能守门人” 想象一下&#xff0c;你手里拿着一块由3节或4节锂电池串联组成的电池组&#xff0c;就像握着一把双刃剑——它能提供强劲动力&#xff0c;但也潜藏着过充爆炸、过放报废的风险。这时候&#xff0c;S-8254A就像一位24小…...

WarcraftHelper终极指南:三步解决魔兽争霸3在Win10/Win11上的兼容性问题

WarcraftHelper终极指南&#xff1a;三步解决魔兽争霸3在Win10/Win11上的兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在…...

BabelDOC完整指南:5分钟实现智能PDF文档翻译与格式保留

BabelDOC完整指南&#xff1a;5分钟实现智能PDF文档翻译与格式保留 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 在全球化协作日益频繁的今天&#xff0c;专业文档翻译已成为研究人员、工程师…...

RWKV-7 (1.5B World)效果展示:1.5B参数模型的上下文长程依赖建模

RWKV-7 (1.5B World)效果展示&#xff1a;1.5B参数模型的上下文长程依赖建模 1. 惊艳的开场&#xff1a;小身材大能量 当大多数人还在追逐千亿参数大模型时&#xff0c;RWKV-7 1.5B World用实际表现证明&#xff1a;参数规模不是衡量模型能力的唯一标准。这个仅有1.5B参数的轻…...

nli-MiniLM2-L6-H768基础教程:从BERT到MiniLM2的NLI模型演进

nli-MiniLM2-L6-H768基础教程&#xff1a;从BERT到MiniLM2的NLI模型演进 1. 认识自然语言推理(NLI) 自然语言推理(Natural Language Inference)是自然语言处理中的一项基础任务&#xff0c;它需要判断两个句子之间的逻辑关系。想象一下&#xff0c;这就像老师在批改作业时&am…...

Voxtral-4B-TTS-2603环境部署:Supervisor托管+自动拉起的高可用TTS服务搭建

Voxtral-4B-TTS-2603环境部署&#xff1a;Supervisor托管自动拉起的高可用TTS服务搭建 1. 平台介绍 Voxtral-4B-TTS-2603是Mistral发布的开源语音合成模型&#xff0c;专为生产环境设计。这个模型最大的特点是把复杂的TTS技术封装成了开箱即用的Web工具&#xff0c;让普通用户…...

【2026年最新600套毕设项目分享】微信小程序的社区互助养老系统(30137)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 项目演示视频2 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告/任务书&#xff09;远程调试控屏包运…...

【电磁】麦克斯韦旋度方程的差分形式平面极化磁场研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…...

BERT命名实体识别实战:从原理到Hugging Face实现

1. 基于BERT的命名实体识别实战指南命名实体识别&#xff08;NER&#xff09;是自然语言处理中的一项基础任务&#xff0c;它能从非结构化文本中识别出人名、地名、组织机构名等特定类别的实体。想象一下&#xff0c;当你阅读"微软CEO萨提亚纳德拉在西雅图的会议上发言&qu…...