VOIOptimalElicitor

class negmas.elicitation.VOIOptimalElicitor(user: User, *, base_negotiator: negmas.sao.negotiators.SAONegotiator = <negmas.sao.negotiators.AspirationNegotiator object>, adaptive_answer_probabilities=True, expector_factory: Union[negmas.elicitation.expectors.Expector, Callable[[], negmas.elicitation.expectors.Expector]] = <class 'negmas.elicitation.expectors.MeanExpector'>, single_elicitation_per_round=False, continue_eliciting_past_reserved_val=False, epsilon=0.001, resolution=0.025, true_utility_on_zero_cost=False, each_outcome_once=False, update_related_queries=True, prune=True, opponent_model_factory: Optional[Callable[[AgentMechanismInterface], DiscreteAcceptanceModel]] = <function VOIOptimalElicitor.<lambda>>)[source]

Bases: negmas.elicitation.BaseElicitor

Optimal VOI elicitor proposed by [Mohammad and Nakadai]_

This algorithm restricts the type of queries that can be asked but does not require the user to set the set of queries apriori and can use unconuntable sets of queries of the form: “Is u(o) > x?”

Methods Summary

add_query(qeeu)

before_eliciting()

Called by apply just before continuously calling elicit_single

best_offer(state)

Maximum Expected Utility at a given aspiration level (alpha)

can_elicit()

Returns whether we can do more elicitation

elicit_single(state)

Does a single elicitation act

init_elicitation(ufun[, queries])

Called once to initialize the elicitation process

init_optimal_policy()

Gets the optimal policy given Negotiator utility_priors

init_query_eeus()

Updates the heap eeu_query which has records of (-EEU, quesion)

on_opponent_model_updated(outcomes, old, new)

Called whenever an opponents model is updated.

update_optimal_policy(index, outcome, oldu, newu)

Updates the optimal policy after a change happens to some utility

utility_on_rejection(outcome, state)

Estimated utility if this outcome rejected at this state.

Methods Documentation

add_query(qeeu: Tuple[float, int])None[source]
before_eliciting()[source]

Called by apply just before continuously calling elicit_single

best_offer(state: negmas.common.MechanismState)Tuple[Optional[Union[negmas.outcomes.OutcomeType, Tuple[Union[int, float, str, list]], Dict[Union[int, str], Union[int, float, str, list]]]], float][source]

Maximum Expected Utility at a given aspiration level (alpha)

Parameters

state

can_elicit()bool[source]

Returns whether we can do more elicitation

elicit_single(state: negmas.common.MechanismState)[source]

Does a single elicitation act

Parameters

state – mechanism state

init_elicitation(ufun: Optional[Union[IPUtilityFunction, UtilityDistribution]], queries: Optional[List[negmas.elicitation.Query]] = None)None[source]

Called once to initialize the elicitation process

Parameters
  • ufun – The probabilistic utility function

  • **kwargs

Remarks:
  • If no ufun is given one will be created with 0-1 uniform distributions and zero reserved value.

  • If a single UtilityDistribution is given as ufun, it is repeated for all outcomes (and the reserved value is set to zero).

  • If a list of UtilityDistribution s is given, it must have the same length as the list of outcomes of this negotiation and is used to set the ufun.

  • The opponent model

init_optimal_policy()None[source]

Gets the optimal policy given Negotiator utility_priors

init_query_eeus()None[source]

Updates the heap eeu_query which has records of (-EEU, quesion)

on_opponent_model_updated(outcomes: List[Union[negmas.outcomes.OutcomeType, Tuple[Union[int, float, str, list]], Dict[Union[int, str], Union[int, float, str, list]]]], old: List[float], new: List[float])None[source]

Called whenever an opponents model is updated.

Parameters
  • outcomes – A list of outcomes for which the acceptance probability are changed

  • old – The old acceptance probability

  • new – The new acceptance probability

update_optimal_policy(index: int, outcome: Union[negmas.outcomes.OutcomeType, Tuple[Union[int, float, str, list]], Dict[Union[int, str], Union[int, float, str, list]]], oldu: float, newu: float)[source]

Updates the optimal policy after a change happens to some utility

utility_on_rejection(outcome: Union[negmas.outcomes.OutcomeType, Tuple[Union[int, float, str, list]], Dict[Union[int, str], Union[int, float, str, list]]], state: negmas.common.MechanismState)Union[negmas.helpers.Distribution, float][source]

Estimated utility if this outcome rejected at this state.

Parameters
  • outcome – The outcome tested

  • state – The mechanism state

Remarks:
  • MUST be implemented by any Elicitor.