/// <summary> /// Runs the ModeChoice model on the given household /// </summary> /// <param name="h">The household to run on</param> public bool Run(ITashaHousehold h) { // Compute the error terms and feasibility of non shared modes ComputeErrorTerms(h); //there are no "trip chains" so return true for (int i = 0; i < this.HouseholdIterations; i++) { // To start with Generate the LogLikelyhoods if (i == 0) { foreach (var person in h.Persons) { person.CalculateLoglikelihood(); } } else { // on ever other one just update the utilities h.UpdateUtilities(); } ModeChoiceHousehold.ModeAssignmentHouseHold result = h.ResolveConflicts(); //assign the best mode to each trip to prep for pass 3 if (result == ModeChoiceHousehold.ModeAssignmentHouseHold.ADVANCED_CASE) { List <ITripChain> l = h.AllTripChains(); IVehicleType[] vt = ModeChoiceHousehold.FindBestPossibleAssignment(l, new List <IVehicle>(h.Vehicles)); if (vt != null) { AssignBestMode(h, vt); } else { // TODO: should assign best possible vehicle even if // someone cannot execute their tripchain since they can // be passengers return(false); } } else if (result == ModeChoiceHousehold.ModeAssignmentHouseHold.SIMPLE_CASE) { AssignBestMode(h); } else if (result == ModeChoiceHousehold.ModeAssignmentHouseHold.NULL_SET) { ReleaseModeSets(h); return(false); } //pass 3 h.MultiPersonMode(); //finally store it to the list of "generated" realities DoAssignment(h, i); } ReleaseModeSets(h); return(true); }
/// <summary> /// Runs the ModeChoice model on the given household /// </summary> /// <param name="h">The household to run on</param> public bool Run(ITashaHousehold h) { // Compute the error terms and feasibility of non shared modes ComputeErrorTerms( h ); //there are no "trip chains" so return true for ( int i = 0; i < this.HouseholdIterations; i++ ) { // To start with Generate the LogLikelyhoods if ( i == 0 ) { foreach ( var person in h.Persons ) { person.CalculateLoglikelihood(); } } else { // on ever other one just update the utilities h.UpdateUtilities(); } ModeChoiceHousehold.ModeAssignmentHouseHold result = h.ResolveConflicts(); //assign the best mode to each trip to prep for pass 3 if ( result == ModeChoiceHousehold.ModeAssignmentHouseHold.ADVANCED_CASE ) { List<ITripChain> l = h.AllTripChains(); IVehicleType[] vt = ModeChoiceHousehold.FindBestPossibleAssignment( l, new List<IVehicle>( h.Vehicles ) ); if ( vt != null ) { AssignBestMode( h, vt ); } else { // TODO: should assign best possible vehicle even if // someone cannot execute their tripchain since they can // be passengers return false; } } else if ( result == ModeChoiceHousehold.ModeAssignmentHouseHold.SIMPLE_CASE ) { AssignBestMode( h ); } else if ( result == ModeChoiceHousehold.ModeAssignmentHouseHold.NULL_SET ) { ReleaseModeSets( h ); return false; } //pass 3 h.MultiPersonMode(); //finally store it to the list of "generated" realities DoAssignment( h, i ); } ReleaseModeSets( h ); return true; }