我试图将规划实体和一个问题事实加入到约束流中,但我的IDE抛出了一个错误:无法解析方法'join(java.lang.class
我的问题结构和运输问题很相似。我有节点和边,想要计算边的数量。
我的主要问题是:
class Node{
UUID id;
int itemsInInventory;
...
}
和规划实体:
@PlanningEntity
class Edge{
Node from;
Node to;
@PlanningVariable
int itemsTransported;
getFromId(){return from.getId()}
getToId(){return to.getId()}
}
约束的代码为:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Edge.class, equal(Edge::getFromId, Edge::getId))
...
}
如果我尝试连接边与边,例如:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node, equal(Node:: getId, Node::getId)) //EDITED
...
}
这不会出错。原因是,我尝试将节点连接到节点的Edge属性中的Edge中吗?有没有别的办法可以做我想做的事?
我不得不说我不明白你的后一个例子是如何运作的:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node, equal(Node:: getId, Edge::getId))
...
}
在本例中,您正在连接节点
和另一个节点
。因此,equal(...)
联接器需要在两侧使用node
,如下所示:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node.class, equal(Node::getId, Node::getId))
...
}
或者更简短地说:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Node.class, equal(Node::getId))
...
}
这也是您的第一个示例没有编译的原因:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Edge.class, equal(Edge::getFromId, Edge::getId))
...
}
在本例中,您将node
与edge
连接起来,因此equal(...)
连接器需要在左侧使用node
并在右侧使用edge
,如下所示:
public Constraint minimizeShortage(ConstraintFactory constraintFactory) {
return constraintFactory.from(Node.class)
.join(Edge.class, equal(Node::getId, Edge::getFromId))
...
}
我发现约束流无论如何都不适合我的目的,因为我无法在使用奖励或惩罚函数时控制基于匹配实体的分数级别。我将继续使用drools语法。
我试图解决一个调度问题,它围绕着以下安排: 是否可以使用和实现约束?我尝试过以下路线: 我认为应该没有问题,但不确定如何获得这个来实现我想要的。这里是否需要?还是有一个不同的、更好的整体方法? 作为参考,ShiftAssignment类可以很容易地拥有如下所示的方法:
我正试图用java的Optaplanner实现一个简单的云平衡系统,该系统具有过度约束的规划。 最喜欢的是,我正在尝试使用Optaplanner Java库实现一个简单的云平衡系统,该系统具有过度约束的规划。我将模型映射到我的问题(车辆和资产),进行变量替换cpuPower- 如果我使用这个简单的例子,我会收到一个所有进程都已签名的响应,尽管其中一些不能分配给计算机。对于这个问题,optaplan
是否可以在OptaPlanner约束流中使用除inner join以外的其他join类型?在我的情况下,我需要做一个左联接。
我想为VRP创建一个过度约束规划的增量分数。我创建了一个传统的虚拟车辆,其中包括所有计划外的客户。 示例: Optaplanner将Customer1从Vehicle1移动到Vehicle2: 当我得到AfterVariableChanged:previousStandstill(Customer1)时,在Customer.getVehicle()中,我有旧车辆的价值,我不知道是否需要添加软成本(
我想用optaplanner设计一个预订系统,按照我的商业模式: 要预订预约,客户将选择: null 由于我对optaplanner是个新手,你能告诉我这是不是该走的路吗? 更新1:出于设计目的,我已经将问题简化到最小。