• 検索結果がありません。

モデル理論アプローチによるシミュレーション--開発実行環境Simcast 利用統計を見る

N/A
N/A
Protected

Academic year: 2021

シェア "モデル理論アプローチによるシミュレーション--開発実行環境Simcast 利用統計を見る"

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)

発実行環境Simcast

著者

旭 貴朗

雑誌名

経営論集

73

ページ

33-51

発行年

2009-03

URL

http://id.nii.ac.jp/1060/00004563/

Creative Commons : 表示 - 非営利 - 改変禁止 http://creativecommons.org/licenses/by-nc-nd/3.0/deed.ja

(2)

モデル理論アプローチによるシミュレーション

:開発実行環境Simcast 旭 貴 朗 1 はじめに 2 オートマトンモデルの実装 3 モデル記述言語CAST 4 開発実行環境Simcast 5 開発方法論 6 シミュレーション実施例 7 おわりに 1 はじめに 筆者はモデル理論アプローチによるシミュレーション開発実行環境Simcast を開発した.本稿の 目的は,Simcast の概要説明と Simcast におけるシミュレーション開発方法論の提案,およびその 適用範囲の広さを論ずることである. 高原康彦らは,モデル理論アプローチによる経営情報システム開発の方法論を提案している[1] . このアプローチにおいては,CAST と呼ばれるモデル記述言語を用いて,開発したいシステムのモ デルを定式化する[2].そのモデルを情報システム開発環境 MTA-SDK でコンパイルすると,UNIX 上で稼働する経営情報システムが出来上がる[3].筆者が着目するモデル理論アプローチの特徴は次 の2点である.1)経営情報システム(業務処理と問題解決)の一般モデルと背景理論をもつ.2) 各種モデルは,数式を用いて定式化し,言語CAST によってファイルに記述する. 第1の特徴は一般モデルと背景理論である.モデル理論アプローチでは,経営情報システムの一 般モデルを構築し,理論展開を行っている.経営情報システムは業務処理(ファイル書き換え)と 問題解決の組み合わせから成るシステムである.今のところ,Web ベースの業務処理システム (Transaction Processing System:TPS)の定式化と実現性理論を得ている[4]

.また,問題解決システ ム(Solver)の定式化と解の導出理論を展開している[5,6] .これらの理論に基づいて,システム開 発環境 MTA-SDK の実装がなされている.すなわち,「モデル理論アプローチは背景理論をもって いる」.一般モデルの枠組みに整合するモデルならどのような個別モデルでも動かすことが可能で ある.一般モデルの適用範囲の広さが重要なポイントである.

(3)

第2の特徴は,モデル記述言語 CAST の,数式との親和性である.モデル理論アプローチでは, 個別に開発するシステムを数理モデルとして定式化する.ここでいう数理モデルとは,論理学にお けるモデル理論の意味のモデルである.それは,台集合と関係(関数),すなわち集合と述語と関 数,を具体的に指定することである.そして,それをファイルに記述するときは,数式と親和性の ある,理解しやすい言語 CAST に従って記述する.例えば,集合Aに要素bを加えて新しい集合 Cを作ることは,集合論の表記ではC=A∪{b}である.これを言語 CAST では,C := union(A,{"b"}) と記述する.実際に,言語 CAST の構文は等号を含む一階述語論理であるので,数式との親和性 が高い[2] .すなわち,開発したいシステムのモデルを,(頭の中では)数式で定式化し,(コン ピュータ上では)数式と親和性のある言語 CAST で記述する.「モデル理論アプローチは数理的に モデル化することを強制する」と言っても良い. しかしながら,これまでの研究では,複雑なシステムのシミュレーションに関しては触れてこな かった.また,シミュレーションモデルを動かすエンジン(ソフトウエア)もなかった. そこで,筆者はモデル理論アプローチによるシミュレーション開発実行環境 Simcast を開発した[7] 以下に概要を述べる.「適用システム」は,オートマトンや Solver を要素とする複合システムであ る.正確に言えば,Simcast が動かすことができるシステムは状態機械[8] (state machine)やムーア 型オートマトン(Moore-type automaton)と Solver である.よく知られているように,オートマト ンは機械や定型的活動の一般的なモデルであることから,Simcast の適用範囲は非常に広いといえ る. 「使用する言語」はすでに開発されている CAST である.オートマトンモデルは状態遷移関数 と出力関数の2本の数式を記述すればよいので,言語 CAST で記述することが可能である.これ により,ひとつの言語で業務処理システムと問題解決システムとシミュレーションの開発が可能と なる. したがって,Simcast の「背景理論」はよく知られたオートマトンの標準的な理論と問題解決の 理論である.たとえば,基本的な原理として,「複数の状態機械(オートマトン)が結合したシス テムは,全体として一つの状態機械(オートマトン)である」がある.これが,モデルを動かすた めの実行環境 Simcast の動作の原理である.つまり,一つのオートマトンを動かすことができるエ ンジンがあれば,いかなる複合システムも動かすことができる. また,「開発方法論」も同じ原理に従う.複数個の要素オートマトンを組み合わせて中規模の複 合モデルを構成し,複数個の中規模モデルを再び組み合わせて多層的なシステムを組み立てていく. そのような「段階的なモデル化」が,同じ原理で一貫してできるようになる.その結果,複雑に結

