//====================================================================/ // / // KK-Multi Agent Simulator for Java / // / //====================================================================/ Version = 1.0; //------------------------------------------------------- // Component Tree //------------------------------------------------------- UNIVERSE { Space ie(0,0),Square_2D(50, 50, Loop, North, 1){ AgtType jerry(0, 0)[1] { Dim X(0, 0) As Double = (0.0); Dim Y(0, 0) As Double = (0.0); Dim Layer(0, 0) As Integer = (0); Dim Direction(0, 0) As Double = (0.0); } AgtType tom(0, 0)[1] { Dim X(0, 0) As Double = (0.0); Dim Y(0, 0) As Double = (0.0); Dim Layer(0, 0) As Integer = (0); Dim Direction(0, 0) As Double = (0.0); } } } //------------------------------------------------------- // Agent Variable Initial Data //------------------------------------------------------- Initial_Value { } //------------------------------------------------------- // Agent Rule //------------------------------------------------------- #begin_rule UNIVERSE Univ_Init{ } Univ_Step_Begin{ } Univ_Step_End{ } Univ_Finish{ } #end_rule UNIVERSE //------------------------------------------------------- // Agent Rule //------------------------------------------------------- #begin_rule UNIVERSE.IE.JERRY Agt_Init{ my.Direction = rnd()*360 } Agt_Step{ forward(1) } #end_rule UNIVERSE.IE.JERRY //------------------------------------------------------- // Agent Rule //------------------------------------------------------- #begin_rule UNIVERSE.IE.TOM Agt_Init{ } Agt_Step{ dim a as double dim b as double dim set as agtset dim obj as agt makeagtset(set, universe.ie.jerry) //if countagtset(set) > 0 then // obj = getagt(set,0) // my.Direction = getdirection(obj.x, obj.y) //end if if countagtset(set) > 0 then for each obj in set my.Direction = getdirection(obj.x, obj.y) next obj end if forward(1) } // **目標への絶対角度を返す。** // 引数 // 目標のX座標、目標のY座標 Function getdirection(targetx As Double, targety as double) As Double { Dim targetDirection As Double If (My.X < targetx) AND (targety < My.Y) Then targetDirection = 360 - RadToDegree(Atn((my.Y - targety)/(targetx - my.X))) End If If (My.X == targetx) AND (targety < My.Y) Then targetDirection = 270 End If If (targetx < My.X) AND (targety < My.Y) Then targetDirection = 180 + RadToDegree(Atn((my.Y - targety )/(my.X - targetx))) End If If (targetx < My.X) AND (targety == My.Y) Then targetDirection = 180 End If If (targetx < My.X) AND (My.Y < targety ) Then targetDirection = 180 - RadToDegree(Atn((targety - my.Y)/(my.X - targetx))) End If If (targetx == My.X) AND (My.Y < targety ) Then targetDirection = 90 End If If (My.X < targetx) AND (My.Y < targety ) Then targetDirection = RadToDegree(Atn((targety - my.Y)/(targetx - my.X))) End If If (My.X < targetx) AND (My.Y == targety) Then targetDirection = 0 End If Return(targetDirection ) } #end_rule UNIVERSE.IE.TOM //------------------------------------------------------- // Simulation Definition Division //------------------------------------------------------- Single_Simulation { Step_Max = 0; Time_Max = 0; End_Condition = ""; Exec_Wait = 0; Exec_Order = Component; Exec_Order_Random_First_Step_Only = No; Random_Seed = 0; Log_File = "", Fixed, Append, 0; Replay_Log_File = "", Fixed, Append, 0; Redraw_Timing = Step; Redraw_Interval = 1; Garbage_Interval = 10; } //------------------------------------------------------- // Simulation Loop Definition Division //------------------------------------------------------- Repeat_Simulation { Value_Change = None; Repeat_Max = 1; } //------------------------------------------------------- // Executing Order By Agent Component Definition Division //------------------------------------------------------- Executing_Order_Component { Component_Priority = "UNIVERSE.ie.jerry", 1; Component_Priority = "UNIVERSE.ie.tom", 2; } //------------------------------------------------------- // 2 Dimension Map Display Definition Division //------------------------------------------------------- Map_Output { Map_Space_Name = "Universe.ie"; Map_Name = "ie"; Font_Name = "Dialog"; Font_Char_Set = 81; Font_Size = 12.0; Font_Style = 0; Font_Color = 0, 0, 0; Font_Background_Color = 255, 255, 255; Title = ""; Axis_Label = "", ""; Draw_Range = 0, 0, 50, 50; Ruled_Line = No; Remarks = Yes; Legend_Pos = Top; Background_Color = 0, 0, 0; Background_Transparent = No; Target_Layer = 0; Coordinate_Display = No; Space_Kind = Square_2D; BG_Pict = No; BG_Type = 0; BG_Var_Name = ""; BG_File_Name = ""; Disable = No; Position_x = 253; Position_y = 2; Size_x = 500; Size_y = 300; Origin_Position = 2; Output { Map_Element_Name = "jerry"; Map_Element = Agent_Variable; Output_Expression = "UNIVERSE.ie.jerry"; Draw_Line = No; Collection_Name = ""; Line_Type = 0; Line_Arrow = 0; Line_Width = 0; Line_Color = 0, 0, 0; Agent_Color = 153,102,0; Marker_Id = 1; Icon_Type = 0; Icon_Var_Name = ""; Icon_Transparent = No; Icon_Enlarg_Reduce = No; Icon_File_Name = ""; Num_Display = No; Num_Var_Name = ""; } Output { Map_Element_Name = "tom"; Map_Element = Agent_Variable; Output_Expression = "UNIVERSE.ie.tom"; Draw_Line = No; Collection_Name = ""; Line_Type = 0; Line_Arrow = 0; Line_Width = 0; Line_Color = 0, 0, 0; Agent_Color = 51,51,255; Marker_Id = 1; Icon_Type = 0; Icon_Var_Name = ""; Icon_Transparent = No; Icon_Enlarg_Reduce = No; Icon_File_Name = ""; Num_Display = No; Num_Var_Name = ""; } } //------------------------------------------------------- // Control Panel Definition Division //------------------------------------------------------- Control_Panel { Display_Area = 0, 0, 100, 100; } //------------------------------------------------------- // Space Initial Value Definition Divsion //------------------------------------------------------- Space_Initial { } //------------------------------------------------------- // Other Miscellaneous Data Definition Division //------------------------------------------------------- Others_Data { Indent = 4; Rule_Colored = Yes; Font_Name = "Dialog"; Font_Char_Set = 0; Font_Size = 12.0; Font_Style = 0; Font_Color = 0, 0, 0; Font_Background_Color = 0, 0, 0; Window_Hide_Run = 1; Debug_Position_x = 75; Debug_Position_y = 75; Debug_Size_x = 400; Debug_Size_y = 200; Console_Position_x = 2; Console_Position_y = 400; Console_Size_x = 600; Console_Size_y = 120; }