private static bool GenerateJointOtherEpisodes(this ITashaHousehold household, Random random, GenerationAdjustment[] generationAdjustments) { var householdPD = household.HomeZone.PlanningDistrict; //make sure there at least 2 people and one adult if ((household.Persons.Length >= 2) & (household.NumberOfAdults > 0)) { int freqJ = TimeTable.GetFrequency(household, Activity.JointOther, random, householdPD, 0, generationAdjustments); int numEpisodeAdults = Distribution.GetNumAdultsJointEpisode(household, random, Activity.JointOther); for (int i = 0; i < freqJ; i++) { bool success = false; int attempt = 0; while (!success && attempt < Scheduler.EpisodeSchedulingAttempts) { if (!TimeTable.GetStartTime(household, Activity.JointOther, freqJ, random, out Time startTime)) { attempt++; continue; } if (!TimeTable.GetDuration(household, Activity.JointOther, startTime, random, out Time duration)) { attempt++; continue; } if (duration == Time.Zero || startTime == Time.Zero) { attempt++; } else { Time endTime = startTime + duration; List <ITashaPerson> availableAdults = new List <ITashaPerson>(); foreach (ITashaPerson person in household.Persons) { Time workSchoolStartTime = SchedulerPerson.GetWorkSchoolStartTime(person); Time workSchoolEndTime = SchedulerPerson.GetWorkSchoolEndTime(person); bool available = false; if (workSchoolStartTime > endTime || workSchoolEndTime < startTime || workSchoolStartTime == Time.Zero) { available = true; } if (person.Age >= 16 && available) { availableAdults.Add(person); } } if (availableAdults.Count >= numEpisodeAdults && availableAdults.Count > 0) { Episode jointOtherEpisode; var owner = availableAdults[0]; jointOtherEpisode = new ActivityEpisode(new TimeWindow(startTime, endTime), Activity.JointOther, owner); for (int j = 0; j < numEpisodeAdults; j++) { jointOtherEpisode.AddPerson(availableAdults[j]); } Project jointOtherProject = household.GetJointOtherProject(); Schedule jointOtherSchedule = jointOtherProject.Schedule; bool inserted = jointOtherSchedule.Insert(jointOtherEpisode, random); success = true; if (!inserted) { success = false; attempt++; } } else { attempt++; } } } } } return(true); }