(4)

合したシステムのシミュレーションが可能となる. 以下,第2節では,開発実行環境Simcast におけるモデルの具体例や実装構造を示す.第3節で は,モデル記述言語 CAST について概観する.第4節では,Simcast がモデルをコンパイルし,実 行する動作順序などについて述べる.第5節では,Simcast におけるシミュレーション開発方法論 を提案する.第6節は,シミュレーションの実施例を提示する.第7節は結語である. 2 オートマトンモデルの実装 2.1 CAST によるオートマトンモデル例 具体例として,定価100円と200円の2種類の商品を販売する自動販売機を考えてみる.ただし, この機械は100円硬貨のみを2枚まで受け付け,選択ボタンで商品選択するが,金額が不足すると きは投入金を全額返却するものとする.この自販機のMoore 型オートマトンモデル <A,B,C,δ,λ,c0> は次のようになる.

A = { (a1,a2) | a1∈{0,100,200}, a2∈{100,200}} B = { (b1,b2) | b1∈{0,100,200}, b2∈{0,100}} C = A

c0=(0,100)

δ(c,(a1,a2)) = c' ↔ c'= (a1,a2) λ(c) = b ↔

(0,a1) if a1 < a2, (a1,a2)∈A (a2,a1-a2) if a1 ≧a2, (a1,a2)∈A

図表1 自販機のオートマトンモデル(数式による表現) ただし,A は入力集合で,a1は投入金額を,a2は選択した商品の種類を表す.また,B は出力集 合で,b1は排出された商品の種類を,b2は釣銭を表す.C は状態集合である.c0は初期状態を表し, δは状態遷移関数で,λは出力関数である.もちろん,記号↔は必要充分条件を意味する.この モデルをCAST 言語で記述すると次のようになる. b =

(5)

//automaton01.set

initialstate0( )=c0 <-> c0:=[0,100]; delta0(c,[a1,a2]) = c2 <-> c2:= [a1,a2]; lambda0(c) = b <->

[a1,a2]:=c,

(a1 < a2 , p(a1,a2)) -> (b:= [0,a1]), (a1 >= a2 , p(a1,a2)) -> (b:= [a2,a1-a2]);

p(a1,a2) <-> member(a1,{0,100,200}), member(a2,{100,200});

inputsequence0( )=c <-> c = [[100,200], [100,100]]; 図表2 言語CAST による自販機モデルの表現 図表2の第1行目はコメント文で,ファイル名を記述する.第2行目は初期状態(定数)を無変 数関数 initialstate0で定義している.第3行目は状態遷移関数 delta0を定義している.第4行目は出 力関数 lambda0を定義している.p(a1,a2)は論理学の意味の述語を定義している.(a1,a2)が入力集合 A の要素であることを意味する.ここまでがオートマトンの定義であるが,これが動くためにはな んらかの入力が必要である.最終行の inputsequence0は入力系列を定義している.これは開発者が 自由に決めることができる.今のところ Simcast は開発途中なので,状態遷移関数や出力関数など の定義に0をつけているが最終的には不要となるようにしたいと考えている. 図表2をテキストエディタで作成し,ファイル名automaton01.set としてディレクトリ simcast 内 に 保 存 す る . 同 じ simcast デ ィ レ ク ト リ で extProlog ( 実 行 フ ァ イ ル xsheet ) を 起 動 し , automaton01.set を実行するとコンパイルされ,オートマトンシステム automaton01.p が作成される. また,自動的に実行される.

2.2 モデルの実装構造(書法)

(6)

