シェルスクリプトマガジン

レッドハットのプロダクト(Vol.70記載)

著者:森和哉

近年、ビジネスのさまざまな分野において、業務の熟練者の高齢化と、後継者不足が深刻化しています。中でも、「計画策定」業務は、豊富な経験や特殊なスキルが必要とされることから、特に属人化が進行しています。「Red Hat Business Optimizer」は、そのような企業の計画策定業務を標準化し、より効率的な計画の立案を可能にします。

シェルスクリプトマガジン Vol.70は以下のリンク先でご購入できます。

図8 制約条件「すべてのシフトに従業員が割り当てられていること」のコード

■employeeRosteringScoreRules.drl

(略)
rule "Assign every shift"
    when
        Shift(employee == null)
    then
        scoreHolder.penalize(kcontext);
end
(略)

■RosterConstraintConfiguration.java

(略)
public static final String CONSTRAINT_ASSIGN_EVERY_SHIFT = "Assign every shift";
(略)
@ConstraintWeight(CONSTRAINT_ASSIGN_EVERY_SHIFT)
private HardMediumSoftLongScore assignEveryShift = HardMediumSoftLongScore.ofMedium(1);
(略)

図9 制約条件「従業員が勤務を希望している時間帯へのシフトの割り当て」のコード

■employeeRosteringScoreRules.drl

(略)
rule "Desired time slot for an employee"
    when
        $availability: EmployeeAvailability(
                state == EmployeeAvailabilityState.DESIRED,
                $e : employee,
                $startDateTime : startDateTime,
                $endDateTime : endDateTime) 
        Shift(employee == $e,
                $startDateTime < endDateTime, 
                $endDateTime > startDateTime) 
    then
        scoreHolder.reward(kcontext, $availability.getDuration().toMinutes());
end
(略)

■RosterConstraintConfiguration.java

(略)
public static final String CONSTRAINT_DESIRED_TIME_SLOT_FOR_AN_EMPLOYEE = "Desired time slot for an employee";
(略)
@ConstraintWeight(CONSTRAINT_DESIRED_TIME_SLOT_FOR_AN_EMPLOYEE)
    private HardMediumSoftLongScore desiredTimeSlot = HardMediumSoftLongScore.ofSoft(10);
(略)