OptaPlanner笔记1

news2024/11/25 4:45:58

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或代码来修改求解器的配置,即可轻松切换优化算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/868182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用maven打包时如何跳过test,有三种方式

方式一 针对spring项目&#xff1a; <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> …

Vim学习(三)—— Git Repo Gerrit

Git、Gerrit、Repo三者的概念及使用 三者各自作用&#xff1a; git&#xff1a;版本管理库&#xff0c;在git库中没有中心服务器的概念&#xff0c;真正的分布式。 repo&#xff1a;repo就是多个git库的管理工具。如果是多个git库同时管理&#xff0c;可以使用repo。当然使用…

探讨uniapp的navigator 页面跳转问题

navigator 页面跳转。该组件类似HTML中的<a>组件&#xff0c;但只能跳转本地页面。目标页面必须在pages.json中注册。 "tabBar": {"color": "#7A7E83","selectedColor": "#3cc51f","borderStyle": "bl…

五、Netty高性能架构设计

目录 5.1 线程模型基本介绍5.2 传统阻塞I/O服务模型5.2.1 工作原理5.2.2 阻塞IO模型特点5.2.3 阻塞IO存在的问题 5.3 Reactor模式5.3.1 针对传统阻塞IO服务模型的2个缺点&#xff0c;解决方案5.3.2 IO复用 线程池&#xff0c;就是Reactor模式设计的基本思想 5.1 线程模型基本介…

蓝桥杯-统计子矩阵

统计子矩阵 题目链接 思路&#xff1a; 使用前缀和滑动窗口 &#xff0c;可以先计算出纵向或横向的前缀和&#xff0c;matrix[i][j]表示前i行第j列之和 然后遍历上边界top和下边界buttom&#xff0c;再这个上下边界内使用滑动窗口&#xff0c;由于前面维护了纵向前缀和&…

榜单!全年或超150万辆!行泊一体系统方案供应商TOP10出炉

作为域控集中架构下的产物&#xff0c;智能驾驶赛道的行泊一体方案正在成为市场的主流配置&#xff0c;同时&#xff0c;各类计算&#xff08;芯片&#xff09;方案也都在发力这个细分赛道。 高工智能汽车研究院认为&#xff0c;和NOA不同&#xff0c;作为高低速组合功能的行泊…

CAD随机粗糙度表面插件

插件介绍 CAD随机粗糙度表面插件可用于在AutoCAD软件内生成随机高度分布的表面三维实体模型&#xff0c;适用于科研论文绘图、有限元建模、随机地形模拟等方面的应用。 插件可指定的参数有三维模型的长、宽、高&#xff1b;随机粗糙度表面信息中网格尺寸控制模型生成的精细程…

【LeetCode-简单】剑指 Offer 29. 顺时针打印矩阵(详解)

题目 输入一个矩阵&#xff0c;按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5]示例 2&#xff1a; 输入&#xff1a;matrix [[1,2,3,4],[5,6,7,8],[9,10,1…

根据源码,模拟实现 RabbitMQ - 从需求分析到实现核心类(1)

目录 一、需求分析 1.1、对 Message Queue 的认识 1.2、消息队列核心概念 1.3、Broker Server 内部关键概念 1.4、Broker Server 核心 API &#xff08;重点实现&#xff09; 1.5、交换机类型 Direct 直接交换机 Fanout 扇出交换机 Topic 主题交换机 1.6、持久化 1.7…

美团软件测试工程师高频面试题和答案

前言 8月底了&#xff0c;马上到了大家的找工作的高峰期了&#xff01;为了帮助大家更好的备战面试和跳槽&#xff0c;可以在众多求职者中脱颖而出&#xff0c;我帮大家准备了丰富的企业真实面试题&#xff0c;大家赶紧收藏吧&#xff01; 1、说下你最近做的项目&#xff0c;你…

C语言学习系列-->看淡指针(2)

