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

OptaPlanner笔记1

1.1 什么是OptaPlanner

每个组织都面临规划问题:为产品或服务提供有限的受约束的资源(员工、资产、时间和金钱)。OptaPlanner用来优化这种规划,以实现用更少的资源来做更多的业务。 这被称为Constraint Satisfaction Programming(约束规划,这是运筹学学科的一部分)。

OptaPlanner 是一个轻量级、可嵌入的约束满足问题求解引擎,可优化规划问题。它适用的场景例如:

  • 员工轮班排班:为护士、修理工等排班。
  • 议程安排:安排会议,约会,维护工作,广告等。
  • 教育方面的排班:安排学科,课程,考试,学术会议等。
  • 车辆路线:利用已知的地图工具规划运输货物和/或乘客的车辆路线,这些路线可以经过多个目的地。
  • 装箱问题:如何使用装箱、卡车、船舶和存储仓库装载物品,或者是云计算中如何跨计算机资源打包信息。
  • 车间作业调度:汽车装配线规划、机器队列规划、劳动力任务规划等。
  • 切割库存:在切割纸张、钢材、地毯等时最大限度地减少浪费。
  • 体育日程安排:为足球联赛、棒球联赛规划比赛和训练时间表。
  • 财务优化:投资组合优化、风险分散等。

在这里插入图片描述

1.2 什么是规划问题

在这里插入图片描述

规划问题存在一个基于有限资源和特定规则的最优解。最优解可以是任何数量的事务,例如:

  • 利润最大化
  • 环境影响最小化
  • 员工和顾客满意度最大化

实现这些目标的能力取决于可用资源的数量,例如:

  • 人员数量
  • 时间
  • 预算
  • 实物资产(机械、车辆、计算机、建筑物等)

还必须考虑与这些资源相关的特定限制,例如一个人的工作小时数、他们使用某些机器的能力或设备之间的兼容性。

OptaPlanner可以帮助Java程序员有效地解决约束满足问题。它使用非常有效的得分计算,将优化启发式和元启发式算法结合在一起。

1.2.1 规划问题是NP-Complete还是NP-Hard问题

NP-Hard问题是指在多项式时间内无法解决的问题。这些问题通常是非常困难的,因为它们的解决需要大量的计算资源。NP-Hard问题的例子包括旅行推销员问题、分治问题等。
NP-Complete问题是指在多项式时间内可以解决,但在NP-Hard问题的解决过程中可以被解决的问题。这些问题的解决通常比NP-Hard问题的解决要快,但仍然需要大量的计算资源。NP-Complete问题的例子包括完全背包问题、分支界限问题等。

前面提到的所有场景都可能是NP-Complete或者NP-Hard的,也就是说:

  • 在合理的时间内验证问题的给定解决方案很容易。
  • 没有灵丹妙药可以在合理的时间内找到问题的最佳解决方案。(至少,世界上最聪明的计算机科学家还没有发现这样的灵丹妙药。 但是,如果他们找到一个适用于某个NP-Complete问题的解决方案,它将适用于每个NP-Complete问题。)

这意味着解决问题可能比你预期的要困难,因为常用的技术不足以解决问题:

  • 蛮力算法(即使是再聪明的变体)将会耗费大量的时间
  • 快速算法(例如在装箱问题中,先放入最大的物品)将得到远远偏离最优解的解决方案。

通过使用先进的优化算法,OptaPlanner 可以在合理的时间内为这类规划问题找到接近最优的解决方案。

1.2.2 规划问题存在约束(硬约束或软约束)

通常,规划问题存在至少两个级别的约束:

  • 绝对不可破坏的(负面)硬约束。(例如,一名教师不能同时教授两节不同的课程。)
  • 如果可以避免,就不应该破坏的(负面)软约束。(例如:某教师不喜欢在星期五的下午授课。)

某些问题也可能存在积极的约束:

  • 如果可能的话,应该满足的(正向的)软约束。(例如,某教师喜欢在星期一的上午授课。)

某些基础问题(例如N皇后问题)只存在硬约束。某些问题存在三个或更多级别的约束,例如硬、中等、软约束。
这些约束定义了规划问题的得分计算(也称为适应度函数)。规划问题的每个解决方案都可以用得分评级。在 OptaPlanner 中,得分约束用面向对象的语言(例如Java代码)编写。这样的代码易于编写、灵活且可扩展。

