Timetable automation: Bias wait time adjustments in positive direction
Remove case where wait time is set directly when it is less than half the current value, this is still used for travel times.
This commit is contained in:
@@ -911,11 +911,7 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|||||||
int32 new_time;
|
int32 new_time;
|
||||||
if (travelling) {
|
if (travelling) {
|
||||||
new_time = time_taken;
|
new_time = time_taken;
|
||||||
} else {
|
if (new_time > (int32)timetabled * 4) {
|
||||||
new_time = time_loading;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (new_time > (int32)timetabled * 4 && travelling) {
|
|
||||||
/* Possible jam, clear time and restart timetable for all vehicles.
|
/* Possible jam, clear time and restart timetable for all vehicles.
|
||||||
* Otherwise we risk trains blocking 1-lane stations for long times. */
|
* Otherwise we risk trains blocking 1-lane stations for long times. */
|
||||||
ChangeTimetable(v, v->cur_timetable_order_index, 0, travel_field ? MTF_TRAVEL_TIME : MTF_WAIT_TIME, true);
|
ChangeTimetable(v, v->cur_timetable_order_index, 0, travel_field ? MTF_TRAVEL_TIME : MTF_WAIT_TIME, true);
|
||||||
@@ -926,14 +922,25 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (new_time >= (int32)timetabled / 2) {
|
} else if (new_time >= (int32)timetabled / 2) {
|
||||||
/* Compute running average, with sign conversion to avoid negative overflow. */
|
/* Compute running average, with sign conversion to avoid negative overflow.
|
||||||
|
* This is biased to favour negative adjustments */
|
||||||
if (new_time < (int32)timetabled) {
|
if (new_time < (int32)timetabled) {
|
||||||
new_time = ((int32)timetabled * 3 + new_time * 2 + 2) / 5;
|
new_time = ((int32)timetabled * 3 + new_time * 2 + 2) / 5;
|
||||||
} else {
|
} else {
|
||||||
new_time = ((int32)timetabled * 9 + new_time + 5) / 10;
|
new_time = ((int32)timetabled * 9 + new_time + 5) / 10;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* new time is less than hald old time, set value directly */
|
/* new time is less than half the old time, set value directly */
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
new_time = time_loading;
|
||||||
|
/* Compute running average, with sign conversion to avoid negative overflow.
|
||||||
|
* This is biased to favour positive adjustments */
|
||||||
|
if (new_time > (int32)timetabled) {
|
||||||
|
new_time = ((int32)timetabled * 3 + new_time * 2 + 2) / 5;
|
||||||
|
} else {
|
||||||
|
new_time = ((int32)timetabled * 9 + new_time + 5) / 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_time < 1) new_time = 1;
|
if (new_time < 1) new_time = 1;
|
||||||
|
Reference in New Issue
Block a user