import org.optaplanner.core.api.domain.entity.PlanningEntity;
import org.optaplanner.core.api.domain.variable.PlanningVariable;
@PlanningEntity()
public class Meeting {
private List<Sheet> sheetList;
private List<User> userList;
private Slot slot = null;
private Spot spot = null;
@PlanningVariable(valueRangeProviderRefs = {"slotRange"}, nullable = true)
public Slot getSlot() {
return slot;
}
@PlanningVariable(valueRangeProviderRefs = {"spotRange"}, nullable = true)
public Spot getSpot() {
return spot;
}
Meeting.java
Business Rules Management System
rule "Unavailability conflict"
when
Meeting(hasUnavailabilityConflict())
then
scoreHolder.addHardConstraintMatch(kcontext, -10);
end
meetingsScoreRules.drl
rule "Sheet do not have enought meetings quantity conflict"
when
$sheet : Sheet($possibleMeetingsQuantity : possibleMeetingsQuantity)
accumulate(
$meeting : Meeting(isAssigned(), sheetList contains $sheet);
$totalMeetingBySheet : count($meeting);
$totalMeetingBySheet > $possibleMeetingsQuantity
)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
meetingsScoreRules.drl
rule "Assign every meeting"
when
Meeting(isNotAssigned())
then
scoreHolder.addMediumConstraintMatch(kcontext, -1);
end
meetingsScoreRules.drl
rule "Satisfaction : add -1 point penalty per 10% satisfaction = meetings assigned / possibleMeetingsQuantity"
when
$sheet : Sheet(possibleMeetingsQuantity > 0, $possibleMeetingsQuantity : possibleMeetingsQuantity)
accumulate(
$meeting : Meeting(isAssigned(), sheetList contains $sheet);
$meetingCount : count($meeting)
)
then
scoreHolder.addSoftConstraintMatch(
kcontext,
- (int) Math.ceil(10 - 10 * (float) $meetingCount / $possibleMeetingsQuantity)
);
end
meetingsScoreRules.drl
Demandes de Rdv acceptées |
Rdv positionnés |
% transformation | Temps de calcul | |
---|---|---|---|---|
Event X | 630 | 560 | 89% | 3 minutes |
Event Y | 6700 | 5400 | 80% | 6 heures |
Avant | Avec OptaPlanner |
---|---|
Logiciel installé sur un poste fixe |
Application hébergée et utilisable en ligne de commande |
Avant | Avec OptaPlanner |
---|---|
Logiciel installé sur un poste fixe |
Application hébergée et utilisable en ligne de commande |
Import / export de fichiers | Planification depuis Back-Office Événement |
Avant | Avec OptaPlanner |
---|---|
Logiciel installé sur un poste fixe |
Application hébergée et utilisable en ligne de commande |
Import / export de fichiers | Planification depuis Back-Office Événement |
Parallélisation des calculs |
Avant | Avec OptaPlanner |
---|---|
Logiciel installé sur un poste fixe |
Application hébergée et utilisable en ligne de commande |
Import / export de fichiers | Planification depuis Back-Office Événement |
Parallélisation des calculs | |
+10% de Rdv en moyenne |