func([...]); initialstate0()=c0 <-> c0:=(...); times0()=数値; delta0(c,a)=cc <-> cc:=(...); lambda0(c)=b <-> b:=(...); inputsequence0()=[...]; 図表3 Simcast におけるオートマトンモデルの実装構造 上記の(...)のところにCAST 言語で式を記述し,それぞれの関数を定義する.ただし,func は ユーザ定義関数の宣言であり,times0は処理回数を指定する無変数関数である.func と times0と lambda0は必要なときに定義する(記述しなくとも動作する).もしも times0()が定義されていなけ れば,inputsequence0()で指定されたリストの左の要素から順にオートマトンに入力されていくが, もしも times0()が定義されていれば,inputsequence0()の右辺の内容そのままを,times0()で定義され た 回 数 だ け 繰 り 返 し て 入 力 す る こ と に な る . そ の 他 に も , 事 前 処 理 preprocess0 と 事後処理 postprocess0を述語として定義することが可能である(詳細は第4節や Web サイト[7] を参照). 3 モデル記述言語CAST モデル記述言語CAST の構文は次のような1階述語論理である[2] . まず,使われる記号は以下のものである. (1) 変数:変数は英文字で始まる英数字の文字列によって表される. (2) 定数:定数は、'.'で始まる英数字の文字列によって表される.また."<文字列>"は text 文をあ らわす定数である. (3) 述語記号:変数でも定数でない英数字の文字列で表される. (4) 関数記号:変数でも定数でない英数字の文字列で表される.

(5) 論理記号:not (否定) ,& (かつ),or (または),-> (ならば),<-> (定義) (6) 括弧 (,):区切りを表わす.

(7) 鍵括弧 [,]:リストを作るとき使用する.

以下、各々の述語記号をri(i∈I)、関数記号を fj(j∈J)と表記する.またそれぞれの引数を λ(i), µ(j)と表記する。簡単のため,リストの引数は指定しないで,何個の要素でも鍵括弧でくくってリ

(7)

ストを作ることができるものとする.

CAST における項(term)の集合は,次の条件を満足する最小集合 Term(CAST)である. (1) 全ての変数と定数は Term(CAST)の要素である(すなわち,項である).

(2) もしもt1,…,tn∈ Term(CAST)ならば、[t1,…,tn]∈ Term(CAST)である.

(3) もしもt1,…,tµ(j)∈ Term(CAST)ならば,各 j∈J に対して fj(t1,…,tµ(j))∈ Term(CAST) である. 任意のt1,…, tλ(i)∈Term(CAST)に対して,ri(t1,…,tλ(i))を要素式(atomic formula)と呼ぶ.要素式の集 合をAtom(CAST)と書くことにする.

CAST における well-formed formula (wff)の集合は、以下の条件を満足する最小集合 Form(CAST) である.

(1) Atom(CAST)⊂Form(CAST)

(2) もしも φ,ψ∈Form(CAST)ならば、notφ、φ&ψ、(φ or ψ)、φ->ψ、φ<->ψ は Form(CAST)の要素 (wff)である.

(3) ただし、<->は wff の中で一度のみ使用可能である(図表2参照).

CAST における wff (well formed formula)とは,数値,文字列,集合,述語,関数を正しく構成し た数式のことである.通常の加減乗除を使う算術式、あるいは、∩、∪、⊂、∈ などを使う集合の 演算式はwff である。対応する記号 +, -, *, /, union, intersection, subset, member は予約語としてあら かじめ開発環境に用意されている.例えば,和集合A∪{b}を,言語 CAST では union(A,{"b"})と書 く.これは要素式(atomic formula)であり,wff である.また,簡単のために,等号を表す述語は, =(a,b)でなく a=b と記述し,代入も assign(x,1)でなく x:=1と記述する.これらを使う演算式も wff である.従って数値,文字列,集合,述語,関数を構成したものが wff である.特に注意すべきは, 順序対(x,y,z)や集合{x,y,z}である.これらはすべて内部的にリスト[x,y,z]に変換し処理している.例 えば,図表2のmember(a2,{100,200})は member(a2,[100,200])と書いても同じである.正確に言えば CAST はリスト処理言語である.しかし,リスト[x,y,z]は3項対でもあり,3要素の集合でもある と解釈でき,場合に応じて異なる処理ができる.リストやリストのリストを集合や行列と見なせる ことができて処理できるので,強引ではあるが『CAST は「集合」処理言語である』と言っている. CAST におけるモデルとは,モデル理論の意味の台集合と関係,すなわち集合と述語と関数を具 体的に指定した(記述した)ものである.集合の定義,述語の定義,関数の定義はwff だから,形 式的には,モデルは上記1階述語論理の wff の有限個の集まりである.図表2の CAST モデル < initialstate0, delta0, lambda0, inputsequence0 > は5個の wff の集まりである(コメント文を除く).

