Merchants of Venice: Daily Life and Urban Movement, ca. 1740
Introduction
Motivation
The project is driven by the desire to explore Alltag, the texture of everyday life, within a historical cityscape. Large-scale historical narratives tend to privilege major events, political institutions, or prominent elites, while the mundane routines of ordinary economic actors remain largely invisible. Yet it is precisely these everyday rhythms: opening a shop, crossing a bridge, stopping at a tavern, visiting a church, that form the tissu urbain, the lived fabric of the city. Venice in 1740 was not only a political or commercial hub; it was a dense ecosystem of micro-movements and social interactions. Reconstructing these patterns offers a way to understand how the city functioned on the ground.
In recent years, historians and digital humanists have increasingly turned toward spatially grounded simulations, agent-based models, and historical GIS to recover these missing layers. These approaches shift the focus from static archival records to dynamic processes, asking how people actually used space, how distance shaped behavior, and how urban infrastructure influenced daily life. Historical simulations can reveal emergent patterns that are difficult to see in documents alone, such as clusters of activity, preferred routes, or the spatial logic of specific professions.
Our project sits within this growing field but adds a new dimension by leveraging modern generative AI. AI systems allow us to enrich sparse archival data, approximate missing information, and infer plausible routines based on contextual cues. They can generate thought processes, motivations, and small-scale decisions that make historical agents feel coherent and situated. This enables us to model the everyday life of merchants not just as movement on a map, but as a set of choices embedded in a social and urban environment.
Ultimately, this project is both a digital experiment and a historiographical intervention. It shows how combining archival sources, spatial modelling, and generative tools can bring us closer to the lived experience of the past. What people did, where they went, and how they inhabited their city, day by day.
Project Timeline and Milestones
This project is structured in two main parts: Data (Sampling and Generation) and Agent (Behavior) part. Work on both tracks runs in parallel. As the data generation improves, its outputs are continuously integrated into the agents' routines and behaviors. The process is iterative: refine the data, update the behavior, and progressively converge toward a coherent simulation of daily life
| Category | Task | Start | End |
|---|---|---|---|
| Sampling & Generation | Analyze dataset | Nov 11 | Nov 17 |
| Sampling & Generation | Build merchant dataset | Nov 17 | Nov 24 |
| Sampling & Generation | Persona & routine draft | Nov 17 | Nov 24 |
| Sampling & Generation | Data sampling | Nov 17 | Nov 24 |
| Sampling & Generation | Persona/routine refinement | Nov 24 | Dec 1 |
| Other | Wiki writing | Dec 8 | Dec 15 |
| Other | Polishing and testing | Dec 8 | Dec 15 |
| Category | Task | Start | End |
|---|---|---|---|
| Behavior | New agent architecture | Nov 11 | Nov 20 |
| Behavior | Integrate time-synced logic | Nov 14 | Nov 24 |
| Behavior | Integrate persona/routine prompt | Nov 24 | Dec 8 |
| Behavior | Agent thought display | Nov 24 | Dec 1 |
| Behavior | Multi agent | Dec 1 | Dec 8 |
Deviations from timeline
- More data analysis than predicted
- Added spontaneous detours -> poi dataset
Milestones
| Milestone | Date |
|---|---|
| First working prototype, 1 agent which moves based on routine | xxx |
| Agent thinks | xxx |
| Spontaneous actions | xxx |
| Multi-agent system | xxx |
| Final deadline | 17.12 |
Final deliverables: 17.12 GitHub + Wiki
Final presentation: 18.12
Deliverables
- Jupyter notebook with data analysis
- Python scripts for data processing
- Next.js app with a simulation of daily life of merchants in Venice
- Python backend with API calls
Methods
Data
Street network
To visualize the city and provide a navigable environment for our agents, we rely on the 1808 Venetian street network. We assume that the urban fabric of Venice remained largely stable between 1740 and 1808, allowing us to use the 1808 street network as a reasonable proxy for the earlier period. The raw dataset contained gaps and inconsistencies caused by the original acquisition process. A previous FDH group ([1]) identified this issue and produced a cleaned version of the network through a combination of automated and manual corrections. They also integrated the traghetti crossings, an essential part of everyday mobility in Venice, allowing residents to traverse the Grand Canal at key points. Their enhanced network, which incorporates both walkable paths and traghetto routes, serves as the foundation for our simulation.
Catastici
Our primary data source is the 1740 tax register (Catastici). The register contains a large number of entries, but only a subset is relevant for our aggregation and analysis. We exclude shops without a specified shop type, since generic labels like "Bottega" provide no insight into the merchant's actual profession and add noise to the dataset.
From the original 31,741 rows, we identify 23,899 unique tenants. Among them, 3,040 names occur more than once, indicating multiple associated parcels (for example, several houses, or a house plus one or more shops). From this group, 968 tenants have at least one shop with a meaningful shop type. These become the core of our merchant sample. Which is more than sufficient for visualization and simulation.
A key limitation remains: name collisions. Individuals who share both given name and surname are merged into a single entity. For instance, "Antonio Rossi" appears across 23 parcels, including a Bottega da Chirurgo (surgeon), a Casa e bottega di barbier (barber), several Bottega da Sartor (tailor shops), and multiple houses. It is implausible that a single historical individual simultaneously practiced all these trades. This issue motivates the next step: clustering to separate these homonymous identities.
Connected components thresholding
To cluster shops with their corresponding houses, and to disentangle different individuals who share the same name, we use a graph-based thresholding approach. Each node represents a single Catastici entry. We add edges between nodes that share the same tenant name, then assign weights using a custom scoring function. After constructing the graph, we apply connected-components thresholding to retain only the clusters whose internal similarity exceeds a defined score.
The scoring function incorporates several factors:
- Parish
- Sestiere
- Geographical distance between parcels
- Parcel type (house vs shop)
- Shop subtype when applicable
Applied to the case of Antonio Rossi, this method yields three distinct clusters: one associated with barber activity, one with a surgeon’s shop, and one grouping the tailor shops, effectively separating homonymous merchants into plausible historical identities.
Points of Interests
For the agents' spontaneous actions, we needed a dataset of Venice's points of interest (POIs) such as taverns, shops, churches, and other places where daily life unfolds. To build this dataset, we filtered the Catastici to retain only entries that represent meaningful destinations. We removed all standalone houses (keeping only those combined with a shop), generic shop labels, unoccupied parcels (inviamento), and other entries that do not represent actual activity hubs. The result is a focused POI set that agents can plausibly visit during their simulated routines.
Data Analysis
Owners and tenants
During the data exploration, we also found an external reference to an Antonio Rossi, identified as a Venetian surgeon [2]. This is a compiled volume of scholarly pamphlets, where he the skeleton in his study is mentioned, published in 1732. While this does not resolve our homonymy issue, it confirms that at least one historical Antonio Rossi did practice surgery in Venice, and that we have a trace of it.
Among merchants with more than three shops, no single shop type dominates. The distribution is highly varied: cheese sellers, jewellers, fruit vendors, fabric dealers, and many others. The only profession that stands out with a noticeable concentration is bakers, who appear more frequently than any other trade in these multi-shop clusters
Final datasets
merchants
poi
Behavior
Agent architecture
FastAPI backend.
Path finding
Assumptions: traghettis are part of the network, no other weights.
Routine Generation
Thoughts
they are all poets bruh
Spontaneous actions
We wanted to enable the agents to override their routines if wanted.
All points of the network in the context? NER after? We ended up creating a dataset of Point of Interests (POI) which would be fetched and fed in the LLM's context. To not give the whole city, and max out all the tokens, we fetch the POI in the surroundings of the agent.
Conclusion
Results
The final outcome is an application capable of simulating the daily lives of Venetian merchants. It provides an alternative way to explore and experiment with the underlying historical data, turning static archival records into dynamic, observable behavior.
Quality assessment
Limitations
- Data: missing occupations -- The 1740 register does not record people's professions. For this reason, we restrict our sample to merchants whose occupation can be inferred from explicit shop types.
- Data: identity ambiguity -- The Catastici provide no unique identifiers and no census-like aggregation of personal details. This makes it impossible to distinguish homonyms reliably, forcing us to rely on clustering to separate individuals with the same name.
- Models -- The language models used are generic and not finetuned for 18th-century Venetian context, which limits historical specificity.
- Language -- The data, such as the parcel's function, occupations, are mostly in old Venetian. This made it more difficult to explore it.
many agents have their home at the same place as the shop -> less visualization
Future Works
With a solid foundation in place, several extensions could significantly enrich the simulation:
- Broader agent types -- Introduce non-merchant populations derived from POIs: teachers, priests, porters, gondoliers, postmen, and others.
- Historical grounding -- Incorporate structured historical knowledge. Compare baseline LLM behavior with a RAG system enriched with Venetian sources (guild structures, regulations, work rhythms, etc.).
- Context-dependent movement -- Vary walking speed according to activity or urgency; for example, allow agents to move faster when late.
- Agent interaction -- Implement direct interactions between agents, enabling social behavior, information exchange, or simple economic actions.
- LLM memory -- Equip agents with a persistent memory layer so their decisions accumulate context over time, making behavior more coherent and historically grounded.
Github Repository
Credits
Course: Foundation of Digital Humanities (DH-405), EPFL
Professor: Frédéric Kaplan
Supervisor: Alexander Rusnak
Authors: Camille Lannoye, Sophia Kovalenko