本リポジトリは、強化学習(Q学習)を用いたAIエージェントが、明示的なコミュニケーションなしにアルゴリズム的共謀(暗黙の価格カルテル)を形成するか検証したシミュレーションコードです。
Calvano, E., Calzolari, G., Denicolò, V., & Pastorello, S. (2020). "Artificial Intelligence, Algorithmic Pricing, and Collusion." American Economic Review, 110(10): 3267-3297.
English Summary
Python replication of the Q-learning algorithmic collusion model from Calvano et al. (AER, 2020). Two autonomous pricing agents learn to collude above the Nash equilibrium without explicit communication, exhibiting supra-competitive prices and punishment-based reward strategies characteristic of tacit collusion. Built with NumPy and Numba for high-performance simulation.
.
├── AER_python/ # ソースコード
│ ├── __init__.py # パッケージ定義
│ ├── config.py # 実験パラメータ設定(ステップ数、学習率など)
│ ├── environment.py # 経済環境(Logit需要モデル:消費者の選択確率に基づく需要関数)
│ ├── train.py # 学習ループ(Numbaによる高速化実装)
│ ├── evaluation.py # 結果の集計・統計分析
│ ├── impulse_response.py # インパルス応答分析(談合メカニズムの検証)
│ ├── main.py # 実験の実行エントリーポイント
│ └── test_components.py # 各モジュールの単体・統合テスト
├── results/ # 実験結果の出力先(初回実行時に自動生成されます)
│ └── README.md # 結果ファイルの追跡方針
├── requirements.txt # 依存ライブラリ一覧
├── CITATION.cff # GitHub citation metadata
├── LICENSE # MITライセンス
└── README.md # 本ファイル
- Python 3.11 (3.8以上で動作すると思われますが、推奨は3.11以上)
- macOS (Darwin 21.6.0)
以下の手順でセットアップを行ってください。
- ライブラリのインストール
再現性のため、依存ライブラリはバージョン固定しています。
python3 -m pip install -r requirements.txt
プロジェクトのルートディレクトリで以下のコマンドを実行します。
python3 -m AER_python.main- 初期化: 設定に基づき、環境とエージェントを初期化します。
- シミュレーション: 100セッション(各1,000万ステップ)の学習を逐次的に実行します。
- NumbaによるJITコンパイルにより、数十秒〜数分程度で完了します(環境依存)。
- 集計: 収束率、平均価格、平均利潤、協力指数(Delta)を計算します。
- 保存:
results/YYYYMMDD_HHMMSS/フォルダに結果を出力します。
| 項目 | 説明 |
|---|---|
| 目的 | AIエージェントが“アルゴリズム的共謀”を自律的に形成するか検証 |
| モデル | 2社の同質財市場、Logit需要モデル、離散的な価格グリッド |
| 学習 | Q学習(ε-greedy探索を指数減衰) |
| 成果物 | 100セッション分の学習結果、統計サマリー、インパルス応答グラフ |
ポイント: 収束した価格・利潤がナッシュ均衡より大幅に高い場合、「暗黙の談合」が起きていると判断できます。
実験が完了すると results/ フォルダ内にタイムスタンプ付きのディレクトリが作成され、以下が保存されます。
config.json:- 実験に使用したパラメータ設定(再現性確保のため)。
summary.json:- 全セッションの統計サマリー(収束率、平均価格など)。
- 協力指数(Delta): AIが独占利潤(完全談合)にどれだけ近づいているかを示す指標(0=Nash均衡、1=完全独占)。
results.pkl:- 全セッションの詳細データ(学習済みQ行列を含むPythonオブジェクト)。
pickleモジュールで読み込むことで、事後分析が可能です。
histogram_price.png:- 各セッションが収束した平均価格の分布ヒストグラム。
- Nash均衡価格と独占価格のラインも描画されます。
irf_price.png/irf_profit.png:- インパルス応答分析の結果グラフ。
- 談合状態から意図的に裏切った際の、価格と利潤の推移(処罰メカニズムの可視化)。
実験設定を変更したい場合は、AER_python/config.py を編集してください。
class Config:
# --- 実験規模 ---
n_sessions = 100 # セッション数(試行回数)
max_steps = 10_000_000 # 1セッションあたりの最大ステップ数
# --- Q学習パラメータ ---
alpha = 0.15 # 学習率
beta_decay = 0.1 # 探索率の減衰パラメータ
# ... 他コードの動作確認を行いたい場合は、まず軽量なスモークテストを実行してください。
python3 -m AER_python.test_components拡張テスト(ベンチマーク寄りの確認やメモリ計測を含む)を行う場合は、以下を使います。
python3 -m AER_python.test_components --full- 再現性について:
main.py実行時に乱数シードを制御しているため、同じ設定であれば同じ結果が再現されます。 - 計算時間: M1 Mac等の環境では100セッションで数十秒〜数分程度が目安ですが、マシンスペックにより変動します。
- CIについて: GitHub Actions では軽量スモークテストを自動実行する設定にしています。
results/は生成物ディレクトリです。新規実行結果は原則Git追跡しません。- 再現性の参照用として、
results/20251218_172404/のみ代表サンプルを追跡しています。 - 大容量バイナリ(
results.pkl)は追跡対象外です。
本コードを利用する場合は、元論文およびオリジナルのAERリポジトリへの引用をお願いします。
GitHub 上では CITATION.cff により Cite this repository ボタンが有効になります。
@article{calvano2020artificial,
title = {Artificial Intelligence, Algorithmic Pricing, and Collusion},
author = {Calvano, Emilio and Calzolari, Giacomo and Denicol{\`o}, Vincenzo and Pastorello, Sergio},
journal = {American Economic Review},
volume = {110},
number = {10},
pages = {3267--3297},
year = {2020},
doi = {10.1257/aer.20190623}
}Created for Graduation Thesis, 2025.