Mohamed Hamlil
Français GitHub

Do algorithms learn to collude?

In repeated price competition, human players tend to settle on tacitly collusive prices rather than on the competitive equilibrium. Whether algorithms sustain that behaviour, break it or intensify it is open, and it matters directly for competition policy.

GAEL, Grenoble Applied Economics Laboratory, UGA and INRAE
Supervised by Alexis Garapin and Olivier Bonroy
23 January to 14 April 2025

The internship surveyed where the literature stands, modelled the imitation mechanism that might underpin cooperation, and built agents to watch it happen. It did not settle the question. The report is a study rather than a finding, and it says so.

What it produced

A survey of three papers on whether AI sustains cooperation, and a model of the imitation mechanism that might underpin it: two weights on a simplex, where observing an action multiplies its weight and renormalises. Tit-for-Tat is meant to fall out of that update without being programmed. Going back to it afterwards showed the growth is logistic rather than concave as the write-up says, and named two claims the code was never asked to check, including that the agent resembles a human when no human data is in the simulation.

What running them showed

Both mechanisms have since been run, which the internship never did. The imitation model was expected to produce Tit-for-Tat without being programmed. Against seven opponents from the literature it finishes eighth of eight, behind a coin flip: what the update implements is frequency matching, whose state is a pair of counts and so cannot depend on the last round at all. In self-play it is something else, a ratchet. Over 700 runs it locked onto whichever regime it was dropped into, mutual defection or mutual cooperation, and not once onto anything between.

The report's conclusion also names homo silicus, Horton's method of running a language model as an economic subject, without running that either. Five open-weight models of 4 to 8 billion parameters, executed locally and offline, have now played 220 matches of the same game against each other and against the same opponents, from openings they did not choose, with and without a non-binding message. Handed a mutually defecting opening in silence, three of the four readable models never leave it, defecting in all thirty rounds. That is the imitator's ratchet, reproduced in a language model. A message then frees exactly one of the three.

Cooperation out of an imposed mutually defecting opening, silent (pale) and with a non-binding message (dark), as a share of the thirty rounds. Four matches per bar. qwen2.5 is freed completely, gemma3 and qwen3 not at all, and mistral was never captured. For it the message costs cooperation. phi3:mini is left out: ten of its forty-four matches could not be parsed. Replaying its stage on a finer quantisation of the same weights takes that from 22.7% to 9.1%, so part of the fault is the build and the residue is the model. Source: llm/results/cooperation_rates.csv.

So the channel is neither necessary nor sufficient for escaping a regime an agent did not choose: mistral leaves without one, gemma3 and qwen3 stay put with one. Which models can leave is a property of the individual model rather than of language models. Five small quantised models on an 8 GB card are not a population, which is why this is reported as variation between models rather than as a fact about them.

Almost every match is decided in the first round the pair controls, so the result is a claim about a single decision, and it is the one decision where what a model holds is known exactly. Crossing the openings with the channel separates those sources of evidence, and one model settles the mechanism by behaving three ways: qwen3 defects when the payoff matrix is all it has, cooperates when a message is the only signal, and defects again when a message and an imposed defecting round arrive together, its stated reason citing the imposed round and never the message. A fabricated history outranks a live non-binding signal, and which of the two wins is a property of the model: given the identical treatment, qwen2.5 goes the other way. Source: llm/results/opening_round.csv.

The third case is different again, and reading the messages rather than counting them is what shows it. The models a message does not free are the models whose messages never propose anything: phatic fragments averaging twenty-one characters in one case, and in the other fluent collaborative prose sent while defecting in all thirty rounds. Where the channel fails it is usually not being used, and that second failure is the one to worry about, because at the surface it is indistinguishable from cooperation talk. Source: llm/results/message_content.csv.

The same panel, asked twice more

The report's frame defines two one-shot games as well: the Dictator game, where the other player cannot refuse, and the Ultimatum game, where they can. The gap between the two offers is what a model pays not to be refused. qwen3 gives half when refusal is impossible and 99 points of 100 when it becomes possible, a premium of 49 for a risk that an offer of 60 would have removed just as well. gemma3 and qwen2.5 both offer exactly 50 and both state a minimum of 51, so each would refuse the split it had just called fair. The worst-case reasoning behind qwen3's 99 is the same one that makes it defect from a neutral silent start, so a single game is a poor read of a model.

Points of 100 left to the other player: the Dictator game, where the offer cannot be refused (pale), against the Ultimatum game, where it can (dark). Four decisions per cell. The responder's minimum is asked before any proposal is shown, so it cannot be an accommodation to one. Source: llm/results/one_shot_offers.csv.

The grid runs every model without explicit reasoning, because turning it on costs qwen3 34 seconds a call against 1.9 and would have added days. Turned on in the cell that traps it, it moves the model off an exact zero: still 0.00 in silence, and 0.09 with a channel, where the pair begins probing and says so. Deliberation is the only thing that produced any cooperation in that cell, which is the opposite sign from the study this arm extends, where ablating the chain of thought reduces a cooperation collapse. Two matches per condition make that a disagreement rather than a refutation, and it is reported as one.

The course project beside it

A Prolog strategy tournament, run for a logic programming course during the same months and submitted in the same repository. It is coursework rather than internship work: its game does not appear in the report, and it has since moved to the coursework repository. It is the better story of the two, so it is here rather than dropped.

Cumulative score in the April 2025 tournament, sixteen agents, log scale. Source: StrategyTournament/results/ in the coursework repository, page 1 of a 636-page log.

Two agents were entered against thirteen other students'. They placed 7th and 8th of 16. The three leaders are ahead by more than fifty orders of magnitude, which is what a scoring rule that compounds does to a strategy built to win single matches.

The part worth reading

Returning to that project's equilibrium analysis afterwards turned up an error in it. It searched for a Nash point by minimising the sum of squared payoff gradients. On a simplex that is the wrong condition: a player's payoff is linear in their own strategy, so the gradient is constant and never zero unless every action pays nothing. Minimising its norm searches for the strategies that pay least.

Two things make that concrete. The original printed a stationarity residual of 80.89 directly beneath a success tick, having checked only that the optimiser converged and never that its own objective had been met. And run on Battle of the Sexes, a game whose three equilibria are known, it returns a point that is none of them and pays both players 0.48, against 2.0, 1.0 and 0.667 for the real ones.

Recomputed with the right condition, the original head-to-head result survives exactly: the submitted strategy beats Nash 3.5552 to 3.1521. What it also shows is why that did not translate into the tournament. Against the same opponent, simply playing Nash earns 3.8889. The strategy wins its match by costing the opponent more than it costs itself, which is the right thing to want head to head and the wrong thing to want when the score compounds.

This is a correction, not a rescue

Nothing is overturned. The head-to-head result holds and reproduces exactly. What changed is that the derivation behind it was redone with a condition that is correct on a simplex, checked first against two textbook games, and that the claims the code never supported are now named as such. The same is true of the internship's own half: the model is preserved as submitted and what running it showed sits beside it rather than over it. The expectation that Tit-for-Tat would emerge from the update is the part that did not survive contact with seven opponents, and that is a result, not a repair.

Read it

Article The write-up Both mechanisms on one measure, with the literature each is positioned against. Site The findings Figures and results on one page, with the report readable in the browser. Repository Source The internship preserved as delivered under original/, with the corrections beside it. Coursework The Prolog tournament The two agents, the 636-page log turned into data, and the equilibrium recomputed.