The Rules of the Run Cut Part II: The Rule Version
Hastus is a complex program that when used optimally allows for efficient schedules and run cuts. However, it does not do so automatically - the user needs to input parameters that the software will use to create the schedules and run cuts. The parameters are inserted into what is known as a rule version. A rule version is a set of specific requirements that tell Hastus what kind of schedules and run cuts to create in operations such as MinBus or CrewOpt. Other scheduling software, such as Trapeze, have similar setups. Let us look at some examples of lines from the rules that a Southern California transit agency uses in its operation.
"Duty B Pce start time <= 17:00 10.00 Proportional"
"Duty" refers to the object type the rule is for. Rules are usually defined for different object types such as duties, pieces, trips, blocks, breaks, and reliefs. For more information about the above object types please refer to my series on how to design bus schedules .
"B" refers to duty type B, split runs. Part I of this series describes the different duty types .
"Pce start time <= 17:00" means parts of a split run should start before 5:00 PM. At this agency for safety reasons all night runs are straights; no reliefs are supposed to happen after 6:00 PM.
"10.00 Proportional" refers to the penalty amount "10.00" and the penalty type "Proportional." When Hastus generates a run cut solution each duty created will have a cost that consists of the total penalty amount for the run. The higher the total cost, the worse the solution. Hastus will attempt to create a run cut solution with the lowest possible cost. "10.00 Proportional" means that for every minute a piece starts after 17:00 the cost will increase by 10. If the penalty type was fixed, then a cost of 10 would be assed for every piece that starts after 17:00. If the penalty type was squared, then for every minute a piece started after 17:00 the cost would be equal to the number of minutes the piece started after 17:00 squared. Note that the "cost" is not a monetary cost , it is only used by Hastus for the purpose of the run cut. There is a final penalty type called "weight"; the cost associated with this penalty is so high that I have never seen it violated by Hastus. If no value and penalty type are written for a particular rule then the rule will never be violated. For example, in this line:
"Duty Dty spread <= 12h00 "
the spread time for any duty created by Hastus will never exceed twelve hours. Of course, you can manually override any rule at any time to create any solution you would like.
You can assign more than one kind of penalty to a particular rule. For example, the transit agency has this rule:
"Block Blk duration [ ] 14h30 17h45 10.00 Proportional Block Blk duration [ ] 14h30 17h45 25.00 Fixed"
Under this rule, any block created by Hastus that is less than fourteen hours and forty-five minutes or more than seventeen hours and forty-five minutes will have a penalty cost of 25 * 10 * the number of minutes the block is shorter than fourteen hours and thirty minutes or more than seventeen hours and forty-five minutes.
To save space, you can create what are known as selection sets, groups of objects that have similar characteristics, and assign rules that apply to all of them. For example, consider this rule:
"Duty EARLY_DTY1 Dty processing group = Straight 60.00 Fixed"
This rule encourages Hastus to make as many early duties (duties starting before 6:30 A.M., in this case) straights as possible, at a penalty of 60 for each early starting duty that is a split run.
Now that we have looked at duty types and rule versions, in Part III of this series we will look at how we put them together.