Как уменьшить SoftScore с OptaPlanner и Spring Boot? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь указать правило для мягкого ограничения в моем .drl -файле. Предполагается взять два параметра из PlanningSolution (Schedule -класса) и затем выполнить Java-функцию с ними. К сожалению, код, похоже, не выполняется (SoftScore не модифицируется, даже если я заменю вызов функции getBlockNumberDifference на простой -10). Может кто-нибудь относится к этой проблеме?

У меня есть другое правило, которое определяет HardConstraint, которое также использует вызов функции, который работает отлично.

Планировочное решение:

@PlanningSolution
public class Schedule {
    private Semester semester;

    @PlanningEntityCollectionProperty
    public List<Lecture> getLectureList() {
        return lectureList;
    }

    public void setLectureList(List<Lecture> lectureList) {
        this.lectureList = lectureList;
    }

    public Semester getSemester() {
        return semester;
    }

    public void setSemester(Semester semester) {
        this.semester = semester;
    }
}

Правило:

import function  (...).getBlockNumberDifference;

//...

rule "rule"
    when
        Schedule ( $s : semester != null && $l : lectureList != null)
    then
        scoreHolder.addSoftConstraintMatch(kcontext, getBlockNumberDifference($l, $s));
end

Тест:

public static int getBlockNumberDifference(List<Lecture> lectureList, Semester semester) {
        System.out.println("Calling Block number Difference " + lectureList.size() + " and " + semester.getBezeichnung());
        return -1;
}

Я использую OptaPlanner в версии 7.9.0 с Spring Boot и Java 8.

1 Ответ

0 голосов
/ 21 июня 2019

Решение для планирования не вставляется в рабочую память Drools IIRC, поэтому LHS (сторона когда) этого правила никогда не совпадает.

Я могу ошибаться - доказать это, сделатьэто when Schedule() then System.out.println("not in wm");end и посмотреть, если вы видите, что появляются.

...