ふわっとマルチエージェントシステム

## 0. はじめに

マルチエージェントシステム( MAS: Multi-Agent System ) とは
「多数の(Multi)」「知的な主体の(Agent)」「系(System)」 です．
本記事は，マルチエージェントシステムを何となくわかった気になる，を目的としています．
「エージェントとは何か」と言うようなお堅い定義の説明などは他の記事に譲りますので悪しからずご了承ください．

## 1. 背景：MASと言う分野は何を解決したくて研究されてきたか

この分野は下記を究明・解決するために発展してきました．

- 人間社会はどのように成り立っているのか?
- 協力や変化・環境への適応と言うものはどのように生まれるのか？

人工知能というと一般的には、例えば「アルファ碁」など「人間よりも遥に賢く、直感的にわかりづらいようなことも最適な解を示してくれる」ようなものを想像されるかと思います．
しかしこれらは"1人で超強い"を突き詰めて作られた人工知能です．複数体での協調は考えておりません．また，変化に弱いです．
そこで，**「知能がたくさん集まったときに何が起こるんだろう？」「たくさん知能がせめぎ合う中で最適な戦略はなんだろう?」**を解決するのがMASの生まれた背景です．
MASでは，"複数の知能"が織りなす協調がどうできているか，どうすれば"全体として"最も効率よく利益が得られるか，を突き詰め現実からのフィードバックを得てそれを現実に還元することを目的とします．

具体例として, 自然界のMASと社会での応用事例を説明します.

### 1.1. 具体例1: 働きアリの原則

働きアリの原則とは, 「蟻の群れを10としたときに, 2はよく働き 6はそこそこ働くが 残りの2はサボっている」というもので，どんな組織にもサボる奴はいる，と言う教訓としてよく聞く気がします．
しかし**実際は彼らはサボっているわけではないことが近年の研究で明らかになりました**．

確かにある時点で切り出すと, 8割のアリが働いていて2割のアリはサボっています. しかしその内訳を詳しく見ると, 8割の元気なアリが働いていて, 2割のアリは疲労して休憩していると言うだけなのです．
当然, 時間の経過とともに働いていたアリが疲れれば休憩し, サボっている2割として数えられることになります. 一方で, 回復したアリは8割の一員として働きます．
このように，特定の2割のアリがサボっているのではなく, 全体の稼働率が8割付近を維持するよう, 循環して休んでいると言うだけなのです. サボっているとされる2割は全体のバッファとして機能しており, 有事の際に備えているとも言えます．

ここで注目して欲しいのが，**個々のアリ本人からすれば「疲れた，休みたい」「元気になったから働こう」と言うとても単純なルールでしか動いていない**ということです． 
蟻自体は全体のためなんて一切考えていません．そもそもそんな脳は持ちません．
ところが人間の目線で見ると，全体としてうまく組織を回すようなアルゴリズムがあるように見えます． 
説明されればなるほどなぁと言う感じですが，蟻はそんなこと知りません．**気づいたら全体のためになっていた**のです．

このように，**ミクロな視点(蟻)での行動原理と，マクロな視点(人間)での現象理解の関係性を分析することで，現象がどのように創発されるかを解析するのもMASの目的の一つです**．
分析して，実世界に応用した例が最初にあげた具体例になるわけですね．
なお，働きアリの原則のような例を「群知能」といい，この他にも渡り鳥の移動やイワシの群れなど自然界でもまま見られます．
興味がおありでしたら調べてみてはいかがでしょうか．

### 1.2. 具体例2: 自動運転

自動運転のどこがマルチなんだと思われる方も多いでしょうが, 実は他者との協調が非常に重要な領域であります. 
「そんなこと言ったって自分の最短経路を計算して交通ルールに則って進めばいいだけじゃないか」と言われそうですが, でもちょっと考えてみてください．
みんながみんな最短経路を行ったらどうなるでしょうか？
 「お父さんが帰ってくる．駅に迎えに行かなきゃ．」
仕事が終わる時間は必然的に偏ります．こうして同じところに同時にたくさんの自動車が向かったら？
渋滞になりますよね．その場合むしろ遠回りするのが時間的には最短だったりします．
急がば回れとはよく言ったものです． このように，自動運転はもはや一台で完結する問題ではないのです．
「たくさんの」自動運転技術特化の人工知能の相互関係に注目しなければ解決できないわけですね．

## 2. MASの研究

MASの研究においては、現実のある課題(上記の例2の場合， 「街にたくさんの自動車がある状態で渋滞を防ぐにはどうするか」)をプログラム上で模倣できる程度にモデル化(簡略化)し，シミュレーションします.
そしてそこから得られる知見に意味を持たせたり、課題を解決するにはどうすればいいか考える，あるいは解決できるような新たなモデルを提案する，というのがMASの目的です．

## 3. 応用先の具体例

2で研究した先に社会にどう貢献するのでしょうか？
ここでは3つ例を挙げます.

- 自動車 <br> 

自動車が知能を持てば, 最短ルートで駅まで迎えに行くことができます．
今でもカーナビが最短ルートを導いてくれるではないか、と思われる方もいるでしょうが、上述の通りそれが時間最短であるとは限りません. 
渋滞に引っかかり、結果的に到着が遅くなった・あるいは遠回りをする羽目になった、と言う経験を持つ人も多いのではないでしょうか？
それは一定のアルゴリズムに従った最短の直線距離を導出しているに過ぎないからです。また、遠回りをするか否か、と言う判断は結局人に委ねられ、どちらが最善か（あるいはどちらも最善ではないかもしれません）は神のみぞ知る、というのが実際のところです。 <br>
MASでは、全ての自動車が知能を持ち、互いに協調することで「全員が最短の時間で到着すること」を目指します。例えば高速道路で渋滞になりそうだとわかっても、下道の自動車と連携することで、そちらも渋滞していて到着は高速道路にいたままの方が早いとわかれば渋滞を我慢することも気楽になるでしょう。むしろそうして各々が情報を連携しアドバイスし合い各々の最善を選ぶことで、そもそも渋滞にならずに済むかもしれません。
<br><br>
- エレベーター <br>
皆さんエレベーターに長く待たされてイライラした経験ありませんか?
加えてそのエレベーターが激しく込んでいて見送る羽目になったことはないでしょうか? <br>
MASでは、一台一台のエレベータに知能を持たせそれぞれが考えて動くことで、勝手に最適なルーティングを学習し実施してくれることを理想とします．
こちらがルールベースで「もし~の状況なら...に移動しろ」などと指示しないことがミソです.
<br><br>
- お掃除ロボット <br>
MASでは、お掃除ロボットに学習をしてもらって、広いお部屋にたくさん設置したら勝手に最適な巡回ルートを学んでくれることを理想とします. 勝手に充電もしてくれます．


お掃除ロボットはすでに人工知能を積んであるし勝手に充電するじゃないか，とか，エレベーターくらいなら集中制御でいいじゃないか，とかあると思いますが，重要なのは「勝手に」「協調関係」を学んでくれるところです．<br>
例えば，建物1棟のエレベーターならともかく大学内全ての建物の制御だったらどうでしょう． 
集中制御だと大変なことでもエレベータ一台一台が知能を持っていれば関係ありません． 
また，故障した場合や新たに建物を増やした場合でも中身を改修する必要はありません．
エレベーター1台が動くアルゴリズムを書き換えるのにおよそ何万円必要か知ってるでしょうか？
[この記事](https://diamond.jp/articles/-/197985?page=3)によると数百万単位になることも珍しくなさそうです．
各々のエレベータが自分で学習し「最近1階で乗る人が増えたから増えたから、低稼働時はなるべく一階を観に行こう」と判断してくれればそれが必要なくなるわけですから、全体としてかなりの効果になるのではないでしょうか。

そして最後に大事なのは，上記の例はあくまでも例に過ぎないということです．
例えばエレベーターのアルゴリズムは昔から盛んに研究されてきましたが，これはもともとハードディスク内のヘッドの動きを制御するスケジューリングアルゴリズムのためです．
このように，一見関係がなさそうでも適応できそうなところならどこでもいいのです．
自律分散システムの基礎研究自体は古くからされていますが, 近年特にIoTやエッジコンピューティングといった分野に関わりが深いと言うことで注目されていますね. 
※[参考](https://www.meti.go.jp/shingikai/sankoshin/shomu_ryutsu/joho_keizai/bunsan_senryaku/pdf/001_03_00.pdf)

## 最後に

ざっくりマルチエージェントシステムとは，を説明しましたがいかがでしょうか．
まとめてみれば背景と具体例だけになってしまいましたね...

明確に間違っている部分などあれば是非ご指摘ください． 
その他にもコメントいただければ嬉しいです．