[modelling bicycle racing with cellular automata] - A New Kind of Science: The NKS Forum
A New Kind of Science: The NKS Forum
modelling bicycle racing with cellular automata(Click here to view the original thread with full colors/images)
Posted by: Hugh Trenchard
I am currently investigating the existence of self-organized criticality in competive bicycle racing. I believe I've identified the existence of a power law, and there are a number of other properties of bicycle racing which bring it within the category of a complex dynamic system. I am wondering, if I posted some of the basic rules (physical rules, that is) that define a bicycle race as a complex system, whether someone could tell me if these rules can potentially be modelled by cellular automata. The rules are essentially simple. I will post the ones I feel are relevant in a follow up if anyone is interested.
Posted by: Kovas Boguta
This sounds like an interesting application, if its possible.
Im slightly skeptical about being able to use a CA model for this. My main problem is that presumably speed of travel is of central importance in this model, and in CAs is a bit nontrivial just to find structures that travel at a given rate that is even theoretically possible -- and this is even disregarding any of the other features of the model.
But lets hear your ideas... even if a ca is not the right thing, some similar simple system might be.
Posted by: Hugh Trenchard
I think with the behaviour I'm trying to model, relative distances over time is a consideration, but no account for accelerating from speed x to speed y need be taken. So I am hoping this allows for discounting the speed factor.
I'll start with some basic rules, and if you think this much can be modelled, I can add some more over subsequent posts.
I am concerned largely with peleton formation. So, the fundamental principle of peleton formation is that a rider may save significant energy by drafting closely behind other riders. A peloton is highly dynamic, largely because in addition to saving energy by drafting, one objective is also to stay near to the front of the peloton, where it is strategically advantageous to be. Movement toward the front is both from within the peloton, and up either side of the peloton. So what often occurs is fluid motion up (forward) either side of the peloton, while more apparently random jostling and shorter forward advances occur within the pack.
But without getting into too much detail, we can start with these two rules:
1) Riders all clump together in a pack. This can be shown simply by say one hundred riders 5 abreast and 20 deep.
2) Riders from positions randomly selected near the back of the pack (top of cell grid, presumably; front of pack being the bottom of the grid) begin advancing forward by passing on the outside those riders constrained on the inside. Course constraints mean that a rider will not swing outside the width of the road to try and pass, and also, because he or she wishes to maintain drafting advantage, a rider will always try to pass as close to other riders as possible. So the rule is that passing occurs by advancing say two cells on the outside for every one cell on the inside (or something similar), and that the passing occurs on the outside precisely adjacent to riders on the farthest outside "edge" of pack.
3) As a cell on the outside begins advancing, any space he leaves
is either filled immediately by a cell from behind, and/or causes a "train" to occur where other cells from the inside move out to draft behind the cell who has initiated the forward advance.
It is starting to get more complicated. I'll stop here to see if this has modelling potential so far. I can modify pack advancment rules and get into rules for color schemes later for riders of differing strengths, and set rules for internal pack "clustering" if we can get that far.
Posted by: Jason Cawley
I moved this to "applied NKS" because it strikes me as mostly a modeling problem. If the resulting system is general enough it might have other applications, to be sure.
It seems to me there is some overall energy or endurance like budget constraint that the riders are working with. So at the risk of unduly complicating the problem, maybe you have something like -
to advance a space without drafting costs 3
to advance a space while drafting costs 2
to maintain position without drafting costs 1
to maintain position while drafting costs 0
to fall back a space without drafting costs 0
Then riders of different strengths have different "energy budgets", or perhaps that and different energy increments in the form of +1 energy every n steps (n=1 implies strong rider, n=4 implies weak rider, etc).
One can also have different "spending strategies", however. E.g. advance a space whenever possible until there is no energy to afford it ("rabbits"), draft whenever possible to make energy last, but advance if it can be done drafting ("drafters").
One can start with a model that is only 1 wide, though it should give trivial behavior, then increase width. I don't think you need 100 riders - 20 will be plenty even up to width 5 or so, and 10 might be enough at widths 2-3, to see what goes on.
Possible moves then are forward, forward right, forward left, stationary, stationary right, stationary left, and (not drafting only) fall back. Rights and lefts cost no more than others. You can't advance except by going to an open lane if the rider ahead in the existing lane doesn't advance before you.
Move order would be from front to back, and arbitrarily can be done from left to right at each position level. Different moves by the leaders make different moves possible for those behind, on the same step (e.g. if the leader advances, the rider right behind him and advance while drafting for 2).
Take a trivial case, a single rider on a single lane with energy budget 9 and energy increment 1/3. He can't draft, there is no one to draft with. He can -
advance, advance, advance, maintain, fall back, maintain, fall back, fall back, maintain, fall back, fall back, maintain ("lone rabbit").
or with a different "spending strategy" he could maintain 13 times, then have to fall back once, then maintain one more time, before falling into the same repeating cycle as above.
The "lone rabbit" above would thus be ahead for 8 steps, then fall behind the position reached on the same step by the "lone tortoise". The right strategy depends on the length of the race compared to the rider's energy budget constraint.
Add another rider and a single passing lane and drafting enters. Energy spending strategies can also get more involved.
Posted by: Hugh Trenchard
Thanks Mr. Cawley (Dr. Cawley?). That is an enormously helpful description of what would be a good start to modelling the racing behavior. Aside from tweaking the energy budgets of the riders, your description looks like the foundation for the model. Obviously we'd have to see where else it could be refined for more life-like results.
The next problem I'm wondering about is the "attack" structure in racing. It sounds like you are somewhat familiar with bicycle racing, so you will know that the first part of the model you've described represents points in a race where the peloton is in a state of equilibrium or stability.
Riders know by experience that they need to break these periods of stability by "launching attacks" off the front of the pack. Of course with team-work and "blocking" strategies, this becomes very complicated, but leaving out blocking for the moment, I am thinking that an individual rider's attack could be shown by a cell at the front skipping ahead say two cells at once (obviating the need to show increases in speed to get there), and then advancing for a period of time say 1-point-something cells for every cell advanced by the pack (this would represent acceleration -- which I was trying to avoid, but if there's a mechanism for representing it, then why not). This 1-point-something advance represents the "breakaway" attempt.
The power law I see exists in this attack structure (and probably exists internally to the peloton too, but that's much harder to see and measure). I have actually taken sufficient data and plotted it on a log log scale to see the straightline characteristic power law. In any event, the power law structure is such that there are many short breakaway attempts that do not last very long, while there are fewer longer breakaway attempts that do last a long (or a longer) time.
In my data I haven't distinguished between lone rider breakaway attempts and multiple rider breakaways. Ideally I would take data for a cross-section of breakaway compositions (i.e. those of just one rider, those with two, three, etc.). But in terms of identifying the power law structure, I'm not sure the break composition matters all that much (though I'm not certain of this).
But do you think this sort of behaviour can be modelled? It sounds like it might be very complicated, but maybe there are few rules that can create this sort of power law property in this context (?).
Thanks very much for your interest and in taking the time to respond in detail to these questions.
Posted by: Jason Cawley
Glad it helps.
I'd start with the case already discussed first. Different spending strategies and increasing the overall size of energy budgets, compared to the cost difference between the various moves, will already introduce considerable variety. Will you see moves from the front of the pack that approximate your data? I don't know. You'd have to simulate it first and see. (Note that all of the moves are relative to some notional average motion. So my "advance a space" cases are "attack", breakaway attempt moves).
One way it might happen is drafters accumulating energy without being able to get out of the pack to spend it, if "traffic" is particularly dense and they have high energy gain per unit time, when just maintaining position and drafting. Some of these should bubble to the front of the pack, perhaps with considerable energy reserves, often with not all that much by the time they reach the front of the pack. Thus many small pushes but only a few large ones.
Also, with drafting there should be some tendency for large separations, especially with multiple riders, to be more durable. In the sense that riders far behind have less opportunity to get back to "cheaper" drafting riding while closing the gap, if that gap is large. Without any additional parameters trying to put that in explicitly, I'd expect that just from the above rules.
Working against unlimited runaways will be the simple fact that the overall leader cannot draft and should therefore eventually tire, relative to those who can. Unless the implicit "sorting" involved has already produced a stable leader, I suppose (that will vary with the strength difference in the riders, compared to the gains from drafting vs. not drafting).
Maybe that will give you your power law behavior. It is always better if the model produces such things naturally, than if you have to explicitly put it in. You discover where it comes from, instead of having to guess and "force" it in. So first you'd want to experiment with a model and see how much you can get from just those parameters. It might not be necessary to add any more.
Never add "hair" - additional parameters - unless you've first found that a simpler model does not produce the phenomenon you see in the actual system. That is a basic principle of NKS modeling. The simpler the formal system, the easier it is to employ methods like exhaustive search and experiment, and the easier it is to trace behavior seen in the model to its real cause.
So the next thing would just be to program it up (big hint - use Mathematica), and look at some of the simplest cases with the fewest number of lanes, riders, small energy budgets, uniform spending strategies, no energy gain with time. Then one at a time, vary those parameters upward keeping the others fixed. Add complexity slowly, in other words. If the written program is general enough, adding more will not be hard. You want some "model data" first, before worrying about reproducing every feature of the empirical data. What the formal system will do can be a surprise.
Posted by: Jason Cawley
Without getting to actual coding yet, the next couple of steps are -
(1) specify a state of the system.
(2) formulate an update rule or routine.
(3) outline any necessary intermediate routines.
(4) set up a good way to visualize output behavior.
So what is a state of this system? There are global parameters and local ones. By the former I mean things like the number of riders, the width of the course. Also some per rider parameters, which will come up along the way. But the single state of the system that will be updated from step to step is just a position and energy level for each rider - labeled, so any rider specific parameters remained tied to the right one. A is at x1,y1 with energy e1, B is at x2,y2 with energy e2. For certain other purposes an ordering on the set of positions will give a "leader" permutation, as a list - A, B, D, E, C, G, F...
What is an updating of the system state? For every rider, pick a move. Based on that move, update position and energy. This to happen in a definite order from leader, back through the positions. Afterward, perhaps also an additional energy updating for all riders that does not depend on the move chosen, just the step.
Choice of move is some function that passes drafting or not, current energy, perhaps leader position, to some "strategy" routine, that returns one of the allowed moves - advance, maintain, fall back - in each case with a preference for a spot left to right behind someone, but of course clear. This is a key intermediary routine. Initially it should be as simple as possible and the same for all riders. Eventually you will want to fiddle with it, and see how that changes the behaviors seen (rabbits or drafters, mixed fields, etc).
Then you program some data structure to completely represent the state. Make the update rule, as a function that takes that data structure and returns an equivalent updated data structure. Then foldlist or loop it, generating output data. Pass that to your visualization scheme.
Once you have all that - test it on few cases before proceeding - put the whole shebang inside another wrapper that lets each parameter vary over some range, generating a ton of cases. (2 riders, 3 riders, 4 riders... 2 lanes, 3 lanes, 4 lanes...starting energies this list, that list, another list...)
See the idea? I hope this helps.
Posted by: Hugh Trenchard
Well, thank you very much again for your detailed response. I will certainly apply your suggestions.
It sounded from your last post you might be even willing to suggest the actual coding procedure(?). I am an inexperienced programmer, so I will certainly take as much help as I can get on this. If you or anyone wishes to be part of a joint paper or something similar, please let me know. While I am sure I could eventually work out the programming problems on my own, it would take me far longer than with the assistance of able expertise.
If I am to be let fly on my own from here, I will keep you updated as to my progress, and as I run into problems I'll post them and seek for help (if you are ok with that). As I say, I am an inexperienced programmer, so this might happen frequently! If and when I should eventually get a simulation running and presented anywhere, I will certainly make reference to your kind assistance.
I was reviewing some webpages advertising Mathematica -- do the Mathematica books carry the CD for the actual Mathematica program? I ask since I know some books carry CDs that turn out to be only tutorial software. Is there a particular version of Mathematica I should purchase?
Posted by: James Thompson, Ph.D.
I am a long-time student of bicycle racing, part-time volunteer coach, and former collegiate national velodrome racer and conference road racer. I happened upon your post by chance.
I understand the need to keep your model simple, and that you may not be interested in all the subtleties of race strategy, but I will offer some points at any rate:
1. You speak of breakaways in your energy spending model, but in reality there are often many "selections" prior to breakaways. A selection occurs when the peloton as a whole, or a group of committed riders (usually from a team) simply ratchets up the speed from the front, with no percievable break from the field, and "selects" out the weaker riders in the back who simply cannot make the speed, draft or no. Selections are best made on hills, around technical sections, etc . . . where the significance of drafting is reduced due to lower speeds.
2. The race you speak of is probably a shorter one, since in a longer pro-level race there is not as much of the constant jousting for near-front position as you might think. If anything, captains and stars will hang out in the middle or back, sending domestiques (worker bees) up to near the front to "cover" breakaways and/or keep the pace slightly fast to discourage breakaways. Unless you are involved in a criterium (cornering race), most riders will part way and allow team domestiques to come to the front if they want to. Even in collegiate racing (my forte') it would be considered rude to "block" a rider's progress to the front if it was clearly his job to pace the peloton or catch a breakaway for his/her teammates.
3. As more are aware thanks to OLN coverage of the Tour, cycling is a team sport. In the semi-pro, elite amateur, collegiate, U. S. pro, and UCI (global) pro pelotons, there are almost _no_ "unattached" riders. As your model increases in elegance, you'll want to consider the team factor.
4. The "breakaway" you describe is rarely done from the front. It most often happens during the tail-end of a "selection" (see above) or immediately after a selection, when riders are all weary.
5. Hitting on point 4, I think you should refashion your concept of energy conservation and spending to account for "replenishment," or what we call "recovery." The essential distinction of bicycle racing from _all_ stamina and endurance events is the variation in energy expenditure during any point in a race. You do recognize this in your dicscussion. However, you seem to think of energy as finite or as tapering off in a linear fashion. Actually, after a selection or breakaway, it may be that a rider is fully "dead" or empty, but if the peloton slows just enough, that rider (if well-trained) can return to a relatively homogenous energy level relative to other riders. This is in fact what distinguishes "stars" and talent from the other 95% of the peloton-their ability to "recover" after repeated selections and be in the elite and culled-down peloton near the end of a race.
5. On the point of stars. Your model at this stage implicitly ascribes an equal energy level to all riders. As you can imagine, this will change the closer you model to real-world phenomena. In fact, there are only about seven or eight riders in your theoretical 100-rider peloton who can likely win that bike race. There are another 20 who will make major contributions to the victory of the stars, by selecting the field, by covering breaks, etc . . . The rest of the riders are "paying the rent," and can only be expected to work in large team- or double-team efforts when a dangerous break is up the road. None of them will even be in the top twenty, and that's not their job anyway.
If you'd like to talk more about bike racing, I'm at U. S. 352-336-5429 or U. S. 352-392-0274 (my office) most days. My email is email@example.com.
I really enjoyed the posts on this thread.
James Thompson, Ph.D.
Team Florida/UF Cycling Team alum.
Posted by: Hugh Trenchard
Dear Dr. Thompson,
Thank you for your comments. My thought is that those are all complicating features that are largely unnecessary to model basic peloton phenomena. The primary physical factor is the energy savings benefits of drafting, and once you incorporate a simple rule allowing for this, you can, I've discovered, actually model realistically some peloton behaviours.
In a computer model, you can start out by giving everyone equal energy supplies but allow them to draft and lose energy according to one rate for drafting rate and another rate for when they are at the front of the peloton.
A cyclist who spends more time at the front than others will eventually fall off the back sooner than the others if the pace is kept at some near-maximal pace (which is what my model shows - it doesn't show, for example, a maximal pace by a solo breakaway versus sub-maximal efforts by the peloton). In reality this does occur even for a solo breakaway cyclist significantly stronger than others - if, that is, the pace is kept near-maximal.
Just as a note, I've done quite a lot of bike racing in my time, though most of it at the Provincial/National level, but I've also done higher level continental/international races like the Cascade Classic, the Tour of Willamette, and the Grand Prix de Beauce. I generally agree with what you've said, but I don't agree that breakaways do not, as you say, occur from the front. In my experience, a breakaway necessarily occurs from very near the front of the peloton by riders not necessarily right at the front, but within 10 to 15 places from the front. This indeed happens usually after a generalized relaxation following a near-maximal effort, and I agree with you on that point, but it does occur by riders accelerating away "off the front".
Forum Sponsored by Wolfram Research
© 2004-2013 Wolfram Research, Inc. | Powered by vBulletin 2.3.0 © 2000-2002 Jelsoft Enterprises, Ltd. |
vB Easy Archive Final - Created by Xenon and modified/released by SkuZZy from the Job Openings