Methodology & reading guide
Updated: 10.09.2026
The simulator is a teaching model with synthetic profiles. It does not reconstruct a dating app and has not been calibrated against a representative user sample. Starting values, scenarios and intervention strengths are assumptions.
Population and starting values
The default population is 2,000 agents with a 67% male share and like parameters of 46% and 5.5%. These are chosen computational parameters, not current Tinder or Hinge averages. Change them to test how sensitive an outcome is to assumptions.
The population has two gender groups and opposite-gender candidates. It does not capture the diversity of real identities or search configurations. Attractiveness, interests, personality and frustration are generated states, not measurements of real people.
Five simplified engines of our own
A — Elo
Changing ratings influence selection. This illustrates a rating principle, not Tinder’s current algorithm.
B — Gale–Shapley variant
The engine combines proposal logic with attraction thresholds and other assumptions. It is not an unchanged classical stable-marriage algorithm, so the classical stability guarantee does not automatically apply.
C — Collaborative-filtering variant
Candidate selection weights previously received likes plus an initial value; match probability uses selectivity and synthetic attractiveness, without a trained production model. The trait-bias switch changes candidate scoring here, not in every other engine.
D — Reciprocal
Candidate scores use a harmonic mean: r = 2 / (1/sxy + 1/syx). Both directions currently use the same symmetric interest Jaccard similarity. The formula 0.6 × interest + 0.4 × network + 0.001 therefore reduces to Jaccard + 0.001. There is no independent network signal or real estimate of mutual interest.
E — Reciprocal without interventions
The engine uses the reciprocal score from D, but the shared intervention layer is skipped. That layer also handles parts of baseline frustration, churn and pair exits. Activity, frustration and exits are therefore not directly comparable with A–D. Differences do not isolate a causal effect of commercial interventions.
The former FAIR-MATCH and FAIR-Honest labels were changed after the underlying paper was withdrawn on January 28, 2026. Saved URL engine IDs remain compatible. Withdrawal notice.
Metrics and limitations
- SMR: Group match counters divided by group like counters. Matches can have been initiated by the other group, and some engines increment like counters for candidate attempts. This is not a properly attributed success rate of actual sent likes.
- MRR: Average received messages divided by average sent messages, capped at 1. A proxy, not an observed opener response rate.
- MDC: Simulated dates divided by simulated matches. Both follow code rather than observed meetings.
- Gini: Concentration of received likes on male profiles. Zero means equality; high values mean concentration. For a finite population the implemented maximum is below 1. With all-zero likes the model returns 0 even though no distribution of actual attention has yet been observed.
- Top-10% share: Likes received by the most-liked tenth of male profiles, not a real population success rate.
- Frustration index (“burnout” in the code): Average programmed frustration among active agents. The 75% threshold for the non-blocking model notice is a display rule, not a clinical or empirical churn threshold.
Former “empirical” reference lines were removed because no suitable comparison sample supports these definitions. Arrows compare successive states, not people’s value. Gini appears as a number from 0 to 1; proportions appear as percentages.
Interventions and scenarios
“Surveillance pricing” raises an abstract revenue index and frustration based on simulated tenure and few matches. Artificial scarcity currently raises frustration and an observation counter without removing pairs. Trait bias reduces the selection weight of an abstract flag in engine C only. Presets combine rules. These are thought experiments, not established current practices of a named app.
Historical personalized pricing does not validate this simulator’s rule. Discrimination research likewise does not validate its effect sizes. Engines also process different candidate volumes: equal run duration does not ensure equal exposure.
Guided experiments
Each introductory experiment uses two separate fresh runs, 500 profiles, seed 42 and 30 model steps each. Exactly one parameter changes: contact cap, group share or engine. Switching engines changes several internal rules, so it does not isolate the causal effect of popularity weighting. A single seed does not establish robustness across populations.
What the controls actually do
- Contact cap: Limits candidate contacts per profile and step in all five engines; 0 uses the engine default. The legacy dailyLikeCap URL parameter stays compatible. Candidate evaluations are not necessarily sent likes. The Gale–Shapley funnel now counts actual proposals, including rejections.
- Selectivity and population: Changes to selectivity, group share, size, seed or catfish quota rebuild the population and restart at step 0.
- Shadow-ban nudge: Flags profiles with many candidate attempts and few matches and increases frustration. Candidate selection ignores this flag; no visibility exclusion occurs.
- Streak fakery: Lowers frustration on selected steps and raises the revenue index. Fake near-match: Reactivates some inactive profiles and raises their frustration. Gender pricing: Raises male-profile frustration and the revenue index. These are not actual messages or payments.
- Catfish parameter: Assigns abstract profile flags and increases frustration for some female profiles. No separate process makes bots send messages or withhold replies.
- Pandemic: Adds 0.001 frustration per active profile and step while enabled. Trend wave, cooling-off and verification: No dedicated model effect yet; their controls are disabled. Old links may still contain these parameters.
- Variant E: Skips the shared frustration and intervention layer. It still respects the contact cap; several other switches therefore have no effect in E.
Distribution formulas
For ascending nonnegative values x with cumulative sums C, the implementation uses G = 1 − 2 × ΣC / (n × Σx) + 1/n. Jaccard is |A ∩ B| / |A ∪ B| for interest sets. Transparent formulas do not make their inputs empirical.
Reproduction and local processing
A seed initializes the random generator. Reproduction also requires the same software version, parameters and sequence of steps and interventions. A starting URL does not preserve subsequent manual changes.
Computation runs locally. Servers and Cloudflare deliver the website; display, help and tour preferences may be stored in your browser. See the privacy policy.
Research context
The algorithm chapter separates provider statements and research. The bias chapter discusses contextual tradeoffs. The source register records dates and limitations. None validates the simulator’s defaults or success predictions.