動画の数字を、自分の手元で確かめる
sim-lab — 「ひとつ変えてみる」のシミュレーション
YouTube チャンネル「ひとつ変えてみる」で使ったシミュレーションのコード・固定した乱数シード・結果 JSONを、回ごとに置く頁です。動画に出てくる結果の数字は、ここにある結果 JSON から取っています。
音声と映像の制作用のコード(描画・制作の手順・台本の生成器)は、この頁には置いていません。ここにある物だけで作り直せるのは、シミュレーションの数字(結果 JSON と結果表)です。動画そのものは作り直せません。
回の一覧
| 回 | 題材 | 版 |
|---|---|---|
| ひとつ変えてみる No.01 / sim-lab ep01 | シェリングの分居モデル(Schelling 1971) | ep01 版(下のファイル一式。各ファイルの sha256 つき) |
| ひとつ変えてみる No.02 / sim-lab ep02 | グラノヴェッターのしきい値モデル(Granovetter 1978) | ep02 版(下のファイル一式。各ファイルの sha256 つき) |
| ひとつ変えてみる No.03 / sim-lab ep03 | 投票者モデル(Clifford & Sudbury 1973) | ep03 版(下のファイル一式。各ファイルの sha256 つき) |
| ひとつ変えてみる No.04 / sim-lab ep04 | Braess のパラドックス(Braess 1968・数の例は Easley & Kleinberg 2010) | ep04 版(下のファイル一式。各ファイルの sha256 つき) |
動画の説明欄の「ep01 版」「ep02 版」「ep03 版」「ep04 版」は、この頁の各一覧を指します。同じ版かどうかは sha256 で確かめられます。
ep01 版のファイル
.py と .md は、この頁では末尾に .txt を付けて置いています(中身は1バイトも同じなので、sha256 の値も同じです)。下の表の sha256 は元のファイル名のときの値です。
| パス | 何か | バイト | sha256 |
|---|---|---|---|
sim/schelling.py | モデル本体と全実験。世界の定義・動かし方・測り方がこの1ファイルにあります | 29,347 | b1d365eff621c92420032fa46be5182f5c97893af69ea6e8027d7421a560c59a |
sim/make_report.py | 結果 JSON から結果表(report/results.md)を作る | 9,460 | 65948504949d2780aab5185d8963f602c5839dd9d2ccf574f0d16ecec432dfb1 |
sim/predictions.json | 回す前に書いた予想(13個)。書いた時刻(written_at)は当社の自己申告です | 3,119 | 55e0277acd1e471dc4d6eb4773f38a83911d1253fbcf9cd3c00ce4ac178c0223 |
sim/results/baseline.json | 結果(全条件・全シード) | 43,739 | 15027c9db964c669a76b128c5b86ad2ee386a6fa428bdf68750beb27e24600fa |
sim/results/colors_shape.json | 結果(全条件・全シード) | 86,272 | b9968711d6653d4c0de4b20b83a1a25e64966587386f8d30f05648a1e8dd6687 |
sim/results/display_finals.json | 結果(全条件・全シード) | 512,191 | 0ef47c2bbb9ca6fffefa229b38535e2f4088ba8eee45db1f50883c53f0a156c8 |
sim/results/display_run_colors3_bounded.json | 結果(全条件・全シード) | 177,733 | 3e23bee322d4d18ecc4d5bb8d82e266c724d52996957b8a21fa8fb7e67922027 |
sim/results/display_run_indiff030.json | 結果(全条件・全シード) | 126,337 | 545dd4bce9c381545e41410c61da6a63f53ab2356956eedf89254f743b95dd6e |
sim/results/display_run_moveprob020.json | 結果(全条件・全シード) | 543,113 | a78b91ad427f02b3e51bad16a0cc16a6eaec8a17c7ed68e0eec77267aacca8ac |
sim/results/display_run_t030.json | 結果(全条件・全シード) | 151,766 | 07dbc1b0e19fabc54742e2a553ce4ff4880a4efe51b70f25ebc5356da905193a |
sim/results/indifferent.json | 結果(全条件・全シード) | 63,385 | 820fffa8b11a94d14c4516caba44d41b73dafa5da4108c6453c10dfb041c2ff9 |
sim/results/move_prob.json | 結果(全条件・全シード) | 102,934 | cb6d2e5b821ea722b362fae707d5ec9a43eda58a257abaedd0ceba3feaf2835a |
sim/results/predictions_check.json | 予想の当たり外れ | 3,703 | 1b8cdb779a3c536fe848361c6458636b02b06668ded3a6e7620cfd75008e5e36 |
sim/results/summary.json | 結果(全条件・全シード) | 192,955 | 9fe2e325fdcfca3fda6d673d9465ea17ad080141467b319354cbd43a8b384402 |
sim/results/sweep_t.json | 結果(全条件・全シード) | 237,598 | d10a87a1d751a7f6fb412187fe80399d9466cdbf8415d635a6aecaf9f7940652 |
sim/results/sweep_t_ext.json | 結果(全条件・全シード) | 170,170 | 68b79d9afa5c4e83ef13c5d20447e0a28eb4f86e926878b653f1125df4fe4b12 |
report/results.md | 結果表(平均・最小〜最大・n) | 11,904 | a4796cf1deaab4a03d2568767434fde04d0f1b30a40c7fa6c9a2de0d2dcad793 |
tests/test_sim_metrics.py | 指標の計算の試験(9件) | 4,580 | e1850325c99b58c89037d2c1d064f0127380b206efc9c26a8d65393c0121db04 |
script/ep01.md | 動画の台本の全文。数字は結果 JSON から差し込んだもの | 18,996 | b817326c09e7f67d7ef4d45b567c6b9d6e160df27e43d97f045bd8fb1c04a925 |
LICENSE | Apache License 2.0 の本文 | 11,358 | cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 |
sha256 の一覧は2つ置いています。20個の値はどちらも同じで、名前の列だけが違います。保存した名前に合うほうを使ってください——どちらでも sha256sum -c が 20行すべて OK になります。
| 一覧 | 名前の列 | これを使う人 |
|---|---|---|
SHA256SUMS.txt | 元の名前LICENSE / sim/schelling.py | 下の「再現手順」のとおり、元の名前に戻して保存した人(そのまま回せる形) |
SHA256SUMS-published.txt | この頁の名前LICENSE.txt / sim/schelling.py.txt | この頁の木を.txt 付きのまま写した人 |
ep01 の再現手順
結果を作った環境: Python 3.12.3・NumPy 2.5.3。外部のデータは読みません(街は乱数で作る合成の街です)。
1. 空のフォルダで、ファイル一式を元の名前で取り寄せて sha256 を確かめる(.txt 付きで置いてある物を、元の名前に戻して保存します。20行すべて OK になります):
for f in sim/schelling.py sim/make_report.py sim/predictions.json sim/results/baseline.json sim/results/colors_shape.json sim/results/display_finals.json sim/results/display_run_colors3_bounded.json sim/results/display_run_indiff030.json sim/results/display_run_moveprob020.json sim/results/display_run_t030.json sim/results/indifferent.json sim/results/move_prob.json sim/results/predictions_check.json sim/results/summary.json sim/results/sweep_t.json sim/results/sweep_t_ext.json report/results.md tests/test_sim_metrics.py script/ep01.md LICENSE; do
mkdir -p "$(dirname "$f")"
case "$f" in *.json) src="$f" ;; *) src="$f.txt" ;; esac
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/$src" -o "$f"
done
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/SHA256SUMS.txt" -o SHA256SUMS.txt
sha256sum -c SHA256SUMS.txt
この頁に置いてある名前(.txt 付き)のまま写したい場合は、こちら。確かめる一覧も -published のほうを使います(こちらは 2. を回す前に .txt を外す必要があります):
for f in sim/schelling.py.txt sim/make_report.py.txt sim/predictions.json sim/results/baseline.json sim/results/colors_shape.json sim/results/display_finals.json sim/results/display_run_colors3_bounded.json sim/results/display_run_indiff030.json sim/results/display_run_moveprob020.json sim/results/display_run_t030.json sim/results/indifferent.json sim/results/move_prob.json sim/results/predictions_check.json sim/results/summary.json sim/results/sweep_t.json sim/results/sweep_t_ext.json report/results.md.txt tests/test_sim_metrics.py.txt script/ep01.md.txt LICENSE.txt; do
mkdir -p "$(dirname "$f")"
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/$f" -o "$f"
done
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/SHA256SUMS-published.txt" -o SHA256SUMS-published.txt
sha256sum -c SHA256SUMS-published.txt
2. 回す(23条件 × 10シード〈seed 1001〜1010〉)・結果表を作る・試験する:
python3 -m venv .venv && .venv/bin/pip install numpy==2.5.3 pytest
.venv/bin/python sim/schelling.py --out rerun
.venv/bin/python sim/make_report.py --results rerun --out rerun/results.md
.venv/bin/python -m pytest -q tests
rerun/ にできた JSON は、sim/results/ の同名のファイルと、実行の時刻と所要時間の欄(generated_at・runtime_s・runtime_per_condition_s)を除いて一致します(当社の環境で 2026-10-10 に確かめました。1回の確認です)。
ep02 版のファイル
許可した再現用の6本と LICENSE です。.py と .md は公開面では末尾に .txt を付けていますが、中身は同じです。
| パス | 何か | バイト | sha256 |
|---|---|---|---|
sim/granovetter.py | しきい値モデル本体と E1〜E6 | 11,972 | 00fddbd2ca9fac8d2c1b5f5eb7a3054f271503207e6a3b08797673586939ff8c |
sim/ep02_predictions.json | 本番の乱数を回す前に書いた予想(14個) | 3,835 | fe9cfc51562909cfe8157332ef48b888efb649fcadcaeff4539b7ca2ddec9553 |
sim/results/ep02/summary.json | E1〜E6 の結果 | 65,632 | 131fece31e864c7e2059541fc97d0e7377c323f8e8ba9efc50190f2f82f01b5a |
sim/results/ep02/predictions_check.json | 予想の当たり外れ | 3,550 | 50da174db78660606bd3f08049e7c9912ea78417f650e3d7f2a816fbe0251f24 |
report/ep02-results.md | 結果表 | 2,846 | 4743597e618fb947ef819d4d1c7713d5cc8d90075eee2fa39f0272234687e070 |
tests/test_granovetter.py | モデル・決定性・予想判定の試験 | 2,373 | 2b4ce38902cdffe45b67df18862c9f26d0e8cf1506b8a94b60ec217e0c489192 |
LICENSE | Apache License 2.0 の本文 | 11,358 | cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 |
SHA256SUMS-ep02.txt は元の名前、SHA256SUMS-ep02-published.txt はこの頁の名前で検証する一覧です。
ep02 の再現手順
結果を作った環境は Python 3.12・NumPy 2.5.3。次の手順で取り寄せて検証し、計算をやり直せます。
set -- sim/granovetter.py sim/ep02_predictions.json sim/results/ep02/summary.json sim/results/ep02/predictions_check.json report/ep02-results.md tests/test_granovetter.py LICENSE
for f do
mkdir -p "$(dirname "$f")"
case "$f" in *.json) src="$f" ;; *) src="$f.txt" ;; esac
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/$src" -o "$f"
done
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/SHA256SUMS-ep02.txt" -o SHA256SUMS-ep02.txt
sha256sum -c SHA256SUMS-ep02.txt
python3 -m venv .venv && .venv/bin/pip install numpy==2.5.3 pytest
.venv/bin/python sim/granovetter.py --out rerun
.venv/bin/python -m pytest -q tests/test_granovetter.py
rerun/summary.json は公開した結果と、実行時刻・所要時間の generated_at と runtime_s を除いて一致します。
ep02 のモデルについて
- Granovetter (1978) の原論文の例は暴動などの集団行動です。動画では観客が立ち上がる場面に置き換えましたが、しきい値の計算は同じです。
- このモデルが言えないこと: しきい値だけのモデルで、誰が誰を見ているか、席の近さは入っていません。
- 予想は本番の乱数を回す前に書きましたが、設計の試し回しを見た後です。この経緯は
sim/ep02_predictions.jsonの_explorationに記録しています。
参考文献
- Granovetter, M. (1978). Threshold Models of Collective Behavior. American Journal of Sociology, 83(6), 1420–1443. doi:10.1086/226707
ep03 版のファイル
許可した再現用の6本と LICENSE です。.py と .md は公開面では末尾に .txt を付けていますが、中身は同じです。
| パス | 何か | バイト | sha256 |
|---|---|---|---|
sim/ep03/voter_model.py | 投票者モデル本体と E1〜E4 | 15,263 | de4a1e7e11183847b5acaded5eb8aba336346aae15fef3032aa38c0c89d64cfc |
sim/ep03/predictions.json | 本番の乱数を回す前に書いた予想(14個) | 4,334 | df804983976a31f007b1c22142fca0565002af6b7cc3eb753b725441f71a7897 |
sim/results/ep03/summary.json | E1〜E4 の結果 | 166,793 | 3898600c487542338e38192f46ea8a47ff747300f526399a0871ae3e921f1ed0 |
sim/results/ep03/predictions_check.json | 予想の当たり外れ | 3,313 | 493c263edf9e67bf6e8e6afb390b9f01328da93e9b7c10050fbd9d1a7c8c6f9d |
report/ep03-results.md | 結果表 | 2,850 | ff052b931bbdbc053bc5e85195026cbf1354b23d1df563866a40668e7fb1c98a |
sim/ep03/test_voter_model.py | モデル・決定性・予想判定の試験 | 7,433 | 9e1aa977d7610f715dd0b1a6de32bd80096c585040ae0e45d5e3a3707c98eb9d |
LICENSE | Apache License 2.0 の本文 | 11,358 | cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 |
SHA256SUMS-ep03.txt は元の名前、SHA256SUMS-ep03-published.txt はこの頁の名前で検証する一覧です。
ep03 の再現手順
標準ライブラリだけを使います。次の手順で取り寄せて検証し、計算をやり直せます。
set -- sim/ep03/voter_model.py sim/ep03/predictions.json sim/results/ep03/summary.json sim/results/ep03/predictions_check.json report/ep03-results.md sim/ep03/test_voter_model.py LICENSE
for f do
mkdir -p "$(dirname "$f")"
case "$f" in *.json) src="$f" ;; *) src="$f.txt" ;; esac
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/$src" -o "$f"
done
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/SHA256SUMS-ep03.txt" -o SHA256SUMS-ep03.txt
sha256sum -c SHA256SUMS-ep03.txt
python3 sim/ep03/voter_model.py --results-dir rerun
python3 -m unittest -v sim/ep03/test_voter_model.py
rerun/summary.json は公開した結果と、実行時刻・所要時間の generated_at と runtime_s を除いて一致します。
ep03 のモデルについて
- 原論文は、2つの種が格子の上で縄張りを争うモデルです。動画は場所をなくした版で、相手を選ばずにまねし、2つの種を意見AとBに置き換えています。
- 名前は投票者モデルですが、選挙は扱いません。
- このモデルが言えないこと: 隣や友だちの区別、意見を曲げない人、多数派に合わせる人は入っていません。現実の話し合いや選挙をこのモデルから読むことはできません。
- 予想は本番の乱数を回す前に書きましたが、設計の試し回しを見た後です。この経緯は
sim/ep03/predictions.jsonの_explorationに記録しています。
参考文献
- Clifford, P., & Sudbury, A. (1973). A model for spatial conflict. Biometrika, 60(3), 581–588. doi:10.1093/biomet/60.3.581
- Holley, R. A., & Liggett, T. M. (1975). Ergodic theorems for weakly interacting infinite systems and the voter model. The Annals of Probability, 3(4), 643–663. doi:10.1214/aop/1176996306
- Castellano, C., Fortunato, S., & Loreto, V. (2009). Statistical physics of social dynamics. Reviews of Modern Physics, 81(2), 591–646. doi:10.1103/RevModPhys.81.591
ep04 版のファイル
許可した再現用の6本と LICENSE です。.py と .md は公開面では末尾に .txt を付けていますが、中身は同じです。
| パス | 何か | バイト | sha256 |
|---|---|---|---|
sim/ep04/braess_model.py | Braess のパラドックス(一台ずつ乗り換える)本体と E1〜E4 | 22,821 | 700d3de765d4784e996c2fd9822489efab032e132eabf1e7be4406f09f3c3bd6 |
sim/ep04/predictions.json | 本番の乱数を回す前に書いた予想(14個) | 4,415 | 902ddb7bb7235da60ca41b97e1e10cb7e2c97300430ae5fa12a11190387ca471 |
sim/results/ep04/summary.json | E1〜E4 の結果 | 95,135 | b10f453f78f269eee2ee4f61a75f5955aef55779f5abae5556ae3ea1592a2df2 |
sim/results/ep04/predictions_check.json | 予想の当たり外れ | 3,156 | dffd7bbd4abb3418423548b418cd64353bd948bcf7a53c2a221c67580e5a2a0e |
report/ep04-results.md | 結果表 | 3,998 | 51882bc094eb6671020d422d8520d0d43018b5062b1037739b5ec0d3329c47c5 |
sim/ep04/test_braess_model.py | モデル・決定性・理論値の試験 | 3,883 | d796e39db158832090359822c9f3687a774fe0ce64fc0ba87bdcfab4a442369c |
LICENSE | Apache License 2.0 の本文 | 11,358 | cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 |
SHA256SUMS-ep04.txt は元の名前、SHA256SUMS-ep04-published.txt はこの頁の名前で検証する一覧です。
ep04 の再現手順
標準ライブラリだけを使います。次の手順で取り寄せて検証し、計算をやり直せます。
set -- sim/ep04/braess_model.py sim/ep04/predictions.json sim/results/ep04/summary.json sim/results/ep04/predictions_check.json report/ep04-results.md sim/ep04/test_braess_model.py LICENSE
for f do
mkdir -p "$(dirname "$f")"
case "$f" in *.json) src="$f" ;; *) src="$f.txt" ;; esac
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/$src" -o "$f"
done
curl -fsSL "https://apps.d-it.co.jp/sim-lab/files/SHA256SUMS-ep04.txt" -o SHA256SUMS-ep04.txt
sha256sum -c SHA256SUMS-ep04.txt
python3 sim/ep04/braess_model.py --results-dir rerun
cd sim/ep04 && python3 -m unittest -v test_braess_model.py
rerun/summary.json は公開した結果と、実行時刻・所要時間の generated_at と runtime_s を除いて一致します。
No.04「近道」— 照合の記録
No.04「近道」の結果ファイル summary.json(この頁で公開しているもの)の値を、別に書いた第2の実装で計算し直し、1項目ずつ比べました。第2の実装は、経路ごとの式を使わず、道の一本一本に何台いるかを数え直してから所要時間を足す書き方です。
| 記録 | 内容 |
|---|---|
| 照合した項目数 | 4,869 |
| 比べた元 | この頁の summary.json(動画の数字を計算した当社の実装の結果) |
| 比べた相手 | 当社の第2の実装(別の書き方で計算し直したもの) |
| 食い違い | 0 |
| 照合した日 | 2026年11月5日 |
| 記録の出所 | 当社の制作記録 EP04 §3「突き合わせ」(社内文書)。第2の実装のコードと照合の出力は、この頁には載せていません |
比べたのは、「道なし」「道あり」の各1,000回の結果・台数を変えた掃引・動画で見せた回の途中経過・理論の値・予想の当たり数の、合わせて4,869項目です。2026年11月5日の照合では、食い違いは0でした。どちらの実装も当社が書いたもので、社外による検証ではありません。
ep04 のモデルについて
- 道の網と時間(4,000台・A→C と D→B は台数÷100分・C→B と A→D は45分・足す道 C→D は0分)は、Easley & Kleinberg (2010) 第8章の図8.1・8.2 の例です。車を一台ずつ、今より早く着ける道へ乗り換えさせる動きは当社が独自に実装しました。
- 動画のショートは、近道のない世界が止まった後に、同じ乱数の続きで近道を開けた回(
summary.jsonのfeatured.road_open)を見せています。1,000回の比較は、同じ最初の分かれ方から両方の世界を回したものです。 - このモデルが言えないこと: 車はみな同じで、かかる時間だけで道を選び、いまの混み方を正確に知っています。信号・事故・時間帯の違いは入っていません。現実の道路を足すべきか・減らすべきかを、このモデルだけで言うことはできません。
- 予想は本番の乱数を回す前に書きましたが、設計の試し回しと理論の計算を見た後です。この経緯は
sim/ep04/predictions.jsonの_explorationに記録しています。
参考文献
- Braess, D. (1968). Über ein Paradoxon aus der Verkehrsplanung. Unternehmensforschung, 12(1), 258–268. doi:10.1007/BF01918335
- Braess, D., Nagurney, A., & Wakolbinger, T. (2005). On a Paradox of Traffic Planning. Transportation Science, 39(4), 446–450. doi:10.1287/trsc.1050.0127
- Easley, D., & Kleinberg, J. (2010). Networks, Crowds, and Markets: Reasoning about a Highly Connected World. Cambridge University Press, Chapter 8. doi:10.1017/CBO9780511761942
モデルについて
- Schelling (1971) を元に、当社が独自に実装しました(論文のコードや、既存の動画・ツールのコードは使っていません)。
- このモデルが言えないこと: 住民の好みだけを入れたモデルで、制度・所得・歴史は入っていません。現実の街が分かれている原因を、このモデルだけで言うことはできません。
sim/predictions.jsonの予想と結果は同じ時に公開しているため、予想が結果より前に書かれたことを第三者が確かめる手段はありません。
参考文献
- Schelling, T. C. (1971). Dynamic models of segregation. Journal of Mathematical Sociology, 1(2), 143–186. doi:10.1080/0022250x.1971.9989794
- Duncan, O. D., & Duncan, B. (1955). A methodological analysis of segregation indexes. American Sociological Review, 20(2), 210–217. doi:10.2307/2088328
- Reardon, S. F., & Firebaugh, G. (2002). Measures of multigroup segregation. Sociological Methodology, 32(1), 33–67. doi:10.1111/1467-9531.00110
ライセンスとクレジット
- 当社の著作物(コード・結果 JSON・文書): Apache License 2.0(本文は
LICENSE)。Copyright 2026 株式会社DIGIT (DIGIT Inc.) - 声: No.01 完全版だけ合成音声で、ほかは字幕だけです。音声ファイルは置いていません。
- フォント: 動画の文字は Noto Sans JP(SIL Open Font License 1.1)。フォントのファイルは置いていません。
訂正の窓口
誤りのご指摘は当社の窓口へお寄せください。確認して訂正します(動画のコメント欄でも受け付けますが、見落とすことがあります)。
ここにあるデータはすべて合成です(実在の人物・場所・学校は含みません)。ご指摘に個人情報は書かないでください。
開示
コード・台本・映像は AI が作成しました。No.01 完全版だけ合成音声で、ほかは字幕だけです。法的な運営者は株式会社DIGITです。この頁と動画は教育・情報提供を目的としており、特定の個人・団体・政策を支持または批判するものではありません。