コミュニティ内検索
コンテンツ
MASツール
artisocモデル
その他
翻訳

FAQ

メインページ »» KK-MAS

目次


ツリーに定義したエージェントや変数が保存されない
一文字目が数字のエージェントや変数は保存できませんので全角もしくは半角の文字で名前を定義してください。
2次元マップを出力するには
設定メニューの出力設定で「追加する出力種類」から2次元表示マップを選択し、「追加ボタン」を押します。
二次元マップ設定ダイアログが開きますので、マップ要素リストの「追加」ボタンを押して、表示させたいエージェント等の要素を追加し、OKボタンをクリックします。(追加できる要素はWorldの直下にあるエージェントや変数のみです)
2次元マップ上でエージェントに背番号を表示するには
設定メニューの出力設定で「追加する出力種類」から2次元表示マップを選択し、「追加ボタン」を押します。
二次元マップ設定ダイアログが開きますので、マップ要素リストの「追加」ボタンを押して、表示させたいエージェントを追加します。
二次元マップ要素設定の「エージェント変数情報」のチェックをオンにします。
デフォルト値とは
変数の初期値を設定していない時に、参照される値のことを言います。

 
デフォルト値を編集するには
変数が新たに設定される時に、初期値として組み込まれる値は、デフォルト値としてすでに定められています。これを設定するには以下の手順でおこないます
ツリー上にあるデフォルト値を設定したい変数を選択した状態で、設定メニューから「デフォルト値設定」を選択し、値を入力します。
終了条件式を設定してシミュレーションを終了させるには
設定メニューから「実行環境設定」を選択し、「シミュレーション」タブの「終了条件式」の中に条件となる式をいれます。
例:ワールド上の変数「終了」がTrueのとき、シミュレーションを終了する

World.終了 == True

※ _ExitSimulation関数を用いても同じ事ができます。
ログファイルを記録、保存するには
設定メニューから実行環境設定を選択し、ログファイルタブの記録ファイル名形式の任意の形式を選択した上で、設定ボタンを押し、保存先を選択します。
その上で、「記録ステップ間隔」のところに数値を入力してOKボタンを押します。

※全ステップを記録するなら、1を、一つおきなら2を、入力します。
ログファイルを再生するには
シミュレーション結果が保存されているログファイルを開きます。この状態で再生メニューから「再生」を選択するか、表示メニューから「再生パネル」を選択して表示させて、「再生」ボタンを押します。
レポート出力を記録、保存するには
設定メニューから「実行環境設定」を選択し、「レポート出力」タブの「設定」ボタンを押し、保存先を選択します。
次に区切り文字を選択し、「レポート要素リスト」に、出力したい要素を追加して、OKボタンを押します。
初期値を変えてシミュレーションを複数回実行するには
設定メニューから「実行環境設定」を選択し、「連続実行」タブの「初期値変化設定」で変化の仕方を選択し、最大実行回数を選択します。
コントロールパネルに要素を追加するには
設定メニューから「コントロールパネル設定」を選択し、「ユーザ設定項目リスト」のなかに追加したい要素を追加します。

ツールボックスに要素を追加するには
ツールボックスに追加したい要素をツリー上で選択した上で、設定メニューから「ツールボックス」>「追加」を選択します。
実行終了時に出力画面を消去したいときには
設定メニューから「その他の設定」を選択し、「実行終了時に出力画面を残す」のチェックボックスを外します。
ユーザ定義関数をワールドルールとエージェントルール両方で使いたい時は
表示メニューから「共通ルールエディタ」を表示させ、そこにユーザ定義関数を入力します。共通ルールエディタにかかれたルールは、ワールドルール、エージェントルールのどちらからも参照することができます。
出力種類には何がありますか?(出力項目リスト)
出力種類には、「時系列グラフ」、「棒グラフ」、「二次元表示マップ」、「数値画面出力」、「ファイル出力」があります。
「実行環境設定」では、何ができますか?
「シミュレーション」、「ログファイル」、「実行順序」、「連続実行」に関する設定ができます。
○シミュレーション・・・シミュレーションの終了条件の設定、乱数シード値(同じ乱数を何回発生させるか)、実行ウェイト(1ステップごとのステップ間隔)が設定できます。
○ログファイル・・・ログファイルの名称とそのファイル名形式(固定あるいは連番、日付の追加など)の設定。記録するステップ間隔の設定ができます。
○実行順序・・・ランダム、あるいは固定順序の二種類があります。
○連続実行・・・初期値変化(なし、線形型、ランダム型)の設定。最大実行回数が設定できます。
コントロールパネルでは何ができますか?
ユーザがシミュレーションを実行、途中で中断する、あるいは1ステップごとに実行させることができます。また、Worldの下にあるエージェントの変数については、実行中に変更することができます。
コントロールパネルの設定方法は?
コントロールパネルを設定するには、「設定メニュー」から「コントロールパネル設定」を選択し、「ユーザ設定項目リスト」を表示させます。
「追加」や「編集」をクリックすると「ユーザ設定項目」が現れますので、こちらに必要な情報を書き込みます。

