我是Drools的新手。我在drl文件中将对象列表作为全局变量,并在规则1中的列表中添加记录。每次执行规则1时,它都会在列表中添加更新的记录。我想在规则2中使用该列表。但是当执行规则2时,列表变空了。
基本上,我计划实现以下目标:
为了将最近的学生分配到活动场地,我需要根据他们当时预计的位置(场地)维护学生的有序名单。这样分配规则就会为活动挑选列表中最靠前的学生。
因此,学生列表中的顺序在每次作业后都会改变。我希望这个不断变化的学生列表可以在约束规则中使用。
我的Pojo课程是:
public class student {
private long id;
private String name;
private double position;
...
//getter
//setter
}
public class Events {
private long id;
private String venueName;
private double position; // venue location
private Date startTime;
private Date endTime;
}
我的规划实体类:
@PlanningEntity
public class EventEntity{
private student stud;
private Events events;
@PlanningVariable
public student getStud() {
return stud;
}
//getter
//setter
}
我的规划解决方案课程:
@PlanningSolution
public class EventSolution {
private long id;
private List<student> student;
private List<Events> events; // venue location
...
//getter
//setter
}
另一类是:
public class studentRoster {
public List<student> fetchData(List<student> studList){
List<student> studList = new ArrayList<student>();
if(studList == null){
//add records in studList from excel
}else{
// calculate the students position from event venue position and sort the list to assign nearest students
}
return studList;
}
}
我的drl文件:
//imports
global List<student> studentList;
rule "rule1"
salience 6
when
EventEntity(events != null, $event : events)
studList : List() from collect (EventSolution (student == null))
then
studentRoster sr = new studentRoster();
studentList = sr.fetchData($event,studList);
end
rule "rule2"
salience 5
when
$stud: student() from studentList //here studentList is getting empty
then
System.out.println($stud);
end
还尝试使用扩展关键字,但列表仍为空
rule "rule2" extends "rule1"
when
$stud: student() from studentList
then
System.out.println($stud);
end
global
字段与optaplanner不兼容(当然scoreHolder
除外),尤其是在以后激活多线程求解、分区搜索等时(因为它们会创建多个kie会话)。
sr.fetchData();
代码应该在调用solver.solve(问题)
来填充问题
之前发生。
顺便说一句,当您使用excell时,请查看返回问题的会议计划XlsxFileIO. read(File)
。
问题内容: 我从很多地方都听说过,全局变量本来就是讨厌和邪恶的,但是当使用一些非面向对象的Javascript时,我看不到如何避免它们。说我有一个函数,它使用复杂的算法使用随机数和填充物来生成数字,但是我需要在其他函数(回调或其他函数)中继续使用该特定数,因此不能成为同一函数的一部分。 如果最初生成的数字是局部变量,则无法从那里访问它。如果函数是对象方法,我可以将数字设为属性,但是它们不是属性,并
问题内容: 因此,我有两个不同的文件,如下所示: file1.py file2.py 但是我似乎无法让file2识别来自file1的变量,即使它已经导入到file1中也是如此。如果可以某种方式实现,那将非常有帮助。 问题答案: 导入在使得全球(即,模块级)的约束名字提供给下面的代码-唯一的此类名称是。它并 没有 做反向:在定义的名称并不提供给代码的时候进口。即使您以正确的方式(如@nate正确建议
各位opatplanner用户, 我的规划问题是:获取遥感卫星星座的有效时间表。 @PlanningEntity: @PlanningVariable: 我的问题数据主要是这样的: Image_Strip: D1 Sat2 22-12-2015 11:02:24.051 D1 Sat1 22-12-2015 11:04:24.122 A2 Sat3 22-12-2015 11:06:24.172
在为我的项目实现了一些规则之后,我做了一个“ScoreConsistencyCheck”,以确保规则得到了正确的实现。 表示实现我自己的方法,该方法将在我提前终止求解或通过配置终止后调用,输出预期分数。该方法的参数是一个实例,基于解决方案的状态计算预期分数,然后将其与来自解决方案实例的“分数”变量的分数进行比较。 当我使用时,它不会抛出异常,但是当我这样尝试时,我有时会在构建启发式或本地搜索的特定
变量规则 系统默认的变量规则设置是\w+,只会匹配字母、数字和下划线字符,并不会匹配特殊符号和中文,需要定义变量规则或者调整默认变量规则。 V5.1.14+版本开始,可以在app.php配置文件中自定义默认的变量规则: 'default_route_pattern' => '[\w\-]+', 支持在规则路由中为变量用正则的方式指定变量规则,弥补了动态变量无法限制具体的类型问题,并且支持全局规则
我用增量java解决了optaPlanner的一个问题,其中有一个规划变量和一个规划实体,但是现在在我们的项目中有很多规划变量的需求,比如我们要找到最好的房间(容量,isAC等),汽车(totalSeatsLeft,isAC等),我们不知道有多少资源,因为我们每天都需要根据用户的需求增加更多的资源,比如会议室设施等,所以给我一些想法,这样我们就可以为optaPlanner做一个域。多谢了。