1.2.3 规划问题存在巨大的搜索空间

规划问题有许多解决方案。 这些解决方案可划分为以下几类:

  • 不考虑是否破坏任何约束的possible solution(可能方案)。规划问题往往存在大量这种毫无价值的解决方案。
  • 不破坏任何负面硬约束的feasible solution(可行方案)。可行方案往往与可能方案数量相对。有时候没有可行方案。每一个可行方案都是可能方案
  • 得分最高的optimal solution(最佳方案)。规划问题至少有一个最佳方案。即使没有可行方案,且最佳方案不可行的情况下也是如此。
  • 在给定时间内找到的最高分的best solution(最优方案)。最优方案可能是可行的,如果时间充裕的话,它就是最佳方案。

与直觉相反,即使数据集很小,可能方案的数量也是巨大的(如果计算正确的话)。正如你在例子中看到的,大多数案例比已知宇宙中原子的数量(10^80)有更多的可能方案。由于没有找到最优解决方案的灵丹妙药,因此任何实现都必须评估一部分的可能方案。

OptaPlanner支持多种优化算法,可以有效地处理大量可能方案。 根据用例的不同,某些优化算法的性能优于其他算法,但无法提前判断。使用 OptaPlanner,只需几行XML或代码来修改求解器的配置,即可轻松切换优化算法。

相关文章:

OptaPlanner笔记1

1.1 什么是OptaPlanner 每个组织都面临规划问题:为产品或服务提供有限的受约束的资源(员工、资产、时间和金钱)。OptaPlanner用来优化这种规划,以实现用更少的资源来做更多的业务。 这被称为Constraint Satisfaction Programming…...

github 镜像站及下载加速网址

1、提供常用的镜像网址(记住千万别登录账号): https://github.com.cnpmjs.org https://hub.fastgit.org https://hub.nuaa.cf/ https://hub.yzuu.cf/ https://hub.njuu.cf/上面的网址是一个克隆版的Github,上面的镜像网站内容跟G…...

大数据-玩转数据-Flink RedisSink

一、添加Redis Connector依赖 具体版本根据实际情况确定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、启动redis 参…...

c++病毒/恶搞代码大全( 上 )

注&#xff1a;以下代码应勿用于非法&#xff08;Dev-c5.11实测可用&#xff09; 1: 效果:无限生成cmd 解决方法&#xff1a;关闭程序即可 #include<bits/stdc.h> #include<windows.h> using namespace std; int main() {while(1)system("start cmd"…...

【数学建模】清风数模更新5 灰色关联分析

灰色关联分析综述 诸如经济系统、生态系统、社会系统等抽象系统都包含许多因素&#xff0c;系统整体的发展受各个因素共同影响。 为了更好地推动系统发展&#xff0c;我们需要清楚哪些因素是主要的&#xff0c;哪些是次要的&#xff0c;哪些是积极的&#xff0c;哪些是消极的…...

Windows下运行Tomcat服务时报GC Overhead Limit Exceeded

根本原因是在新建Tomcat作为Windows服务时&#xff0c;系统默认设置的堆内存太小了&#xff0c;我们打开/bin/service.bat文件&#xff0c;将如下图所示的默认值改大一些就好了 if "%JvmMs%" "" set JvmMs512 if "%JvmMx%" "" set J…...

OpenCV实例(八)车牌字符识别技术(一)模式识别

车牌字符识别技术&#xff08;一&#xff09;模式识别 1.模式识别流程2. 模式识别方式 影响并导致汽车牌照内字符出现缺损、污染、模糊等情况的常见因素有照相机的性能、采集车辆图像时光照的差异、汽车牌照的清洁度等。为了提高汽车牌照字符识别的准确率&#xff0c;本节将把英…...

OPENCV C++(七)霍夫线检测+找出轮廓和外接矩形+改进旋转

霍夫线检测 vector<Vec2f> lines1;HoughLines(canny_mat, lines1, 1, CV_PI / 180.0,90 );//45可以检测里面两条线 80检测出外边两条线 定义存放输出线的向量 此向量输出有<距离&#xff0c;角度> 因为检测的原理就是在变换霍夫空间里面去检测的&#xff0c;这里可…...

Error: EACCES: permission denied, rename ‘/usr/local/lib/node_modules/appium‘

