mcdp {
provides students_served [Nat]
provides monitor_students_served [Nat]
provides wheelchair_students_served [Nat]
requires total_cost [USD]
requires emissions [kg]
requires students_unserved [Nat]
requires monitor_students_unserved [Nat]
requires wheelchair_students_unserved [Nat]
requires stops_used [Nat]
requires unique_stops_used [Nat]
# bird algorithm configurations
requires bird_method [`bird_method]
requires bird_lambda [`bird_lambda]
requires bird_partial [`bird_partial]
requires bird_dwell [`bird_dwell]
requires bird_arrival_window [`bird_arrival_window]
requires bird_avg_speed [`bird_avg_speed]
requires student_policy [`student_policy]
sub rs = instance `routing_service
# sub g = instance `guidelines
sub bc = instance `fleet_bus_count
sub dr = instance `driver
sub mo = instance `monitor
sub mt = instance `maintenance
sub fu = instance `fuel
# expose the route catalogue functionality to the top-level query
provided students_served <= students_served provided by rs
provided monitor_students_served <= monitor_students_served provided by rs
provided wheelchair_students_served <= wheelchair_students_served provided by rs
# expose route catalogue requirements to the top-level query
required students_unserved >= students_unserved required by rs
required monitor_students_unserved >= monitor_students_unserved required by rs
required wheelchair_students_unserved >= wheelchair_students_unserved required by rs
required stops_used >= stops_used required by rs
required unique_stops_used >= unique_stops_used required by rs
required bird_method >= bird_method required by rs
required bird_lambda >= bird_lambda required by rs
required bird_partial >= bird_partial required by rs
required bird_dwell >= bird_dwell required by rs
required bird_arrival_window >= bird_arrival_window required by rs
required bird_avg_speed >= bird_avg_speed required by rs
required student_policy >= student_policy required by rs
# required student_policy >= student_policy required by g
# policy/guideline constraints
# students_served required by g <= students_served provided by rs
# monitor_students_served required by g <= monitor_students_served provided by rs
# wheelchair_students_served required by g <= wheelchair_students_served provided by rs
# students_unserved required by rs <= students_unserved provided by g
# monitor_students_unserved required by rs <= monitor_students_unserved provided by g
# wheelchair_students_unserved required by rs <= wheelchair_students_unserved provided by g
required total_cost >= (
fuel_cost required by fu +
maintenance_cost required by mt +
driver_cost required by dr +
monitor_cost required by mo +
capital_cost required by bc
)
# (
# fuel_cost required by fu +
# maintenance_cost required by mt +
# driver_cost required by dr +
# monitor_cost required by mo +
# capital_cost required by bc
# ) <= roi_budget provided by g
# emissions
required emissions >= emissions required by fu
# routing requirements must be supported by cost resources
monitor_buses required by rs <= monitor_buses provided by mo
used_C required by rs <= used_C provided by dr
used_B required by rs <= used_B provided by dr
used_BWC required by rs <= used_BWC provided by dr
used_WC required by rs <= used_WC provided by dr
distance_C required by rs <= distance_C provided by fu
distance_B required by rs <= distance_B provided by fu
distance_BWC required by rs <= distance_BWC provided by fu
distance_WC required by rs <= distance_WC provided by fu
distance_C required by rs <= distance_C provided by mt
distance_B required by rs <= distance_B provided by mt
distance_BWC required by rs <= distance_BWC provided by mt
distance_WC required by rs <= distance_WC provided by mt
runtime_C required by rs <= runtime_C provided by mt
runtime_B required by rs <= runtime_B provided by mt
runtime_BWC required by rs <= runtime_BWC provided by mt
runtime_WC required by rs <= runtime_WC provided by mt
# routing fleet requirements must be met by the purchased fleet mix
used_C required by rs <= available_C provided by bc
used_B required by rs <= available_B provided by bc
used_BWC required by rs <= available_BWC provided by bc
used_WC required by rs <= available_WC provided by bc
}