/*********************************************************************/ /* */ /* マルチエージェントシミュレータ Version 1.0 */ /* */ /*********************************************************************/ //------------------ コンポーネントツリー --------------- WORLD { space 二次元空間(10,10),SQUARE_2D(50, 50, !LOOP) { agent 先進国(10,10)[0] { dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); dim 利益(10,10) AS Integer = (0); dim 体力(10,10) AS Double = (0.000000); dim トラヒック(10,10) AS Integer = (0); dim 幸福度(10,10) AS Double = (0.000000); dim 交渉力(10,10) AS Double = (0.000000); dim 色(10,10) AS Integer = (0); dim 利得(10,10) AS Double = (0.000000); dim 適応度(10,10) AS Integer = (0); dim 協調戦略(10,10) AS Boolean = (53035008); dim 強制戦略(10,10) AS Boolean = (53035008); dim 精算回数(10,10) AS Integer = (0); dim HA(10,10) AS Integer = (0); dim HB(10,10) AS Integer = (0); dim HC(10,10) AS Integer = (0); dim HD(10,10) AS Integer = (0); dim 支援(10,10) AS Integer = (0); dim 妥結ポイント(10,10) AS Double = (0.000000); } agent 途上国(10,10)[0] { dim X(10,10) AS Double = (0.000000); dim Y(100,10) AS Double = (0.000000); dim DIRECTION(190,10) AS Double = (0.000000); dim 利益(10,10) AS Integer = (0); dim 体力(10,10) AS Double = (0.000000); dim トラヒック(10,10) AS Integer = (0); dim 幸福度(10,10) AS Double = (0.000000); dim 交渉力(10,10) AS Double = (0.000000); dim 色(10,10) AS Integer = (3); dim 連帯(10,10) AS Boolean = (52906240); dim 利得(10,10) AS Integer = (0); dim 適応度(10,10) AS Double = (0.000000); dim 協調戦略(10,10) AS Boolean = (52958720); dim 連帯戦略(10,10) AS Boolean = (51774720); dim 精算回数(10,10) AS Integer = (0); dim LA(10,10) AS Integer = (0); dim LB(10,10) AS Integer = (0); dim LC(10,10) AS Integer = (0); dim LD(10,10) AS Integer = (0); dim 支援(10,10) AS Integer = (0); dim 妥結ポイント(10,10) AS Double = (0.000000); } dim 環境成長度(10,10)[50][50] AS Integer = (2500*0); dim 環境成長度カラー(10,10)[50][50] AS Double = (2500 * 0.000000); } dim 先進国の数(10,10) AS Integer = (0); dim 途上国の数(10,10) AS Integer = (0); dim 先進国の代謝率(10,10) AS Double = (0.000000); dim 途上国の代謝率(10,10) AS Double = (0.000000); dim 妥結ポイント(10,10) AS Double = (0.000000); dim トラヒック(10,10) AS Integer = (0); dim 幸福度合計(10,10) AS Double = (0.000000); dim 環境成長ステップ(10,10) AS Integer = (0); dim 環境要素(10,10) AS Boolean = (0); dim 取得できる環境(10,10) AS Integer = (0); dim 平均利得(10,10) AS Double = (0.000000); dim 適応度合計(10,10) AS Double = (0.000000); dim 平均幸福度(10,10) AS Double = (0.000000); dim コメント表示(10,10) AS Boolean = (52919296); dim 支援率(10,10) AS Double = (0.000000); dim 連帯効果(10,10) AS Boolean = (52980224); dim 実行ステップ数(10,10) AS Integer = (0); dim OLD10幸福度合計(10,10) AS Integer = (0); dim 全体環境(10,10) AS Integer = (0); dim 戦略による利得(10,10) AS Integer = (0); dim 先進国協調戦略の数(10,10) AS Integer = (0); dim 先進国強制戦略の数(10,10) AS Integer = (0); dim 途上国協調戦略の数(10,10) AS Integer = (0); dim 途上国連帯戦略の数(10,10) AS Integer = (0); dim 先進国戦略の数(10,10) AS Integer = (0); dim 途上国戦略の数(10,10) AS Integer = (0); dim 先進国協調戦略の割合(10,10) AS Double = (0.000000); dim 先進国強制戦略の割合(10,10) AS Double = (0.000000); dim 途上国協調戦略の割合(10,10) AS Double = (0.000000); dim 途上国連帯戦略の割合(10,10) AS Double = (0.000000); } //------------------ コンポーネントパレットツリー --------------- //------------------ エージェント変数初期値データ --------------- INITIAL_VALUE { WORLD.先進国の数 = 1(36); WORLD.途上国の数 = 1(166); WORLD.先進国の代謝率 = 1(0.300000); WORLD.途上国の代謝率 = 1(0.800000); WORLD.環境成長ステップ = 1(30); WORLD.環境要素 = 1(52904193); WORLD.コメント表示 = 1(52892161); WORLD.支援率 = 1(5.000000); WORLD.連帯効果 = 1(53002753); WORLD.実行ステップ数 = 1(200); } //------------------ エージェント共通ルール --------------- #begin_rule common_agent_rule Function 端処理X(Xp as integer) as integer { //マップの端をループさせる処理 //変数定義 Dim EdgeX as integer //マップの幅を取得 EdgeX = _GetWidthSpace(World.二次元空間) //Xpが右端よりはみ出る場合は左側にループ If Xp >= EdgeX then Xp = Xp - EdgeX //Xpが左端よりはみ出る場合は右側にループ ElseIf Xp < 0 then Xp = Xp + EdgeX End If //値を返す Return(Xp) } Function 端処理Y(Yp as integer) as integer { //マップの端をループさせる処理 //変数定義 Dim EdgeY as integer //マップの高さを取得 EdgeY = _GetHeightSpace(World.二次元空間) //Ypが下端からはみ出る場合は上側にループ If Yp >= EdgeY then Yp = Yp - EdgeY //Ypが上端からはみ出る場合は下側にループ ElseIf Yp < 0 then Yp = Yp + EdgeY End If //値を返す Return(Yp) } Function 移動(StepV as Integer) as Boolean { // 012 :方向をランダムに選択して移動 // 7 3 // 654 //変数定義 Dim Drc as Integer Dim Stp as Integer Dim moX as Integer Dim moY as Integer Dim StpX as Integer Dim StpY as Integer //方向をランダムにセット Drc = Int(Rnd()*7) //XY方向にステップ数をランダムにセット StpX= Int(Rnd()*StepV)+1 StpY= Int(Rnd()*StepV)+1 //現在の自分の位置を仮変数に格納 moX = My.X moY = My.Y //方向に合わせてX方向の位置を仮変数に代入 If (Drc == 0) OR (Drc == 6) OR (Drc == 7) Then moX = moX - StpX End If If (Drc == 2) OR (Drc == 3) OR (Drc == 4) Then moX = moX + StpX End If //X位置の補正(ループ処理) moX = 端処理X(moX) //自分のX位置をセット My.X = moX //方向に合わせてY方向の位置を仮変数に代入 If (Drc == 0) OR (Drc == 1) OR (Drc == 2) Then moY = moY - StpY End If If (Drc == 4) OR (Drc == 5) OR (Drc == 6) Then moY = moY + StpY End If //Y位置の補正(ループ処理) moY = 端処理Y(moY) //自分のY位置をセット My.Y = moY //移動完了・値を返す Return(True) } Sub コメント出力(str As String) { If World.コメント表示 == True Then _DebugStr(str) End If } #end_rule common_agent_rule //------------------ エージェントルール --------------- #begin_rule WORLD Agt_Init{ Dim i As Integer Dim j As Integer Dim count As Integer // 国の誕生 For i = 1 To 先進国の数 _CreateAgent(World.二次元空間.先進国) Next i For i = 1 To 途上国の数 _CreateAgent(World.二次元空間.途上国) Next i //環境要素がTrueならば環境要素を設定 If World.環境要素 == True then 環境設定() End If //WORLD.妥結ポイント = Rnd() * 1 + 10 WORLD.二次元空間.先進国.妥結ポイント = 100 WORLD.二次元空間.先進国.妥結ポイント = 100 WORLD.妥結ポイント = 100 count = 0 World.連帯効果 = True World.コメント表示 = True } Agt_Step{ Dim i As Integer // 変数 Dim j As Integer // 変数 //追加した変数 Dim ichi As Integer // 変数 Dim selsct_agent As Integer // 変数 Dim 結果1 As Integer // 変数 Dim 結果2 As Integer // 変数 Dim 先進国コレクション As Collection // 変数 Dim 先進国id As Object // 変数 Dim 途上国コレクション As Collection Dim 途上国id As Object // 変数 Dim 先進国協調戦略コレクション As Collection // 変数 Dim 先進国obj As Object // 変数 Dim 途上国協調戦略コレクション As Collection Dim 途上国obj As Object // 変数 Dim 先進国強制戦略コレクション As Collection // 変数 Dim 先進国強制戦略id As Object // 変数 Dim 途上国連帯戦略コレクション As Collection Dim 途上国連帯戦略id As Object // 変数 Dim obj As Object // 変数 // 複製用変数 Dim tmp_協調戦略 As Boolean Dim tmp_強制戦略 As Boolean Dim tmp_連帯戦略 As Boolean Dim tmp_利益 As Integer Dim tmp_トラヒック As Integer Dim tmp_幸福度 As Double Dim tmp_交渉力 As Double Dim tmp_色 As Integer Dim tmp_利得 As Double Dim tmp_適応度 As Double Dim tmp_妥結ポイント As Double Dim simend As Integer Dim hist_count As Integer      //シミュレーションが200ステップで終了する simend = _GetCountStep() If simend >= World.実行ステップ数 Then _ExitSimulation() End if World.取得できる環境 = 0 //環境要素がTrueならば環境を成長させる If World.環境要素 == True then 環境成長() End If //先進国のトラヒックが途上国のトラヒックの9倍になったらシミュレーションを終了する if WORLD.二次元空間.先進国.トラヒック == WORLD.二次元空間.途上国.トラヒック * 9 then _ExitSimulation() End if //妥結ポイントが0になったらシミュレーションを終了する if WORLD.妥結ポイント < 0 then _ExitSimulation() End if If (simend Mod 10) == 0 Then World.old10幸福度合計 = World.幸福度合計 End If // _Debugstr(World.old10幸福度合計) // 国の数 World.先進国の数 = _CountCollection(_CollectAgent(World.二次元空間.先進国)) World.途上国の数 = _CountCollection(_CollectAgent(World.二次元空間.途上国)) //幸福度合計 World.幸福度合計 = World.二次元空間.先進国.幸福度 + World.二次元空間.途上国.幸福度 World.平均幸福度 = (World.二次元空間.先進国.幸福度 + World.二次元空間.途上国.幸福度)/(World.先進国の数+World.途上国の数) //利得合計 World.平均利得 = (World.二次元空間.先進国.利得 + World.二次元空間.途上国.利得) / (World.先進国の数+World.途上国の数) //妥結ポイント //World.妥結ポイント = ((World.二次元空間.先進国.妥結ポイント*World.先進国の数) + (World.二次元空間.途上国.妥結ポイント*World.途上国の数)) / (World.先進国の数+World.途上国の数) //コメント出力("妥結ポイント," & World.妥結ポイント) World.妥結ポイント = (World.二次元空間.先進国.妥結ポイント + World.二次元空間.途上国.妥結ポイント)/ 2 //コメント出力("妥結ポイント," & World.妥結ポイント) //全体環境を知る //World.全体環境 = (World.二次元空間.先進国.支援 * World.先進国の数) + (World.二次元空間.途上国.支援 * World.途上国の数) World.先進国協調戦略の数 = 0     World.先進国強制戦略の数 = 0     World.途上国協調戦略の数 = 0 World.途上国連帯戦略の数 = 0 先進国コレクション = _CollectAgent(World.二次元空間.先進国) 途上国コレクション = _CollectAgent(World.二次元空間.途上国) //すべてのエージェントに対して For i = 0 to World.先進国の数 - 1 //エージェントオブジェクトを取得 先進国Obj = _GetObject(先進国コレクション,i) //もし協調戦略だったら if 先進国Obj.協調戦略 == True  then World.先進国協調戦略の数 = World.先進国協調戦略の数 + 1 ElseIf 先進国Obj.協調戦略 == False Then World.先進国強制戦略の数 = World.先進国強制戦略の数 + 1 End if World.先進国戦略の数=World.先進国協調戦略の数+World.先進国強制戦略の数   Next i //_Debugstr(World.先進国強制戦略の数) //すべてのエージェントに対して For i = 0 to World.途上国の数 - 1 //エージェントオブジェクトを取得 途上国Obj = _GetObject(途上国コレクション,i) //もし協調戦略だったら if 途上国Obj.協調戦略 == True then World.途上国協調戦略の数 = World.途上国協調戦略の数 + 1 //もし連帯戦略だったら ElseIf 途上国Obj.協調戦略 == False Then World.途上国連帯戦略の数 = World.途上国連帯戦略の数 + 1 End if World.途上国戦略の数=World.途上国協調戦略の数+World.途上国連帯戦略の数 Next i        World.先進国協調戦略の割合 = (abs(World.先進国協調戦略の数)/World.先進国の数) * 100        World.先進国強制戦略の割合 = (abs(World.先進国強制戦略の数)/World.先進国の数) * 100         World.途上国協調戦略の割合 = (abs(World.途上国協調戦略の数)/World.途上国の数) * 100         World.途上国連帯戦略の割合 = (abs(World.途上国連帯戦略の数)/World.途上国の数) * 100  //コメント出力("協調先進国," & World.先進国協調戦略の割合 & ",強制先進国," & World.先進国強制戦略の割合) //適応度合計 World.適応度合計 = World.二次元空間.先進国.適応度 + World.二次元空間.途上国.適応度 // コメント出力(",利益先進国," & World.二次元空間.先進国.利益 & ",利益途上国," & World.二次元空間.途上国.利益 &     //          ",妥結ポイント," & World.妥結ポイント & ",協調先進国," & World.先進国協調戦略の割合 &     //          ",強制先進国," & World.先進国強制戦略の割合 & ",協調途上国," & World.途上国協調戦略の割合 &     //          ",連帯途上国," & World.途上国連帯戦略の割合) 結果1 = 範囲乱数((World.先進国の数 - 1), 1) 結果2 = 範囲乱数((World.途上国の数 - 1), 1) 先進国コレクション = _CollectAgent(World.二次元空間.先進国) 先進国id = _GetObject(先進国コレクション,結果1) 途上国コレクション = _CollectAgent(World.二次元空間.途上国) 途上国id = _GetObject(途上国コレクション,結果2) //選択位置の獲得 ichi = World.適応度合計 * Rnd() If World.二次元空間.先進国.適応度 > ichi Then // コメント出力("=== 適応度合計," & World.適応度合計 & ",===," & ichi) // _Debugstr(ichi) //先進国 //個体の性質はランダムに選択された既存のエージェントから引き継がれる obj = _CreateAgent(World.二次元空間.先進国) tmp_協調戦略 = World.二次元空間.先進国.協調戦略(結果1) obj.協調戦略 = tmp_協調戦略  tmp_強制戦略 = World.二次元空間.先進国.強制戦略(結果1) obj.強制戦略 = tmp_強制戦略  tmp_利益 = World.二次元空間.先進国.利益(結果1) obj.利益 = tmp_利益  tmp_トラヒック = World.二次元空間.先進国.トラヒック(結果1) obj.トラヒック = tmp_トラヒック  tmp_幸福度 = World.二次元空間.先進国.幸福度(結果1) obj.幸福度 = tmp_幸福度  tmp_交渉力 = World.二次元空間.先進国.交渉力(結果1) obj.交渉力 = tmp_交渉力  tmp_色 = World.二次元空間.先進国.色(結果1) obj.色 = tmp_色  tmp_利得 = World.二次元空間.先進国.利得(結果1) obj.利得 = tmp_利得  tmp_適応度 = World.二次元空間.先進国.適応度(結果1) obj.適応度 = tmp_適応度  tmp_妥結ポイント = World.二次元空間.先進国.妥結ポイント(結果1) obj.妥結ポイント = tmp_妥結ポイント  _killAgent(World.二次元空間.先進国(結果1)) If 0.1 > Rnd() Then  If obj.協調戦略 == True Then    obj.協調戦略 = False    obj.強制戦略 = True   Else    obj.協調戦略 = True    obj.強制戦略 = False             End If            End If    //途上国 //個体の性質はランダムに選択された既存のエージェントから引き継がれる      Else obj = _CreateAgent(World.二次元空間.途上国) tmp_協調戦略 = World.二次元空間.途上国.協調戦略(結果2) obj.協調戦略 = tmp_協調戦略  tmp_連帯戦略 = World.二次元空間.途上国.連帯戦略(結果2) obj.連帯戦略 = tmp_連帯戦略  tmp_利益 = World.二次元空間.途上国.利益(結果2) obj.利益 = tmp_利益  tmp_トラヒック = World.二次元空間.途上国.トラヒック(結果2) obj.トラヒック = tmp_トラヒック  tmp_幸福度 = World.二次元空間.途上国.幸福度(結果2) obj.幸福度 = tmp_幸福度  tmp_交渉力 = World.二次元空間.途上国.交渉力(結果2) obj.交渉力 = tmp_交渉力  tmp_色 = World.二次元空間.途上国.色(結果2) obj.色 = tmp_色  tmp_利得 = World.二次元空間.途上国.利得(結果2) obj.利得 = tmp_利得  tmp_適応度 = World.二次元空間.途上国.適応度(結果2) obj.適応度 = tmp_適応度  tmp_妥結ポイント = World.二次元空間.途上国.妥結ポイント(結果1) obj.妥結ポイント = tmp_妥結ポイント  _killAgent(World.二次元空間.途上国(結果2)) If 0.1 > Rnd() Then  If obj.協調戦略 == True Then    obj.協調戦略 = False    obj.連帯戦略 = True   Else    obj.協調戦略 = True    obj.連帯戦略 = False             End If            End If  End If } Sub 環境設定(){ //変数定義 Dim i As Integer Dim j As Integer //マップ上のセルを順に呼び出し For i = 0 To (_GetWidthSpace(World.二次元空間) - 1) For j = 0 To (_GetHeightSpace(World.二次元空間) - 1) //マップに環境成長ステップまでの成長度をランダムに割り当てる World.二次元空間.環境成長度(i,j) = Int(Rnd()*World.環境成長ステップ) //成長度をカラーに割り当てる World.二次元空間.環境成長度カラー(i,j) = CDbl(World.二次元空間.環境成長度(i,j)) / CDbl(World.環境成長ステップ) * 99 Next j Next i } Sub 環境成長(){ //変数定義 Dim i As Integer Dim j As Integer Dim 成長度 As Integer //マップ上のセルを順に呼び出し For i = 0 To (_GetWidthSpace(World.二次元空間) - 1) For j = 0 To (_GetHeightSpace(World.二次元空間) - 1) //成長度を一つ上げる 成長度 = World.二次元空間.環境成長度(i,j) + 1 //限界点(成長ステップ)まで成長したら成長度は増えない If 成長度 > World.環境成長ステップ Then 成長度 = World.環境成長ステップ End If If 成長度 == World.環境成長ステップ then World.取得できる環境 = World.取得できる環境 + 1 End If //セルに変数値を代入 World.二次元空間.環境成長度(i,j) = 成長度 //成長度をカラーに割り当てる World.二次元空間.環境成長度カラー(i,j) = CDbl(World.二次元空間.環境成長度(i,j)) / CDbl(World.環境成長ステップ) * 99 Next j Next i } Function 範囲乱数(上限値 As Integer, 下限値 As Integer) As Integer { Dim 乱数 As Integer 乱数 = CInt(Rnd() * ( 上限値 - 下限値 + 1) + 下限値) Return ( 乱数 ) } #end_rule WORLD //------------------ エージェントルール --------------- #begin_rule WORLD.二次元空間.先進国 Agt_Init{ // 特徴づけ:先進国型 My.利益 = Rnd() * 4 + 10 My.トラヒック = Rnd() * 8 + 10 My.体力 = Rnd() * 4 * 10 My.X = Rnd() * _GetWidthSpace(World.二次元空間) My.Y = Rnd() * _GetHeightSpace(World.二次元空間) If Rnd() <= 0.5 Then My.協調戦略 = False My.強制戦略 = True Else My.協調戦略 = True My.強制戦略 = False     End If  } Agt_Step{ //変数定義 Dim col as Collection Dim obj as Object Dim sa as Integer Dim payment as Integer Dim keisan as Double Dim tmp戦略 as Boolean Dim 利得格差 as Integer     //移動(1) Dim vRange as Integer //視野2で最も資源のある場所へ空間を移動 VRange = 2 _MoveToRichValue(My.X,My.Y,vRange,World.二次元空間.環境成長度,False) //環境要素がonだった場合 If World.環境要素 == True then //体力0になったら消滅 //If My.体力 <= 0 then _KillAgent(My) End If //ステップごとに体力を1消費・・・コストがかかる // My.体力 = My.体力 - ( World.二次元空間.環境成長度(My.X, My.Y) / 10 ) //環境が十分であれば利益を得る If World.二次元空間.環境成長度(My.X, My.Y) == World.環境成長ステップ Then My.トラヒック = My.トラヒック + Int(World.二次元空間.環境成長度(My.X, My.Y)) // My.体力 = My.体力 + World.二次元空間.環境成長度(My.X, My.Y) //得た分の環境成長度を0に World.二次元空間.環境成長度(My.X, My.Y) = 0 End If Else //環境要素がoffだった場合・・トラヒックを所与で成長させる My.トラヒック = My.トラヒック + (Rnd()*20) End If //自分の場所にいる途上国を知る(コレクションに納める) col =_CollectAround(My.X, My.Y, 5, World.二次元空間, World.二次元空間.途上国) //途上国の数が0でなかったら精算行為をする If _CountCollection(col) > 0 Then      //精算行為をすることで幸福度があがる My.精算回数 = My.精算回数 + 1 //コレクションの最初の途上国と精算行為をする obj = _Getobject(col, 0) //受信トラヒックの量と発展度は関連性が深い・相手との相対的関係で受信超過は受取の立場 //受信超過を知る 日本からみた途上国>日本 途上国への支払いのケース if obj.トラヒック > My.トラヒック then        //(途上国の受信超過→先進国からみて自分の発信が多いので相手の方が多く受けている状態→自分が支払い)  //トラヒック差をとる sa = obj.トラヒック - My.トラヒック //精算額の確定 payment = Int(sa * ((My.妥結ポイント+obj.妥結ポイント)/2) * 0.5) //先進国の利益収入から精算額を差し引く。途上国の代謝率の半分にトラヒック差をかけたものを足す。 // my.利益 = my.利益 - payment - (payment * world.先進国の代謝率)  // obj.利益 = obj.利益 + payment - (payment * world.途上国の代謝率) // obj.利益 = obj.利益 + payment - (payment * world.途上国の代謝率) //精算相手の利益収入に精算額を足す。先進国の代謝率の半分にトラヒック差をかけたものを足す。 //my.利益 = my.利益 - payment + (sa * 0.5 * (1 - world.先進国の代謝率))  //obj.利益 = obj.利益 + payment + (sa * 0.5 * ( 1 - world.途上国の代謝率)) //精算の実施。自分の利益から精算額を引き、精算相手の利益収入に精算額を足す。 my.利益 = my.利益 - payment   obj.利益 = obj.利益 + payment      //支払いの立場になった先進国は国力を落とす  My.交渉力 = My.交渉力 - 0.001 Else       //受信超過を知る 日本からみた米国<日本 先進国からの受取りのケース         //(先進国の受信超過→相手が多く発信しているので自分が多く受信している状態→自分が受け取り)  //トラヒック差をとる          sa = My.トラヒック - obj.トラヒック //精算額の確定 payment = Int(sa * ((My.妥結ポイント+obj.妥結ポイント)/2) * 0.5) //先進国の利益収入に精算額を足す。途上国の代謝率の半分にトラヒック差をかけたものを足す。 // my.利益 = my.利益 + payment - (payment * world.先進国の代謝率) // obj.利益 = obj.利益 - payment + (payment * world.途上国の代謝率) // obj.利益 = obj.利益 - payment - (payment * world.途上国の代謝率) //精算相手の利益収入から精算額を差し引く。先進国の代謝率の半分にトラヒック差をかけたものを足す。 //my.利益 = my.利益 + payment + (sa * 0.5 * (1 - world.先進国の代謝率)) //obj.利益 = obj.利益 - payment + (sa * 0.5 * ( 1 - world.途上国の代謝率)) //精算の実施。自分の利益に精算額を足し、精算相手の利益収入から精算額を引く。 my.利益 = my.利益 + payment obj.利益 = obj.利益 - payment                  //受け取りの立場になった先進国は国力をあげる  My.交渉力 = My.交渉力 + 0.001 //連帯の相互作用  ***ここから          //相手が連帯していれば戦略を強制戦略に変更。自分の国力を落として、利益を援助する           If World.連帯効果 == True Then           If obj.連帯 == True Then                My.強制戦略 = False                My.協調戦略 = True My.交渉力 = My.交渉力 - 0.01 My.利益 = My.利益 - (sa * World.支援率) obj.利益 = obj.利益 + (sa * World.支援率) //相手は援助されたら連帯を解消する。また戦略を協調戦略に変更する   obj.連帯 = False obj.色 = Color_Yellow obj.交渉力 = obj.交渉力 + 0.01                obj.連帯戦略 = False                obj.協調戦略 = True   End If End If //連帯の相互作用  ***ここまで     End If       //戦略の方針変更 //If World.幸福度合計 < World.old10幸福度合計 Then // If My.強制戦略 == True Then // My.強制戦略 = False // Else // My.強制戦略 = True // End If // If My.協調戦略 == True Then // My.協調戦略 = False // Else // My.協調戦略 = True // End If //End If //戦略の獲得          //相手が連帯戦略 自分が協調戦略       If obj.連帯戦略 == True And My.協調戦略 == True Then          obj.利得 = obj.利得 + 4 My.利得 = My.利得 + 1 My.HB = My.HB + 1 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得 ElseIf obj.連帯戦略 == True And My.協調戦略 == False Then          obj.利得 = obj.利得 + 2 My.利得 = My.利得 + 2 My.HD = My.HD + 3 //My.適応度 = My.適応度 + My.利得 ElseIf obj.連帯戦略 == False And My.協調戦略 == True Then         obj.利得  = obj.利得 + 3         My.利得 = My.利得 + 3 My.HA = My.HA + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得        ElseIf obj.連帯戦略 == False And My.協調戦略 == False Then          obj.利得 = obj.利得 + 1 My.利得 = My.利得 + 5 My.HC = My.HC + 5 //My.適応度 = My.適応度 + My.利得 //相手が協調戦略 自分が協調戦略        ElseIf obj.協調戦略 == True And My.協調戦略 == True Then          obj.利得 = obj.利得 + 3 My.利得 = My.利得 + 3 My.HA = My.HA + 3 My.支援 = My.支援 + 1          //My.適応度 = My.適応度 + My.利得        ElseIf obj.協調戦略 == True And My.協調戦略 == False Then          obj.利得 = obj.利得 + 1 My.利得 = My.利得 + 5 My.HA = My.HC + 5 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得                        ElseIf obj.協調戦略 == False And My.協調戦略 == True Then          obj.利得 = obj.利得 + 4 My.利得 = My.利得 + 1 My.HB = My.HB + 1 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得        ElseIf obj.協調戦略 == False And My.協調戦略 == False Then          obj.利得 = obj.利得 + 2 My.利得 = My.利得 + 2 My.HD = My.HD + 2 //My.適応度 = My.適応度 + My.利得      //相手が連帯戦略 自分が強制戦略        ElseIf obj.連帯戦略 == True And My.強制戦略 == True Then         obj.利得 = obj.利得 + 2 My.利得 = My.利得 + 2 My.HD = My.HD + 2 //My.適応度 = My.適応度 + My.利得 ElseIf obj.連帯戦略 == True And My.強制戦略 == False Then         obj.利得 = obj.利得 + 4 My.利得 = My.利得 + 1 My.HB = My.HB + 1 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得       ElseIf obj.連帯戦略 == False And My.強制戦略 == True Then          obj.利得  = obj.利得 + 1        My.利得 = My.利得 + 5 My.HC = My.HC + 5 //My.適応度 = My.適応度 + My.利得        ElseIf obj.連帯戦略 == True And My.強制戦略 == False Then          obj.利得 = obj.利得 + 4 My.利得 = My.利得 + 1 My.HB = My.HB + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得 //相手が協調戦略 自分が強制戦略        ElseIf obj.協調戦略 == True And My.強制戦略 == True Then          obj.利得 = obj.利得 + 1 My.利得 = My.利得 + 5 My.HC = My.HC + 5 //My.適応度 = My.適応度 + My.利得        ElseIf obj.協調戦略 == True And My.強制戦略 == False Then          obj.利得 = obj.利得 + 3 My.利得 = My.利得 + 3 My.HA = My.HA + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得              ElseIf obj.協調戦略 == False And My.強制戦略 == True Then          obj.利得  = obj.利得 + 2        My.利得 = My.利得 + 2 My.HD = My.HD + 2 //My.適応度 = My.適応度 + My.利得 End If //幸福度の計算 My.幸福度  = My.利得 + My.利益*0.2         //適応度計算 My.適応度 = My.適応度 + ((My.交渉力 * 0.4) + (My.幸福度 * 0.8) / 100)        If obj.協調戦略 == True And My.協調戦略 == True Then          My.利得 = My.利得 + 1  If My.利得 + obj.利得 > 6 Then   My.交渉力 = My.交渉力 + 0.1          Else            If My.利得 + obj.利得 <= 4 Then     My.交渉力 = My.交渉力 - 0.1            End If          End If End If          //更に交渉する keisan = Rnd() * 10 If keisan > (5 + My.交渉力) Then    //先進国の能力が落ちると(途上国が有利となり)空間のルールである計算料金が上がる   My.妥結ポイント = My.妥結ポイント + 0.1   obj.妥結ポイント = obj.妥結ポイント + 0.1 My.強制戦略 = True My.協調戦略 = False      //能力があがると受け取りの立場にいるので(途上国の方が不利となり)空間のルールである計算料金が下がる  Else My.妥結ポイント = My.妥結ポイント - 0.1    obj.妥結ポイント = obj.妥結ポイント - 0.1 My.強制戦略 = False My.協調戦略 = True       End If My.利得 = 0 obj.利得 = 0 If World.連帯効果 == True Then If _CountCollection(col) > 2 Then           obj.連帯戦略 = True  obj = _Getobject(col, 0) obj.連帯 = True obj.色 = Color_Red obj= _Getobject(col, 1) obj.連帯 = True obj.色 = Color_Red End If End If     //  End If     Else         //精算行為をしない My.精算回数 = My.精算回数 - 1 End If // 体力が尽きると消滅   //If My.体力 < 0 Then // _KillAgent(My) //End If } #end_rule WORLD.二次元空間.先進国 //------------------ エージェントルール --------------- #begin_rule WORLD.二次元空間.途上国 Agt_Init{ // 特徴づけ:途上国型 My.利益 = Rnd() * 2 + 10 My.トラヒック = Rnd() * 4 + 10 My.体力 = Rnd() * 3 + 10 My.連帯 = False My.色 = Color_Yellow My.X = Rnd() * _GetWidthSpace(World.二次元空間) My.Y = Rnd() * _GetHeightSpace(World.二次元空間) If Rnd() < 0.5 Then My.協調戦略 = False My.連帯戦略 = True Else My.協調戦略 = True My.連帯戦略 = False     End If  } Agt_Step{ //変数定義 Dim col as Collection Dim obj as Object Dim sa as Integer Dim payment as Integer Dim keisan as Double Dim count as Integer Dim tmp戦略 as Boolean Dim 利得格差 as Integer //移動(1) Dim vRange as Integer //視野1で最も資源のある場所へ空間を移動 VRange = 1 _MoveToRichValue(My.X,My.Y,vRange,World.二次元空間.環境成長度,False) //環境要素がonだった場合 If World.環境要素 == True then //体力0になったら死ぬ // If My.体力 <= 0 then _KillAgent(My) End If //ステップごとに体力を1消費・・・コストがかかる // My.体力 = My.体力 - ( World.二次元空間.環境成長度(My.X, My.Y) / 10 ) // My.体力 = My.体力 - 1 //環境が十分であれば利益を得る If World.二次元空間.環境成長度(My.X, My.Y) == World.環境成長ステップ Then My.トラヒック = My.トラヒック + World.二次元空間.環境成長度(My.X, My.Y)        //    My.体力 = My.体力 + World.二次元空間.環境成長度(My.X, My.Y) //得た分の環境成長度を0に World.二次元空間.環境成長度(My.X, My.Y) = 0 End If Else //環境要素がoffだった場合・・トラヒックを所与で成長させる    My.トラヒック = My.トラヒック + (Rnd()*5) End If //自分の場所にいる先進国を知る(コレクションに納める) col =_CollectAround(My.X, My.Y, 5, World.二次元空間, World.二次元空間.先進国) //先進国の数が0でなかったら精算行為をする If _CountCollection(col) > 0 Then //精算行為をすると幸福度があがる My.精算回数 = My.精算回数 + 1 //コレクションの最初の先進国と精算行為をする obj = _Getobject(col, 0) //受信トラヒックの量と発展度は関連性が深い・相手との相対的関係で受信超過は受取の立場 //受信超過を知る 日本からみた途上国>日本 先進国からの受け取りのケース if obj.トラヒック < My.トラヒック then //(途上国の受信超過→途上国からみて自分の受信が多いので相手の方が多く発信している状態→自分が受け取りの立場)  sa = My.トラヒック - obj.トラヒック payment = Int(sa * ((My.妥結ポイント+obj.妥結ポイント)/2) * 0.5) //obj.利益 = obj.利益 - payment + (payment * world.先進国の代謝率)  //obj.利益 = obj.利益 - payment - (payment * world.先進国の代謝率)  //My.利益 = My.利益 + payment - (payment * world.途上国の代謝率) //obj.利益 = obj.利益 - payment + (sa * 0.5 * (1 - world.先進国の代謝率))  //My.利益 = My.利益 + payment + (sa * 0.5 * ( 1 - world.途上国の代謝率)) obj.利益 = obj.利益 - payment My.利益 = My.利益 + payment          //受け取りの立場になると途上国は国力をあげる  My.交渉力 = My.交渉力 + 0.001 //もし連帯していれば国力は2倍あがる          If World.連帯効果 == True Then          If My.連帯 = True Then             My.交渉力 = My.交渉力 + 0.002            End If           End If  Else          //受信超過を知る 日本からみた米国<日本 先進国からの受取りのケース           //(先進国の受信超過→途上国からみて自分の発信が多く相手が多く受信している状態→自分が支払い)            sa = obj.トラヒック - My.トラヒック payment = Int(sa * ((My.妥結ポイント+obj.妥結ポイント)/2) * 0.5) // obj.利益 = obj.利益 + payment - (payment * world.先進国の代謝率) //My.利益 = My.利益 - payment + (payment * world.途上国の代謝率) //My.利益 = My.利益 - payment - (payment * world.途上国の代謝率) //obj.利益 = obj.利益 + payment + ( sa * 0.5 * ( 1 - world.先進国の代謝率)) //My.利益 = My.利益 - payment + (sa * 0.5 * (1 - world.途上国の代謝率)) obj.利益 = obj.利益 + payment My.利益 = My.利益 - payment          //支払いの立場になると途上国は更に国力をさげる  My.交渉力 = My.交渉力 - 0.001 //もし連帯していれば国力は2倍さがる          If World.連帯効果 == True Then          If My.連帯 == True Then    My.交渉力 = My.交渉力 - 0.002            End If            End If    End If         //戦略の獲得          //相手が連帯戦略 自分が協調戦略       //戦略の方針変更 //If World.幸福度合計 < World.old10幸福度合計 Then // If My.連帯戦略 == True Then // My.連帯戦略 = False // Else // My.連帯戦略 = True     // End If // If My.協調戦略 == True Then // My.協調戦略 = False // Else // My.協調戦略 = True     //End If     //End If          If obj.強制戦略 == True And My.協調戦略 == True Then          obj.利得 = obj.利得 + 5 My.利得 = My.利得 + 1 My.LB = My.LB + 1 //My.適応度 = My.適応度 + My.利得 ElseIf obj.強制戦略 == True And My.協調戦略 == False Then           obj.利得 = obj.利得 + 2 My.利得 = My.利得 + 2 My.LD = My.LD + 2 //My.適応度 = My.適応度 + My.利得 ElseIf obj.強制戦略 == False And My.協調戦略 == True Then           obj.利得  = obj.利得 + 3          My.利得 = My.利得 + 3 My.LA = My.LA + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得          ElseIf obj.強制戦略 == False And My.協調戦略 == False Then           obj.利得 = obj.利得 + 1 My.利得 = My.利得 + 4 My.LC = My.LC + 4 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得 //相手が協調戦略 自分が協調戦略          ElseIf obj.協調戦略 == True And My.協調戦略 == True Then           obj.利得 = obj.利得 + 3 My.利得 = My.利得 + 3 My.LA = My.LA + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得          ElseIf obj.協調戦略 == True And My.協調戦略 == False Then           obj.利得 = obj.利得 + 1 My.利得 = My.利得 + 4 My.LC = My.LC + 4 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得                       ElseIf obj.協調戦略 == False And My.協調戦略 == True Then           obj.利得 = obj.利得 + 5 My.利得 = My.利得 + 1 My.LB = My.LB - 1 //My.適応度 = My.適応度 + My.利得          ElseIf obj.協調戦略 == False And My.協調戦略 == False Then           obj.利得 = obj.利得 + 2 My.利得 = My.利得 + 2 My.LD = My.LD + 2 //My.適応度 = My.適応度 + My.利得          //相手が連帯戦略 自分が強制戦略          ElseIf obj.強制戦略 == True And My.連帯戦略 == True Then           obj.利得 = obj.利得 + 2 My.利得 = My.利得 + 2 My.LD = My.LD + 2 //My.適応度 = My.適応度 + My.利得 ElseIf obj.強制戦略 == True And My.連帯戦略 == False Then           obj.利得 = obj.利得 + 5 My.利得 = My.利得 + 1 My.LB = My.LB + 1 //My.適応度 = My.適応度 + My.利得          ElseIf obj.強制戦略 == False And My.連帯戦略 == True Then           obj.利得  = obj.利得 + 1           My.利得 = My.利得 + 4 My.LC = My.LC + 4 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得         ElseIf obj.強制戦略 == False And My.連帯戦略 == False Then           obj.利得 = obj.利得 + 3 My.利得 = My.利得 + 3 My.LA = My.LA + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得 //相手が協調戦略 自分が強制戦略          ElseIf obj.協調戦略 == True And My.連帯戦略 == True Then           obj.利得 = obj.利得 + 1 My.利得 = My.利得 + 4 My.LC = My.LC + 4 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得          ElseIf obj.協調戦略 == True And My.連帯戦略 == False Then           obj.利得 = obj.利得 + 3 My.利得 = My.利得 + 3 My.LA = My.LA + 3 My.支援 = My.支援 + 1 //My.適応度 = My.適応度 + My.利得              ElseIf obj.協調戦略 == False And My.連帯戦略 == True Then           obj.利得  = obj.利得 + 2           My.利得 = My.利得 + 2 My.LD = My.LD + 2 //My.適応度 = My.適応度 + My.利得 End If //幸福度の計算 My.幸福度  = My.利得*1.6 + My.利益*0.2 //適応度計算 My.適応度 = My.適応度 + (((My.交渉力 * 0.4) + (My.幸福度 * 0.8)) / 100)        If obj.協調戦略 == True And My.協調戦略 == True Then          My.利得 = My.利得 + 1  End If        If obj.協調戦略 == True And My.協調戦略 == True Then          My.利得 = My.利得 + 1  If My.利得 + obj.利得 > 6 Then My.交渉力 = My.交渉力 + 0.1         Else            If My.利得 + obj.利得 <= 4 Then     My.交渉力 = My.交渉力 - 0.1            End If          End If End If  //更に交渉する keisan = Rnd() * 10       If keisan > (5 + My.交渉力) Then //途上国の能力がさがる(先進国が有利となり)空間のルールである計算料金がさがる   My.妥結ポイント = My.妥結ポイント - 0.1   obj.妥結ポイント = obj.妥結ポイント - 0.1          My.連帯戦略 = True           My.協調戦略 = False  // If World.連帯効果 == True Then        //    count = count + 1  //繰り返し妥結ポイントが低下すると途上国同志が連帯する        // If count > 2 Then // My.連帯 = True         // My.色 = Color_Red // count = 0 // End If // End If //能力があがると(先進国の方が不利となり)空間のルールである計算料金があがる Else   My.妥結ポイント = My.妥結ポイント + 0.1   obj.妥結ポイント = obj.妥結ポイント + 0.1           My.連帯戦略 = False           My.協調戦略 = True        End If       //戦略の方針変更     My.利得 = 0     Else      //精算しない My.精算回数 = My.精算回数 - 1 End If   //体力が尽きると消滅 //If My.体力 < 0 Then // _KillAgent(My) //End If } #end_rule WORLD.二次元空間.途上国 //------------------ シミュレーション設定部 --------------- SINGLE_SIMULATION { STEP_MAX = 0; TIME_MAX = 0; END_CONDITION = ""; EXEC_WAIT = 0; EXEC_ORDER = SPECIFY; RANDOM_SEED = 1; LOG_FILE = "C:\ABS\ABS\基本\121004log.abs",SEREIAL_NO,OVERWRITE,0; REPLAY_LOG_FILE = "",SEREIAL_NO,OVERWRITE,0; } //------------------ ループ設定部 --------------- REPEAT_SIMULATION { VALUE_CHANGE = NONE; REPEAT_MAX = 1; VARIABLES = ""; START_VALUE = 0.000000; STEP_VALUE = 1.000000; END_VALUE = 1.000000; EXEC_TIMES_SAME = 1; RANDOM_RANGE = 0.000000, 1.000000; SAME_VALUE = YES; EXEC_TIMES_DIFFERENT = 1; } //------------------ 二次元マップ表示出力設定部 --------------- MAP_OUTPUT { MAP_SPACE_NAME = "WORLD.二次元空間"; MAP_NAME = "国マップ"; TITLE = "二次元空間"; AXIS_LABEL = "", ""; DRAW_RANGE = 0, 0, 49, 49; RULED_LINE = NO; REMARKS = YES; SPACE_KIND = SQUARE_2D; OUTPUT { MAP_ELEMENT_NAME = "環境成長度"; MAP_ELEMENT = SPACE_VARIABLE; OUTPUT_EXPRESSION = "WORLD.二次元空間.環境成長度カラー"; SPACE_DRAW_RANGE = 0.000000, 100.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,128,0; AGENT_COLOR = 0,255,0; MARKER_ID = 2; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "先進国"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.二次元空間.先進国"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,255,0; AGENT_COLOR = 64,0,64; MARKER_ID = 3; MAP_COLOR = 0,0,0; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } OUTPUT { MAP_ELEMENT_NAME = "途上国"; MAP_ELEMENT = AGENT_VARIABLE; OUTPUT_EXPRESSION = "WORLD.二次元空間.途上国"; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,255,255; AGENT_COLOR = "WORLD.二次元空間.途上国.色"; MARKER_ID = 1; MAP_COLOR = 141,105,144; NUM_DISPLAY = NO; NUM_VAR_NAME = ""; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "国数"; TITLE = ""; AXIS_LABEL = "step", ""; SCALE = 0.000000, 0.000000, 0.000000, 0.000000, 50.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国の数"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.先進国の数"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国の数"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.途上国の数"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "トラヒック"; TITLE = "トラヒック"; AXIS_LABEL = "step", ""; SCALE = 0.000000, 0.000000, 0.000000, 1000.000000, 50.000000, 200.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国トラヒック"; LINE_COLOR = 0,0,128; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(WORLD.二次元空間.先進国.トラヒック)/10"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国トラヒック"; LINE_COLOR = 255,0,0; LINE_WIDTH = 3; MARKER_ID = 0; OUTPUT_EXPRESSION = "(WORLD.二次元空間.途上国.トラヒック)/10 "; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "利益"; TITLE = "利益"; AXIS_LABEL = "step", ""; SCALE = 0.000000, -100000.000000, 0.000000, 100000.000000, 50.000000, 10000.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国利益"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(WORLD.二次元空間.先進国.利益)/100"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国利益"; LINE_COLOR = 255,0,255; LINE_WIDTH = 3; MARKER_ID = 0; OUTPUT_EXPRESSION = "(WORLD.二次元空間.途上国.利益)/100 "; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "妥結ポイント推移"; TITLE = "妥結ポイント推移"; AXIS_LABEL = "step", ""; SCALE = 0.000000, 0.000000, 0.000000, 0.000000, 50.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "妥結ポイント"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "WORLD.妥結ポイント"; } OUTPUT { GRAPH_ELEMENT_NAME = "先進国妥結ポイント"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.妥結ポイント"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国妥結ポイント"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.途上国.妥結ポイント"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "幸福度"; TITLE = "幸福度"; AXIS_LABEL = "step", ""; SCALE = 0.000000, -500.000000, 0.000000, 500.000000, 50.000000, 100.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(World.二次元空間.先進国.幸福度)/10000"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(World.二次元空間.途上国.幸福度)/10000 "; } OUTPUT { GRAPH_ELEMENT_NAME = "平均幸福度"; LINE_COLOR = 255,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(World.平均幸福度)/10000"; } OUTPUT { GRAPH_ELEMENT_NAME = "幸福度合計"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.幸福度合計/10000"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "適応度"; TITLE = ""; AXIS_LABEL = "step", ""; SCALE = 0.000000, -5000.000000, 0.000000, 5000.000000, 50.000000, 1000.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国適応度"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(World.二次元空間.先進国.適応度)/100"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国適応度"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "(World.二次元空間.途上国.適応度)/100"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "戦略"; TITLE = ""; AXIS_LABEL = "step", ""; SCALE = 0.000000, 0.000000, 0.000000, 500.000000, 50.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国協調戦略"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.先進国協調戦略の割合"; } OUTPUT { GRAPH_ELEMENT_NAME = "先進国強制戦略"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.先進国強制戦略の割合"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国協調戦略"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.途上国協調戦略の割合"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国連帯戦略"; LINE_COLOR = 255,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.途上国連帯戦略の割合"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "選択された戦略"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "HA"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.HA"; } OUTPUT { GRAPH_ELEMENT_NAME = "HB"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.HB "; } OUTPUT { GRAPH_ELEMENT_NAME = "HC"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.HC "; } OUTPUT { GRAPH_ELEMENT_NAME = "HD"; LINE_COLOR = 255,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.HD "; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "幸福度別グラフ"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "幸福度合計(10step前)"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.old10幸福度合計/10000"; } OUTPUT { GRAPH_ELEMENT_NAME = "幸福度合計"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.幸福度合計/10000"; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "支援"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国支援"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.支援"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国支援"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.途上国.支援 "; } } //------------------ 棒グラフ出力設定部 --------------- BAR_GRAPH { GRAPH_NAME = "戦略の選択"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 1.000000, 200.000000, 0.000000, 100.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国協調戦略"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.先進国協調戦略の数/World.先進国の数 "; } OUTPUT { GRAPH_ELEMENT_NAME = "先進国強制戦略"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.先進国強制戦略の数/World.先進国の数 "; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国協調戦略"; LINE_COLOR = 0,255,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.途上国協調戦略の数/World.途上国の数 "; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国連帯戦略"; LINE_COLOR = 255,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.途上国連帯戦略の数/World.途上国の数 "; } } //------------------ 時系列グラフ出力設定部 --------------- TIME_GRAPH { GRAPH_NAME = "交渉力"; TITLE = ""; AXIS_LABEL = "", ""; SCALE = 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000; REMARKS = YES; OUTPUT { GRAPH_ELEMENT_NAME = "先進国交渉力"; LINE_COLOR = 0,0,255; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.先進国.交渉力"; } OUTPUT { GRAPH_ELEMENT_NAME = "途上国交渉力"; LINE_COLOR = 255,0,0; LINE_WIDTH = 1; MARKER_ID = 0; OUTPUT_EXPRESSION = "World.二次元空間.途上国.交渉力"; } } //------------------ コントロールパネルデータ設定部 --------------- CONTROL_PANEL { PANEL_ITEM { ITEM_NAME = "先進国の数"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.先進国の数; CONTROL_ON = NO; CONTROL_ON_INT = 1; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 300; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "途上国の数"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.途上国の数; CONTROL_ON = NO; CONTROL_ON_INT = 1; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 300; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "環境要素"; ITEM_TYPE = TOGGLE; VAR_NAME = WORLD.環境要素; CONTROL_ON = YES; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 1; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "環境成長ステップ"; ITEM_TYPE = SLIDER; VAR_NAME = WORLD.環境成長ステップ; CONTROL_ON = NO; CONTROL_ON_INT = 1; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 50; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "コメント表示"; ITEM_TYPE = BUTTON; VAR_NAME = WORLD.コメント表示; CONTROL_ON = YES; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 1; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "支援率(%)"; ITEM_TYPE = EDIT_BOX; VAR_NAME = WORLD.支援率; CONTROL_ON = NO; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 1.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 1; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "連帯効果"; ITEM_TYPE = BUTTON; VAR_NAME = WORLD.連帯効果; CONTROL_ON = YES; CONTROL_ON_INT = 0; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 1; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } PANEL_ITEM { ITEM_NAME = "実行ステップ数"; ITEM_TYPE = EDIT_BOX; VAR_NAME = WORLD.実行ステップ数; CONTROL_ON = NO; CONTROL_ON_INT = 1; CONTROL_ON_DOUBLE = 0.000000; CONTROL_ON_STRING = ""; CONTROL_OFF = NO; CONTROL_OFF_INT = 0; CONTROL_OFF_DOUBLE = 0.000000; CONTROL_OFF_STRING = ""; SLIDER_RANGE_MAX = 1; SLIDER_VALUE_MIN = 0.000000; SLIDER_VALUE_STEP = 1.000000; } } //------------------ 説明用HTMLテキスト --------------- #begin_html #end_html //------------------ 空間初期値データ設定部 --------------- SPACE_INITIAL { SPACE_ITEM { COMPO_PATH_NAME = "WORLD.二次元空間.先進国の数"; MARKER_ID = 1; COMPO_KIND = COMPO_VAR; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 0,0,255; SPACE_DRAW_RANGE = 0.000000, 1.000000; SPACE_DISPLAY = 0; } SPACE_ITEM { COMPO_PATH_NAME = "WORLD.二次元空間.途上国の数"; MARKER_ID = 1; COMPO_KIND = COMPO_VAR; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,0,0; SPACE_DRAW_RANGE = 0.000000, 1.000000; SPACE_DISPLAY = 0; } SPACE_ITEM { COMPO_PATH_NAME = "WORLD.二次元空間.先進国"; MARKER_ID = 0; COMPO_KIND = COMPO_AGENT; SPACE_COLOR_MIN = 0,0,255; SPACE_COLOR_MAX = 0,0,0; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_DISPLAY = 0; } SPACE_ITEM { COMPO_PATH_NAME = "WORLD.二次元空間.途上国"; MARKER_ID = 0; COMPO_KIND = COMPO_AGENT; SPACE_COLOR_MIN = 255,0,0; SPACE_COLOR_MAX = 0,0,0; SPACE_DRAW_RANGE = 0.000000, 0.000000; SPACE_DISPLAY = 0; } SPACE_ITEM { COMPO_PATH_NAME = "WORLD.二次元空間.全体の利益"; MARKER_ID = 1; COMPO_KIND = COMPO_VAR; SPACE_COLOR_MIN = 255,255,255; SPACE_COLOR_MAX = 255,255,0; SPACE_DRAW_RANGE = 0.000000, 1.000000; SPACE_DISPLAY = 0; } } //------------------ レポート出力情報設定部 --------------- REPORT_INFO { REPORT_NAME = "C:\ABS\ABS\基本2\absrep.out"; FIELD_DELIMITER = " "; REPORT_ELEMENT { ELEMENT_NAME = "妥結ポイント"; FIGURES = 5; FORMAT_ID = 0; REPORT_EXPRESSION = "WORLD.妥結ポイント"; REPORT_INTERVAL = 1; REPORT_STEP = 0; REPORT_TYPE = 4; } REPORT_ELEMENT { ELEMENT_NAME = "先進国の利益"; FIGURES = 0; FORMAT_ID = 0; REPORT_EXPRESSION = "World.二次元空間.先進国.利益"; REPORT_INTERVAL = 1; REPORT_STEP = 0; REPORT_TYPE = 4; } REPORT_ELEMENT { ELEMENT_NAME = "途上国の利益"; FIGURES = 0; FORMAT_ID = 0; REPORT_EXPRESSION = "World.二次元空間.途上国.利益"; REPORT_INTERVAL = 1; REPORT_STEP = 0; REPORT_TYPE = 4; } } //------------------ その他のデータ設定部 --------------- OTHERS_DATA { INDENT = 1; FONT_NAME = "MS ゴシック"; FONT_WIDTH = 0; FONT_HEIGHT = -13; FONT_WEIGHT = 200; FONT_ITALIC = 0; FONT_CHARSET = 128; WINDOW_HIDE_RUN = 1; } //------------------ 再生用ログデータ ---------------