Skip to content

Releases: yasserfarouk/negmas

Release v0.15.4

17 Mar 03:35

Choose a tag to compare

Breaking Changes

  • Remove Dissociated notification from preferences lifecycle:
    • The on_preferences_changed([Dissociated]) callback is no longer sent when a negotiator leaves
    • The Dissociated enum value is kept in PreferencesChangeType for backward compatibility but is never sent
    • Removed Dissociated handling from offering policies (CABOfferingPolicy, WAROfferingPolicy, OfferBest, OfferTop)
    • Updated documentation to reflect the simplified lifecycle

Release 0.15.3 (Hotfix)

17 Mar 02:45

Choose a tag to compare

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 Initialization callback 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 TimeBasedOfferingPolicy and other offering policies to handle Dissociated change type properly
    • Added _initialized_pref_id tracking to prevent duplicate initialization calls
    • Updated documentation with clear callback order guarantees

Installation

pip install negmas==0.15.3

Key Guarantees

  1. on_preferences_changed([Initialization]) is ALWAYS called before on_negotiation_start(), regardless of when preferences were set
  2. Both are called exactly ONCE per negotiation
  3. If same preferences would trigger duplicate Initialization, a warning is issued and duplicate is ignored
  4. Negotiators with no preferences don't get Initialization (expected behavior)

v0.15.2

14 Mar 07:04

Choose a tag to compare

New Features

  • Meta-negotiator instantiation improvements: Add negotiator_types and negotiator_params support to MetaNegotiator classes:

    • Accept either pre-instantiated negotiators OR negotiator_types to instantiate automatically
    • negotiator_params can 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
  • Comprehensive constraint system: Add constraints for outcome spaces and utility functions:

    • New Constraint type (Callable[[Outcome], bool]) for filtering outcomes
    • Outcome space constraints: filter outcomes from enumerate(), sample(), random_outcome()
    • Utility function constraints: return -inf for outcomes violating constraints
    • Zero performance overhead when no constraints are present

Bug Fixes

  • Replace deprecated pkg_resources with Path API 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_run to delegate to plot_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_run when both 2D and offer plots are shown

Installation

pip install negmas==0.15.2

Full Changelog: v0.15.1.post1...v0.15.2

Release 0.15.1

13 Feb 07:18

Choose a tag to compare

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_time that expected relative_time to be None at 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 negmas

v0.15.0

03 Feb 10:22

Choose a tag to compare

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 CompletedRun class and CompletedRun.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.nmi is now deprecated in favor of Mechanism.shared_nmi to clarify the distinction between shared and per-negotiator interfaces.

New Features

  • Per-negotiator time and step limits to mechanisms
  • CompletedRun class for representing and persisting completed negotiation runs
  • CompletedRun.plot() method for visualizing completed negotiation runs
  • Scenario.rotate_ufuns() method for efficient scenario rotation in tournaments
  • recalculate_stats parameter to cartesian_tournament for performance optimization
  • Matplotlib backend support to Scenario.plot()
  • Per-negotiation callbacks to cartesian_tournament for monitoring individual negotiations
  • Scenario.normalize_ufuns() for normalizing utility functions to [0, 1] range
  • Mechanism.to_completed_run() method for creating CompletedRun from mechanism state
  • rational_fraction field to ScenarioInfo for tracking rational outcome percentages
  • read_only property to scenario registry
  • calc_standard_info() and Scenario.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.nmi deprecation - now properly use shared_nmi throughout codebase
  • Ensure per-negotiator relative_time is correctly passed to negotiators based on their individual limits
  • Fix SAOMechanism not creating SAONMI instances for negotiators (fixes Genius bridge tests)
  • Fix ContiguousIssue XML 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

PyPI: https://pypi.org/project/negmas/0.15.0/

Genius Agents Modularization & Documentation Enhancement"

11 Jan 07:47

Choose a tag to compare

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 gnegotiators from 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

v0.13.0...v0.13.1

NegMAS v0.12.0

08 Jan 07:40

Choose a tag to compare

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.displayIPython.display)
  • Fixed scipy.optimize.minimize result access for newer numpy versions

Documentation

  • Fixed ReadTheDocs build configuration (Python 3.12, Ubuntu 22.04)
  • Added missing tutorial images
  • Removed deprecated recommonmark parser reference

CI/CD

  • Updated GitHub Actions workflows for uv sync compatibility
  • Changed default branch from master to main
  • Upgraded rpds-py to 0.30.0, ipykernel to 6.29.5
  • Added pillow>=12.1.0 and seaborn>=0.13.0 to dependencies

Installation

pip install negmas==0.12.0
Full Changelog
https://github.com/yasserfarouk/negmas/compare/v0.11.1...v0.12.0

ANAC 2025 first release

15 Mar 22:38

Choose a tag to compare

This release mostly improves the documentation (slightly), introduces a new signature for the propose() method in SAONegotiator and provide several bugfixes.

Improved CLI

18 Mar 03:50

Choose a tag to compare

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

31 Dec 11:31

Choose a tag to compare

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.