Releases: yasserfarouk/negmas
Release v0.15.4
Breaking Changes
- Remove
Dissociatednotification from preferences lifecycle:- The
on_preferences_changed([Dissociated])callback is no longer sent when a negotiator leaves - The
Dissociatedenum value is kept inPreferencesChangeTypefor backward compatibility but is never sent - Removed Dissociated handling from offering policies (CABOfferingPolicy, WAROfferingPolicy, OfferBest, OfferTop)
- Updated documentation to reflect the simplified lifecycle
- The
Release 0.15.3 (Hotfix)
Hotfix Release
This is a hotfix release addressing the duplicate on_preferences_changed(Initialization) callback issue.
Bug Fixes
- Fix
on_preferences_changed([Initialization])being called twice for negotiators:- The
Initializationcallback is now guaranteed to be called exactly once per negotiation - Called ALWAYS before
on_negotiation_start(), regardless of when preferences were set - If the same preferences would trigger a duplicate call, a warning is issued and the duplicate is ignored
- Fixed
TimeBasedOfferingPolicyand other offering policies to handleDissociatedchange type properly - Added
_initialized_pref_idtracking to prevent duplicate initialization calls - Updated documentation with clear callback order guarantees
- The
Installation
pip install negmas==0.15.3Key Guarantees
on_preferences_changed([Initialization])is ALWAYS called beforeon_negotiation_start(), regardless of when preferences were set- Both are called exactly ONCE per negotiation
- If same preferences would trigger duplicate Initialization, a warning is issued and duplicate is ignored
- Negotiators with no preferences don't get Initialization (expected behavior)
v0.15.2
New Features
-
Meta-negotiator instantiation improvements: Add
negotiator_typesandnegotiator_paramssupport toMetaNegotiatorclasses:- Accept either pre-instantiated
negotiatorsORnegotiator_typesto instantiate automatically negotiator_paramscan optionally provide initialization parameters for each type- Applies to all meta-negotiator classes (
MetaNegotiator,GBMetaNegotiator,SAOMetaNegotiator,SAOAggMetaNegotiator,RangeMetaNegotiator,MeanMetaNegotiator,OSMeanMetaNegotiator) - Simplifies meta-negotiator creation by eliminating the need to manually instantiate sub-negotiators
- Accept either pre-instantiated
-
Comprehensive constraint system: Add constraints for outcome spaces and utility functions:
- New
Constrainttype (Callable[[Outcome], bool]) for filtering outcomes - Outcome space constraints: filter outcomes from
enumerate(),sample(),random_outcome() - Utility function constraints: return
-inffor outcomes violating constraints - Zero performance overhead when no constraints are present
- New
Bug Fixes
- Replace deprecated
pkg_resourceswithPathAPI for locating test data files - Resolve tournament serialization issues with parquet and CSV files (handle StringDtype, inf/nan values)
- Update Genius warning tests to use Atlas3 negotiator for reliability
Security Updates
- Bump tornado from 6.5.4 to 6.5.5 (fixes DoS and cookie validation vulnerabilities)
- Bump orjson from 3.11.5 to 3.11.6 (fixes recursion limit vulnerability)
Documentation Improvements
- Improve ecosystem diagram readability with better SVG formatting
- Update tutorials with improved examples and formatting
- Fix plot legend positioning in negotiation visualizations:
- Legend now placed horizontally below figure (not overlapping x-axis labels)
- Proper spacing between legend items with readable font size
- Vertical legend on the right for single-plot modes (only2d/no2d)
Code Improvements
- Refactor
plot_mechanism_runto delegate toplot_offline_run:- Eliminates ~100 lines of duplicated plotting code
- Both functions now share identical legend and margin configuration
- Fixed duplicate legend bug in
plot_offline_runwhen both 2D and offer plots are shown
Installation
pip install negmas==0.15.2Full Changelog: v0.15.1.post1...v0.15.2
Release 0.15.1
Security Updates
- cryptography 46.0.3 → 46.0.5 (fixes CVE-2026-26007)
- pillow 12.1.0 → 12.1.1 (fixes OOB Write vulnerability)
- nbconvert 7.16.6 → 7.17.0 (fixes CVE-2025-53000)
Bug Fixes
- Fix contradictory test assertion in
test_agentk_perceives_timethat expectedrelative_timeto beNoneat the last negotiation step
CI/CD Improvements
- Add GitHub Actions concurrency control to cancel running workflows when a new push is made to the same branch (PRs continue running)
New Features
- Stability criteria system for utility functions with fine-grained caching
- MetaNegotiator classes for ensemble negotiation strategies
- SingletonOutcomeSpace and set operations for outcome spaces
- ExtendedOutcome.best_for() for multi-offer support
- Per-negotiator time and step limits in mechanisms
- LEAVE response type for negotiators to exit without ending negotiation
- allow_none_with_data parameter for information-only messages in SAO
- And many more improvements!
See HISTORY.rst for full details.
Installation
pip install --upgrade negmasv0.15.0
Release 0.15.0
This release focuses on enhancing mechanism capabilities with per-negotiator limits and improving visualization.
Key Features
-
Per-Negotiator Time and Step Limits: Mechanisms now support individual time and step limits for each negotiator, enabling asymmetric negotiation scenarios where different agents have different resources.
-
Offline Negotiation Visualization: New
CompletedRunclass andCompletedRun.plot()method enable visualization of completed negotiations from saved data. -
Scenario Rotation Optimization: New
Scenario.rotate_ufuns()method and optimized tournament performance with efficient scenario statistics rotation. -
Matplotlib Plotting Backend: Scenarios can now be plotted using matplotlib in addition to plotly, providing more flexibility and better performance for static visualizations.
Breaking Changes
Mechanism.nmiis now deprecated in favor ofMechanism.shared_nmito clarify the distinction between shared and per-negotiator interfaces.
New Features
- Per-negotiator time and step limits to mechanisms
CompletedRunclass for representing and persisting completed negotiation runsCompletedRun.plot()method for visualizing completed negotiation runsScenario.rotate_ufuns()method for efficient scenario rotation in tournamentsrecalculate_statsparameter tocartesian_tournamentfor performance optimization- Matplotlib backend support to
Scenario.plot() - Per-negotiation callbacks to
cartesian_tournamentfor monitoring individual negotiations Scenario.normalize_ufuns()for normalizing utility functions to [0, 1] rangeMechanism.to_completed_run()method for creatingCompletedRunfrom mechanism staterational_fractionfield toScenarioInfofor tracking rational outcome percentagesread_onlyproperty to scenario registrycalc_standard_info()andScenario.calc_standard_info()for computing standard scenario metrics- Granular control for pareto frontier serialization in
ScenarioStats.to_dict() - Standardized negotiation save/load format for all mechanism and tournament types
CompletedRun.convert()method for converting between trace formats
Bug Fixes
- Fix race condition in Genius bridge when starting negotiation sessions
- Fix
Mechanism.nmideprecation - now properly useshared_nmithroughout codebase - Ensure per-negotiator
relative_timeis correctly passed to negotiators based on their individual limits - Fix
SAOMechanismnot creatingSAONMIinstances for negotiators (fixes Genius bridge tests) - Fix
ContiguousIssueXML serialization to use efficient integer format - Improve cross-platform path handling for Windows compatibility
- Fix Jupyter notebook test timeouts caused by blocking
fig.show()calls - Fix NaN return value in
compare_ufuns()when using Kendall's tau with constant utility functions - Fix
cartesian_tournament()modifying input scenario objects (now deep copies scenarios)
Documentation
- Add comprehensive migration guide for 0.14 → 0.15 upgrade
- Update publications list with 5 new papers (2024-2025)
- Add documentation for per-negotiator limits
- Add documentation for offline visualization with
CompletedRun - Add documentation for standardized negotiation save/load format
Full Changelog: v0.14.0...v0.15.0
Genius Agents Modularization & Documentation Enhancement"
What's New in v0.13.1
Documentation Improvements
New Negotiators Reference Page
- Comprehensive listing of all 232+ available negotiators
- 36 native SAO negotiators (time-based, MiCRO, tit-for-tat, etc.)
- 35 native GB negotiators
- 196 Genius bridge negotiators organized by ANAC competition year (2010-2019)
New Components Reference Page - Complete listing of all modular negotiation components
- 25+ acceptance policies
- 19+ offering policies
- Genius BOA framework components (acceptance, offering, opponent models)
Expanded Mechanisms Documentation - Detailed overview of all negotiation mechanisms (SAO, GB, ST, MT, GA)
- Mechanism comparison table
- Usage examples and guidelines
Code Improvements
Refactored Genius Negotiators Module
- Reorganized
gnegotiatorsfrom a single 3400+ line file into a well-structured package - Agents now organized by ANAC competition year for better maintainability
- Backward compatible: all existing imports continue to work
Full Changelog
NegMAS v0.12.0
Highlights
This release focuses on compatibility improvements and CI/CD fixes to ensure NegMAS works smoothly across Python versions and build environments.
What's Changed
Python 3.14 Compatibility
- Upgraded dependencies to support Python 3.14
- Fixed numpy/scipy compatibility issues in notebooks
Bug Fixes
- Fixed CLI exit code handling for proper Click behavior
- Fixed IPython import path (
IPython.core.display→IPython.display) - Fixed
scipy.optimize.minimizeresult access for newer numpy versions
Documentation
- Fixed ReadTheDocs build configuration (Python 3.12, Ubuntu 22.04)
- Added missing tutorial images
- Removed deprecated
recommonmarkparser reference
CI/CD
- Updated GitHub Actions workflows for
uv synccompatibility - Changed default branch from
mastertomain - Upgraded
rpds-pyto 0.30.0,ipykernelto 6.29.5 - Added
pillow>=12.1.0andseaborn>=0.13.0to dependencies
Installation
pip install negmas==0.12.0
Full Changelog
https://github.com/yasserfarouk/negmas/compare/v0.11.1...v0.12.0ANAC 2025 first release
This release mostly improves the documentation (slightly), introduces a new signature for the propose() method in SAONegotiator and provide several bugfixes.
Improved CLI
This release contains several bugfixes and speed improvements. Most notably, the negotiate CLI now has a much better documentation which can be accessed as:
negotiate --help
All participants in ANAC 2024 are encouraged to upgrade to this version.
ANAC 2024 Release
This is the first official release for the ANAC 2024 competition.
This release adds Cartesian Tournaments which will be used by the ANL league and includes various bugfixes and performance improvements.