Оптапланер: попытка понять правило нежелательных шаблонов в примере с медсестрой - PullRequest
0 голосов
/ 26 сентября 2018

Я новичок в drools и java и пытаюсь понять, как работает это правило из примера составления списков медсестер, особенно первой части о $ pattern.

rule "unwantedPatternShiftType3DaysPattern"
    when
        $pattern : ShiftType3DaysPattern(
            $dayIndex0ShiftType : dayIndex0ShiftType,
            $dayIndex1ShiftType : dayIndex1ShiftType,
            $dayIndex2ShiftType : dayIndex2ShiftType
        )
        PatternContractLine(
            pattern == $pattern, $contract : contract
        )

        ShiftAssignment(
            shiftType == $dayIndex0ShiftType,
            contract == $contract,
            $employee : employee, $firstDayIndex : shiftDateDayIndex
        )
        ShiftAssignment(
            shiftType == $dayIndex1ShiftType,
            employee == $employee,
            shiftDateDayIndex == ($firstDayIndex + 1)
        )
        ShiftAssignment(
            shiftType == $dayIndex2ShiftType,
            employee == $employee,
            shiftDateDayIndex == ($firstDayIndex + 2)
        )
    then
        scoreHolder.addSoftConstraintMatch(kcontext, - $pattern.getWeight());
end

В частности, как слюни узнают, в каком значении находятся: dayIndex0ShiftType, dayIndex1ShiftType, dayIndex2ShiftType?Он вызывает класс ShiftType3DaysPattern с этими значениями, но как эти значения определяются?

Кроме того, когда он делает этот вызов:

ShiftType3DaysPattern (dayIndex0ShiftType, dayIndex1ShiftType, dayIndex2ShiftType)

, что относится к следующему:

@XStreamAlias("ShiftType3DaysPattern")
public class ShiftType3DaysPattern extends Pattern {

    private ShiftType dayIndex0ShiftType;
    private ShiftType dayIndex1ShiftType;
    private ShiftType dayIndex2ShiftType;

    public ShiftType getDayIndex0ShiftType() {
        return dayIndex0ShiftType;
    }

    public void setDayIndex0ShiftType(ShiftType dayIndex0ShiftType) {
        this.dayIndex0ShiftType = dayIndex0ShiftType;
    }

    public ShiftType getDayIndex1ShiftType() {
        return dayIndex1ShiftType;
    }

    public void setDayIndex1ShiftType(ShiftType dayIndex1ShiftType) {
        this.dayIndex1ShiftType = dayIndex1ShiftType;
    }

    public ShiftType getDayIndex2ShiftType() {
        return dayIndex2ShiftType;
    }

    public void setDayIndex2ShiftType(ShiftType dayIndex2ShiftType) {
        this.dayIndex2ShiftType = dayIndex2ShiftType;
    }

    @Override
    public String toString() {
        return "Work pattern: " + dayIndex0ShiftType + ", " + dayIndex1ShiftType + ", " + dayIndex2ShiftType;
    }

}

Является ли это сокращение для ShiftType3DaysPattern.getDayIndex0ShiftType, ShiftType3DaysPattern.getDayIndex1ShiftTypeи ShiftType3DaysPattern.getDayIndex2ShiftType?

И если это так, как ShiftType3DaysPattern узнает, какой шаблон следует вернуть, если в исходных файлах xml имеется более одного "трехдневного шаблона"?Чего мне не хватает?

Кроме того, если существует более одного «3-дневного шаблона», то как слюни автоматически применяют это правило ко всем этим «3-дневным шаблонам»?

1 Ответ

0 голосов
/ 27 сентября 2018

В частности, как слюни узнают, в каком значении: dayIndex0ShiftType, dayIndex1ShiftType, dayIndex2ShiftType?Он вызывает класс ShiftType3DaysPattern с этими значениями, но как эти значения определяются?

Каждый ShiftType3DaysPattern в вашей коллекции фактов проблемы будет оцениваться по этому правилу в сочетании с другими условиями в предложении when.Таким образом, каждая комбинация ShiftType3DaysPattern, PatternContractLine и трех ShiftAssignments, доступных в качестве факта проблемы в сеансе Kie, будет оценена.Если все условия совпадают (поэтому PatternContractLine соответствует ShiftType3DayPattern, и все три типа ShiftAssignment назначаются в порядке нежелательного ShiftType3DayPattern, правило будет применено, и на счет будет оказано отрицательное влияние. Таким образом, значение dayIndex0ShiftType, dayInTxh будет и dayIndexhS, dayInTxhS и dayIndexhS)быть тем, что установлено в ShiftType3DaysPattern в коллекции фактов проблемы.

Это сокращение для ShiftType3DaysPattern.getDayIndex0ShiftType, ShiftType3DaysPattern.getDayIndex1ShiftType и ShiftType3DaysPattern.getDayIndex2ShiftType?

I 'Я не уверен, что именно вы имеете в виду, но если вы ссылаетесь на это:

$pattern : ShiftType3DaysPattern(
    $dayIndex0ShiftType : dayIndex0ShiftType,
    $dayIndex1ShiftType : dayIndex1ShiftType,
    $dayIndex2ShiftType : dayIndex2ShiftType
)

Это всего лишь синтаксис для присваивания dayIndex0ShiftType переменной $dayIndex0ShiftType, так что на нее можно ссылаться вПравило позже. Сам шаблон также присваивается переменной $pattern. Сам знак доллара - это просто соглашение.

И если это так, как ShiftType3DaysPattern узнает, какой шаблон вернуть, еслив исходных файлах xml есть несколько «трехдневных шаблонов»?отсутствует?

Кроме того, если существует более одного «3-дневного шаблона», то как слюни автоматически применяют это правило ко всем этим «3-дневным шаблонам»?

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

Я рекомендую вам прочитать документацию Drools,это поможет вам улучшить ваше базовое понимание Drools.Это долго читать, но оно того стоит.Прочитайте хотя бы главу Руководство пользователя .

...