文章目录 前言一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、二级指针五、指针数组六、指针数组模拟二维数组 前言 不把指针学的扎实&#xff0c;可不敢说自己C语言基础学的好 一、数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4…

利用python实现批量登录网络设备进行日常巡检

利用python实现批量登录网络设备 实现ensp与物理机互通ensp 配置配置网络设备远程登录 用python实现批量登录常见问题 通过阅读本文可以学习自动化运维相关知识&#xff0c;本文章代码可以直接使用&#xff0c;通过批量登录功能后&#xff0c;可以按照自己意愿进行功能更改与完…

电路基础笔记(更新中)

导体 导体是指那些能够轻易传递电荷&#xff08;电子&#xff09;的物质。在固体、液体或气体中&#xff0c;电子可以在导体内部自由移动&#xff0c;从而形成电流。导体的电导性取决于它的电子结构和能带特性。常见的导体包括金属&#xff08;如铜、铝、铁等&#xff09;以及一…

UNIX网络编程——TCP协议API 基础demo服务器代码

目录 一.TCP客户端API 1.创建套接字 2.connect连接服务器​编辑 3.send发送信息 4.recv接受信息 5.close 二.TCP服务器API 1.socket创建tcp套接字(监听套接字) 2.bind给服务器套接字绑定port,ip地址信息 3.listen监听并创建连接队列 4.accept提取客户端的连接 5.send,r…

怎么做Tik Tok海外娱乐公会呢?新加坡市场怎么样?

一、为什么选择TikTok直播 1. 海外市场潜力巨大 • 自2016年始&#xff0c;多家直播平台陆续拓展至东南亚、中东、俄罗斯、日韩、欧美、拉美等地区。 • 海外市场作为直播发展新蓝海&#xff0c;2021年直播行业整申请cmxyci体规模达百亿美元&#xff0c;并维持高速增长。 &a…

在阿里云服务器上安装部署WDCP主机管理系统教程

阿里云百科分享在阿里云服务器上安装部署WDCP主机管理系统流程&#xff0c;WDCP&#xff08;WDlinux Control Panel&#xff09;是一套Linux服务器及虚拟主机管理系统&#xff0c;通过Web控制和管理服务器。在WDCP的后台中&#xff0c;您可以更方便地使用Linux系统作为网站服务…

STM32CubeMX之freeRTOS消息队列

创建一个消息队列&#xff0c;两个发送任务&#xff0c;一个接受任务 发送任务一&#xff1a;等待时间为0 发送任务二&#xff1a;等待时间为最大 接受为0 简单来说就是&#xff1a; 任务一&#xff1a;一个普写 一个死写 一个普读 任务二&#xff1a;创造队列 一个普写 …

JDBC快速入门操作

一、jdbc简介 JDBC是java用于连接数据库的api&#xff0c;数据库软件有多种&#xff0c;像MySQL,SQLsever&#xff0c;Oracle等数据库&#xff0c;这些数据库都是由不同的团队开发的&#xff0c;所以相同的功能的api的名字不同&#xff0c;当一个后端工程需要切换一个数据库软件…

Java 实现敏感词检测

敏感词检测 敏感词的检测&#xff0c;一般是建立一个敏感词库&#xff0c;然后判断字符串中是否存在敏感词库中的某些词汇&#xff0c;然后将其过滤或者替换显示为其他文本&#xff0c;这对于一个和谐的网络环境是及其必要的&#xff0c;接下来就我们看看敏感词检测的实现方式…

Spring MVC 简介

目录 1. 什么是MVC2. 什么是SpringMVC 1. 什么是MVC MVC是一种常用的软件架构模式。可以看作是一种设计模式&#xff0c;也可以看作是一种软件框架。经典MVC模式中&#xff0c;M是指模型&#xff0c;V是视图&#xff0c;C则是控制器&#xff0c;使用MVC的目的是将M和V的实现代…