Skip to content

Yusei406/calvano2020-replication

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI価格協調シミュレーション (Replication of Calvano et al., 2020)

Smoke Test License: MIT Python 3.11 DOI Last Commit

本リポジトリは、強化学習(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)

以下の手順でセットアップを行ってください。

  1. ライブラリのインストール 再現性のため、依存ライブラリはバージョン固定しています。
    python3 -m pip install -r requirements.txt

🚀 実行方法

プロジェクトのルートディレクトリで以下のコマンドを実行します。

python3 -m AER_python.main

実行の流れ

  1. 初期化: 設定に基づき、環境とエージェントを初期化します。
  2. シミュレーション: 100セッション(各1,000万ステップ)の学習を逐次的に実行します。
    • NumbaによるJITコンパイルにより、数十秒〜数分程度で完了します(環境依存)。
  3. 集計: 収束率、平均価格、平均利潤、協力指数(Delta)を計算します。
  4. 保存: 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)

  • results/ は生成物ディレクトリです。新規実行結果は原則Git追跡しません。
  • 再現性の参照用として、results/20251218_172404/ のみ代表サンプルを追跡しています。
  • 大容量バイナリ(results.pkl)は追跡対象外です。

📖 引用 / Citation

本コードを利用する場合は、元論文およびオリジナルの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.

Releases

No releases published

Packages

 
 
 

Contributors

Languages