Correction de bugs liés aux contraintes de recouvrement d'horaire.

This commit is contained in:
Francois Berube\frabe 2018-04-02 23:58:33 -04:00
parent 466ccdd681
commit 04bfd630f1
2 changed files with 11 additions and 21 deletions

View file

@ -6,39 +6,24 @@ import jdistlib.rng.RandomEngine;
import org.chocosolver.solver.Solution;
public class AbsenceSchedulesArray extends SchedulesArray{
protected boolean[][] partTimeEmployeeUnavailabilitySchedules;
protected boolean[][] fullTimeEmployeeUnavailabilitySchedules;
public AbsenceSchedulesArray(SchedulesArray myScheduleArray) {
super(myScheduleArray);
}
public AbsenceSchedulesArray(AbsenceSchedulesArray myAbsenceScheduleArray) {
super(myAbsenceScheduleArray);
this.partTimeEmployeeUnavailabilitySchedules = new boolean[this.maxPartTimeEmployee][this.workPeriodsPerSchedule];
for (int workPeriod = 0; workPeriod < this.workPeriodsPerSchedule; workPeriod++) {
for (int employee = 0; employee < this.maxPartTimeEmployee; employee++) {
this.partTimeEmployeeUnavailabilitySchedules[employee][workPeriod] = myAbsenceScheduleArray.partTimeEmployeeUnavailabilitySchedules[employee][workPeriod];
}
}
this.fullTimeEmployeeUnavailabilitySchedules = new boolean[this.maxFullTimeEmployee][this.workPeriodsPerSchedule];
for (int workPeriod = 0; workPeriod < this.workPeriodsPerSchedule; workPeriod++) {
for (int employee = 0; employee < this.maxFullTimeEmployee; employee++) {
this.fullTimeEmployeeUnavailabilitySchedules[employee][workPeriod] = myAbsenceScheduleArray.fullTimeEmployeeUnavailabilitySchedules[employee][workPeriod];
}
}
}
public void generateAbsences(RandomEngine r) {
this.partTimeEmployeeUnavailabilitySchedules = new boolean[this.maxPartTimeEmployee][this.workPeriodsPerSchedule];
for (int i = 0; i < this.maxPartTimeEmployee; i++) {
boolean[] a = new AbsencesVector(this.workPeriodsPerSchedule, r).getAbsencesVector();
for (int j = 0; j < this.workPeriodsPerSchedule; j++) {
this.partTimeSchedules[i][j] = this.initialPartTimeSchedules[i][j] && a[j];
}
}
this.fullTimeEmployeeUnavailabilitySchedules = new boolean[this.maxFullTimeEmployee][this.workPeriodsPerSchedule];
for (int i = 0; i < this.maxFullTimeEmployee; i++) {
boolean[] a = new AbsencesVector(this.workPeriodsPerSchedule, r).getAbsencesVector();
for (int j = 0; j < this.workPeriodsPerSchedule; j++) {

View file

@ -14,9 +14,6 @@ import AbsenceSchedules.AbsenceSchedulesArray;
*/
public class RecoveredSchedulesArray extends AbsenceSchedulesArray{
protected boolean[][] partTimeEmployeeAbsenceRecoveringAvailabilitySchedules;
protected boolean[][] fullTimeEmployeeAbsenceRecoveringAvailabilitySchedules;
public RecoveredSchedulesArray(AbsenceSchedulesArray myAbsenceScheduleArray){
super(myAbsenceScheduleArray);
}
@ -94,6 +91,8 @@ public class RecoveredSchedulesArray extends AbsenceSchedulesArray{
boolean validConsecutivePreviousNonWorkingPeriods = false;
if (compteurWorkPeriod == -1) {
validConsecutivePreviousNonWorkingPeriods = true;
} else if (consecutivePreviousNonWorkingPeriods == 0) {
validConsecutivePreviousNonWorkingPeriods = true;
} else if (consecutivePreviousNonWorkingPeriods >= myModelInitialSchedules.myScheduleParameters.minConsecutiveNonWorkingPeriodsBetweenShiftWorksOfPartTimeEmployees) {
validConsecutivePreviousNonWorkingPeriods = true;
}
@ -106,6 +105,8 @@ public class RecoveredSchedulesArray extends AbsenceSchedulesArray{
boolean validConsecutiveNextNonWorkingPeriods = false;
if (compteurWorkPeriod == workPeriodsPerSchedule) {
validConsecutiveNextNonWorkingPeriods = true;
} else if (consecutiveNextNonWorkingPeriods == 0) {
validConsecutiveNextNonWorkingPeriods = true;
} else if (consecutiveNextNonWorkingPeriods >= myModelInitialSchedules.myScheduleParameters.minConsecutiveNonWorkingPeriodsBetweenShiftWorksOfPartTimeEmployees) {
validConsecutiveNextNonWorkingPeriods = true;
}
@ -152,6 +153,8 @@ public class RecoveredSchedulesArray extends AbsenceSchedulesArray{
boolean validConsecutivePreviousNonWorkingPeriods = false;
if (compteurWorkPeriod == -1) {
validConsecutivePreviousNonWorkingPeriods = true;
} else if (consecutivePreviousNonWorkingPeriods == 0) {
validConsecutivePreviousNonWorkingPeriods = true;
} else if (consecutivePreviousNonWorkingPeriods >= myModelInitialSchedules.myScheduleParameters.minConsecutiveNonWorkingPeriodsBetweenShiftWorksOfFullTimeEmployees) {
validConsecutivePreviousNonWorkingPeriods = true;
}
@ -164,6 +167,8 @@ public class RecoveredSchedulesArray extends AbsenceSchedulesArray{
boolean validConsecutiveNextNonWorkingPeriods = false;
if (compteurWorkPeriod == workPeriodsPerSchedule) {
validConsecutiveNextNonWorkingPeriods = true;
} else if (consecutiveNextNonWorkingPeriods == 0) {
validConsecutiveNextNonWorkingPeriods = true;
} else if (consecutiveNextNonWorkingPeriods >= myModelInitialSchedules.myScheduleParameters.minConsecutiveNonWorkingPeriodsBetweenShiftWorksOfFullTimeEmployees) {
validConsecutiveNextNonWorkingPeriods = true;
}