(8)

直感的に言えば,CAST は等号と有理数を含む1階述語論理の「限定的な」言語である。素朴集 合論および代数学の範囲での高校数学の記述方法に近いと言える。これが CAST(Computer Acceptable Set Theory:コンピュータ可読集合論)という名称の由来である。ただし、無限集合と 限定子(∀、∃)を表わす記号はない.しかし,有限個の範囲なら,述語によって集合を生成する関 数defSet によって表現できるので回避できる.詳細は文献[2]を参照されたい. 4 開発実行環境Simcast ここでは,開発実行環境Simcast が言語 CAST によるオートマトンモデルをコンパイルしてシス テムを作成し,実行する動作順序などについて述べる. 4.1 Simcast の概要 ソフトウエア配布物としての Simcast は,複数のファイルを含むディレクトリであり,zip 圧縮 されたファイルsimcast.zip がインターネット上に公開されている[7] .これは,モデル理論アプロー チの開発環境MTA-SDK の中の dss.zip (version 070719)を改造したもので,MTA-SDK から生成され るextProlog を加えることにより使用可能となる.ディレクトリ simcast の中にはオートマトンを実 行するための筆者が開発したエンジン stdAutomatonEngine.p が含まれている.また,コンパイラ setcompiler.p と Solver を動かすエンジンは MTA-SDK のものを修正している.

Simcast の実行手順を述べる.extProlog(実行ファイル xsheet)を起動し,開発者が作成したモ デルのファイル(拡張子.set)を読み込む.すると setcompiler.p が起動し,そのモデルをコンパイ ルし,同時にstdAutomatonEngine.p を付加する.その結果として,extProlog で実行可能なシステム (拡張子.p)が生成される.また,コンパイルしてできたシステムを自動的に実行する.

Simcast が実行できるシステムは,状態機械,Moore 型オートマトン,問題解決システム(Soler) の3種類である.また,それらを組み合わせた複合システムを実行することが可能である. 問題解決システムのモデルの書き方は注[1,3]を参照されたい.以前と同じである.一方,状態 機械とオートマトンシステムを開発するときは第2節の実装構造(図表3)に従う.もちろん, lambda0()の記述がないとき,状態機械モデルだと認識しコンパイルし実行する. 4.2 組込み関数 数値演算(+, -, *, /, %)や集合演算(∩、∪,×)など通常の簡単な関数は,すでに MTA-SDK に 組込み済みである[3].今回は,新たに平方根や指数/対数関数,三角関数の算術関数が使えること を確認した[9] .

(9)

平方根はsqrt(m),m の n 乗は pow(m,n) 指数関数exp(x)と対数関数 log(x) 整数部分を抜き出す関数はfoor(x) 三角関数sin(θ), cos(θ), tan(θ)

図表4 追加した算術関数 4.3 組込み述語 また,数値比較(<, >, =,≠)や集合の包含関係(⊂,∈)など通常の簡単な述語は,すでに MTA-SDK に組込み済みであった[3].今回は新たに,ファイル操作とグラフやスプレッドシートによる データ表示に必要な述語を確認した[10] .

xread("temp.lib", [A]) ファイル temp.lib の内容を変数 A に代入する.

xread("temp.lib", K, L, [X]) ファイルの K 行から L 行までを変数 X に代入する. appendf("temp.lib","a", [Y]) ファイルの最終行にデータ Y を追加する.

appendf("temp.lib","w", [Y]) ファイルの内容全部をデータ Y に置き換える. cardinalityf("temp.lib",N) ファイルの行数を N に代入する【新規開発】

(10)

【書式】(1) openlocalsheet (X,Y,W,H,ウインドウ番号) (2) getWp(ウインドウ名称,ウインドウ番号) (3) myclearwindow(ウインドウ番号) (4) makewindowSS(ウインドウ番号,ウインドウ名称,X,Y,W,H) 変数X,Y はセル表示開始位置(左上端),W,H は表示するセルの列数と行数を表す. 【例】(1) openlocalsheet(0,0,4,11,Wp) (1') openlocalsheet(X,Y,W,H,Wp) (2) getWp("sheet",Wp) (3) myclearwindow(3) (4) makewindowSS(Wp,"mySheet1",0,0,4,11) 【意味】(1) "sheet"という名称の SS ウインドウを開き,11行4列のセルを表示する.システ ムが自動的にウインドウ番号を付与し,変数 Wp に代入する. (1') "sheet"という名称のスプレッドシートウインドウ(以下 SS ウインドウ)を開き,H 行 W 列のセルを表示する.システムが自動的にウインドウ番号と位置と列数行数を付与し,変数 Wp, X,Y, W,H に代入する. (2) "sheet"という名称の SS のウインドウ番号を変数 Wp に代入する.その名称のウインドウ が存在しないときは,Wp に -1が代入される. (3) ウインドウ番号3のSS のすべてのセルを空にする. (4) "mySheet1"という名称の SS ウインドウを開き,11行4列のセルを表示する.システムが 自動的にウインドウ番号を付与し,変数Wp に代入する. 図表6 スプレッドシートを作成する述語

