ANP Studio
Analytic Network Process modeling for research and education
For everyone:
User guide
·
Glossary
For developers:
Studio GUI API
·
ANP library (libanpcpp)
ANP Studio is a cross-platform desktop application for modeling, editing, calculating, and studying Analytic Network Process (ANP) decision models.
Download
Get the latest prebuilt binaries from the Releases page.
| Platform | Asset |
|---|---|
| Windows x64 | anpstudio-*-windows-x64.zip — unzip and run anpstudio.exe |
| macOS Apple Silicon | anpstudio-*-macos-arm64.zip — unzip, then right-click the app → Open (unsigned) |
| Linux x86_64 | anpstudio-*-linux-x86_64.AppImage — chmod +x the file, then run it |
Windows SmartScreen and macOS Gatekeeper may warn because builds are not code-signed. Intel Mac builds are not published yet.
To build from source instead, see Build the GUI below.
Learn
| You are… | Start here |
|---|---|
| New to ANP? | What is ANP? |
| Know ANP? | User guide |
| Looking up a term | Glossary |
The computational library (matrices, networks, pairwise judgments, limit
matrix, synthesis, JSON I/O) lives in a separate repository:
libanpcpp (CMake target
anpcpp::anpcpp, C++ namespace anpcpp). Model files use JSON format
anpcpp (v1/v2) with the default extension .anpstudio (.json still
opens and saves).
This application is inspired by the workflow of SuperDecisions. Numerical behavior is cross-checked against concepts from pyanp (reference only).
Sample models
Ready-to-open .anpstudio models live in samples/. Release builds ship
this directory with the app; use File → Open Sample… in ANP Studio (or
File → Open on a .anpstudio / .json file). See samples/README.md
for the catalog (Hamburger market share, classic AHP hierarchies, BCR/BOCR
subnetworks, ratings examples, and more). Regenerate with libanpcpp’s
export_sample_models example.
Under Judgments → Ratings, pick a scale preset (built-in or My scales), cast votes with label dropdowns, and use Advanced to customize; changes apply when Advanced closes.
Architecture
libanpcpp (anpcpp::anpcpp) Toolkit-independent ANP library
anpstudio Qt 6 Widgets desktop application (this repo)
Dependencies
| Piece | Choice |
|---|---|
| Build | CMake 3.20+ |
| Language | C++20 |
| ANP library | libanpcpp via FetchContent (or sibling checkout) |
| GUI | Qt 6 Widgets |
Build the GUI
Requires a C++20 compiler, CMake, and Qt 6 Widgets (e.g. qt6-base-dev and
libgl-dev on Ubuntu/Pop!_OS).
Sibling checkout (local development)
Place libanpcpp next to this repo:
Documents/github/libanpcpp/
Documents/github/anp-studio/
Then:
cmake -S . -B build -DANPSTUDIO_BUILD_GUI=ON
cmake --build build --target anpstudio
./build/gui/anpstudio
Command line
./build/gui/anpstudio # new empty model
./build/gui/anpstudio path/to/model.anpstudio # open a file
./build/gui/anpstudio --stage judgments model.json
./build/gui/anpstudio --help
./build/gui/anpstudio --version
--stage accepts structure, judgments, analysis, or researcher (case-insensitive). --new starts empty and cannot be combined with a file path.
Use build/ as the only default binary directory (see AGENTS.md).
Avoid parallel trees like build-anpstudio2 unless you need a separate config.
CMake automatically uses ../libanpcpp when that tree exists. Override with
-DANPCPP_SOURCE_DIR=/path/to/libanpcpp if needed.
FetchContent from GitHub
If there is no sibling checkout, CMake fetches libanpcpp from GitHub
(GIT_TAG v0.4.0).
GUI features
Qt 6 Widgets application (SuperDecisions-style canvas + docks) for creating
networks/subnetworks, editing connections and pairwise judgments, calculating
matrices/priorities, choosing synthesis formulas, and saving/loading JSON —
with full undo/redo via QUndoStack.
Library development
Build, test, and examples for the ANP library belong in libanpcpp:
cd ../libanpcpp
cmake -S . -B build -DANPCPP_BUILD_TESTS=ON -DANPCPP_BUILD_EXAMPLES=ON
cmake --build build
ctest --test-dir build --output-on-failure
See that repository’s README for FetchContent / find_package consumer docs.
Documentation
User guide
User guide — Structure, connections, judgments, ratings, and calculations.
Glossary — Short definitions of ANP and Studio terms.
Site home: https://bamath.org/anp-studio/
(built from main via GitHub Actions).
Developers
Studio GUI API (Qt classes): https://bamath.org/anp-studio/api/
ANP library (libanpcpp): https://bamath.org/libanpcpp/ · API
Local Doxygen (this repo) requires Doxygen (sudo apt install doxygen on Ubuntu).
With the default ANPSTUDIO_BUILD_DOCS=ON, cmake --build build runs the
same Doxygen pass as CI (WARN_AS_ERROR). Docs-only:
cmake -S . -B build -DANPSTUDIO_BUILD_DOCS=ON -DANPSTUDIO_BUILD_GUI=OFF
cmake --build build --target anpstudio_docs
Open build/docs/html/index.html.
For libanpcpp docs with a sibling checkout:
cd ../libanpcpp
cmake -S . -B build -DANPCPP_BUILD_DOCS=ON -DANPCPP_BUILD_TESTS=OFF -DANPCPP_BUILD_EXAMPLES=OFF
cmake --build build --target anpcpp_docs
Open ../libanpcpp/build/docs/html/index.html.
Local full site preview (README landing + guide + API under /api/):
cmake -S . -B build -DANPSTUDIO_BUILD_DOCS=ON -DANPSTUDIO_BUILD_GUI=OFF
cmake --build build --target anpstudio_docs
cp -a build/docs/html docs/site/api
python3 - <<'PY'
from pathlib import Path
import re
src = Path("README.md").read_text(encoding="utf-8")
src = re.sub(r"^# ANP Studio\n+", "", src, count=1)
src = re.sub(
r"<p align=\"center\">\s*<img[^>]*>\s*</p>\n*",
"",
src,
count=1,
flags=re.IGNORECASE,
)
Path("docs/site/README.content.md").write_text(src.lstrip(), encoding="utf-8")
PY
cd docs/site && bundle install && bundle exec jekyll serve --baseurl /anp-studio
Enable Pages with Settings → Pages → Source: GitHub Actions; see
.github/workflows/docs.yml.
Publishing releases (maintainers)
End users should use Download above. This section is for cutting a new GitHub Release so CI attaches binaries.
GitHub Actions builds portable binaries for each published release:
| Platform | Artifact |
|---|---|
| Windows x64 | anpstudio-<tag>-windows-x64.zip |
| macOS Apple Silicon | anpstudio-<tag>-macos-arm64.zip |
| Linux x86_64 | anpstudio-<tag>-linux-x86_64.AppImage |
- Merge the changes you want on
main. - On GitHub open the repo → Releases → Draft a new release.
- Under Choose a tag, create a new tag such as
v0.4.0(target:main). Use thevprefix (same as libanpcpp). Older releases0.1.0–0.3.0lacked it; new tags should not. - Set the release title (e.g.
ANP Studio 0.4.0) and optional notes. - Click Publish release (not “Save draft”—drafts do not start the build).
- Open the Actions tab and watch Release builds (Windows, macOS, Linux).
- When the jobs finish, refresh the Release page; the three assets appear under the release
(filenames include the full tag, e.g.
anpstudio-v0.4.0-windows-x64.zip).
Test a build without publishing: Actions → Release builds → Run workflow. Download artifacts from the workflow run page; nothing is attached to a Release.
Status / remaining work
- Multi-user judgments (core): Scope bar + Judgments Scope rail, roster, samples
18–21 - Consensus / Variance Analysis (Analysis pane): disagreement alignment + vote range (green min–max, mean tick, hybrid stacked dots), coverage, cohort compare
- Still open: harden Google token storage (see docs/google-oauth.md)
- Available: Collect judgments hub (Participants → Collect judgments… / Scope → Collect…) for Excel templates, Google Forms, and CSV; hidden
_metaround-trip; structure fingerprinting on Forms - Rating/Direct prioritizers, SuperDecisions
.sdmodimport - Contribution guidelines
License
MIT License. See LICENSE.