当前位置: 首页 > 知识库问答 >
问题:

使用Optaplanner的基于优先级的项目作业调度

汤嘉平
2023-03-14

共有2个答案

宗政学
2023-03-14

根据Optaplanner留档,我们不应该使用困难比较类来实现业务逻辑。上述方法违反了该原则。也许应该实现使用时间的约束?

何华灿
2023-03-14

在一些尝试错误和拉头发活动之后,我终于成功地用优先级基项目特性增强了示例。所以我想,我会在这里分享,因为也许在未来的时间里,这可能会帮助那些和我有同样需求的人。首先,我们需要在项目类中添加一个简单属性(我使用int):

private int priority;

记住为这个属性创建getter和setter方法。之后,创建一个比较器类并给它一个名称AllocationDifficultyComparator,将其设置为实现比较器,可序列化。将这些代码放入比较方法中:

return new CompareToBuilder().append(a.getProject.getPriority(), b.getProject().getPriority()).append(b.getId(), a.getId()).toComparison();

打开分配类,然后在@PlanningEntity注解中添加一个困难的比较类变量,将值设置为分配困难omparator.class.最后一步,打开project JobSchedulingSolverConfig.xml文件,将构造为FIRST_FIT_DECREASING我们就完成了,耶!:-D

为了测试它,我们可以将优先级属性添加到sampleData xml文件中,例如我们可以使用值:

高=3 |中=2 |低=1

注:如果两个项目具有相同的优先级,则将根据较小的id执行(这意味着该项目优先于另一个项目)。

就是这样,我希望这一部分可以帮助将来的人完成工作,防止他们拉扯头发

 类似资料:
  • 假设以下进程在指定的时间到达执行。每个进程将运行列出的时间量。 我想绘制甘特图并计算抢占式最短作业优先调度的平均等待时间。 解决办法 http://imgur.com/fP8u61C 等待时间为2毫秒。 请告诉我这是否正确。 我怀疑的步骤是,在进程B到达的3ms时,调度程序是完成进程A还是启动进程B。

  • 非常感谢您抽出时间!

  • 正如我在前一个问题中提到的,我正在使用优秀的OptaPlanner库创建一个应用程序,该应用程序可以帮助定制job shop进行项目调度。该应用程序具有以下要求: “除非经理特别批准,否则申请不得在任何给定的周末或假日安排工作。” 我很好奇如何更改我的域模型或评分函数以纳入此要求。一个基本想法是将全球可再生资源(即员工)的容量从每月30天减少到每月22天(包括周末)。然而,我已经看到,这是一种幼稚

  • 有人能解释一下如何在OptaPlanner中为项目作业调度问题建模我自己的数据吗?我看到有xml文件、txt文件和很多。mm文件(j1010_1.mm),我不知道如何对自己的输入建模。 样本A_1中的这些数字是什么。txt是什么意思? 2 0 10 j10。毫米/j1011_7。毫米4 19 j10。毫米/j1060_2。毫米4 16-1-1-1 我想是 2-项目数量0-发布日期10-关键路径持续

  • 在优先级调度中,为每个进程分配一个优先级编号。 在一些系统中,数字越小,优先级越高。 而在其他情况下,数字越高,优先级越高。 在可用进程中具有较高优先级的进程由CPU提供。 存在两种类型的优先级调度算法。 一种是抢占式优先级调度,而另一种是非抢先式优先级调度。 分配给每个过程的优先级编号可能会也可能不会变化。 如果优先级号码在整个过程中没有改变,它被称为静态优先级,而如果它保持定期改变自己,它被称

  • 在抢占式优先级调度中,在进程到达就绪队列时,其优先级与就绪队列中存在的其他进程的优先级以及CPU在该点执行的优先级进行比较。 在所有可用的进程中具有最高优先级的那个将被赋予CPU。 抢先优先级调度和非抢占优先级调度之间的区别在于,在抢先优先级调度中,正在执行的作业可以在更高优先级作业到达时停止。 一旦所有作业在就绪队列中可用,算法将表现为非抢占式优先级调度,这意味着计划的作业将运行直至完成并且不会