outcome_in_range

negmas.outcomes.outcome_in_range(outcome, outcome_range, *, strict=False, fail_incomplete=False)[source]

Tests that the outcome is contained within the given range of outcomes.

An outcome range defines a value or a range of values for each issue.

Parameters:
  • outcome (tuple) – “Outcome” being tested

  • outcome_range (Mapping[int, Any]) – “Outcome” range being tested against

  • strict – Whether to enforce that all issues in the outcome must be mentioned in the outcome_range

  • fail_incomplete – If True then outcomes that do not sepcify a value for all keys in the outcome_range

  • falling (will be considered not falling within it. If False then these outcomes will be considered) –

  • range (within the range given that the values for the issues mentioned in the outcome satisfy the) –

  • constraints.

Examples

>>> outcome_range = {'price': (0.0, 2.0), 'distance': [0.3, 0.4], 'type': ['a', 'b'], 'area': 3}
>>> outcome_range_2 = {'price': [(0.0, 1.0), (1.5, 2.0)], 'area': [(3, 4), (7, 9)]}
>>> outcome_in_range({'price':3.0}, outcome_range)
False
>>> outcome_in_range({'date': '2018.10.4'}, outcome_range)
True
>>> outcome_in_range({'date': '2018.10.4'}, outcome_range, strict=True)
False
>>> outcome_in_range({'area': 3}, outcome_range, fail_incomplete=True)
False
>>> outcome_in_range({'area': 3}, outcome_range)
True
>>> outcome_in_range({'type': 'c'}, outcome_range)
False
>>> outcome_in_range({'type': 'a'}, outcome_range)
True
>>> outcome_in_range({'date': '2018.10.4'}, outcome_range_2)
True
>>> outcome_in_range({'area': 3.1}, outcome_range_2)
True
>>> outcome_in_range({'area': 3}, outcome_range_2)
False
>>> outcome_in_range({'area': 5}, outcome_range_2)
False
>>> outcome_in_range({'price': 0.4}, outcome_range_2)
True
>>> outcome_in_range({'price': 0.4}, outcome_range_2, fail_incomplete=True)
False
>>> outcome_in_range({'price': 1.2}, outcome_range_2)
False
>>> outcome_in_range({'price': 0.4, 'area': 3.9}, outcome_range_2)
True
>>> outcome_in_range({'price': 0.4, 'area': 10}, outcome_range_2)
False
>>> outcome_in_range({'price': 1.2, 'area': 10}, outcome_range_2)
False
>>> outcome_in_range({'price': 1.2, 'area': 4}, outcome_range_2)
False
>>> outcome_in_range({'type': 'a'}, outcome_range_2)
True
>>> outcome_in_range({'type': 'a'}, outcome_range_2, strict=True)
False
>>> outcome_range = {'price': 10}
>>> outcome_in_range({'price': 10}, outcome_range)
True
>>> outcome_in_range({'price': 11}, outcome_range)
False
Returns:

Success or failure

Return type:

bool

Remarks:

Outcome ranges specify regions in an outcome space. They can have any of the following conditions:

  • A key/issue not mentioned in the outcome range does not add any constraints meaning that All values are acceptable except if strict == True. If strict == True then NO value will be accepted for issues not in the outcome_range.

  • A key/issue with the value None in the outcome range means All values on this issue are acceptable. This is the same as having this key/issue removed from the outcome space

  • A key/issue withe the value [] (empty list) accepts NO outcomes

  • A key/issue with a single value means that it is the only one acceptable

  • A key/issue with a single 2-items tuple (min, max) means that any value within that range is acceptable.

  • A key/issue with a list of values means an output is acceptable if it falls within the condition specified by any of the values in the list (list == union). Each such value can be a single value, a 2-items tuple or another list. Notice that lists of lists can always be combined into a single list of values