This repository implements bilateral and multilateral SAO (Stacked Alternating Offers) negotiation experiments in NegMAS. It compares classic time-based concession strategies with a custom opponent-aware aspiration strategy under deadline pressure, reservation values, asymmetric utility profiles, and both two-party and one-to-many procurement settings.
The project is designed for reproducible benchmarking: it includes fixed-domain experiments, a multilateral extension, a randomized appendix tournament, and statistical analysis outputs (bootstrap confidence intervals, permutation tests, FDR correction, and effect sizes).
src/run_experiments.py: bilateral fixed-domain runner (A..F)src/run_multilateral_experiments.py: multilateral procurement runner (M1..M3)src/appendix_tournament.py: randomized robustness tournamentsrc/domain.py,src/domain_multilateral.py: issue spaces and utility-profile generatorssrc/negotiators.py: strategy registry, customSmartAspirationNegotiator, andGeniusBOABaselineNegotiatorsrc/metrics.py: frontier/reference metrics, welfare regret, CIs, and pairwise significance testsscripts/run_all.py: end-to-end sequential pipelinescripts/plot_stats.py: bootstrap/effect-size figures from bilateral summariesscripts/plot_analysis.py: presentation analysis figures from run CSVstests/: unit and integration checks
BoulwareTBNegotiatorLinearTBNegotiatorConcederTBNegotiatorSmartAspirationNegotiatorGeniusBOABaselineNegotiator
Issues: price, quantity, delivery_time, service_level.
A: balanced baseline buyer/seller preferencesB: seller is highly delivery-time sensitiveC: nonlinear price-vs-quantity tensionD: service-level dominant weightingE: delivery-pressure and price asymmetryF: strong specialization (buyer quantity vs seller price emphasis)
Issues: unit_price, volume, delivery_window, quality_tier with one buyer and multiple suppliers.
M1: balanced procurement settingM2: buyer emphasizes speed and qualityM3: buyer is strongly cost-focused
From repo root:
python3.11 -m venv .venv311
source .venv311/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txtpython scripts/run_all.pyThis pipeline runs smoke test, pytest, bilateral experiments, stats plots, appendix tournament, multilateral experiments, and analysis plots sequentially, then writes a run bundle with SUMMARY.md and manifest.json.
Quick verification mode:
python scripts/run_all.py --quickpython scripts/smoke_test.pypytest -qpython -m src.run_experiments \
--output-dir results/main_final \
--n-seeds 40 \
--profiles A B C D E F \
--n-steps 12 24 36 \
--buyer-reserved-value 0.35 \
--seller-reserved-value 0.35 \
--pend 0.04 \
--pend-per-second 0.02 \
--bootstrap-resamples 2000 \
--permutation-resamples 2000 \
--progress-every 50python -m src.appendix_tournament \
--output-dir results/appendix \
--n-scenarios 6 \
--n-repetitions 2 \
--n-steps 50 \
--seed 2026python -m src.run_multilateral_experiments \
--output-dir results/multilateral \
--n-seeds 20 \
--profiles M1 M2 M3 \
--n-steps 20 40 \
--n-suppliers 2 \
--buyer-reserved-value 0.35 \
--supplier-reserved-value 0.35 \
--pend 0.04 \
--pend-per-second 0.02 \
--bootstrap-resamples 1000 \
--progress-every 50python scripts/plot_stats.py \
--results-dir <RUN_DIR>/main \
--output-dir <RUN_DIR>/figures/stats
python scripts/plot_analysis.py \
--results-dir <RUN_DIR>/main \
--output-dir <RUN_DIR>/figures/analysis \
--multilateral-runs <RUN_DIR>/multilateral/multi_runs.csvDefault sequential bundles are written to:
results/presentation/run_YYYYMMDD_HHMMSS/
Each run bundle contains:
main/: bilateral raw + aggregated outputsmultilateral/: multilateral raw + aggregated outputsappendix/: tournament outputsfigures/stats/: CI/effect-size figuresfigures/analysis/: analysis/presentation figureslogs/: per-stage execution logsSUMMARY.md: concise results summarymanifest.json: exact commands, timing, and run metadata
results/presentation/LATEST.txt points to the latest run bundle.
Current bundled results in this repo are under:
results/presentation/run_full_presentable/