Это вывод решателя, когда он называет пенализолизированную бигдекимал :
В этой проблеме я получаю значение несправедливости 0, даже если все курсы назначены Faizal или Ahmad. < /p>
Мои вопросы: < /p>
- Почему LoadBalance :: ecplysIss () < /code> всегда возвращает 0? Мне нужно реализовать свою собственную функцию несправедливости? >? Если мне нужно реализовать функцию справедливости, скажем, средняя продолжительность для лектора, я предполагаю, что мне нужно, чтобы все лекторы были присутствием в LoadBalance :: Loads () , чтобы вычислять средний
List courses = List.of(
new Course(String.valueOf(courseId++), "Fizik 1", 70),
new Course(String.valueOf(courseId++), "Chem 1", 60)
);
List assignments = List.of(
new LecturerCourseAssignment(courses.get(0)),
new LecturerCourseAssignment(courses.get(1))
);
Я полагаю, что несправедливость составляет 0 из -за отсутствия Faizal в loadbalance :: loads ()
Однако, когда я добавил еще 2 LecturercourseAssignments с продолжительностью 60, все еще дает несбалансированное решение < /p>
List courses = List.of(
new Course(String.valueOf(courseId++), "Fizik 1", 60),
new Course(String.valueOf(courseId++), "Chem 1", 60),
new Course(String.valueOf(courseId++), "Math 1", 60),
new Course(String.valueOf(courseId++), "Programming 1", 60)
);
List assignments = List.of(
new LecturerCourseAssignment(courses.get(0)),
new LecturerCourseAssignment(courses.get(1)),
new LecturerCourseAssignment(courses.get(2)),
new LecturerCourseAssignment(courses.get(3))
);
Planningsolution Class: < /p>
@PlanningSolution
public class LecturerCourseBalancing {
@ProblemFactCollectionProperty
@ValueRangeProvider
List lecturers;
@PlanningEntityCollectionProperty
List courses;
@PlanningScore
HardSoftBigDecimalScore score;
public LecturerCourseBalancing() {}
public LecturerCourseBalancing(List lecturers, List courses) {
this.lecturers = lecturers;
this.courses = courses;
}
public List getLecturers() {
return lecturers;
}
public List getCourses() {
return courses;
}
public HardSoftBigDecimalScore getScore() {
return score;
}
}
< /code>
LecturerCourseAssignment (планирование): < /p>
@PlanningEntity
public class LecturerCourseAssignment {
@PlanningVariable
Lecturer lecturer;
Course course;
public LecturerCourseAssignment() {
}
public LecturerCourseAssignment(Course course) {
this.course = course;
}
public void setLecturer(Lecturer lecturer) {
this.lecturer = lecturer;
}
public Lecturer getLecturer() {
return lecturer;
}
public Course getCourse() {
return course;
}
@Override
public String toString() {
return "LecturerCourseAssignment [lecturer=" + lecturer + ", course=" + course + "]";
}
}
< /code>
lecturer.java (wroldfact): < /p>
public class Lecturer {
@PlanningId
String id;
String name;
public Lecturer(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Lecturer [id=" + id + ", name=" + name + "]";
}
}
< /code>
course.java:
public class Course {
@PlanningId
String id;
String name;
int duration;
public Course() {}
public Course(String id, String name, int duration) {
this.id = id;
this.name = name;
this.duration = duration;
}
public String getId() {
return id;
}
public int getDuration() {
return duration;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Course [id=" + id + ", name=" + name + ", duration=" + duration + "]";
}
}
< /code>
Поставщик ограничений: < /p>
public class LecturerCourseBalancingConstraintProvider implements ConstraintProvider {
@Override
public Constraint @NonNull [] defineConstraints(@NonNull ConstraintFactory constraintFactory) {
return new Constraint[] {
fairLecturerCourseAssignment(constraintFactory),
};
}
Constraint fairLecturerCourseAssignment(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(LecturerCourseAssignment.class)
.groupBy(ConstraintCollectors.loadBalance(lca -> lca.getLecturer(), lca -> lca.getCourse().getDuration()))
.penalizeBigDecimal(HardSoftBigDecimalScore.ONE_SOFT, (loadBalance) -> {
System.out.println(loadBalance.loads());
System.out.println(loadBalance.unfairness());
return loadBalance.unfairness();
})
.asConstraint("fairLecturerCourseAssignment");
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... s-always-0