(11)

【書式】(1) show2(番号,データ, グラフの種類) (2) show1(データ, グラフの種類) 【例】(1) show2(3,[10, 20,30],"plot") out_3.g という名前のグラフウインドウを開き,座標平面上に 3点(0,10),(1,20),(2,30)を結んだ折れ線を描く. (2) show1([10,20,30],"plot") out_0.g という名前のグラフウインドウを開き,折れ線を描く. show2(0, [10,20,30],"plot")と同じ. 図表7 グラフを表示する述語 これにより,オートマトン実行中にグラフを表示することができる[11] . //gravity11.set h.g=0.1; inputsequence0()=a <->a:="d"; times0()=t <-> t:=500;

initialstate0()=c <-> c:=[10, 0], hist.g:=[], show2(2,[[5],[5]],"trajectory"); delta0([u,v],a)=[u2,v2] <-> v2:=v + h.g*(-2)*u/abs(u), u2:=u + h.g*v2, showHistory([u2,v2]); showHistory([u,v]) <-> hist1:=hist.g, hist2:=append(hist1,[[u,v]]), len:=cardinality(hist2), hist3:=project(hist2,["r", len-199,len]), show2(2,transpose(hist3),"trajectory"), hist.g:=hist3; 図表8 オートマトン実行中のグラフ表示の方法

(12)

さらに,問題解決実行中にグラフ表示する方法を提案した[11]. //gravity41.set func([_Solf]); s.g=10; h.g=1/10; initialstate()=c <-> c:=[100,-80]; finalstate([u,v]) <-> [u,v]=[s.g,0]; delta([u,v],a)=[u2,v2] <-> v2:=v+h.g*(-2 - 1*v + a), u2:=u+h.g*v2; genA([u,v])=As <-> showHistory([u,v]), As:=[-80,-40,-20,-10,-5,-3,-2,-1,0,1,2,3,5,10,20,40,80]; goal([u,v])=r <-> r:=30*pow(u - s.g,2) + 1*pow(v,2);

st([u,v]) <-> abs(u-s.g)+abs(v) <= 0.3, st.g:=[u,v];

preprocess() <-> hist.g:=[], show2(2,[[5],[5]],"plot"); showHistory([u,v]) <-> hist1:=hist.g, hist2:=append(hist1,[[u,v]]), len:=cardinality(hist2), hist3:=project(hist2,["r", len-199,len]), show2(2,transpose(hist3),"plot"), hist.g:=hist3; postprocess()<-> xwriteln(0,"hist.g=",hist.g), xwriteln(0,"Solf2=",_Solf()), xwriteln(0,"st=",st.g); 図表9 問題解決実行中のグラフ表示の方法

(13)

5 開発方法論 ここでは,Simcast におけるシミュレーション開発方法論を提案する. 5.1 状態機械やオートマトンの結合システム 単層ネットワークの例として,図表10のような循環するネットワークを考える.このシステム S4は,単純なフィードバックシステムではない.S4は,3つの動的システム(要素システム S1, S2, S3)と1つの静的システム(加算要素(+))を含む,ネットワークシステムである.以下では,Si のモデルを <δi, 0 > とする(i=1,2,3).

S1

S2

S3

S4

a1

a3

a2

a

c3

c1

c2

+

図表10 循環するネットワークS4 次の図表11は,図表10の配置を換え,動的システムS1, S2, S3が並列に並ぶように描き直したも のである.このように配置すると,要素システムの結合が図の左側にひとつにまとまり,後述する ような一貫した理解ができるようになる.ただし,出力は状態の組(c1,c2,c3)であるとしている 点に注意されたい. 入力結合in(a,c)

S1

S2

S3

a1=a+c3

a2=c1

a3=c2

c1

c2

c3

a

+

図表11 循環するネットワークS4の構造

(14)

