示例#1
0
 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);
   }
 }
示例#2
0
  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;
  }
示例#3
0
  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();
  }
示例#4
0
  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;
  }