○コントロール名・・・任意の名前を付けてください
設定対象:コントロールパネル上で操作したい変数を選択します。ただし、World直下にある変数しか選択できません。
○インターフェース>ボタン・・・Onの時だけ(ボタンをクリックしたときに)、任意の値を代入したい時に使います。(例 森林火災を発生させる)
○インターフェース>トグルボタン・・・OnあるいはOffの時に、それぞれ値を代入したいときに使います。(例 えさを現状の状態からもう一度再生・復元させる)
○インターフェース>スライドバー・・・任意の値の範囲で数値を変化させたいときに使います。(例 カメの数)
○ インターフェース>直接入力・・・変数に代入したい値を、直接入力したいときに使います。
ツールボックスとは何をするものですか?
「新規空間」、「新規変数」、「新規エージェント」を追加したいときに使います。
ツールボックスの使い方は?
「新規空間」、「新規変数」、「新規エージェント」のどれかを選択し、作成したい場所の「エージェントキャンパス」上をクリックします。
ルールエディタのフォントを変更するには?
[設定]-[その他の設定]-[フォントの指定]で、変更できます。
モデル説明ファイルの取り込みの仕方は?
[設定]-[その他の設定]-[モデル説明ファイルの取り込み]で行います。
ユーザ定義関数はどのように書けばよいのですか?
ユーザ定義関数にはFunction()あるいは、Sub()を使用します。
関数名はユーザが自由に命名することができますが、予約語や既に宣言した変数名や、名前定義を使用することができません。
なお、Function()と、Sub()は以下のケースで使い分けます。
「返り値」があるとき・・・・Function()
「返り値」がないとき・・・・Sub()

○Functionのときのユーザー定義の記述形式
Function 関数名(パラメータ宣言) As 関数戻り値の型

 変数の型宣言部
 実行部
 Return(式)


○Subのときのユーザー定義の記述形式
Sub 関数名(パラメータ宣言)

 変数の型宣言部
 実行部
エディタ上で特定の文字を検索・置換するには?
エディタを選択し、[編集]-[検索]あるいは[置換]を開き、文字列を入力してください。
実行結果を印刷するには?
印刷したいフレームを選択した状態で、[ファイル]-[印刷]をしてください。
エージェントが自分の変数の値を参照、変更したい時は?
エージェントが自分の変数(ツリー上で該当エージェントの直下に存在している変数)を参照したり変更したりする場合、"My"を用いるのが一般的です。
例としてここでは、「カメ」エージェントがシミュレーションの1ステップ毎に1歳づつ年をとっていくルールを考えてみましょう。
ツリー上に「カメ」という名のエージェントと、その直下に「年齢」という変数を新しく作成した上で、次のようなルールをAgt_Stepに書き込むことになります。
ルール例

