1.什么是OptaPlanner? 每个组织都面临规划问题:以有限的资源(员工、资产、时间和金钱)提供产品或服务。OptaPlanner 优化此类计划以用更少的资源开展更多业务。这被称为约束满足编程(它是运筹学学科的一部分)。 OptaPlanner是一个轻量级、可嵌入的约束满足引擎,可优化规划问题。它解决了以下用例:
- 员工轮班:安排护士、修理工……
- 日程安排:安排会议、约会、维护工作、广告……
- 教育时间表:安排课程、课程、考试、会议演示……
- 车辆路线:规划车辆路线(卡车、火车、轮船、飞机……),使用已知的地图工具将货物和/或乘客运送到多个目的地……
- 装箱:用物品填充容器、卡车、轮船和存储仓库,还可以跨计算机资源包装信息,如在云计算中……
- 车间调度:规划汽车装配线,机器队列规划,劳动力任务规划,......
- 裁切库存:在裁切纸张、钢材、地毯等时尽量减少浪费...
- 运动日程安排:为足球联赛、棒球联赛、……规划比赛和训练日程
- 财务优化:投资组合优化,风险分散,......
- 利润最大化 - 最佳目标会带来尽可能高的利润。
- 最小化生态足迹——最佳目标对环境的影响最小。
- 最大限度地提高员工或客户的满意度——最佳目标优先考虑员工或客户的需求。
- 人的数量。
- 多少时间。
- 预算。
- 实物资产,例如机器、车辆、计算机、建筑物等。
- 在合理的时间内验证给定的问题解决方案很容易。
- 没有灵丹妙药可以在合理的时间内找到问题的最佳解决方案 (*)。
- 蛮力算法(甚至更智能的变体)将花费太长时间。
- 一个快速算法,例如在装箱中,首先放入最大的物品,将返回一个远非最优的解决方案。
- 不得破坏(*负)硬约束。*例如:1 位老师不能同时教 2 节不同的课程。
- 如果可以避免,则不应破坏*(负)软约束。*例如:A 老师不喜欢在星期五下午上课。
- 如果可能,应满足*积极的软约束(或奖励) 。*例如:B 老师喜欢在星期一早上上课。
- 一个可能的解决方案是任何解决方案,无论它是否打破任何数量的约束。规划问题往往有大量可能的解决方案。其中许多解决方案毫无价值。
- 可行的解决方案是不破坏任何(负)硬约束的解决方案。可行解的数量往往与可能解的数量相关。有时没有可行的解决方案。每个可行的解决方案都是可能的解决方案。
- 最优解是得分最高的解。规划问题往往有 1 个或几个最优解。始终存在至少 1 个最优解,即使在没有可行解且最优解不可行的情况下也是如此。
- 找到的最佳解决方案是实现在给定时间内找到的得分最高的解决方案。找到的最佳解决方案很可能是可行的,并且只要有足够的时间,它就是一个最佳解决方案。
- 公共 API:包命名空间org.optaplanner.core.api、org.optaplanner.benchmark.api、org.optaplanner.test.api和org.optaplanner.persistence 中的所有类…api在未来版本中 100%向后兼容(特别是次要版本和修补程序版本)。在极少数情况下,如果主要版本号发生变化,一些特定的类可能会有一些向后不兼容的变化,但这些会在升级配方中清楚地记录。
- XML 配置:XML 求解器配置向后兼容所有元素,但需要使用非公共 API 类的元素除外。XML 求解器配置由包命名空间org.optaplanner.core.config和org.optaplanner.benchmark.config中的类定义。
- 实现类:所有其他类不向后兼容。它们将在未来的主要或次要版本中发生变化(但可能不会在修补程序版本中)。升级秘诀描述了每一个这样的相关变化,以及在升级到新版本时如何快速处理它。
impl
类。那些记录在案impl
的类是可靠且安全的(除非在本文档中明确标记为实验性的),但我们还不能完全适应将它们的签名写在石头上。
4.4. 社区和支持
有关新闻和文章,请查看我们的博客、 推特(包括杰弗里的推特)和脸书。 如果您对 OptaPlanner 感到满意,请通过发布有关它的推文或博客文章让我们感到高兴。
欢迎在这里公开提问。欢迎在我们的问题跟踪器中提出错误和功能请求。在 GitHub 上非常欢迎拉取请求并获得优先处理!通过开源您的改进,您将受益于我们的同行评审以及我们在您的改进基础上所做的改进。
红帽通过雇佣核心团队来赞助 OptaPlanner 的开发。对于企业支持和咨询,请查看这些服务。
4.5. 与 KIE 的关系
OptaPlanner 是KIE 项目组的一部分。它定期(通常每 3 周)一起发布。
请参阅架构概述以了解有关与Drools的可选集成的更多信息。
5. 下载并运行示例
5.1。获取发布 ZIP 并运行示例
立即尝试:
- 1. 从OptaPlanner 网站下载 OptaPlanner 的发布 zip并解压缩。
- 2. 打开目录示例并运行脚本。 Linux 或 Mac: $ cd examples $ ./runExamples.sh 视窗: $ cd examples $ runExamples.bat
- 在 IntelliJ IDEA、VSCode 或非香草 Eclipse 中:
- 1. 打开文件examples/sources/pom.xml作为一个新项目,maven 集成将负责其余的工作。
- 2. 运行项目中的示例。
- 在 vanilla Eclipse(缺少 M2Eclipse 插件)中:
- 1. 为目录examples/sources打开一个新项目。
- 2. 将所有 jar 从目录二进制文件和目录examples/binaries添加到类路径,文件examples/binaries/optaplanner-examples-*.jar除外。
- 3. 添加 Java 源目录src/main/java和 Java 资源目录src/main/resources。
- 4. 创建运行配置:
-
主类:
org.optaplanner.examples.app.OptaPlannerExamplesApp
-
虚拟机参数(可选):
-Xmx512M -server
-
1.
要直接运行特定示例并跳过示例选择窗口,请运行其
App
类(例如CloudBalancingApp
)而不是OptaPlannerExamplesApp
. - 5. 运行该运行配置。
optaplanner-core
在您的pom.xml
:
<dependency>
<groupId>org.optaplanner</groupId>
<artifactId>optaplanner-core</artifactId>
<version>...</version>
</dependency>
或者更好的是,在以后添加其他 optaplanner 依赖项时导入optaplanner-bom
independencyManagement
以避免重复版本号:
<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>
如果您使用 Gradle,请optaplanner-core
在您的build.gradle
:
dependencies {
implementation 'org.optaplanner:optaplanner-core:...'
}
如果您仍在使用 ANT,请从类路径中的下载 zipbinaries
目录中复制所有 jar。
下载 zip 的目录包含的 jar 比实际使用的binaries
要多得多。optaplanner-core
它还包含其他模块使用的 jar,例如optaplanner-benchmark
.检查 maven 存储库pom.xml
文件以确定optaplanner-core
等的最小依赖集。
5.4. 从源代码构建 OptaPlanner
先决条件
- 设置Git。
- 使用 HTTPS 或 SSH 在 GitHub 上进行身份验证。
- 有关设置和验证 Git 的更多信息,请参阅GitHub 。
- 设置Maven。