16 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
James P. Howard, II
1a3ac4a246 Merge branch 'release/0.7.2' into develop 2023-01-22 21:45:34 -05:00
James P. Howard, II
ffe25478c1 chore(version): Bump to version 0.7.2 2023-01-22 21:45:20 -05:00
James P. Howard, II
f10bc39cce docs(sphinx): Fix version numbers in Python requirements 2023-01-22 21:41:02 -05:00
James P. Howard, II
5a0f76f7fa docs(doxygen): Automate version numbering 2023-01-22 21:34:27 -05:00
James P. Howard, II
da5347b102 docs(doxygen): Cleanup doxygen config 2023-01-22 21:26:12 -05:00
James P. Howard, II
dcbfddad13 chore(docs): Update changelog for continuous domains 2023-01-22 21:17:36 -05:00
James P. Howard, II
7e3052bac0 chore(docs): Intro note in changelog 2023-01-22 21:14:54 -05:00
James P. Howard, II
14b244586c Merge branch 'release/0.7.1' into develop 2023-01-22 21:04:50 -05:00
8 changed files with 134 additions and 293 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

View File

@@ -6,7 +6,7 @@ set(PROJECT_NAME "kami")
set(VERSION_MAJOR 0)
set(VERSION_MINOR 7)
set(VERSION_PATCH 1)
set(VERSION_PATCH 2)
set(VERSION_STRING ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
project(${PROJECT_NAME}

View File

@@ -3,7 +3,7 @@ from conans import ConanFile, CMake
class KamiConan(ConanFile):
name = "kami"
version = "0.7.1"
version = "0.7.2"
license = "MIT"
author = "James P. Howard, II <james.howard@jhu.edu>"
url = "https://github.com/jhuapl/kami"

View File

@@ -38,7 +38,7 @@ PROJECT_NAME = "Kami"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 0.1.0
PROJECT_NUMBER = "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_PATCH@"
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -837,7 +837,7 @@ EXCLUDE_PATTERNS =
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS = KAMI_SEQUENTIAL_H
EXCLUDE_SYMBOLS = *_H
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
@@ -1034,7 +1034,7 @@ IGNORE_PREFIX =
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.
GENERATE_HTML = NO
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
@@ -1569,156 +1569,6 @@ EXTRA_SEARCH_MAPPINGS =
GENERATE_LATEX = NO
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when enabling USE_PDFLATEX this option is only used for generating
# bitmaps for formulas in the HTML output, but not in the Makefile that is
# written to the output directory.
# The default file is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = letter
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
# by its name or with the correct syntax as to be used with the LaTeX
# \usepackage command. To get the times font for instance you can specify :
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
# To use the option intlimits with the amsmath package you can specify:
# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
# generated LaTeX document. The header should contain everything until the first
# chapter. If it is left blank doxygen will generate a standard header. See
# section "Doxygen usage" for information on how to let doxygen write the
# default header to a separate file.
#
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
# string, for the replacement values of the other commands the user is referred
# to HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER =
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
# generated LaTeX document. The footer should contain everything after the last
# chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer.
#
# Note: Only use a user-defined footer if you know what you are doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_FOOTER =
# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# LaTeX style sheets that are included after the standard style sheets created
# by doxygen. Using this option one can overrule certain style aspects. Doxygen
# will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_STYLESHEET =
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_FILES =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
# command to the generated LaTeX files. This will instruct LaTeX to keep running
# if errors occur, instead of asking the user for help. This option is also used
# when generating formulas in HTML.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BIB_STYLE = plain
# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_TIMESTAMP = NO
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
@@ -1730,51 +1580,6 @@ LATEX_TIMESTAMP = NO
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's config
# file, i.e. a series of assignments. You only have to provide replacements,
# missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's config file. A template extensions file can be generated
# using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
@@ -1785,40 +1590,6 @@ RTF_EXTENSIONS_FILE =
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_SUBDIR =
# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
@@ -1829,23 +1600,6 @@ MAN_LINKS = NO
GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
@@ -1856,14 +1610,6 @@ XML_PROGRAMLISTING = YES
GENERATE_DOCBOOK = NO
# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_OUTPUT = docbook
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
@@ -1888,32 +1634,6 @@ GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------

View File

@@ -1,6 +1,13 @@
Changelog
=========
Below is the consolidated changelog for Kami.
- :feature:`0` Added baseline for continuous domains
- :release:`0.7.2 <2023.01.22>`
- :bug:`0` Streamlined documentation builds
- :release:`0.7.1 <2023.01.22>`
- :bug:`0` Corrected bug in documentation build

View File

@@ -1,8 +1,8 @@
breathe
sphinx
exhale
documenteer
myst-parser
sphinx_bootstrap_theme
sphinx_rtd_theme
releases
breathe==4.34.0
Sphinx==4.5.0
exhale==0.3.6
documenteer==0.7.0
myst-parser==0.18.1
sphinx-bootstrap-theme==0.8.1
sphinx-rtd-theme==1.1.1
releases==1.6.3

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