https://github.com/cyokozai/abc_mapelites
品質多様性アルゴリズム ABC MEAP-Elites とは,ABC と MAP-Elites を組み合わせた,ノイズ耐性を持ちつつ品質多様性探索を行う,全く新しい探索アルゴリズムである.
https://github.com/cyokozai/abc_mapelites
artificial-bee-colony-algorithm centroidal-voronoi-tessellation genetic-algorithm map-elites
Last synced: 3 months ago
JSON representation
品質多様性アルゴリズム ABC MEAP-Elites とは,ABC と MAP-Elites を組み合わせた,ノイズ耐性を持ちつつ品質多様性探索を行う,全く新しい探索アルゴリズムである.
- Host: GitHub
- URL: https://github.com/cyokozai/abc_mapelites
- Owner: cyokozai
- License: apache-2.0
- Created: 2024-05-21T11:53:43.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-10T17:20:02.000Z (4 months ago)
- Last Synced: 2025-03-10T18:30:13.436Z (4 months ago)
- Topics: artificial-bee-colony-algorithm, centroidal-voronoi-tessellation, genetic-algorithm, map-elites
- Language: Julia
- Homepage:
- Size: 47.3 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ABC MAP-Elites
## 品質多様性アルゴリズム ABC MAP-Elitesについて
実世界の問題では優良解が実装不可能な場合や,計測値にノイズが存在する場合がある.
それゆえ,最適解と同時に多様な準最適解を探索する,品質多様性アルゴリズムが提案されている.
既存手法では,品質多様性アルゴリズムのひとつである MAP-Elites[^1] の探索フェーズに差分進化 (Differential Evolution | DE)[^2] を用いた Differential MAP-Elites (DME)[^3] が提案された.
探索性能が向上した一方,差分進化のパラメータ依存性や局所最適解からの脱出能力の低さが指摘されている.
そこで,パラメータ調整が容易かつ局所最適解からの脱出能力が高い,Artificial Bee Colony Argorithm (ABC)[^4] に着目する.
本研究では,ノイズ耐性を持つ品質多様性探索を行うため,ABC と MAP-Elites を組み合わせた ABC MAP-Elites (ABCME) を提案し,その有効性を検証する.[^1]: Illuminating search spaces by mapping elites
[^2]: Differential Evolution - A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces
[^3]: Self-referential quality diversity through differential MAP-Elites
[^4]: An Idea Based on Honey Bee Swarm for Numerical Optimization, Technical Report - TR06## How to use this program
### Install
- Docker
```shell
make container
```- Local
```shell
make local-run
```- All
```shell
make all
```- Confirm apps
```shell
$ docker -v
Docker version 27.3.1, build ce12230
$ julia -v
julia version 1.10.5
$ python3 -V
Python 3.10.12
$ pip -V
pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
```### Deploy the programs on Docker
- Set the source code into `./src`
- Test `./docker-runner.py````shell
python3 docker-runner.py test
```- Run `./docker-runner.py`
```shell
python3 docker-runner.py
```### MAP-elites Configuration
- Open `./src/config.jl`
---
### General Parameters
| パラメータ名 | 説明 | デフォルト値 | 備考 |
|--------------------------------|----------------------------------------------------------------------|--------------------|---------------------------------------|
| `D` | 次元数 | `ARGS[1]` | `ARGS[1] == "test"`の場合は2に固定 |
| `N` | 集団サイズ | 64 | |
| `BD` | 行動次元数 | 2 | 変更不可 |
| `CONV_FLAG` | 収束フラグ | `false` | `true`の場合、収束確認モード |
| `EPS` | 収束判定の閾値 | `1e-6` | |
| `FIT_NOISE` | フィットネスにノイズを追加するか | `true` | |
| `r_noise` | ノイズ率 | `0.01` | |
| `MAXTIME` | 最大時間ステップ数 | 条件により変化 | `CONV_FLAG`や`OBJ_F`に依存 |---
### MAP Parameters
| パラメータ名 | 説明 | デフォルト値 | 備考 |
|--------------------------------|----------------------------------------------------------------------|--------------------|---------------------------------------|
| `GRID_SIZE` | グリッドマップのグリッドサイズ | `158` | `MAP_METHOD == grid`時に使用 |
| `k_max` | CVT方式の最大クラスタ数 | `25000` | `MAP_METHOD == cvt`時に使用 |---
### Voronoi Parameters
| パラメータ名 | 説明 | デフォルト値 | 備考 |
|--------------------------------|----------------------------------------------------------------------|--------------------|---------------------------------------|
| `cvt_vorn_data_update_limit` | Voronoiデータの更新制限 | `3` | `ARGS[5]`で指定可能 |
| `CVT_MAX_ITER` | CVTの最大反復回数 | `100` | |---
### MAP-Elites Parameters
| パラメータ名 | 説明 | デフォルト値 | 備考 |
|--------------------------------|----------------------------------------------------------------------|--------------------|---------------------------------------|
| `MUTANT_R` | 突然変異率 | `0.90` | |---
### Differential MAP-Elites Parameters
| パラメータ名 | 説明 | デフォルト値 | 備考 |
|--------------------------------|----------------------------------------------------------------------|--------------------|---------------------------------------|
| `CR` | 交叉確率。目的関数によって値が変化する。 | 条件により変化 | `OBJ_F`に依存 |
| `F` | 差分(突然変異)スケーリング係数。目的関数によって値が変化する。 | 条件により変化 | `OBJ_F`に依存 |#### 目的関数ごとの`CR`と`F`
| 目的関数 | `CR` | `F` |
|-------------------|--------|-------|
| `sphere` | `0.10` | `0.30` |
| `rosenbrock` | `0.75` | `0.70` |
| `rastrigin` | `0.01` | `0.50` |
| `griewank` | `0.20` | `0.50` |
| `ackley` | `0.20` | `0.50` |
| `schwefel` | `0.20` | `0.50` |
| `michalewicz` | `0.20` | `0.50` |
| その他 | `0.8` | `0.9` |---
### ABC MAP-Elites Parameters
| パラメータ名 | 説明 | デフォルト値 | 備考 |
|--------------------------------|----------------------------------------------------------------------|--------------------|---------------------------------------|
| `FOOD_SOURCE` | ABCの食料源(探索限界トライアル数) | `N` | |
| `TC_LIMIT` | ABCの探索限界トライアル数 | `D * floor(Int, k_max / (10 * FOOD_SOURCE))` | |---
## Graphs and plots
### Make the convergence graphs and vorn plot in PDF
- Check the file name of the result data in `./src/result`
- Compose up `./docker-compose.yaml````shell
docker compose -f "docker-compose.yaml" up -d --build julia-figure
```- ~~Run `./make=plot.py` & `./make-vorn.py`~~
- Unavailable```shell
julia make-plot.jl
```### Plots Configuration
- Open `./src/make-plot.jl`
### Sample graphs
- `fitness-testdata.pdf`

- `behavior-testdata.pdf`
