マルチエージェントによって構築された複雑系の振る舞いを学習・教育するツー ルの一つとして、StarLogo TNG 1.5 について紹介する。多くのエージェントが相互 作用する複雑系において、単純なミクロ的相互作用のルールから創発されるマクロ パターンを、分析・可視化するプログラムを書くことは簡単ではないが、multi agent based simultion toolsを使うことで、かなりの労力が軽減される。ここでは、 多くのツールの中から、Repast と StarLogo を簡単に取りあげてみたい。特に StarLogoは StarLogo TNG に枝分かれし、blocks-based (graphical block) programming ができるようになったことで、multi agent based simultion の壁を少し低くしたよう に思える。 いまの大学生は PSP や Nintendo DS などで育ち、コンピュータゲームを誰もが楽 しんだ世代であるが、しかしコンピュータゲームを作った経験は少ないであろう。 アメリカではコンピュータの入門としてコンピュータゲームを作成する例もあるよ うで、StarLogo TNG を使うと programming に対する抵抗感が少なくなるので、英 語との親和性が高い若い世代は、近い将来には、英語のテキストを使いながらプロ グラミング入門として3 D の video games を StarLogo TNG で作っているかも知れ ない。iPod, iPad など画面に直接触れて操作できる携帯端末を手にし、Google や YouTubeを体験した世代が生活の中で身に付けたデジタル機器やインターネット とのつきあい方と大学教育の方法とをすりあわせて考える必要があると思う。
キーワード: Multi Agent Based Simulation, StarLogo TNG, Computer Games
目 次 1 はじめに
1.1 Multi Agent Based Simulation とは 2 Multi Agent Based Simulation Tools
2.1 Reapst Simphony
2.1.1 Repast Simphony をインストール 2.1.2 サンプル・プログラムを見る
Multi Agent Based Simulation Tools
を使った経済分析について
1 はじめに
マルチエージェントによって構築された複雑系の振る舞いを学習・教育するツールの一つ として、StarLogo TNG 1.5 について紹介する。多くのエージェントが相互作用する複雑系に おいて、単純なミクロ的相互作用のルールから創発されるマクロパターンを、分析・可視化 するプログラムを書くことは簡単ではないが、multi agent based simultion tools を使うことで、 かなりの労力が軽減される。ここでは、多くのツールの中から、Repast と StarLogo を簡単 に取りあげてみたい。特に StarLogo は OpenStarLogo と StarLogo TNG に枝分かれして、 OpenStarLogoは従来の StarLogo との互換性が保たれており、これまでの StarLogo の Project ファイルをそのまま実行することができる。その一方で StarLogo TNG は従来の StarLogo と の互換性を放棄し、新しい graphical block programming という方法を取り入れて、ブロック を組み上げて行くことでプログラムを作成することがができるようになった。これにより、 multi agent based simultionsの壁を少し低くしたように思える。
いまの大学生は PSP や Nintendo DS などで育ち、コンピュータゲームを誰もが楽しんだ世 代であるが、しかしコンピュータゲームを作った経験はほとんどないであろう。StarLogo TNGを使うと programming に対する抵抗感が少なくなるので、近い将来にはプログラミン グ入門として 3 D のコンピュータゲームを作るのも面白いかも知れない。iPod,iPad など画面 に直接触れて操作できる携帯端末を手にし、Google や YouTube を体験した世代が生活の中 で身に付けたデジタル機器やインターネットとのつきあい方と大学教育の方法とをすりあわ せて考える必要があると思う。
1.1 Multi Agent Based Simulation とは
本稿では StarLogo TNG を Multi Agent Based Simulation に使う前段階として、StarLogo
TNGの graphical programming language としての機能をいかに使うかということに議論を絞
っているが、ほんの少しだけ Multi Agent Based Simulation がどのようなものかを見ておく。 多数の自律的なエージェントの行動が相互依存するシステムで、単純なルールに基づいた 3 StarLogo を使った Schelling モデル分析 3.1 インストール と起動 3.2 マルチエージェントのコンピュータゲーム 3.3 サーチ開始 3.4 正常に動くかテストする。 3.5 値段を尋ねる 4 おわりに
エージェントの自律的な行動がシステム全体に与える効果(マクロ的パターンの創発)をコ ンピュータシミュレーションするためのモデルであるとされている。しかしながら、このよ うな括りでは捉えきれないような展開を遂げているようにも見受けられる。たとえば、 Multi Agent Based Simulationの発展を2つの generations に分けけることができて、質的な変
化が生じていること、3つのタイプに分けることができることなどが指摘されている1。 1.第 1 世代 1990 年代 第 1 世代は既存の人工知能・人工生命・数理生態学などの各種研究の応用・拡張とし て発展してきたもので、モデルの相互作用構造が比較的単純である。モデル化は既存 のモデル(囚人のジレンマやセルオートマトン)の表現の豊富化・拡張を行っている 場合が多 く、「モデル内の各設定が、直接現実に対応していなくても構わない」とい う元のモデルが 構築されたときに持った性質は保たれている。 2.第 2 世代 2000 年代 第 2 世代は、1999 年に開始した U-Mart プロジェクト(http://www.u-mart.org/)のよ う な現実のレプリカを意図したモデルの登場によって特徴付けられる2。 また、第 2 世代の研究には、U-Mart のように現実からいきなりモデル化を試みるタイ プだけで はなく、感染症対策研究のように、当初は微分方程式モデルから出発して必 要に追われて徐々にレプリカ型に近づいて行った経緯を持つ研究も存在する。いずれ にせよ、単なる現実の解釈や説明にとどまらず、モデル構築時に「政策評価に堪える こと」を意識し、「政策として操作可能なパラメータが一つ以上用意」されたリッチな モデルが第 2 世代の特徴である。 また、ABS は以下の 3 つのタイプに分けることができる。 1.「学習・進化型」 「ゲームでの利得が高い戦略がゲーム中での利用シェアを高める」プロセスをシミュ レートすることが多い。戦略の利用シェアの広がり方には、主体内での選択確率が上 昇する場合(学習)と空間内で利用している主体数が増える(進化)のいずれもある。 2.セル型シミュレーション
ライフゲーム(Paundstone 1985)や人工生命研究の影響から発展し、Gilbert and Doran (1994)や Epistein and Axtel(1996)で一つの完成型を見たものである。
3.人工市場 1 小山友介(東京工業大学) 2 塩沢由典他著の『人口市場で学ぶマーケットメカニズム-U-Mart 経済学編-』についてくる CD-ROM から インストールして先物市場の実践的学習を試してみるとよい。成り行きや指値で売買注文を出して先物市場 を体験することができる。これがシミュレーションでなければ、何度破産の悪夢を見たことか。フライトシ ミュレーションしかり、下手なうちは実際に経験するには危険すぎることを訓練できるのもシミュレーショ ンソフトの醍醐味の一つである。
人工市場はサンタフェ研究所で行われてきた人工株式市場(Artificial Stock Market)研 究から始まったもので、株式市場や外国為替市場での価格変動の研究を目指したもの である。ごく単純な行動のみをする(粒子のような)エージェントを多数集めた、経 済物理学的なモデルから(高安・高安 2001)、金融市場での人々の行動をモデル化し てボトムアップにモデルを構築する研究まで(和泉 2003)、現在でも数多くの研究が 活発に行われている。 金融市場を中心とした市場(exchange :取引所)のモデルではない、市場競争をモデ ル化したものとして、Nelson and Winter(1982)以降の商品競争と技術革新を融合さ せたモデルがある。
2 Multi Agent Based Simulation Tools
もしいまから Multi Agent Based Simulation (MABS)を始めようと考えて、MABS を行う ソフトウェアについてネットで検索すると、実に沢山のツールがある。Wikipedia の Comparison of agent-based modeling softwareのページだけでも 70 近いソフトウェアが取りあ げられている。この中から最良のツールを探しだすだけで、学校生活が終わってしまいそう な印象をもつ。全部のソフトウェアを試して、その中から一番良いものを選ぶという意味で のグローバルな最適化は時間と能力の制約のために、とてもできそうもない。そういう時は 仕方がないので評判を手がかりにし、インターネットを通じて downloadable かつ誰でも無 料で使え、どのような OS でも使えるということを基準に選ぶとよい。すると Swarm, StarLogo, NetLogo, Repastといったものがピックアップされる。その中でも visual model constructionが使える Repast Simphony と StarLogo TNG について見てみよう。
2.1 Reapst Simphony
2.1.1 Repast Simphony をインストール
Repast Simphonyはエージェントベース のモデリングとシミュレーションのためのプラット
フォームの一つであり、Eclipse のプラグイン(plug-ins)として動作する Java ベースのモデリ ングシステムである。repast のダウンロードページ(http://repast.sourceforge.net/download.html) から Mac OS X の最新版の Repast Simphony 2.0 Beta のディスクイメージをダウンロードして
使うことができる3。
3 Mac OS X で最新版の Repast Simphony 2.0 Beta のイメージディスクを使うときは注意が必要である。Repast Simphony 2.0 Beta は Java runtime environment(JRE)1.6 以上でないと動作しないので、PPC の Mac を利用して いて Mac OS X 10.5 までしか使えない状況では、JRE が 1.5 なので、Repast Simphony を使うことができない。 もう Snow Leopard によって PPC の Mac は完全に見捨てられたのだから、Intel ベースの Mac を利用して、 Mac OS X 10.6 をインストールして JRE を 1.6 にアップデートして使うことを考える潮時かもしれない。
Eclipseは 3.6Helios である。ダウンロードしたままだと、メニュー等は英語で表記されて いる。初めて Eclipse を使うなどで、Eclipse を日本語化したいときには、アスペクト指向プ ログラミング(Aspect Oriented Programming: AOP)による動的翻訳 (実行時に翻訳)ツー
ルである Pleiades をインストールするとよい4。 2.1.2 サンプル・プログラムを見る 正常にインストールできたかどうかのチェックと、マルチエージェントモデルを使った分 析がどのようなものであるかを知るために、サンプルモデルを動かしてみる。さまざまなサ ンプルがあるなかで Schelling モデルを動かしてみる。まず 3 つのタイプのエージェントを 空間上の格子の中にランダムに配置する。タイプはエージェントの色によって判別される。 カラー画面をキャプチャーしたものを、グレースケールに変換したものが、図 1 である。白 はエージェントのいない空いた格子である。 自分の周りの 8 つの格子を調べて、自分と同じ色のエージェントが一定比率以上であれば そこに留まり、さもなければ他の空いている格子に移動しようとするという単純なルールに したがって、すべてのエージェントが行動するとしたら、エージェントの空間上の配置はど うのようになるかをシミュレーションする。移動するか否か 4639 回意思決定した後のエー ジェントの空間配置を表したものが、図 2 である。面白いことに大きな模様が浮き上がって いて、同じタイプが集まって棲み分けをするようになっていることが分かる。このような棲
4 Pleiadesも plug-in であるから、Eclipse の「ヘルプ」から「新しいソフトウェアのインストール」でイン ストールできるが、Mac OS X で日本語化がうまくいかないときには、eclipse.ini のディレクトリの設定を -javaagent:../../../ plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jarに変更することを試してみると良い。
み分けパターンが国などの計画によって作り出された訳ではなくて、違ったタイプに対する 非寛容さという個別の動機(micro motives)にもとづく移動が、棲み分け(macro patterns) を自発的に創発(emergent)している。 Javaプログラミングに慣れ親しんでいる人は、全部 Java でプログラムを書けばよいが、 そうでない場合は、図 3 のようなフローチャートを使ってプログラムの骨組みを作り、Java によるプログラムは必要最小限にとどめたいものである5。 図 3 の左側のナビゲーターを見ると、Human.agent が選択されている状態にある。また図 の中央部には、正方形の頂点が描かれた状態にあり、この Step が選択された状態であるこ とが分かる。下にはプロパティーウィンドウが開くので、各手順に対して値を指定していく と、Human.groovy ファイルに groovy で書かれたプログラムが Repast Simphony によって自
動生成される6。
しかし残念なことに Java や groovy などのプログラミング言語の知識が必要であり、これ まで中学校や高等学校で学習してきた数学やロジックを使った手続き記述とは少し隔たりが ある。Repast には Python をベースにした RepastPy というものもある。次節で説明する StarLogo TNGの前身である StarLogo による Schelling モデルのシミュレーション pond.slogo
は下のような具合である。左側の Control Center - pond ウインドウには、logo 言語を使っ
5 http://repast.sourceforge.net/docs.htmlからダウンロードできる RepastFlowGettingStarted.pdf のチュートリアル を辿っている途中の画面である。
6 Groovyについて Wikipedia のページを見ると次のように説明されている。Groovy is an object-oriented programming language for the Java platform. It is a dynamic language with features similar to those of Python, Ruby, Perl, and Smalltalk. It can be used as a scripting language for the Java Platform.Groovy uses a Java-like bracket syntax. It is dynamically compiled to Java Virtual Machine (JVM) bytecode and interoperates with other Java code and libraries.
てプログラムするためのテキストエディタが開いている。
もう一つ社会科学のサンプルとして fads and fashions three choices という面白いものを見つ けたのでその実行画面をのせておく。 各エージェントは移動中に出会うエージェントの色 をカウントして、10 個のエージェントに会う毎に自分の色を何にするかを決める。エージ ェントの数は 1000 個で当初の割合は赤が 200 緑が 400 紫が 400 という割合にして、シミュ レーションを始める。出会った 10 個の内での多数派に自分の色を変えるという行動をとる 場合を図 5 に示した。この場合赤は零になり、緑が 78 紫が 923 となった。このまま続ける と、紫だけになってしまうであろう。別のシミュレーションでは赤が零になった時点で緑が 210、紫が 790 であり、しばらくの間こう着状態が続く場合も観測された。 逆に少数派に自分の色を変えるように行動すると、図 6 のように多数派と少数派が入れ替 わるパターンが発生する。皆が少数派になろうとすると、少数派だったものがいきなり多数 派になり、それを嫌って他に移るという行動を繰り返す。おそらく 3 つの色の数が均等化す るような結果が得られるであろうが、完全な均等化ではなくて、一定の幅の揺らぎをもった 図4 StarLogoを使ったSchelling モデル分析 図5 majority-maxモデル
均等化が発生している。
数学やロジックを使って手続きを記述すると、それがプログラミング言語に翻訳されるな
らば、プログラミングに対する負担が軽減されるかもしれない。 このような点で注目され
るのが、以下でとりあげる StarLogo TNG(The Next Generation)である。
どのプログラミング言語でプログラムしても、ついて回るのが構文エラー(syntax error) である。これによって、ほとんどの人がプログラミングをやめようと思う。どういう手順で 処理すればよいかは分かっているのに、それを C や Java の正しい文として書き出さないと いけない。日常生活で日本語を使っている人間がたまに C や Java を見ても正しく使えない のは仕方がない。 3 StarLogo TNG を使う 3.1 インストール と起動
StarLogo TNG (The Next Generation)をダウンロードするには、ダウンロードページ (http://education.mit.edu/starlogo-tng/download/)で Username と Password を登録すると、登録 時に入力したメールアドレスに StarLogo TNG Download Info という件名のメールが届くの で、htpp://.../activate.html へのリンクを辿ると、最新版をダウンロードして、インストール
することができる7。
はじめて起動すると図 7 のように 2 つのウインドウ StarLogoBlocks と SpaceLand が現れ る。左側のウインドウはプログラムする場所であり、StarLogoBlocks と呼ばれ、blocks が納 められた沢山の抽き出し(drawer)からなる Palette とプログラムを作成するための Canvas
図6 minority モデル
7 この原稿を書くにあたっては、Mac OSX 版を用いたので、他の OS 上の StarLogo TNG の事情については 分からないが、StarLogo を使ったプログラムの様子は分かってもらえると思う。
(ゴミ箱が置いてある。)のサブウインドウが見えている。右のウインドウはプログラムを実 行する場所で SpaceLand と名付けられている。このウインドウはさらに 3-D の virtual world である SpaceLand(ウインドウ名と同じで紛らわしい)とその下の Runtime Box の 2 つのサ ブウインドウで構成されている。SpaceLand にはグリーンの長方形の真ん中に 2 つのタート ルが描かれている。これは、Aerial という俯瞰カメラ(perspective mode)の映像である。
その他に Agent Eye(first-person view)と Agent View(third-person view)のモードがあっ て、長方形の上部に 3 つの View を切り替えるボタンがあるので試しに押してみるとよい。
Viewが切り替わらないときには、緑の大きな長方形の左脇にある小さい正方形の下の Swap
Views をクリックして選択状態にした後で Agent View (third-person view)などのボタンを 試してみるとよい。2 つのタートルが背中合わせに立っているのが分かる。こちら向きのタ ートルの上でクリックすると図 8 のように説明を見ることができる。このタートルは Turtle
1 であることがわかる8。
StarLogo TNGをインストールする時に同時にダウンロードされる Sample Projects フォル ダの中には、残念なことに Schelling の segregaton モデルはなく、StarLogo のファイルを開 いて動かすことができない。
プログラムをする StarLogoBlocks で重要なのは、左端にあるブロックを収納する 15 個の 引き出しが並んだ Factory Palette と三角ボタンで呼び出す My Blocks Palette だ。図 9 は Factory Palleteの引き出しの一つである Traits をクリックして選ぶことのできる標準ブロッ クの一部である。My Blocks Palette(図 10)には、Turtles に収納された標準ブロックに加え
8 Agent Eye(first-person view)ボタンを押すと、緑の敷地の境界を示す灰色の柵があって、その向こうに は山地の風景が広がっている。これは Turtle 0 の目を通してみた光景を映し出している。Agent View (third-person perspective)を押すと、これは、向こうに立っているタートル(Turtle 0)の背後から肩越しに 見た光景を映しており(Over The Shoulder Mode)、こちら向きの Turtle 1 の顔が見える位置にカメラが設置 されている。
て、プログラムの進行によって自作した自前のブロックが収納されていく。 My Blocks
Paletteの引き出し(drawer)の名は、プログラムを行うキャンバスの 5 つの領域(area)で
ある Turtles,Everyone,Setup,Runtime,Collisions の名前がつけられていて、各領域で作った自作 のブロックが収納されていくので、中身はプログラムの進展とともに変化していく。
ここで、StarLogo TNG のプログラミングが、いかに簡単化を実感してもらう。Palette の 上から 2 番目の赤い Movement drawer をクリックして開いて、forward steps ブロックをクリ ックすると canvas に配置される。同様にして left degs ブロックを canvas に配置する。 forwardと left のブッロクは離れている(図 11)。canvas 上の forward steps ブロックをダブル クリックすると 2 つのタートルが離れていくのが見える。forward と left を交互にダブルク リックすると、2 つのタートルが長方形の上を歩いているように見える。それを確かめるた めに、Palette の真ん中辺りの水色の Traits drawer の pen down をクリックして canvas に配置 する。canvas 上の水色の pen down をダブルクリックしてから、forward と left を適当な回数 ずつダブルクリックすると、長方形が描かれる。何回かやると、SpaceLand の地面が汚れる のできれいにしたいと思うだろうから、Palette の Setup and Run drawer の clear paches を
canvasに配置し、それをダブルクリックすると、地面がきれいになる。もうそろそろ
forwardと left を交互にダブルクリックするのにも飽きてきただろうから、forward と left を つなぐとよい。forward の steps を 5 に変えてから、上になったブロックを選んでダブルクリ ックすると、2 つのブロックが順番に実行される。下のブロックを選んだときには、下のブ ロックしか実行されないので注意が必要。
3.2 マルチエージェントのコンピュータゲーム
Multi Agent Based Simulation Tools である StarLogo TNG は、多数のエージェントによって 構成される複雑系(Complex System)において、ミクロベースの単純な行動からマクロ的な パターンが自律的に創発(emergent)される様子を分析するという主要な目的をもつソフト
図11 簡単なプログラム
ウェアである。しかしそれ以外に、ゲームを作る機能を持っている。ゲームを作る機能は初 等・中等教育でのプログラミングでよく利用されている。いきなり自律的に活動するエージ ェントが相互作用を行う複雑系を分析するプログラムを書くのもなかなか分かりにくいの で、まずは誰にでも直観的にわかるレベルの話をゲームに仕立てることを考える。 同じものなのに異なる値段で売ろうとしている商人が 10 人いるとき、犬を使って最も安 い値段の商人を見つけ出すというゲームである。 まずは StarLogo TNG でのプログラムに慣れることが本稿のねらいの一つである、それと 同時に、解があることが分かっている問題を使って、その解にいたるには時間とエネルギー が必要であり、エネルギーの初期設定量や移動で消費されるエネルギー量の設定の仕方によ っては、全部の商人を回りきる前に力つきてしまう場合もあり、プロセス(犬が歩いて探す 経路・サーチの中断)についても考えないといけないという当たり前の気付きや発想に慣れ るということがもう一つのねらいである。瞬時に最適な答えを知りうる状況にないことが私 たち人間の在り方に通じるように思える。 1.エージェントを作る
まず StarLogoBlocks ウインドウの左端に並んでいる Factory の Setup and Run から setup ブロックを選んで、右側にある黒いキャンバス上にドラックする。Factory という表示 の右横にある三角ボタンを押して、My Blocks に移動して Turtles をクリックして表示 されるブロックの中から、create num do ブロックを選択してカンバスにドラッグし、
setupの切り欠きの形に合わせてはめ込む。
(a)ブロック create Turtles をつかって、10 個の商人エージェントを作る
¡ 5 個はアライグマ、5 個はペンギンの shape とする。
先の create num do ブロックはアライグマ用に用いるので、ペンギン用にもう 一つ create num do ブロックを先のブロックの下に、切り欠きに注意してはめ 込む。setup の方は自動的に大きくなるので心配はいらない。num の数字 10 をクリックして選択して、5 にかえる。Factory の Shapes から一番上の set shapeブロックをドラッグして create Turtles の do にはめ込む。さらにアライ グマとペンギンの shape を選んで、set shape の切り欠きにはめ込む。
™ 各商人が設定する価格は、1 から 10 までの整数値の乱数を発生させて決めて、
agent numberに保存する
Factoryの Variables から agent number ブロックをカンバスの Setup 領域までド ラッグする。するとブロックの表示が Setup agent number となる。ここでどう 見ても set shape の切り欠きとは形が違うことに気付く。Factory という表示の 右横にある三角ボタンを押して、My Blocks に移動して Setup をクリックして
Setup set agent numberをドラッグして set shape の下にはめ込むとよい。 1 から 10 までの整数値の乱数を発しさせるには Factory の Math から random ブロックをドラッグして、切り欠きを合わせる。
(b)犬エージェントを作る
犬の shape を作るまではおなじである。犬を操作して探す訳だから、犬の動きを コントロール必要があるので、犬に Agent View を付ける。Factory の Controls か ら set agent camera ID をドラッグしてはめ込む。さらに Factory の Controls から over shoulderブロックをドラッグして下にはめ込むと、Agent View の背後からの カメラを構成することができる。このとき犬エージェントの ID を指定しておけ ば良い。犬エージェントは 11 個の最後に生成され、エージェントの ID は通し番 号で、0 から始まるので、犬エージェントの ID は 10 になる。したがって、数字 の 10 を切り欠きにつないでやればよい。Factory の Math の一番上の 1 というブロ ックをドラッグしてきて、数字の 1 をクリックして選択して 10 に書き換える。 create Turtles これで、エージェントを作る準備ができた。今表示されている背景(Terrain)と 2 個 のエージェントを消し去るために、まず clear all を実行する。そのために、Factory の Setup and Run から clear all ブロックをドラッグしてきて、一番上の create Turtles ブロ ックの上から押し込むと良い。そして、エージェントを Terrain 上に散布するために、 最後の create Turtles ブロックの下に、My Blocks の Turtles からドラッグした scatter Turtles を押し込む。 右側の SpaceLand ウインドウの下半分に、setup というアイコンが作られているので、そ れをクリックすると 11 個のエージェントが生成されて、上半分のスクリーンに犬の後ろ姿 が表示されていたら、これまでの作業がうまくいったことになる。 犬の前にいるアライグマにカーソルを合わせてクリックすると、一番最後に agent number として、例えば 6 が設定されている。つまりこのエージェントは同じものを 6 という価格で 売ろうとしていると想定している。このままではプログラムの可読性が保証されないので、 変 数 名 を agent number か ら Selling Price に 変 え て お く 。 そ の た め に は 、 左 側 の StarLogoBlocksウインドウの Setup エリアにある Setup agent number ブロックの agent number を選択して Selling Price に変更しさえすればよい。そしてもう一度右側の SpaceLand ウイン ドウで seup アイコンをクリックすると、変数名が Selling Price に変更されているエージェン トが作られている。以上のプログラムを図示したものが図 12 であり、setup を実行した直後 が図 13 である。
3.3 サーチ開始 犬には目の前に見えているけれど、エージェントの所にいかないと値段を聞けない。犬エ ージェントを矢印キーを使って操作して、目的のエージェントの所まで連れて行くプログラ ムを作成する。 1.uparrow が押されたら前進(forward) 2.downarrow が押されたら後退(back) 3.rightarrow が押されたら 0.5 度右に向く 4.leftarrow が押されたら 0.5 度左に向く 前進と後退は同じブロックを使ってプログラムできる。同様に左に向くと右に向くも同じブ ロックで作ることができる。したがって、前進と左に向くブロックを作ってそれぞれをコピ ーすれば間違いが少ない。
前進と左に向くブロック用に、Factory の Logic の一番上の if test then ブロックを 2 つ、キ ャンバスの Runtime エリアにドラッグする。
1.前進と後退
Factory の Controls から keyboarduparrow?をドラッグして test にはめ込み、Factory の Movementの forward steps を then に組み込み 1 を 0.2 にすると前進が完成する。if ブ ロックを選択してコピー・ペースとして、keyboarduparrow?の右にある三角ボタンをク リックして、リストの最後の方にある keyboarddownarrow?を選択する。forward の右の 三角ボタンをクリックして back を選択すると後退が完成する。
2.左へ向くと右へ向く
Factoryの Controls からkeyboarduparrow?をドラッグして test にはめ込み、keyboarduparrow? の右にある三角ボタンをクリックして、リストの最後の方にある keyboardleftarrow?を
図13 セットアップ直後のTurtle
選択する。Factory の Movement の left degs を then に組み込み、90 を 0.5 にすると左に 向くが完成する。コピー・ペーストし必要な変更を加えて右に向くを完成する。
3.4 正常に動くかテストする。
4 つの if ブロックをつなぎ合わせると、キーボードで動かすという処理が集まって見やすくな るが、Factory-Procedure-Procedure(Factory の Procedure の中の Procedure ブロックを意味する、 この段階まで読み進めたら、このように略記しても大丈夫であろう)を使うと、さらに使い勝手 が良くなる。Factory-Procedure-Procedure を 4 つの if ブロックの先頭にはめ込んで、procedure 名 を move に変更する。すると My Blocks-Runtime-Runtime move が自動的作られている。
Factory-Setup and Run-foreverを Runtime エリアにドラッグする。SpaceLand ウインドウの 下半分の Runtime Space に forever アイコンが現れる。 StarLogoBlocks ウインドウに戻って、 自動的に作られた My Blocks-Runtime-Runtime move を Runtime-forever にはめ込むと、出来
上がりだ(図 14)。 SpaceLand-setupアイコンを押すと、犬の後ろ姿が見える。何度か SpaceLand-setup アイコ ンを押して、犬とアライグマ、ペンギンが映し出されるようにして、動作確認する。forever アイコンを押す。試しにキーボードの uparrow を押すと、予想に反してというか予想通りと いうか、犬だけでなく、ペンギンもアライグマも前進している。StarLogo TNG は Multi Agent ベースのシミュレーション用の IDE を与えるので、何も指定しないと全エージェント への指令になるので当然の結果である。 そこで図 15 のように、Factory-Logic-ask agent ブロックを使って、特定のエージェントだ けに move 指令が届くようにする。Factory-Logic-ask agent ブロックを forever ブロックの中 にある Runtime move の上に重ねて、forever ブロックに押し込むと ask agent ブロックの下に
図15 moveとforever:完成
Runtime move ブロックが来るので、この Runtime move ブロックを上になった ask agent ブロ
ックの do にはめ込み、ID を犬エージェントの 10 に指定する9。
図 15 では forever ブロックが、大きくなっている。これは前進・後退にはエネルギーが必 要だという設定にして、エネルギーが零以下になると、I can't move any more!というメッセ ージを表示させて、移動できなくしたためである。そのままゲームを終わらせるのも気の毒 なので、スペースキーを押すと、これまでに見つけた最低価格を提示したエージェントに取 引を求めるメッセージを出せるようにした。犬エージェントのエネルギー量を管理・計測す るために Dog Energy という変数を作成する。Starting Energy 変数を使ってスライダーで初期 エネルギー量を設定し、Dog Energy 変数で管理する。forward(back)の後に、inc Dog
Energyブロックをつけて、エネルギーを減らすので-0.5 の数字ブロックをつける。現在量を
視覚化するために Factory-Setup and Run-bar graph を canvas の Runtime エリアにドラッグし て、data のところに My Blocks-Runtime-Dog Energy をひっつけると、簡単に 3D の棒グラフ が作成される。 3.5 値段を尋ねる 犬エージェントを矢印キーを使って他のエージェントの所に移動させるプログラムが書け たので、値段を尋ねさせる会話のプログラムを書く。そのためには My Blocks-Collisions-Collisionブロックを使う。元々はエージェントがぶつかったとき、ぶつかった方とぶつから れた方のそれぞれにどのような動作をさせるかを決定するために、縦に 2 つの Turtles 切り 込みが付けられている。上がぶつかったエージェントの行動をきめ、下がぶつかられたエー ジェントの行動をきめる。挨拶をしてから値段を尋ねるようにプログラムしたいが、そんな に沢山の動作をさせるようにはなってないのかも知れない。 1.ぶつかった犬エージェント (a)Reservation Price で買いたいと言わせる。
Factory-Text-say ブロックに Factory-Text-abc ブロックを埋め込む、abc を I'll take this for +Reservation Priceの数字データを Factory-Text-to text ブロックでテキスト に変換したもの +dollars.に変えると、I'll take this for4dollars という吹き出しが出
9 例えばエージェント ID 0 のアライグマに「回転せよ」と指令を出したいときは、左に 5 度向きを変えて 1 歩前進という内容の go round という名の Procedure を作る。ask agent ブロックをコピーペーストして、コ ピー元のブロックの下に差し込み、ID を 0 にして Runtime move を My Blocks-Runtime-Runtime go round に 差し替える。 アライグマ全体に「回転」指令を出したいときは、if test then ブロックで Factory-Traits-ID で 取得した ID をチェックさせて 4 以下なら Runtime go round を実行させるようにすればよい。ペンギンは止 まったままで、犬がキーボードに反応して所望の動作をし、5 匹のアライグマが回転すると、プログラムは うまくいったことになる。
る。 つぎの処理に移るのを中断するために、キーボードの n が押されるまで待機 して、キーボードの n が押されたら次の処理に進むようにする。
(b)キーボードの n が押される
¡.売値が Reservatioin Price 以下のとき
これまでの最安値と比較して、それより安ければ最安値と売り手の ID デー タを更新して、売り手が Would you like to put it on layaway?(取り置きしまし ょうか)と聞いてくるので、No. I might come back later.(取り置きはきっぱり
と断り、また来るかもとあやふやな答えをしておく。) ™.売値が Reservatioin Price より高いとき 売り手が No. Discount!(うちは値引きしない)と言うので、Goodbye!と言っ て別れ、90 度左に向きをかえて 5 前進する。 2.ぶつかられたエージェントの行動 (a)ぶつかられたらエージェントに売値を言わせる。 (b)キーボードの n が押される ¡.売値が Reservatioin Price 以下のとき
自分が思っていたより高く売れそうなので、Would you like to put it on
layaway?(取り置きしましょうか)と聞く。そしてアライグマやペンギンの skinを脱いで、緑に色を変えて犬エージェントが既に訪れて、売ってもいい と意思表示をしたことを示す。 ™.売値が Reservatioin Price より高いとき No. Discount!(うちは値引きしない)と言う。そしてアライグマやペンギン の skin を脱いで、赤に色を変えて犬エージェントが既に訪れて、売らないと 意思表示があったことを示す。 図 16 が、先ほどのシナリオをプログラムしたものである。図 17 では、犬エージェントが 他のエージェントにぶつかった瞬間に 4 ドルで買いたいと申し出て、売値は 9 ドルだと言っ ている。 この状態で、キーボードの n キーを押すと、交渉成立の場合は、図 18 のように、取り置 きしましょうかという問いに No と答えて、立ち去っている。交渉不成立の場合は、図 19 のように立ち去ろうとしている。 4 おわりに
教育のためのツールとしても実績がある。特に StarLogo TNG になって、graphical block programmingができるようになったことで、programming に対する抵抗感が少ないと思える。 特にキーボードからテキストを打ち込んでプログラミングする方法であると、プログラミン グ言語特有の syntax を覚える必要がある。初めてのプログラミング言語を使うときの syntax に関わるエラーから解法されるだけでも気分的に違うであろう。データのタイプの違いも Math drawer の+ブロックと Text drawer の+ブロックでは切り欠きの形が違っているので、
Textのほうのブロックには数字のブロックを入れることができないので間違えることはない。
テキストデータと数字を組み合わせるときは、to Text ブロックを使うとよいと教える。この 辺りが最初の躓きになるのかも知れない。PSP や Nintendo DS などで育ち、IPod, iPad などの
smart phone を手にした世代のプログラミング作法として一考する価値があると思える10。 図17 値段交渉プログラム:実行 図16 値段交渉プログラムblocks 図19 交渉不成立 図18 交渉成立 10 私が子供たちに犬エージェントを動かしてみせたら、「ひどい! でもインターネットで専門学校生が公 開していたゲームはひどかった、あれよりはましかな。」という感想だった。「でも作れるっていいよ。」と言 うので、「作ってみたら。」と答えた。「じゃ犬じゃなくて、マリオで。」「うん、マリオの skin もあったよ。」