public void scheduleJointTourTimeWindows(Tour t, int start, int end) { int[] participatingPersonIndices = t.getPersonNumArray(); for (int i : participatingPersonIndices) { Person person = persons[i]; person.scheduleWindow(start, end); } }
public boolean[] getAvailableJointTourTimeWindows(Tour t, int[] altStarts, int[] altEnds) { int[] participatingPersonIndices = t.getPersonNumArray(); // availability array for each person boolean[][] availability = new boolean[participatingPersonIndices.length][]; for (int i = 0; i < participatingPersonIndices.length; i++) { int personNum = participatingPersonIndices[i]; Person person = persons[personNum]; // availability array is 1-based indexing availability[i] = new boolean[altStarts.length + 1]; for (int k = 1; k <= altStarts.length; k++) { int start = altStarts[k - 1]; int end = altEnds[k - 1]; availability[i][k] = person.isWindowAvailable(start, end); } } boolean[] jointAvailability = new boolean[availability[0].length]; for (int k = 0; k < jointAvailability.length; k++) { jointAvailability[k] = true; for (int i = 0; i < participatingPersonIndices.length; i++) { if (!availability[i][k]) { jointAvailability[k] = false; break; } } } return jointAvailability; }
public void initializeForAwfRestart() { awfRandomCount = 0; awlRandomCount = 0; awtodRandomCount = 0; stfRandomCount = 0; stlRandomCount = 0; initializeWindows(); if (jointTours != null) { for (Tour t : jointTours) { for (int i : t.getPersonNumArray()) persons[i].scheduleWindow(t.getTourDepartPeriod(), t.getTourArrivePeriod()); t.clearStopModelResults(); } } for (int i = 1; i < persons.length; i++) persons[i].initializeForAwfRestart(); }
public int getMaxJointTimeWindow(Tour t) { // get array of person array indices participating in joint tour int[] participatingPersonIndices = t.getPersonNumArray(); // create an array to hold time window arrays for each participant int[][] personWindows = new int[participatingPersonIndices.length][]; // get time window arrays for each participant int k = 0; for (int i : participatingPersonIndices) personWindows[k++] = persons[i].getTimeWindows(); int count = 0; ; int maxCount = 0; // loop over time window intervals for (int w = 1; w < personWindows[0].length; w++) { // loop over party; determine if interval is available for everyone in party; boolean available = true; for (k = 0; k < personWindows.length; k++) { if (personWindows[k][w] > 0) { available = false; break; } } // if available for whole party, increment count; determine maximum continous time window // available to whole party. if (available) { count++; if (count > maxCount) maxCount = count; } else { count = 0; } } return maxCount; }