このとき,全体システム S4は,(c1,c2,c3)を状態とする,ひとつの状態機械である.なぜなら, S4の次状態 cc は,関数 δ4((c1,c2,c3),a)=cc <-> (a1,a2,a3) = (a+c3,c1,c2) かつ cc = (δ1(c1,a1),δ2(c2,a2),δ3(c3,a3) ). で計算できるからである.したがって,S4は状態機械であり,そのモデルは<δ4, (0,0,0) > である (厳密な証明は省略する). この循環するネットワーク S4を,具体的に CAST 言語でモデル化すると,次のようになる(図 表12). //sim41.set

func([delta1 ,delta2 ,delta3 ,delta4]); delta1(c,a)=cc <-> cc:=a; delta2(c,a)=delta1(c,a); delta3(c,a)=delta1(c,a); delta4(c,a)= cc <-> [c1,c2,c3]:=c, [a1,a2,a3]:=[a+c3,c1,c2], // 入力結合 in(a,c) cc:=[delta1(c1,a1),delta2(c2,a2),delta3(c3,a3)]; inputsequence0()=[1,0,0,0,0]; initialstate0()=[0,0,0]; delta0(c,a)=delta4(c,a); 図表12 単層ネットワークS4の CAST 言語によるモデル このネットワークは3つの要素をもつシステムなので,状態は c=(c1,c2,c3)である.そのため, 初期状態は initialstate0() = [0,0,0] となっている.Simcast では,ひとつの状態機械モデルし

(15)

か実行できないが,全体システムS4 = <δ4, (0,0,0) > がひとつの状態機械であるので,これで動か すことができる. 実行結果は図表13に示した.確かに,時刻1に入力された1がいつまでも S4内を循環している 様子が分かる. 図表13 モデルsim41.set(図表12)の実行結果 背景となる基本的な原理は,「複数の状態機械(オートマトン)が結合したシステムは,全体と して一つの状態機械(オートマトン)である」ということである.また,図表10が図表11のように 描けることである.これらの原理により,重層的なネットワークの段階的なモデル化が,同じ単純 な方法で一貫してできるようになる. 5.2 問題解決システムを含むネットワーク

Simcast は MTA-SDK の段階ですでに提供されていた Solver(問題解決システム)も実行するこ とができる.Solver とは,問題対象にアクションを加えながら,現在の状態から望みの状態に変化 させてゆくシステムのことである.人工知能の分野では一般問題解決器 GPS と呼ばれるものに相 当する.詳細は文献[1,3]を参照されたい.

Simcast では,この Solver を関数化して利用することが可能になった(図表14).Solver を関数化 するとは,直感的に言えば,外側からSolver の設定値を変更して,Solver を実行できるようにする ことである[12] .Solver を関数化することができれば,さまざまなシステム要素に,Solver を埋め 込むことができるので,複雑なシステムシミュレーションを行なうことが可能となる. 図表14 関数化した問題解決システム たとえば,図表15のように,オートマトンの状態遷移関数δそのものを Solver にすることが可 solver (h) c, a cc

(16)

能である.親プロセスであるオートマトンが状態遷移するとき,子プロセスの Solver に初期値な どの値(c, a)を渡し,その Solver を実行し,その実行結果の値 cc をオートマトンが取得し,状態 遷移に利用できる. 図表15 Solver を埋め込んだオートマトン オートマトンに埋め込む結果,「Solver の定義ファイルを変更することなく」,異なる設定値(c, a)に対する解を次々と求めることが可能になるので,各変数と解の間の関係を知るのに便利である. また,Solver を内蔵する複数のオートマトンが結合したネットワークを構築することができる(次 節の価格調整システム参照). 6 シミュレーション実施例 Simcast の適用範囲を見るために,さまざまなシミュレーションを実施した.ここでは最適化と 複雑系のシミュレーション事例を取り上げる. 6.1 最適化シミュレーション 有限集合を定義域とする関数の最適解・最適値を求めるには,数値リストの中から最大値を抽出 する算術関数max や述語を用いて集合を生成する集合定義関数 defSet あるいは defList を使えば良 い[13].しかしながら,無限集合を定義域とする関数の最適解・最適値を求めるには求解アルゴリ ズムが必要であるためSolver を使うことになる.たとえば,「山登り」を行う Solver を簡単に作る ことができる[13] .また,非協力ゲームのナッシュ均衡解は,最適反応集合の共通部分として求め ることができる[14].また,遺伝アルゴリズムによる最適化[15]やロケットなど物理系の最適制御[16] も扱うことができる.確かに,CAST は集合を操作するのに適した言語である. 例として,経済学における価格調整システムのシミュレーションを紹介する[17] . solver (h) 状態記憶 λ a b c cc

