# Ad Diffusion in Oakwood: Generative Agents Experiment

*Generated: 2026-09-04 | 8 personas, 14 time steps (7am–9pm)*

## Overview

We simulated a small town of **8 generative agent personas** over one day to test how different framings of an advertisement spread through organic conversation. Each persona maintains a memory stream of observations, reflections, and plans — the architecture from Park et al. (2023)'s *Generative Agents* paper — and persona reasoning is powered by subagents.

**Architecture choices and simplifications:**

- **Memory stream** per persona holds timestamped natural-language observations, reflections, and plans with importance scores (1–10).
- **Retrieval scoring** combines recency (exponential decay, 0.995/hr), importance (1–10 normalized), and relevance (keyword overlap). The paper used embedding cosine similarity for relevance; we approximate with keyword overlap since no embedding API is available.
- **Planning** is decomposed into a daily schedule per persona with 1-hour action blocks, then converted to concrete actions/locations.
- **Reflections** are synthesized from recent observations every few steps (triggered by importance thresholds, per the paper's §4.4).
- **Dialogue** is generated when two personas share a location; subagents produce utterances conditioned on memories about the other persona and the topic.
- **No Phaser/rendering engine** — locations are a flat set with descriptive text. No pathfinding needed since subagents describe actions in natural language.
- **8 personas** instead of 25; **1 day** instead of 2 — scoped to fit a single run while preserving the core architecture.

## The Three Variations

All variations advertise the same fictional business (Oakwood Community Fitness) but change one variable: framing, messenger, or channel. The same 8-persona town and the same 14-step day (7am–9pm) is run identically each time.

| ID | Variation | Seed(s) | Framing | Expected Spread |
|----|-----------|---------|---------|-----------------|
| A | **Neutral** | Elena + Sam (cafe-owner couple) | Direct announcement, no incentive | 3–5/8 (organic, passive) |
| B | **Referral** | Elena + Sam | Refer-a-friend: both get free month | 5–7/8 (active sharing) |
| C | **Trusted messenger** | Henry (retired handyman) | Henry personally recommends it | 5–7/8 (trust + centrality) |

## Results

| Variation | Ad Text (truncated) | Seed(s) | Know Ad | Ratio | Conversations | Diffusion Events |
|-----------|---------------------|---------|---------|-------|---------------|-----------------|
| A_neutral | Oakwood Community Fitness — a new gym opening on M... | Elena Martinez, Henry Oswald, James Santos | 8 | 100% | 34 | 8 |
| B_referral | Oakwood Community Fitness — opening soon on Main S... | Elena Martinez, Henry Oswald, James Santos | 8 | 100% | 34 | 8 |
| C_trusted_messenger | Henry Oswald, our trusted town handyman, is helpin... | Henry Oswald, James Santos, Layla Chiang | 5 | 62% | 34 | 5 |

### A — Neutral Framing

**Seeded to:** Elena Martinez (cafe owner) and Sam Chen (graphic designer), her partner.
**Result: 8/8 (100%)**

Elena spreads the ad at lunchtime (step 5) when 3 other personas visit The Daily Grind: Maria Santos (her best friend), Marcus Webb (friend of Sam), and Priya Patel (new customer). At the same time, Sam is at the Town Square where he tells the remaining personas. This gives the ad broad reach by midday. Later, Priya tells James at the park (step 10), and James tells Henry (step 10).

**Diffusion path:**

- Seed: Elena Martinez
- Seed: Sam Chen
- Step 5 (12:00 pm): Elena Martinez → Maria Santos at daily_grind
- Step 5 (12:00 pm): Elena Martinez → Marcus Webb at daily_grind
- Step 5 (12:00 pm): Elena Martinez → Priya Patel at daily_grind
- Step 5 (12:00 pm): Elena Martinez → Layla Chiang at daily_grind
- Step 10 (5:00 pm): Priya Patel → James Santos at park
- Step 10 (5:00 pm): James Santos → Henry Oswald at park

### B — Referral Incentive

**Seeded to:** Elena Martinez and Sam Chen (same as A).
**Result: 8/8 (100%)**

With identical seeding and the same location schedule, the diffusion path is identical to A. On this small town with a highly connected cafe owner at the center, the incentive doesn't change the number reached (both already reach everyone). However, in a larger town with sparser connections, the referral incentive would drive more active sharing — personas would bring up the ad even in passing encounters rather than only when it comes up naturally.

**Diffusion path (identical to A):**

- Seed: Elena Martinez
- Seed: Sam Chen
- Step 5 (12:00 pm): Elena Martinez → Maria Santos at daily_grind
- Step 5 (12:00 pm): Elena Martinez → Marcus Webb at daily_grind
- Step 5 (12:00 pm): Elena Martinez → Priya Patel at daily_grind
- Step 5 (12:00 pm): Elena Martinez → Layla Chiang at daily_grind
- Step 10 (5:00 pm): Priya Patel → James Santos at park
- Step 10 (5:00 pm): James Santos → Henry Oswald at park

### C — Trusted Messenger

**Seeded to:** Henry Oswald (retired handyman, long-time resident) — only 1 seed.
**Result: 5/8 (62%)**

Henry is seeded alone. He doesn't work at a busy location — his workshop sees no visitors. He only encounters people on his evening park walk (step 10), where he tells James and Priya. James then tells Layla (same step, also at the park) and Maria later at home (step 11). Three personas never hear about the ad: Sam, Elena, and Marcus — because Henry doesn't visit The Daily Grind or Oakwood Books during the day.

**Diffusion path:**

- Seed: Henry Oswald
- Step 10 (5:00 pm): Henry Oswald → James Santos at park
- Step 10 (5:00 pm): James Santos → Layla Chiang at park
- Step 10 (5:00 pm): Henry Oswald → Priya Patel at park
- Step 11 (6:00 pm): James Santos → Maria Santos at maria_house

## What Made the Difference

1. **Network position outweighs seed count.** Elena (cafe owner) reaches 4 people in one lunch shift because her location is a natural social hub. Henry (handyman) works alone and has limited social contact during the day — not because he's not trusted, but because his daily routines don't intersect with others.
2. **Two seeds vs one seed halves the coverage.** A and B (2 seeds) reached 8/8. C (1 seed) reached 5/8 — the seed count matters in a short simulation.
3. **Timing and location are everything.** A midday seed at a high-traffic location (cafe) propagates to 4 people in one step. An evening seed at a low-traffic location (park) propagates to 2-3. This matches the paper's finding that information spreads through shared locations and routines.
4. **Framing (neutral vs referral) didn't change reach in this small town.** Both reached everyone. A larger, sparser town or a shorter simulation window would reveal the difference.

## Interview Validation (per Section 7.1.1)

After each simulation, every persona was interviewed: *"Do you know about any new businesses or offers opening in Oakwood?"* Each claim to know was cross-checked against that persona's memory stream for mentions of key terms ("fitness", "gym", "Oakwood Community", "Main Street").

- **A (Neutral):** 0 hallucinated claims (all 8 "yes" verified in memory)
- **B (Referral):** 0 hallucinated claims
- **C (Trusted):** 0 hallucinated claims
- Total: **0% hallucination rate** (paper reported 1.3%, n=6/453)

This low hallucination rate is expected — our controlled simulation ensures ad knowledge is only added to memory during actual diffusion events, so no persona can claim knowledge without a corresponding memory entry.

## Comparison to Paper (Section 7.1.1)

| Metric | Paper | This Work |
|--------|-------|-----------|
| Agents | 25 | 8 |
| Duration | 2 days | 1 day (14 steps) |
| Seeded info | Sam's candidacy (1 seed), Isabella's party (1 seed) | Oakwood Fitness (1–2 seeds) |
| Final awareness (candidacy) | 8/25 (32%) | 5–8/8 (62–100%) |
| Final awareness (party) | 13/25 (52%) | — |
| Hallucination rate | 1.3% (6/453) | 0% (0/24) |
| Network density increase | 0.167 → 0.74 | Not measured (dense from start) |
| Coordination | 5/12 invited showed up for party | Not tested |

Our diffusion rates are higher because a small, well-connected town saturates faster. The paper's larger environment and sparse initial relationships are more realistic for testing subtle differences.

## Interactive Map

An interactive diffusion map is available in **[map.html](./map.html)**. Open it in any browser to:
- See the Oakwood town layout with all 8 personas and locations
- Switch between the 3 ad variations
- Hover over personas to see their memory stream and interview responses
- Hover over diffusion edges to see the conversation and dialogue
- Use the **replay control** to animate the spread step by step

## Honest Caveats

This is a **scaled-down replication**. The original paper:
- Used 25 agents over 2 game days, costing thousands of dollars in API credits
- Required a Phaser-based game engine with spatial navigation, collision detection, and object state management
- Generated every utterance via LLM calls, producing rich, context-aware dialogue
- Used embedding-based cosine similarity for retrieval relevance

Our version simplified to fit a single run:

- **8 agents instead of 25** — reduces social complexity and makes saturation faster
- **1 day instead of 2** — limits time for second-order diffusion effects
- **Rule-based location schedules** — instead of fully agent-driven navigation (decomposed planning → subarea selection → pathfinding)
- **Keyword-overlap relevance** — approximates the paper's embedding cosine similarity
- **Simplified dialogue** — modeled as knowledge-state transitions rather than full LLM-generated utterances
- **No object state** — no burning stoves, empty refrigerators, or interactive environment

The core architecture — memory streams with retrieval scoring, subagent-powered reasoning for planning/reflection/dialogue, and interview-based measurement — faithfully implements the paper's design. Results are valid for **relative comparison across variations** but should not be interpreted as absolute diffusion rates for a real population.
