negmas.sao Package

Implements Stacked Alternating Offers (SAO) mechanism and basic negotiators.


SAOResponse(response, outcome)

A response to an offer given by an agent in the alternating offers protocol

SAOState(running, waiting, started, step, …)

SAOAMI(id, outcome_type, n_outcomes, issues, …)


A mixin that adds the ability to accept random offers


A mixin that adds the ability to propose an outcome from a set of outcomes randomly.


A mixin that adds the ability to propose and respond a limited set of outcomes.


A mixin that adds the ability to respond randomly to offers


A mixin that adds the ability to propose random offers

SAOMechanism([issues, outcomes, n_steps, …])

Implements Several variants of the Stacked Alternating Offers Protocol


An alias for SAOMechanism object

SAONegotiator([assume_normalized, …])

Base class for all SAO negotiators.

RandomNegotiator([p_acceptance, …])

A negotiation agent that responds randomly in a single negotiation.

LimitedOutcomesNegotiator(…[, p_ending, …])

A negotiation agent that uses a fixed set of outcomes in a single negotiation.

LimitedOutcomesAcceptor(acceptable_outcomes, …)

A negotiation agent that uses a fixed set of outcomes in a single negotiation.

AspirationNegotiator([max_aspiration, …])

Represents a time-based negotiation strategy that is independent of the offers received during the negotiation.

ToughNegotiator([name, dynamic_ufun, …])

Accepts and proposes only the top offer (i.e.

OnlyBestNegotiator([name, dynamic_ufun, …])

Offers and accepts only one of the top outcomes for the negotiator.

NaiveTitForTatNegotiator(name, parent, ufun)

Implements a naive tit-for-tat strategy that does not depend on the availability of an opponent model.


A simple tit-for-tat negotiator

NiceNegotiator(*args, **kwargs)

Offers and accepts anything.

JavaSAONegotiator(java_object, …)

Represents a negotiator running on JNegMAS (depricated)


A negotiator that acts as an end point to a parent Controller.


A python shadow to a java negotiator

SAOController([default_negotiator_type, …])

A controller that can manage multiple negotiators taking full or partial control from them.

SAORandomController(*args, p_acceptance, …)

A controller that returns random offers.

SAOSyncController(*args[, global_ufun])

A controller that can manage multiple negotiators synchronously.

SAORandomSyncController(*args[, …])

A sync controller that returns random offers.

SAOSingleAgreementController(*args[, strict])

A synchronized controller that tries to get no more than one agreeement.

SAOSingleAgreementRandomController(*args[, …])

A single agreement controller that uses a random negotiation strategy.


A SAOSingleAgreementController that uses aspiration level to decide what to accept and what to propose.

SAOMetaNegotiatorController(*args, …)

Controls multiple negotiations using a single meta negotiator.

Class Inheritance Diagram

Inheritance diagram of negmas.sao.common.SAOResponse, negmas.sao.common.SAOState, negmas.sao.common.SAOAMI, negmas.sao.components.LimitedOutcomesAcceptorMixin, negmas.sao.components.LimitedOutcomesProposerMixin, negmas.sao.components.LimitedOutcomesMixin, negmas.sao.components.RandomResponseMixin, negmas.sao.components.RandomProposalMixin, negmas.sao.mechanism.SAOMechanism, negmas.sao.mechanism.SAOMechanism, negmas.sao.negotiators.SAONegotiator, negmas.sao.negotiators.RandomNegotiator, negmas.sao.negotiators.LimitedOutcomesNegotiator, negmas.sao.negotiators.LimitedOutcomesAcceptor, negmas.sao.negotiators.AspirationNegotiator, negmas.sao.negotiators.ToughNegotiator, negmas.sao.negotiators.OnlyBestNegotiator, negmas.sao.negotiators.NaiveTitForTatNegotiator, negmas.sao.negotiators.NaiveTitForTatNegotiator, negmas.sao.negotiators.NiceNegotiator, negmas.sao.negotiators.JavaSAONegotiator, negmas.sao.negotiators.PassThroughSAONegotiator, negmas.sao.negotiators._ShadowSAONegotiator, negmas.sao.controllers.SAOController, negmas.sao.controllers.SAORandomController, negmas.sao.controllers.SAOSyncController, negmas.sao.controllers.SAORandomSyncController, negmas.sao.controllers.SAOSingleAgreementController, negmas.sao.controllers.SAOSingleAgreementRandomController, negmas.sao.controllers.SAOSingleAgreementAspirationController, negmas.sao.controllers.SAOMetaNegotiatorController