Agt_Step{
 My.年齢 = My.年齢 + 1


このルールによってこの「カメ」エージェントはステップごとに1歳づつ年をとっていくことになります。
エージェントが他エージェントの変数の値を参照、変更したい時は?
他エージェントの変数の値を参照、変更したい場合は、まず、その対象となる他エージェントを特定する必要があります。

1. エージェント番号が既知のとき(かつエージェントの数が増減しないとき)

例えば、空間上の「カメ(2)」エージェントの「財産」変数に1を足したい場合、
Agt_Step{
 World.空間.カメ.財産(2) = World.空間.カメ.財産(2) + 1
}
のように、かっこつきの番号で指定します。

2.エージェント番号が分からない時(またはエージェントの数が増減する時)

エージェントを特定するために「コレクション」をとる必要があります。
例:自分の周囲1マスにいる「カメ」エージェントの「財産」変数に1を足したい時
Agt_Step{
 Dim コレクション As Collection
 Dim オブジェ As Object
 コレクション = _CollectAround(My.X,My.Y,1,World.空間,World.空間.カメ)
 For each オブジェ In コレクション
  オブジェ.財産 = オブジェ.財産 + 1
 Next オブジェ

まず、コレクション型の変数(ここでは「コレクション」)とオブジェクト型変数(ここでは「オブジェ」)を宣言します。次に、周囲1マスのエージェントのコレクションを取得するために_CollectAround関数を用います。そしてFor each文を用いて、そのコレクションに存在するカメエージェント一つ一つについて、財産を+1しているわけです。
エージェントを空間上で動かしたい時は?
空間上にエージェントを設置した時にその直下に自動的に作られるXとYという変数の値を変更することによりエージェントを動かします。
例:「カメ」エージェントを右に2マス動かす
Agt_Step{
 My.X = My.X + 2

空間の座標は左上端が(0)ですので右に移動の場合は+2すればいいわけです。
実行中にエージェントに子エージェントを産ませたい時(エージェントの作り方)は?
エージェントがエージェントを産む(増やす)には2つの方法があります。
○_CreateAgent関数を使う方法。
例:「カメ」エージェントが毎ターン1匹の子供を産む。
Agt_Step{
 _CreateAgent(World.空間.カメ)

○ エージェントの初期値に作りたいエージェントの数を代入する方法。
増やしたいエージェントをマウスで右クリックし、[プロパティ]-[エージェントプロパティ]を開きます。エージェント数に任意の数を代入してください。
 注意)[プロパティ]-[初期値設定]では、エージェントの直下の変数に任意の値を代入するときに使います。
実行中に、あるエージェントを消したいときは?
エージェントを実行中に消すには_KillAgent関数を使います。
例:「財産」が0の「アリ」エージェントは死ぬ
Agt_Step{
 Dim アリ集合 As Collection
 Dim Obj As Object
 アリ集合 = _CollectAgent(World.空間.アリ)
 For each Obj In アリ集合
  If Obj.財産 == 0 Then
   _KillAgent(Obj)
  End If
 Next Obj

エージェントを消しても、そのターンはルール等が実行されます。
マップ上に表示されるエージェントの色を変数の値によって変化させたい時は?
まず、設定メニューの「出力設定」を選択し、二次元マップの編集を選んで、マップ要素リストの中から、変えたいエージェントを選択します。
二次元マップ要素設定の「エージェント表示色」の「変数指定」にチェックをいれ、指定したい変数を(ここでは「色」という変数を選択します)選択します。
その上で以下のようにルールを記述します。
例:「カメ」エージェントの表示色を赤に変更したい
Agt_Init{
 My.色 = Color_Red

Color_Redは色に関する予約語です。
空間上のエージェントの数を数えたい時は?
空間上のエージェントの総数を数えたい時は_CountAgent関数を用います。
例:空間上にいる「カメ」エージェントの数を変数に格納したいとき
Agt_Step{
 Dim 数 As Integer
 数 = _CountAgent (World.空間.カメ)

このようにすれば、空間上にいるカメの数の値を数という変数に格納できます。
空間上の特定の条件に合うエージェントの数を数えたい時は?
条件に合うものをコレクションにとり、これを_CountCollection関数で数えます。
例:「財産」変数が0の「アリ」エージェントを数える
Agt_Step{
 Dim 数 As Integer
 Dim Obj As Object
 Dim アリ集合 As Collection
 Dim 財産ナシグループ As Collection
 アリ集合 = _CollectAgent(World.空間.アリ)
 For each Obj in アリ集合
  If Obj.財産 == 0 Then
   _AddCollection(財産ナシグループ,Obj)
  End If
 Next Obj
 数 = _CountCollection(財産ナシグループ)

このように、財産が0のアリの数を数えることができます。
空間の大きさを知りたい時は?
_GetWidthSpaceおよび_GetHeightSpace関数を用います。
例:空間の横幅と縦幅の値を変数に格納する
Agt_Step{
 Dim 横幅 As Integer
 Dim 縦幅 As Integer
 横幅 = _GetWidthSpace(World.空間)
 縦幅 = _GetHeightSpace(World.空間)
空間がループするかどうかを知りたい時は?
_SpecifyLoop関数を用います。
例:空間がループするかどうかをブール型変数に格納する
Agt_Step{
 Dimループの有無 As Boolean
 ループの有無 = _SpecifyLoop (World.空間)
空間上のある一点の変数の値を変更したい時は?
変数を座標指定することによりある一点だけを変更することができます。
例:左から2マス目、上から4マス目の変数「えさ」に1足す
Agt_Step{
 World.空間.えさ = World.空間.えさ(1,3) + 1

座標は0スタートなので(1,3)になります
空間上に均一に存在する変数の値を同時に同じ数値だけ変化させたい時は?
For文によって1マスづつ変数の値を変化させます。
例:任意の大きさの空間に存在する「えさ」変数全部に1足す
Agt_Step{
 Dim i As Integer
 Dim j As Integer
 For i = 0 To _GetWidthSpace(World.空間)
  For j = 0 To _GetHeightSpace(World.空間)
   World.空間.えさ(i,j) = World.空間.えさ(i,j) + 1
  Next j
 Next i

For文を縦横の2回まわすことによって、全マスの変数の値を変更しています。
ある条件式でシミュレーションを終了させたい時は?
シミュレーション実行環境設定の終了条件式で設定する以外にも、ルール上にて_ExitSimulation関数を用いることもできます。
例:ワールド上の変数「終了」がTrueのとき、シミュレーションを終了する
Agt_Step{
 If World.終了 == True Then
  _ExitSimulation()
 End If

※_ExitSimulationMsg関数を使うと、終了時に任意のメッセージを表示することができます。
コントロールパネルからの操作で変数の値を変更したい時は?
コントロールパネルにボタンを設置したい場合、Worldの直下に専用の変数をおく必要があります。さらに、設定メニューから、コントロールパネル設定を選択し、コントロールパネルから制御したい要素を追加する必要があります。こうしてユーザ操作によってその変数の値がリアルタイムで変ることになります。
例:変数「えさの量」を「カメ」エージェントの「財産」に足します。
Agt_Step{
 World.空間.カメ.財産 = World.空間.カメ.財産 + World.えさの量
コントロールパネルのボタンのオン/オフでルールを変更したい時は?
コントロールパネルにボタンを設置したい場合、Worldの直下に専用の変数をおく必要があります。さらに、設定メニューから、コントロールパネル設定を選択し、コントロールパネルから制御したい要素を追加する必要があります。そしてIf文を用いて変数の値で場合分けをします。
例:変数「計算値」に、コントロールパネルのボタンがオンのときは5+2の値を、オフの時には5-2の値を代入します。
Agt_Step{
 Dim 計算値 As Integer
 If World.CTRLボタン == True Then
  計算値 = 5 + 2
 Else
  計算値 = 5 - 2
 End If
ある範囲の乱数を取得するには?
範囲の上限の値から下限の値を引いて1を足した数値(1未満の乱数発生であるから)にRnd関数をかけ、それに下限値を足したものが範囲指定の乱数になります。
例:上限値、下限値を引数とする乱数を発生させるユーザ定義関数を作り、上限値を10、下限値を5としてその関数の返り値を「結果」変数に格納する
Agt_Step {
 Dim 結果 as integer
 結果 = 範囲乱数(10,5)
}
Function 範囲乱数(上限値 As Integer, 下限値 As Integer)As Integer
{
 Dim 乱数 As integer
 乱数 = Rnd() * (上限値 - 下限値 + 1) + 5
 Return (乱数)
}
円周率(π)を計算するには?
計算関数のAtn()を使います。
例:πの値を計算し、piという変数に代入する。
Agt_Step{
 Dim pi As Double
 pi = 4 * Atn(1)
角度(°)から角度(ラジアン)を求めるには?
角度からラジアンを求めるには以下のようなルールを記述します。
例:角度を引数にする、ラジアンという名のユーザ定義関数をつくる
Function ラジアン (角度 As Integer) As Double{
Dim Rad As Double
Rad = 角度 * 4 * Atn(1) / 180
Return (Rad)
For/Next文を使うには?
ある作業を○○回繰り返して実行したい時に、For/Next文を使います。
例:1から20までを順番に足し算した値を「結果」変数に格納する。
Agt_Step{
 Dim 結果 As Integer
 Dim i As Integer
 For i = 1 to 20 Step 1
  結果 = 結果 + i
 Next i
}
配列変数を使うには?
ルール上で配列変数を宣言します。
例:3×4個の要素を持つ整数型の配列変数(名前は「一覧」)を作り、その中の(0,0)と(1,1)を足し算した結果を(2,3)に代入する
Agt_Step{
 Dim 一覧(2,3) As Integer
 一覧(2,3) = 一覧(0,0) + 一覧(1,1)

0スタートなので、(2,3)になります。
コレクションとは?
エージェントの集合をコレクションといいます。ある条件にしたがってエージェントを抽出してコレクションにしておけば、特定のエージェントだけに絞って作用を及ぼすことができます。いくつかコレクション関数をあげておきます。
例:アリエージェントのコレクションをとる
 Col = _CollectAgent(World.空間.アリ)
例:指定座標の周囲にいるアリエージェントのコレクションをとる
 Col = _CollectAround(My.X,My.Y,3,World.空間,World.空間.アリ)
デバッグ出力の使い方
ルール上に_DebugStr関数をかくことによって実行中に任意の時点での変数等の値を表示することができます。
例:1に2を足し、2をかけ、5を引く計算の途中経過を表示する
Agt_Init{
 Dim 結果 As Integer
 結果 = 1
 結果 = 結果 + 2
 _DebugStr(“結果=” & 結果)
 結果 = 結果 * 2
 _DebugStr(“結果=” & 結果)
 結果 = 結果 - 5
 _DebugStr(“結果=” & 結果)
If文(条件文)を使うには
条件によって処理を変えたい時にIf文を使います。
例:アリエージェントの「財産」が1以上の時は1を引き、1未満の時は10を足す。
Agt_Step{
 If World.空間.アリ.財産 > 1 Then
  World.空間.アリ.財産 = World.空間.アリ.財産 − 1
 Else
  World.空間.アリ.財産 = World.空間.アリ.財産 + 10
 End If
オブジェクトとは何ですか?
コレクションを構成するエージェントのことを言います。
組み込み関数に何があるかを調べるには?
ツールの「ヘルプ」、「ヘルプの表示」を選択し、調べたい関数のキーワードを代入してください。
ルールを正しく書いたのに実行されない時は?
○ 半角文字が全角文字になっていないか調べてみましょう。
○ _Debugstr()のように"_"が頭についているか確認しましょう。
○ 関数に()は忘れずについていますか?
○ 結果を返すreturn()の"()"をつけていますか?
○ ピリオド"."がカンマ","になっていませんか。あるいはその逆はありませんか?
○ 実行部分の語彙の間には、適切なスペースがとってありますか?
どうしてもルールが実行されない時の対処は?
○ ルールの一部を/*〜*/でコメントアウトして実行してみましょう。
○ _Debugstr()を使って実行結果を見てみましょう。
連続実行を設定したのに連続実行されないときは?
設定メニューの実行環境設定にてシミュレーションタブのシミュレーション終了条件にて定義してください。

エージェントルールで「_ExitSimulation」を実行すると、その時点でシミュレーションが終了しますのでご注意下さい。
Windows Vistaで動作させたいとき
 USBライセンスキーのドライバをバージョンアップをする必要があります。
 Aladdin社のドライバ更新ページを開き、

 http://www.aladdin.com/support/hasp/enduser.asp#latestDD

 「HASP Device Driver Downloads」

 にあります

 HASP HL Device Driver GUI Installation
 NEW! Supports Vista
 Win32/Win64
 HASP_HL_driver_setup.zip
 2.4 MB
 5.22
 01/2007
 
 をダウンロードし、インストールしてください。
USBセキュリティキーの最新ドライバを取得したいとき
 Aladdin社の下記HASP Driverのダウンロードページより最新版を取得することができます。

 HASP Driverのダウンロードページ
  http://www.aladdin.com/support/hasp/enduser.asp#latestDD


Copyright © KOZO KEIKAKU ENGINEERING Inc. All Rights Reserved.( 会社情報 情報セキュリティ・個人情報について )