From a94c6be49e97c5fc7b4080f0c94261b5b7530c57 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Tue, 12 May 2020 12:09:53 -0400 Subject: [PATCH 01/18] test UEC debug printing --- .../abm/airport/AirportModeChoiceModel.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index 3504a9181..f3a0f3522 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -1,6 +1,7 @@ package org.sandag.abm.airport; import java.util.HashMap; + import org.apache.log4j.Logger; import org.sandag.abm.accessibilities.BestTransitPathCalculator; import org.sandag.abm.accessibilities.DriveTransitWalkSkimsCalculator; @@ -10,6 +11,7 @@ import org.sandag.abm.ctramp.Util; import org.sandag.abm.modechoice.MgraDataManager; import org.sandag.abm.modechoice.TazDataManager; + import com.pb.common.calculator.VariableTable; import com.pb.common.newmodel.ChoiceModelApplication; import com.pb.common.util.Tracer; @@ -223,9 +225,32 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) } else { // if 3+ person party, solve the shared 3+ logsums + shared3Model.computeUtilities(dmu, dmu.getDmuIndex()); double shared3Logsum = shared3Model.getLogsum(); - dmu.setShared3Logsum(shared3Logsum); + dmu.setShared3Logsum(shared3Logsum); + + // add debug + if (party.getID() == 2) + { + String choiceModelDescription = ""; + String decisionMakerLabel = ""; + String loggingHeader = ""; + String separator = ""; + + choiceModelDescription = String.format( + "Airport Mode Choice Model for: Purpose=%s, OrigMGRA=%d, DestMGRA=%d", + party.getPurpose(), party.getOriginMGRA(), party.getDestinationMGRA()); + decisionMakerLabel = String.format("partyID=%d, partySize=%d, purpose=%s, direction=%d", + party.getID(), party.getSize(), + party.getPurpose(), party.getDirection()); + loggingHeader = String.format("%s %s", choiceModelDescription, + decisionMakerLabel); + + logger.info(loggingHeader); + shared3Model.logUECResults(logger); + } + } // always solve for the transit logsum transitModel.computeUtilities(dmu, dmu.getDmuIndex()); From a6b9a224aca2a375de3924b45a5edc905e90f8cd Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Tue, 12 May 2020 12:11:32 -0400 Subject: [PATCH 02/18] test adding new parking location to ABM1 --- .../sandag/abm/airport/AirportModelStructure.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index cc96a99d7..95c51e382 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -29,17 +29,25 @@ public final class AirportModelStructure public static final int UPPER_PM = 29; public static final String[] MODEL_PERIOD_LABELS = {"EA", "AM", "MD", "PM", "EV"}; - public static final byte ACCESS_MODES = 9; + public static final byte ACCESS_MODES = 10; public static final byte PARK_TMNL = 1; public static final byte PARK_SANOFF = 2; public static final byte PARK_PVTOFF = 3; - public static final byte PUDO_ESC = 4; +/* public static final byte PUDO_ESC = 4; public static final byte PUDO_CURB = 5; public static final byte RENTAL = 6; public static final byte TAXI = 7; public static final byte SHUTTLE_VAN = 8; public static final byte TRANSIT = 9; +*/ + public static final byte PARK_NEWOFF = 4; + public static final byte PUDO_ESC = 5; + public static final byte PUDO_CURB = 6; + public static final byte RENTAL = 7; + public static final byte TAXI = 8; + public static final byte SHUTTLE_VAN = 9; + public static final byte TRANSIT = 10; private AirportModelStructure() { @@ -188,6 +196,8 @@ public static int getOccupancy(int accessMode, int partySize) return partySize; case PARK_PVTOFF: return partySize; + case PARK_NEWOFF: + return partySize; case PUDO_ESC: return partySize + 1; case PUDO_CURB: From ce8e857762c007d313f02d739bdf5a6ddcbc146c Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Wed, 27 May 2020 10:12:22 -0400 Subject: [PATCH 03/18] new mode choice model - first commit --- .../abm/airport/AirportModeChoiceModel.java | 254 +++++- .../sandag/abm/airport/AirportModelDMU.java | 787 +++++++++++++++++- .../abm/airport/AirportModelStructure.java | 76 +- 3 files changed, 1072 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index f3a0f3522..543d4247e 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -23,11 +23,12 @@ public class AirportModeChoiceModel private TazDataManager tazManager; private MgraDataManager mgraManager; - private ChoiceModelApplication driveAloneModel; - private ChoiceModelApplication shared2Model; - private ChoiceModelApplication shared3Model; + private ChoiceModelApplication[] driveAloneModel; + private ChoiceModelApplication[] shared2Model; + private ChoiceModelApplication[] shared3Model; private ChoiceModelApplication transitModel; private ChoiceModelApplication accessModel; + private ChoiceModelApplication mgraModel; private Tracer tracer; private boolean trace; @@ -75,16 +76,45 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf "airport.mc.transit.page")); int accessPage = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, "airport.mc.accessMode.page")); + int mgraPage = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, + "airport.mc.mgra.page")); logger.info("Creating Airport Model Mode Choice Application UECs"); // create a DMU AirportModelDMU dmu = dmuFactory.getAirportModelDMU(); - + + // initialize mgra size array + int maxMgra = mgraManager.getMaxMgra(); + dmu.setMaxMgra(maxMgra); +// dmu.setTravelTimeArraySize(); + + // fake choice model to get airport access MGRA input + mgraModel = new ChoiceModelApplication(airportModeUecFileName, mgraPage, dataPage, + rbMap, (VariableTable) dmu); + + // create ChoiceModelApplication objects for each airport mgra + driveAloneModel = new ChoiceModelApplication[5]; + shared2Model = new ChoiceModelApplication[5]; + shared3Model = new ChoiceModelApplication[5]; + + for (int i = 0; i < 5; i++){ + // create a ChoiceModelApplication object for drive-alone mode choice + driveAloneModel[i] = new ChoiceModelApplication(airportModeUecFileName, daPage, dataPage, + rbMap, (VariableTable) dmu); + // create a ChoiceModelApplication object for shared 2 mode choice + shared2Model[i] = new ChoiceModelApplication(airportModeUecFileName, s2Page, dataPage, + rbMap, (VariableTable) dmu); + // create a ChoiceModelApplication object for shared 3+ mode choice + shared3Model[i] = new ChoiceModelApplication(airportModeUecFileName, s3Page, dataPage, + rbMap, (VariableTable) dmu); + } + +/* // create a ChoiceModelApplication object for drive-alone mode choice driveAloneModel = new ChoiceModelApplication(airportModeUecFileName, daPage, dataPage, rbMap, (VariableTable) dmu); - + // create a ChoiceModelApplication object for shared 2 mode choice shared2Model = new ChoiceModelApplication(airportModeUecFileName, s2Page, dataPage, rbMap, (VariableTable) dmu); @@ -92,7 +122,7 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf // create a ChoiceModelApplication object for shared 3+ mode choice shared3Model = new ChoiceModelApplication(airportModeUecFileName, s3Page, dataPage, rbMap, (VariableTable) dmu); - +*/ // create a ChoiceModelApplication object for transit mode choice transitModel = new ChoiceModelApplication(airportModeUecFileName, transitPage, dataPage, rbMap, (VariableTable) dmu); @@ -144,6 +174,24 @@ public void initializeBestPathCalculators() logger.info("Finished Initializing Airport Model Best Path Calculators"); } + + public void solveModeMgra(AirportModelDMU dmu){ //question for Jim -- Do I need dmu index for this one? + mgraModel.computeUtilities(dmu, dmu.getDmuIndex()); + String[] modeNames = mgraModel.getAlternativeNames(); + int modeCount = mgraModel.getNumberOfAlternatives(); + double[] mgraValues = mgraModel.getUtilities(); + + HashMap modeMgraMap = new HashMap(); + + for (int m = 0; m < modeCount; m++){ + int mgraValue = (int)Math.round(mgraValues[m]); + modeMgraMap.put(m+1, mgraValue); + } + + dmu.setModeMgraMap(modeMgraMap); + dmu.setMgraIndexMap(); + dmu.setTravelTimeArraySize(); + } /** * Choose airport arrival mode and trip mode for this party. Store results @@ -159,8 +207,23 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) int origMgra = party.getOriginMGRA(); int destMgra = party.getDestinationMGRA(); + int direction = party.getDirection(); + int airportMgra = 0; + int airportMgra_index = 0; + int nonAirportMgra = 0; + int accessOrigMgra = 0; + int accessDestMgra = 0; + int accessOrigTaz = 0; + int accessDestTaz = 0; + if (direction == 0){ //departure + nonAirportMgra = origMgra; + } else { //arrival + nonAirportMgra = destMgra; + } + dmu.setNonAirportMgra(nonAirportMgra); + dmu.setDirection(direction); int origTaz = mgraManager.getTaz(origMgra); - int destTaz = mgraManager.getTaz(destMgra); + int destTaz = mgraManager.getTaz(destMgra); int period = party.getDepartTime(); int skimPeriod = AirportModelStructure.getSkimPeriodIndex(period) + 1; // The // skims @@ -196,12 +259,174 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) if (party.getDirection() == AirportModelStructure.ARRIVAL) inbound = true; dmu.setAirportParty(party); - dmu.setDmuIndexValues(party.getID(), origTaz, destTaz); + //dmu.setDmuIndexValues(party.getID(), origTaz, destTaz); // should this be access point Taz? dmu.setDmuSkimAttributes(origMgra, destMgra, period, inbound, debug); // Solve trip mode level utilities - // if 1-person party, solve for the drive-alone and 2-person logsums + //Integer[] modeArray = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; + //int[] losArray = {0,1,2,3}; + + for (int mode = 1; mode <= AirportModelStructure.ACCESS_MODES; mode++){ + airportMgra = dmu.mode_mgra_map.get(mode); + //dmu.setAirportMgra(airportMgra); + airportMgra_index = dmu.mgra_index_map.get(airportMgra); + + if (direction == 0){ //departure + accessOrigMgra = origMgra; + accessDestMgra = airportMgra; + } else { //arrival + accessOrigMgra = airportMgra; + accessOrigMgra = destMgra; + } + + accessOrigTaz = mgraManager.getTaz(accessOrigMgra); + accessDestTaz = mgraManager.getTaz(accessDestMgra); + + dmu.setDmuIndexValues(party.getID(), accessOrigTaz, accessDestTaz); // should this be access point Taz? + + for (int los = 0; los < AirportModelStructure.LOS_TYPE; los++){ + double travelTime = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, los); + if (travelTime == 0){ + if (los == 0){ + driveAloneModel[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); + double driveAloneLogsum = driveAloneModel[airportMgra_index].getLogsum(); + dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, driveAloneLogsum); + } + else if (los == 1){ + shared2Model[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); + double shared2Logsum = shared2Model[airportMgra_index].getLogsum(); + dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, shared2Logsum); + } + else if (los == 2){ + shared3Model[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); + double shared3Logsum = shared3Model[airportMgra_index].getLogsum(); + dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, shared3Logsum); + } + else { + transitModel.computeUtilities(dmu, dmu.getDmuIndex()); + double transitLogsum = transitModel.getLogsum(); + dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, transitLogsum); + } + } + } + } +/* + airportMgra = dmu.mode_mgra_map.get(1); + double ParkLoc1DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); + dmu.setParkLoc1DriveAloneLogsum(ParkLoc1DriveAloneLogsum); + double ParkLoc1Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setParkLoc1Shared2Logsum(ParkLoc1Shared2Logsum); + double ParkLoc1Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setParkLoc1Shared3Logsum(ParkLoc1Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(2); + double ParkLoc2DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); + dmu.setParkLoc2DriveAloneLogsum(ParkLoc2DriveAloneLogsum); + double ParkLoc2Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setParkLoc2Shared2Logsum(ParkLoc2Shared2Logsum); + double ParkLoc2Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setParkLoc2Shared3Logsum(ParkLoc2Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(3); + double ParkLoc3DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); + dmu.setParkLoc3DriveAloneLogsum(ParkLoc3DriveAloneLogsum); + double ParkLoc3Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setParkLoc3Shared2Logsum(ParkLoc3Shared2Logsum); + double ParkLoc3Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setParkLoc3Shared3Logsum(ParkLoc3Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(4); + double ParkLoc4DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); + dmu.setParkLoc4DriveAloneLogsum(ParkLoc4DriveAloneLogsum); + double ParkLoc4Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setParkLoc4Shared2Logsum(ParkLoc4Shared2Logsum); + double ParkLoc4Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setParkLoc4Shared3Logsum(ParkLoc4Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(5); + double ParkLoc5DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); + dmu.setParkLoc5DriveAloneLogsum(ParkLoc5DriveAloneLogsum); + double ParkLoc5Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setParkLoc5Shared2Logsum(ParkLoc5Shared2Logsum); + double ParkLoc5Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setParkLoc5Shared3Logsum(ParkLoc5Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(6); + double ParkESCShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setParkESCShared2Logsum(ParkESCShared2Logsum); + double ParkESCShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setParkESCShared3Logsum(ParkESCShared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(7); + double RentalDriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); + dmu.setRentalDriveAloneLogsum(RentalDriveAloneLogsum); + double RentalShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setRentalShared2Logsum(RentalShared2Logsum); + double RentalShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setRentalShared3Logsum(RentalShared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(8); + double ShuttleVanShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setShuttleVanShared2Logsum(ShuttleVanShared2Logsum); + double ShuttleVanShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setShuttleVanShared3Logsum(ShuttleVanShared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(9); + double HotelCourtesyShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setHotelCourtesyShared2Logsum(HotelCourtesyShared2Logsum); + double HotelCourtesyShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setHotelCourtesyShared3Logsum(HotelCourtesyShared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(10); + double RideHailingLoc1Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setRideHailingLoc1Shared2Logsum(RideHailingLoc1Shared2Logsum); + double RideHailingLoc1Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setRideHailingLoc1Shared3Logsum(RideHailingLoc1Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(11); + double RideHailingLoc2Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setRideHailingLoc2Shared2Logsum(RideHailingLoc2Shared2Logsum); + double RideHailingLoc2Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setRideHailingLoc2Shared3Logsum(RideHailingLoc2Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(12); + double TransitLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 4); + dmu.setTransitLogsum(TransitLogsum); + + airportMgra = dmu.mode_mgra_map.get(13); + double CurbLoc1Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setCurbLoc1Shared2Logsum(CurbLoc1Shared2Logsum); + double CurbLoc1Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setCurbLoc1Shared3Logsum(CurbLoc1Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(14); + double CurbLoc2Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setCurbLoc2Shared2Logsum(CurbLoc2Shared2Logsum); + double CurbLoc2Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setCurbLoc2Shared3Logsum(CurbLoc2Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(15); + double CurbLoc3Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setCurbLoc3Shared2Logsum(CurbLoc3Shared2Logsum); + double CurbLoc3Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setCurbLoc3Shared3Logsum(CurbLoc3Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(16); + double CurbLoc4Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setCurbLoc4Shared2Logsum(CurbLoc4Shared2Logsum); + double CurbLoc4Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setCurbLoc4Shared3Logsum(CurbLoc4Shared3Logsum); + + airportMgra = dmu.mode_mgra_map.get(17); + double CurbLoc5Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); + dmu.setCurbLoc5Shared2Logsum(CurbLoc5Shared2Logsum); + double CurbLoc5Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); + dmu.setCurbLoc5Shared3Logsum(CurbLoc5Shared3Logsum); + */ + + /* + // if 1-person party, solve for the drive-alone and 2-person logsum if (party.getSize() == 1) { driveAloneModel.computeUtilities(dmu, dmu.getDmuIndex()); @@ -256,7 +481,7 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) transitModel.computeUtilities(dmu, dmu.getDmuIndex()); double transitLogsum = transitModel.getLogsum(); dmu.setTransitLogsum(transitLogsum); - +*/ // calculate access mode utility and choose access mode accessModel.computeUtilities(dmu, dmu.getDmuIndex()); int accessMode = accessModel.getChoiceResult(party.getRandom()); @@ -269,17 +494,19 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) if (accessMode != AirportModelStructure.TRANSIT) { + int chosenAirportMgra = dmu.mode_mgra_map.get(accessMode); + int chosenAirportMgra_index = dmu.mgra_index_map.get(chosenAirportMgra); if (occupancy == 1) { - int choice = driveAloneModel.getChoiceResult(randomNumber); + int choice = driveAloneModel[chosenAirportMgra_index].getChoiceResult(randomNumber); tripMode = choice; } else if (occupancy == 2) { - int choice = shared2Model.getChoiceResult(randomNumber); + int choice = shared2Model[chosenAirportMgra_index].getChoiceResult(randomNumber); tripMode = choice + 2; } else if (occupancy > 2) { - int choice = shared3Model.getChoiceResult(randomNumber); + int choice = shared3Model[chosenAirportMgra_index].getChoiceResult(randomNumber); tripMode = choice + 3 + 2; } } else @@ -303,6 +530,7 @@ public void chooseModes(AirportParty[] airportParties, AirportDmuFactoryIf dmuFa { AirportModelDMU dmu = dmuFactory.getAirportModelDMU(); + solveModeMgra(dmu); // iterate through the array, choosing mgras and setting them for (AirportParty party : airportParties) { diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 268f36aa2..9268c2872 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -1,14 +1,20 @@ package org.sandag.abm.airport; import java.io.Serializable; +import java.util.Arrays; import java.util.HashMap; +import java.util.Set; +import java.util.TreeSet; + import org.apache.log4j.Logger; import org.sandag.abm.accessibilities.BestTransitPathCalculator; import org.sandag.abm.accessibilities.DriveTransitWalkSkimsCalculator; import org.sandag.abm.accessibilities.WalkTransitDriveSkimsCalculator; import org.sandag.abm.accessibilities.WalkTransitWalkSkimsCalculator; import org.sandag.abm.common.ConditionalDMU; +//import org.sandag.abm.modechoice.MgraDataManager; import org.sandag.abm.modechoice.Modes; + import com.pb.common.calculator.IndexValues; import com.pb.common.calculator.VariableTable; @@ -17,6 +23,7 @@ public class AirportModelDMU implements Serializable, VariableTable { protected IndexValues dmuIndex; +// private MgraDataManager mgraManager; private AirportParty airportParty; private double[][] sizeTerms; // dimensioned @@ -80,6 +87,32 @@ public class AirportModelDMU public static final int OUT = 0; public static final int IN = 1; protected static final int NUM_DIR = 2; + + protected int NUM_A_MGRA; + + protected static final int NUM_LOS = 4; + + private int nonAirportMgra; + private int direction; + + public int getNonAirportMgra() { + return nonAirportMgra; + } + + public void setNonAirportMgra(int nonAirportMgra) { + this.nonAirportMgra = nonAirportMgra; + } +/* public int getAirportMgra() { + return airportMgra; + } + + public void setAirportMgra(int airportMgra) { + this.airportMgra = airportMgra; + } +*/ + public void setDirection(int direction) { + this.direction = direction; + } // estimation file defines time periods as: // 1 | Early AM: 3:00 AM - 5:59 AM | @@ -139,10 +172,88 @@ public class AirportModelDMU private double shared2Logsum; private double shared3Logsum; private double transitLogsum; - +/* + private double ParkLoc1DriveAloneLogsum; + private double ParkLoc1Shared2Logsum; + private double ParkLoc1Shared3Logsum; + private double ParkLoc2DriveAloneLogsum; + private double ParkLoc2Shared2Logsum; + private double ParkLoc2Shared3Logsum; + private double ParkLoc3DriveAloneLogsum; + private double ParkLoc3Shared2Logsum; + private double ParkLoc3Shared3Logsum; + private double ParkLoc4DriveAloneLogsum; + private double ParkLoc4Shared2Logsum; + private double ParkLoc4Shared3Logsum; + private double ParkLoc5DriveAloneLogsum; + private double ParkLoc5Shared2Logsum; + private double ParkLoc5Shared3Logsum; + private double ParkESCShared2Logsum; + private double ParkESCShared3Logsum; + private double RentalDriveAloneLogsum; + private double RentalShared2Logsum; + private double RentalShared3Logsum; + private double ShuttleVanShared2Logsum; + private double ShuttleVanShared3Logsum; + private double HotelCourtesyShared2Logsum; + private double HotelCourtesyShared3Logsum; + private double RideHailingLoc1Shared2Logsum; + private double RideHailingLoc1Shared3Logsum; + private double RideHailingLoc2Shared2Logsum; + private double RideHailingLoc2Shared3Logsum; + private double TransitLogsum; + private double CurbLoc1Shared2Logsum; + private double CurbLoc1Shared3Logsum; + private double CurbLoc2Shared2Logsum; + private double CurbLoc2Shared3Logsum; + private double CurbLoc3Shared2Logsum; + private double CurbLoc3Shared3Logsum; + private double CurbLoc4Shared2Logsum; + private double CurbLoc4Shared3Logsum; + private double CurbLoc5Shared2Logsum; + private double CurbLoc5Shared3Logsum; +*/ protected double[][][] transitSkim = new double[NUM_ACC_EGR][NUM_LOC_PREM][NUM_SKIMS]; protected Logger _logger = null; + + protected double[][][][] travel_time; + + public int maxMgra; + + public void setMaxMgra(int maxMgra) { + this.maxMgra = maxMgra; + } + + public HashMap mode_mgra_map = new HashMap(); + public HashMap mgra_index_map = new HashMap(); + + public void setModeMgraMap(HashMap modeMgraMap){ + mode_mgra_map = modeMgraMap; + } + + public void setMgraIndexMap(){ + Integer[] mgraValueArray = mode_mgra_map.values().toArray(new Integer[0]); + + //mgra_index_map.put(2997, 0); + + Set uniqueMgraValues = new TreeSet(); + uniqueMgraValues.addAll(Arrays.asList(mgraValueArray)); + + //Integer[] uniqueMgraValueArray = new Integer[uniqueMgraValues.size()]; + //uniqueMgraValues.toArray(uniqueMgraValueArray); + + Integer[] uniqueMgraValueArray = uniqueMgraValues.toArray(new Integer[0]); + + for (int i = 0; i < uniqueMgraValueArray.length; i++){ + mgra_index_map.put(uniqueMgraValueArray[i], i); + } + } + + public void setTravelTimeArraySize(){ + NUM_A_MGRA = mgra_index_map.size(); + travel_time = new double[maxMgra + 1][NUM_A_MGRA][NUM_DIR][NUM_LOS]; + } public AirportModelDMU(Logger logger) { @@ -174,8 +285,8 @@ private void setupMethodIndexMap() methodIndexMap.put("getDriveAloneLogsum", 90); methodIndexMap.put("getShared2Logsum", 91); methodIndexMap.put("getShared3Logsum", 92); - methodIndexMap.put("getTransitLogsum", 93); - + //methodIndexMap.put("getTransitLogsum", 93); + methodIndexMap.put("getWtw_lb_LB_ivt", 100); methodIndexMap.put("getWtw_lb_fwait", 101); methodIndexMap.put("getWtw_lb_xwait", 102); @@ -282,6 +393,47 @@ private void setupMethodIndexMap() methodIndexMap.put("getDt_cr_WalkAuxTime", 202); methodIndexMap.put("getDt_cr_fare", 203); methodIndexMap.put("getDt_cr_xfers", 204); + + methodIndexMap.put("getParkLoc1DriveAloneLogsum", 900); + methodIndexMap.put("getParkLoc1Shared2Logsum", 901); + methodIndexMap.put("getParkLoc1Shared3Logsum", 902); + methodIndexMap.put("getParkLoc2DriveAloneLogsum", 903); + methodIndexMap.put("getParkLoc2Shared2Logsum", 904); + methodIndexMap.put("getParkLoc2Shared3Logsum", 905); + methodIndexMap.put("getParkLoc3DriveAloneLogsum", 906); + methodIndexMap.put("getParkLoc3Shared2Logsum", 907); + methodIndexMap.put("getParkLoc3Shared3Logsum", 908); + methodIndexMap.put("getParkLoc4DriveAloneLogsum", 909); + methodIndexMap.put("getParkLoc4Shared2Logsum", 910); + methodIndexMap.put("getParkLoc4Shared3Logsum", 911); + methodIndexMap.put("getParkLoc5DriveAloneLogsum", 912); + methodIndexMap.put("getParkLoc5Shared2Logsum", 913); + methodIndexMap.put("getParkLoc5Shared3Logsum", 914); + methodIndexMap.put("getParkESCShared2Logsum", 915); + methodIndexMap.put("getParkESCShared3Logsum", 916); + methodIndexMap.put("getRentalDriveAloneLogsum", 917); + methodIndexMap.put("getRentalShared2Logsum", 918); + methodIndexMap.put("getRentalShared3Logsum", 919); + methodIndexMap.put("getShuttleVanShared2Logsum", 920); + methodIndexMap.put("getShuttleVanShared3Logsum", 921); + methodIndexMap.put("getHotelCourtesyShared2Logsum", 922); + methodIndexMap.put("getHotelCourtesyShared3Logsum", 923); + methodIndexMap.put("getRideHailingLoc1Shared2Logsum", 924); + methodIndexMap.put("getRideHailingLoc1Shared3Logsum", 925); + methodIndexMap.put("getRideHailingLoc2Shared2Logsum", 926); + methodIndexMap.put("getRideHailingLoc2Shared3Logsum", 927); + methodIndexMap.put("getTransitLogsum", 928); + methodIndexMap.put("getCurbLoc1Shared2Logsum", 929); + methodIndexMap.put("getCurbLoc1Shared3Logsum", 930); + methodIndexMap.put("getCurbLoc2Shared2Logsum", 931); + methodIndexMap.put("getCurbLoc2Shared3Logsum", 932); + methodIndexMap.put("getCurbLoc3Shared2Logsum", 933); + methodIndexMap.put("getCurbLoc3Shared3Logsum", 934); + methodIndexMap.put("getCurbLoc4Shared2Logsum", 935); + methodIndexMap.put("getCurbLoc4Shared3Logsum", 936); + methodIndexMap.put("getCurbLoc5Shared2Logsum", 937); + methodIndexMap.put("getCurbLoc5Shared3Logsum", 938); + CreateReverseMap(); } @@ -315,6 +467,631 @@ public void setDmuSkimCalculators(WalkTransitWalkSkimsCalculator myWtw, dtw = myDtw; } + /** + * Set the mode travel time array value for the access/egress mode, line-haul + * mode, LOS component + * + * @param nonAirportMgra + * Index for nonairport mgra + * @param airportMgra + * Index for airport Mgra + * @param direction + * The index for direction + * @param los + * The los type + * @param value + * The value to set in the array + */ + protected void setModeTravelTime(int nonAirportMgra, int airportMgra, int direction, int los, double value) + { + travel_time[nonAirportMgra][airportMgra][direction][los] = value; + } + + /** + * Get the mode travel time array value for the access/egress mode, line-haul + * mode, LOS component + * + * @param nonAirportMgra + * Index for nonairport mgra + * @param airportMgra + * Index for airport Mgra + * @param direction + * The index for direction + * @param los + * The los type + * @return The travel time value + */ + protected double getModeTravelTime(int nonAirportMgra, int airportMgra, int direction, int los) + { + return travel_time[nonAirportMgra][airportMgra][direction][los]; + } + +/* + protected void setParkLoc1DriveAloneLogsum(int nonAirportMgra, int airportMgra, int direction, int los) + { + double travelTime = getModeTravelTime(nonAirportMgra, airportMgra, direction, los); + this.ParkLoc1DriveAloneLogsum = travelTime; + } + + protected void setParkLoc1DriveAloneLogsum(double ParkLoc1DriveAloneLogsum) + { + this.ParkLoc1DriveAloneLogsum = ParkLoc1DriveAloneLogsum; + } + + protected void setParkLoc1Shared2Logsum(double ParkLoc1Shared2Logsum) + { + this.ParkLoc1Shared2Logsum = ParkLoc1Shared2Logsum; + } + + protected void setParkLoc1Shared3Logsum(double ParkLoc1Shared3Logsum) + { + this.ParkLoc1Shared3Logsum = ParkLoc1Shared3Logsum; + } + + protected void setParkLoc2DriveAloneLogsum(double ParkLoc2DriveAloneLogsum) + { + this.ParkLoc2DriveAloneLogsum = ParkLoc2DriveAloneLogsum; + } + + protected void setParkLoc2Shared2Logsum(double ParkLoc2Shared2Logsum) + { + this.ParkLoc2Shared2Logsum = ParkLoc2Shared2Logsum; + } + + protected void setParkLoc2Shared3Logsum(double ParkLoc2Shared3Logsum) + { + this.ParkLoc2Shared3Logsum = ParkLoc2Shared3Logsum; + } + + protected void setParkLoc3DriveAloneLogsum(double ParkLoc3DriveAloneLogsum) + { + this.ParkLoc3DriveAloneLogsum = ParkLoc3DriveAloneLogsum; + } + + protected void setParkLoc3Shared2Logsum(double ParkLoc3Shared2Logsum) + { + this.ParkLoc3Shared2Logsum = ParkLoc3Shared2Logsum; + } + + protected void setParkLoc3Shared3Logsum(double ParkLoc3Shared3Logsum) + { + this.ParkLoc3Shared3Logsum = ParkLoc3Shared3Logsum; + } + + protected void setParkLoc4DriveAloneLogsum(double ParkLoc4DriveAloneLogsum) + { + this.ParkLoc4DriveAloneLogsum = ParkLoc4DriveAloneLogsum; + } + + protected void setParkLoc4Shared2Logsum(double ParkLoc4Shared2Logsum) + { + this.ParkLoc4Shared2Logsum = ParkLoc4Shared2Logsum; + } + + protected void setParkLoc4Shared3Logsum(double ParkLoc4Shared3Logsum) + { + this.ParkLoc4Shared3Logsum = ParkLoc4Shared3Logsum; + } + + protected void setParkLoc5DriveAloneLogsum(double ParkLoc5DriveAloneLogsum) + { + this.ParkLoc5DriveAloneLogsum = ParkLoc5DriveAloneLogsum; + } + + protected void setParkLoc5Shared2Logsum(double ParkLoc5Shared2Logsum) + { + this.ParkLoc5Shared2Logsum = ParkLoc5Shared2Logsum; + } + + protected void setParkLoc5Shared3Logsum(double ParkLoc5Shared3Logsum) + { + this.ParkLoc5Shared3Logsum = ParkLoc5Shared3Logsum; + } + + protected void setParkESCShared2Logsum(double ParkESCShared2Logsum) + { + this.ParkESCShared2Logsum = ParkESCShared2Logsum; + } + + protected void setParkESCShared3Logsum(double ParkESCShared3Logsum) + { + this.ParkESCShared3Logsum = ParkESCShared3Logsum; + } + + protected void setRentalDriveAloneLogsum(double RentalDriveAloneLogsum) + { + this.RentalDriveAloneLogsum = RentalDriveAloneLogsum; + } + + protected void setRentalShared2Logsum(double RentalShared2Logsum) + { + this.RentalShared2Logsum = RentalShared2Logsum; + } + + protected void setRentalShared3Logsum(double RentalShared3Logsum) + { + this.RentalShared3Logsum = RentalShared3Logsum; + } + protected void setShuttleVanShared2Logsum(double ShuttleVanShared2Logsum) + { + this.ShuttleVanShared2Logsum = ShuttleVanShared2Logsum; + } + + protected void setShuttleVanShared3Logsum(double ShuttleVanShared3Logsum) + { + this.ShuttleVanShared3Logsum = ShuttleVanShared3Logsum; + } + + protected void setHotelCourtesyShared2Logsum(double HotelCourtesyShared2Logsum) + { + this.HotelCourtesyShared2Logsum = HotelCourtesyShared2Logsum; + } + + protected void setHotelCourtesyShared3Logsum(double HotelCourtesyShared3Logsum) + { + this.HotelCourtesyShared3Logsum = HotelCourtesyShared3Logsum; + } + + protected void setRideHailingLoc1Shared2Logsum(double RideHailingLoc1Shared2Logsum) + { + this.RideHailingLoc1Shared2Logsum = RideHailingLoc1Shared2Logsum; + } + + protected void setRideHailingLoc1Shared3Logsum(double RideHailingLoc1Shared3Logsum) + { + this.RideHailingLoc1Shared3Logsum = RideHailingLoc1Shared3Logsum; + } + + protected void setRideHailingLoc2Shared2Logsum(double RideHailingLoc2Shared2Logsum) + { + this.RideHailingLoc2Shared2Logsum = RideHailingLoc2Shared2Logsum; + } + + protected void setRideHailingLoc2Shared3Logsum(double RideHailingLoc2Shared3Logsum) + { + this.RideHailingLoc2Shared3Logsum = RideHailingLoc2Shared3Logsum; + } + + protected void setTransitLogsum(double TransitLogsum) + { + this.TransitLogsum = TransitLogsum; + } + + protected void setCurbLoc1Shared2Logsum(double CurbLoc1Shared2Logsum) + { + this.CurbLoc1Shared2Logsum = CurbLoc1Shared2Logsum; + } + + protected void setCurbLoc1Shared3Logsum(double CurbLoc1Shared3Logsum) + { + this.CurbLoc1Shared3Logsum = CurbLoc1Shared3Logsum; + } + + protected void setCurbLoc2Shared2Logsum(double CurbLoc2Shared2Logsum) + { + this.CurbLoc2Shared2Logsum = CurbLoc2Shared2Logsum; + } + + protected void setCurbLoc2Shared3Logsum(double CurbLoc2Shared3Logsum) + { + this.CurbLoc2Shared3Logsum = CurbLoc2Shared3Logsum; + } + + protected void setCurbLoc3Shared2Logsum(double CurbLoc3Shared2Logsum) + { + this.CurbLoc3Shared2Logsum = CurbLoc3Shared2Logsum; + } + + protected void setCurbLoc3Shared3Logsum(double CurbLoc3Shared3Logsum) + { + this.CurbLoc3Shared3Logsum = CurbLoc3Shared3Logsum; + } + + protected void setCurbLoc4Shared2Logsum(double CurbLoc4Shared2Logsum) + { + this.CurbLoc4Shared2Logsum = CurbLoc4Shared2Logsum; + } + + protected void setCurbLoc4Shared3Logsum(double CurbLoc4Shared3Logsum) + { + this.CurbLoc4Shared3Logsum = CurbLoc4Shared3Logsum; + } + + protected void setCurbLoc5Shared2Logsum(double CurbLoc5Shared2Logsum) + { + this.CurbLoc5Shared2Logsum = CurbLoc5Shared2Logsum; + } + + protected void setCurbLoc5Shared3Logsum(double CurbLoc5Shared3Logsum) + { + this.CurbLoc5Shared3Logsum = CurbLoc5Shared3Logsum; + } +*/ + +/* + public double getParkLoc1Shared2Logsum() { + return ParkLoc1Shared2Logsum; + } + + public double getParkLoc1Shared3Logsum() { + return ParkLoc1Shared3Logsum; + //return travel_time[nonAirportMgra][airportMgra][direction][2]; + } + + public double getParkLoc2DriveAloneLogsum() { + return ParkLoc2DriveAloneLogsum; + } + + public double getParkLoc2Shared2Logsum() { + return ParkLoc2Shared2Logsum; + } + + public double getParkLoc2Shared3Logsum() { + return ParkLoc2Shared3Logsum; + } + + public double getParkLoc3DriveAloneLogsum() { + return ParkLoc3DriveAloneLogsum; + } + + public double getParkLoc3Shared2Logsum() { + return ParkLoc3Shared2Logsum; + } + + public double getParkLoc3Shared3Logsum() { + return ParkLoc3Shared3Logsum; + } + + public double getParkLoc4DriveAloneLogsum() { + return ParkLoc4DriveAloneLogsum; + } + + public double getParkLoc4Shared2Logsum() { + return ParkLoc4Shared2Logsum; + } + + public double getParkLoc4Shared3Logsum() { + return ParkLoc4Shared3Logsum; + } + + public double getParkLoc5DriveAloneLogsum() { + return ParkLoc5DriveAloneLogsum; + } + + public double getParkLoc5Shared2Logsum() { + return ParkLoc5Shared2Logsum; + } + + public double getParkLoc5Shared3Logsum() { + return ParkLoc5Shared3Logsum; + } + + public double getParkESCShared2Logsum() { + return ParkESCShared2Logsum; + } + + public double getParkESCShared3Logsum() { + return ParkESCShared3Logsum; + } + + public double getRentalDriveAloneLogsum() { + return RentalDriveAloneLogsum; + } + + public double getRentalShared2Logsum() { + return RentalShared2Logsum; + } + + public double getRentalShared3Logsum() { + return RentalShared3Logsum; + } + + public double getShuttleVanShared2Logsum() { + return ShuttleVanShared2Logsum; + } + + public double getShuttleVanShared3Logsum() { + return ShuttleVanShared3Logsum; + } + + public double getHotelCourtesyShared2Logsum() { + return HotelCourtesyShared2Logsum; + } + + public double getHotelCourtesyShared3Logsum() { + return HotelCourtesyShared3Logsum; + } + + public double getRideHailingLoc1Shared2Logsum() { + return RideHailingLoc1Shared2Logsum; + } + + public double getRideHailingLoc1Shared3Logsum() { + return RideHailingLoc1Shared3Logsum; + } + + public double getRideHailingLoc2Shared2Logsum() { + return RideHailingLoc2Shared2Logsum; + } + + public double getRideHailingLoc2Shared3Logsum() { + return RideHailingLoc2Shared3Logsum; + } + + public double getCurbLoc1Shared2Logsum() { + return CurbLoc1Shared2Logsum; + } + + public double getCurbLoc1Shared3Logsum() { + return CurbLoc1Shared3Logsum; + } + + public double getCurbLoc2Shared2Logsum() { + return CurbLoc2Shared2Logsum; + } + + public double getCurbLoc2Shared3Logsum() { + return CurbLoc2Shared3Logsum; + } + + public double getCurbLoc3Shared2Logsum() { + return CurbLoc3Shared2Logsum; + } + + public double getCurbLoc3Shared3Logsum() { + return CurbLoc3Shared3Logsum; + } + + public double getCurbLoc4Shared2Logsum() { + return CurbLoc4Shared2Logsum; + } + + public double getCurbLoc4Shared3Logsum() { + return CurbLoc4Shared3Logsum; + } + + public double getCurbLoc5Shared2Logsum() { + return CurbLoc5Shared2Logsum; + } + + public double getCurbLoc5Shared3Logsum() { + return CurbLoc5Shared3Logsum; + } +*/ + + public double getParkLoc1DriveAloneLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + } + + public double getParkLoc1Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getParkLoc1Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getParkLoc2DriveAloneLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + } + + public double getParkLoc2Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getParkLoc2Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getParkLoc3DriveAloneLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + } + + public double getParkLoc3Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getParkLoc3Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getParkLoc4DriveAloneLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + } + + public double getParkLoc4Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getParkLoc4Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getParkLoc5DriveAloneLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + } + + public double getParkLoc5Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getParkLoc5Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getParkESCShared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_ESC); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getParkESCShared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_ESC); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getRentalDriveAloneLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + } + + public double getRentalShared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getRentalShared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getShuttleVanShared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getShuttleVanShared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getHotelCourtesyShared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getHotelCourtesyShared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getRideHailingLoc1Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getRideHailingLoc1Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getRideHailingLoc2Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getRideHailingLoc2Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getTransitLogsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.TRANSIT); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.Transit]; + } + + public double getCurbLoc1Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getCurbLoc1Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC1); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getCurbLoc2Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getCurbLoc2Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC2); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getCurbLoc3Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC3); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getCurbLoc3Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC3); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getCurbLoc4Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC4); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getCurbLoc4Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC4); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } + + public double getCurbLoc5Shared2Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + } + + public double getCurbLoc5Shared3Logsum() + { + int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); + return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + } /** * Set the transit skim array value for the access/egress mode, line-haul * mode, LOS component @@ -1096,11 +1873,11 @@ public void setShared3Logsum(double shared3Logsum) /** * @return the transitLogsum */ - public double getTransitLogsum() +/* public double getTransitLogsum() { return transitLogsum; } - +*/ /** * @param transitLogsum * the transitLogsum to set diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index 95c51e382..6f66be220 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -29,25 +29,33 @@ public final class AirportModelStructure public static final int UPPER_PM = 29; public static final String[] MODEL_PERIOD_LABELS = {"EA", "AM", "MD", "PM", "EV"}; - public static final byte ACCESS_MODES = 10; - - public static final byte PARK_TMNL = 1; - public static final byte PARK_SANOFF = 2; - public static final byte PARK_PVTOFF = 3; -/* public static final byte PUDO_ESC = 4; - public static final byte PUDO_CURB = 5; - public static final byte RENTAL = 6; - public static final byte TAXI = 7; - public static final byte SHUTTLE_VAN = 8; - public static final byte TRANSIT = 9; -*/ - public static final byte PARK_NEWOFF = 4; - public static final byte PUDO_ESC = 5; - public static final byte PUDO_CURB = 6; + public static final byte ACCESS_MODES = 17; + + public static final byte PARK_LOC1 = 1; + public static final byte PARK_LOC2 = 2; + public static final byte PARK_LOC3 = 3; + public static final byte PARK_LOC4 = 4; + public static final byte PARK_LOC5 = 5; + public static final byte PARK_ESC = 6; public static final byte RENTAL = 7; - public static final byte TAXI = 8; - public static final byte SHUTTLE_VAN = 9; - public static final byte TRANSIT = 10; + public static final byte SHUTTLE_VAN = 8; + public static final byte HOTEL_COURTESY = 9; + public static final byte RIDEHAILING_LOC1 = 10; + public static final byte RIDEHAILING_LOC2 = 11; + public static final byte TRANSIT = 12; + public static final byte CURB_LOC1 = 13; + public static final byte CURB_LOC2 = 14; + public static final byte CURB_LOC3 = 15; + public static final byte CURB_LOC4 = 16; + public static final byte CURB_LOC5 = 17; + + public static final byte LOS_TYPE = 4; + + public static final byte DA = 0; + public static final byte SR2 = 1; + public static final byte SR3 = 2; + public static final byte Transit = 3; + private AirportModelStructure() { @@ -190,26 +198,40 @@ public static int getOccupancy(int accessMode, int partySize) switch (accessMode) { - case PARK_TMNL: + case PARK_LOC1: return partySize; - case PARK_SANOFF: + case PARK_LOC2: return partySize; - case PARK_PVTOFF: + case PARK_LOC3: return partySize; - case PARK_NEWOFF: + case PARK_LOC4: return partySize; - case PUDO_ESC: - return partySize + 1; - case PUDO_CURB: + case PARK_LOC5: + return partySize; + case PARK_ESC: return partySize + 1; case RENTAL: return partySize; - case TAXI: - return partySize + 1; case SHUTTLE_VAN: return partySize + 1; + case HOTEL_COURTESY: + return partySize + 1; + case RIDEHAILING_LOC1: + return partySize + 1; + case RIDEHAILING_LOC2: + return partySize + 1; case TRANSIT: return partySize; + case CURB_LOC1: + return partySize + 1; + case CURB_LOC2: + return partySize + 1; + case CURB_LOC3: + return partySize + 1; + case CURB_LOC4: + return partySize + 1; + case CURB_LOC5: + return partySize + 1; default: throw new RuntimeException( From 598c39dd2dab54f6a9e74760f02d5b819d0d6c5d Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Wed, 27 May 2020 10:34:00 -0400 Subject: [PATCH 04/18] clean up --- .../abm/airport/AirportModeChoiceModel.java | 215 +------- .../sandag/abm/airport/AirportModelDMU.java | 490 ++---------------- 2 files changed, 68 insertions(+), 637 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index 543d4247e..1cb33fe47 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -84,10 +84,9 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf // create a DMU AirportModelDMU dmu = dmuFactory.getAirportModelDMU(); - // initialize mgra size array + // get MAX mgra to initialize mgra size array in dmu int maxMgra = mgraManager.getMaxMgra(); dmu.setMaxMgra(maxMgra); -// dmu.setTravelTimeArraySize(); // fake choice model to get airport access MGRA input mgraModel = new ChoiceModelApplication(airportModeUecFileName, mgraPage, dataPage, @@ -110,19 +109,6 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf rbMap, (VariableTable) dmu); } -/* - // create a ChoiceModelApplication object for drive-alone mode choice - driveAloneModel = new ChoiceModelApplication(airportModeUecFileName, daPage, dataPage, - rbMap, (VariableTable) dmu); - - // create a ChoiceModelApplication object for shared 2 mode choice - shared2Model = new ChoiceModelApplication(airportModeUecFileName, s2Page, dataPage, rbMap, - (VariableTable) dmu); - - // create a ChoiceModelApplication object for shared 3+ mode choice - shared3Model = new ChoiceModelApplication(airportModeUecFileName, s3Page, dataPage, rbMap, - (VariableTable) dmu); -*/ // create a ChoiceModelApplication object for transit mode choice transitModel = new ChoiceModelApplication(airportModeUecFileName, transitPage, dataPage, rbMap, (VariableTable) dmu); @@ -175,9 +161,12 @@ public void initializeBestPathCalculators() } + /** + * get access mode MGRA from UEC user input + */ public void solveModeMgra(AirportModelDMU dmu){ //question for Jim -- Do I need dmu index for this one? mgraModel.computeUtilities(dmu, dmu.getDmuIndex()); - String[] modeNames = mgraModel.getAlternativeNames(); + int modeCount = mgraModel.getNumberOfAlternatives(); double[] mgraValues = mgraModel.getUtilities(); @@ -263,9 +252,6 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) dmu.setDmuSkimAttributes(origMgra, destMgra, period, inbound, debug); // Solve trip mode level utilities - - //Integer[] modeArray = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; - //int[] losArray = {0,1,2,3}; for (int mode = 1; mode <= AirportModelStructure.ACCESS_MODES; mode++){ airportMgra = dmu.mode_mgra_map.get(mode); @@ -311,182 +297,33 @@ else if (los == 2){ } } } -/* - airportMgra = dmu.mode_mgra_map.get(1); - double ParkLoc1DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); - dmu.setParkLoc1DriveAloneLogsum(ParkLoc1DriveAloneLogsum); - double ParkLoc1Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setParkLoc1Shared2Logsum(ParkLoc1Shared2Logsum); - double ParkLoc1Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setParkLoc1Shared3Logsum(ParkLoc1Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(2); - double ParkLoc2DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); - dmu.setParkLoc2DriveAloneLogsum(ParkLoc2DriveAloneLogsum); - double ParkLoc2Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setParkLoc2Shared2Logsum(ParkLoc2Shared2Logsum); - double ParkLoc2Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setParkLoc2Shared3Logsum(ParkLoc2Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(3); - double ParkLoc3DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); - dmu.setParkLoc3DriveAloneLogsum(ParkLoc3DriveAloneLogsum); - double ParkLoc3Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setParkLoc3Shared2Logsum(ParkLoc3Shared2Logsum); - double ParkLoc3Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setParkLoc3Shared3Logsum(ParkLoc3Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(4); - double ParkLoc4DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); - dmu.setParkLoc4DriveAloneLogsum(ParkLoc4DriveAloneLogsum); - double ParkLoc4Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setParkLoc4Shared2Logsum(ParkLoc4Shared2Logsum); - double ParkLoc4Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setParkLoc4Shared3Logsum(ParkLoc4Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(5); - double ParkLoc5DriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); - dmu.setParkLoc5DriveAloneLogsum(ParkLoc5DriveAloneLogsum); - double ParkLoc5Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setParkLoc5Shared2Logsum(ParkLoc5Shared2Logsum); - double ParkLoc5Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setParkLoc5Shared3Logsum(ParkLoc5Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(6); - double ParkESCShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setParkESCShared2Logsum(ParkESCShared2Logsum); - double ParkESCShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setParkESCShared3Logsum(ParkESCShared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(7); - double RentalDriveAloneLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 1); - dmu.setRentalDriveAloneLogsum(RentalDriveAloneLogsum); - double RentalShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setRentalShared2Logsum(RentalShared2Logsum); - double RentalShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setRentalShared3Logsum(RentalShared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(8); - double ShuttleVanShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setShuttleVanShared2Logsum(ShuttleVanShared2Logsum); - double ShuttleVanShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setShuttleVanShared3Logsum(ShuttleVanShared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(9); - double HotelCourtesyShared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setHotelCourtesyShared2Logsum(HotelCourtesyShared2Logsum); - double HotelCourtesyShared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setHotelCourtesyShared3Logsum(HotelCourtesyShared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(10); - double RideHailingLoc1Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setRideHailingLoc1Shared2Logsum(RideHailingLoc1Shared2Logsum); - double RideHailingLoc1Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setRideHailingLoc1Shared3Logsum(RideHailingLoc1Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(11); - double RideHailingLoc2Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setRideHailingLoc2Shared2Logsum(RideHailingLoc2Shared2Logsum); - double RideHailingLoc2Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setRideHailingLoc2Shared3Logsum(RideHailingLoc2Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(12); - double TransitLogsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 4); - dmu.setTransitLogsum(TransitLogsum); - - airportMgra = dmu.mode_mgra_map.get(13); - double CurbLoc1Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setCurbLoc1Shared2Logsum(CurbLoc1Shared2Logsum); - double CurbLoc1Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setCurbLoc1Shared3Logsum(CurbLoc1Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(14); - double CurbLoc2Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setCurbLoc2Shared2Logsum(CurbLoc2Shared2Logsum); - double CurbLoc2Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setCurbLoc2Shared3Logsum(CurbLoc2Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(15); - double CurbLoc3Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setCurbLoc3Shared2Logsum(CurbLoc3Shared2Logsum); - double CurbLoc3Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setCurbLoc3Shared3Logsum(CurbLoc3Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(16); - double CurbLoc4Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setCurbLoc4Shared2Logsum(CurbLoc4Shared2Logsum); - double CurbLoc4Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setCurbLoc4Shared3Logsum(CurbLoc4Shared3Logsum); - - airportMgra = dmu.mode_mgra_map.get(17); - double CurbLoc5Shared2Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 2); - dmu.setCurbLoc5Shared2Logsum(CurbLoc5Shared2Logsum); - double CurbLoc5Shared3Logsum = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, 3); - dmu.setCurbLoc5Shared3Logsum(CurbLoc5Shared3Logsum); - */ - - /* - // if 1-person party, solve for the drive-alone and 2-person logsum - if (party.getSize() == 1) - { - driveAloneModel.computeUtilities(dmu, dmu.getDmuIndex()); - double driveAloneLogsum = driveAloneModel.getLogsum(); - dmu.setDriveAloneLogsum(driveAloneLogsum); - - shared2Model.computeUtilities(dmu, dmu.getDmuIndex()); - double shared2Logsum = shared2Model.getLogsum(); - dmu.setShared2Logsum(shared2Logsum); - - } else if (party.getSize() == 2) - { // if 2-person party solve for the - // shared 2 and shared 3+ logsums - shared2Model.computeUtilities(dmu, dmu.getDmuIndex()); - double shared2Logsum = shared2Model.getLogsum(); - dmu.setShared2Logsum(shared2Logsum); - - shared3Model.computeUtilities(dmu, dmu.getDmuIndex()); - double shared3Logsum = shared3Model.getLogsum(); - dmu.setShared3Logsum(shared3Logsum); - - } else - { // if 3+ person party, solve the shared 3+ logsums - - shared3Model.computeUtilities(dmu, dmu.getDmuIndex()); - double shared3Logsum = shared3Model.getLogsum(); - dmu.setShared3Logsum(shared3Logsum); - - // add debug - if (party.getID() == 2) - { - String choiceModelDescription = ""; - String decisionMakerLabel = ""; - String loggingHeader = ""; - String separator = ""; - - choiceModelDescription = String.format( - "Airport Mode Choice Model for: Purpose=%s, OrigMGRA=%d, DestMGRA=%d", - party.getPurpose(), party.getOriginMGRA(), party.getDestinationMGRA()); - decisionMakerLabel = String.format("partyID=%d, partySize=%d, purpose=%s, direction=%d", - party.getID(), party.getSize(), - party.getPurpose(), party.getDirection()); - loggingHeader = String.format("%s %s", choiceModelDescription, - decisionMakerLabel); - - logger.info(loggingHeader); - shared3Model.logUECResults(logger); - } - } - // always solve for the transit logsum - transitModel.computeUtilities(dmu, dmu.getDmuIndex()); - double transitLogsum = transitModel.getLogsum(); - dmu.setTransitLogsum(transitLogsum); -*/ // calculate access mode utility and choose access mode accessModel.computeUtilities(dmu, dmu.getDmuIndex()); int accessMode = accessModel.getChoiceResult(party.getRandom()); party.setArrivalMode((byte) accessMode); + // add debug + if (party.getID() == 2) + { + String choiceModelDescription = ""; + String decisionMakerLabel = ""; + String loggingHeader = ""; + String separator = ""; + + choiceModelDescription = String.format( + "Airport Mode Choice Model for: Purpose=%s, OrigMGRA=%d, DestMGRA=%d", + party.getPurpose(), party.getOriginMGRA(), party.getDestinationMGRA()); + decisionMakerLabel = String.format("partyID=%d, partySize=%d, purpose=%s, direction=%d", + party.getID(), party.getSize(), + party.getPurpose(), party.getDirection()); + loggingHeader = String.format("%s %s", choiceModelDescription, + decisionMakerLabel); + + logger.info(loggingHeader); + accessModel.logUECResults(logger); + } + // choose trip mode int tripMode = 0; int occupancy = AirportModelStructure.getOccupancy(accessMode, party.getSize()); diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 9268c2872..873a28166 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -12,7 +12,6 @@ import org.sandag.abm.accessibilities.WalkTransitDriveSkimsCalculator; import org.sandag.abm.accessibilities.WalkTransitWalkSkimsCalculator; import org.sandag.abm.common.ConditionalDMU; -//import org.sandag.abm.modechoice.MgraDataManager; import org.sandag.abm.modechoice.Modes; import com.pb.common.calculator.IndexValues; @@ -23,7 +22,6 @@ public class AirportModelDMU implements Serializable, VariableTable { protected IndexValues dmuIndex; -// private MgraDataManager mgraManager; private AirportParty airportParty; private double[][] sizeTerms; // dimensioned @@ -95,25 +93,6 @@ public class AirportModelDMU private int nonAirportMgra; private int direction; - public int getNonAirportMgra() { - return nonAirportMgra; - } - - public void setNonAirportMgra(int nonAirportMgra) { - this.nonAirportMgra = nonAirportMgra; - } -/* public int getAirportMgra() { - return airportMgra; - } - - public void setAirportMgra(int airportMgra) { - this.airportMgra = airportMgra; - } -*/ - public void setDirection(int direction) { - this.direction = direction; - } - // estimation file defines time periods as: // 1 | Early AM: 3:00 AM - 5:59 AM | // 2 | AM Peak: 6:00 AM - 8:59 AM | @@ -172,47 +151,7 @@ public void setDirection(int direction) { private double shared2Logsum; private double shared3Logsum; private double transitLogsum; -/* - private double ParkLoc1DriveAloneLogsum; - private double ParkLoc1Shared2Logsum; - private double ParkLoc1Shared3Logsum; - private double ParkLoc2DriveAloneLogsum; - private double ParkLoc2Shared2Logsum; - private double ParkLoc2Shared3Logsum; - private double ParkLoc3DriveAloneLogsum; - private double ParkLoc3Shared2Logsum; - private double ParkLoc3Shared3Logsum; - private double ParkLoc4DriveAloneLogsum; - private double ParkLoc4Shared2Logsum; - private double ParkLoc4Shared3Logsum; - private double ParkLoc5DriveAloneLogsum; - private double ParkLoc5Shared2Logsum; - private double ParkLoc5Shared3Logsum; - private double ParkESCShared2Logsum; - private double ParkESCShared3Logsum; - private double RentalDriveAloneLogsum; - private double RentalShared2Logsum; - private double RentalShared3Logsum; - private double ShuttleVanShared2Logsum; - private double ShuttleVanShared3Logsum; - private double HotelCourtesyShared2Logsum; - private double HotelCourtesyShared3Logsum; - private double RideHailingLoc1Shared2Logsum; - private double RideHailingLoc1Shared3Logsum; - private double RideHailingLoc2Shared2Logsum; - private double RideHailingLoc2Shared3Logsum; - private double TransitLogsum; - private double CurbLoc1Shared2Logsum; - private double CurbLoc1Shared3Logsum; - private double CurbLoc2Shared2Logsum; - private double CurbLoc2Shared3Logsum; - private double CurbLoc3Shared2Logsum; - private double CurbLoc3Shared3Logsum; - private double CurbLoc4Shared2Logsum; - private double CurbLoc4Shared3Logsum; - private double CurbLoc5Shared2Logsum; - private double CurbLoc5Shared3Logsum; -*/ + protected double[][][] transitSkim = new double[NUM_ACC_EGR][NUM_LOC_PREM][NUM_SKIMS]; protected Logger _logger = null; @@ -221,39 +160,8 @@ public void setDirection(int direction) { public int maxMgra; - public void setMaxMgra(int maxMgra) { - this.maxMgra = maxMgra; - } - - public HashMap mode_mgra_map = new HashMap(); - public HashMap mgra_index_map = new HashMap(); - - public void setModeMgraMap(HashMap modeMgraMap){ - mode_mgra_map = modeMgraMap; - } - - public void setMgraIndexMap(){ - Integer[] mgraValueArray = mode_mgra_map.values().toArray(new Integer[0]); - - //mgra_index_map.put(2997, 0); - - Set uniqueMgraValues = new TreeSet(); - uniqueMgraValues.addAll(Arrays.asList(mgraValueArray)); - - //Integer[] uniqueMgraValueArray = new Integer[uniqueMgraValues.size()]; - //uniqueMgraValues.toArray(uniqueMgraValueArray); - - Integer[] uniqueMgraValueArray = uniqueMgraValues.toArray(new Integer[0]); - - for (int i = 0; i < uniqueMgraValueArray.length; i++){ - mgra_index_map.put(uniqueMgraValueArray[i], i); - } - } - - public void setTravelTimeArraySize(){ - NUM_A_MGRA = mgra_index_map.size(); - travel_time = new double[maxMgra + 1][NUM_A_MGRA][NUM_DIR][NUM_LOS]; - } + public HashMap mode_mgra_map = new HashMap(); + public HashMap mgra_index_map = new HashMap(); public AirportModelDMU(Logger logger) { @@ -467,6 +375,44 @@ public void setDmuSkimCalculators(WalkTransitWalkSkimsCalculator myWtw, dtw = myDtw; } + public int getNonAirportMgra() { + return nonAirportMgra; + } + + public void setNonAirportMgra(int nonAirportMgra) { + this.nonAirportMgra = nonAirportMgra; + } + + public void setDirection(int direction) { + this.direction = direction; + } + + public void setMaxMgra(int maxMgra) { + this.maxMgra = maxMgra; + } + + public void setModeMgraMap(HashMap modeMgraMap){ + mode_mgra_map = modeMgraMap; + } + + public void setMgraIndexMap(){ + Integer[] mgraValueArray = mode_mgra_map.values().toArray(new Integer[0]); + + Set uniqueMgraValues = new TreeSet(); + uniqueMgraValues.addAll(Arrays.asList(mgraValueArray)); + + Integer[] uniqueMgraValueArray = uniqueMgraValues.toArray(new Integer[0]); + + for (int i = 0; i < uniqueMgraValueArray.length; i++){ + mgra_index_map.put(uniqueMgraValueArray[i], i); + } + } + + public void setTravelTimeArraySize(){ + NUM_A_MGRA = mgra_index_map.size(); + travel_time = new double[maxMgra + 1][NUM_A_MGRA][NUM_DIR][NUM_LOS]; + } + /** * Set the mode travel time array value for the access/egress mode, line-haul * mode, LOS component @@ -505,360 +451,7 @@ protected double getModeTravelTime(int nonAirportMgra, int airportMgra, int dire { return travel_time[nonAirportMgra][airportMgra][direction][los]; } - -/* - protected void setParkLoc1DriveAloneLogsum(int nonAirportMgra, int airportMgra, int direction, int los) - { - double travelTime = getModeTravelTime(nonAirportMgra, airportMgra, direction, los); - this.ParkLoc1DriveAloneLogsum = travelTime; - } - - protected void setParkLoc1DriveAloneLogsum(double ParkLoc1DriveAloneLogsum) - { - this.ParkLoc1DriveAloneLogsum = ParkLoc1DriveAloneLogsum; - } - - protected void setParkLoc1Shared2Logsum(double ParkLoc1Shared2Logsum) - { - this.ParkLoc1Shared2Logsum = ParkLoc1Shared2Logsum; - } - - protected void setParkLoc1Shared3Logsum(double ParkLoc1Shared3Logsum) - { - this.ParkLoc1Shared3Logsum = ParkLoc1Shared3Logsum; - } - - protected void setParkLoc2DriveAloneLogsum(double ParkLoc2DriveAloneLogsum) - { - this.ParkLoc2DriveAloneLogsum = ParkLoc2DriveAloneLogsum; - } - - protected void setParkLoc2Shared2Logsum(double ParkLoc2Shared2Logsum) - { - this.ParkLoc2Shared2Logsum = ParkLoc2Shared2Logsum; - } - - protected void setParkLoc2Shared3Logsum(double ParkLoc2Shared3Logsum) - { - this.ParkLoc2Shared3Logsum = ParkLoc2Shared3Logsum; - } - protected void setParkLoc3DriveAloneLogsum(double ParkLoc3DriveAloneLogsum) - { - this.ParkLoc3DriveAloneLogsum = ParkLoc3DriveAloneLogsum; - } - - protected void setParkLoc3Shared2Logsum(double ParkLoc3Shared2Logsum) - { - this.ParkLoc3Shared2Logsum = ParkLoc3Shared2Logsum; - } - - protected void setParkLoc3Shared3Logsum(double ParkLoc3Shared3Logsum) - { - this.ParkLoc3Shared3Logsum = ParkLoc3Shared3Logsum; - } - - protected void setParkLoc4DriveAloneLogsum(double ParkLoc4DriveAloneLogsum) - { - this.ParkLoc4DriveAloneLogsum = ParkLoc4DriveAloneLogsum; - } - - protected void setParkLoc4Shared2Logsum(double ParkLoc4Shared2Logsum) - { - this.ParkLoc4Shared2Logsum = ParkLoc4Shared2Logsum; - } - - protected void setParkLoc4Shared3Logsum(double ParkLoc4Shared3Logsum) - { - this.ParkLoc4Shared3Logsum = ParkLoc4Shared3Logsum; - } - - protected void setParkLoc5DriveAloneLogsum(double ParkLoc5DriveAloneLogsum) - { - this.ParkLoc5DriveAloneLogsum = ParkLoc5DriveAloneLogsum; - } - - protected void setParkLoc5Shared2Logsum(double ParkLoc5Shared2Logsum) - { - this.ParkLoc5Shared2Logsum = ParkLoc5Shared2Logsum; - } - - protected void setParkLoc5Shared3Logsum(double ParkLoc5Shared3Logsum) - { - this.ParkLoc5Shared3Logsum = ParkLoc5Shared3Logsum; - } - - protected void setParkESCShared2Logsum(double ParkESCShared2Logsum) - { - this.ParkESCShared2Logsum = ParkESCShared2Logsum; - } - - protected void setParkESCShared3Logsum(double ParkESCShared3Logsum) - { - this.ParkESCShared3Logsum = ParkESCShared3Logsum; - } - - protected void setRentalDriveAloneLogsum(double RentalDriveAloneLogsum) - { - this.RentalDriveAloneLogsum = RentalDriveAloneLogsum; - } - - protected void setRentalShared2Logsum(double RentalShared2Logsum) - { - this.RentalShared2Logsum = RentalShared2Logsum; - } - - protected void setRentalShared3Logsum(double RentalShared3Logsum) - { - this.RentalShared3Logsum = RentalShared3Logsum; - } - protected void setShuttleVanShared2Logsum(double ShuttleVanShared2Logsum) - { - this.ShuttleVanShared2Logsum = ShuttleVanShared2Logsum; - } - - protected void setShuttleVanShared3Logsum(double ShuttleVanShared3Logsum) - { - this.ShuttleVanShared3Logsum = ShuttleVanShared3Logsum; - } - - protected void setHotelCourtesyShared2Logsum(double HotelCourtesyShared2Logsum) - { - this.HotelCourtesyShared2Logsum = HotelCourtesyShared2Logsum; - } - - protected void setHotelCourtesyShared3Logsum(double HotelCourtesyShared3Logsum) - { - this.HotelCourtesyShared3Logsum = HotelCourtesyShared3Logsum; - } - - protected void setRideHailingLoc1Shared2Logsum(double RideHailingLoc1Shared2Logsum) - { - this.RideHailingLoc1Shared2Logsum = RideHailingLoc1Shared2Logsum; - } - - protected void setRideHailingLoc1Shared3Logsum(double RideHailingLoc1Shared3Logsum) - { - this.RideHailingLoc1Shared3Logsum = RideHailingLoc1Shared3Logsum; - } - - protected void setRideHailingLoc2Shared2Logsum(double RideHailingLoc2Shared2Logsum) - { - this.RideHailingLoc2Shared2Logsum = RideHailingLoc2Shared2Logsum; - } - - protected void setRideHailingLoc2Shared3Logsum(double RideHailingLoc2Shared3Logsum) - { - this.RideHailingLoc2Shared3Logsum = RideHailingLoc2Shared3Logsum; - } - - protected void setTransitLogsum(double TransitLogsum) - { - this.TransitLogsum = TransitLogsum; - } - - protected void setCurbLoc1Shared2Logsum(double CurbLoc1Shared2Logsum) - { - this.CurbLoc1Shared2Logsum = CurbLoc1Shared2Logsum; - } - - protected void setCurbLoc1Shared3Logsum(double CurbLoc1Shared3Logsum) - { - this.CurbLoc1Shared3Logsum = CurbLoc1Shared3Logsum; - } - - protected void setCurbLoc2Shared2Logsum(double CurbLoc2Shared2Logsum) - { - this.CurbLoc2Shared2Logsum = CurbLoc2Shared2Logsum; - } - - protected void setCurbLoc2Shared3Logsum(double CurbLoc2Shared3Logsum) - { - this.CurbLoc2Shared3Logsum = CurbLoc2Shared3Logsum; - } - - protected void setCurbLoc3Shared2Logsum(double CurbLoc3Shared2Logsum) - { - this.CurbLoc3Shared2Logsum = CurbLoc3Shared2Logsum; - } - - protected void setCurbLoc3Shared3Logsum(double CurbLoc3Shared3Logsum) - { - this.CurbLoc3Shared3Logsum = CurbLoc3Shared3Logsum; - } - - protected void setCurbLoc4Shared2Logsum(double CurbLoc4Shared2Logsum) - { - this.CurbLoc4Shared2Logsum = CurbLoc4Shared2Logsum; - } - - protected void setCurbLoc4Shared3Logsum(double CurbLoc4Shared3Logsum) - { - this.CurbLoc4Shared3Logsum = CurbLoc4Shared3Logsum; - } - - protected void setCurbLoc5Shared2Logsum(double CurbLoc5Shared2Logsum) - { - this.CurbLoc5Shared2Logsum = CurbLoc5Shared2Logsum; - } - - protected void setCurbLoc5Shared3Logsum(double CurbLoc5Shared3Logsum) - { - this.CurbLoc5Shared3Logsum = CurbLoc5Shared3Logsum; - } -*/ - -/* - public double getParkLoc1Shared2Logsum() { - return ParkLoc1Shared2Logsum; - } - - public double getParkLoc1Shared3Logsum() { - return ParkLoc1Shared3Logsum; - //return travel_time[nonAirportMgra][airportMgra][direction][2]; - } - - public double getParkLoc2DriveAloneLogsum() { - return ParkLoc2DriveAloneLogsum; - } - - public double getParkLoc2Shared2Logsum() { - return ParkLoc2Shared2Logsum; - } - - public double getParkLoc2Shared3Logsum() { - return ParkLoc2Shared3Logsum; - } - - public double getParkLoc3DriveAloneLogsum() { - return ParkLoc3DriveAloneLogsum; - } - - public double getParkLoc3Shared2Logsum() { - return ParkLoc3Shared2Logsum; - } - - public double getParkLoc3Shared3Logsum() { - return ParkLoc3Shared3Logsum; - } - - public double getParkLoc4DriveAloneLogsum() { - return ParkLoc4DriveAloneLogsum; - } - - public double getParkLoc4Shared2Logsum() { - return ParkLoc4Shared2Logsum; - } - - public double getParkLoc4Shared3Logsum() { - return ParkLoc4Shared3Logsum; - } - - public double getParkLoc5DriveAloneLogsum() { - return ParkLoc5DriveAloneLogsum; - } - - public double getParkLoc5Shared2Logsum() { - return ParkLoc5Shared2Logsum; - } - - public double getParkLoc5Shared3Logsum() { - return ParkLoc5Shared3Logsum; - } - - public double getParkESCShared2Logsum() { - return ParkESCShared2Logsum; - } - - public double getParkESCShared3Logsum() { - return ParkESCShared3Logsum; - } - - public double getRentalDriveAloneLogsum() { - return RentalDriveAloneLogsum; - } - - public double getRentalShared2Logsum() { - return RentalShared2Logsum; - } - - public double getRentalShared3Logsum() { - return RentalShared3Logsum; - } - - public double getShuttleVanShared2Logsum() { - return ShuttleVanShared2Logsum; - } - - public double getShuttleVanShared3Logsum() { - return ShuttleVanShared3Logsum; - } - - public double getHotelCourtesyShared2Logsum() { - return HotelCourtesyShared2Logsum; - } - - public double getHotelCourtesyShared3Logsum() { - return HotelCourtesyShared3Logsum; - } - - public double getRideHailingLoc1Shared2Logsum() { - return RideHailingLoc1Shared2Logsum; - } - - public double getRideHailingLoc1Shared3Logsum() { - return RideHailingLoc1Shared3Logsum; - } - - public double getRideHailingLoc2Shared2Logsum() { - return RideHailingLoc2Shared2Logsum; - } - - public double getRideHailingLoc2Shared3Logsum() { - return RideHailingLoc2Shared3Logsum; - } - - public double getCurbLoc1Shared2Logsum() { - return CurbLoc1Shared2Logsum; - } - - public double getCurbLoc1Shared3Logsum() { - return CurbLoc1Shared3Logsum; - } - - public double getCurbLoc2Shared2Logsum() { - return CurbLoc2Shared2Logsum; - } - - public double getCurbLoc2Shared3Logsum() { - return CurbLoc2Shared3Logsum; - } - - public double getCurbLoc3Shared2Logsum() { - return CurbLoc3Shared2Logsum; - } - - public double getCurbLoc3Shared3Logsum() { - return CurbLoc3Shared3Logsum; - } - - public double getCurbLoc4Shared2Logsum() { - return CurbLoc4Shared2Logsum; - } - - public double getCurbLoc4Shared3Logsum() { - return CurbLoc4Shared3Logsum; - } - - public double getCurbLoc5Shared2Logsum() { - return CurbLoc5Shared2Logsum; - } - - public double getCurbLoc5Shared3Logsum() { - return CurbLoc5Shared3Logsum; - } -*/ - public double getParkLoc1DriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); @@ -1092,6 +685,7 @@ public double getCurbLoc5Shared3Logsum() int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; } + /** * Set the transit skim array value for the access/egress mode, line-haul * mode, LOS component From 695ca0ff1ddd0f7b04ee77cfb807156a0b221eb3 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Wed, 27 May 2020 11:16:33 -0400 Subject: [PATCH 05/18] travel time array uses airport mgra index --- .../abm/airport/AirportModeChoiceModel.java | 14 +- .../sandag/abm/airport/AirportModelDMU.java | 126 ++++++++++++------ 2 files changed, 89 insertions(+), 51 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index 1cb33fe47..df6a3d02d 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -259,11 +259,11 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) airportMgra_index = dmu.mgra_index_map.get(airportMgra); if (direction == 0){ //departure - accessOrigMgra = origMgra; + accessOrigMgra = nonAirportMgra; accessDestMgra = airportMgra; } else { //arrival accessOrigMgra = airportMgra; - accessOrigMgra = destMgra; + accessDestMgra = nonAirportMgra; } accessOrigTaz = mgraManager.getTaz(accessOrigMgra); @@ -272,27 +272,27 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) dmu.setDmuIndexValues(party.getID(), accessOrigTaz, accessDestTaz); // should this be access point Taz? for (int los = 0; los < AirportModelStructure.LOS_TYPE; los++){ - double travelTime = dmu.getModeTravelTime(nonAirportMgra, airportMgra, direction, los); + double travelTime = dmu.getModeTravelTime(nonAirportMgra, airportMgra_index, direction, los); if (travelTime == 0){ if (los == 0){ driveAloneModel[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); double driveAloneLogsum = driveAloneModel[airportMgra_index].getLogsum(); - dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, driveAloneLogsum); + dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, driveAloneLogsum); } else if (los == 1){ shared2Model[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); double shared2Logsum = shared2Model[airportMgra_index].getLogsum(); - dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, shared2Logsum); + dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, shared2Logsum); } else if (los == 2){ shared3Model[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); double shared3Logsum = shared3Model[airportMgra_index].getLogsum(); - dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, shared3Logsum); + dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, shared3Logsum); } else { transitModel.computeUtilities(dmu, dmu.getDmuIndex()); double transitLogsum = transitModel.getLogsum(); - dmu.setModeTravelTime(nonAirportMgra, airportMgra, direction, los, transitLogsum); + dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, transitLogsum); } } } diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 873a28166..5a57a5e0f 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -419,7 +419,7 @@ public void setTravelTimeArraySize(){ * * @param nonAirportMgra * Index for nonairport mgra - * @param airportMgra + * @param airportMgra_index * Index for airport Mgra * @param direction * The index for direction @@ -428,9 +428,9 @@ public void setTravelTimeArraySize(){ * @param value * The value to set in the array */ - protected void setModeTravelTime(int nonAirportMgra, int airportMgra, int direction, int los, double value) + protected void setModeTravelTime(int nonAirportMgra, int airportMgra_index, int direction, int los, double value) { - travel_time[nonAirportMgra][airportMgra][direction][los] = value; + travel_time[nonAirportMgra][airportMgra_index][direction][los] = value; } /** @@ -439,7 +439,7 @@ protected void setModeTravelTime(int nonAirportMgra, int airportMgra, int direct * * @param nonAirportMgra * Index for nonairport mgra - * @param airportMgra + * @param airportMgra_index * Index for airport Mgra * @param direction * The index for direction @@ -447,87 +447,100 @@ protected void setModeTravelTime(int nonAirportMgra, int airportMgra, int direct * The los type * @return The travel time value */ - protected double getModeTravelTime(int nonAirportMgra, int airportMgra, int direction, int los) + protected double getModeTravelTime(int nonAirportMgra, int airportMgra_index, int direction, int los) { - return travel_time[nonAirportMgra][airportMgra][direction][los]; + return travel_time[nonAirportMgra][airportMgra_index][direction][los]; } public double getParkLoc1DriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } public double getParkLoc1Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getParkLoc1Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getParkLoc2DriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } public double getParkLoc2Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getParkLoc2Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getParkLoc3DriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } public double getParkLoc3Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getParkLoc3Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getParkLoc4DriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } public double getParkLoc4Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getParkLoc4Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getParkLoc5DriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } public double getParkLoc5Shared2Logsum() @@ -539,151 +552,176 @@ public double getParkLoc5Shared2Logsum() public double getParkLoc5Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getParkESCShared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_ESC); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getParkESCShared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_ESC); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getRentalDriveAloneLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.DA]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } public double getRentalShared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getRentalShared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getShuttleVanShared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getShuttleVanShared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getHotelCourtesyShared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getHotelCourtesyShared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getRideHailingLoc1Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getRideHailingLoc1Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getRideHailingLoc2Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getRideHailingLoc2Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getTransitLogsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.TRANSIT); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.Transit]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.Transit]; } public double getCurbLoc1Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getCurbLoc1Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC1); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getCurbLoc2Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getCurbLoc2Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC2); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getCurbLoc3Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC3); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getCurbLoc3Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC3); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getCurbLoc4Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC4); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getCurbLoc4Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC4); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getCurbLoc5Shared2Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getCurbLoc5Shared3Logsum() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR3]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } /** From 2a72e39840b7fb4f15e0578a005ae7b7d78c69b3 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Tue, 2 Jun 2020 16:29:20 -0400 Subject: [PATCH 06/18] incorporate new UEC --- .../abm/airport/AirportModeChoiceModel.java | 58 ++++- .../org/sandag/abm/airport/AirportModel.java | 2 +- .../sandag/abm/airport/AirportModelDMU.java | 201 +++++++++++------- .../sandag/abm/airport/AirportTripTables.java | 7 +- 4 files changed, 176 insertions(+), 92 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index df6a3d02d..5ea7cbe7a 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -29,6 +29,7 @@ public class AirportModeChoiceModel private ChoiceModelApplication transitModel; private ChoiceModelApplication accessModel; private ChoiceModelApplication mgraModel; + private ChoiceModelApplication rideHailModel; private Tracer tracer; private boolean trace; @@ -78,6 +79,8 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf "airport.mc.accessMode.page")); int mgraPage = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, "airport.mc.mgra.page")); + int rideHailPage = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, + "airport.mc.ridehail.page")); logger.info("Creating Airport Model Mode Choice Application UECs"); @@ -88,10 +91,6 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf int maxMgra = mgraManager.getMaxMgra(); dmu.setMaxMgra(maxMgra); - // fake choice model to get airport access MGRA input - mgraModel = new ChoiceModelApplication(airportModeUecFileName, mgraPage, dataPage, - rbMap, (VariableTable) dmu); - // create ChoiceModelApplication objects for each airport mgra driveAloneModel = new ChoiceModelApplication[5]; shared2Model = new ChoiceModelApplication[5]; @@ -109,6 +108,13 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf rbMap, (VariableTable) dmu); } + // fake choice model to get airport access MGRA input + mgraModel = new ChoiceModelApplication(airportModeUecFileName, mgraPage, dataPage, + rbMap, (VariableTable) dmu); + + rideHailModel = new ChoiceModelApplication(airportModeUecFileName, rideHailPage, dataPage, + rbMap, (VariableTable) dmu); + // create a ChoiceModelApplication object for transit mode choice transitModel = new ChoiceModelApplication(airportModeUecFileName, transitPage, dataPage, rbMap, (VariableTable) dmu); @@ -253,11 +259,17 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) // Solve trip mode level utilities - for (int mode = 1; mode <= AirportModelStructure.ACCESS_MODES; mode++){ + for (int mode = 1; mode <= AirportModelStructure.ACCESS_MODES; mode++) + { airportMgra = dmu.mode_mgra_map.get(mode); //dmu.setAirportMgra(airportMgra); airportMgra_index = dmu.mgra_index_map.get(airportMgra); + if (airportMgra == -999) + { + continue; + } + if (direction == 0){ //departure accessOrigMgra = nonAirportMgra; accessDestMgra = airportMgra; @@ -271,20 +283,22 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) dmu.setDmuIndexValues(party.getID(), accessOrigTaz, accessDestTaz); // should this be access point Taz? - for (int los = 0; los < AirportModelStructure.LOS_TYPE; los++){ + for (int los = 0; los < AirportModelStructure.LOS_TYPE; los++) + { double travelTime = dmu.getModeTravelTime(nonAirportMgra, airportMgra_index, direction, los); - if (travelTime == 0){ - if (los == 0){ + if (travelTime == 0) + { + if (los == AirportModelStructure.DA){ driveAloneModel[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); double driveAloneLogsum = driveAloneModel[airportMgra_index].getLogsum(); dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, driveAloneLogsum); } - else if (los == 1){ + else if (los == AirportModelStructure.SR2){ shared2Model[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); double shared2Logsum = shared2Model[airportMgra_index].getLogsum(); dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, shared2Logsum); } - else if (los == 2){ + else if (los == AirportModelStructure.SR3){ shared3Model[airportMgra_index].computeUtilities(dmu, dmu.getDmuIndex()); double shared3Logsum = shared3Model[airportMgra_index].getLogsum(); dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, shared3Logsum); @@ -296,6 +310,20 @@ else if (los == 2){ } } } + + if (mode == AirportModelStructure.RIDEHAILING_LOC1) + { + rideHailModel.computeUtilities(dmu, dmu.getDmuIndex()); + dmu.setRidehailTravelDistanceLocation1(rideHailModel.getUtilities()[1]); + dmu.setRidehailTravelTimeLocation1(rideHailModel.getUtilities()[0]); + } + + if (mode == AirportModelStructure.RIDEHAILING_LOC2) + { + rideHailModel.computeUtilities(dmu, dmu.getDmuIndex()); + dmu.setRidehailTravelDistanceLocation2(rideHailModel.getUtilities()[1]); + dmu.setRidehailTravelTimeLocation2(rideHailModel.getUtilities()[0]); + } } // calculate access mode utility and choose access mode @@ -363,10 +391,18 @@ else if (los == 2){ * @param dmuFactory * A DMU Factory. */ - public void chooseModes(AirportParty[] airportParties, AirportDmuFactoryIf dmuFactory) + public void chooseModes(HashMap rbMap, AirportParty[] airportParties, AirportDmuFactoryIf dmuFactory) { + this.rbMap = rbMap; + tazManager = TazDataManager.getInstance(rbMap); + mgraManager = MgraDataManager.getInstance(rbMap); + AirportModelDMU dmu = dmuFactory.getAirportModelDMU(); + + int maxMgra = mgraManager.getMaxMgra(); + dmu.setMaxMgra(maxMgra); + solveModeMgra(dmu); // iterate through the array, choosing mgras and setting them for (AirportParty party : airportParties) diff --git a/src/main/java/org/sandag/abm/airport/AirportModel.java b/src/main/java/org/sandag/abm/airport/AirportModel.java index 78d58d623..bb0ffae22 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModel.java @@ -60,7 +60,7 @@ public void runModel() AirportModeChoiceModel modeChoiceModel = new AirportModeChoiceModel(rbMap, dmuFactory); modeChoiceModel.initializeBestPathCalculators(); - modeChoiceModel.chooseModes(parties, dmuFactory); + modeChoiceModel.chooseModes(rbMap, parties, dmuFactory); apm.writeOutputFile(rbMap); diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 5a57a5e0f..266be9119 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -151,8 +151,13 @@ public class AirportModelDMU private double shared2Logsum; private double shared3Logsum; private double transitLogsum; + + private double ridehailTravelDistanceLocation1; + private double ridehailTravelDistanceLocation2; + private double ridehailTravelTimeLocation1; + private double ridehailTravelTimeLocation2; - protected double[][][] transitSkim = new double[NUM_ACC_EGR][NUM_LOC_PREM][NUM_SKIMS]; + protected double[][][] transitSkim = new double[NUM_ACC_EGR][NUM_LOC_PREM][NUM_SKIMS]; protected Logger _logger = null; @@ -302,45 +307,49 @@ private void setupMethodIndexMap() methodIndexMap.put("getDt_cr_fare", 203); methodIndexMap.put("getDt_cr_xfers", 204); - methodIndexMap.put("getParkLoc1DriveAloneLogsum", 900); - methodIndexMap.put("getParkLoc1Shared2Logsum", 901); - methodIndexMap.put("getParkLoc1Shared3Logsum", 902); - methodIndexMap.put("getParkLoc2DriveAloneLogsum", 903); - methodIndexMap.put("getParkLoc2Shared2Logsum", 904); - methodIndexMap.put("getParkLoc2Shared3Logsum", 905); - methodIndexMap.put("getParkLoc3DriveAloneLogsum", 906); - methodIndexMap.put("getParkLoc3Shared2Logsum", 907); - methodIndexMap.put("getParkLoc3Shared3Logsum", 908); - methodIndexMap.put("getParkLoc4DriveAloneLogsum", 909); - methodIndexMap.put("getParkLoc4Shared2Logsum", 910); - methodIndexMap.put("getParkLoc4Shared3Logsum", 911); - methodIndexMap.put("getParkLoc5DriveAloneLogsum", 912); - methodIndexMap.put("getParkLoc5Shared2Logsum", 913); - methodIndexMap.put("getParkLoc5Shared3Logsum", 914); - methodIndexMap.put("getParkESCShared2Logsum", 915); - methodIndexMap.put("getParkESCShared3Logsum", 916); - methodIndexMap.put("getRentalDriveAloneLogsum", 917); - methodIndexMap.put("getRentalShared2Logsum", 918); - methodIndexMap.put("getRentalShared3Logsum", 919); - methodIndexMap.put("getShuttleVanShared2Logsum", 920); - methodIndexMap.put("getShuttleVanShared3Logsum", 921); - methodIndexMap.put("getHotelCourtesyShared2Logsum", 922); - methodIndexMap.put("getHotelCourtesyShared3Logsum", 923); - methodIndexMap.put("getRideHailingLoc1Shared2Logsum", 924); - methodIndexMap.put("getRideHailingLoc1Shared3Logsum", 925); - methodIndexMap.put("getRideHailingLoc2Shared2Logsum", 926); - methodIndexMap.put("getRideHailingLoc2Shared3Logsum", 927); - methodIndexMap.put("getTransitLogsum", 928); - methodIndexMap.put("getCurbLoc1Shared2Logsum", 929); - methodIndexMap.put("getCurbLoc1Shared3Logsum", 930); - methodIndexMap.put("getCurbLoc2Shared2Logsum", 931); - methodIndexMap.put("getCurbLoc2Shared3Logsum", 932); - methodIndexMap.put("getCurbLoc3Shared2Logsum", 933); - methodIndexMap.put("getCurbLoc3Shared3Logsum", 934); - methodIndexMap.put("getCurbLoc4Shared2Logsum", 935); - methodIndexMap.put("getCurbLoc4Shared3Logsum", 936); - methodIndexMap.put("getCurbLoc5Shared2Logsum", 937); - methodIndexMap.put("getCurbLoc5Shared3Logsum", 938); + methodIndexMap.put("getDriveAloneLogsumParkLocation1", 20); + methodIndexMap.put("getShared2LogsumParkLocation1", 21); + methodIndexMap.put("getShared3LogsumParkLocation1", 22); + methodIndexMap.put("getDriveAloneLogsumParkLocation2", 23); + methodIndexMap.put("getShared2LogsumParkLocation2", 24); + methodIndexMap.put("getShared3LogsumParkLocation2", 25); + methodIndexMap.put("getDriveAloneLogsumParkLocation3", 26); + methodIndexMap.put("getShared2LogsumParkLocation3", 27); + methodIndexMap.put("getShared3LogsumParkLocation3", 28); + methodIndexMap.put("getDriveAloneLogsumParkLocation4", 29); + methodIndexMap.put("getShared2LogsumParkLocation4", 30); + methodIndexMap.put("getShared3LogsumParkLocation4", 31); + methodIndexMap.put("getDriveAloneLogsumParkLocation5", 32); + methodIndexMap.put("getShared2LogsumParkLocation5", 33); + methodIndexMap.put("getShared3LogsumParkLocation5", 34); + methodIndexMap.put("getShared2LogsumParkEscort", 35); + methodIndexMap.put("getShared3LogsumParkEscort", 36); + methodIndexMap.put("getDriveAloneLogsumRental", 37); + methodIndexMap.put("getShared2LogsumRental", 38); + methodIndexMap.put("getShared3LogsumRental", 39); + methodIndexMap.put("getShared2LogsumHotelOrShuttleTerminal", 40); + methodIndexMap.put("getShared3LogsumHotelOrShuttleTerminal", 41); + methodIndexMap.put("getShared2LogsumHotelOrShuttleCentralMobilityHub", 42); + methodIndexMap.put("getShared3LogsumHotelOrShuttleCentralMobilityHub", 43); + methodIndexMap.put("getShared2LogsumRidehailLocation1", 44); + methodIndexMap.put("getShared3LogsumRidehailLocation1", 45); + methodIndexMap.put("getShared2LogsumRidehailLocation2", 46); + methodIndexMap.put("getShared3LogsumRidehailLocation2", 47); + methodIndexMap.put("getTransitLogsum", 48); + methodIndexMap.put("getShared2LogsumCurbLocation1", 49); + methodIndexMap.put("getShared3LogsumCurbLocation1", 50); + methodIndexMap.put("getShared2LogsumCurbLocation2", 51); + methodIndexMap.put("getShared3LogsumCurbLocation2", 52); + methodIndexMap.put("getShared2LogsumCurbLocation3", 53); + methodIndexMap.put("getShared3LogsumCurbLocation3", 54); + methodIndexMap.put("getShared2LogsumCurbLocation4", 55); + methodIndexMap.put("getShared3LogsumCurbLocation4", 56); + methodIndexMap.put("getShared2LogsumCurbLocation5", 57); + methodIndexMap.put("getShared3LogsumCurbLocation5", 58); + methodIndexMap.put("getRidehailTravelDistanceLocation1", 59); + methodIndexMap.put("getRidehailTravelDistanceLocation2", 60); + methodIndexMap.put("getRidehailTravelTimeLocation1", 61); + methodIndexMap.put("getRidehailTravelTimeLocation2", 62); CreateReverseMap(); } @@ -452,195 +461,195 @@ protected double getModeTravelTime(int nonAirportMgra, int airportMgra_index, in return travel_time[nonAirportMgra][airportMgra_index][direction][los]; } - public double getParkLoc1DriveAloneLogsum() + public double getDriveAloneLogsumParkLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } - public double getParkLoc1Shared2Logsum() + public double getShared2LogsumParkLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getParkLoc1Shared3Logsum() + public double getShared3LogsumParkLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getParkLoc2DriveAloneLogsum() + public double getDriveAloneLogsumParkLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } - public double getParkLoc2Shared2Logsum() + public double getShared2LogsumParkLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getParkLoc2Shared3Logsum() + public double getShared3LogsumParkLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getParkLoc3DriveAloneLogsum() + public double getDriveAloneLogsumParkLocation3() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } - public double getParkLoc3Shared2Logsum() + public double getShared2LogsumParkLocation3() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getParkLoc3Shared3Logsum() + public double getShared3LogsumParkLocation3() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC3); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getParkLoc4DriveAloneLogsum() + public double getDriveAloneLogsumParkLocation4() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } - public double getParkLoc4Shared2Logsum() + public double getShared2LogsumParkLocation4() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getParkLoc4Shared3Logsum() + public double getShared3LogsumParkLocation4() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC4); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getParkLoc5DriveAloneLogsum() + public double getDriveAloneLogsumParkLocation5() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } - public double getParkLoc5Shared2Logsum() + public double getShared2LogsumParkLocation5() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; } - public double getParkLoc5Shared3Logsum() + public double getShared3LogsumParkLocation5() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getParkESCShared2Logsum() + public double getShared2LogsumParkEscort() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_ESC); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getParkESCShared3Logsum() + public double getShared3LogsumParkEscort() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_ESC); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getRentalDriveAloneLogsum() + public double getDriveAloneLogsumRental() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.DA]; } - public double getRentalShared2Logsum() + public double getShared2LogsumRental() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getRentalShared3Logsum() + public double getShared3LogsumRental() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RENTAL); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getShuttleVanShared2Logsum() + public double getShared2LogsumHotelOrShuttleTerminal() { int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getShuttleVanShared3Logsum() + public double getShared3LogsumHotelOrShuttleTerminal() { int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getHotelCourtesyShared2Logsum() + public double getShared2LogsumHotelOrShuttleCentralMobilityHub() { int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getHotelCourtesyShared3Logsum() + public double getShared3LogsumHotelOrShuttleCentralMobilityHub() { int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getRideHailingLoc1Shared2Logsum() + public double getShared2LogsumRidehailLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getRideHailingLoc1Shared3Logsum() + public double getShared3LogsumRidehailLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getRideHailingLoc2Shared2Logsum() + public double getShared2LogsumRidehailLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getRideHailingLoc2Shared3Logsum() + public double getShared3LogsumRidehailLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.RIDEHAILING_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); @@ -654,76 +663,112 @@ public double getTransitLogsum() return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.Transit]; } - public double getCurbLoc1Shared2Logsum() + public double getShared2LogsumCurbLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getCurbLoc1Shared3Logsum() + public double getShared3LogsumCurbLocation1() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC1); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getCurbLoc2Shared2Logsum() + public double getShared2LogsumCurbLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getCurbLoc2Shared3Logsum() + public double getShared3LogsumCurbLocation2() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC2); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getCurbLoc3Shared2Logsum() + public double getShared2LogsumCurbLocation3() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC3); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getCurbLoc3Shared3Logsum() + public double getShared3LogsumCurbLocation3() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC3); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getCurbLoc4Shared2Logsum() + public double getShared2LogsumCurbLocation4() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC4); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getCurbLoc4Shared3Logsum() + public double getShared3LogsumCurbLocation4() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC4); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } - public double getCurbLoc5Shared2Logsum() + public double getShared2LogsumCurbLocation5() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } - public double getCurbLoc5Shared3Logsum() + public double getShared3LogsumCurbLocation5() { int airportMgra = mode_mgra_map.get(AirportModelStructure.CURB_LOC5); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } + public void setRidehailTravelDistanceLocation1(double ridehailTravelDistance) + { + ridehailTravelDistanceLocation1 = ridehailTravelDistance; + } + + public void setRidehailTravelDistanceLocation2(double ridehailTravelDistance) + { + ridehailTravelDistanceLocation2 = ridehailTravelDistance; + } + + public void setRidehailTravelTimeLocation1(double ridehailTravelTime) + { + ridehailTravelTimeLocation1 = ridehailTravelTime; + } + + public void setRidehailTravelTimeLocation2(double ridehailTravelTime) + { + ridehailTravelTimeLocation2 = ridehailTravelTime; + } + + public double getRidehailTravelDistanceLocation1() { + return ridehailTravelDistanceLocation1; + } + + public double getRidehailTravelDistanceLocation2() { + return ridehailTravelDistanceLocation2; + } + + public double getRidehailTravelTimeLocation1() { + return ridehailTravelTimeLocation1; + } + + public double getRidehailTravelTimeLocation2() { + return ridehailTravelTimeLocation2; + } + /** * Set the transit skim array value for the access/egress mode, line-haul * mode, LOS component diff --git a/src/main/java/org/sandag/abm/airport/AirportTripTables.java b/src/main/java/org/sandag/abm/airport/AirportTripTables.java index b9cb4401d..bbe4b4b8e 100644 --- a/src/main/java/org/sandag/abm/airport/AirportTripTables.java +++ b/src/main/java/org/sandag/abm/airport/AirportTripTables.java @@ -393,8 +393,11 @@ public void processTrips(int timePeriod, TableDataSet tripData) // generate another drive-alone trip in the opposite direction for // pickup/dropoff - if (accMode == AirportModelStructure.PUDO_CURB - || accMode == AirportModelStructure.PUDO_CURB) + if (accMode == AirportModelStructure.CURB_LOC1 + || accMode == AirportModelStructure.CURB_LOC2 + || accMode == AirportModelStructure.CURB_LOC3 + || accMode == AirportModelStructure.CURB_LOC4 + || accMode == AirportModelStructure.CURB_LOC5) { mode = 0; // auto mode if (SandagModelStructure.getTripModeIsPay(tripMode)) // if the From ad4f9706d2f6d3629d3d38a00a4fb540f3efc50a Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Thu, 4 Jun 2020 10:27:17 -0400 Subject: [PATCH 07/18] first successful run - new model --- .../abm/airport/AirportModeChoiceModel.java | 28 ++++++++--- .../sandag/abm/airport/AirportModelDMU.java | 3 +- .../abm/airport/AirportModelStructure.java | 48 +++++++++---------- .../org/sandag/abm/airport/AirportParty.java | 12 ++++- .../abm/airport/AirportPartyManager.java | 4 +- 5 files changed, 61 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index 5ea7cbe7a..f48ef4c80 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -303,11 +303,11 @@ else if (los == AirportModelStructure.SR3){ double shared3Logsum = shared3Model[airportMgra_index].getLogsum(); dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, shared3Logsum); } - else { - transitModel.computeUtilities(dmu, dmu.getDmuIndex()); - double transitLogsum = transitModel.getLogsum(); - dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, transitLogsum); - } + // else { + // transitModel.computeUtilities(dmu, dmu.getDmuIndex()); + // double transitLogsum = transitModel.getLogsum(); + // dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, transitLogsum); + // } } } @@ -324,15 +324,24 @@ else if (los == AirportModelStructure.SR3){ dmu.setRidehailTravelDistanceLocation2(rideHailModel.getUtilities()[1]); dmu.setRidehailTravelTimeLocation2(rideHailModel.getUtilities()[0]); } + } + dmu.setDmuIndexValues(party.getID(), origTaz, destTaz); + transitModel.computeUtilities(dmu, dmu.getDmuIndex()); + double transitLogsum = transitModel.getLogsum(); + dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, AirportModelStructure.Transit, transitLogsum); + // calculate access mode utility and choose access mode accessModel.computeUtilities(dmu, dmu.getDmuIndex()); int accessMode = accessModel.getChoiceResult(party.getRandom()); party.setArrivalMode((byte) accessMode); + + int airportAccessMGRA = dmu.mode_mgra_map.get(accessMode); + party.setAirportAccessMGRA(airportAccessMGRA); // add debug - if (party.getID() == 2) + if (party.getID() == 5) { String choiceModelDescription = ""; String decisionMakerLabel = ""; @@ -349,7 +358,9 @@ else if (los == AirportModelStructure.SR3){ decisionMakerLabel); logger.info(loggingHeader); + driveAloneModel[2].logUECResults(logger); accessModel.logUECResults(logger); + transitModel.logUECResults(logger); } // choose trip mode @@ -410,6 +421,11 @@ public void chooseModes(HashMap rbMap, AirportParty[] airportPar int ID = party.getID(); + // if (ID != 56) + // { + // continue; + // } + if ((ID <= 5) || (ID % 100) == 0) logger.info("Choosing mode for party " + party.getID()); diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 266be9119..9503d03ce 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -555,7 +555,8 @@ public double getDriveAloneLogsumParkLocation5() public double getShared2LogsumParkLocation5() { int airportMgra = mode_mgra_map.get(AirportModelStructure.PARK_LOC5); - return travel_time[nonAirportMgra][airportMgra][direction][AirportModelStructure.SR2]; + int airportMgra_index = mgra_index_map.get(airportMgra); + return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getShared3LogsumParkLocation5() diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index 6f66be220..478f72004 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -29,32 +29,32 @@ public final class AirportModelStructure public static final int UPPER_PM = 29; public static final String[] MODEL_PERIOD_LABELS = {"EA", "AM", "MD", "PM", "EV"}; - public static final byte ACCESS_MODES = 17; - - public static final byte PARK_LOC1 = 1; - public static final byte PARK_LOC2 = 2; - public static final byte PARK_LOC3 = 3; - public static final byte PARK_LOC4 = 4; - public static final byte PARK_LOC5 = 5; - public static final byte PARK_ESC = 6; - public static final byte RENTAL = 7; - public static final byte SHUTTLE_VAN = 8; - public static final byte HOTEL_COURTESY = 9; - public static final byte RIDEHAILING_LOC1 = 10; - public static final byte RIDEHAILING_LOC2 = 11; - public static final byte TRANSIT = 12; - public static final byte CURB_LOC1 = 13; - public static final byte CURB_LOC2 = 14; - public static final byte CURB_LOC3 = 15; - public static final byte CURB_LOC4 = 16; - public static final byte CURB_LOC5 = 17; + public static final int ACCESS_MODES = 17; + + public static final int PARK_LOC1 = 1; + public static final int PARK_LOC2 = 2; + public static final int PARK_LOC3 = 3; + public static final int PARK_LOC4 = 4; + public static final int PARK_LOC5 = 5; + public static final int PARK_ESC = 6; + public static final int RENTAL = 7; + public static final int SHUTTLE_VAN = 8; + public static final int HOTEL_COURTESY = 9; + public static final int RIDEHAILING_LOC1 = 10; + public static final int RIDEHAILING_LOC2 = 11; + public static final int TRANSIT = 12; + public static final int CURB_LOC1 = 13; + public static final int CURB_LOC2 = 14; + public static final int CURB_LOC3 = 15; + public static final int CURB_LOC4 = 16; + public static final int CURB_LOC5 = 17; - public static final byte LOS_TYPE = 4; + public static final int LOS_TYPE = 4; - public static final byte DA = 0; - public static final byte SR2 = 1; - public static final byte SR3 = 2; - public static final byte Transit = 3; + public static final int DA = 0; + public static final int SR2 = 1; + public static final int SR3 = 2; + public static final int Transit = 3; private AirportModelStructure() diff --git a/src/main/java/org/sandag/abm/airport/AirportParty.java b/src/main/java/org/sandag/abm/airport/AirportParty.java index cb6df65b3..e355b131c 100644 --- a/src/main/java/org/sandag/abm/airport/AirportParty.java +++ b/src/main/java/org/sandag/abm/airport/AirportParty.java @@ -23,7 +23,9 @@ public class AirportParty // following variables chosen via choice models private int originMGRA; private int destinationMGRA; - private byte mode; + private int airportAccessMGRA; + + private byte mode; private byte arrivalMode; // best tap pairs for transit path; dimensioned by ride mode, then boarding @@ -162,6 +164,14 @@ public void setOriginMGRA(int originMGRA) { this.originMGRA = originMGRA; } + + public int getAirportAccessMGRA() { + return airportAccessMGRA; + } + + public void setAirportAccessMGRA(int airportAccessMGRA) { + this.airportAccessMGRA = airportAccessMGRA; + } /** * @return the trip mode diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index 69619696e..bc00aa03b 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -329,7 +329,7 @@ public void writeOutputFile(HashMap rbMap) throw new RuntimeException(); } String headerString = new String( - "id,direction,purpose,size,income,nights,departTime,originMGRA,destinationMGRA,tripMode,arrivalMode,boardingTAP,alightingTAP\n"); + "id,direction,purpose,size,income,nights,departTime,originMGRA,destinationMGRA,airportAccessMGRA,tripMode,arrivalMode,boardingTAP,alightingTAP\n"); writer.print(headerString); // Iterate through the array, printing records to the file @@ -342,7 +342,7 @@ public void writeOutputFile(HashMap rbMap) + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," - + parties[i].getDestinationMGRA() + "," + parties[i].getMode() + "," + + parties[i].getDestinationMGRA() + "," + parties[i].getAirportAccessMGRA() + "," + parties[i].getMode() + "," + parties[i].getArrivalMode() + "," + taps[0] + "," + taps[1] + "\n"); writer.print(record); } From b64c6072864b81ca2bfcf5b3c5d427006ac812db Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Wed, 10 Jun 2020 15:33:32 -0400 Subject: [PATCH 08/18] print connecting trips between access point and terminal --- .../abm/airport/AirportModeChoiceModel.java | 43 ++++---- .../abm/airport/AirportModelStructure.java | 12 +- .../abm/airport/AirportPartyManager.java | 103 ++++++++++++++++-- 3 files changed, 122 insertions(+), 36 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index f48ef4c80..14c9ec1c7 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -42,6 +42,9 @@ public class AirportModeChoiceModel protected WalkTransitWalkSkimsCalculator wtw; protected WalkTransitDriveSkimsCalculator wtd; protected DriveTransitWalkSkimsCalculator dtw; + + private boolean debugChoiceModel; + private int debugPartyID; /** * Constructor @@ -91,12 +94,18 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf int maxMgra = mgraManager.getMaxMgra(); dmu.setMaxMgra(maxMgra); + // fake choice model to get airport access MGRA input + mgraModel = new ChoiceModelApplication(airportModeUecFileName, mgraPage, dataPage, + rbMap, (VariableTable) dmu); + + solveModeMgra(dmu); + // create ChoiceModelApplication objects for each airport mgra - driveAloneModel = new ChoiceModelApplication[5]; - shared2Model = new ChoiceModelApplication[5]; - shared3Model = new ChoiceModelApplication[5]; + driveAloneModel = new ChoiceModelApplication[dmu.mgra_index_map.size()]; + shared2Model = new ChoiceModelApplication[dmu.mgra_index_map.size()]; + shared3Model = new ChoiceModelApplication[dmu.mgra_index_map.size()]; - for (int i = 0; i < 5; i++){ + for (int i = 0; i < dmu.mgra_index_map.size(); i++){ // create a ChoiceModelApplication object for drive-alone mode choice driveAloneModel[i] = new ChoiceModelApplication(airportModeUecFileName, daPage, dataPage, rbMap, (VariableTable) dmu); @@ -108,10 +117,6 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf rbMap, (VariableTable) dmu); } - // fake choice model to get airport access MGRA input - mgraModel = new ChoiceModelApplication(airportModeUecFileName, mgraPage, dataPage, - rbMap, (VariableTable) dmu); - rideHailModel = new ChoiceModelApplication(airportModeUecFileName, rideHailPage, dataPage, rbMap, (VariableTable) dmu); @@ -143,6 +148,10 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf } } seek = Util.getBooleanValueFromPropertyMap(rbMap, "Seek"); + + debugChoiceModel = Util.getBooleanValueFromPropertyMap(rbMap, "airport.debug"); + debugPartyID = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, + "airport.debug.party.id")); } @@ -170,7 +179,7 @@ public void initializeBestPathCalculators() /** * get access mode MGRA from UEC user input */ - public void solveModeMgra(AirportModelDMU dmu){ //question for Jim -- Do I need dmu index for this one? + public void solveModeMgra(AirportModelDMU dmu){ mgraModel.computeUtilities(dmu, dmu.getDmuIndex()); int modeCount = mgraModel.getNumberOfAlternatives(); @@ -254,7 +263,7 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) if (party.getDirection() == AirportModelStructure.ARRIVAL) inbound = true; dmu.setAirportParty(party); - //dmu.setDmuIndexValues(party.getID(), origTaz, destTaz); // should this be access point Taz? + dmu.setDmuSkimAttributes(origMgra, destMgra, period, inbound, debug); // Solve trip mode level utilities @@ -262,7 +271,7 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) for (int mode = 1; mode <= AirportModelStructure.ACCESS_MODES; mode++) { airportMgra = dmu.mode_mgra_map.get(mode); - //dmu.setAirportMgra(airportMgra); + airportMgra_index = dmu.mgra_index_map.get(airportMgra); if (airportMgra == -999) @@ -303,11 +312,6 @@ else if (los == AirportModelStructure.SR3){ double shared3Logsum = shared3Model[airportMgra_index].getLogsum(); dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, shared3Logsum); } - // else { - // transitModel.computeUtilities(dmu, dmu.getDmuIndex()); - // double transitLogsum = transitModel.getLogsum(); - // dmu.setModeTravelTime(nonAirportMgra, airportMgra_index, direction, los, transitLogsum); - // } } } @@ -341,7 +345,7 @@ else if (los == AirportModelStructure.SR3){ party.setAirportAccessMGRA(airportAccessMGRA); // add debug - if (party.getID() == 5) + if (debugChoiceModel & party.getID() == debugPartyID) { String choiceModelDescription = ""; String decisionMakerLabel = ""; @@ -420,11 +424,6 @@ public void chooseModes(HashMap rbMap, AirportParty[] airportPar { int ID = party.getID(); - - // if (ID != 56) - // { - // continue; - // } if ((ID <= 5) || (ID % 100) == 0) logger.info("Choosing mode for party " + party.getID()); diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index 478f72004..560efd15e 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -34,9 +34,9 @@ public final class AirportModelStructure public static final int PARK_LOC1 = 1; public static final int PARK_LOC2 = 2; public static final int PARK_LOC3 = 3; - public static final int PARK_LOC4 = 4; - public static final int PARK_LOC5 = 5; - public static final int PARK_ESC = 6; + public static final int PARK_LOC4 = 4; + public static final int PARK_LOC5 = 5; + public static final int PARK_ESC = 6; public static final int RENTAL = 7; public static final int SHUTTLE_VAN = 8; public static final int HOTEL_COURTESY = 9; @@ -52,9 +52,9 @@ public final class AirportModelStructure public static final int LOS_TYPE = 4; public static final int DA = 0; - public static final int SR2 = 1; - public static final int SR3 = 2; - public static final int Transit = 3; + public static final int SR2 = 1; + public static final int SR3 = 2; + public static final int Transit = 3; private AirportModelStructure() diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index bc00aa03b..e71717d31 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -27,6 +27,8 @@ public class AirportPartyManager private double[][] incomeDistribution; private double[][] departureDistribution; private double[][] arrivalDistribution; + + private int airportMgra; SandagModelStructure sandagStructure; @@ -73,6 +75,9 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) "airport.annualizationFactor")); float averageSize = new Float(Util.getStringValueFromPropertyMap(rbMap, "airport.averageSize")); + + airportMgra = Util.getIntegerValueFromPropertyMap(rbMap, + "airport.airportMgra"); float directPassengers = (enplanements - connectingPassengers) / annualFactor; int totalParties = (int) (directPassengers / averageSize) * 2; @@ -329,7 +334,7 @@ public void writeOutputFile(HashMap rbMap) throw new RuntimeException(); } String headerString = new String( - "id,direction,purpose,size,income,nights,departTime,originMGRA,destinationMGRA,airportAccessMGRA,tripMode,arrivalMode,boardingTAP,alightingTAP\n"); + "id,direction,purpose,size,income,nights,departTime,originMGRA,destinationMGRA,tripMode,arrivalMode,boardingTAP,alightingTAP\n"); writer.print(headerString); // Iterate through the array, printing records to the file @@ -337,14 +342,96 @@ public void writeOutputFile(HashMap rbMap) { int[] taps = getTapPair(parties[i]); + + int airportAccessMgra = parties[i].getAirportAccessMGRA(); + int accMode_null = -99; + + // if the arrival mode access point is transit, or it's an external trip + if (airportAccessMgra <= 0) + { + String record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getDestinationMGRA() + "," + parties[i].getMode() + "," + + parties[i].getArrivalMode() + "," + taps[0] + "," + taps[1] + "\n"); + + writer.print(record); + + continue; + } + + // if the arrival mode access point is not transit, two trip legs will be printed out + else + { + String record_Origin2Access = new String(); + String record_Access2Destination = new String(); + + if (parties[i].getDirection() == AirportModelStructure.DEPARTURE) + { + record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getAirportAccessMGRA() + "," + parties[i].getMode() + "," + + parties[i].getArrivalMode() + "," + taps[0] + "," + taps[1] + "\n"); + + // if access point is airport terminal, connection mode is walk + if (airportAccessMgra == airportMgra) + { + record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," + + parties[i].getDestinationMGRA() + "," + SandagModelStructure.WALK_ALTS[0] + "," + + accMode_null + "," + taps[0] + "," + taps[1] + "\n"); + } + // else if access point is not airport terminal, connection mode is transit (APM) + else + { + record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," + + parties[i].getDestinationMGRA() + "," + SandagModelStructure.WALK_TRANSIT_ALTS[0] + "," + + accMode_null + "," + taps[0] + "," + taps[1] + "\n"); + } + writer.print(record_Origin2Access); + writer.print(record_Access2Destination); + } + else + { + record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," + + parties[i].getDestinationMGRA() + "," + parties[i].getMode() + "," + + parties[i].getArrivalMode() + "," + taps[0] + "," + taps[1] + "\n"); + // if access point is airport terminal, connection mode is walk + if (airportAccessMgra == airportMgra) + { + record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getAirportAccessMGRA() + "," + SandagModelStructure.WALK_ALTS[0] + "," + + accMode_null + "," + taps[0] + "," + taps[1] + "\n"); + } + // else if access point is not airport terminal, connection mode is transit (APM) + else + { + record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getAirportAccessMGRA() + "," + SandagModelStructure.WALK_TRANSIT_ALTS[0] + "," + + accMode_null + "," + taps[0] + "," + taps[1] + "\n"); + } + writer.print(record_Origin2Access); + writer.print(record_Access2Destination); + } + } - String record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," - + parties[i].getPurpose() + "," + parties[i].getSize() + "," - + parties[i].getIncome() + "," + parties[i].getNights() + "," - + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," - + parties[i].getDestinationMGRA() + "," + parties[i].getAirportAccessMGRA() + "," + parties[i].getMode() + "," - + parties[i].getArrivalMode() + "," + taps[0] + "," + taps[1] + "\n"); - writer.print(record); } writer.close(); From 2ad2967737a3f1e3fdd5d179299ec8983878a085 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Fri, 19 Jun 2020 18:51:33 -0400 Subject: [PATCH 09/18] add employee trip from parking lot to terminal --- .../abm/airport/AirportDestChoiceModel.java | 6 +- .../abm/airport/AirportModeChoiceModel.java | 4 +- .../sandag/abm/airport/AirportModelDMU.java | 2 +- .../abm/airport/AirportModelStructure.java | 3 +- .../abm/airport/AirportPartyManager.java | 182 +++++++++++++++++- .../sandag/abm/airport/AirportTripTables.java | 10 + 6 files changed, 198 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java index b955ec3c3..950f5de08 100644 --- a/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java @@ -452,11 +452,15 @@ public void chooseOrigins(AirportParty[] airportParties) // iterate through the array, choosing mgras and setting them for (AirportParty party : airportParties) { - + int income = party.getIncome(); int purpose = party.getPurpose(); double random = party.getRandom(); int mgra = -99; + if (purpose == AirportModelStructure.EMPLOYEE) + { + continue; + } if (purpose < AirportModelStructure.INTERNAL_PURPOSES) mgra = chooseMGRA(purpose, income, random); diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index 14c9ec1c7..edf79710b 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -7,6 +7,7 @@ import org.sandag.abm.accessibilities.DriveTransitWalkSkimsCalculator; import org.sandag.abm.accessibilities.WalkTransitDriveSkimsCalculator; import org.sandag.abm.accessibilities.WalkTransitWalkSkimsCalculator; +import org.sandag.abm.application.SandagModelStructure; import org.sandag.abm.ctramp.CtrampApplication; import org.sandag.abm.ctramp.Util; import org.sandag.abm.modechoice.MgraDataManager; @@ -427,8 +428,9 @@ public void chooseModes(HashMap rbMap, AirportParty[] airportPar if ((ID <= 5) || (ID % 100) == 0) logger.info("Choosing mode for party " + party.getID()); - + if (party.getPurpose() < AirportModelStructure.INTERNAL_PURPOSES) chooseMode(party, dmu); + else if (party.getPurpose() == AirportModelStructure.EMPLOYEE) continue; else { party.setArrivalMode((byte) -99); diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 9503d03ce..499d24514 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -416,7 +416,7 @@ public void setMgraIndexMap(){ mgra_index_map.put(uniqueMgraValueArray[i], i); } } - + public void setTravelTimeArraySize(){ NUM_A_MGRA = mgra_index_map.size(); travel_time = new double[maxMgra + 1][NUM_A_MGRA][NUM_DIR][NUM_LOS]; diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index 560efd15e..d939d9441 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -3,12 +3,13 @@ public final class AirportModelStructure { - public static final byte PURPOSES = 5; + public static final byte PURPOSES = 6; // employee is not really in the choice model public static final byte RESIDENT_BUSINESS = 0; public static final byte RESIDENT_PERSONAL = 1; public static final byte VISITOR_BUSINESS = 2; public static final byte VISITOR_PERSONAL = 3; public static final byte EXTERNAL = 4; + public static final byte EMPLOYEE = 5; public static final byte INTERNAL_PURPOSES = 4; diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index e71717d31..204c06e74 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -6,10 +6,17 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; +import java.util.List; +import java.util.ArrayList; +import java.io.FileNotFoundException; + import org.apache.log4j.Logger; import org.sandag.abm.application.SandagModelStructure; import org.sandag.abm.ctramp.CtrampApplication; import org.sandag.abm.ctramp.Util; + import com.pb.common.datafile.OLD_CSVFileReader; import com.pb.common.datafile.TableDataSet; import com.pb.common.util.ResourceUtil; @@ -20,6 +27,7 @@ public class AirportPartyManager private static Logger logger = Logger.getLogger("SandagTourBasedModel.class"); private AirportParty[] parties; + private int totalPassengerParty; private double[] purposeDistribution; private double[][] sizeDistribution; @@ -31,6 +39,8 @@ public class AirportPartyManager private int airportMgra; SandagModelStructure sandagStructure; + + private Map> employeeParkingValuesMap = new HashMap<>(); /** * Constructor. Reads properties file and opens/stores all probability @@ -57,6 +67,8 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) + Util.getStringValueFromPropertyMap(rbMap, "airport.departureTime.file"); String arriveFile = directory + Util.getStringValueFromPropertyMap(rbMap, "airport.arrivalTime.file"); + String employeeParkFile = directory + + Util.getStringValueFromPropertyMap(rbMap, "airport.employeePark.file"); // Read the distributions setPurposeDistribution(purposeFile); @@ -65,6 +77,8 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) incomeDistribution = setDistribution(incomeDistribution, incomeFile); departureDistribution = setDistribution(departureDistribution, departFile); arrivalDistribution = setDistribution(arrivalDistribution, arriveFile); + + readCsvFile(employeeParkFile); // calculate total number of parties float enplanements = new Float(Util.getStringValueFromPropertyMap(rbMap, @@ -78,10 +92,16 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) airportMgra = Util.getIntegerValueFromPropertyMap(rbMap, "airport.airportMgra"); + + int totalEmployees = 0; + for ( String key : employeeParkingValuesMap.keySet()) { + totalEmployees += employeeParkingValuesMap.get(key).get(2); + } float directPassengers = (enplanements - connectingPassengers) / annualFactor; int totalParties = (int) (directPassengers / averageSize) * 2; - parties = new AirportParty[(int)(totalParties*sampleRate)]; + parties = new AirportParty[(int)(totalParties*sampleRate) + totalEmployees * 2]; + totalPassengerParty = (int) (totalParties*sampleRate); logger.info("Total airport parties: " + totalParties); } @@ -97,10 +117,12 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) public void generateAirportParties() { - int departures = parties.length / 2; - int arrivals = parties.length - departures; + int departures = totalPassengerParty / 2; + int arrivals = departures; + int employees = (parties.length - departures - arrivals) / 2; int totalParties = 0; int totalPassengers = 0; + int totalEmployees = 0; for (int i = 0; i < departures; ++i) { @@ -158,9 +180,144 @@ public void generateAirportParties() } logger.info("Total passengers " + totalPassengers); + + for (String key : employeeParkingValuesMap.keySet()) + { + double num = employeeParkingValuesMap.get(key).get(2); + int stallNum = (int) num; + for (int s = 0; s < stallNum; s++) + { + AirportParty party = new AirportParty(s*101 + 1000); + double stallMgra = employeeParkingValuesMap.get(key).get(1); + party.setOriginMGRA((int) stallMgra); + party.setDestinationMGRA(airportMgra); + + double transitToTerminalProb = employeeParkingValuesMap.get(key).get(3) * employeeParkingValuesMap.get(key).get(4); + if (party.getRandom() < transitToTerminalProb) + { + party.setMode((byte) SandagModelStructure.WALK_TRANSIT_ALTS[0]); + } + else + { + party.setMode((byte) SandagModelStructure.WALK_ALTS[0]); + } + // simulate from distributions + byte period = (byte) chooseFromDistribution(AirportModelStructure.EMPLOYEE, departureDistribution, + party.getRandom()); + + party.setDirection(AirportModelStructure.DEPARTURE); + party.setPurpose(AirportModelStructure.EMPLOYEE); + party.setSize((byte) 1); + party.setNights((byte) -99); + party.setIncome((byte) -99); + party.setDepartTime(period); + party.setArrivalMode((byte) -99); + + parties[totalParties] = party; + ++totalParties; + party.setID(totalParties); + totalEmployees += 1; + } + } + + + for (String key : employeeParkingValuesMap.keySet()) + { + double num = employeeParkingValuesMap.get(key).get(2); + int stallNum = (int) num; + for (int s = 0; s < stallNum; s++) + { + AirportParty party = new AirportParty(s*101 + 1001); + double stallMgra = employeeParkingValuesMap.get(key).get(1); + party.setDestinationMGRA((int) stallMgra); + party.setOriginMGRA(airportMgra); + + double transitToTerminalProb = employeeParkingValuesMap.get(key).get(3) * employeeParkingValuesMap.get(key).get(4); + if (party.getRandom() < transitToTerminalProb) + { + party.setMode((byte) SandagModelStructure.WALK_TRANSIT_ALTS[0]); + } + else + { + party.setMode((byte) SandagModelStructure.WALK_ALTS[0]); + } + // simulate from distributions + byte period = (byte) chooseFromDistribution(AirportModelStructure.EMPLOYEE, arrivalDistribution, + party.getRandom()); + + party.setDirection(AirportModelStructure.ARRIVAL); + party.setPurpose(AirportModelStructure.EMPLOYEE); + party.setSize((byte) 1); + party.setNights((byte) -99); + party.setIncome((byte) -99); + party.setDepartTime(period); + party.setArrivalMode((byte) -99); + + parties[totalParties] = party; + ++totalParties; + party.setID(totalParties); + totalEmployees += 0; + } + } + logger.info("Total employees " + totalEmployees); } - + + private void readCsvFile(String filePath) { + + //Map> employeeParkingValuesMap = new HashMap<>(); + + String employeeParkIndexString = "Name"; + + try (Scanner sc = new Scanner(new File(filePath))) { + + String[] record; + + // process the header record + record = sc.nextLine().split(",", -1); + Map fieldIndexMap; + fieldIndexMap = getFieldIndexMap( record ); + + int employeeParkingIndex = fieldIndexMap.get( employeeParkIndexString ); + + while (sc.hasNextLine()) + { + + record = sc.nextLine().split(",", -1); + String employeeParkingName = record[employeeParkingIndex]; + + // pre-allocate the ArrayList to hold values for this MAZ + List valueList = new ArrayList<>(); + while (valueList.size() < fieldIndexMap.size()) + valueList.add(null); + + // convert the record[] values to double for each specified field value and save in the ArrayList. + for ( String field : fieldIndexMap.keySet()) { + int index = fieldIndexMap.get( field ); + valueList.set( index, Double.valueOf( record[index] ) ); + } + + employeeParkingValuesMap.put( employeeParkingName, valueList ); + + } + } + catch (FileNotFoundException e) { + throw new RuntimeException( "Exception caught reading csv file: " + filePath, e ); + } + + } + + /** + * @param record String[] of field names read from the csv file header record. + * @return Map map of field names to field indices. + */ + private Map getFieldIndexMap( String[] record ) { + Map fldIdxMap = new HashMap<>(); + for ( int i=0; i < record.length; i++ ) + fldIdxMap.put(record[i], i); + return fldIdxMap; + } + /** * Read file containing probabilities by purpose. Store cumulative * distribution in purposeDistribution. @@ -341,11 +498,26 @@ public void writeOutputFile(HashMap rbMap) for (int i = 0; i < parties.length; ++i) { + // if employee + if (parties[i].getPurpose() == AirportModelStructure.EMPLOYEE) + { + String record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getDestinationMGRA() + "," + parties[i].getMode() + "," + + parties[i].getArrivalMode() + "," + (int) 0 + "," + (int) 0 + "\n"); + + writer.print(record); + + continue; + } + int[] taps = getTapPair(parties[i]); int airportAccessMgra = parties[i].getAirportAccessMGRA(); int accMode_null = -99; - + // if the arrival mode access point is transit, or it's an external trip if (airportAccessMgra <= 0) { diff --git a/src/main/java/org/sandag/abm/airport/AirportTripTables.java b/src/main/java/org/sandag/abm/airport/AirportTripTables.java index bbe4b4b8e..288cfe46c 100644 --- a/src/main/java/org/sandag/abm/airport/AirportTripTables.java +++ b/src/main/java/org/sandag/abm/airport/AirportTripTables.java @@ -343,9 +343,19 @@ public void processTrips(int timePeriod, TableDataSet tripData) // party size is a variable in output file. it is used for transit // trips (person trips) float personTrips = (float) tripData.getValueAt(i, "size")/sampleRate; + + if (tripData.getValueAt(i, "purpose") == AirportModelStructure.EMPLOYEE) + { + personTrips = (float) tripData.getValueAt(i, "size"); + } // all auto trips are 1 per party float vehicleTrips = 1.0f/sampleRate; + + if (tripData.getValueAt(i, "purpose") == AirportModelStructure.EMPLOYEE) + { + vehicleTrips = 1.0f; + } // Store in matrix int mode = modeIndex[tripMode]; From 5cd208106bc61e5ad360b06944e69b3bc35865d3 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Fri, 19 Jun 2020 19:46:55 -0400 Subject: [PATCH 10/18] not all employees go to terminal --- .../org/sandag/abm/airport/AirportPartyManager.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index 204c06e74..cfeb27982 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -95,7 +95,7 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) int totalEmployees = 0; for ( String key : employeeParkingValuesMap.keySet()) { - totalEmployees += employeeParkingValuesMap.get(key).get(2); + totalEmployees += (int) (employeeParkingValuesMap.get(key).get(2) * employeeParkingValuesMap.get(key).get(3)); } float directPassengers = (enplanements - connectingPassengers) / annualFactor; @@ -183,7 +183,7 @@ public void generateAirportParties() for (String key : employeeParkingValuesMap.keySet()) { - double num = employeeParkingValuesMap.get(key).get(2); + double num = employeeParkingValuesMap.get(key).get(2) * employeeParkingValuesMap.get(key).get(3); int stallNum = (int) num; for (int s = 0; s < stallNum; s++) { @@ -192,7 +192,7 @@ public void generateAirportParties() party.setOriginMGRA((int) stallMgra); party.setDestinationMGRA(airportMgra); - double transitToTerminalProb = employeeParkingValuesMap.get(key).get(3) * employeeParkingValuesMap.get(key).get(4); + double transitToTerminalProb = employeeParkingValuesMap.get(key).get(4); if (party.getRandom() < transitToTerminalProb) { party.setMode((byte) SandagModelStructure.WALK_TRANSIT_ALTS[0]); @@ -223,7 +223,7 @@ public void generateAirportParties() for (String key : employeeParkingValuesMap.keySet()) { - double num = employeeParkingValuesMap.get(key).get(2); + double num = employeeParkingValuesMap.get(key).get(2) *employeeParkingValuesMap.get(key).get(3); int stallNum = (int) num; for (int s = 0; s < stallNum; s++) { @@ -232,7 +232,7 @@ public void generateAirportParties() party.setDestinationMGRA((int) stallMgra); party.setOriginMGRA(airportMgra); - double transitToTerminalProb = employeeParkingValuesMap.get(key).get(3) * employeeParkingValuesMap.get(key).get(4); + double transitToTerminalProb = employeeParkingValuesMap.get(key).get(4); if (party.getRandom() < transitToTerminalProb) { party.setMode((byte) SandagModelStructure.WALK_TRANSIT_ALTS[0]); @@ -259,7 +259,7 @@ public void generateAirportParties() totalEmployees += 0; } } - logger.info("Total employees " + totalEmployees); + logger.info("Total employees going to terminal" + totalEmployees); } From 2db9abc8d2edadcda7d2f2ae6f69c2a7099c5c8e Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Tue, 14 Jul 2020 23:45:18 -0400 Subject: [PATCH 11/18] pick nearest for shuttle/van/courtesy --- .gitignore | 1 + .../abm/airport/AirportModeChoiceModel.java | 27 +++++++++++++++++++ .../sandag/abm/airport/AirportModelDMU.java | 8 +++--- .../abm/airport/AirportModelStructure.java | 3 +++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 7e3359492..c2247e646 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ src/main/python/reporting/abm_reports*/* **/bin/**/* *.user *.pyc +*.hubstorinfo diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index edf79710b..c8ac20821 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -343,6 +343,33 @@ else if (los == AirportModelStructure.SR3){ party.setArrivalMode((byte) accessMode); int airportAccessMGRA = dmu.mode_mgra_map.get(accessMode); + + if (accessMode == AirportModelStructure.SHUTTLE_VAN | accessMode == AirportModelStructure.HOTEL_COURTESY) + { + double terminal_logsum = 0; + double cmh_logsum = 0; + int size = party.getSize(); + if (size == 1) + { + terminal_logsum = dmu.getShared2LogsumHotelOrShuttleTerminal(); + cmh_logsum = dmu.getShared2LogsumHotelOrShuttleCentralMobilityHub(); + } + else + { + terminal_logsum = dmu.getShared3LogsumHotelOrShuttleTerminal(); + cmh_logsum = dmu.getShared3LogsumHotelOrShuttleCentralMobilityHub(); + } + + if (terminal_logsum >= cmh_logsum) + { + airportAccessMGRA = dmu.mode_mgra_map.get(AirportModelStructure.MGRAAlt_TERM); + } + else + { + airportAccessMGRA = dmu.mode_mgra_map.get(AirportModelStructure.MGRAAlt_CMH); + } + } + party.setAirportAccessMGRA(airportAccessMGRA); // add debug diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 499d24514..7e78de3df 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -603,28 +603,28 @@ public double getShared3LogsumRental() public double getShared2LogsumHotelOrShuttleTerminal() { - int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); + int airportMgra = mode_mgra_map.get(AirportModelStructure.MGRAAlt_TERM); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getShared3LogsumHotelOrShuttleTerminal() { - int airportMgra = mode_mgra_map.get(AirportModelStructure.SHUTTLE_VAN); + int airportMgra = mode_mgra_map.get(AirportModelStructure.MGRAAlt_TERM); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } public double getShared2LogsumHotelOrShuttleCentralMobilityHub() { - int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); + int airportMgra = mode_mgra_map.get(AirportModelStructure.MGRAAlt_CMH); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR2]; } public double getShared3LogsumHotelOrShuttleCentralMobilityHub() { - int airportMgra = mode_mgra_map.get(AirportModelStructure.HOTEL_COURTESY); + int airportMgra = mode_mgra_map.get(AirportModelStructure.MGRAAlt_CMH); int airportMgra_index = mgra_index_map.get(airportMgra); return travel_time[nonAirportMgra][airportMgra_index][direction][AirportModelStructure.SR3]; } diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index d939d9441..178eda571 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -50,6 +50,9 @@ public final class AirportModelStructure public static final int CURB_LOC4 = 16; public static final int CURB_LOC5 = 17; + public static final int MGRAAlt_TERM = 8; + public static final int MGRAAlt_CMH = 9; + public static final int LOS_TYPE = 4; public static final int DA = 0; From e0a32327b7afe431b88b0195af901facab54dc24 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Mon, 3 Aug 2020 17:02:49 -0400 Subject: [PATCH 12/18] fix the bug in choosing MGRA for non-airport location --- .../abm/airport/AirportDestChoiceModel.java | 23 +++++++++++++------ .../org/sandag/abm/airport/AirportParty.java | 3 +-- .../abm/airport/AirportPartyManager.java | 6 ++--- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java index 950f5de08..43c08de3e 100644 --- a/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java @@ -18,9 +18,11 @@ import com.pb.common.newmodel.UtilityExpressionCalculator; import com.pb.common.util.Tracer; +import com.pb.common.math.MersenneTwister; + public class AirportDestChoiceModel { - + private double[][] sizeTerms; // by // segment, // tazNumber @@ -390,7 +392,7 @@ public void calculateTazProbabilities(AirportDmuFactoryIf dmuFactory) * Random number * @return The chosen MGRA number */ - public int chooseMGRA(int purpose, int income, double randomNumber) + public int chooseMGRA(int purpose, int income, AirportParty party) { // first find a TAZ @@ -399,9 +401,10 @@ public int chooseMGRA(int purpose, int income, double randomNumber) double[] tazCumProb = tazProbabilities[segment]; double altProb = 0; double cumProb = 0; + double random = party.getRandom(); for (int i = 0; i < tazCumProb.length; ++i) { - if (tazCumProb[i] > randomNumber) + if (tazCumProb[i] > random) { alt = i; if (i != 0) @@ -427,14 +430,18 @@ public int chooseMGRA(int purpose, int income, double randomNumber) // mgra probabilities need to be scaled by the alternatives probability int mgraNumber = 0; double[] mgraCumProb = mgraProbabilities[segment][tazNumber]; + random = party.getRandom(); // get a new random number for mgra, instead of using the same one from taz for (int i = 0; i < mgraCumProb.length; ++i) { - cumProb += mgraCumProb[i] * altProb; - if (cumProb > randomNumber) + // cumProb += mgraCumProb[i] * altProb; + cumProb = mgraCumProb[i]; + if (cumProb > random) { mgraNumber = mgraArray[i]; + break; } } + // return the chosen MGRA number return mgraNumber; } @@ -448,7 +455,7 @@ public int chooseMGRA(int purpose, int income, double randomNumber) */ public void chooseOrigins(AirportParty[] airportParties) { - + //MersenneTwister twister = new MersenneTwister(5); // iterate through the array, choosing mgras and setting them for (AirportParty party : airportParties) { @@ -456,13 +463,15 @@ public void chooseOrigins(AirportParty[] airportParties) int income = party.getIncome(); int purpose = party.getPurpose(); double random = party.getRandom(); + // double random = twister.nextDouble(); int mgra = -99; if (purpose == AirportModelStructure.EMPLOYEE) { continue; } if (purpose < AirportModelStructure.INTERNAL_PURPOSES) - mgra = chooseMGRA(purpose, income, random); + //mgra = chooseMGRA(purpose, income, random); + mgra = chooseMGRA(purpose, income, party); // if this is a departing travel party, the origin is the chosen // mgra, and the destination is the airport terminal diff --git a/src/main/java/org/sandag/abm/airport/AirportParty.java b/src/main/java/org/sandag/abm/airport/AirportParty.java index e355b131c..7a3f2f2da 100644 --- a/src/main/java/org/sandag/abm/airport/AirportParty.java +++ b/src/main/java/org/sandag/abm/airport/AirportParty.java @@ -42,8 +42,7 @@ public class AirportParty */ public AirportParty(long seed) { - - random = new MersenneTwister(seed); + random = new MersenneTwister(seed); } /** diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index cfeb27982..1fd7f4767 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -126,7 +126,7 @@ public void generateAirportParties() for (int i = 0; i < departures; ++i) { - AirportParty party = new AirportParty(i * 101 + 1000); + AirportParty party = new AirportParty(i * 101 + 1000); // simulate from distributions party.setDirection(AirportModelStructure.DEPARTURE); @@ -154,7 +154,7 @@ public void generateAirportParties() for (int i = 0; i < arrivals; ++i) { - AirportParty party = new AirportParty(i * 101 + 1000); + AirportParty party = new AirportParty(i * 201 + 1000); // simulate from distributions party.setDirection(AirportModelStructure.ARRIVAL); @@ -187,7 +187,7 @@ public void generateAirportParties() int stallNum = (int) num; for (int s = 0; s < stallNum; s++) { - AirportParty party = new AirportParty(s*101 + 1000); + AirportParty party = new AirportParty(s * 301 + 1000); double stallMgra = employeeParkingValuesMap.get(key).get(1); party.setOriginMGRA((int) stallMgra); party.setDestinationMGRA(airportMgra); From d7ee893e37c138188988cca1d18a87501ec23dce Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Tue, 4 Aug 2020 09:50:22 -0400 Subject: [PATCH 13/18] clean up --- .../org/sandag/abm/airport/AirportDestChoiceModel.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java index 43c08de3e..bc3e6677a 100644 --- a/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportDestChoiceModel.java @@ -18,8 +18,6 @@ import com.pb.common.newmodel.UtilityExpressionCalculator; import com.pb.common.util.Tracer; -import com.pb.common.math.MersenneTwister; - public class AirportDestChoiceModel { @@ -455,23 +453,19 @@ public int chooseMGRA(int purpose, int income, AirportParty party) */ public void chooseOrigins(AirportParty[] airportParties) { - //MersenneTwister twister = new MersenneTwister(5); - // iterate through the array, choosing mgras and setting them + // iterate through the array, choosing mgras and setting them for (AirportParty party : airportParties) { int income = party.getIncome(); int purpose = party.getPurpose(); - double random = party.getRandom(); - // double random = twister.nextDouble(); int mgra = -99; if (purpose == AirportModelStructure.EMPLOYEE) { continue; } if (purpose < AirportModelStructure.INTERNAL_PURPOSES) - //mgra = chooseMGRA(purpose, income, random); - mgra = chooseMGRA(purpose, income, party); + mgra = chooseMGRA(purpose, income, party); // if this is a departing travel party, the origin is the chosen // mgra, and the destination is the airport terminal From 57ccb188baefc568fb989da4d33e605b216a32dc Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Tue, 27 Oct 2020 10:46:24 -0400 Subject: [PATCH 14/18] get access point (CMH) to terminal TAPs depending on ride mode --- .../abm/airport/AirportModeChoiceModel.java | 41 +++++++++- .../sandag/abm/airport/AirportModelDMU.java | 13 ++- .../org/sandag/abm/airport/AirportParty.java | 23 +++++- .../abm/airport/AirportPartyManager.java | 80 ++++++++++++++++--- 4 files changed, 140 insertions(+), 17 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index c8ac20821..de0b90d9c 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -90,7 +90,7 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf // create a DMU AirportModelDMU dmu = dmuFactory.getAirportModelDMU(); - + // get MAX mgra to initialize mgra size array in dmu int maxMgra = mgraManager.getMaxMgra(); dmu.setMaxMgra(maxMgra); @@ -242,6 +242,12 @@ public void chooseMode(AirportParty party, AirportModelDMU dmu) int[][] walkTransitTapPairs = wtw.getBestTapPairs(origMgra, destMgra, skimPeriod, debug, logger); party.setBestWtwTapPairs(walkTransitTapPairs); + + if (party.getPurpose() == AirportModelStructure.EMPLOYEE) + { + party.setAPtoTermBestWtwTapPairs(walkTransitTapPairs); + return; + } // drive transit tap pairs depend on direction; departing parties use // drive-transit-walk, else walk-transit-drive is used. @@ -411,12 +417,31 @@ else if (los == AirportModelStructure.SR3){ } else if (occupancy == 2) { int choice = shared2Model[chosenAirportMgra_index].getChoiceResult(randomNumber); - tripMode = choice + 2; + tripMode = choice + 2; } else if (occupancy > 2) { int choice = shared3Model[chosenAirportMgra_index].getChoiceResult(randomNumber); tripMode = choice + 3 + 2; } + + if (chosenAirportMgra != dmu.getTerminalMgra()) + { + if (direction == 0) + { + int[][] walkTransitTapPairs_AP2Term = wtw.getBestTapPairs(chosenAirportMgra, dmu.getTerminalMgra(), skimPeriod, debug, + logger); + party.setAPtoTermBestWtwTapPairs(walkTransitTapPairs_AP2Term); + } + else + { + int[][] walkTransitTapPairs_AP2Term = wtw.getBestTapPairs(dmu.getTerminalMgra(), chosenAirportMgra, skimPeriod, debug, + logger); + party.setAPtoTermBestWtwTapPairs(walkTransitTapPairs_AP2Term); + } + } + + + } else { int choice = transitModel.getChoiceResult(randomNumber); @@ -424,6 +449,7 @@ else if (los == AirportModelStructure.SR3){ else tripMode = choice + 15; } party.setMode((byte) tripMode); + } /** @@ -447,6 +473,13 @@ public void chooseModes(HashMap rbMap, AirportParty[] airportPar dmu.setMaxMgra(maxMgra); solveModeMgra(dmu); + + int terminalMgra = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, + "airport.airportMgra")); + + // set terminal Mgra + dmu.setTerminalMgra(terminalMgra); + // iterate through the array, choosing mgras and setting them for (AirportParty party : airportParties) { @@ -456,8 +489,8 @@ public void chooseModes(HashMap rbMap, AirportParty[] airportPar if ((ID <= 5) || (ID % 100) == 0) logger.info("Choosing mode for party " + party.getID()); - if (party.getPurpose() < AirportModelStructure.INTERNAL_PURPOSES) chooseMode(party, dmu); - else if (party.getPurpose() == AirportModelStructure.EMPLOYEE) continue; + if (party.getPurpose() < AirportModelStructure.INTERNAL_PURPOSES | party.getPurpose() == AirportModelStructure.EMPLOYEE) chooseMode(party, dmu); + else { party.setArrivalMode((byte) -99); diff --git a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java index 7e78de3df..83958b240 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelDMU.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelDMU.java @@ -91,7 +91,10 @@ public class AirportModelDMU protected static final int NUM_LOS = 4; private int nonAirportMgra; - private int direction; + public int terminalMgra; + + + private int direction; // estimation file defines time periods as: // 1 | Early AM: 3:00 AM - 5:59 AM | @@ -391,6 +394,14 @@ public int getNonAirportMgra() { public void setNonAirportMgra(int nonAirportMgra) { this.nonAirportMgra = nonAirportMgra; } + + public int getTerminalMgra() { + return terminalMgra; + } + + public void setTerminalMgra(int terminalMgra) { + this.terminalMgra = terminalMgra; + } public void setDirection(int direction) { this.direction = direction; diff --git a/src/main/java/org/sandag/abm/airport/AirportParty.java b/src/main/java/org/sandag/abm/airport/AirportParty.java index 7a3f2f2da..be1e65905 100644 --- a/src/main/java/org/sandag/abm/airport/AirportParty.java +++ b/src/main/java/org/sandag/abm/airport/AirportParty.java @@ -33,8 +33,14 @@ public class AirportParty private int[][] bestWtwTapPairs; private int[][] bestWtdTapPairs; private int[][] bestDtwTapPairs; + + private int[][] APtoTermBestWtwTapPairs; + private int AP2TerminalTransitMode; - /** + + + + /** * Public constructor. * * @param seed @@ -351,4 +357,19 @@ public void setDestinationMGRA(int destinationMGRA) this.destinationMGRA = destinationMGRA; } + public int[] getAPtoTermBestWtwTapPairs(int rideMode) { + return APtoTermBestWtwTapPairs[rideMode]; + } + + public void setAPtoTermBestWtwTapPairs(int[][] aPtoTermBestWtwTapPairs) { + APtoTermBestWtwTapPairs = aPtoTermBestWtwTapPairs; + } + + public int getAP2TerminalTransitMode() { + return AP2TerminalTransitMode; + } + + public void setAP2TerminalTransitMode(int aP2TerminalTransitMode) { + AP2TerminalTransitMode = aP2TerminalTransitMode; + } } diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index 1fd7f4767..b3fe1499f 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -16,6 +16,7 @@ import org.sandag.abm.application.SandagModelStructure; import org.sandag.abm.ctramp.CtrampApplication; import org.sandag.abm.ctramp.Util; +import org.sandag.abm.modechoice.Modes; import com.pb.common.datafile.OLD_CSVFileReader; import com.pb.common.datafile.TableDataSet; @@ -36,7 +37,7 @@ public class AirportPartyManager private double[][] departureDistribution; private double[][] arrivalDistribution; - private int airportMgra; + public int airportMgra; SandagModelStructure sandagStructure; @@ -501,12 +502,27 @@ public void writeOutputFile(HashMap rbMap) // if employee if (parties[i].getPurpose() == AirportModelStructure.EMPLOYEE) { - String record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," - + parties[i].getPurpose() + "," + parties[i].getSize() + "," - + parties[i].getIncome() + "," + parties[i].getNights() + "," - + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," - + parties[i].getDestinationMGRA() + "," + parties[i].getMode() + "," - + parties[i].getArrivalMode() + "," + (int) 0 + "," + (int) 0 + "\n"); + String record; + if (parties[i].getMode() == SandagModelStructure.WALK_ALTS[0]) + { + record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getDestinationMGRA() + "," + parties[i].getMode() + "," + + parties[i].getArrivalMode() + "," + (int) 0 + "," + (int) 0 + "\n"); + } + else + { + int[] tapsAP2Terminal = getAccessToTerminalTapPair(parties[i]); + + record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + + parties[i].getPurpose() + "," + parties[i].getSize() + "," + + parties[i].getIncome() + "," + parties[i].getNights() + "," + + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," + + parties[i].getDestinationMGRA() + "," + parties[i].getAP2TerminalTransitMode() + "," + + parties[i].getArrivalMode() + "," + tapsAP2Terminal[0] + "," + tapsAP2Terminal[1] + "\n"); + } writer.print(record); @@ -561,12 +577,15 @@ public void writeOutputFile(HashMap rbMap) // else if access point is not airport terminal, connection mode is transit (APM) else { + + int[] tapsAP2Terminal = getAccessToTerminalTapPair(parties[i]); + record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," - + parties[i].getDestinationMGRA() + "," + SandagModelStructure.WALK_TRANSIT_ALTS[0] + "," - + accMode_null + "," + taps[0] + "," + taps[1] + "\n"); + + parties[i].getDestinationMGRA() + "," + parties[i].getAP2TerminalTransitMode() + "," + + accMode_null + "," + tapsAP2Terminal[0] + "," + tapsAP2Terminal[1] + "\n"); } writer.print(record_Origin2Access); writer.print(record_Access2Destination); @@ -592,12 +611,15 @@ public void writeOutputFile(HashMap rbMap) // else if access point is not airport terminal, connection mode is transit (APM) else { + + int[] tapsAP2Terminal = getAccessToTerminalTapPair(parties[i]); + record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," - + parties[i].getAirportAccessMGRA() + "," + SandagModelStructure.WALK_TRANSIT_ALTS[0] + "," - + accMode_null + "," + taps[0] + "," + taps[1] + "\n"); + + parties[i].getAirportAccessMGRA() + "," + parties[i].getAP2TerminalTransitMode() + "," + + accMode_null + "," + tapsAP2Terminal[0] + "," + tapsAP2Terminal[1] + "\n"); } writer.print(record_Origin2Access); writer.print(record_Access2Destination); @@ -645,6 +667,42 @@ else if (sandagStructure.getTripModeIsKnrTransit(tripMode)) return taps; } + + public int[] getAccessToTerminalTapPair(AirportParty party) + { + + int[] taps = new int[2]; + + Modes.TransitMode[] mode = Modes.TransitMode.values(); + + // ride mode will be -1 if not transit + int rideMode = 3; //lrt + + int AP2TerminalTransitMode = SandagModelStructure.WALK_TRANSIT_ALTS[rideMode]; + + party.setAP2TerminalTransitMode(AP2TerminalTransitMode); + + taps = party.getAPtoTermBestWtwTapPairs(rideMode); + + if (taps == null) + { + for (int i = 0; i < mode.length; i++) + { + taps = party.getAPtoTermBestWtwTapPairs(mode[i].ordinal()); + + if (taps != null) + { + AP2TerminalTransitMode = SandagModelStructure.WALK_TRANSIT_ALTS[i]; + + party.setAP2TerminalTransitMode(AP2TerminalTransitMode); + + break; + } + } + } + + return taps; + } /* public static void main(String[] args) { From 5cda009a40431d61f047e8b97b576bd56915d9eb Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Thu, 29 Oct 2020 14:53:45 -0400 Subject: [PATCH 15/18] add static int variables --- .../abm/airport/AirportModelStructure.java | 7 +++++++ .../abm/airport/AirportPartyManager.java | 20 ++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index 178eda571..c681584c9 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -59,6 +59,13 @@ public final class AirportModelStructure public static final int SR2 = 1; public static final int SR3 = 2; public static final int Transit = 3; + + public static final int rideModeLRT_index = 3; + + public static final int employeePark_MGRA_index = 1; + public static final int employeePark_stall_index = 2; + public static final int employeePark_terminalpct_index = 3; + public static final int employeePark_transitpct_index = 4; private AirportModelStructure() diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index b3fe1499f..969363fd9 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -96,7 +96,7 @@ public AirportPartyManager(HashMap rbMap, float sampleRate) int totalEmployees = 0; for ( String key : employeeParkingValuesMap.keySet()) { - totalEmployees += (int) (employeeParkingValuesMap.get(key).get(2) * employeeParkingValuesMap.get(key).get(3)); + totalEmployees += (int) (employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_stall_index) * employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_terminalpct_index)); } float directPassengers = (enplanements - connectingPassengers) / annualFactor; @@ -184,16 +184,16 @@ public void generateAirportParties() for (String key : employeeParkingValuesMap.keySet()) { - double num = employeeParkingValuesMap.get(key).get(2) * employeeParkingValuesMap.get(key).get(3); + double num = employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_stall_index) * employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_terminalpct_index); int stallNum = (int) num; for (int s = 0; s < stallNum; s++) { AirportParty party = new AirportParty(s * 301 + 1000); - double stallMgra = employeeParkingValuesMap.get(key).get(1); + double stallMgra = employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_MGRA_index); party.setOriginMGRA((int) stallMgra); party.setDestinationMGRA(airportMgra); - double transitToTerminalProb = employeeParkingValuesMap.get(key).get(4); + double transitToTerminalProb = employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_transitpct_index); if (party.getRandom() < transitToTerminalProb) { party.setMode((byte) SandagModelStructure.WALK_TRANSIT_ALTS[0]); @@ -224,16 +224,16 @@ public void generateAirportParties() for (String key : employeeParkingValuesMap.keySet()) { - double num = employeeParkingValuesMap.get(key).get(2) *employeeParkingValuesMap.get(key).get(3); + double num = employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_stall_index) *employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_terminalpct_index); int stallNum = (int) num; for (int s = 0; s < stallNum; s++) { AirportParty party = new AirportParty(s*101 + 1001); - double stallMgra = employeeParkingValuesMap.get(key).get(1); + double stallMgra = employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_MGRA_index); party.setDestinationMGRA((int) stallMgra); party.setOriginMGRA(airportMgra); - double transitToTerminalProb = employeeParkingValuesMap.get(key).get(4); + double transitToTerminalProb = employeeParkingValuesMap.get(key).get(AirportModelStructure.employeePark_transitpct_index); if (party.getRandom() < transitToTerminalProb) { party.setMode((byte) SandagModelStructure.WALK_TRANSIT_ALTS[0]); @@ -675,15 +675,17 @@ public int[] getAccessToTerminalTapPair(AirportParty party) Modes.TransitMode[] mode = Modes.TransitMode.values(); - // ride mode will be -1 if not transit - int rideMode = 3; //lrt + // APM is coded as light rail + int rideMode = AirportModelStructure.rideModeLRT_index; + // walk-LRT trip mode int AP2TerminalTransitMode = SandagModelStructure.WALK_TRANSIT_ALTS[rideMode]; party.setAP2TerminalTransitMode(AP2TerminalTransitMode); taps = party.getAPtoTermBestWtwTapPairs(rideMode); + // if there's no best path for light rail, loop through and find the available ride mode if (taps == null) { for (int i = 0; i < mode.length; i++) From 6250417a1f36192254b2e16f181584a508e9993d Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Fri, 30 Oct 2020 11:02:29 -0400 Subject: [PATCH 16/18] allow airport debug not in properties --- .../sandag/abm/airport/AirportModeChoiceModel.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index de0b90d9c..c91375473 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -150,10 +150,18 @@ public AirportModeChoiceModel(HashMap rbMap, AirportDmuFactoryIf } seek = Util.getBooleanValueFromPropertyMap(rbMap, "Seek"); - debugChoiceModel = Util.getBooleanValueFromPropertyMap(rbMap, "airport.debug"); - debugPartyID = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, - "airport.debug.party.id")); + if (Util.getStringValueFromPropertyMap(rbMap,"airport.debug") != "") + { + debugChoiceModel = Util.getBooleanValueFromPropertyMap(rbMap, "airport.debug"); + debugPartyID = Integer.parseInt(Util.getStringValueFromPropertyMap(rbMap, + "airport.debug.party.id")); + } + else + { + debugChoiceModel = false; + debugPartyID = -99; + } } /** From 0b311edf8de46f6d60ae0e34f5a296fad9f3a1a5 Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Thu, 21 Jan 2021 17:02:02 -0500 Subject: [PATCH 17/18] airport access point to terminal LRT TAP lookup bug the transit mode ALTs in the best transit path UEC is reversed --- .../sandag/abm/airport/AirportModeChoiceModel.java | 11 +++++------ .../org/sandag/abm/airport/AirportModelStructure.java | 2 -- .../org/sandag/abm/airport/AirportPartyManager.java | 11 +++++------ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java index c91375473..5f320d28b 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java +++ b/src/main/java/org/sandag/abm/airport/AirportModeChoiceModel.java @@ -413,11 +413,10 @@ else if (los == AirportModelStructure.SR3){ int tripMode = 0; int occupancy = AirportModelStructure.getOccupancy(accessMode, party.getSize()); double randomNumber = party.getRandom(); - + if (accessMode != AirportModelStructure.TRANSIT) { - int chosenAirportMgra = dmu.mode_mgra_map.get(accessMode); - int chosenAirportMgra_index = dmu.mgra_index_map.get(chosenAirportMgra); + int chosenAirportMgra_index = dmu.mgra_index_map.get(airportAccessMGRA); if (occupancy == 1) { int choice = driveAloneModel[chosenAirportMgra_index].getChoiceResult(randomNumber); @@ -432,17 +431,17 @@ else if (los == AirportModelStructure.SR3){ tripMode = choice + 3 + 2; } - if (chosenAirportMgra != dmu.getTerminalMgra()) + if (airportAccessMGRA != dmu.getTerminalMgra()) { if (direction == 0) { - int[][] walkTransitTapPairs_AP2Term = wtw.getBestTapPairs(chosenAirportMgra, dmu.getTerminalMgra(), skimPeriod, debug, + int[][] walkTransitTapPairs_AP2Term = wtw.getBestTapPairs(airportAccessMGRA, dmu.getTerminalMgra(), skimPeriod, debug, logger); party.setAPtoTermBestWtwTapPairs(walkTransitTapPairs_AP2Term); } else { - int[][] walkTransitTapPairs_AP2Term = wtw.getBestTapPairs(dmu.getTerminalMgra(), chosenAirportMgra, skimPeriod, debug, + int[][] walkTransitTapPairs_AP2Term = wtw.getBestTapPairs(dmu.getTerminalMgra(), airportAccessMGRA, skimPeriod, debug, logger); party.setAPtoTermBestWtwTapPairs(walkTransitTapPairs_AP2Term); } diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index c681584c9..579666935 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -60,8 +60,6 @@ public final class AirportModelStructure public static final int SR3 = 2; public static final int Transit = 3; - public static final int rideModeLRT_index = 3; - public static final int employeePark_MGRA_index = 1; public static final int employeePark_stall_index = 2; public static final int employeePark_terminalpct_index = 3; diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index 969363fd9..4fe346449 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -672,14 +672,12 @@ public int[] getAccessToTerminalTapPair(AirportParty party) { int[] taps = new int[2]; - - Modes.TransitMode[] mode = Modes.TransitMode.values(); // APM is coded as light rail - int rideMode = AirportModelStructure.rideModeLRT_index; + int rideMode = sandagStructure.getRideModeIndexForTripMode(SandagModelStructure.WALK_LRT); // walk-LRT trip mode - int AP2TerminalTransitMode = SandagModelStructure.WALK_TRANSIT_ALTS[rideMode]; + int AP2TerminalTransitMode = SandagModelStructure.WALK_LRT; party.setAP2TerminalTransitMode(AP2TerminalTransitMode); @@ -688,9 +686,10 @@ public int[] getAccessToTerminalTapPair(AirportParty party) // if there's no best path for light rail, loop through and find the available ride mode if (taps == null) { - for (int i = 0; i < mode.length; i++) + for (int i = 0; i < SandagModelStructure.WALK_TRANSIT_ALTS.length; i++) { - taps = party.getAPtoTermBestWtwTapPairs(mode[i].ordinal()); + rideMode = sandagStructure.getRideModeIndexForTripMode(SandagModelStructure.WALK_TRANSIT_ALTS[i]); + taps = party.getAPtoTermBestWtwTapPairs(rideMode); if (taps != null) { From 8f7e32dc6258a4d2475c159b94fdbbcc68cc303e Mon Sep 17 00:00:00 2001 From: Sijia Wang Date: Wed, 17 Feb 2021 14:02:23 -0500 Subject: [PATCH 18/18] add leg_id to airport_out.csv --- .../abm/airport/AirportModelStructure.java | 4 +++- .../abm/airport/AirportPartyManager.java | 20 +++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java index 579666935..cdf16a6e1 100644 --- a/src/main/java/org/sandag/abm/airport/AirportModelStructure.java +++ b/src/main/java/org/sandag/abm/airport/AirportModelStructure.java @@ -64,7 +64,9 @@ public final class AirportModelStructure public static final int employeePark_stall_index = 2; public static final int employeePark_terminalpct_index = 3; public static final int employeePark_transitpct_index = 4; - + + public static final int airport_travel_party_trip_leg_1 = 1; + public static final int airport_travel_party_trip_leg_2 = 2; private AirportModelStructure() { diff --git a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java index 4fe346449..77ca25c73 100644 --- a/src/main/java/org/sandag/abm/airport/AirportPartyManager.java +++ b/src/main/java/org/sandag/abm/airport/AirportPartyManager.java @@ -492,7 +492,7 @@ public void writeOutputFile(HashMap rbMap) throw new RuntimeException(); } String headerString = new String( - "id,direction,purpose,size,income,nights,departTime,originMGRA,destinationMGRA,tripMode,arrivalMode,boardingTAP,alightingTAP\n"); + "travel_party_id,leg_id,direction,purpose,size,income,nights,departTime,originMGRA,destinationMGRA,tripMode,arrivalMode,boardingTAP,alightingTAP\n"); writer.print(headerString); // Iterate through the array, printing records to the file @@ -505,7 +505,7 @@ public void writeOutputFile(HashMap rbMap) String record; if (parties[i].getMode() == SandagModelStructure.WALK_ALTS[0]) { - record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_1 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," @@ -516,7 +516,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," { int[] tapsAP2Terminal = getAccessToTerminalTapPair(parties[i]); - record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_1 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," @@ -537,7 +537,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," // if the arrival mode access point is transit, or it's an external trip if (airportAccessMgra <= 0) { - String record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + String record = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_1 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," @@ -557,7 +557,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," if (parties[i].getDirection() == AirportModelStructure.DEPARTURE) { - record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record_Origin2Access = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_1 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," @@ -567,7 +567,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," // if access point is airport terminal, connection mode is walk if (airportAccessMgra == airportMgra) { - record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record_Access2Destination = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_2 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," @@ -580,7 +580,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," int[] tapsAP2Terminal = getAccessToTerminalTapPair(parties[i]); - record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record_Access2Destination = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_2 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," @@ -592,7 +592,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," } else { - record_Access2Destination = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record_Access2Destination = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_2 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getAirportAccessMGRA() + "," @@ -601,7 +601,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," // if access point is airport terminal, connection mode is walk if (airportAccessMgra == airportMgra) { - record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record_Origin2Access = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_1 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + "," @@ -614,7 +614,7 @@ record = new String(parties[i].getID() + "," + parties[i].getDirection() + "," int[] tapsAP2Terminal = getAccessToTerminalTapPair(parties[i]); - record_Origin2Access = new String(parties[i].getID() + "," + parties[i].getDirection() + "," + record_Origin2Access = new String(parties[i].getID() + "," + AirportModelStructure.airport_travel_party_trip_leg_1 + "," + parties[i].getDirection() + "," + parties[i].getPurpose() + "," + parties[i].getSize() + "," + parties[i].getIncome() + "," + parties[i].getNights() + "," + parties[i].getDepartTime() + "," + parties[i].getOriginMGRA() + ","