8 Commits

Author SHA1 Message Date
James P. Howard, II
016841ab88 docs(joss-paper): that comma... 2023-01-23 20:36:18 -05:00
James P. Howard, II
1c5ee2ae87 docs(joss-paper): Corrections to my name 2023-01-23 20:31:12 -05:00
James P. Howard, II
f8c0324672 docs(joss-paper): Remove unnecessary citations 2023-01-23 20:27:28 -05:00
James P. Howard, II
0c321c5918 docs(joss-paper): Fix AL tag 2023-01-23 20:17:51 -05:00
James P. Howard, II
67715a00b4 docs(joss-paper): Reformat YAML file 2023-01-23 20:15:18 -05:00
James P. Howard, II
dc167559e2 docs(joss-paper): Add a name to the PDF builder 2023-01-23 20:03:48 -05:00
James P. Howard, II
846eeb0146 docs(joss-paper): automatic reformatting 2023-01-23 20:01:11 -05:00
James P. Howard, II
ede2d067c8 docs(joss-paper): First draft 2023-01-23 19:52:14 -05:00
3 changed files with 114 additions and 0 deletions

25
.github/workflows/draft-pdf.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
name: Build Paper PDF
on: [ push ]
jobs:
paper:
runs-on: ubuntu-latest
name: Paper Draft
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build draft PDF
uses: openjournals/openjournals-draft-action@master
with:
journal: joss
# This should be the path to the paper within your repo.
paper-path: paper/paper.md
- name: Upload
uses: actions/upload-artifact@v1
with:
name: paper
# This is the output path where Pandoc will write the compiled
# PDF. Note, this should be the same directory as the input
# paper.md
path: paper/paper.pdf

12
paper/paper.bib Normal file
View File

@@ -0,0 +1,12 @@
@InProceedings{python-mesa-2020,
author = "Kazil, Jackie and Masad, David and Crooks, Andrew",
editor = "Thomson, Robert and Bisgin, Halil and Dancy, Christopher and Hyder, Ayaz and Hussain, Muhammad",
title = "Utilizing Python for Agent-Based Modeling: The Mesa Framework",
booktitle = "Social, Cultural, and Behavioral Modeling",
year = "2020",
publisher = "Springer International Publishing",
address = "Cham",
pages = "308--317",
abstract = "Mesa is an agent-based modeling framework written in Python. Originally started in 2013, it was created to be the go-to tool in for researchers wishing to build agent-based models with Python. Within this paper we present Mesa's design goals, along with its underlying architecture. This includes its core components: 1) the model (Model, Agent, Schedule, and Space), 2) analysis (Data Collector and Batch Runner) and the visualization (Visualization Server and Visualization Browser Page). We then discuss how agent-based models can be created in Mesa. This is followed by a discussion of applications and extensions by other researchers to demonstrate how Mesa design is decoupled and extensible and thus creating the opportunity for a larger decentralized ecosystem of packages that people can share and reuse for their own needs. Finally, the paper concludes with a summary and discussion of future development areas for Mesa.",
isbn = "978-3-030-61255-9"
}

77
paper/paper.md Normal file
View File

@@ -0,0 +1,77 @@
---
title: 'Kami is Agent-Based Modeling in Modern C++'
tags:
- C++
- agent-based model
- individual-based model
- social science
- simulation
- complex systems theory
- artificial life
authors:
- name: "James P. Howard II"
orcid: 0000-0003-4530-1547
affiliation: 1
affiliations:
- name: Johns Hopkins Applied Physics Laboratory, USA
index: 1
date: 23 January 2023
bibliography: paper.bib
---
# Summary
Agent-based models (ABMs) are a type of computational model used
to simulate the behavior of autonomous agents within a system. These
agents can be individuals, groups, organizations, or other entities
that interact with one another and with their environment. One of
the key features of ABMs is that they focus on the micro-level
interactions between individual agents, rather than aggregating
data to study macro-level phenomena. This allows for the examination
of complex behaviors that emerge from the interactions between
agents, such as the spread of a disease or the formation of social
networks. ABMs are often used in fields such as economics, sociology,
and biology to study the behavior of individuals and groups. They
can also be used to simulate the effects of different policies or
interventions on a system.
# Statement of need
There are many different agent-based modeling (ABM) platforms
available for use in Java, Javascript, Python, and other programming
languages. Many others are implemented in domain-specific languages
that allow for the rapid development of complex models. However,
running interpreted, these models are slower than that offered by
compiled systems. There are several application-specific ABMs
available for specific problems, including public health, ecology,
economics, and other fields. Kami aims to fill a niche
for implementing a field-neutral, extensible ABM platform in modern
C++, using C++17 as a baseline for requirements.
Kami provides support for multiple agent classes, population
management, scheduling management, and environmental management
classes. The package provides examples of three relatively simple
ABMs: a bank reserves model, a one-dimensional Boltzmann wealth
model, and a two-dimensional Boltzmann wealth model. The package
provides examples of both a minimal ABM implemented with Kami, as
well as a starter ABM, either of which is suitable for beginning a
new investigation using Kami. Finally, the library provides extensive
unit-testing for all of the internal classes.
Kami's interface is heavily influenced by Mesa's interface
[@python-mesa-2020]. However, being written in C++, Kami runs
substantially faster. This allows for faster runs and more runs
within a fixed amount of time. The advantage here is that an ABM
built on the Kami platform is better suited for statistical and
Monte Carlo approaches to modeling.
An interest design note is that Kami does not use any form of
parallel processing due to the complexities of managing random
number generators and providing reproducibility in results for a
given random number seed. However, it is suitable to run as many
instances of Kami-based models simultaneously as hardware threading
can permit. A final design note is that Kami is opinionated in
that it prefers inheritance to composition in model design and
further, templates are not used for metaprogramming.
# References