(17)

S1

S2

y

x

S3

p

c=(x,y)

図表16 価格調整システムS4のブロック線図 価格調整システムは図表16のように3つの要素システムからなる複合システムである.消費者 S1と生産者 S2は Solver を関数化した状態機械とする.価格 p が状態機械 S1, S2に入力されると, 新しい需要量x と供給量 y が計算され,次の状態(出力)となる.調整者 S3は入力(x,y)に対して 少しだけ修正した価格 p を次の状態(出力)とする状態機械である.この価格調整システムの CAST 言語によるモデルは次のようになる. //price40.set func([out,delta1,delta2,delta3,delta4]); out("p10")=p10out.g; out("p20")=p20out.g; com();

delta1(x,p)=xx <-> p10in.g:=[x,p], load_go("price10.p"), xx:=out("p10"); delta2(y,p)=yy <-> p20in.g:=[y,p], load_go("price20.p"), yy:=out("p20"); delta3(p,[x,y])=pp <-> (x -y > 0.5) ->(pp:=p +0.05), (y -x > 0.5) ->(pp:=p -0.05), (abs(x -y)<= 0.5) -> (pp:=p); delta4([p,x,y],a)= cc <-> pp:=delta3(p,[x,y]), cc:=[pp,delta1(x,pp),delta2(y,pp)]; inputsequence0()="d"; times0()=5; initialstate0()=c <-> c:=[0.6,6.1,3.1]; delta0(c,a)=delta4(c,a); 図表17 価格調整システムのCAST 言語によるモデル

(18)

要素システムS1, S2, S3の状態遷移関数は,図表17では,それぞれ delta1, delta2, delta3で定義し ている.これらを結合した全体システムS4の状態遷移関数は delta4となる.特に述語 load_go は先 行して作成してあるSolver(拡張子.p)を呼び出して実行するものである.このモデルをコンパイ ルし実行すると,需要曲線と供給曲線が交わる均衡点へ調整していく運動,いわゆるクモの巣の動 きをすることになる.学習者として理解しやすいモデルになっている点が重要である. 6.2 複雑系シミュレーション 複雑系のシミュレーションの多くは,複数のオートマトンが相互作用しているものとして定式化 されている.したがって,Simcast はそれらの数理的定式化をほぼそのままモデル化することが可 能である.ここでは細胞オートマトンのシミュレーションを取り上げる[18] //cellular20.set M.g=30; N.g=30; MN.g=product(genIndex(2,M.g-1),genIndex(2,N.g-1)); Rule.g= [[[[1,1,1],[0,0,0],[0,0,0]],1], [[[0,1,0],[0,0,0],[0,0,0]],1], //縦に伸びる [[[1,0,0],[1,0,0],[1,0,0]],1], [[[0,0,0],[1,0,0],[0,0,0]],1], //右に伸びる [[[0,0,1],[0,0,1],[0,0,1]],1], [[[0,0,0],[0,0,1],[0,0,0]],1] ];//左に伸びる inputsequence0()="d"; times0()=30; initialstate0()=c0 <-> L:=constantlist(0,[M.g,N.g]), c0:=replaceMatrix(L,[[1,7,1],[2,7,1],[3,7,1]]); delta0(c,a)=cc <-> Ls:=defList(p(z,[i,j],c),member([i,j],MN.g)), //変更チェック cc:=replaceMatrix(c,Ls); //変更実施 p(z,[i,j],c) <-> L1:=project(c,["r",i-1,i+1]), N:=transpose(project(transpose(L1),["r",j-1,j+1])), member([N,v],Rule.g), z:=[i,j,v]; 図表18 二次元細胞オートマトンのCAST 言語によるモデル

(19)

