ラベル NetLogo Web の投稿を表示しています。 すべての投稿を表示
ラベル NetLogo Web の投稿を表示しています。 すべての投稿を表示

2020年4月11日土曜日

NetLogoに親しむ(Desktop版とWeb版)

【要旨】NetLogoによるマルチエージェントモデリングを、ひとつの簡単な例題で説明するチュートリアルです。ただし、NetLogoの基礎知識は前提としています。通常のDesktop版に加えて、Web版のNetLogoについても小生の体験を記します。

NetLogo(通常のDesktop版)を使った基本的な例題
 まず、基本的な例題をひとつ示します。「朱に交われば赤くなる」といった感じのシミュレーションです。具体的な説明は、下記のNetLogoソースの先頭や、各ステートメントのコメントをご覧下さい。人々の交流で各人の特性(ここではそれを色で表現)が次第に均一化する状況を示しています。特性(色)の平均や標準偏差の推移も表示しています。

初期状態(左上:人の色の度数分布、右側:多様な色の人々)
反復(epoch)93回後の状態(色の度数分布がそれらしい形に)
反復(epoch)267回後の状態(ほとんど全員が同じ色に)

 人々の色の標準偏差が非常に小さくなった( 反復267回)後に停止しています。このプログラムの完全なリストを以下に示します。40行程度の小さなプログラムです。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetLogoソースプログラムリスト;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;【他人に染まれ!】  Fujio Yamamoto, 2020-4-9
;; 各タートルは、ふらふら動き回っています。行く先々で、近隣の
;; タートルの色の平均値を少しだけ取り入れ、自分の色を少し変更します。
;; 各タートルの色は、最終的にどんな色になるでしょうか
globals [color-mean color-sd fr] ;; 大域変数
to setup                  ;; 初期設置
  ca                      ;; エージェントをクリア
  random-seed seed        ;; 乱数のseed
  crt population [        ;; タートルを指定個数生成。各タートルに対して、
    set shape "person"    ;; タートルの図柄を設定
    set label who         ;; タートル番号を表示
    set label-color black ;; ラベルの色
    setxy random-xcor random-ycor ;;ランダムな位置に配置
  ]
  ask patches [set pcolor 119 - random 2] ;; パッチの模様
  color-stat              ;; タートルの色に関する統計
  reset-ticks             ;; 時計をリセット
end
to go                     ;; ボタンを押すたびに実行される
  clear-links        ;; 結線を消す
  color-stat         ;; タートルの色に関する統計
  ask turtles[            ;; 各タートルに対して以下を実行する
    rt random 30 + random -30  ;; 少しふらふらさせる
    fd 0.1                    ;; その方向へ0.1歩前進する
    ifelse N4? ;; 「近隣」の選択
      [ set fr turtles-on neighbors] ;; 近隣東西南北4カ所のタートル達
      [ set fr turtles-on patches in-cone 3 60];; コーン内のタートル達
    if count fr != 0            ;; その個数が0でないならば、
    ;; それらのタートル達の色の平均値の5%を取り入れて、自分の色を変更する
      [ set color 0.95 * color + (0.05 * sum [color] of fr) / (count fr)
        create-links-with other fr [set color black] ;;交流関係を示す結線
      ]
  ]
  tick ;; 時計を進める
  if color-sd < 0.2 [ clear-links stop]  ;; 色の標準偏差が十分小さくなるまで
end
to go-once
  go
end
to color-stat ;; タートルの色に関する統計
  set color-mean mean [color] of turtles ;; 色の平均
  set color-sd standard-deviation [color] of turtles ;; 色の標準偏差
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 上記プログラムの簡単な説明
 人々は少しづつ動き回りますが、その先々で近隣の人々と交流します。その「近隣」の定義は、以下に示すとおり、東西南北か、またはコーン状の範囲で決めるかを選択できます。

ifelse N4?  ;; N4?はスイッチの値。frは、近隣の人々の集合(リスト)
      [ set fr turtles-on neighbors] ;; 近隣東西南北4カ所のタートル達
      [ set fr turtles-on patches in-cone 3 60];; コーン内のタートル達

 ここで、"neighbors"は、東西南北のパッチ上にいる人々のセット"fr"の取得のために、また、"in-cone 3 60"は、距離3で前方60度の範囲のパッチ上の人々のセット"fr"を取得のために使います。次に、交流関係を示すため、自分自身とこれらの人々を黒線で結びます。後者のセット"fr"には自分自身が含まれているので、これを除くため、"create-links-with other fr"を使っています。

 人々の「交流の効果」は、以下のように、自分の色(color)に反映させています。
