private void AssignEpisodes(ITashaPerson person, ref Time workStartTime, ref Time workEndTime, Random random) { person.InitializePersonalProjects(); var personData = (SchedulerPersonData)person["SData"]; foreach (var tripChain in person.TripChains) { for (int j = 0; j < (tripChain.Trips.Count - 1); j++) { var thisTrip = tripChain.Trips[j]; var nextTrip = tripChain.Trips[j + 1]; thisTrip.Mode = thisTrip[ObservedMode] as ITashaMode; nextTrip.Mode = nextTrip[ObservedMode] as ITashaMode; var startTime = thisTrip.OriginalZone == null || thisTrip.DestinationZone == null ? thisTrip.TripStartTime : thisTrip.ActivityStartTime; var endTime = nextTrip.TripStartTime; var duration = endTime - startTime; if (duration < Time.Zero) { endTime = Time.EndOfDay; } if (endTime < startTime) { startTime = thisTrip.TripStartTime; } if (thisTrip.Purpose == Activity.PrimaryWork || thisTrip.Purpose == Activity.SecondaryWork || thisTrip.Purpose == Activity.WorkBasedBusiness) { var newEpisode = new ActivityEpisode(new TimeWindow(startTime, endTime), thisTrip.Purpose, person) { Zone = thisTrip.DestinationZone }; if (thisTrip.Purpose == Activity.PrimaryWork || thisTrip.Purpose == Activity.WorkBasedBusiness) { if (workStartTime == Time.Zero || newEpisode.StartTime < workStartTime) { workStartTime = newEpisode.StartTime; } if (workEndTime == Time.Zero || newEpisode.EndTime > workEndTime) { workEndTime = newEpisode.EndTime; } } personData.WorkSchedule.Schedule.Insert(newEpisode, random); } if (thisTrip.Purpose == Activity.School) { var newEpisode = new ActivityEpisode(new TimeWindow(startTime, endTime), thisTrip.Purpose, person) { Zone = thisTrip.DestinationZone }; personData.SchoolSchedule.Schedule.Insert(newEpisode, random); } } } }
private void AssignEpisodes(ITashaPerson person, ref Time workStartTime, ref Time workEndTime, Random random) { person.InitializePersonalProjects(); var PersonData = person["SData"] as SchedulerPersonData; var primaryVehicle = this.PrimaryMode.RequiresVehicle; foreach (var TripChain in person.TripChains) { for (int j = 0; j < (TripChain.Trips.Count - 1); j++) { var ThisTrip = TripChain.Trips[j]; var NextTrip = TripChain.Trips[j + 1]; ThisTrip.Mode = this.PrimaryMode; var startTime = ThisTrip.OriginalZone == null || ThisTrip.DestinationZone == null ? ThisTrip.TripStartTime : ThisTrip.ActivityStartTime; var endTime = NextTrip.TripStartTime; var duration = endTime - startTime; if (duration < Time.Zero) { endTime = Time.EndOfDay; } if (endTime < startTime) { startTime = ThisTrip.TripStartTime; } if (ThisTrip.Purpose == Activity.PrimaryWork || ThisTrip.Purpose == Activity.SecondaryWork || ThisTrip.Purpose == Activity.WorkBasedBusiness) { var NewEpisode = new ActivityEpisode(0, new TimeWindow(startTime, endTime), ThisTrip.Purpose, TripChain.Person); NewEpisode.Zone = ThisTrip.DestinationZone; if (ThisTrip.Purpose == Activity.PrimaryWork) { if (workStartTime == Time.Zero || NewEpisode.StartTime < workStartTime) { workStartTime = NewEpisode.StartTime; } if (workEndTime == Time.Zero || NewEpisode.EndTime > workEndTime) { workEndTime = NewEpisode.EndTime; } } PersonData.WorkSchedule.Schedule.Insert(NewEpisode, random); } if (ThisTrip.Purpose == Activity.School) { var NewEpisode = new ActivityEpisode(0, new TimeWindow(startTime, endTime), ThisTrip.Purpose, TripChain.Person); NewEpisode.Zone = ThisTrip.DestinationZone; PersonData.SchoolSchedule.Schedule.Insert(NewEpisode, random); } } } }
private void AssignEpisodes(ITashaPerson person, ref Time workStartTime, ref Time workEndTime, Random random) { person.InitializePersonalProjects(); var PersonData = person["SData"] as SchedulerPersonData; foreach(var TripChain in person.TripChains) { for(int j = 0; j < (TripChain.Trips.Count - 1); j++) { var ThisTrip = TripChain.Trips[j]; var NextTrip = TripChain.Trips[j + 1]; ThisTrip.Mode = ThisTrip[ObservedMode] as ITashaMode; NextTrip.Mode = NextTrip[ObservedMode] as ITashaMode; var startTime = ThisTrip.OriginalZone == null || ThisTrip.DestinationZone == null ? ThisTrip.TripStartTime : ThisTrip.ActivityStartTime; var endTime = NextTrip.TripStartTime; var duration = endTime - startTime; if(duration < Time.Zero) { endTime = Time.EndOfDay; } if(endTime < startTime) { startTime = ThisTrip.TripStartTime; } if(ThisTrip.Purpose == Activity.PrimaryWork || ThisTrip.Purpose == Activity.SecondaryWork || ThisTrip.Purpose == Activity.WorkBasedBusiness) { var NewEpisode = new ActivityEpisode(0, new TimeWindow(startTime, endTime), ThisTrip.Purpose, person); NewEpisode.Zone = ThisTrip.DestinationZone; if(ThisTrip.Purpose == Activity.PrimaryWork || ThisTrip.Purpose == Activity.WorkBasedBusiness) { if(workStartTime == Time.Zero || NewEpisode.StartTime < workStartTime) { workStartTime = NewEpisode.StartTime; } if(workEndTime == Time.Zero || NewEpisode.EndTime > workEndTime) { workEndTime = NewEpisode.EndTime; } } PersonData.WorkSchedule.Schedule.Insert(NewEpisode, random); } if(ThisTrip.Purpose == Activity.School) { var NewEpisode = new ActivityEpisode(0, new TimeWindow(startTime, endTime), ThisTrip.Purpose, person); NewEpisode.Zone = ThisTrip.DestinationZone; PersonData.SchoolSchedule.Schedule.Insert(NewEpisode, random); } } } }