二次元細胞オートマトンは,二次元平面に分布する複数の2状態機械が相互作用するシステムの ことである.全体システムの状態 c は行列(Matrix)で表すことができるので,行列の値を書き換え てゆくオートマトンとしてモデル化することができる. 図表18は,まず initialstate0で30×30の行列 c0を作成している.状態遷移関数 delta0で,900 個の細胞の近傍をチェックし,状態を変更すべき細胞をリストアップ(変数 Ls )し,関数 replaceMatrix で変更を実施し,次の状態 cc を生成する.図表18のモデルの1回の状態遷移で900 個の細胞が状態遷移する可能性もある.ここでは,概念的に理解しやすい形でモデル化できること と,モデルが非常に小さく作成できることが重要であると思われる. 7 おわりに 本稿では,筆者が開発したシミュレーション開発実行環境Simcast の概要紹介とシミュレーショ ン開発方法論およびその適用例を紹介した.その結果次の3点が判明した. 1)Simcast の適用範囲が非常に広いこと. 2)すべてのモデルは同じ言語CAST で記述できて,しかも多くのモデルが簡単なこと. 3) 複雑なシステムでも,一貫した同じ原理に基づいて段階的に多層的に構築できること. これらの利点は,言語CAST の柔軟性と Simcast がオートマトンだけでなく問題解決システムも 活用できることに起因するものである. 現時点で残された問題点は, 1)5.2節で見たようにオートマトンから Solver を呼び出せるが,しかし Solver の中から別の Solver を呼び出せないことである.回避策として,与えられた Solver をオートマトン化して結合 することは可能である. 2)load_go コマンドが引数の値を渡せないことである. これらは,extProlog をオブジェクト指向言語に改変すれば根本的に解消できるかも知れないが, 今後の課題である. 〈注〉

[1] Y. Takahara and Y. Liu, Foundation and Applications of MIS : A Model Theory Approach , Springer (2006)を参照の こと.

[2] 旭,高原,中野,斎藤,柴,竹田「経営情報システム開発のためのモデル記述言語:CAST」経営情報学会誌, Vol.16,No.4(2008) pp.19-30を参照のこと.また,次のサイトのダウンロードページの最終行から関連資 料をダウンロードできる.

(20)

http://www.geocities.jp/kisoten/ (2008.08.16)

[3] 高原康彦ほか『形式手法 モデル理論アプローチ:情報システム開発の基礎』日科技連(2007)では開発環 境MTA-SDK の操作方法と経営情報システム開発方法の基礎的な部分が詳述されている.また,第4章は 言語CAST の解説となっている.

[4] Y. Takahara, R. Banerji, T. Asahi and N. Shiba, "Theoretical foundation for browser-based management information system development", International Journal of General Systems, Vol. 37, No. 3, (2008) pp.275-304.

[5] 高原康彦,柴直樹,高木徹,矢野吉雄「システム論的アプローチによるソルバの設計と実装—問題解決 型経営情報システムのソルバの定式化」経営情報学会誌 Vol.12, No.4 (2004)

[6] Yoshio Yano, A Model Theory Approach to Problem Solving Systems Development, Doctorial Dissertation, Chiba Institute of Technology (2006) [7] Simcast はインターネットの Web サイトからダウンロード可能である. http://www2.toyo.ac.jp/~asahi/reseach/simulation/ (2008.08.16) [8] 状態機械とは,状態遷移関数だけのオートマトンの意.出力関数が恒等関数である(λ(c)=c),あるい は出力関数を記述する必要のないシステムのモデルである. [9] 上記サイト[7]の技術資料「算術関数」で公開されている. [10] 上記サイト[7]の技術資料「ファイル操作」「グラフによるデータ表示」「スプレッドシートによるデータ 表示」を参照せよ. [11] 上記サイト[7]の技術資料「問題解決実行中のグラフ表示」を参照せよ. [12] 上記サイト[7]の技術資料「問題解決システム(Solver)の関数化」を参照せよ. [13] 上記サイト[7]の技術資料「モデル理論アプローチで最適解を求める」を参照せよ. [14] 上記サイト[7]の技術資料「非零和ゲームのナッシュ均衡解」を参照せよ. [15] 上記サイト[7]の技術資料「遺伝アルゴリズム(Genetic Algorithm:GA)」を参照せよ. [16] 注[1]の第7章,第8章,あるいは[11]を参照せよ. [17] 上記サイト[7]の技術資料「価格調整システム(均衡価格)」を参照せよ. [18] 上記サイト[7]の技術資料「二次元細胞オートマトン」を参照せよ. (2009年1月6日受理)

参照

関連したドキュメント

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

 

本論文での分析は、叙述関係の Subject であれば、 Predicate に対して分配される ことが可能というものである。そして o

あれば、その逸脱に対しては N400 が惹起され、 ELAN や P600 は惹起しないと 考えられる。もし、シカの認可処理に統語的処理と意味的処理の両方が関わっ

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から

本研究科は、本学の基本理念のもとに高度な言語コミュニケーション能力を備え、建学

本研究科は、本学の基本理念のもとに高度な言語コミュニケーション能力を備え、建学

本研究科は、本学の基本理念のもとに高度な言語コミュニケーション能力を備え、建学