set color 0.95 * color + (0.05 * sum [color] of fr) / (count fr)
;; それらのタートル達 fr の色の平均値の5%を取り入れて、自分の色を変更する

 色の平均と標準偏差は、それぞれ、"mean"、”standard-deviation”で得られます。そして、各色(色の値は0〜140)の度数分布グラフは、"histogram"で描くことができます。具体的には、以下のとおりです。

set-plot-x-range 0 140 ;;x軸の範囲
set-plot-y-range 0 count turtles ;; y軸の範囲
set-histogram-num-bars 35 ;; ヒスとグラムの棒の数を35とする
histogram [color] of turtles ;; 色のヒストグラムの描画

 ブラウザで利用できるNetLogo Web(ここにあります
 これまでのNetLogoは、パソコン(Windows, Mac, Linux等)のアプリケーションとして動きますが、例えば、スマートフォンでは使えませんでした。しかし、web版(NetLogo Web)が公開されているので、スマホのブラウザからも使うことができます。早速、上記の例題をNetLogo Webで動かしてみました。その結果は下図のとおりです。

iPad miniのSafari上でのNetLogo Web(上記例題は完全に動作した)

 このWeb版はまだ機能不足と言われていますが、上記例題に関しては完全に動作しました。素晴らしい!スマホでは、ボタンやスライダーは非常に小さくなってしまい(拡大はできるものの)使い難いですが、完全に動作します。また、上図右上に(この図ではみえにくいですが)、「export HTML」というボタンがあります。これを押すと、このプログラム全体を、単一のHTML/JavaScriptファイルとしてダウンロードできます。これを、自分でwebサーバに配置すれば、他のJavaScriptプログラム等から呼び出すことができて、応用が広がりそうです。

 ファイル入出力の違い(Desktop版とWeb版)
 今後NetLogo Webを使って行くにあたり、外部とのやりとりのためのファイル入出力(テキストファイルに限りますが)についても少し調べました。いくつかの理由から、Desktop版とWeb版には以下に述べるような違いがあります。

【Desktop版】テキストファイルの入出力例
file-open "input.txt"
while [not file-at-end?]
  [show file-read show file-read show file-read]
file-close

file-open "output.txt"
file-write 3.14 file-write "pi"
file-close

【Web版】テキストファイルの入出力例
●extensionを2つ宣言する。
extensions [fetch send-to]
こう書くと、自動的にextensionsが取り込まれる。最初はプロンプトが出るが。

●ファイル入力
非同期 asyncなので、ファイル入力が終わる前に、次のコマンドへ行ってしまうので注意して使う!
test-fetch-user-file-async 
to test-fetch-user-file-async
  fetch:user-file-async show
end

file名は、プログラムには書けない!上記のように書くと、file chooserが出現するので、そこで入力ファイルを選択する。「fetch:user-file-async」がファイル入力コマンドである。その後ろの「show」は、コールバック関数として指定したもの。つまり、ファイルが読み込まれた後、「show」の所に、処理すべきコマンドを書けばよい。

●ファイル出力
以下のように書く。ただし、出力ファイル”out.txt”はダウンロードされてしまうようである。
test-send-to-user-file
to test-send-to-user-file
  send-to:file  "out.txt" "result"
end

Thanks

2020年3月31日火曜日

Try NetLogo Web with Android app

NetLogo for multi-agent modeling has been used to create desktop applications. On the other hand, NetLogo Web, which is almost compatible with NetLogo, is also available. See the figure below.


Let's compare the Desktop version and Web version with the following example. The example is "Visualizing Infection" shown earlier. Click here for more information. In the Android application shown below, the NetLogo model created in the Desktop version is executed on a PC in advance, and the execution process is stored in a video file for each parameter set and used. The video works perfectly, but you cannot run simulations on another new dataset with this app. Of course, this isn't necessary for this app.

Use video of the execution process of Desktop NetLogo

On the other hand, if you want to run a NetLogo model in an Android application corresponding to an arbitrary parameter set, you can use the NetLogo Web version. The figure below illustrates this. The operability was not good, such as the sliders and buttons being very small (although they could be enlarged), but they worked. So in some cases, this NetLogo Web might be good. Also, as you can see at the bottom, there is a great merit that you can edit the source code on the spot.

Incorporate NetLogo Web version into Android application