pydcop.dcop
Objects used for representing DCOP are in the package pydcop.dcop
- class Domain(name: str, domain_type: str, values: Iterable)
A VariableDomain indicates which are the valid values for variables with this domain. It also indicates the type of environment state represented by there variable : ‘luminosity’, humidity’, etc.
A domain object can be used like a list of value as it support basic list-like operations : ‘in’, ‘len’, iterable…
- index(val)
Find the position of a value in the domain
- Parameters:
val – a value to look for in the domain
- Return type:
the index of this value in the domain.
Examples
>>> d = Domain('d', 'd', [1, 2, 3]) >>> d.index(2) 1
- to_domain_value(val: str)
Find a domain value with the same str representation
This is useful when reading value from a file.
- Parameters:
val (str) – a string that should match a value in the domain (which may contains non-string values, e.g. int)
- Returns:
a pair (index, value) where index is the position of the value in the
domain and value the actual value that matches val.
Examples
>>> d = Domain('d', 'd', [1, 2, 3]) >>> d.to_domain_value('2') (1, 2)
- class Variable(name: str, domain: Domain | Iterable[Any], initial_value=None)
A DCOP variable.
This class represents the definition of a variable : a name, a domain from which the variable can take its value and an optional initial value. It is not used to keep track of the current value assigned to the variable.
- Parameters:
name (str) – Name of the variable. You must use a valid python identifier if you want to use python expression (given as string) to define constraints using this variable.
domain (Domain or Iterable) – The domain where this variable can take its value. If an iterable is given a Domain object is automatically created (named after the variable name): d_<var_name>.
initial_value (Any) – The initial value assigned to the variable.
- class AgentDef(name: str, default_route: float = 1, routes: Dict[str, float] | None = None, default_hosting_cost: float = 0, hosting_costs: Dict[str, float] | None = None, **kwargs: str | int | float)
Definition of an agent.
AgentDef objects are used when only the definition of the agent is needed, and not the actual running agents. This is for example the case when computing the computations’ distribution, or when instanciating concrete agents.
Notes
Route cost default to 1 because they are typically used as a multiplier for message cost when calculating communication cost. On the other hand, hosting cost default to 0 because they are used in a sum. In order to allow using problem-specific attribute on agents, any named argument passed when creating an AgentDef is available as an attribute
Examples
>>> a1 = AgentDef('a1', foo='bar') >>> a1.name 'a1' >>> a1.foo 'bar'
- Parameters:
name (str) – the name of the agent
default_route (float) – the default cost of a route when not specified in routes.
routes (dictionary of agents name, as string, to float) – attribute a specific route cost between this agent and the agents whose names are used as key in the dictionary
default_hosting_cost – the default hosting for a computation when not specified in hosting_costs.
hosting_costs (dictionary of computation name, as string, to float) – attribute a specific cost for hosting the computations whose names are used as key in the dictionary.
kwargs (dictionary string -> any) – any extra attribute that should be available on this AgentDef object.
- extra_attr() Dict[str, Any]
Extra attributes for this agent definition.
These extra attributes are the kwargs passed to the constructor. They are typically used to defined extra properties on an agent, like the capacity.
- Return type:
Dictionary of strings to values,
- hosting_cost(computation: str) float
The cost for hosting a computation.
- Parameters:
computation (str) – the name of the computation
- Returns:
the cost for hosting a computation
- Return type:
float
Examples
>>> agt = AgentDef('a1', default_hosting_cost=3) >>> agt.hosting_cost('c2') 3 >>> agt.hosting_cost('c3') 3
>>> agt = AgentDef('a1', hosting_costs={'c2': 6}) >>> agt.hosting_cost('c2') 6 >>> agt.hosting_cost('c3') 0
- route(other_agt: str) float
The route cost between this agent and other_agent.
- Parameters:
other_agt (str) – the name of the other agent
- Returns:
the cost of the route
- Return type:
float
Examples
>>> agt = AgentDef('a1', default_route=5) >>> agt.route('a2') 5 >>> agt.route('a1') 0
>>> agt = AgentDef('a1', routes={'a2':8}) >>> agt.route('a2') 8 >>> agt.route('a3') 1
- TODO: add documentation for
Constraintobject and utility functions (
relation_from_str(espression, variables), etc. )