Putting the AI in ApplIed Urban Modelling. AI, collective intelligence, and the Brighton & Hove school system
Bartlett Centre for Advanced Spatial Analysis, UCL
Wednesday 4 November 2026
Two years ago Brighton & Hove consulted on changing secondary school admissions. I read the consultation as a parent, got annoyed as a modeller, and have been working on it ever since.
The UKRI National AI Research Hub for Collective Intelligence (AI4CI) — a five-year, £12m EPSRC programme asking a question that is not the usual one about AI.
Not “can a machine do this instead of us?” but:
Can AI make groups of people think better together?
Can it help a council, a set of schools, a few hundred parents and a handful of campaigners arrive at a better answer than any of them would have reached alone?
The Hub works on epidemics, on infrastructure, on online communities, on human–AI teaming. I brought it a school system.
Collective intelligence leans into the wisdom of the crowd - the idea that a diverse group can consistently outperform even the smartest single expert (or local Councillor!).
Ten schools, six catchments. A (mostly) closed system with hard edges: every child the council places has to go somewhere. Some pockets of deprivation in East of the city.
The 2024 reforms changed catchment boundaries, introduced a free school meals priority, and held back 5% of places at central schools for “open allocation” — children from anywhere in the city - potentially forcing some children to attend schools outside of their catchment where schools over-subscribed.
The council’s stated aim
Reduce the concentration of disadvantaged pupils in a few schools, and so narrow the attainment gap. Latterly - increase ‘fairness’.
What I went and checked
Every secondary school in England, five years of data, a model of what actually predicts a GCSE cohort’s results.
What the evidence says
Is it fair to promise benefits not supported by the evidence, ignore the dis-benefits and knowingly makes the lives of a few unlucky children worse in the process?
Year 7 entry peaked at 2,509 in 2019. By 2033 it is projected at about 1,750 — roughly 760 fewer children entering secondary school each year. More than the entire intake of two of the city’s large schools.
Fewer children means less money. Less money means fewer subjects, bigger classes, a worse offer — and so fewer children. Decline is self-reinforcing, and it does not land evenly.
The city placed 1,900 children in 2010 and 2,250 in 2026 — it grew. Over the same years Longhill fell from 239 to 81. Now the cohort turns down, and the school at the edge of the city gets the fall first.
In ten years this city has to run a school system for roughly 760 fewer children a year than it has now.
That means, unavoidably, some combination of:
Every one of those makes somebody’s journey longer, or takes a school out of somebody’s community.
And there is no long-term plan.
What exists is a sequence of individual consultations — each on a single option, each argued about on its own, each decided before the next one is proposed.
Nobody has published an account of how the whole system behaves, so nobody can say what any one of these decisions does to the others.
Hopefully not a conspiracy. It is just hard, and nobody had the tools to think strategically.
How it works now
The system, meanwhile, is interacting. Move a catchment and demand shifts at four schools. Cut an admission number and the children do not vanish — they turn up somewhere else.
How it could work
Run the experiment in silico, where being wrong costs nothing — instead of running it on a cohort of eleven-year-olds, where being wrong costs them a place in a local school.
| The thing | Scale |
|---|---|
| Strategic analysis of the system | 9,712 lines of Quarto |
| The model and data assembly | ~7,400 lines of R |
| An interactive policy simulator | ~3,000 lines of Shiny |
| Commits across six repositories | 805 |
Everything is open: the code, the data sources, the model, the write-up. Every number on every slide traces back to a line of code and a published source.
Sliders for attractiveness, a dropdown for what families read, controls for catchments, admission numbers, school locations and open allocation. Hit go and the whole city re-allocates.
Nothing here is private. No pupil records, no data-sharing agreement, no permission required. All of it is published, and most of it is published badly.
Data processing and curation from a dozen sources that do not share a key, do not share a year, do not share a school name, and change their format every two years, just the sort of thing Claude AI excels at.
Exactly the grinding, careful, enormously tedious work that has historically eaten the entire budget of a project like this.
Everything open and downloadable from my github
A spatial interaction model — a development of Newton’s Gravity equation.
Used for modelling commuting, migration and retail catchments since the 1970s. It predicts how many children flow from each neighbourhood to each school.
\[T_{ij} \;=\; A_i\,O_i\;\;W_j\;\;c_{ij}^{-\beta}\;\;e^{\gamma_h}\;\;C_j^{\delta}\]
| Term | What it is |
|---|---|
| \(T_{ij}\) | children from neighbourhood \(i\) to school \(j\) |
| \(O_i\) | children living in \(i\) — 195 neighbourhoods |
| \(W_j\) | how attractive school \(j\) is |
| \(c_{ij}\) | bus-and-walk journey time, \(i\) to \(j\) |
| \(e^{\gamma_h}\) | the catchment bonus |
| \(C_j\) | how much competition \(j\) has nearby |
| \(A_i\) | the balancing term |
It is production-constrained: \(A_i\) forces every child living somewhere to end up somewhere. The model never invents or loses children; it only decides where they go.
That is what makes it useful for policy. Close a school, move one, cut its admission number — and the children reappear somewhere else, and the model tells you where.
And the council’s own admissions guide tells parents to look at exam results and Ofsted reports. A school with a more disadvantaged intake posts a lower headline score, so fewer families choose it, so its intake gets more disadvantaged, so the score falls again. The advice works against the policy.
3.0 km as the crow flies. 35 minutes, 5 legs, two buses — the 50 then 28 — and 1 change. Every one of the 2,925 origin-school pairs in the model is routed like this, on the real timetable. That is what \(c_{ij}\) is.
Fitted to the council’s own published allocations, not assumed:
Distance decay, \(\beta = 1.7\) — how steeply demand falls as a school gets further away. And \(c_{ij}\) is not crow-flies: every one of the 2,925 origin–school pairs is routed on the real bus timetable at 08:00.
The catchment pull, \(\gamma_h\) — fitted separately for every catchment, because they do not behave alike.
Competition, \(\delta = 0.3\) — whether being surrounded by rivals helps a school or hurts it.
Living in the catchment multiplies the odds by 2.7 times at Brighton Aldridge and 13.5 times at Stringer and Varndean. One policy doing five times as much work in one part of the city as another.
It reproduces the September 2026 allocations with an R² of 0.95.
More importantly, it has been given tests it could have failed, on numbers that did not exist when it was built:
And it gets things wrong in ways I can name. It over-predicts the schools that are hard to get into by about 16 children — because it reproduces the allocation, and the allocation overstates where children finally end up.
A model you cannot criticise is not a model. It is a press release.
All of it is written up, failures included, in a technical guide that audits every term.
So I did it with Claude Code, in bursts, in evenings, between everything else. Counted from the logs: 1,277 instructions from me, 13,451 actions back, over 69 working days spread across five months.
The April to July work is a different project — a national attainment model. The city system model itself starts on 8 September and is finished eighteen days later.
What I brought to the party
What Claude brought
I knew what to ask for and what to examine because I had built a smaller version of it myself. The Human in the loop was vital in this process - asking the right questions, giving the right instructions, reviewing the outputs and forcing iteration
It does not replace knowing things.
Every moment that mattered in this project turned on domain knowledge I had and it did not.
Several times it produced something plausible but not quite right, and the only reason it got caught was my experience.
It does collapse the cost of trying.
Each scenario I tested would have been a week of work. I would have tested a couple, but I tested twenty-odd.
The bottleneck moved. It is no longer implementation.
It is knowing which question is worth asking — and that is a distinctly human, distinctly local, distinctly collective thing.
Which is more or less the whole argument of this talk.
https://adamdennett-bh-school-system.share.connect.posit.cloud/
What I am going to do: take the school in the most trouble, and pull one lever at a time.
Then push the whole thing forward to 2035, with the falling cohort, and see which schools are still viable.
The point is not any one of these. No single policy does much on its own. That is exactly why they keep dying at consultation — each one, judged alone, looks like it is not worth the trouble.
Watch what happens when you stack them.
Nothing here harms a single child. That is the whole argument for doing it this way round.
Each step is modest: 7 points, then 17, then 27. None would survive a committee on its own merits. Together they take a school from 43% full to 94%.
And the honest cost: segregation rises, 0.117 to 0.188.
But a disadvantaged child ends up travelling 2.2 minutes less than everyone else, where today they travel 3.4 minutes more.
Absence is this city’s biggest attainment problem, and distance is one of the few things policy can actually change about it.
What exists now is a working simulation of the city’s school system that anyone can open and argue with — councillors, officers, heads, governors, parents.
That is necessary. It is nowhere near sufficient.
Three things still stand in the way:
The ask.
Council or school? Put a scenario through it that you think will embarrass the model. That is genuinely the most useful thing anyone can do with it.
Researcher? The code, data and model are open. Take it apart.
Parent or governor? Use it before the next consultation, not after.
The simulator does not tell the city what to do. It makes it much harder to claim a policy will do something the system cannot deliver.
Schools are just the example I happened to fall into.
The pattern is everywhere in this city:
Red routes & Western Road. The King Alfred. Parking. Housing allocation. Bus routes. Bin Collections. The seafront.
The cost of building a model like this has fallen by something like an order of magnitude in about eighteen months.
Which means the binding constraint is no longer money, or time, or expertise.
It is knowing which question to ask.
That is a question a room full of people is far better at than one person. Which is why the next bit is not me talking.
What is a problem in this city you would want to solve with data — where right now we are just arguing about one option at a time?
Three prompts, if they help:
Do not worry about whether it is technically possible
The ideas that sound obviously impossible are often the most useful ones to hear — they tend to be the ones where the data already exists and nobody has joined it up.
Happy to answer questions and take criticisms — especially by anyone who spots something that might be wrong or needs correcting!
a.dennett@ucl.ac.uk