Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
The Cultural Dimensions Simulation models group shaping processes between individuals of same or different cultural contexts. The model is based on selected Cultural Dimensions empirically elaborated by Geert Hofstede. This simulation particularly uses the Cultural Dimensions Individualism, Power Distance and Uncertainty Avoidance.
The conceptual background and details of the simulation scenario and the results are described here, in particular Chapter 6.
The simulation implementation is based on the µ² platform and uses Clojure as agent (respectively role) implementation language, particularly in the file CulturalIndividual.clj (located in the cljScripts/appCljScripts folder of the download). The setup and use of this software is described in the following sections.
Necessary software to run it:
Setup instructions for µ² are provided under Getting started.
Simulation setup and use
Steps for installation of Cultural Dimensions Simulation distribution are described here. The distribution comes with a README.txt file describing those steps (similar to the ones below), a 'microapps' folder which holds the initialization-related code as well as a 'cljScripts' folder which holds the necessary Clojure scripts (the actual implementation) in the according structure.
Set up µ² as described under Getting started.
Copy the 'cljScripts' folder (from the Cultural Dimensions download) over the 'cljScripts' folder in the Eclipse project set up in step 1 (as part of the platform setup), or manually copy the according scripts (e.g. 'CulturalIndividual.clj' from 'appCljScripts' folder) manually into the according target folder (e.g. /cljScripts/appCljScripts).
Copy the 'microapps' folder provided with the distribution into the 'src' folder of the Eclipse project (i.e. the 'microapps' folder as a subfolder of the 'src' folder, not just into the project folder).
Download incanter.jar, copy it into the 'lib' directory of the Eclipse project and include it in the classpath. To do this right-clicking on the project, select 'Build Path' --> 'Configure Build Path...' --> 'Add JARs...' and point to the downloaded incanter.jar file. Then select OK.
Refresh your project view (either by right-clicking on the the project and click on "Refresh" or pressing F5). It should look similar to the following figure (In this figure some folders are expanded to show the Main.java file and relevant Clojure files (e.g. CulturalIndividual.clj) which are referred to in later steps.).
- As the simulation, depending on parameterization, may consume extensive amounts of memory, the application should be run with additional JVM options which allow the use of more memory. To do this, right-click on the Main.java file (which is the main file to run the simulation), select 'Run As' and then 'Run Configurations...'. Right-click on 'Java Application' and select 'New' to create a new launch configuration for Main.java. Then click on the new configuration (a leaf node called 'Main' should be displayed under 'Java Application') and select the 'Arguments' widget. Add
-XX:+UseConcMarkSweepGC -Xmx1088M -XX:MaxPermSize=448M
to the 'VM arguments' section. Click 'Apply' (to ensure this setup is saved) and 'Run' to run the application with this configuration. Running the configuration should save the parameters (without click on 'Apply') for future runs.
The screenshot below shows this parameter setup.
- For repeated runs simply right-click on the Main.java file, select 'Run As' and 'Java Application' in the context menu. In case of OutOfMemory errors (shown in the Eclipse console window) double-check the settings undertaken in step 5. Parameterization for the application is done in Main.java (for general group definitions) and CulturalIndividual.clj (for weights of cultural dimensions and rejections).
For parameterization please review the Main.java file which shows potential parameterization in a self-explanatory manner. Per default the initialized simulation runs for 300 rounds. After this the user can interact with the application with the Clojure REPL using any Clojure command (such as (ns ) to introspect individual agents' states. Along with this the simulation comes with further commands.
Please note that following simulation-related commands (not Individual-related) only work in the default user namespace (i.e. if introspecting an agent you need to navigate back to the user namespace (using '(ns user)') to use those):
- (step ) -- This command runs the simulation for a specified number of rounds. If the number of rounds is not provided, it steps for one round.
The following figure shows the use of the (step) command as example for the REPL interaction.
- (write-stats ) -- This command writes the collected data to an outfile in a CSV-like manner for further analysis with the KNIME Analysis stream (described later). Default file name is 'defaultOutFile.txt' if no file name is provided. However, user can define own names by using (write-stats ""). The files will reside at the root level of the Eclipse project. Ensure to refresh the project view in Eclipse if you want to see them in Eclipse.
The following figure shows an example for the (write-stats) command.
- (print-history <min. group size> ) -- Prints a histogram for group sizes for reported rounds by group leader. The parameter <min. group size> indicates the minimum size of groups to be shown in the histogram (to filter low group sizes from view) and the choice to print a (space-consuming) legend with the boolean parameter (which thus can be either true or false; true is default).
An example for the command (print-history 2 false) is shown below.
- (view-avg-table) -- This command shows some mean values per emerged groups. As of the size and minor relevance of this command (as of the more expressive post-processing stream) an example output is omitted at this point.
For further simulation-specific commands please review the file stats.clj, located under cljScripts/indivCljScripts. Commands available within Cultural Individuals can be explored using the CulturalIndividual.clj script, located under cljScripts/appCljScripts.
The following figure exemplifies the potential direct introspection of individual agents at runtime via Clojure REPL.
Fine-grained parameterization for simulation runs can be undertaken in the latter file (CulturalDimensions.clj), e.g. the weights for the cultural dimensions or scales for cultural dimensions (now ranging between -5 and 5). The file provides according comments for eventual parameters.
The evaluation of the output data is done using the Konstanz Information Miner (KNIME) (Version 2.2.2).
After downloading please ensure to additionally install the 'Math Expression Extension' (using --> Help --> Software Updates ... -> Branch 'KNIME & Extensions'). Unfortunately this is not provided with the default version, however, the stream makes extensive use of 'Math Formula' nodes in the stream. Opening the stream without the extension installed will result in various error messages. A similar problem can occur when using an older version of KNIME than the one used for developing the stream. Ensure to use at least version 2.2.2.
For further information on the use of KNIME in general please refer to the Examples and Screencasts provided under http://www.knime.org/knime.
The KNIME workflow (CulturalGroups) can be found here. Just download and import it via KNIME (to a workspace of your choice) (using --> File --> Import KNIME workflow). An actual simulation result data set (compressed as zip file) can be found here (Parameters: Weight for cultural dimensions: UAI: 1.5; PDI: 1; IDV: 1; Weight for Rejections: 0.1).
To use data files, open the 'File Reader' node, located on the top left of the stream (see figure below), point those to the data file produced by the simulation (using the command (write-stats) as described before) and simply execute the whole stream (using the fast-forward button in the top menu of KNIME). All nodes should then contain updated data. The relevant statistics used for further interpretation can generally be found in the final nodes of the stream (the 'Interactive Table' nodes to the lower right and the 'GroupBy' nodes in the lower mid left).