|
From: subversion c. n. <tra...@li...> - 2018-01-23 18:40:50
|
Revision: 1701
http://sourceforge.net/p/transims/code/1701
Author: davidroden
Date: 2018-01-23 18:40:46 +0000 (Tue, 23 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7.1
SysLib
A bug was fixed in the Shape_Bearing method related to the B-node bearing. The Smooth_Data tool control keys were moved into the Flow_Time_Service and embedded as a standard service as an averaging option.
Data_Service
No_Read_Warnings method was added to enable the programmer to disable duplicate record warning message in most standard read methods. This is primarily used for merging networks that typically have a large number of duplicate records. Access to the period toll vector was added to Lane Use Data class to facilitate copies dynamic tolls between networks.
Flow_Time_Service
Smooth_Data logic and control keys SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD, PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG were moved into this service. Smooth_Performance method was moved from PerfPrep to this service.
Converge_Service
Selection types and type counters were added to report the number of each selection type was used to determine the selection score for a given plan. The distribution of selection types is included in the print file for each path building iteration. The SMOOTH option was added to the travel time averaging options. If SMOOTH is selected, the volume data fields in the performance file are smoothed between time periods before the volume-delay equations are applied.
ArcPerf 7.1.8
A bug was fixed in the way directional volume-speed data was aggregated by time.
NetMerge 7.1.1
New Link and Node files and Location merges were made optional. The new No_Read_Warnings method was set to TRUE to avoid reporting thousands of warning messages about duplicate data records. Merge_Lane_Use method was added to exactly match lane-use data between networks and copy the dynamic toll data from the merge file to the output file.
NetPrep 7.1.11
The corrections to the Shape_Bearing method were implemented to improve collapsing nodes to shape points.
PerfPrep 7.1.23
Smooth_Data keys and the Smooth_Performance method were moved into the File_Time_Service class. A Sum_Performance method was added to report the total link travel times, persons, volumes, vehicle miles, vehicle hours, and hours of delay before and after the smoothing process.
PlanCompare 7.1.0
Partially implemented program to identify differences in the skims and paths between two plan files.
Router 7.1.45
The Smoothing option included in Flow_Time_Service was also added. The selection score type logic added to Converge_Service was implemented. The score assigned to plans that are re-skimmed but not re-built was modified to the average of the previous score and the re-skimmed score if the previous score is larger than the re-skimmed score.
SubareaPlans 7.1.10
Logic was added to avoid warning messages and conversion problems for walk legs that travel in the opposite direction of a one-way link.
TripPrep 7.1.11
COMPARE_TRIP_FILE/FORMAT keys were added to identify and report the types of differences that are found when comparing two trip files.
Validate 7.1.10
The logic for creating a Volume-Speed Difference file was modified to save difference records when the input volume-speed or volume-speed count record is not zero.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp
version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp
version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters
version7/branches/aecom/Transims70/Include/Converge_Service.hpp
version7/branches/aecom/Transims70/Include/Data_Service.hpp
version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp
version7/branches/aecom/Transims70/Include/Smooth_Data.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/NetMerge/Execute.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.hpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.vcxproj
version7/branches/aecom/Transims70/NetMerge/NetMerge.vcxproj.filters
version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/PerfPrep/Control.cpp
version7/branches/aecom/Transims70/PerfPrep/Execute.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj.filters
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Get_Trip_Data.cpp
version7/branches/aecom/Transims70/Router_Service/Path_Builder.hpp
version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp
version7/branches/aecom/Transims70/Router_Service/Reskim_Plans.cpp
version7/branches/aecom/Transims70/Router_Service/Save_Results.cpp
version7/branches/aecom/Transims70/Router_Service/Trip_Loop.cpp
version7/branches/aecom/Transims70/Router_Service/Update_Data.cpp
version7/branches/aecom/Transims70/SubareaPlans/Convert_Plan.cpp
version7/branches/aecom/Transims70/SubareaPlans/SubareaPlans.cpp
version7/branches/aecom/Transims70/SubareaPlans/Transit_Plans.cpp
version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Shape_Tools.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Smooth_Data.cpp
version7/branches/aecom/Transims70/Transims71.sln
version7/branches/aecom/Transims70/TripPrep/Control.cpp
version7/branches/aecom/Transims70/TripPrep/Execute.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.hpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.vcxproj
version7/branches/aecom/Transims70/TripPrep/TripPrep.vcxproj.filters
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp
version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/branches/aecom/Transims70/PerfPrep/Sum_Performance.cpp
version7/branches/aecom/Transims70/PlanCompare/
version7/branches/aecom/Transims70/PlanCompare/Compare_Plan.cpp
version7/branches/aecom/Transims70/PlanCompare/Compare_Plans.cpp
version7/branches/aecom/Transims70/PlanCompare/Control.cpp
version7/branches/aecom/Transims70/PlanCompare/Execute.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.hpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj.filters
version7/branches/aecom/Transims70/PlanCompare/Plan_Processing.cpp
version7/branches/aecom/Transims70/PlanCompare/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanCompare/Write_Match.cpp
version7/branches/aecom/Transims70/TripPrep/Compare_Trips.cpp
Removed Paths:
-------------
version7/branches/aecom/Transims70/PerfPrep/Smooth_Performance.cpp
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (7);
+ Version (8);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -59,7 +59,7 @@
start = vol_spd_diff_file.Start ();
end = vol_spd_diff_file.End ();
- if (start < low || end > high || (link > 0 && link != vol_spd_diff_file.Link ())) {
+ if (start < low || end > high || (link > 0 && link != vol_spd_diff_file.Link ()) || (dir >= 0 && dir != vol_spd_diff_file.Dir ())) {
if (found) {
map_itr = link_map.find (link);
@@ -76,7 +76,7 @@
}
link = dir = -1;
found = false;
- continue;
+ if (start < low || end > high) continue;
}
if (link < 0) {
link = vol_spd_diff_file.Link ();
Modified: version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -10,7 +10,7 @@
bool Converge_Service::Converge_Check (void)
{
- int num;
+ int i, num, total_types;
double gap, std_dev;
bool converge_flag;
@@ -29,6 +29,26 @@
if (!min_vht_flag) {
Write (1, "Build Selection Total = ") << potential;
if (num > 0) Write (0, String (" (%.1lf%%)") % (potential * 100.0 / num) % FINISH);
+
+ total_types = 0;
+
+ for (i = 1; i < MAX_SELECTION_TYPE; i++) {
+ total_types += potential_score_types [i];
+ }
+ if (total_types > 0) {
+ Print (1, "Selection Profile:");
+
+ string labels [MAX_SELECTION_TYPE] = {"", "Path Building Problems", "Parking Capacity Problems",
+ "Transit Capacity Problems", "Travel Time Ratios", "Path Penalty Ratios", "Travel Time Differences",
+ "Impedance Differences", "Selection Score Differences", "Re-Build Selection Score" };
+
+ for (i = 1; i < MAX_SELECTION_TYPE; i++) {
+ if (potential_score_types [i] > 0) {
+ Print (1, String ("\t%-28.28s= %8d (%.1lf%%)") % labels [i] % potential_score_types [i] %
+ (potential_score_types [i] * 100.0 / total_types) % FINISH);
+ }
+ }
+ }
}
Write (1, "Number of Paths Built = ") << num_build;
if (num > 0) Write (0, String (" (%.1lf%%)") % (num_build * 100.0 / num) % FINISH);
Modified: version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -37,6 +37,8 @@
num_travelers = 2;
num_veh_cells = 1;
+ memset (select_score_types, '\0', sizeof (select_score_types));
+
total_records = num_selected = select_records = 0;
select_weight = 0;
num_time_ratio = 0;
@@ -180,7 +182,8 @@
int flow_time_service_keys [] = {
UPDATE_FLOW_RATES, UPDATE_TURNING_MOVEMENTS, CLEAR_INPUT_FLOW_RATES,
UPDATE_TRAVEL_TIMES, TIME_UPDATE_RATE, LINK_FLOW_FACTOR, LINK_FLOW_TYPE, EQUATION_PARAMETERS,
- CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, 0
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD,
+ PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG, 0
};
Flow_Time_Service_Keys (flow_time_service_keys);
Modified: version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -8,7 +8,7 @@
// Select_Plan
//---------------------------------------------------------
-int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan)
+int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type)
{
Dtime time1, time2, time_diff, tod, duration;
int cost1, cost2, cost_diff, score, ratio;
@@ -15,11 +15,17 @@
double prob;
score = 100;
+ type = NO_SELECT_TYPE;
if (!new_plan.Path_Problem ()) {
if (new_plan.Problem () == PARK_CAP_PROBLEM || new_plan.Problem () == BOARDING_PROBLEM) {
score = step_itr->min_select_score;
+ if (new_plan.Problem () == PARK_CAP_PROBLEM) {
+ type = PARKING_PROBLEM_TYPE;
+ } else {
+ type = BOARDING_PROBLEM_TYPE;
+ }
} else {
score = 0;
}
@@ -31,9 +37,13 @@
if (ratio > step_itr->max_time_ratio) {
score = 100;
+ type = TIME_RATIO_TYPE;
} else if (ratio >= step_itr->min_time_ratio) {
ratio = (ratio - step_itr->min_time_ratio) * 100 / step_itr->max_min_time_ratio;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = TIME_RATIO_TYPE;
+ score = ratio;
+ }
}
}
@@ -44,9 +54,13 @@
if (ratio > step_itr->max_penalty_ratio) {
score = 100;
+ type = PENALTY_RATIO_TYPE;
} else if (ratio >= step_itr->min_penalty_ratio) {
ratio = (ratio - step_itr->min_penalty_ratio) * 100 / step_itr->max_min_penalty_ratio;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = PENALTY_RATIO_TYPE;
+ score = ratio;
+ }
}
}
@@ -64,6 +78,7 @@
if (time_diff > step_itr->max_time_diff) {
score = 100;
+ type = TRAVEL_TIME_TYPE;
} else if (time_diff >= step_itr->min_time_diff && time2 > 0) {
prob = (double) time_diff / time2;
if (prob >= step_itr->percent_time_diff) {
@@ -70,9 +85,13 @@
if (step_itr->max_min_time_diff > 1) {
time_diff = time_diff - step_itr->min_time_diff;
ratio = 100 * time_diff / step_itr->max_min_time_diff;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = TRAVEL_TIME_TYPE;
+ score = ratio;
+ }
} else {
score = 100;
+ type = TRAVEL_TIME_TYPE;
}
}
}
@@ -88,6 +107,7 @@
if (cost_diff > step_itr->max_cost_diff) {
score = 100;
+ type = IMPEDANCE_TYPE;
} else if (cost_diff >= step_itr->min_cost_diff && cost2 > 0) {
prob = (double) cost_diff / cost2;
if (prob >= step_itr->percent_cost_diff) {
@@ -94,9 +114,13 @@
if (step_itr->max_min_cost_diff > 1) {
cost_diff = cost_diff - step_itr->min_cost_diff;
ratio = 100 * cost_diff / step_itr->max_min_cost_diff;
- if (ratio > score) ratio = score;
+ if (ratio > score) {
+ type = IMPEDANCE_TYPE;
+ ratio = score;
+ }
} else {
score = 100;
+ type = IMPEDANCE_TYPE;
}
}
}
@@ -106,10 +130,17 @@
if (score == 0) {
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
- score = MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), score);
- if (score > 100) score = 100;
+ score = MIN (MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), 0), 100);
+
+ if (score >= step_itr->min_select_score) {
+ type = SELECT_DIFFERENCE_TYPE;
+ } else {
+ //score = 0;
+ }
}
}
+ } else {
+ type = PROBLEM_SELECT_TYPE;
}
return (score);
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -15,6 +15,10 @@
update_link_gap = gap_flag;
link_gap_data.Clear ();
+ if (step_itr->time_averaging == SMOOTH_AVERAGING) {
+ Smooth_Performance ();
+ }
+
Flow_Time_Service::Update_Travel_Times (step_itr->time_averaging, iteration, first_time);
if (save_link_gap && gap_flag) {
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -23,6 +23,7 @@
Transit_Veh_Flag (false);
Transit_Connections (false);
No_Route_Warnings (false);
+ No_Read_Warnings (false);
Person_Map_Flag (false);
Update_Bearings (false);
Bearing_Warnings (false);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -30,7 +30,7 @@
map_stat = access_map.insert (Int_Map_Data (access_rec.Link (), (int) access_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Access Link Number = ") << access_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Access Link Number = ") << access_rec.Link ();
continue;
} else {
access_array.push_back (access_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -48,7 +48,7 @@
link_ptr = &link_array [dir_ptr->Link ()];
out = link_ptr->Link ();
- Warning (String ("Duplicate Link Connection = %d to %d") % in % out);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Link Connection = %d to %d") % in % out);
continue;
} else {
connect_array.push_back (connect_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -32,7 +32,7 @@
map_stat = detector_map.insert (Int_Map_Data (detector_rec.Detector (), (int) detector_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Detector Number = ") << detector_rec.Detector ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Detector Number = ") << detector_rec.Detector ();
continue;
} else {
detector_array.push_back (detector_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
map_stat = event_map.insert (Event_Map_Data (event_index, (int) event_array.size ()));
if (!map_stat.second) {
- Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") %
event_index.Household () % event_index.Person () % event_index.Tour () %
event_index.Trip () % event_index.Event ());
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -49,7 +49,7 @@
map_stat = hhold_map.insert (Int_Map_Data (household_rec.Household (), index));
if (!map_stat.second) {
- Warning ("Duplicate Household Number = ") << household_rec.Household ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Household Number = ") << household_rec.Household ();
} else {
hhold_array.push_back (household_rec);
count += (int) household_rec.size ();
@@ -64,7 +64,7 @@
person_stat = person_map.insert (Person_Map_Data (person_index, index));
if (!person_stat.second) {
- Warning ("Duplicate Person Number = ") << person_index.Household () << "." << person_index.Person ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Person Number = ") << person_index.Household () << "." << person_index.Person ();
}
}
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -167,7 +167,7 @@
} else if (lane_type [lane] < 0 && group == -1) {
ln = Make_Lane_Range (&(*dir_itr), lane, lane);
- Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
}
lane_type [lane] = group;
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -44,7 +44,7 @@
map_stat = line_map.insert (Int_Map_Data (line_rec.Route (), (int) line_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Route Number = ") << line_rec.Route ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Route Number = ") << line_rec.Route ();
} else {
line_array.push_back (line_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -51,7 +51,7 @@
map_stat = link_map.insert (Int_Map_Data (link_rec.Link (), (int) link_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Link Number = ") << link_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Number = ") << link_rec.Link ();
continue;
} else {
@@ -81,7 +81,7 @@
map_stat = shape_map.insert (Int_Map_Data (shape_rec.Link (), index));
if (!map_stat.second) {
- Warning ("Duplicate Shape Link = ") << shape_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Shape Link = ") << shape_rec.Link ();
} else {
shape_array.push_back (shape_rec);
link_rec.Shape (index);
@@ -99,7 +99,7 @@
map_stat = dir_map.insert (Int_Map_Data (ab_rec.Link_Dir (), index));
if (!map_stat.second) {
- Warning ("Duplicate Link Direction Number = ") << ab_rec.Link_Dir ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Direction Number = ") << ab_rec.Link_Dir ();
continue;
} else {
dir_array.push_back (ab_rec);
@@ -110,7 +110,7 @@
ab_stat = ab_map.insert (Int2_Map_Data (Int2_Key (anode, bnode), index));
if (!ab_stat.second && !exe->Default_Link_Data ()) {
- Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % anode % bnode);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % anode % bnode);
}
}
}
@@ -120,7 +120,7 @@
map_stat = dir_map.insert (Int_Map_Data (ba_rec.Link_Dir (), index));
if (!map_stat.second) {
- Warning ("Duplicate Link Direction Number = ") << ba_rec.Link_Dir ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Direction Number = ") << ba_rec.Link_Dir ();
continue;
} else {
dir_array.push_back (ba_rec);
@@ -131,7 +131,7 @@
ab_stat = ab_map.insert (Int2_Map_Data (Int2_Key (bnode, anode), index));
if (!ab_stat.second) {
- Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % bnode % anode);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % bnode % anode);
}
}
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -32,7 +32,7 @@
map_stat = location_map.insert (Int_Map_Data (location_rec.Location (), (int) location_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Location Number = ") << location_rec.Location ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Location Number = ") << location_rec.Location ();
continue;
} else {
if (!file.Setback_Flag () && location_rec.Setback () == 0) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -37,7 +37,7 @@
map_stat = node_map.insert (Int_Map_Data (node_rec.Node (), (int) node_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Node Number = ") << node_rec.Node ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Node Number = ") << node_rec.Node ();
continue;
} else {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -44,7 +44,7 @@
map_stat = parking_map.insert (Int_Map_Data (parking_rec.Parking (), (int) parking_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Parking Number = ") << parking_rec.Parking ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Parking Number = ") << parking_rec.Parking ();
} else {
parking_array.push_back (parking_rec);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -100,7 +100,7 @@
Movement_Itr move_itr = phasing_ptr->begin ();
phasing_itr->push_back (*move_itr);
} else {
- Warning (String ("Duplicate Phasing Plan %d-%d") % phasing_ptr->Phasing () % phasing_ptr->Phase ());
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Phasing Plan %d-%d") % phasing_ptr->Phasing () % phasing_ptr->Phase ());
}
keep = false;
break;
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
trip_stat = plan_trip_map.insert (Trip_Map_Data (trip_index, (int) plan_skim_array.size ()));
if (!trip_stat.second) {
- Warning (String ("Duplicate Plan Skim Index = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Skim Index = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
plan_skim_array.push_back (plan_skim_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -109,7 +109,7 @@
trip_stat = plan_trip_map.insert (Trip_Map_Data (trip_index, index));
if (!trip_stat.second) {
- Warning (String ("Duplicate Plan Index = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Index = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
keep_flag = false;
}
@@ -120,7 +120,7 @@
time_stat = plan_time_map.insert (Time_Map_Data (time_index, index));
if (!time_stat.second) {
- Warning (String ("Duplicate Plan Index = %s-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Index = %s-%d-%d") %
time_index.Start ().Time_String () %
time_index.Household () % time_index.Person ());
keep_flag = false;
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -46,7 +46,7 @@
map_stat = route_map.insert (Int_Map_Data (route_rec.Route (), (int) route_nodes_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Route Number = ") << route_rec.Route ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Route Number = ") << route_rec.Route ();
} else {
route_nodes_array.push_back (route_rec);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -38,7 +38,7 @@
map_stat = select_map.insert (Select_Map_Data (trip_index, select_data));
if (!map_stat.second) {
- Warning (String ("Duplicate Selection Record = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Selection Record = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
if (selection_rec.Household () > select_map.Max_Household ()) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -44,7 +44,7 @@
map_stat = shape_map.insert (Int_Map_Data (shape_rec.Link (), (int) shape_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Link Number = ") << shape_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Number = ") << shape_rec.Link ();
} else {
shape_array.push_back (shape_rec);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -86,7 +86,7 @@
timing40_stat = timing40_map.insert (Timing40_Map_Data (time_itr->Timing (), timing40_rec));
if (!timing40_stat.second && timing40_stat.first->second.Signal () != index) {
- Warning ("Duplicate Signal Timing Number = ") << time_itr->Timing ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Signal Timing Number = ") << time_itr->Timing ();
continue;
}
time_itr->Timing (num);
@@ -99,7 +99,7 @@
}
}
if (!map_stat.second) {
- Warning ("Duplicate Signal Number = ") << signal_rec.Signal ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Signal Number = ") << signal_rec.Signal ();
} else {
//---- set the node controls ----
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -34,7 +34,7 @@
link_ptr = &link_array [dir_ptr->Link ()];
if (dir_ptr->Sign () > 0) {
- Warning ("Duplicate Sign Record on Link ") << link_ptr->Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Sign Record on Link ") << link_ptr->Link ();
continue;
}
if (dir_ptr->Dir () == 0) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -30,7 +30,7 @@
map_stat = stop_map.insert (Int_Map_Data (stop_rec.Stop (), (int) stop_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Stop Number = ") << stop_rec.Stop ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Stop Number = ") << stop_rec.Stop ();
continue;
} else {
stop_array.push_back (stop_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
map_stat = traveler_map.insert (Traveler_Map_Data (traveler_index, (int) traveler_array.size ()));
if (!map_stat.second) {
- Warning (String ("Duplicate Traveler Record = %d-%d-%s") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Traveler Record = %d-%d-%s") %
traveler_index.Household () % traveler_index.Person () % traveler_index.Time ().Time_String ());
continue;
} else {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -65,7 +65,7 @@
map_stat = trip_map.insert (Trip_Map_Data (trip_index, index));
if (!map_stat.second) {
- Warning (String ("Duplicate Trip Record = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Trip Record = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
trip_array.push_back (trip_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
map_stat = veh_type_map.insert (Int_Map_Data (veh_type_rec.Type (), (int) veh_type_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Vehicle Type Number = ") << veh_type_rec.Type ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Vehicle Type Number = ") << veh_type_rec.Type ();
continue;
} else {
veh_type_array.push_back (veh_type_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -109,7 +109,6 @@
}
}
}
-
if (file.Lane_Use_Flag () && dir_ptr->Use_Index () > 0) {
data_ptr = link_period.Period_Ptr (i)->Data_Ptr (dir_ptr->Use_Index ());
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -29,7 +29,7 @@
map_stat = zone_map.insert (Int_Map_Data (zone_rec.Zone (), (int) zone_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Zone Number = ") << zone_rec.Zone ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Zone Number = ") << zone_rec.Zone ();
continue;
} else {
zone_array.push_back (zone_rec);
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -127,5 +127,36 @@
}
}
}
+
+ //---- smoothing keys ----
+
+ if (Check_Control_Key (SMOOTH_GROUP_SIZE)) {
+
+ //---- read the number smooth records ----
+
+ int size = Get_Control_Integer (SMOOTH_GROUP_SIZE);
+
+ //---- read the percent distributed forward ----
+
+ double forward = Get_Control_Double (PERCENT_MOVED_FORWARD);
+
+ //---- read the percent distributed backwarde ----
+
+ double backward = Get_Control_Double (PERCENT_MOVED_BACKWARD);
+
+ //---- number of iterations ----
+
+ int niter = Get_Control_Integer (SMOOTHING_ITERATIONS);
+
+ //---- read the circular smoothing flag ----
+
+ bool loop_flag = Get_Control_Flag (CIRCULAR_GROUP_FLAG);
+
+ //---- initialize the smooth data ----
+
+ smooth_data.Setup (time_periods.Num_Periods (), niter, loop_flag, size, forward, backward);
+
+ if (!smooth_data.Status ()) Error ("Smooth Parameters are Illogical");
+ }
}
}
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -37,6 +37,11 @@
{ EQUATION_PARAMETERS, "EQUATION_PARAMETERS", LEVEL1, OPT_KEY, LIST_KEY, "BPR, 0.15, 4.0, 0.75" , EQUATION_RANGE, NO_HELP },
{ CAPACITY_FACTOR_FUNCTIONS, "CAPACITY_FACTOR_FUNCTIONS", LEVEL1, OPT_KEY, LIST_KEY, "0" , "0..100", NO_HELP},
{ TRAVELER_TYPE_GROUP, "TRAVELER_TYPE_GROUP", LEVEL0, OPT_KEY, LIST_KEY, "NONE", RANGE_RANGE, NO_HELP},
+ { SMOOTH_GROUP_SIZE, "SMOOTH_GROUP_SIZE", LEVEL0, OPT_KEY, INT_KEY, "3", "0, >= 3", NO_HELP},
+ { PERCENT_MOVED_FORWARD, "PERCENT_MOVED_FORWARD", LEVEL0, OPT_KEY, FLOAT_KEY, "20", "> 0.0", NO_HELP},
+ { PERCENT_MOVED_BACKWARD, "PERCENT_MOVED_BACKWARD", LEVEL0, OPT_KEY, FLOAT_KEY, "20", "> 0.0", NO_HELP},
+ { SMOOTHING_ITERATIONS, "SMOOTHING_ITERATIONS", LEVEL0, OPT_KEY, INT_KEY, "3", "> 0", NO_HELP},
+ { CIRCULAR_GROUP_FLAG, "CIRCULAR_GROUP_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "TRUE", BOOL_RANGE, NO_HELP},
END_CONTROL
};
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj 2018-01-23 18:40:46 UTC (rev 1701)
@@ -22,6 +22,7 @@
<ClCompile Include="Control.cpp" />
<ClCompile Include="Execute.cpp" />
<ClCompile Include="Flow_Time_Service.cpp" />
+ <ClCompile Include="Smooth_Performance.cpp" />
<ClCompile Include="Update_Times.cpp" />
</ItemGroup>
<ItemGroup>
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters 2018-01-23 18:40:46 UTC (rev 1701)
@@ -23,6 +23,9 @@
<ClCompile Include="Update_Times.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Smooth_Performance.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\Include\Flow_Time_Service.hpp">
Added: version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp (rev 0)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -0,0 +1,160 @@
+//*********************************************************
+// Smooth_Performance.cpp - smooth the performance data
+//*********************************************************
+
+#include "Flow_Time_Service.hpp"
+
+//---------------------------------------------------------
+// Smooth_Performance
+//---------------------------------------------------------
+
+void Flow_Time_Service::Smooth_Performance (bool time_flag)
+{
+ int index, period, num_periods;
+ double value, length, total, volume;
+
+ Perf_Itr perf_itr;
+ Perf_Data *perf_ptr;
+ Perf_Period_Itr period_itr;
+ Perf_Period *period_ptr;
+ Dir_Data *dir_ptr;
+ Link_Data *link_ptr;
+
+ num_periods = (int) perf_period_array.size ();
+ if (num_periods < 3) return;
+
+ //---- process each link direction ----
+
+ period_itr = perf_period_array.begin ();
+
+ for (index = 0, perf_itr = period_itr->begin (); perf_itr != period_itr->end (); perf_itr++, index++) {
+
+ if (index < (int) dir_array.size ()) {
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+ length = link_ptr->Length ();
+ } else {
+ length = perf_itr->Time0 () * (Metric_Flag () ? 27.78 : 44.0); // 30 mph
+ }
+
+ //---- smooth the volume ----
+
+ switch (Link_Flow_Type ()) {
+ default:
+ case VOLUME_DATA:
+ volume = perf_itr->Volume ();
+ break;
+ case ENTER_DATA:
+ volume = perf_itr->Enter ();
+ break;
+ case EXIT_DATA:
+ volume = perf_itr->Exit ();
+ break;
+ case FLOW_DATA:
+ volume = perf_itr->Veh_Dist () / length;
+ break;
+ }
+ total = volume;
+
+ smooth_data.Input (0, volume);
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ switch (Link_Flow_Type ()) {
+ default:
+ case VOLUME_DATA:
+ volume = perf_ptr->Volume ();
+ break;
+ case ENTER_DATA:
+ volume = perf_ptr->Enter ();
+ break;
+ case EXIT_DATA:
+ volume = perf_ptr->Exit ();
+ break;
+ case FLOW_DATA:
+ volume = perf_ptr->Veh_Dist () / length;
+ break;
+ }
+ smooth_data.Input (period, volume);
+ }
+ smooth_data.Smooth ();
+
+ if (total > 0) {
+ perf_itr->Factor_Flows (smooth_data.Output (0) / total);
+ } else {
+ value = smooth_data.Output (0);
+
+ if (value > 0) {
+ perf_itr->Volume (value);
+ perf_itr->Persons (value);
+ perf_itr->SOV (value);
+ perf_itr->Enter (value);
+ perf_itr->Exit (value);
+ perf_itr->Veh_Dist (value * length);
+ perf_itr->Veh_Time (value * perf_itr->Time0 ());
+ }
+ }
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ switch (Link_Flow_Type ()) {
+ default:
+ case VOLUME_DATA:
+ volume = perf_ptr->Volume ();
+ break;
+ case ENTER_DATA:
+ volume = perf_ptr->Enter ();
+ break;
+ case EXIT_DATA:
+ volume = perf_ptr->Exit ();
+ break;
+ case FLOW_DATA:
+ volume = perf_ptr->Veh_Dist () / length;
+ break;
+ }
+ if (volume > 0) {
+ perf_ptr->Factor_Flows (smooth_data.Output (period) / volume);
+ } else {
+ value = smooth_data.Output (period);
+
+ if (value > 0) {
+ perf_ptr->Volume (value);
+ perf_ptr->Persons (value);
+ perf_ptr->SOV (value);
+ perf_ptr->Enter (value);
+ perf_ptr->Exit (value);
+ perf_ptr->Veh_Dist (value * length);
+ perf_ptr->Veh_Time (value * perf_ptr->Time0 ());
+ }
+ }
+ }
+
+ if (!time_flag) continue;
+
+ //---- smooth the travel time ----
+
+ smooth_data.Input (0, (double) perf_itr->Time ());
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ smooth_data.Input (period, (double) perf_ptr->Time ());
+ }
+ smooth_data.Smooth ();
+
+ perf_itr->Update_Time (Dtime (smooth_data.Output (0)), (int) length);
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ perf_ptr->Update_Time (Dtime (smooth_data.Output (period)), (int) length);
+ }
+ }
+}
+
Modified: version7/branches/aecom/Transims70/Include/Converge_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Converge_Service.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Converge_Service.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -61,6 +61,11 @@
virtual bool Get_Plan_Data (Plan_File &file, Plan_Data &data);
virtual bool Get_Location_Data (Location_File &file, Location_Data &data);
+ enum Selection_Types {
+ NO_SELECT_TYPE, PROBLEM_SELECT_TYPE, PARKING_PROBLEM_TYPE, BOARDING_PROBLEM_TYPE, TIME_RATIO_TYPE,
+ PENALTY_RATIO_TYPE, TRAVEL_TIME_TYPE, IMPEDANCE_TYPE, SELECT_DIFFERENCE_TYPE, BUILD_SELECT_TYPE, MAX_SELECTION_TYPE
+ };
+
protected:
enum Converge_Service_Keys {
APPLICATION_METHOD = CONVERGE_SERVICE_OFFSET, PROCESS_ALL_TRIPS,
@@ -199,7 +204,7 @@
double select_weight, sum_time_ratio, sum2_time_ratio, max_time_ratio;
int iteration, iteration_num, max_speed_updates, num_trip_sel, num_trip_rec;
- int num_time_updates, potential;
+ int num_time_updates, potential, potential_score_types [MAX_SELECTION_TYPE], select_score_types [MAX_SELECTION_TYPE];
double min_speed_diff, percent_selected;
@@ -222,7 +227,7 @@
void Step_Output (void);
bool Set_Trip_Data (Trip_Data &trip_rec);
- int Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan);
+ int Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type);
void Update_Travel_Times (Dtime first_time = 0, bool gap_flag = true);
virtual void Save_Gap_Data (Dtime tod, double old_veh_time, double new_veh_time);
Modified: version7/branches/aecom/Transims70/Include/Data_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Data_Service.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Data_Service.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -196,6 +196,9 @@
bool No_Route_Warnings (void) { return (no_warning_flag); }
void No_Route_Warnings (bool flag) { no_warning_flag = flag; }
+ bool No_Read_Warnings (void) { return (no_read_warning); }
+ void No_Read_Warnings (bool flag) { no_read_warning = flag; }
+
int Congested_Ratio (void) { return (congested_ratio); }
void Congested_Ratio (int value) { congested_ratio = value; }
@@ -488,7 +491,7 @@
bool _convert_flag, ratio_flag, loc_xy_flag, sum_flow_flag, clear_flow_flag, time_table_flag, transit_veh_flag, fare_flag;
bool person_map_flag, lane_use_flows, update_bearings, bearing_warnings, transit_connect_flag, detector_flag, zone_loc_flag;
- bool no_warning_flag;
+ bool no_warning_flag, no_read_warning;
int bearing_offset, num_fare_zone, congested_ratio, maximum_ratio, max_zone, num_lane_flows, toll_function;
Integers perf_veh_type_map;
};
Modified: version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -7,6 +7,7 @@
#include "Select_Service.hpp"
#include "Equation.hpp"
+#include "Smooth_Data.hpp"
//---------------------------------------------------------
// Flow_Time_Service - volume delay equation processing
@@ -37,7 +38,8 @@
enum Flow_Time_Service_Keys {
UPDATE_FLOW_RATES = FLOW_TIME_SERVICE_OFFSET, UPDATE_TURNING_MOVEMENTS, CLEAR_INPUT_FLOW_RATES,
UPDATE_TRAVEL_TIMES, TIME_UPDATE_RATE, LINK_FLOW_FACTOR, LINK_FLOW_TYPE, EQUATION_PARAMETERS,
- CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP,
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD,
+ PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG,
};
void Flow_Time_Service_Keys (int *keys = 0);
@@ -50,6 +52,8 @@
int Apply_Equation (int number, int time0, double volume, int capacity, int length, int lanes) {
return (equation.Apply_Equation (number, time0, volume, capacity, length, lanes));}
+ void Smooth_Performance (bool time_updates = false);
+
void Update_Travel_Times (int time_averaging = NO_AVERAGING, int iteration = 1, Dtime first_time = 0);
virtual void Save_Gap_Data (Dtime tod, double old_veh_time, double new_veh_time)
@@ -56,6 +60,8 @@
{
tod = 0; old_veh_time = new_veh_time = 0.0;
}
+
+ Smooth_Data smooth_data;
private:
Modified: version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -136,6 +136,8 @@
void Initialize_Tolls (void);
+ Shorts & Tolls (void) { return (tolls); }
+
void Clear (void)
{
dir_index = next_index = -1, low_lane = high_lane = -1; type = 0; toll = min_rate = max_rate = min_delay = max_delay = speed = capacity = 0;
Modified: version7/branches/aecom/Transims70/Include/Smooth_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Smooth_Data.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Smooth_Data.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -25,6 +25,8 @@
bool Interpolate (int num_in, double increment, int iterations = 3,
int group_size = 3, double forward = 20.0, double backward = 20.0, bool dup_flag = true);
+ bool Status (void) { return (status); }
+
bool Num_Input (int value);
void Input (int num, double value) { if (Check_In (num)) input [num] = value; };
double Input (int num) { return ((Check_In (num)) ? input [num] : 0); }
@@ -36,18 +38,11 @@
double Output (int num) { return ((Check_Out (num)) ? output [num] : 0.0); }
int Smooth (int num = 0);
-
- void Add_Keys (void);
- bool Read_Control (void);
void Duplicate_Flag (bool flag) { dup_flag = flag; }
void Num_Subdivide (int value) { num_sub = value; }
protected:
- enum SmoothData_Keys {
- SMOOTH_GROUP_SIZE = SMOOTH_DATA_OFFSET, PERCENT_MOVED_FORWARD, PERCENT_MOVED_BACKWARD,
- NUMBER_OF_ITERATIONS, CIRCULAR_GROUP_FLAG,
- };
bool Check_In (int num) { return (num >= 0 && num < num_in); }
bool Check_Out (int num) { return (num >= 0 && num < num_out); }
@@ -56,7 +51,7 @@
private:
int num_in, num_out, niter, size, num_sub;
double increment, forward, backward, weight;
- bool loop_flag, dup_flag, interpolate;
+ bool loop_flag, dup_flag, interpolate, status;
Doubles input, output, current;
};
#endif
Modified: version7/branches/aecom/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -34,8 +34,7 @@
#define PROBLEM_OUTPUT_OFFSET 1400
#define VOLUME_SPEED_OUTPUT_OFFSET 1420
-#define SMOOTH_DATA_OFFSET 1500
-#define DIFFERENCE_DATA_OFFSET 1540
+#define DIFFERENCE_DATA_OFFSET 1500
#define END_CONTROL { 0, "", LEVEL0, OPT_KEY, END_KEY, "", "", NO_HELP }
@@ -185,7 +184,7 @@
#define APPLICATION_RANGE "TRAVEL_PLANS, LINK_FLOWS, DUE_PLANS, DTA_FLOWS"
#define COORD_SYSTEM_RANGE "LATLONG, DEGREES/MILLION_DEGREES or STATEPLANE/UTM, code, FEET/METERS/MILES/KILOMETERS"
#define COORD_ADJUST_RANGE "X Offset, Y Offset, X Factor, Y Factor"
-#define AVERAGING_RANGE "NO, YES, MSA, SKIP"
+#define AVERAGING_RANGE "NO, YES, MSA, SKIP, SMOOTH"
#define AGGREGATION_RANGE "TOTAL, AVERAGE, MINIMUM, MAXIMUM"
enum Execution_Type { //----- execution type ----
@@ -485,7 +484,7 @@
//---- Averaging Type ----
enum Averaging_Type {
- NO_AVERAGING, YES_AVERAGING, MSA_AVERAGING, SKIP_AVERAGING
+ NO_AVERAGING, YES_AVERAGING, MSA_AVERAGING, SKIP_AVERAGING, SMOOTH_AVERAGING
};
//---- Selection Method ----
Modified: version7/branches/aecom/Transims70/NetMerge/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/Execute.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/NetMerge/Execute.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -17,6 +17,7 @@
//---- read the merge files ----
merge_flag = true;
+ No_Read_Warnings (true);
//---- merge the node files ----
@@ -69,7 +70,7 @@
if (lane_use_flag) {
int num_lane_use = (int) lane_use_array.size ();
- Read_Lane_Uses (lane_use_file);
+ Merge_Lane_Use ();
Print (1, "Number of Merge Lane Use Records = ") << ((int) lane_use_array.size () - num_lane_use);
}
@@ -160,8 +161,8 @@
//----- write the output files ----
- Write_Nodes ();
- Write_Links ();
+ if (System_File_Flag (NEW_NODE)) Write_Nodes ();
+ if (System_File_Flag (NEW_LINK)) Write_Links ();
if (System_File_Flag (NEW_SHAPE)) Write_Shapes ();
if (System_File_Flag (NEW_POCKET)) Write_Pockets ();
if (System_File_Flag (NEW_LANE_USE)) Write_Lane_Uses ();
Added: version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp (rev 0)
+++ version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -0,0 +1,61 @@
+//*********************************************************
+// Merge_Lane_Use.cpp - merge lane use file
+//*********************************************************
+
+#include "NetMerge.hpp"
+
+//---------------------------------------------------------
+// Initialize_Lane_Uses
+//---------------------------------------------------------
+
+void NetMerge::Merge_Lane_Use (void)
+{
+ int first_index, num;
+
+ Lane_Use_Data lane_use_rec, *lane_use_ptr;
+ Dir_Data *dir_ptr;
+
+ Show_Message (String ("Reading %s -- Record") % lane_use_file.File_Type ());
+ Set_Progress ();
+
+ while (lane_use_file.Read ()) {
+ Show_Progress ();
+
+ lane_use_rec.Clear ();
+
+ if (Get_Lane_Use_Data (lane_use_file, lane_use_rec)) {
+
+ dir_ptr = &dir_array [lane_use_rec.Dir_Index ()];
+
+ first_index = dir_ptr->First_Lane_Use ();
+ if (first_index < 0) continue;
+
+ for (num = first_index; num >= 0; num = lane_use_ptr->Next_Index ()) {
+ lane_use_ptr = &lane_use_array [num];
+
+ if (lane_use_rec.Low_Lane () != lane_use_ptr->Low_Lane ()) continue;
+ if (lane_use_rec.High_Lane () != lane_use_ptr->High_Lane ()) continue;
+ if (lane_use_rec.Type () != lane_use_ptr->Type ()) continue;
+ if (lane_use_rec.Use () != lane_use_ptr->Use ()) continue;
+ if (lane_use_rec.Min_Veh_Type () != lane_use_ptr...
[truncated message content] |