Java Optaplanner添加计算机室限制
这是我在这里的第一篇文章,我为我的学习Java程序员团队发布了一个学校项目。所以我们不是优秀的程序员。 如何添加约束以使Optaplanner将讲座移动到特定的房间类型中。 例如,我想把“编程”课搬到电脑室,把“数学”课搬到普通房间。但在我的约束下,它声明了硬约束,但没有移动他们房间里的讲座。这应该是一个消极的约束。因此,显示了此硬约束的负分数,但它仍然不会被解决/移动 以下是限制条件:Java Optaplanner添加计算机室限制,java,constraints,optaplanner,Java,Constraints,Optaplanner,这是我在这里的第一篇文章,我为我的学习Java程序员团队发布了一个学校项目。所以我们不是优秀的程序员。 如何添加约束以使Optaplanner将讲座移动到特定的房间类型中。 例如,我想把“编程”课搬到电脑室,把“数学”课搬到普通房间。但在我的约束下,它声明了硬约束,但没有移动他们房间里的讲座。这应该是一个消极的约束。因此,显示了此硬约束的负分数,但它仍然不会被解决/移动 以下是限制条件: rule "computerroom" when $room : Room($comp
rule "computerroom"
when
$room : Room($computerroom : computerroom)
$course : Course(computerroom == $computerroom)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
我们向教室添加了一个新变量,如下所示:
package org.optaplanner.examples.curriculumcourse.domain;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import org.optaplanner.examples.common.domain.AbstractPersistable;
@XStreamAlias("Room")
public class Room extends AbstractPersistable {
private String code;
private int capacity;
private boolean computerroom;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public boolean getComputerroom() {
return computerroom;
}
public void setComputerroom(boolean computerroom) {
this.computerroom = computerroom;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
public String getLabel() {
return code;
}
@Override
public String toString() {
return code + " {C" + capacity + "}";
}
}
你有什么建议吗
另一件小事:Optaplanner可以处理大量数据:
我们如何增加解析所需的最大秒数?因为我们尝试了1152以上的其他值,但不起作用。
这只是一个小问题,约束更重要,但我们很乐意让程序运行
问候
2014年9月评分规则没有检查任何“计划变量”(=在求解过程中发生变化的变量)。所以它是静态的,它的分数永远不会和它开始时的分数不同 请考虑以下情况:
rule "computerroom"
when
// If there's a room which has no computer
$r : Room(hasComputer == false)
// And we're putting a course which needs a computer in that room
$course : Course(needsComputer == true, room == $r)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
这里重要的是课程(…,room==r)
。房间
是一个规划变量:它在规划过程中会发生变化
注意:这一条不会惩罚那些不需要电脑的课程,如果他们使用电脑室(但这很容易改变)
同样的规则,但写得更短更有效:
rule "computerroom"
when
$course : Course(needsComputer == true, room != null, room.hasComputer == false)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end