diff --git a/README.md b/README.md index f056b4a..d43a4f3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ Iwahashi, Okabe and Suda's experiments for MPS-TOM 2023 ## Abstract -エージェントベースの壺モデルの探索手法(全探索,GA,QD)の比較を行うリポジトリです。 +情報処理学会論文誌:数理モデル化と応用に投稿した論文に関するリポジトリです。 + +エージェントベースの壺モデルの探索手法(全探索,ランダムサーチ,GA,QD)の比較を行います。 - [**`data/`**](/data/) - 探索に用いるターゲットデータ - [**`full-search/`**](/full-search/) diff --git a/ga/README.en.md b/ga/README.en.md index 760eb5d..c2b8293 100644 --- a/ga/README.en.md +++ b/ga/README.en.md @@ -12,7 +12,7 @@ Contains the source code to perform a parameter search of the urn-model using th Parameter search by genetic algorithm is carried out in the following steps: -1. randomly generate a population with a vector representing the parameters: `(rho, nu, friendship, recentness)` for each individual. +1. randomly generate a population with a vector representing the parameters: `(rho, nu, recentness, frequency)` for each individual. 2. run the urn-model based on the parameters, calculate the goodness of fit from the results and record this 3. perform an evolutionary calculation of the population based on the goodness of fit a. Select individuals with high goodness of fit and perform crossover @@ -24,7 +24,7 @@ Parameter search by genetic algorithm is carried out in the following steps: In particular, the goodness of fit required in 2 (for each individual) is specifically calculated as follows: -1. run the urn-model based on the parameters (`rho`, `nu`, `friendship`, `recentness`) +1. run the urn-model based on the parameters (`rho`, `nu`, `recentness`, `frequency`) 2. record the "history of interactions" generated by the execution of the urn-model 3. compute 10 metrics that characterise the network using the history recorded in 2. 4. calculate the difference between the metrics of the target network and those calculated in 3, multiplied by -1, as the goodness of fit diff --git a/ga/README.md b/ga/README.md index 32d2beb..e649e81 100644 --- a/ga/README.md +++ b/ga/README.md @@ -12,7 +12,7 @@ 遺伝的アルゴリズムによるパラメタ探索は、以下のような手順で行われます。 -1. パラメタを表すベクトル: `(rho, nu, frequency, recentness)` を各個体とする集団をランダムに生成する +1. パラメタを表すベクトル: `(rho, nu, recentness, frequency)` を各個体とする集団をランダムに生成する 2. パラメタをもとに壺モデルを実行、その結果から適合度を算出し、これを記録する 3. 適合度をもとに、集団の進化計算を行う a. 適合度が高い個体を選択し、交叉を行う @@ -24,7 +24,7 @@ 特に2で(各個体ごとに)求められる適合度は、具体的には以下のようにして求められます。 -1. (`rho`, `nu`, `frequency`, `recentness`) というパラメタをもとに、壺モデルを実行する +1. (`rho`, `nu`, `recentness`, `frequency`) というパラメタをもとに、壺モデルを実行する 2. 壺モデルの実行によって生成された「相互やり取りの履歴」を記録する 3. 2で記録した履歴を用いて、ネットワークの特徴を示す10個のメトリクスを計算する 4. ターゲットとしているネットワークのメトリクスと、3で計算したメトリクスとの間の差分を計算し、これに-1をかけたものを適合度とする diff --git a/qd/README.md b/qd/README.md index 312afe1..a799589 100644 --- a/qd/README.md +++ b/qd/README.md @@ -4,7 +4,7 @@ Quality Diversity(QD)による壺モデルのパラメータ探索を行うソースコード一式が含まれています。 -この探索には、[pyribs](https://pyribs.org) というQDのライブラリを使用しています。探索空間はCVT-MAP-Elitesと呼ばれる手法によって固定数のセルに分割されており、今回はセル数を500に設定しています。探索空間の軸であるbehavioral descriptorには、壺モデルで生成されたネットワークをgraph2vecで128次元のベクトルに変換して使用しています。したがって、探索空間はgraph2vecによって生成されるベクトルの値域が[-5, 5]の128次元に設定されています。 +この探索には、[pyribs](https://pyribs.org) というQDのライブラリを使用しています。探索空間はCVT-MAP-Elitesと呼ばれる手法によって固定数のセルに分割されています。探索空間の軸であるbehavioral descriptor(BD)には、壺モデルで生成されたネットワークをgraph2vecで変換して使用しており、値域は[-5,5]です。 ## 実行方法 @@ -14,23 +14,25 @@ Quality Diversity(QD)による壺モデルのパラメータ探索を行う ```bash $ python make_model.py ``` +BDに用いられる64,128,256次元のgraph2vecのモデルが作成されます。 ### QDによる探索 このディレクトリ(`/qd`)に移動した上で,`main.py` を実行してください。 +次元数は`make_model.py`で設定した64,128,256次元のいずれかを指定してください。 ```bash $ pwd # => /path/to/qd -$ python main.py {twitter,aps,synthetic} [rho] [nu] [{SSW,WSW}] +$ python main.py {twitter,aps,synthetic} [rho] [nu] [{SSW,WSW}] ``` 実行例を以下に示します。 -ターゲットデータが実データ(twitter)の場合: +ターゲットデータが実データ(twitter)でBDが128次元、分割するセル数が500の場合: ```bash -$ python main.py twiiter +$ python main.py twiiter 128 500 ``` -ターゲットデータが合成データ(rho,nu,s)=(5,5,SSW)の場合: +ターゲットデータが合成データ(rho,nu,s)=(5,5,SSW)でBDが64次元、分割するセル数が750の場合の場合: ```bash -$ python main.py synthetic 5 5 SSW +$ python main.py synthetic 64 750 5 5 SSW ``` 実行を行うと,`./results/{twitter,aps,synthetic}` 以下に結果が保存されます。その中に各世代ごとのアーカイブデータと,最終的な結果が保存されます。 diff --git a/random-search/README.md b/random-search/README.md index 9792ff7..f57d3c6 100644 --- a/random-search/README.md +++ b/random-search/README.md @@ -1,13 +1,13 @@ ## 概要 パラメータのランダムサーチを行います。 -決められたrho,nu,recentness,frequencyの範囲でランダムに遺伝子を生成する。 +決められた`rho,nu,recentness,frequency`の範囲でランダムに遺伝子を生成する。 生成した遺伝子で壺モデルを一定回数実行し、遺伝子パラメータと10個の指標を保存する。 -GA,QDはターゲットデータに合うように(rho,nu,s)を探索しますが、`randome-search/main.py`ではターゲットデータを意識していません。 -ターゲットデータとのフィッティング(ターゲットデータとのdistanceを求め、最良の(rho,nu,s)を見つける操作)は`fitting.py`で行われます。 +GA,QDはターゲットデータに合うように`(rho,nu,s)`を探索しますが、`randome-search/main.py`ではターゲットデータを意識していません。 +ターゲットデータとのフィッティング(ターゲットデータとのdistanceを求め、最良の`(rho,nu,s)`を見つける操作)は`fitting.py`で行われます。 ## 実行方法 -、10個の指標を計算して保存するには、以下のコマンドを実行してください。 +10個の指標を計算して保存するには、以下のコマンドを実行してください。 ```bash $ python main.py ``` @@ -18,6 +18,7 @@ rho,nu,recentness,frequency,gamma,no,nc,oo,oc,c,y,g,r,h ... ``` + 次に以下のコマンドを実行してください。`./results/random-search.csv`を用いて、各ターゲットデータとの距離を計算できます。 ```bash $ python fitting.py diff --git a/visualize/README.md b/visualize/README.md index 79065dc..49be1a3 100644 --- a/visualize/README.md +++ b/visualize/README.md @@ -2,9 +2,9 @@ ## 概要 -以下の5種類の図と2種類の表を作成する。 +以下の5種類の図と2種類の表を出力するソースコードです。 -図を生成するスクリプトは`/graphs`にある。 +図を生成するスクリプトは`/graphs`にあります。 - 箱ひげ図 - `box.py` - full-search,random-search,GA,QD @@ -39,7 +39,7 @@ ## 実行方法 ### 前処理 -GA,QD,ランダムサーチで見つけた最良のrho,nu,recentness,frequencyの組で壺モデルを10回走らせます。(既存モデルの全探索では初めから10回走らせているため、ここでは行いません) +GA,QD,ランダムサーチで見つけた最良の`(rho,nu,recentness,frequency)`の組で壺モデルを10回走らせます。(既存モデルの全探索では初めから10回走らせているため、ここでは行いません) ```bash $ pwd # => /path/to/visualize $ python preprocessing.py @@ -56,7 +56,7 @@ $ python make_vec.py ### 可視化のスクリプト -図を出力する場合 +図を出力する場合: ```bash $ pwd # => /path/to/visualize $ python main.py @@ -65,7 +65,7 @@ $ python main.py 実行を行うと,`./results` 以下にグラフの種類ごとに分けられて結果が保存されます。 -最良個体の距離の平均と分散を示す表を出力する場合 +最良個体の距離の平均と分散を示す表を出力する場合: ```bash $ python tables/print_best.py ``` @@ -74,5 +74,5 @@ $ python tables/print_best.py $ pwd # => /path/to/visualize $ python graphs/latex_table.py ``` -`MPS-TOM-urnmodel/`で用意されているpoetry環境では、`latex_table.py`だけpandasのversionの依存関係が合わないため、動きません。 +`MPS-TOM-urnmodel/`で用意されているpoetry環境では、`latex_table.py`だけ`pandas`のversionの依存関係が合わないため、動きません。 `pandas>=1.5.3`, `Jinja2>=3.0.0`, `matplotlib`, `numpy`のある環境で実行してください。