value SituatedAgent is abstraction () { //external interfaces Sense_Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]]; Sense_Result : Connection[any]; Act : Connection[view[agent_id : String, action_name : String, action_params : sequence[String]]]; Send_Receive : Connection[view[ID : Integer, sender : String, receiver : String, performative : String, content : String]]; //exchanged data sense_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]; sense_result : any; action : view[agent_id : String, action_name : String, action_params : sequence[String]]; message_in : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; message_out : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; knowledge_item : view[name : String, val : any]; knowledge_items : sequence[view[name : String, val : any]]; //connections among the components C_Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]]; C_Read_Write : Connection[view[name : String, val : any]]; C_Update : Connection[sequence[view[name : String, val : any]]]; //component composition compose { via Perception send Void where { C_Request renames Request, C_Read_Write renames Read_Write, C_Update renames Update, Sense_Request renames Sense_Request, Sense_Result renames Sense_Result}; and via CurrentKnowledge send Void where { C_Read_Write renames Read_Write, C_Update renames Update}; and via DecisionMaking send Void where { C_Request renames Request, C_Read_Write renames Read_Write, Act renames Act}; and via Communication send Void where { C_Request renames Request, C_Read_Write renames Read_Write, Send_Receive renames Send_Receive}; } } value Perception is abstraction () { Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]]; Sense_Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]]; Sense_Result : Connection[any]; Read_Write : Connection[view[name : String, val : any]]; Update : Connection[sequence[view[name : String, val : any]]]; perception_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]; sense_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]]]; representation : any; knowledge_items : sequence[view[name : String, val : any]]; choose { //perception request via Request receive perception_request; unobservable; via Sense_Request send sense_request; or //knowledge update via Sense_Result receive representation; unobservable; via Update send knowledge_items; } } value CurrentKnowledge is abstraction () { Read_Write : Connection[view[name : String, val : any]]; Update : Connection[sequence[view[name : String, val : any]]]; read_request : view[name : String, val : any]; read_item : view[name : String, val : any]; write_item : view[name : String, val : any]; update_items : sequence[view[name : String, val : any]]; replicate { choose { //read item via Read_Write receive read_request; unobservable; via Read_Write send read_item; or //write item via Read_Write receive write_item; unobservable; or //update items via Update receive update_items; unobservable; } } } value DecisionMaking is abstraction () { Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]]; Read_Write : Connection[view[name : String, val : any]]; Act : Connection[view[agent_id : String, action_name : String, action_params : sequence[String]]]; perception_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]; knowledge_item : view[name : String, val : any]; action : view[agent_id : String, action_name : String, action_params : sequence[String]]; replicate { unobservable; via Act send action; } } value Communication is abstraction () { Request : Connection[view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]]; Read_Write : Connection[view[name : String, val : any]]; Send_Receive : Connection[view[ID : Integer, sender : String, receiver : String, performative : String, content : String]]; perception_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]; knowledge_item : view[name : String, val : any]; message_in : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; message_out : view[ID : Integer, sender : String, receiver : String, performative : String, content : String]; perception_request : view[agent_id : String, foci : sequence[view[focus_name : String, focus_params : sequence[String]]], filters : sequence[view[name : String, val_min : any, val_max : any]]]; knowledge_item : view[name : String, val : any]; action : view[agent_id : String, action_name : String, action_params : sequence[String]]; replicate { choose { unobservable; via Send_Receive receive message_in; unobservable; or unobservable; via Send_Receive send message_out; unobservable; } } }