Group
The concept of a "group" in Brahms is similar to the concept of a template or class in object-oriented programming. A group represents a collection of 'agents' that can perform similar work and have similar beliefs. A group defines the work activities (activity frames and thought frames), the initial-beliefs of members in the group and the initial-facts in the world. The difference with classes in object-oriented programming is that the relationship between a group and its members is not an IS-A relationship, but a MEMBER-OF relationship. This is why we speak of "a member of a group" instead of "an instance of a group."
Functional Roles
In terms of organizations the concept is similar to that of functional roles in an organization. A group in Brahms could represent a typical role in an organization; The work activities that someone performs when he or she plays that role. For example, we could represent the role of Maintenance Technician or Central Office Engineer as a "group".
Structural Groupings
A group in Brahms can also depict an organizational group. For example, we can define a group as "Members of the Work System Design group at S&T." We could now describe the work-activities, and initial-beliefs of members of the WSD group at S&T.
Conceptual Groupings
We can also create informal groups related to conceptual definitions that make sense in the modeling activity. For instance, in modeling the people at S&T we could create a group "People at 400 Westchester Avenue." We can now describe the activities and initial-beliefs that people at 400 Westchester Avenue have in common. This might not be that interesting, but in modeling people's interactions with legacy systems in NYNEX we could define a conceptual group of "LMOS users." In this group we could now describe how people interact with LMOS, and what initial-beliefs LMOS users have (for instance, the initial-belief that LMOS has data about today's trouble tickets).
Syntax
group | ::= | group group-name { group-membership } |
group-name | ::= | ID.name |
group-membership | ::= | memberof group-name, group-name ]* |
attributes | ::= | attributes: [ ATT.attribute ]* |
relations | ::= | relations: [ REL.relation ]* |
initial-beliefs | ::= | initial_beliefs: [ BEL.initial-belief ]* |
initial-facts | ::= | initial_facts: [ FCT.initial-fact ]* |
activities | ::= | activities: [ activity ]* |
activity | ::= | [ CAC.composite-activity | |
workframes | ::= | workframes: [ WFR.workframe ]* |
thoughtframes | ::= | thoughtframes: [ TFR.thoughtframe ]* |
Semantics
Group membership
In a model a hierarchy of groups can be built by defining the group-membership. A group can be a member of more then one group. When a group is a member of a group the member-group will 'inherit' the attributes, relations, initial-beliefs, initial-facts, activities, workframes and thoughtframes from its parent groups. Private attributes and relations are not inherited, only public and protected attributes and relations are inherited. In case the same constructs are encountered in the inheritance path always the most specific construct will be used, meaning that a workframe defined for a group lowest in the hierarchy tree has precedence over a workframe with the same name higher in the hierarchy.
Cost and time-unit
The cost and time-unit are used for statistical purposes and define the cost/time-unit (in seconds) for work done by members of the group. The members of the group can override the cost and time-unit figures.
Example
group Student memberof SystemGroup
Defaults
Every group in a model is by definition a member of 'BaseGroup' defined in the 'BaseModel' library which is imported by definition for every model. The 'BaseGroup' defines built-in attributes, relations, initial-beliefs, initial-facts, workframes and thoughtframes as defaults for groups. The 'BaseGroup' membership does not have to be defined explicitly. Other defaults are:
- display = <group-name>
- cost = 0
- time_unit = 0
Constraints
- The name of a group must be unique amongst all concepts in a model
- The time_unit defines the time in seconds
Agent
An agent in Brahms is the most central construct in a Brahms model. An agent represents an interactive system, a subject with behavior interacting with the world. An agent can for example represent a person in an organization, but could also represent an animal in a forest. A Brahms model is always about the activities of agents in a work process. In Brahms it is also possible to implement the behavior of an agent in Java instead of in the Brahms language. This is done by defining an external agent. An external agent can interact with the Brahms agents and Brahms agents can interact with external agents. External agents do not have any reasoning capabilities unless these capabilities are built-in by the implementer of the external agent.
Syntax
agent | ::= | agent group-name { GRP.group-membership } |
externalagent | ::= | external agent: agent-name |
agent-name | ::= | ID.name |
Semantics
Group membership
An agent can be a member of one or more groups. When an agent is a member of a group the agent will 'inherit' attributes, relations, initial-beliefs, initial-facts, activities, workframes and thoughtframes from the group(s) it is a member of. All attributes and relations are inherited including private ones (an agent can be seen as an instance of a group in terms of object oriented practices). In case the same constructs are encountered in the inheritance path always the most specific construct will be used, meaning that a workframe defined for the agent has precedence over a workframe with the same name defined in one of the groups of which the agent is a member.
Defaults
Every agent in a model is by definition a member of 'BaseGroup' defined in the 'BaseModel' library which is imported by definition for every model. The 'BaseGroup' defines built-in attributes, relations, initial-beliefs, initial-facts, activities, workframes and thoughtframes as defaults for agents and groups. The 'BaseGroup' membership does not have to be defined explicitly. Other defaults are:
- display = <agent-name>
- cost = 0
- time_unit = 0
- location = none
Example
agent Alex_Agent memberof Student
external agent SimulationManagerAgent
Constraints
- The name of an agent must be unique amongst all concepts in a model
- The time_unit defines the time in seconds
- The Java class name of an external agent must be identical to Brahms external agent's name as defined in the Brahms model. Both Java class and Brahms external agent must also be defined with the same package name.
Class
The concept of a 'class' in Brahms is similar to the concept of a template or class in object-oriented programming. It defines the activities (workframes), initial-facts and initial-beliefs for instances of that class (i.e. 'objects'). Classes are used to define inanimate artifacts, such as phones, faxes, computer systems, pieces of paper, etc.
Syntax
class | ::= | class class-name { class-inheritance } |
class-name | ::= | ID.name |
class-inheritance | ::= | extends class-name [, class-name ]* |
Semantics
Class inheritance
In a model a hierarchy of classes can be built by defining the class inheritance. A class can inherit from more then one class, so multiple inheritance is supported. When a class is a subclass of a class the subclass will inherit the attributes, relations, initial-beliefs, initial-facts, activities, workframes and thoughtframes from its parent classes. Private attributes and relations are not inherited, only public and protected attributes and relations are inherited. In case the same constructs are encountered in the inheritance path always the most specific construct will be used, meaning that for example a workframe defined for a class lowest in the hierarchy tree has precedence over a workframe with the same name higher in the hierarchy.
Cost and time-unit
The cost and time-unit are used for statistical purposes and define the cost/time-unit (in seconds) for work done by instances of the class. The instances of the class can override the cost and time-unit figures.
Resource
The resource attribute defines whether or not instances of the class are considered to be a resource when used in an activity (resource attribute is set to true) or whether the instances of the class are considered something that is worked on (resource attribute is set to false). The resource attribute is used in relation with the touched-objects definition for activities (see the semantical description of touched-objects in the definition of the primitive-activity).
Example
class MyClock extends CalendarUtilClass
Defaults
Every class in a model is by definition a member of 'BaseClass' defined in the 'BaseModel' library which is imported by definition for every model. The 'BaseClass' defines built-in attributes, relations, initial-beliefs, initial-facts, activities, workframes and thoughtframes as defaults for classes. The 'BaseClass' membership does not have to be defined explicitly. Other defaults are:
- display = <class-name>
- cost = 0
- time_unit = 0
- resource = false
Constraints
- The name of a class must be unique amongst all concepts in a model
- The time_unit defines the time in seconds
Object
An 'object' in Brahms is the second most central element in a Brahms model. An object represents a specific artifact in the world. It is possible to model the activities of an artifact in an organization. For example the data processing activities of a computer system can be modeled. The activities can be defined in the object's class (which will be inherited by the object) and/or can be defined for the object itself.
Syntax
object | ::= | object object-name |
object-name | ::= | ID.name |
Semantics
Conceptual object membership
An object can be part of one or more conceptual objects by defining the conceptual-object-membership for the object. This allows for later grouping of statistical results for the object with other objects in one conceptual object.
Resource
The resource attribute defines whether or not the object is considered to be a resource when used in an activity (resource attribute is set to true) or whether the object is considered something that is worked on (resource attribute is set to false). The resource attribute is used in relation with the resources definition for activities (see the semantical description of resources in the definition of the primitive-activity).
Example
object Campanile_Clock instanceof MyClock
Defaults
- display = <object-name>
- cost = 0
- time_unit = 0
- resource = false
- location = none
Constraints
- The name of an object must be unique amongst all concepts in a model. It is possible to give an object the same name as an object defined in a library.
- The time_unit defines the time in seconds
Conceptual Class
A conceptual class defines a type of conceptual objects used in a model. For the definition and usage of conceptual objects see the section on conceptual objects.
Syntax
conceptual-class | ::= | conceptual class conceptual-class-name { conceptual-class-inheritance }
{ |
conceptual-class-name | ::= | ID.name |
conceptual-class-inheritance | ::= | extends conceptual-class-name [, conceptual-class-name ]* |
Semantics
Conceptual class inheritance
In a model a hierarchy of conceptual classes can be built by defining the conceptual class inheritance. A conceptual class can inherit from more then one conceptual class, so multiple inheritance is supported. When a conceptual class is a subclass of a conceptual class the subclass will inherit the attributes and relations from its parent conceptual classes. Private attributes and relations are not inherited, only public and protected attributes and relations are inherited. In case the same constructs are encountered in the inheritance path always the most specific construct will be used, meaning that for example an attribute defined for a class lowest in the hierarchy tree has precedence over an attribute with the same name higher in the hierarchy.
Example
conceptual_class Order extends BaseConceptualClass
Defaults
- display = <conceptual-class-name>
Constraints
- The name of an object must be unique amongst all concepts in a model.
Conceptual Object
Syntax
conceptual-object | ::= | conceptual-object conceptual-object-name |
conceptual-object-name | ::= | ID.name |
conceptual-object-membership | ::= | partof conceptual-object-name [, conceptual-object-name ]* |
Semantics
Conceptual object membership
A conceptual-object can in itself be a member of other conceptual object forming a hierarchy of concepts for grouping statistical results.
Example
conceptual_object Diner_Order instanceof Order
conceptual_object Lunch_Order instanceof Order partof Diner_Order
Defaults
- display = <conceptual-object-name>
Constraints
- The name of a conceptual-object must be unique amongst all concepts in a model.
Area Definition
An area definition is used for defining area constructs used for representing geographical information in a model. Area definitions are similar to classes in their use. Examples of area definitions are 'World', 'Building', and 'Floor'.
Syntax
areadef | ::= | areadef areadef-name { areadef-inheritance } |
areadef-name | ::= | ID.name |
areadef-inheritance | ::= | extends areadef-name [, areadef-name ]* |
Semantics
Area definition inheritance
In a model a hierarchy of area definitions can be built by defining the area definitions inheritance. An area definition can inherit from more then one area definition, so multiple inheritance is supported. When an area definition is a subclass of another area definition the subclass will 'inherit' the attributes, relations, and initial-facts from its parent area definitions. Private attributes and relations are not inherited, only public and protected attributes and relations are inherited. In case the same constructs are encountered in the inheritance path always the most specific construct will be used, meaning that for example an attribute defined for an area definition lowest in the hierarchy tree has precedence over an attribute with the same name higher in the hierarchy.
Example
areadef University extends BaseAreaDef
Defaults
- display = <area-def-name>
Constraints
- The name of an object must be unique amongst all concepts in a model.
Area
An area represents a geographical location and is used to create a geographical representation for use in the model. Examples are 'NewYorkCity', 'SandTBuilding', etc. Areas are instances of area definitions.
Syntax
area | ::= | area area-name |
area-name | ::= | ID.name |
Semantics
Area decomposition
Areas can be decomposed into sub-areas. For example a building can consist of one or more floors. The decomposition can be modeled using the part-of relationship. Model builders have indicated that they frequently want to reason about the area decomposition in their models. The virtual machine therefore generates a set of initial facts about the decomposition of the areas in a model. The virtual machine generates initial facts using the built-in relations 'isSubAreaOf' and 'hasSubArea' defined in the BaseAreaDef area definition. For each area an initial fact is generated about its aggregate area using the 'isSubAreaOf' relation, only one initial fact can be generated since an area can only be part of one other area. For each area we also generate an initial fact for every sub area of the area using the 'hasSubArea' relation. Agents can detect any of these facts as needed by these agents. Note that the virtual machine only generates the initial facts for the direct relation between areas and sub-areas and not the indirect relations. If area A1 has a sub-area B1 and B1 has a sub-area C1 then we only generate the initial facts relating A1 to B1 and B1 to C1 but we do not generate the initial facts relating A1 to C1. This relationship would have to be deduced by modeling preconditions and asserting beliefs of Brahms agents by model builders.
Example
area Berkeley instanceof City
area UCB instanceof University partof Berkeley
Defaults
- display = <area-name>
Constraints
- The name of a conceptual-object must be unique amongst all concepts in a model. -->
Path
A path connects two areas together and represents a route that can be taken by an agent or object to travel from one area to another. For the path is specified how long it takes to travel from one area to the other.
Syntax
path | ::= | path path-name |
path-name | ::= | ID.name |
Semantics
Distance
The distance represents the time it takes to move from area1 to area2 and vice versa. In future versions of the language the distance will represent the actual distance and based on the transportation used to travel over the path the duration will be calculated.
Example
path SpH_to_from_BOA {
area1: SproulHall;
area2: Telegraph_Av_113;
distance: 240;
}
Defaults
- display = <path-name>
- distance = 0
Constraints
- The name of a path must be unique amongst all concepts in a model.
- The distance represents the travel duration in seconds -->