在使用npm uninstall -g appium卸载appium的过程中报错 Error: EACCES: permission denied, rename /usr/local/lib/node_modules/appium -> /usr/local/lib/node_modules/.appium-cfBVovI6 npm ERR! code EACCES npm ERR! syscall rename npm ERR! path /usr/local/lib/n…...

CentOS 7中,配置了Oracle jdk,但是使用java -version验证时,出现的版本是OpenJDK,如何解决?

1.首先&#xff0c;检查已安装的jdk版本 sudo yum list installed | grep java2.移除、卸载圈红的系统自带的openjdk sudo yum remove java-1.7.0-openjdk.x86_64 sudo yum remove java-1.7.0-openjdk-headless.x86_64 sudo yum remove java-1.8.0-openjdk.x86_64 sudo yum r…...

牛客 松鼠回家(二分答案+最短路)

题目描述 松鼠宝宝由于贪玩去了一个具有n个点和m条边的无向图中&#xff0c;现在松鼠宝宝仅有h点体力&#xff0c;所有的边经过一次后会消耗部分体力&#xff0c;同时松鼠爸爸为了惩罚贪玩的松鼠宝宝&#xff0c;每到一个点会扣除部分松果&#xff08;起点的松果也会扣除&#…...

Mysql in 查询的奇怪方向

Mysql in 查询的奇怪方向 关于表字段存储的数据为 num1,num2,num3时, 还要通过多个num1,num2入参针对该字段进行查询 建表语句 CREATE TABLE test (test_ids varchar(100) DEFAULT NULL COMMENT 保存ids 以逗号分隔 ) ENGINEInnoDB;数据项 查询语句 SELECT test_ids FROM t…...

ORB-SLAM2第二节---双目地图初始化

比起单目初始化&#xff0c;而双目实现地图的初始化非常简单&#xff0c;只需要一帧&#xff08;左右目图像&#xff09;即可完成初始化。 行特征点统计。考虑用图像金字塔尺度作为偏移量&#xff0c;在当前点上下正负偏移量&#xff08;r)内的纵坐标值都认为是匹配点可能存在…...

后端常使用的中间件知识点--持续更新

类型难度mysqlmysql中SQL优化&#xff1a;多角度分析包学包会&#xff0c;sql优化全过程&#xff0c;刨根分析redis多角度剖析redis数据结构及底层实现原理、应用场景MQ简单大体说明RabbitMQ的使用&#xff08;简单版&#xff09;mybatis使用JDBC的批量插入百万数据要多少秒一遍…...

非科班的大家如何顺滑转码

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f;请来聊聊你的看法和观点&#xff0c;我本身是信息与计算科学专业&#xff0c;周围的同学有不少也是被这个名字“骗过来的”&#xff0c;看这个名字都以为是计算机相关专业&…...

webpack中常见的Loader

目录 1.webpack中的loader是什么&#xff1f;配置方式 2. loader特性3.常见的loader 1.webpack中的loader是什么&#xff1f; loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分…...

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用&#xff0c;它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中&#xff0c;我们将重点介绍 RabbitMQ&#xff0c;一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…...

python 批量下载m3u8的视频

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;点击跳转 方法&#xff1a; 解析m3u8&#xff0c;获取其中的ts列表&#xff0c;多线程下载所有ts文件。 全部下完之后&#xff0c;用ffmpeg合…...

最后一击

第二届上海市青少年算法竞赛&#xff08;小学组&#xff09; 题目描述 Description 小爱和小艾两人组队打一只怪兽。一开始怪兽有 n 点生命值&#xff0c;当 n 变成 0 或更低时&#xff0c;怪兽就被消灭了。他们两人是同时开始攻击的&#xff0c;小爱每分钟可以攻击 a 下&…...

K8S资源管理方式

K8S资源管理方式 文章目录 K8S资源管理方式一、陈述式资源管理1.基础命令操作2.创建pod3.查看资源状态4.查看pod中的容器日志5.进入pod中的容器6.删除pod资源7.pod扩容8.项目生命周期管理&#xff08;创建-->发布-->更新-->回滚-->删除&#xff09;8.1创建services…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...

【版本控制】GitHub Desktop 入门教程与开源协作全流程解析

目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork&#xff08;创建个人副本&#xff09;步骤 2: Clone&#xff08;克隆…...