日本語 | English
PLOS ONEに投稿した論文"Simulating Emergence of Novelties Using Agent-Based Models"に関するリポジトリです。
Julia の環境が必要。公式ページなどを参考にインストールする。
インストールした後、下記の手順で実験環境を構築する。ただし <>
で囲んだ部分はキーボードのキー入力。
$ julia --proj
julia> <]>
(AROB2023) pkg> instantiate
(AROB2023) pkg> <delete>
一部の分析には Python の環境が必要。
# 必要なモジュールのインストール
poetry install
- https://doi.org/10.6084/m9.figshare.13308428.v1 からデータをダウンロードし、以下のコマンドを実行する。
- zipファイルを解凍すると中に
APS_aff_data_ISI_original
ディレクトリがある。
- zipファイルを解凍すると中に
- 既に生成したデータが
data/
に保存されているため、これをそのまま利用しても良い。
julia --proj src/tasks/PreprocessingAPS.jl <path-to-APS_aff_data_ISI_original>
以下のコマンドで、戦略sを入力して実行する。 (実行に時間がかかるため、戦略ごとに分けて実行できるようにしている)
# sには戦略"asw"か"wsw"を入力して下さい
julia --proj --threads=auto src/tasks/RunModel.jl <s>
results/generated_histories
に生成されたデータが格納される。
julia --proj --threads=auto src/tasks/RunBaseModel.jl
results/generated_histories--base
に生成されたデータが格納される。
julia --proj --threads=auto src/tasks/RunPgbkModel.jl
results/generated_histories--pgbk
に生成されたデータが格納される。
事前に モデルを走らせて相互作用の履歴データを生成する を実行しておく必要がある。
# modelには"proposed"か"base"、"pgbk"を入力して下さい
# 指定しない場合はProposed Modelになります
julia --proj --threads=auto src/tasks/AnalyzeModels.jl <model>
results/analyzed_models/
にモデル、戦略ごとに以下のような形式で結果が保存される。
rho,nu,zeta,eta,gamma,c,oc,oo,nc,no,y,r,h,g
1,1,0.1,0.1,0.978818015295141,0.4047009698275862,0.30058742657167853,0.13123359580052493,0.20784901887264093,0.3603299587551556,0.5129046442573314,4.261350121900458,0.9715045696696164,0.45763423462530417
julia --proj src/tasks/AnalyzeTargets.jl
results/analyzed_targets
に結果データが格納される。
rho,nu,zeta,eta,gamma,c,oc,oo,nc,no,y,r,h,g
0,0,0.0,0.0,0.9984550695169351,0.03842432619212163,0.009248843894513185,0.14085739282589677,0.019997500312460944,0.8298962629671292,0.7471551524820348,0.05822546891664884,0.989713855195076,0.21895938205559523
ターゲットデータとモデルを走らせた結果の各種計測値の差を計算する。
以下を実行しておく必要がある。
# modelには"proposed"か"base"、"pgbk"を入力して下さい
# 指定しない場合はProposed Modelになります
julia --proj src/tasks/CalcDiffs.jl <model>
results/distances
または results/distances--base
、results/distances--pgbk
に結果が格納される。
rho,nu,zeta,eta,aps
8,10,0.1,0.5,0.3017873533979937
julia --proj src/tasks/AnalyzeClassification.jl
results/analyzed_classification
に結果が格納される。
事前に クラス分類の変化を分析する を実行しておく必要がある。
julia --proj src/tasks/AnalyzeAgentActivity.jl
results/triangle/aps
に結果が格納される。
提案モデルのパラメータζ/ηと指標G、、R、Yの関係を示す図のためのスクリプトである。 実行にはかなり時間を要するため、注意して下さい。
julia --proj src/tasks/RunModel_10times.jl
results/generated_histories_10times
に結果が格納される。
julia --proj src/tasks/AnalyzeHistory_10times.jl
results/analyzed_model_10times
に結果が格納される。
julia --proj src/tasks/MergeAnalyzedHistories.jl
results/analyzed_model_10times/mean.csv
に結果が格納される。
以下の4種類のグラフが生成される。図番号は論文に対応している。
- Fig2: ターゲットデータとの距離を示す棒グラフ
- Fig3: 各種指標を示すレーダーチャート
- Fig4: インターバル中に注目を集めたエージェントと誕生ステップの関係を示す散布図
- Fig5: エージェントが誕生したステップとアクティブ頻度の関係を示す散布図
事前に以下を実行しておく必要がある。
julia --proj src/tasks/PlotGraphs.jl
出力される図はresults/imgs
以下に保存される。
Fig6の図が生成される。 事前にProposed Modelの10回分の各種指標の平均を取る を実行しておく必要がある。
params_and_novelty.ipynb
を順に実行して下さい。
以下の2種類のグラフが生成される。
- Fig7: 各クラスに属するエージェントの数を示す図
- Fig8: 各クラスが選択される確率を示す図
事前にクラス分類の変化を分析する を実行しておく必要がある。
julia --proj src/tasks/PlotAnalyzedClassification.jl
出力される図はresults/imgs/classification
に保存される。
Fig9の図が生成される。 事前にエージェントの累積活動回数と所属クラスを分析する を実行しておく必要がある。
poetry run python python/triangle.py
出力される図はresults/imgs/triangle/aps
に保存される。
論文再投稿の際に出力形式を変更したことで、整合性が取れなくなったため、論文の実験に関わらないスクリプトは削除しました。 必要な場合はv0.1.1の時点のスクリプトを参照して下さい。