基本的な記述ルール

artisoc4とartisoc Cloudの基本的な記述ルールの違いについて説明します。

なお、artisoc Cloudの基本的な記述ルールはPythonのものと共通ですので、詳細な点はPython公式ドキュメントなどを参照してください。

大文字と小文字

artisoc4では大文字と小文字を区別しません。一方、artisoc Cloudでは大文字と小文字を区別しますので注意してください。

artisoc4

PrintLn(My.X)  //エラーにならない
PrintLn(my.x)  //小文字でもエラーにならない

artisoc Cloud

print(self.x)  # エラーにならない
print(self.X)  # エージェント座標xは小文字で定義されているので、大文字だとエラー

コメントアウト

artisoc4

//で定義します。

//これはコメントです

artisoc Cloud

#で定義します。

#これはコメントです

改行とインデント

artisoc4

artisoc4では、改行とインデントについてのルールはありません。つまり、改行とインデントはコードを見やすくするために挿入するものであって、改行とインデントがなくともコードは問題なく動作します。

//改行とインデントを入れた見やすいコード
Agt_Init{
  My.X = 3
  My.Y = 3
}
//改行やインデントがないコードでも問題なく動く
Agt_Init{
MY.X = 3  My.Y = 3
}

artisoc Cloud

artisoc Cloudでは、改行とインデントを正しく用いないとエラーになります。

# 正しいコード
def agt_init(self):
    self.x = 3
    self.y = 3
# エラーになるコード
def agt_init(self):
    self.x = 3
   self.y = 3  # インデントが揃っていないためエラー

演算子

四則演算の+, -, *, /、代入の=など、おおよそ演算子は共通です。

主な違いとしては、「値が等しくない」ことを表す演算子<>がartisoc Cloudでは使えません。代わりに!=を用います。

artisoc4

If My.X <> 3 Then
    [処理]
End If

artisoc Cloud

if self.x != 3:
    [処理]

また、artisoc Cloudでは変数に値を加える演算子+=を用いることができます。同様に、-=, *=, /=を用いることもできます。

artisoc4

Universe.hensuu = Universe.hensuu + 1  //hensuuに1を加える

artisoc Cloud

Universe.hensuu = Universe.hensuu + 1  # hensuuに1を加える
Universe.hensuu += 1  # このように書いてもOK

変数の型

artisoc4

artisoc4では、変数の型はツリーで指定するか、ルールエディタ内でDimを用いて定義します。定義した型に合わない値を代入しようとするとエラーになります。

//整数型変数iを定義し、値を代入
Dim i as integer
i = 3
i = "hoge"  //整数型変数に文字列型の値を代入しようとするとエラー

artisoc Cloud

artisoc Cloudでは変数の型定義は必要ありません。変数の型は値が代入されたときに決定され、その変数に別の型の値を上書きすることもできます。

i = 3  # 変数iを定義し、整数型の値3を代入
i = "hoge"  # 変数iに文字列型の値"hoge"を上書きすることができる

変数の初期化

artisoc4

変数の値は変数の型に応じて決定されます。例えば、数値型の変数であれば初期値は0、エージェント集合型の変数であれば空の集合となります。

ツリー上で作成した変数であれば、「初期値設定」機能を用いて変数の初期値を変更することも可能です。

Univ_Init{
  one = CreateAgt(Universe.hiroba.hito)
  AddAgt(Universe.people, one)  //ツリー上で作成したUniverse変数people(初期値は空)にエージェントを追加
}

artisoc Cloud

ツリー上で作成する変数の場合、初期値は整数の0となります。別の初期値を与えたい場合は、univ_initやagt_initで値を代入する必要があります。

たとえば、エージェント集合型の変数をUniverse変数として作成する場合は、必ずuniv_initで初期化します。

def univ_init(self):
    
    Universe.people = set()  # Universe変数peopleを空の集合型変数として初期化
    
    one = create_agt(Universe.hiroba.hito)
    Universe.people.add(one)  # 空の集合型変数であるpeopleにエージェントoneを追加

エージェントの初期生成

artisoc4

artisoc4では、ツリーからエージェントのプロパティを操作することでエージェントの初期生成を行うことができます。下図では、シミュレーション開始時にエージェントを10体生成しています。

../../_images/artisoc4_artisocCloud_1.png

artisoc Cloud

artisoc Cloudでは、ツリー上からエージェントを生成することはできません。エージェントを生成するときは必ずルールエディタ内でcreate_agt関数を用います。シミュレーション開始時に生成したい場合は、univ_init内に記述します。

def univ_init(self):
    create_agt(Universe.hiroba.hito, num=10)  # シミュレーション開始時にhitoエージェントを10体生成