Question
When an UrbanAgents simulation is repeated with unchanged inputs, how much do its results change? And when a 「シナリオ比較」 (scenario comparison), which compares a measure against no measure, is repeated with the same inputs, how much does the reported difference change?
Method
- Product and screen: UrbanAgents,
/app. - Standard simulations: the default analysis area shown on screen (「新宿区」), 10 agents, no scenario, run 3 times with the same inputs. The analysis area is not chosen by the user; it is the extent the product returns.
- Scenario comparisons: measure 「公園」 (park), longitude 139.700, latitude 35.695, influence radius 800 m (the default), 10 agents, run 2 times with the same inputs.
- Recording: for every run we recorded what the screen displayed and downloaded the run's CSV (7 files in all). For the runs of a scenario comparison, the CSV was downloaded after opening that run from 「過去のシミュレーション」 (past simulations).
- Values computed from the CSV: per-dimension averages are not printed as numbers on the screen, so we computed them as the mean of each dimension column of the CSV, ignoring empty cells. The number of residents per satisfaction band is shown only as bar lengths, so we counted it from the satisfaction column of the CSV, using the same bands as the product. The text column of the CSV was not used.
- Numbers on the comparison screen: the displayed difference is the difference between two percentages, baseline and scenario. The figures under 「次元別比較」 (comparison by dimension) are the difference between the per-dimension means, scenario minus baseline, multiplied by one hundred. The screen prints the baseline-to-scenario difference with a 「%」 sign; this note writes that difference in percentage points and gives the displayed string in brackets.
- Date and production revision: 2026-10-13. Cloud Run revision
urbanagents-00014-b62(commitb880022). The revision was the same before and after the measurements. The results are the output of the production revision at that time.
The mechanism was confirmed by reading the code at that commit.
- Residents are generated anew on every run: age, income, household size, job and the weights of the 6 dimensions are drawn at random. Each weight gets normal noise with mean 0 and standard deviation 0.15. The random seed is not derived from the inputs.
- Noise in the choice of location: for each resident and each candidate cell, normal noise with mean 0 and standard deviation 0.05 is added to the evaluation, and the highest cell is chosen.
- The satisfaction that is stored: the evaluation of the chosen cell before the noise was added. The noise changes which cell is chosen, not the evaluation of a cell.
- Evaluation: a weighted mean, with the resident's weights, over the dimensions that have data. A dimension without data is left out, not filled with a neutral value.
- Average satisfaction: the mean of the residents' satisfaction.
- A comparison uses separate residents: it consists of 2 simulations, 「ベースライン」 (baseline) and 「シナリオ」 (scenario); each generates its own residents and draws its own selection noise. The same residents are not asked before and after the measure.
- The comparison area is fixed: comparison runs use a fixed extent written in the code (longitude 139.68 to 139.72, latitude 35.68 to 35.71), not the area of a standard simulation. Standard-run figures and comparison baselines are therefore not directly comparable.
- Effect of a park: in candidate cells inside the influence radius, density fit is raised by +0.15 and building fit by +0.1, each capped at 1.0. There is no decay with distance.
- Text generation does not affect the numbers: the language model writes only the per-resident explanation; satisfaction and the per-dimension values are fixed before the text is generated. This note quotes none of the generated text.
- Whether the rent dimension has a value: a candidate cell's land price is the mean of the land-price data points that fall in the cell, and stays empty for a cell with no such point. The rent dimension is computed only for cells that have a land price; for the others the dimension is left out. Each resident is stored with the values of the chosen cell, and the CSV writes those values. So the rent cell of the CSV is empty for a resident who chose a cell with no land-price data point.
Results
Standard simulations (identical inputs).
| Run | 平均満足度 (mean satisfaction) | 最低 (lowest) | 最高 (highest) | 平均年齢 (mean age) | 平均年収 (mean income) |
|---|---|---|---|---|---|
| 1 | 96.0% | 90.0% | 99.9% | 40.3歳 | 621万円 |
| 2 | 93.8% | 88.5% | 99.6% | 31.2歳 | 609万円 |
| 3 | 96.1% | 86.3% | 99.8% | 45.5歳 | 809万円 |
Per-dimension averages of the standard simulations (computed from each run's CSV; in brackets, the number of residents with a value; the CSV columns are, from left to right, affordability, commute, safety, density_fit, building_fit, zoning_fit).
| Run | rent | commute | safety | density | building | zoning |
|---|---|---|---|---|---|---|
| 1 | 0.8382 (3) | 0.9884 (10) | 0.8500 (10) | no value (0) | 1.0000 (10) | 1.0000 (10) |
| 2 | 0.9491 (5) | 0.9632 (10) | 0.7750 (10) | no value (0) | 1.0000 (10) | 1.0000 (10) |
| 3 | no value (0) | 0.9662 (10) | 0.9000 (10) | no value (0) | 1.0000 (10) | 0.9400 (10) |
Residents per satisfaction band (counted from each run's CSV, using the product's bands).
| Run | 0-20 | 20-40 | 40-60 | 60-80 | 80-100 |
|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 10 |
| 2 | 0 | 0 | 0 | 0 | 10 |
| 3 | 0 | 0 | 0 | 0 | 10 |
Scenario comparisons (identical inputs). The difference is in percentage points (a difference between two percentages); the displayed string is in brackets.
| Comparison | ベースライン (baseline) | シナリオ (scenario) | Difference (scenario − baseline) |
|---|---|---|---|
| 1 | 90.4% | 91.2% | +0.76 percentage points (displayed 「+0.76%」) |
| 2 | 91.3% | 90.7% | -0.59 percentage points (displayed 「-0.59%」) |
Per-dimension differences in the scenario comparisons (as displayed).
| Comparison | 家賃 (rent) | 通勤 (commute) | 安全 (safety) | 密度 (density) | 建物 (building) | 用途 (zoning) |
|---|---|---|---|---|---|---|
| 1 | +4.7 | +1.5 | -5.0 | — | 0.0 | 0.0 |
| 2 | +0.6 | -3.9 | -2.5 | — | 0.0 | 0.0 |
Per-dimension averages of each run of the scenario comparisons (computed from each run's CSV; in brackets, the number of residents with a value; same columns as the per-dimension table above).
| Comparison | Run | rent | commute | safety | density | building | zoning |
|---|---|---|---|---|---|---|---|
| 1 | baseline | 0.7999 (6) | 0.9518 (10) | 0.7500 (10) | no value (0) | 1.0000 (10) | 1.0000 (10) |
| 1 | scenario | 0.8465 (7) | 0.9665 (10) | 0.7000 (10) | no value (0) | 1.0000 (10) | 1.0000 (10) |
| 2 | baseline | 0.8764 (5) | 0.9790 (10) | 0.7500 (10) | no value (0) | 1.0000 (10) | 1.0000 (10) |
| 2 | scenario | 0.8823 (7) | 0.9400 (10) | 0.7250 (10) | no value (0) | 1.0000 (10) | 1.0000 (10) |
Reading the results
- Mean satisfaction with identical inputs: over the 3 runs the display ranged from 93.8% to 96.1%, a spread of 2.3 points between the smallest and the largest. 「最低」 (lowest) ranged from 86.3% to 90.0% and 「最高」 (highest) from 99.6% to 99.9%.
- Residents' attributes: the displayed mean age and mean income also differed from run to run. Residents are generated anew on every run.
- Per-dimension averages: computed from the CSVs, the mean ranged from 0.9632 to 0.9884 for commute, from 0.7750 to 0.9000 for safety, and from 0.9400 to 1.0000 for zoning. For building it was 1.0000 in all 3 runs. The number of residents with a value in the rent dimension was, in run order, 3, 5, 0; a mean could be computed for 2 of the runs. As described above, whether there is a value depends on the location the resident chose. Of the 25 locations that appear in the 7 CSVs, 14 always had a rent value and 11 never had one; the number of locations with a value in one row and none in another was 0. In run 3 all 10 residents chose locations without a value.
- Dimensions used: every run displayed 「5 / 6 次元で評価 — 人口統計データは未整備のため対象外です。」 (the density dimension is excluded because the population data is not loaded). The density column was empty in all 7 CSVs.
- Satisfaction bands: in all 7 runs every resident fell in the highest band.
- Scenario comparisons: over the 2 runs with identical inputs the difference was +0.76 percentage points (displayed 「+0.76%」) and -0.59 percentage points (displayed 「-0.59%」): positive 1 time and negative 1 time. The baseline was displayed as 90.4% and 91.3% and the scenario as 91.2% and 90.7%.
- Display by dimension: the displayed difference for the building dimension was 「0.0」 in both of the 2 comparisons, and the density dimension displayed 「—」. In the CSVs the mean of the building dimension was 1.0000 in all 4 baseline and scenario runs. The park's bonus to the building dimension is capped. A numerical difference was displayed for the rent, commute and safety dimensions.
- How to read a difference: the baseline and the scenario of a comparison are run with separately generated residents. It is not a before-and-after value for the same residents, so each difference contains both the effect of the measure, if there is one, and the difference that comes from generating the residents again. From these 2 comparisons the presence or size of an effect of the measure cannot be separated out.
Limits
- There were 3 standard simulations and 2 scenario comparisons. That is not enough to estimate a distribution; the ranges above are the difference between the smallest and largest value of these runs.
- Every run used 10 agents. Variability at other agent counts was not measured.
- The analysis area and the dimensions used depend on the data loaded in production at the time of measurement.
- The results are computations about virtual residents. They do not show the intentions of actual residents or future population movement.
How to reproduce
- Sign in to UrbanAgents and open
/app. - Check the agent count and press 「シミュレーション開始」. When it completes, read the result box and press 「CSV」. Repeat with the same inputs.
- In the scenario comparison panel enter the measure, longitude and latitude and run the comparison. Read the display, then open the baseline run and the scenario run from 「過去のシミュレーション」 and press 「CSV」 for each. Repeat with the same inputs.
Data attribution
Per the code, UrbanAgents evaluates candidate cells with the data below. In this measurement the screen stated that the population data was not loaded, and the density dimension was not used in the evaluation. The values in this note are the result of UrbanAgents processing that data; they were not created or guaranteed by the data providers.
- Buildings: Source: MLIT PLATEAU website (https://www.mlit.go.jp/plateau/). Created by processing PLATEAU 3D city models.
- Zoning, published land prices, railways, flood inundation assumed areas, landslide disaster warning areas: Source: MLIT National Land Numerical Information download site (https://nlftp.mlit.go.jp/ksj/). Created by processing the respective 「国土数値情報」(国土交通省) datasets.
- Population: Source: Portal Site of Official Statistics of Japan, e-Stat (https://www.e-stat.go.jp/). Created by processing Population Census grid statistics (Statistics Bureau of Japan).
- See the UrbanAgents documentation; where each DXA Labs product gets its data is summarised in Data sources and measurements (Japanese).