/* christmas_demand.pl */
christmas_demand_daily( BaseYear, TlStartDate, TlEndDate, Xs, Ys ) :-
christmas_demand_key_points( BaseYear, KeyPoints ),
% A list of kp(Date,DI,Reason) keypoints.
maplist( { TlStartDate } / [ kp(Date,DI,_Reason), Offset-DI ] >> date_interval( Date, TlStartDate, days(Offset) )
, KeyPoints
, OffsetsAndDIs
),
% A list of Date-DI keypoints.
TlStartOffset = 0,
date_interval( TlEndDate, TlStartDate, days(TlEndOffset) ),
time_series_segments_to_points( TlStartOffset, TlEndOffset, OffsetsAndDIs, Xs, Ys ).
% A list of date offsets Xs, and a list of demand increments Ys.
christmas_demand_key_points( BaseYear, KeyPoints ) :-
findall( kp(Date,DI,Reason)
, christmas_demand_key_point( BaseYear, Date, DI, Reason )
, KeyPoints
).
christmas_demand_key_point( BaseYear, Date, DI, Reason ) :-
christmas_demand( DR, DI, Reason ),
christmas_demand_eval_daterel( DR, BaseYear, Date ).
christmas_demand( 'Christmas Eve'-16
, 0
, "Just before start of school holidays and early vacation departures. Increased demand as families travel for extended holiday stays."
).
christmas_demand( 'Christmas Eve'-14
, 10
, "Start of school holidays and early vacation departures. Increased demand as families travel for extended holiday stays."
).
christmas_demand( 'Christmas Eve'-2
, 20
, "Significant increase in demand as travellers make final journeys to their holiday destinations."
).
christmas_demand( 'Christmas Eve'
, 30
, "Peak travel day with highest demand as individuals rush to reach family and holiday destinations."
).
christmas_demand( 'Christmas Day'
, 20
, "Slightly reduced demand compared to Christmas Eve, as most travellers have already reached their destinations."
).
christmas_demand( 'Boxing Day'
, 30
, "Renewed surge in travel as individuals take advantage of the holiday for short vacations or return trips."
).
christmas_demand( 'New Year\'s Eve'-1
, 40
, "Rising demand for travel to major cities for New Year celebrations and events."
).
christmas_demand( 'New Year\'s Eve'
, 50
, "Peak demand for New Year's Eve celebrations, particularly in major cities known for public events and parties."
).
christmas_demand( 'New Year\'s Day'
, 20
, "Decreased demand as many travelers recover from New Year's Eve celebrations and begin their return journeys home."
).
christmas_demand( 'Epiphany'-1
, 10
, "Moderate increase in travel, particularly in regions where Epiphany is a significant holiday, marking the end of the extended holiday season."
).
christmas_demand( 'Epiphany'+1
, 0
, "End of extended holiday season."
).
christmas_demand_eval_daterel( 'Christmas Eve', Y, date(Y,12,24) ).
christmas_demand_eval_daterel( 'Christmas Day', Y, date(Y,12,25) ).
christmas_demand_eval_daterel( 'Boxing Day', Y, date(Y,12,26) ).
christmas_demand_eval_daterel( 'New Year\'s Eve', Y, date(Y,12,31) ).
christmas_demand_eval_daterel( 'New Year\'s Day', Y, date(YN,1,1) ) :-
YN is Y + 1.
christmas_demand_eval_daterel( 'Epiphany', Y, date(YN,1,6) ) :-
YN is Y + 1.
christmas_demand_eval_daterel( DR+Offset, Y, Date ) :-
christmas_demand_eval_daterel( DR, Y, BaseDate ),
date_add( BaseDate, days(Offset), Date ).
christmas_demand_eval_daterel( DR-Offset, Y, Date ) :-
christmas_demand_eval_daterel( DR, Y, BaseDate ),
date_add( BaseDate, days(-Offset), Date ).