当运行我的问题的求解器时,我得到以下错误消息:
Exception executing consequence for rule "addMarks" in com.abcdl.be.solver: [Error: getEndTime(): null]
[Near : {... getEndTime() ....}]
...
该消息表示规则“addmarks”中的方法getEndTime()返回null。下面是drools文件:
// ############################################################################
// Hard constraints
// ############################################################################
rule "RespectDependencies" // Respect all the dependencies in the input file
when
Dependency(respected() == false)
then
scoreHolder.addHardConstraintMatch(kcontext, 0, -1);
end
rule "addMarks" //insert a Mark each time a process chain starts or ends
when
Node($startTime : getStartTime(), $endTime : getEndTime())
then
insertLogical(new Mark($startTime));
insertLogical(new Mark($endTime));
end
rule "resourcesLimit" // At any time, The number of resources used must not exceed the total number of resources available
when
Mark($startTime: time)
Mark(time > $startTime, $endTime : time)
not Mark(time > $startTime, time < $endTime)
$total : Number(intValue > Global.getInstance().getAvailableResources() ) from
accumulate(Node(getEndTime() >=$endTime, getStartTime()<= $startTime, $res : resources), sum($res))
then
scoreHolder.addHardConstraintMatch(kcontext, 1, (Global.getInstance().getAvailableResources() - $total.intValue()) * ($endTime - $startTime));
end
rule "masterDataManagement" // Parallel loading is forbidden
when
$n1 : Node(md != "", $md : md, $id : id)
$n2 : Node(id > $id, md == $md) // We make sure to check only different nodes through the condition "id > $id"
eval(Graph.getInstance().getPaths($n1, $n2).size() == 0)
then
scoreHolder.addHardConstraintMatch(kcontext, 2, -1);
end
// ############################################################################
// Soft constraints
// ############################################################################
rule "MaximizeResources" //Maximize use of available resources at any time
when
Mark($startTime: time)
Mark(time > $startTime, $endTime : time)
not Mark(time > $startTime, time < $endTime)
$total : Number(intValue < Global.getInstance().getAvailableResources() ) from
accumulate(Node(getEndTime() >=$endTime, getStartTime()<= $startTime, $res : resources), sum($res))
then
scoreHolder.addHardConstraintMatch(kcontext, 0, ($total.intValue() - Global.getInstance().getAvailableResources()) * ($endTime - $startTime));
end
rule "MinimizeTotalTime" // Minimize the total process time
when
Problem($totalTime : getTotalTime())
then
scoreHolder.addSoftConstraintMatch(kcontext, 1, -$totalTime);
end
节点是规划实体,在规划实体中定义了返回null的方法getStartTime()和getEndTime()
规划实体代码:
@PlanningEntity(difficultyComparatorClass = NodeDifficultyComparator.class)
public class Node extends ProcessChain {
private Node parent; // Planning variable: changes during planning, between score calculations
private int id; // Used as an identifier for each node. Different nodes cannot have the same id
public Node(String name, String type, int time, int resources, String md, int id)
{
super(name, "", time, resources, "", type, md);
this.delay = "";
this.id = id;
}
public Node()
{
super();
this.delay = "";
}
@PlanningVariable(valueRangeProviderRefs = {"parentRange"}, nullable = false)
public Node getParent() {
return parent;
}
public void setParent(Node parent) {
this.parent = parent;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String toString()
{
if(this.type.equals("AND"))
return delay;
if(!this.md.isEmpty())
return Tools.excerpt(name+" : "+this.md);
return Tools.excerpt(name);
}
public boolean equals( Object o ) {
if (o == this)
return true;
if (o instanceof Node) {
return
this.name.equals(((Node)o).name);
} else {
return false;
}
}
// ************************************************************************
// Complex methods
// ************************************************************************
public int getStartTime()
{
return Graph.getInstance().getNode2times().get(this).getFirst();
}
public int getEndTime()
{
return Graph.getInstance().getNode2times().get(this).getSecond();
}
@ValueRangeProvider(id = "parentRange")
public Collection<Node> getPossibleParents()
{
Collection<Node> nodes = Graph.getInstance().getNodes();
nodes.remove(this); // We remove this node from the list
nodes.remove(Graph.getInstance().getParents(this)); // We remove its parents from the list
return nodes;
}
/**
* The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used because the rule engine already
* requires them (for performance in their original state).
* @see #solutionHashCode()
*/
public boolean solutionEquals(Object o) {
if (this == o) {
return true;
} else if (o instanceof Node) {
Node other = (Node) o;
return new EqualsBuilder()
.append(name, other.name)
.isEquals();
} else {
return false;
}
}
/**
* The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used because the rule engine already
* requires them (for performance in their original state).
* @see #solutionEquals(Object)
*/
public int solutionHashCode() {
return new HashCodeBuilder()
.append(name)
.toHashCode();
}
这是非常奇怪的,因为node2times().get()不会为Graph类中的所有节点返回null。我做了一个测试以确定:
public class Graph {
private ArrayList<Node> nodes;
...
public void test()
{
for(Node node : nodes)
{
int time = 0;
try{
time = getNode2times().get(node).getFirst();
System.out.print(node+" : "+"Start time = "+time);
}
catch(NullPointerException e)
{
System.out.println("StartTime is null for node : " +node);
}
try{
time = node.getEndTime();
System.out.println(" End time = "+time);
}
catch(NullPointerException e)
{
System.out.println("EndTime is null for node : " +node);
}
}
}
...
}
您重载的是node.equals()
而不是node.hashcode()
。
您正在使用一个map:Node to times(如果我可以信任您使用的名称的话)。
这违反了在HashMap中使用对象作为键的约定。
我在React中得到以下警告 'React Hook useEffect缺少依赖项:'Bakerys'。包括它或移除依赖项数组。如果'set flatbakery'需要'bakerys'的当前值,您还可以用useReducer替换多个useState变量。(反作用-挂钩/穷尽-DEPS)‘ bakerys和Flatbakery是react状态变量。
我不知道这个,但我得到了以下路线的stacktrace: 有什么明显的问题吗?
问题内容: 这是成功的一个例子: 请注意,insert-select中的第二列是明确为null。 这是一个失败的示例: 请注意,在此示例中,我得到了,而不是第二列中的显式null ,它从delete语句作为null返回。 如果两个值都为null,那么第二个示例为什么会因为这个错误而困扰我?我已经仔细检查了两者,这是唯一的功能差异。 问题答案: 在第一个示例中,您为语句提供了一个 尚未输入类型的 N
我想在react代码中使用axios从服务器获取数据。我将axios代码放入react组件的组件willmount中,如下所示。 但上面的代码给我带来了这样的错误 但当我对代码做了一些细微的修改,比如下面的代码时,一切都正常了。 我想说的另一件事是“this”对象在componentWillMount中是活动的 有人告诉我上面两种代码的区别吗?
当我尝试编译这段代码时,Eclipse会出现以下两个错误: > 用于函数:maxmin的非法修饰符;只允许最终 对于:Mn不能解析为变量 为什么会出现这两个错误? 我想这可能已经回答了这个问题,但我不明白其中使用的术语。 这是我的代码:
问题是,我正在测试一个方法,但它给我一个404错误,我已经把我的承载令牌在我的请求中,这是合乎逻辑的,因为我需要把头“授权”。当我在《邮差》中提出这个要求时,它给了我很好的结果。我有什么不及格的? monedaServiceTest.java: 输出控制台: