Thursday, August 13, 2015

女性が「俺」と自称すること

D. R. ホフスタッター『メタマジック・ゲーム』の一節。
私がこのごろ不満に思っている言葉に guys (やつら)というのがある。中に女性が混じっている場合ですら、一段の人々が guys と呼ばれるのを近頃よく耳にする。実際、女性の一団を指して❝you guys❞(あんたら)というのがはやっている。(…)ある女性とこれについて議論したら、彼女は「そうね、あなたにとってはこの言葉が男のニュアンスをもつかもしれないけれど、世の中ではそんなニュアンスはもう残っていないのよ」といった。
初出は『サイエンティフィック・アメリカン』の1983年1月号。
ちょうど日本でも女性が「俺」とか「僕」とか自称しはじめた頃ではないか。他称と自称の違いはあるが、共通の要因があるように思う。


Tuesday, August 4, 2015

奴隷三原則

「ロボット」を「奴隷」に、「人間」を「主人」に置き換えて、アシモフの「ロボット三原則」を書き換える。
第一条
奴隷は主人に危害を加えてはならない。また、その危険を看過することによって、主人に危害を及ぼしてはならない。

第二条
奴隷は主人にあたえられた命令に服従しなければならない。ただし、あたえられた命令が、第一条に反する場合は、この限りでない。

第三条
奴隷は、前掲第一条および第二条に反するおそれのないかぎり、自己をまもらなければならない。
このように書き換えると、オリジナルのロボット三原則の紛らわしさが解消できる。
本来の三原則の第一条は次のとおり。
ロボットは人間に危害を加えてはならない。また、その危険を看過することによって、人間に危害を及ぼしてはならない。
» ロボット工学三原則 - Wikipedia
この原則では、ロボットがどう行動してよいかわからなくなるときがある。たとえば人と人が戦っていたらどうするか。一方の味方をすれば他方に敵対することになり、人間に危害を加えてはならないという原則に反する。見てみぬふりをすれがそれも原則に違反する。
むしろオリジナルの三原則は、作家の都合を隠した SF 創作作法というべきものではないか。ロボットをダブルバインドに追い込むことで、ストーリーが作り出せる。

Sunday, June 28, 2015

群れの行動に関する統一理論は可能か

タマス・ヴィチェックの説。
「観察される現象は多種多彩だが、それを生み出すのは単純ないくつかの基本的自然法則(例えば熱力学の法則のような)かもしれない」
» 「群れ」の科学 Page6 « WIRED.jp

 スティーヴン・ウルフラムの説。
「 群れに見られる創発特性は、雪片や貝殻や脳や、さらには宇宙そのものの複雑さをつくっているものと同一の、単純なプログラムに基づいている」
» 「群れ」の科学 Page6 « WIRED.jp

イアン・カズンの説。
「株価も神経システムも魚の群れも説明できる隠された理論があるかは疑わしいと思っています。それはどちらかというと無邪気な考えというものです。何もかもに当てはまる方程式があると考えるのは危険です」
» 「群れ」の科学 Page7 « WIRED.jp

統一的な説明は可能だとするほうにロマンを感じるが、ロマンチックなものが真理というわけではないし…。

Monday, June 22, 2015

模倣による障害物の回避行動

鳥か魚の群れが空中か水中を飛んでいるまたは泳いでいるとする。
障害物があれば彼らはそれを避けて移動する。
次のアニメはそれを簡単ににシミュレートしたもので、群れが障害物を回避する様子を示している。



ここで画面の中央に置いた円が障害物。
それぞれの鳥または魚の行動は、
1. 各個体はどれも同じ速さで移動する。
2. 移動する方向は、自分の近くにいる個体が向かっている方角の平均値とする。
3. 障害物に近づいた個体は円の接線方向に向きを変える。
というルールによっている。

これらのルールに従って移動する群れに何が起こるか。障害物にどう対応するか。
画面の右上から降りてくる大群の動きにその特色が顕著に現れている。
この群れがまっすぐ進めばほとんどの個体は障害物に突き当たり、それぞれに回避行動を取らなければならない。けれども実際に起きていることはそうではない。
群れの先頭にいる少数の個体は、障害物に近づいたことを知ってルール3により自ら進む方向を変える。これに対して、あとに続く多数の個体は障害物を察知して向きを変えるのではなく、ルール2によって周囲の個体の動きを真似ることで結果的に障害物を回避している。

群れのメンバーの大半は、障害物や危険物をそれと意識せずに避けている。他のメンバーの行動を真似るだけでそうしたことが可能になる。
はやい話が「烏合の衆」である。オンライン辞書を見ると、
「規律も統制もなく、ただ寄り集まっているだけの集団。秩序のない人々の集まりや軍勢にいう。からすの集まりが無秩序でばらばらであることから」
とある。ただ寄り集まって、たがいの動きを真似ているだけの群れが、「用心」や「判断」といったコストを払うことなく、といっても障害物に直面した個体は自発的な行動をとるのだが、全体としては少ないコストで行動を最適化している。

関連記事 » robottage: 鳥の群舞の簡単シミュレーション

Thursday, June 18, 2015

空中のハトと地上のハト

空中で群れているハトと地上で群れているハトの違い。
空中のハトは集団的で、地上のハトは個人的。

空を舞うハトの群れは協調的に見える。
群れは同じ方向を目指して飛ぶ。直線的ということではなく、ときには直線的に一方向を目指し、ときには渦を巻いて飛ぶ。全体として協調的で、見た目に美しい形状をなして飛翔する。
地上から舞い上がった瞬間も同様で、同じ方向を目指して舞い上がり、協調的な舞いを見せて、どこかへ集団で去って行ったり、いっせいに地上に舞いもどったりする。

地上で群れているハトは、「群れている」という点では集団的だが、個々には勝手に動いている。
少数の群れを見ているとそのことがかえってよくわかる。それぞれ勝手に動いていた個体どうしが、ときに並行して歩くことがある。しかしそれは協調性の現れというより、身体の接触を避けるためにたまたま並行して歩いたとしか見えない。2羽のハトがしばし寄り添うことがあっても、すぐに離れて別々の方向へ歩いてゆく。
空中にあるときのような協調性は地上では見られない。地上では群れがそろって一方向に進むとか、渦状をなすとかはない。

地上のハトの個人性は舞い上がった瞬間に崩れ、群れは集団的行動に移る。
この移行について「集団的意思」といったものを想定する必要はない。まず1羽が飛び上がり、他の個体がつぎつぎにこれを模倣する結果、全体の動きが集団的になると考えられる。これについては「模倣で生まれる群れの集合知」を参照。

Sunday, June 14, 2015

鳥の群舞の簡単シミュレーション

鳥の群れが空を舞う様子をシミュレートしてみた。
それぞれの鳥は、

1. すべて同じ速さで飛ぶ。
2. 飛ぶ方向は、近くにいる鳥の向かっている方角の平均値とする。

という単純な原則とし、さらにプログラムを簡単にするため、

3. 立体空間ではなく平面上のシミュレーションとする。
4. 鳥同士はいくら近づいてもよい。重なってもかまわない。

とした。

シミュレーション結果の例。


いちおう鳥の群舞らしく見える。
この動画はループしていて、画面全体に鳥の散らばっている状態が最初で、群れが右上に消えていくところが最後。画面から消えた鳥はまっすぐに遠ざかり、もどって来ることはない。
地上の草むら、風、天敵などアイテムの追加や、鳥の飛行区域の限定など宿題。すべての鳥の方向がそろってしまうのもおもしろくないので、個々の鳥の飛行方向にゆらぎを与えること等も。

プログラムは Processing で書いた。
コードは次のとおり。要検討事項は多いが、とりあえず動いてる。

int canvasW = 400, canvasH = 400;
int population = 500;
float neighborhoud = 50;
float speed = 1.5;
Bird[] birds = new Bird[population];

class Bird {
  float x, y, dir;
 
  Bird(float tempX, float tempY, float tempDir) {
    x = tempX;
    y = tempY;
    dir = tempDir;
  }
 
  void display() {
    arc(x, y, 20, 20, dir-PI-0.2, dir-PI+0.2);
  }
 
  float newDir() {
    float accumX = cos(dir), accumY = sin(dir);
    for (int i = 0; i < population; i++) {
      if (dist(x, y, birds[i].x, birds[i].y) < neighborhoud) {
        accumX += cos(birds[i].dir);
        accumY += sin(birds[i].dir);
      }
    }
    return atan2(accumY, accumX);
  }
}

void setup() {
  size(canvasW, canvasH);

  fill(0);
  for (int i = 0; i < population; i++) {
    birds[i] = new Bird(random(0, canvasW),
                        random(0, canvasH),
                        random(0, TWO_PI));
  }
}

void draw() {
  background(204);
  for (int i = 0; i < population; i++) {
    birds[i].display();
    float newdir = birds[i].newDir();
    birds[i].dir = newdir;
    birds[i].x += speed * cos(newdir);
    birds[i].y += speed * sin(newdir);
  }
}

このプログラムの難点は、群れの行動に対する個々の鳥の影響度合いが平等でないことで、鳥(Bird オブジェクト)の配列 birds の先頭に近い鳥ほど影響力が大きい。「追記] atan2の使い方もいけない。

Sunday, June 7, 2015

ライオンより強いバッファローがライオンに追われて逃げるわけ

YouTube にはライオンとアフリカンバッファロー(アフリカ水牛)の戦いを記録した動画がたくさんアップされている。これらを見ていると、戦いの参加者数によって経過と結果がパターン化でき、おおまかには4つに分類できる。

複数のライオン vs 1頭のバッファロー: 複数のライオンが背後からバッファローを襲い、首筋、背中、尻などにかじりつく。バッファローは倒されて食われてしまう。このようなケースは、ライオンの連携がうまく運んで、バッファローの群れから1頭を引き離すことに成功したときに起こる。
1頭のライオン vs 複数のバッファロー: ふつうはライオンが逃げ出して戦いが終わる。逃げられない場合、ライオンはバッファローの角に引っ掛けられて空中に放り上げられ、脇腹などに重傷を負う。悪くするとなぶり殺しにされる。
複数のライオン vs 複数のバッファロー: この場合もライオンが逃げ出す。一般にバッファローを襲うライオンの群れは数頭から10頭未満だが、バッファローの群れは桁違いに大きく、数の優劣で勝負が決まる。
1頭のライオン vs 1頭のバッファロー: 1対1の戦いはほとんどないが、群れと群れの戦いの中で一時的にそのような局面になることがある。ライオンは背後からバッファローにかじりつくが、体力で勝るバッファローに振り払われる。正面から向かい合ったときはバッファローが勝つ。

このように集団対集団でも1対1でもライオンより強いバッファローだが、なぜかライオンに襲われるといっせいに逃げ出す。ほとんでの局面でライオンより強く、しかも頭数でライオンの群れを圧倒しているバッファローの群れが、どうしてライオンの襲撃を迎え撃たずに逃げてしまうのだろうか
そのわけは、動物の群れが仲間の動きを模倣する本能を持っていること(「模倣で生まれる群れの集合知」参照)、およびライオンが肉食であるのに対しバッファローが草食であることで説明できると思われる。

ライオンはバッファローを倒すと食事にありつける。つまりバッファローを襲い戦う強い動機がある。
いっぽう草食性のバッファローはライオンを倒しても得るものがない。もしかすると、襲撃者に報復する快感が大きいとか、あるいは、ネコが半死のネズミをいたぶるように、ライオンを宙に投げ上げて遊んでいるのかもしれないが、それらの可能性を除けばバッファロー側の戦いの動機は弱い。
すなわち、動機に関してライオンとバッファローは対等ではない。両者の遭遇にあっては、ライオンの側に「食う」という強い動機があるのに対し、バッファローの側には「食われる」という恐怖、言い換えればネガティブな動機しかない。それがとりあえずバッファローが戦いを避けて逃げ出す理由である。
バッファローが集団として逃走を開始することについては「模倣」で説明できる。ライオンの襲撃に気づいた1頭が逃げ出すと、まわりの仲間がそれにつられて逃げ出す。研究者らが主張しているように(「模倣で生まれる群れの集合知」)、模倣の伝播は言語的コミュニケーションよりずっと速く、最初の1頭の逃走は模倣によってたちまち群れ全体に広がり、群れとしての逃走がはじまる。戦いが起こるのはライオンがバッファローの群れに追いついてからである。

ところで、いったん逃げ出したバッファローの群れが戦いの場に引き返してくることがある。まず次の YouTube ビデオを見ていただきたい。再生回数7600万回を超える人気ビデオである。



ビデオには次のような経過が映されている。
川に沿ってバッファローの群れが移動している。
その前方でライオンが草むらに身を潜めて待ちかまえている。ライオンの群れが立ち上がって襲撃にかかると、バッファローの群れはいっせいに逃げ出す。
逃げ遅れた幼いバッファローが水際に転落し、3〜4頭のライオンが噛みつく。
もみあう間に水中からワニが走り出て、これもバッファローに噛みつく。
前門のライオン、後門のワニ。絶体絶命と思われる状況でバッファローの群れが引き返してきて、ライオンとワニを蹴散らす。ビデオがやや不鮮明で見逃しそうだが、6分27秒あたりで子バッファローが立ち上がって群にもどってゆくのが見られる。

逃走中のバッファローの動きを反転させたものは何だろう。
これも「模倣」で説明できそうである。
以下は想像でしかないのだが、子バッファローのいないことに気づいた母バッファローがまず反転したのではないか。それにつられて周囲のバッファローが元の方向に向きを変え、さらに集団として争いの現場にもどり、結果として小バッファローが救出された。そのような経過だったのではないか。
この想像は、群れにおけるリーダーとは何かという問題に展開できる。
乱暴に定式化しておけば、リーダーとは、群れにとって最適の選択を提示する者よりも、むしろ最も勢いのある選択をする者のことではないか。このビデオのケースでいえば、子バッファローの救出はかならずしも群れにとって最適の選択ではない。逃走をやめて引き返せば他のバッファローが犠牲になる可能性もある。だがこのケースでバッファローの群れは、得失を冷静に判断した「最適な選択」ではなく、子を思う母バッファローの「勢いのある選択」を模倣した。以上の想像が正しければだが、勢いのある行動で群れを反転させた母バッファローが、このケースでのリーダーである。