gpt4 book ai didi

java - 在规则中使用 CountableValueRange

转载 作者:行者123 更新时间:2023-12-02 00:03:13 24 4
gpt4 key购买 nike

我目前正在为共享某些资源的任务构建一个调度应用程序。每个任务可能使用一定百分比的资源。

我需要在 Drools 规则中检查的是并行任务对每个共享资源的使用率不超过 100%。

所以代码看起来像:

@Data
public class Resource {
@PlanningId
private Integer id;

private String label;
}
public class ResourceUsage {
@PlanningId
private Integer id;

private Resource resource;

private int usagePercent;

}

要安排的实体

@Data
@PlanningEntity
public class TaskAssignment {
@PlanningId
private Integer id;

@PlanningVariable(valueRangeProviderRefs = { "slotRange" })
private Integer timeSlot;

private int duration;
private ResourceUsage resourceUsage;

public Integer getEndingSlot() {
return timeSlot + duration;
}
}

最后是解决方案

@Data
@PlanningSolution
public class PlanningSolution {
@PlanningId
private Integer id;

@PlanningEntityCollectionProperty
private List<TaskAssignment> tasks = new ArrayList<>();

@ValueRangeProvider(id = "slotRange")
public CountableValueRange<Integer> getSlotRange() {
return ValueRangeFactory.createIntValueRange(0, 10_000);
}

@ProblemFactCollectionProperty
private Set<Resource> resources = new TreeSet<>();
}

Setter 和 getter 不存在,因为我使用 Lombok 来避免编写它们。

过去,我使用一个类来表示时隙,编写一个规则来迭代时隙集合很容易,并且我能够按时隙检查每个资源的全局使用情况,并在使用量较大时进行惩罚超过 100%。

由于我在内存使用方面遇到问题,我决定将 TimeSlot 类转换为 CountableValueRange 但现在,我不知道如何创建与范围内的每个值匹配的规则。执行与之前相同的计算。

有什么办法或者我必须切换回我的 TimeSlot 类(class)吗?

编辑:影子规划实体中包含的影子变量可以解决这个问题吗?

最佳答案

我终于找到了一种编写规则的方法,它可以让我避免在时间段上进行迭代。这个想法是在作业开始时计算使用情况

rule "Maximum usage of a resource"
when
$r : Resource()
$p : TaskAssignment($id1 : id, $ts : timeSlot != null,
resourceUsage!.ressource==$r,
$usage : resourceUsage!.usagePercent);
accumulate(TaskAssignment(timeSlot != null, timeSlot <= $ts,
endingSlot > $ts, id != $id1,
resourceUsage!.ressource==$r,
$rate : resourceUsage!.usagePercent);
$s:sum($rate);
$s + $usage > 100)
then
scoreHolder.addHardConstraintMatch(kcontext, 100-($s + $usage));
end

关于java - 在规则中使用 CountableValueRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com