A

Complete

Distributed

Constraint

Optimization

Method

For

Non-Traditional

Pseudotree

Arrangements∗

James

Atlas

Computer

and

Information

Sciences

University

of

Delaware

Newark,

DE

atlas@cis.udel.edu

Keith

Decker

Computer

and

Information

Sciences

University

of

Delaware

Newark,

DE

decker@cis.udel.edu

ABSTRACT

Distributed

Constraint

Optimization

(DCOP)

is

a

general

framework

that

can

model

complex

problems

in

multi-agent

systems.

Several

current

algorithms

that

solve

general

DCOP

instances,

including

ADOPT

and

DPOP,

arrange

agents

into

a

traditional

pseudotree

structure.

We

introduce

an

extension

to

the

DPOP

algorithm

that

handles

an

extended

set

of

pseudotree

arrangements.

Our

algorithm

correctly

solves

DCOP

instances

for

pseudotrees

that

include

edges

between

nodes

in

separate

branches.

The

algorithm

also

solves

instances

with

traditional

pseudotree

arrangements

using

the

same

procedure

as

DPOP.

We

compare

our

algorithm

with

DPOP

using

several

metrics

including

the

induced

width

of

the

pseudotrees,

the

maximum

dimensionality

of

messages

and

computation,

and

the

maximum

sequential

path

cost

through

the

algorithm.

We

prove

that

for

some

problem

instances

it

is

not

possible

to

generate

a

traditional

pseudotree

using

edge-traversal

heuristics

that

will

outperform

a

cross-edged

pseudotree.

We

use

multiple

heuristics

to

generate

pseudotrees

and

choose

the

best

pseudotree

in

linear

space-time

complexity.

For

some

problem

instances

we

observe

significant

improvements

in

message

and

computation

sizes

compared

to

DPOP.

Categories

and

Subject

Descriptors

[Artificial

Intelligence]:

Distributed

Artificial

Intelligence-Multiagent

Systems

General

Terms

Algorithms

INTRODUCTION

Many

historical

problems

in

the

AI

community

can

be

transformed

into

Constraint

Satisfaction

Problems

(CSP).

With

the

advent

of

distributed

AI,

multi-agent

systems

became

a

popular

way

to

model

the

complex

interactions

and

coordination

required

to

solve

distributed

problems.

CSPs

were

originally

extended

to

distributed

agent

environments

in

Early

domains

for

distributed

constraint

satisfaction

problems

(DisCSP)

included

job

shop

scheduling

and

resource

allocation

Many

domains

for

agent

systems,

especially

teamwork

coordination,

distributed

scheduling,

and

sensor

networks,

involve

overly

constrained

problems

that

are

difficult

or

impossible

to

satisfy

for

every

constraint.

Recent

approaches

to

solving

problems

in

these

domains

rely

on

optimization

techniques

that

map

constraints

into

multi-valued

utility

functions.

Instead

of

finding

an

assignment

that

satisfies

all

constraints,

these

approaches

find

an

assignment

that

produces

a

high

level

of

global

utility.

This

extension

to

the

original

DisCSP

approach

has

become

popular

in

multi-agent

systems,

and

has

been

labeled

the

Distributed

Constraint

Optimization

Problem

(DCOP)

Current

algorithms

that

solve

complete

DCOPs

use

two

main

approaches:

search

and

dynamic

programming.

Search

based

algorithms

that

originated

from

DisCSP

typically

use

some

form

of

backtracking

or

bounds

propagation,

as

in

ADOPT

Dynamic

programming

based

algorithms

include

DPOP

and

its

extensions

To

date,

both

categories

of

algorithms

arrange

agents

into

a

traditional

pseudotree

to

solve

the

problem.

It

has

been

shown

in

that

any

constraint

graph

can

be

mapped

into

a

traditional

pseudotree.

However,

it

was

also

shown

that

finding

the

optimal

pseudotree

was

NP-Hard.

We

began

to

investigate

the

performance

of

traditional

pseudotrees

generated

by

current

edge-traversal

heuristics.

We

found

that

these

heuristics

often

produced

little

parallelism

as

the

pseudotrees

tended

to

have

high

depth

and

low

branching

factors.

We

suspected

that

there

could

be

other

ways

to

arrange

the

pseudotrees

that

would

provide

increased

parallelism

and

smaller

message

sizes.

After

exploring

these

other

arrangements

we

found

that

cross-edged

pseudotrees

provide

shorter

depths

and

higher

branching

factors

than

the

traditional

pseudotrees.

Our

hypothesis

was

that

these

crossedged

pseudotrees

would

outperform

traditional

pseudotrees

for

some

problem

types.

In

this

paper

we

introduce

an

extension

to

the

DPOP

algorithm

that

handles

an

extended

set

of

pseudotree

arrangements

which

include

cross-edged

pseudotrees.

We

begin

with

a

definition

of

(RPS)

c

IFAAMAS

DCOP,

traditional

pseudotrees,

and

cross-edged

pseudotrees.

We

then

provide

a

summary

of

the

original

DPOP

algorithm

and

introduce

our

DCPOP

algorithm.

We

discuss

the

complexity

of

our

algorithm

as

well

as

the

impact

of

pseudotree

generation

heuristics.

We

then

show

that

our

Distributed

Cross-edged

Pseudotree

Optimization

Procedure

(DCPOP)

performs

significantly

better

in

practice

than

the

original

DPOP

algorithm

for

some

problem

instances.

We

conclude

with

a

selection

of

ideas

for

future

work

and

extensions

for

DCPOP.

PROBLEM

DEFINITION

DCOP

has

been

formalized

in

slightly

different

ways

in

recent

literature,

so

we

will

adopt

the

definition

as

presented

in

A

Distributed

Constraint

Optimization

Problem

with

n

nodes

and

m

constraints

consists

of

the

tuple

X,

D,

U

where:

X

is

a

set

of

variables,

each

one

assigned

to

a

unique

agent

D

is

a

set

of

finite

domains

for

each

variable

U

is

a

set

of

utility

functions

such

that

each

function

involves

a

subset

of

variables

in

X

and

defines

a

utility

for

each

combination

of

values

among

these

variables

An

optimal

solution

to

a

DCOP

instance

consists

of

an

assignment

of

values

in

D

to

X

such

that

the

sum

of

utilities

in

U

is

maximal.

Problem

domains

that

require

minimum

cost

instead

of

maximum

utility

can

map

costs

into

negative

utilities.

The

utility

functions

represent

soft

constraints

but

can

also

represent

hard

constraints

by

using

arbitrarily

large

negative

values.

For

this

paper

we

only

consider

binary

utility

functions

involving

two

variables.

Higher

order

utility

functions

can

be

modeled

with

minor

changes

to

the

algorithm,

but

they

also

substantially

increase

the

complexity.

Traditional

Pseudotrees

Pseudotrees

are

a

common

structure

used

in

search

procedures

to

allow

parallel

processing

of

independent

branches.

As

defined

in

a

pseudotree

is

an

arrangement

of

a

graph

G

into

a

rooted

tree

T

such

that

vertices

in

G

that

share

an

edge

are

in

the

same

branch

in

T.

A

back-edge

is

an

edge

between

a

node

X

and

any

node

which

lies

on

the

path

from

X

to

the

root

(excluding

X"s

parent).

Figure

shows

a

pseudotree

with

four

nodes,

three

edges

(A-B,

B-C,

BD),

and

one

back-edge

(A-C).

Also

defined

in

are

four

types

of

relationships

between

nodes

exist

in

a

pseudotree:

P(X)

the

parent

of

a

node

X:

the

single

node

higher

in

the

pseudotree

that

is

connected

to

X

directly

through

a

tree

edge

C(X)

the

children

of

a

node

X:

the

set

of

nodes

lower

in

the

pseudotree

that

are

connected

to

X

directly

through

tree

edges

PP(X)

the

pseudo-parents

of

a

node

X:

the

set

of

nodes

higher

in

the

pseudotree

that

are

connected

to

X

directly

through

back-edges

(In

Figure

A

PP(C))

PC(X)

the

pseudo-children

of

a

node

X:

the

set

of

nodes

lower

in

the

pseudotree

that

are

connected

to

X

directly

through

back-edges

(In

Figure

C

PC(A))

Figure

A

traditional

pseudotree.

Solid

line

edges

represent

parent-child

relationships

and

the

dashed

line

represents

a

pseudo-parent-pseudo-child

relationship.

Figure

A

cross-edged

pseudotree.

Solid

line

edges

represent

parent-child

relationships,

the

dashed

line

represents

a

pseudoparent-pseudo-child

relationship,

and

the

dotted

line

represents

a

branch-parent-branch-child

relationship.

The

bolded

node,

B,

is

the

merge

point

for

node

E.

Cross-edged

Pseudotrees

We

define

a

cross-edge

as

an

edge

from

node

X

to

a

node

Y

that

is

above

X

but

not

in

the

path

from

X

to

the

root.

A

cross-edged

pseudotree

is

a

traditional

pseudotree

with

the

addition

of

cross-edges.

Figure

shows

a

cross-edged

pseudotree

with

a

cross-edge

(D-E).

In

a

cross-edged

pseudotree

we

designate

certain

edges

as

primary.

The

set

of

primary

edges

defines

a

spanning

tree

of

the

nodes.

The

parent,

child,

pseudo-parent,

and

pseudo-child

relationships

from

the

traditional

pseudotree

are

now

defined

in

the

context

of

this

primary

edge

spanning

tree.

This

definition

also

yields

two

additional

types

of

relationships

that

may

exist

between

nodes:

BP(X)

the

branch-parents

of

a

node

X:

the

set

of

nodes

higher

in

the

pseudotree

that

are

connected

to

X

but

are

not

in

the

primary

path

from

X

to

the

root

(In

Figure

D

BP(E))

BC(X)

the

branch-children

of

a

node

X:

the

set

of

nodes

lower

in

the

pseudotree

that

are

connected

to

X

but

are

not

in

any

primary

path

from

X

to

any

leaf

node

(In

Figure

E

BC(D))

Pseudotree

Generation

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

Current

algorithms

usually

have

a

pre-execution

phase

to

generate

a

traditional

pseudotree

from

a

general

DCOP

instance.

Our

DCPOP

algorithm

generates

a

cross-edged

pseudotree

in

the

same

fashion.

First,

the

DCOP

instance

X,

D,

U

translates

directly

into

a

graph

with

X

as

the

set

of

vertices

and

an

edge

for

each

pair

of

variables

represented

in

U.

Next,

various

heuristics

are

used

to

arrange

this

graph

into

a

pseudotree.

One

common

heuristic

is

to

perform

a

guided

depth-first

search

(DFS)

as

the

resulting

traversal

is

a

pseudotree,

and

a

DFS

can

easily

be

performed

in

a

distributed

fashion.

We

define

an

edge-traversal

based

method

as

any

method

that

produces

a

pseudotree

in

which

all

parent/child

pairs

share

an

edge

in

the

original

graph.

This

includes

DFS,

breadth-first

search,

and

best-first

search

based

traversals.

Our

heuristics

that

generate

cross-edged

pseudotrees

use

a

distributed

best-first

search

traversal.

DPOP

ALGORITHM

The

original

DPOP

algorithm

operates

in

three

main

phases.

The

first

phase

generates

a

traditional

pseudotree

from

the

DCOP

instance

using

a

distributed

algorithm.

The

second

phase

joins

utility

hypercubes

from

children

and

the

local

node

and

propagates

them

towards

the

root.

The

third

phase

chooses

an

assignment

for

each

domain

in

a

top

down

fashion

beginning

with

the

agent

at

the

root

node.

The

complexity

of

DPOP

depends

on

the

size

of

the

largest

computation

and

utility

message

during

phase

two.

It

has

been

shown

that

this

size

directly

corresponds

to

the

induced

width

of

the

pseudotree

generated

in

phase

one

DPOP

uses

polynomial

time

heuristics

to

generate

the

pseudotree

since

finding

the

minimum

induced

width

pseudotree

is

NP-hard.

Several

distributed

edgetraversal

heuristics

have

been

developed

to

find

low

width

pseudotrees

At

the

end

of

the

first

phase,

each

agent

knows

its

parent,

children,

pseudo-parents,

and

pseudo-children.

Utility

Propagation

Agents

located

at

leaf

nodes

in

the

pseudotree

begin

the

process

by

calculating

a

local

utility

hypercube.

This

hypercube

at

node

X

contains

summed

utilities

for

each

combination

of

values

in

the

domains

for

P(X)

and

PP(X).

This

hypercube

has

dimensional

size

equal

to

the

number

of

pseudo-parents

plus

one.

A

message

containing

this

hypercube

is

sent

to

P(X).

Agents

located

at

non-leaf

nodes

wait

for

all

messages

from

children

to

arrive.

Once

the

agent

at

node

Y

has

all

utility

messages,

it

calculates

its

local

utility

hypercube

which

includes

domains

for

P(Y),

PP(Y),

and

Y.

The

local

utility

hypercube

is

then

joined

with

all

of

the

hypercubes

from

the

child

messages.

At

this

point

all

utilities

involving

node

Y

are

known,

and

the

domain

for

Y

may

be

safely

eliminated

from

the

joined

hypercube.

This

elimination

process

chooses

the

best

utility

over

the

domain

of

Y

for

each

combination

of

the

remaining

domains.

A

message

containing

this

hypercube

is

now

sent

to

P(Y).

The

dimensional

size

of

this

hypercube

depends

on

the

number

of

overlapping

domains

in

received

messages

and

the

local

utility

hypercube.

This

dynamic

programming

based

propagation

phase

continues

until

the

agent

at

the

root

node

of

the

pseudotree

has

received

all

messages

from

its

children.

Value

Propagation

Value

propagation

begins

when

the

agent

at

the

root

node

Z

has

received

all

messages

from

its

children.

Since

Z

has

no

parents

or

pseudo-parents,

it

simply

combines

the

utility

hypercubes

received

from

its

children.

The

combined

hypercube

contains

only

values

for

the

domain

for

Z.

At

this

point

the

agent

at

node

Z

simply

chooses

the

assignment

for

its

domain

that

has

the

best

utility.

A

value

propagation

message

with

this

assignment

is

sent

to

each

node

in

C(Z).

Each

other

node

then

receives

a

value

propagation

message

from

its

parent

and

chooses

the

assignment

for

its

domain

that

has

the

best

utility

given

the

assignments

received

in

the

message.

The

node

adds

its

domain

assignment

to

the

assignments

it

received

and

passes

the

set

of

assignments

to

its

children.

The

algorithm

is

complete

when

all

nodes

have

chosen

an

assignment

for

their

domain.

DCPOP

ALGORITHM

Our

extension

to

the

original

DPOP

algorithm,

shown

in

Algorithm

shares

the

same

three

phases.

The

first

phase

generates

the

cross-edged

pseudotree

for

the

DCOP

instance.

The

second

phase

merges

branches

and

propagates

the

utility

hypercubes.

The

third

phase

chooses

assignments

for

domains

at

branch

merge

points

and

in

a

top

down

fashion,

beginning

with

the

agent

at

the

root

node.

For

the

first

phase

we

generate

a

pseudotree

using

several

distributed

heuristics

and

select

the

one

with

lowest

overall

complexity.

The

complexity

of

the

computation

and

utility

message

size

in

DCPOP

does

not

directly

correspond

to

the

induced

width

of

the

cross-edged

pseudotree.

Instead,

we

use

a

polynomial

time

method

for

calculating

the

maximum

computation

and

utility

message

size

for

a

given

cross-edged

pseudotree.

A

description

of

this

method

and

the

pseudotree

selection

process

appears

in

Section

At

the

end

of

the

first

phase,

each

agent

knows

its

parent,

children,

pseudo-parents,

pseudo-children,

branch-parents,

and

branch-children.

Merging

Branches

and

Utility

Propagation

In

the

original

DPOP

algorithm

a

node

X

only

had

utility

functions

involving

its

parent

and

its

pseudo-parents.

In

DCPOP,

a

node

X

is

allowed

to

have

a

utility

function

involving

a

branch-parent.

The

concept

of

a

branch

can

be

seen

in

Figure

with

node

E

representing

our

node

X.

The

two

distinct

paths

from

node

E

to

node

B

are

called

branches

of

E.

The

single

node

where

all

branches

of

E

meet

is

node

B,

which

is

called

the

merge

point

of

E.

Agents

with

nodes

that

have

branch-parents

begin

by

sending

a

utility

propagation

message

to

each

branch-parent.

This

message

includes

a

two

dimensional

utility

hypercube

with

domains

for

the

node

X

and

the

branch-parent

BP(X).

It

also

includes

a

branch

information

structure

which

contains

the

origination

node

of

the

branch,

X,

the

total

number

of

branches

originating

from

X,

and

the

number

of

branches

originating

from

X

that

are

merged

into

a

single

representation

by

this

branch

information

structure

(this

number

starts

at

Intuitively

when

the

number

of

merged

branches

equals

the

total

number

of

originating

branches,

the

algorithm

has

reached

the

merge

point

for

X.

In

Figure

node

E

sends

a

utility

propagation

message

to

its

branch-parent,

node

D.

This

message

has

dimensions

for

the

domains

of

E

and

D,

and

includes

branch

information

with

an

origin

of

E,

total

branches,

and

merged

branch.

As

in

the

original

DPOP

utility

propagation

phase,

an

agent

at

leaf

node

X

sends

a

utility

propagation

message

to

its

parent.

In

DCPOP

this

message

contains

dimensions

for

the

domains

of

P(X)

and

PP(X).

If

node

X

also

has

branch-parents,

then

the

utility

propagation

message

also

contains

a

dimension

for

the

domain

of

X,

and

will

include

a

branch

information

structure.

In

Figure

node

E

sends

a

utility

propagation

message

to

its

parent,

node

C.

This

message

has

dimensions

for

the

domains

of

E

and

C,

and

includes

branch

information

with

an

origin

of

E,

total

branches,

and

merged

branch.

When

a

node

Y

receives

utility

propagation

messages

from

all

of

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

its

children

and

branch-children,

it

merges

any

branches

with

the

same

origination

node

X.

The

merged

branch

information

structure

accumulates

the

number

of

merged

branches

for

X.

If

the

cumulative

total

number

of

merged

branches

equals

the

total

number

of

branches,

then

Y

is

the

merge

point

for

X.

This

means

that

the

utility

hypercubes

present

at

Y

contain

all

information

about

the

valuations

for

utility

functions

involving

node

X.

In

addition

to

the

typical

elimination

of

the

domain

of

Y

from

the

utility

hypercubes,

we

can

now

safely

eliminate

the

domain

of

X

from

the

utility

hypercubes.

To

illustrate

this

process,

we

will

examine

what

happens

in

the

second

phase

for

node

B

in

Figure

In

the

second

phase

Node

B

receives

two

utility

propagation

messages.

The

first

comes

from

node

C

and

includes

dimensions

for

domains

E,

B,

and

A.

It

also

has

a

branch

information

structure

with

origin

of

E,

total

branches,

and

merged

branch.

The

second

comes

from

node

D

and

includes

dimensions

for

domains

E

and

B.

It

also

has

a

branch

information

structure

with

origin

of

E,

total

branches,

and

merged

branch.

Node

B

then

merges

the

branch

information

structures

from

both

messages

because

they

have

the

same

origination,

node

E.

Since

the

number

of

merged

branches

originating

from

E

is

now

and

the

total

branches

originating

from

E

is

node

B

now

eliminates

the

dimensions

for

domain

E.

Node

B

also

eliminates

the

dimension

for

its

own

domain,

leaving

only

information

about

domain

A.

Node

B

then

sends

a

utility

propagation

message

to

node

A,

containing

only

one

dimension

for

the

domain

of

A.

Although

not

possible

in

DPOP,

this

method

of

utility

propagation

and

dimension

elimination

may

produce

hypercubes

at

node

Y

that

do

not

share

any

domains.

In

DCPOP

we

do

not

join

domain

independent

hypercubes,

but

instead

may

send

multiple

hypercubes

in

the

utility

propagation

message

sent

to

the

parent

of

Y.

This

lazy

approach

to

joins

helps

to

reduce

message

sizes.

Value

Propagation

As

in

DPOP,

value

propagation

begins

when

the

agent

at

the

root

node

Z

has

received

all

messages

from

its

children.

At

this

point

the

agent

at

node

Z

chooses

the

assignment

for

its

domain

that

has

the

best

utility.

If

Z

is

the

merge

point

for

the

branches

of

some

node

X,

Z

will

also

choose

the

assignment

for

the

domain

of

X.

Thus

any

node

that

is

a

merge

point

will

choose

assignments

for

a

domain

other

than

its

own.

These

assignments

are

then

passed

down

the

primary

edge

hierarchy.

If

node

X

in

the

hierarchy

has

branch-parents,

then

the

value

assignment

message

from

P(X)

will

contain

an

assignment

for

the

domain

of

X.

Every

node

in

the

hierarchy

adds

any

assignments

it

has

chosen

to

the

ones

it

received

and

passes

the

set

of

assignments

to

its

children.

The

algorithm

is

complete

when

all

nodes

have

chosen

or

received

an

assignment

for

their

domain.

Proof

of

Correctness

We

will

prove

the

correctness

of

DCPOP

by

first

noting

that

DCPOP

fully

extends

DPOP

and

then

examining

the

two

cases

for

value

assignment

in

DCPOP.

Given

a

traditional

pseudotree

as

input,

the

DCPOP

algorithm

execution

is

identical

to

DPOP.

Using

a

traditional

pseudotree

arrangement

no

nodes

have

branch-parents

or

branch-children

since

all

edges

are

either

back-edges

or

tree

edges.

Thus

the

DCPOP

algorithm

using

a

traditional

pseudotree

sends

only

utility

propagation

messages

that

contain

domains

belonging

to

the

parent

or

pseudo-parents

of

a

node.

Since

no

node

has

any

branch-parents,

no

branches

exist,

and

thus

no

node

serves

as

a

merge

point

for

any

other

node.

Thus

all

value

propagation

assignments

are

chosen

at

the

node

of

the

assignment

domain.

For

DCPOP

execution

with

cross-edged

pseudotrees,

some

nodes

serve

as

merge

points.

We

note

that

any

node

X

that

is

not

a

merge

point

assigns

its

value

exactly

as

in

DPOP.

The

local

utility

hypercube

at

X

contains

domains

for

X,

P(X),

PP(X),

and

BC(X).

As

in

DPOP

the

value

assignment

message

received

at

X

includes

the

values

assigned

to

P(X)

and

PP(X).

Also,

since

X

is

not

a

merge

point,

all

assignments

to

BC(X)

must

have

been

calculated

at

merge

points

higher

in

the

tree

and

are

in

the

value

assignment

message

from

P(X).

Thus

after

eliminating

domains

for

which

assignments

are

known,

only

the

domain

of

X

is

left.

The

agent

at

node

X

can

now

correctly

choose

the

assignment

with

maximum

utility

for

its

own

domain.

If

node

X

is

a

merge

point

for

some

branch-child

Y,

we

know

that

X

must

be

a

node

along

the

path

from

Y

to

the

root,

and

from

P(Y)

and

all

BP(Y)

to

the

root.

From

the

algorithm,

we

know

that

Y

necessarily

has

all

information

from

C(Y),

PC(Y),

and

BC(Y)

since

it

waits

for

their

messages.

Node

X

has

information

about

all

nodes

below

it

in

the

tree,

which

would

include

Y,

P(Y),

BP(Y),

and

those

PP(Y)

that

are

below

X

in

the

tree.

For

any

PP(Y)

above

X

in

the

tree,

X

receives

the

assignment

for

the

domain

of

PP(Y)

in

the

value

assignment

message

from

P(X).

Thus

X

has

utility

information

about

all

of

the

utility

functions

of

which

Y

is

a

part.

By

eliminating

domains

included

in

the

value

assignment

message,

node

X

is

left

with

a

local

utility

hypercube

with

domains

for

X

and

Y.

The

agent

at

node

X

can

now

correctly

choose

the

assignments

with

maximum

utility

for

the

domains

of

X

and

Y.

Complexity

Analysis

The

first

phase

of

DCPOP

sends

one

message

to

each

P(X),

PP(X),

and

BP(X).

The

second

phase

sends

one

value

assignment

message

to

each

C(X).

Thus,

DCPOP

produces

a

linear

number

of

messages

with

respect

to

the

number

of

edges

(utility

functions)

in

the

cross-edged

pseudotree

and

the

original

DCOP

instance.

The

actual

complexity

of

DCPOP

depends

on

two

additional

measurements:

message

size

and

computation

size.

Message

size

and

computation

size

in

DCPOP

depend

on

the

number

of

overlapping

branches

as

well

as

the

number

of

overlapping

back-edges.

It

was

shown

in

that

the

number

of

overlapping

back-edges

is

equal

to

the

induced

width

of

the

pseudotree.

In

a

poorly

constructed

cross-edged

pseudotree,

the

number

of

overlapping

branches

at

node

X

can

be

as

large

as

the

total

number

of

descendants

of

X.

Thus,

the

total

message

size

in

DCPOP

in

a

poorly

constructed

instance

can

be

space-exponential

in

the

total

number

of

nodes

in

the

graph.

However,

in

practice

a

well

constructed

cross-edged

pseudotree

can

achieve

much

better

results.

Later

we

address

the

issue

of

choosing

well

constructed

crossedged

pseudotrees

from

a

set.

We

introduce

an

additional

measurement

of

the

maximum

sequential

path

cost

through

the

algorithm.

This

measurement

directly

relates

to

the

maximum

amount

of

parallelism

achievable

by

the

algorithm.

To

take

this

measurement

we

first

store

the

total

computation

size

for

each

node

during

phase

two

and

three.

This

computation

size

represents

the

number

of

individual

accesses

to

a

value

in

a

hypercube

at

each

node.

For

example,

a

join

between

two

domains

of

size

costs

Two

directed

acyclic

graphs

(DAG)

can

then

be

drawn;

one

with

the

utility

propagation

messages

as

edges

and

the

phase

two

costs

at

nodes,

and

the

other

with

value

assignment

messages

and

the

phase

three

costs

at

nodes.

The

maximum

sequential

path

cost

is

equal

to

the

sum

of

the

longest

path

on

each

DAG

from

the

root

to

any

leaf

node.

HEURISTICS

In

our

assessment

of

complexity

in

DCPOP

we

focused

on

the

worst

case

possibly

produced

by

the

algorithm.

We

acknowledge

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

Algorithm

DCPOP

Algorithm

DCPOP(X;

D;

U)

Each

agent

Xi

executes:

Phase

pseudotree

creation

elect

leader

from

all

Xj

X

elected

leader

initiates

pseudotree

creation

afterwards,

Xi

knows

P(Xi),

PP(Xi),

BP(Xi),

C(Xi),

BC(Xi)

and

PC(Xi)

Phase

UTIL

message

propagation

if

|BP(Xi)|

then

BRANCHXi

|BP(Xi)|

for

all

Xk

∈BP(Xi)

do

UTILXi

(Xk)

←Compute

utils(Xi,

Xk)

Send

message(Xk,UTILXi

(Xk),BRANCHXi

if

|C(Xi)|

Xi

is

a

leaf

node)

then

UTILXi

(P(Xi))

Compute

utils(P(Xi),PP(Xi))

for

all

PP(Xi)

Send

message(P(Xi),

UTILXi

(P(Xi)),BRANCHXi

Send

message(PP(Xi),

empty

UTIL,

empty

BRANCH)

to

all

PP(Xi)

activate

UTIL

Message

handler()

Phase

VALUE

message

propagation

activate

VALUE

Message

handler()

END

ALGORITHM

UTIL

Message

handler(Xk,UTILXk

(Xi),

BRANCHXk

store

UTILXk

(Xi),BRANCHXk

(Xi)

if

UTIL

messages

from

all

children

and

branch

children

arrived

then

for

all

Bj

∈BRANCH(Xi)

do

if

Bj

is

merged

then

join

all

hypercubes

where

Bj

∈UTIL(Xi)

eliminate

Bj

from

the

joined

hypercube

if

P(Xi)

(that

means

Xi

is

the

root)

then

v

i

Choose

optimal(null)

Send

VALUE(Xi,

v

i)

to

all

C(Xi)

else

UTILXi

(P(Xi))

Compute

utils(P(Xi),

PP(Xi))

Send

message(P(Xi),UTILXi

(P(Xi)),

BRANCHXi

(P(Xi)))

VALUE

Message

handler(VALUEXi

,P(Xi))

add

all

Xk

v

k

∈VALUEXi

,P(Xi)

to

agent

view

Xi

v

i

=Choose

optimal(agent

view)

Send

VALUEXl

Xi

to

all

Xl

∈C(Xi)

that

in

real

world

problems

the

generation

of

the

pseudotree

has

a

significant

impact

on

the

actual

performance.

The

problem

of

finding

the

best

pseudotree

for

a

given

DCOP

instance

is

NP-Hard.

Thus

a

heuristic

is

used

for

generation,

and

the

performance

of

the

algorithm

depends

on

the

pseudotree

found

by

the

heuristic.

Some

previous

research

focused

on

finding

heuristics

to

generate

good

pseudotrees

While

we

have

developed

some

heuristics

that

generate

good

cross-edged

pseudotrees

for

use

with

DCPOP,

our

focus

has

been

to

use

multiple

heuristics

and

then

select

the

best

pseudotree

from

the

generated

pseudotrees.

We

consider

only

heuristics

that

run

in

polynomial

time

with

respect

to

the

number

of

nodes

in

the

original

DCOP

instance.

The

actual

DCPOP

algorithm

has

worst

case

exponential

complexity,

but

we

can

calculate

the

maximum

message

size,

computation

size,

and

sequential

path

cost

for

a

given

cross-edged

pseudotree

in

linear

space-time

complexity.

To

do

this,

we

simply

run

the

algorithm

without

attempting

to

calculate

any

of

the

local

utility

hypercubes

or

optimal

value

assignments.

Instead,

messages

include

dimensional

and

branch

information

but

no

utility

hypercubes.

After

each

heuristic

completes

its

generation

of

a

pseudotree,

we

execute

the

measurement

procedure

and

propagate

the

measurement

information

up

to

the

chosen

root

in

that

pseudotree.

The

root

then

broadcasts

the

total

complexity

for

that

heuristic

to

all

nodes.

After

all

heuristics

have

had

a

chance

to

complete,

every

node

knows

which

heuristic

produced

the

best

pseudotree.

Each

node

then

proceeds

to

begin

the

DCPOP

algorithm

using

its

knowledge

of

the

pseudotree

generated

by

the

best

heuristic.

The

heuristics

used

to

generate

traditional

pseudotrees

perform

a

distributed

DFS

traversal.

The

general

distributed

algorithm

uses

a

token

passing

mechanism

and

a

linear

number

of

messages.

Improved

DFS

based

heuristics

use

a

special

procedure

to

choose

the

root

node,

and

also

provide

an

ordering

function

over

the

neighbors

of

a

node

to

determine

the

order

of

path

recursion.

The

DFS

based

heuristics

used

in

our

experiments

come

from

the

work

done

in

The

best-first

cross-edged

pseudotree

heuristic

The

heuristics

used

to

generate

cross-edged

pseudotrees

perform

a

best-first

traversal.

A

general

distributed

best-first

algorithm

for

node

expansion

is

presented

in

Algorithm

An

evaluation

function

at

each

node

provides

the

values

that

are

used

to

determine

the

next

best

node

to

expand.

Note

that

in

this

algorithm

each

node

only

exchanges

its

best

value

with

its

neighbors.

In

our

experiments

we

used

several

evaluation

functions

that

took

as

arguments

an

ordered

list

of

ancestors

and

a

node,

which

contains

a

list

of

neighbors

(with

each

neighbor"s

placement

depth

in

the

tree

if

it

was

placed).

From

these

we

can

calculate

branchparents,

branch-children,

and

unknown

relationships

for

a

potential

node

placement.

The

best

overall

function

calculated

the

value

as

ancestors−(branchparents+branchchildren)

with

the

number

of

unknown

relationships

being

a

tiebreak.

After

completion

each

node

has

knowledge

of

its

parent

and

ancestors,

so

it

can

easily

determine

which

connected

nodes

are

pseudo-parents,

branchparents,

pseudo-children,

and

branch-children.

The

complexity

of

the

best-first

traversal

depends

on

the

complexity

of

the

evaluation

function.

Assuming

a

complexity

of

O(V

for

the

evaluation

function,

which

is

the

case

for

our

best

overall

function,

the

best-first

traversal

is

O(V

E)

which

is

at

worst

For

each

v

V

we

perform

a

place

operation,

and

find

the

next

node

to

place

using

the

getBestNeighbor

operation.

The

place

operation

is

at

most

O(V

because

of

the

sent

messages.

Finding

the

next

node

uses

recursion

and

traverses

only

already

placed

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

Algorithm

Distributed

Best-First

Search

Algorithm

root

electedleader

next(root,

place(node,

parent)

node.parent

parent

node.ancestors

parent.ancestors

parent

send

placement

message

(node,

node.ancestors)

to

all

neighbors

of

node

next(current,

previous)

if

current

is

not

placed

then

place(current,

previous)

next(current,

else

best

getBestNeighbor(current,

previous)

if

best

then

if

previous

then

terminate,

all

nodes

are

placed

next(previous,

else

next(best,

current)

getBestNeighbor(current,

previous)

best

score

for

all

n

current.neighbors

do

if

n!

previous

then

if

n

is

placed

then

nscore

getBestNeighbor(n,

current)

else

nscore

evaluate(current,

n)

if

nscore

score

then

score

nscore

best

n

return

best,

score

nodes,

so

it

has

O(V

recursions.

Each

recursion

performs

a

recursive

getBestNeighbor

operation

that

traverses

all

placed

nodes

and

their

neighbors.

This

operation

is

O(V

E),

but

results

can

be

cached

using

only

O(V

space

at

each

node.

Thus

we

have

O(V

·(V

+V

+V

·E))

O(V

·E).

If

we

are

smart

about

evaluating

local

changes

when

each

node

receives

placement

messages

from

its

neighbors

and

cache

the

results

the

getBestNeighbor

operation

is

only

O(E).

This

increases

the

complexity

of

the

place

operation,

but

for

all

placements

the

total

complexity

is

only

O(V

E).

Thus

we

have

an

overall

complexity

of

O(V

·E+V

·(V

+E))

O(V

·E).

COMPARISON

OF

COMPLEXITY

IN

DPOP

AND

DCPOP

We

have

already

shown

that

given

the

same

input,

DCPOP

performs

the

same

as

DPOP.

We

also

have

shown

that

we

can

accurately

predict

performance

of

a

given

pseudotree

in

linear

spacetime

complexity.

If

we

use

a

constant

number

of

heuristics

to

generate

the

set

of

pseudotrees,

we

can

choose

the

best

pseudotree

in

linear

space-time

complexity.

We

will

now

show

that

there

exists

a

DCOP

instance

for

which

a

cross-edged

pseudotree

outperforms

all

possible

traditional

pseudotrees

(based

on

edge-traversal

heuristics).

In

Figure

we

have

a

DCOP

instance

with

six

nodes.

This

is

a

bipartite

graph

with

each

partition

fully

connected

to

the

other

(a)

(b)

(c)

Figure

(a)

The

DCOP

instance

(b)

A

traditional

pseudotree

arrangement

for

the

DCOP

instance

(c)

A

cross-edged

pseudotree

arrangement

for

the

DCOP

instance

partition.

In

Figure

we

see

a

traditional

pseudotree

arrangement

for

this

DCOP

instance.

It

is

easy

to

see

that

any

edgetraversal

based

heuristic

cannot

expand

two

nodes

from

the

same

partition

in

succession.

We

also

see

that

no

node

can

have

more

than

one

child

because

any

such

arrangement

would

be

an

invalid

pseudotree.

Thus

any

traditional

pseudotree

arrangement

for

this

DCOP

instance

must

take

the

form

of

Figure

We

can

see

that

the

back-edges

F-B

and

F-A

overlap

node

C.

Node

C

also

has

a

parent

E,

and

a

back-edge

with

D.

Using

the

original

DPOP

algorithm

(or

DCPOP

since

they

are

identical

in

this

case),

we

find

that

the

computation

at

node

C

involves

five

domains:

A,

B,

C,

D,

and

E.

In

contrast,

the

cross-edged

pseudotree

arrangement

in

Figure

requires

only

a

maximum

of

four

domains

in

any

computation

during

DCPOP.

Since

node

A

is

the

merge

point

for

branches

from

both

B

and

C,

we

can

see

that

each

of

the

nodes

D,

E,

and

F

have

two

overlapping

branches.

In

addition

each

of

these

nodes

has

node

A

as

its

parent.

Using

the

DCPOP

algorithm

we

find

that

the

computation

at

node

D

(or

E

or

F)

involves

four

domains:

A,

B,

C,

and

D

(or

E

or

F).

Since

no

better

traditional

pseudotree

arrangement

can

be

created

using

an

edge-traversal

heuristic,

we

have

shown

that

DCPOP

can

outperform

DPOP

even

if

we

use

the

optimal

pseudotree

found

through

edge-traversal.

We

acknowledge

that

pseudotree

arrangements

that

allow

parent-child

relationships

without

an

actual

constraint

can

solve

the

problem

in

Figure

with

maximum

computation

size

of

four

domains.

However,

current

heuristics

used

with

DPOP

do

not

produce

such

pseudotrees,

and

such

a

heuristic

would

be

difficult

to

distribute

since

each

node

would

require

information

about

nodes

with

which

it

has

no

constraint.

Also,

while

we

do

not

prove

it

here,

cross-edged

pseudotrees

can

produce

smaller

message

sizes

than

such

pseudotrees

even

if

the

computation

size

is

similar.

In

practice,

since

finding

the

best

pseudotree

arrangement

is

NP-Hard,

we

find

that

heuristics

that

produce

cross-edged

pseudotrees

often

produce

significantly

smaller

computation

and

message

sizes.

EXPERIMENTAL

RESULTS

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

Existing

performance

metrics

for

DCOP

algorithms

include

the

total

number

of

messages,

synchronous

clock

cycles,

and

message

size.

We

have

already

shown

that

the

total

number

of

messages

is

linear

with

respect

to

the

number

of

constraints

in

the

DCOP

instance.

We

also

introduced

the

maximum

sequential

path

cost

(PC)

as

a

measurement

of

the

maximum

amount

of

parallelism

achievable

by

the

algorithm.

The

maximum

sequential

path

cost

is

equal

to

the

sum

of

the

computations

performed

on

the

longest

path

from

the

root

to

any

leaf

node.

We

also

include

as

metrics

the

maximum

computation

size

in

number

of

dimensions

(CD)

and

maximum

message

size

in

number

of

dimensions

(MD).

To

analyze

the

relative

complexity

of

a

given

DCOP

instance,

we

find

the

minimum

induced

width

(IW)

of

any

traditional

pseudotree

produced

by

a

heuristic

for

the

original

DPOP.

Generic

DCOP

instances

For

our

initial

tests

we

randomly

generated

two

sets

of

problems

with

cases

in

each.

Each

problem

was

generated

by

assigning

a

random

number

(picked

from

a

range)

of

constraints

to

each

variable.

The

generator

then

created

binary

constraints

until

each

variable

reached

its

maximum

number

of

constraints.

The

first

set

uses

variables,

and

the

best

DPOP

IW

ranges

from

to

with

an

average

of

The

second

set

uses

variables,

and

the

best

DPOP

IW

ranged

from

to

with

an

average

of

Since

most

of

the

problems

in

the

second

set

were

too

complex

to

actually

compute

the

solution,

we

took

measurements

of

the

metrics

using

the

techniques

described

earlier

in

Section

without

actually

solving

the

problem.

Results

are

shown

for

the

first

set

in

Table

and

for

the

second

set

in

Table

For

the

two

problem

sets

we

split

the

cases

into

low

density

and

high

density

categories.

Low

density

cases

consist

of

those

problems

that

have

a

best

DPOP

IW

less

than

or

equal

to

half

of

the

total

number

of

nodes

(e.g.

IW

for

the

node

problems

and

IW

for

the

node

problems).

High

density

problems

consist

of

the

remainder

of

the

problem

sets.

In

both

Table

and

Table

we

have

listed

performance

metrics

for

the

original

DPOP

algorithm,

the

DCPOP

algorithm

using

only

cross-edged

pseudotrees

(DCPOP-CE),

and

the

DCPOP

algorithm

using

traditional

and

cross-edged

pseudotrees

(DCPOP-All).

The

pseudotrees

used

for

DPOP

were

generated

using

heuristics:

DFS,

DFS

MCN,

DFS

CLIQUE

MCN,

DFS

MCN

DSTB,

and

DFS

MCN

BEC.

These

are

all

versions

of

the

guided

DFS

traversal

discussed

in

Section

The

cross-edged

pseudotrees

used

for

DCPOP-CE

were

generated

using

heuristics:

MCN,

LCN,

MCN

A-B,

LCN

A-B,

and

LCSG

A-B.

These

are

all

versions

of

the

best-first

traversal

discussed

in

Section

For

both

DPOP

and

DCPOP-CE

we

chose

the

best

pseudotree

produced

by

their

respective

heuristics

for

each

problem

in

the

set.

For

DCPOP-All

we

chose

the

best

pseudotree

produced

by

all

heuristics

for

each

problem

in

the

set.

For

the

CD

and

MD

metrics

the

value

shown

is

the

average

number

of

dimensions.

For

the

PC

metric

the

value

shown

is

the

natural

logarithm

of

the

maximum

sequential

path

cost

(since

the

actual

value

grows

exponentially

with

the

complexity

of

the

problem).

The

final

row

in

both

tables

is

a

measurement

of

improvement

of

DCPOP-All

over

DPOP.

For

the

CD

and

MD

metrics

the

value

shown

is

a

reduction

in

number

of

dimensions.

For

the

PC

metric

the

value

shown

is

a

percentage

reduction

in

the

maximum

sequential

path

cost

DP

OP

−DCP

OP

DCP

OP

Notice

that

DCPOPAll

outperforms

DPOP

on

all

metrics.

This

logically

follows

from

our

earlier

assertion

that

given

the

same

input,

DCPOP

performs

exactly

the

same

as

DPOP.

Thus

given

the

choice

between

the

pseudotrees

produced

by

all

heuristics,

DCPOP-All

will

always

outLow

Density

High

Density

Algorithm

CD

MD

PC

CD

MD

PC

DPOP

DCPOP-CE

DCPOP-All

Improvement

Table

node

problems

Low

Density

High

Density

Algorithm

CD

MD

PC

CD

MD

PC

DPOP

DCPOP-CE

DCPOP-All

Improvement

Table

node

problems

Figure

Computation

Dimension

Size

Figure

Message

Dimension

Size

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

Figure

Path

Cost

DCPOP

Improvement

Ag

Mtg

Vars

Const

IW

CD

MD

PC

Table

Meeting

Scheduling

Problems

perform

DPOP.

Another

trend

we

notice

is

that

the

improvement

is

greater

for

high

density

problems

than

low

density

problems.

We

show

this

trend

in

greater

detail

in

Figures

and

Notice

how

the

improvement

increases

as

the

complexity

of

the

problem

increases.

Meeting

Scheduling

Problem

In

addition

to

our

initial

generic

DCOP

tests,

we

ran

a

series

of

tests

on

the

Meeting

Scheduling

Problem

(MSP)

as

described

in

The

problem

setup

includes

a

number

of

people

that

are

grouped

into

departments.

Each

person

must

attend

a

specified

number

of

meetings.

Meetings

can

be

held

within

departments

or

among

departments,

and

can

be

assigned

to

one

of

eight

time

slots.

The

MSP

maps

to

a

DCOP

instance

where

each

variable

represents

the

time

slot

that

a

specific

person

will

attend

a

specific

meeting.

All

variables

that

belong

to

the

same

person

have

mutual

exclusion

constraints

placed

so

that

the

person

cannot

attend

more

than

one

meeting

during

the

same

time

slot.

All

variables

that

belong

to

the

same

meeting

have

equality

constraints

so

that

all

of

the

participants

choose

the

same

time

slot.

Unary

constraints

are

placed

on

each

variable

to

account

for

a

person"s

valuation

of

each

meeting

and

time

slot.

For

our

tests

we

generated

sample

problems

for

each

combination

of

agents

and

meetings.

Results

are

shown

in

Table

The

values

in

the

first

five

columns

represent

(in

left

to

right

order),

the

total

number

of

agents,

the

total

number

of

meetings,

the

total

number

of

variables,

the

average

total

number

of

constraints,

and

the

average

minimum

IW

produced

by

a

traditional

pseudotree.

The

last

three

columns

show

the

same

metrics

we

used

for

the

generic

DCOP

instances,

except

this

time

we

only

show

the

improvements

of

DCPOP-All

over

DPOP.

Performance

is

better

on

average

for

all

MSP

instances,

but

again

we

see

larger

improvements

for

more

complex

problem

instances.

CONCLUSIONS

AND

FUTURE

WORK

We

presented

a

complete,

distributed

algorithm

that

solves

general

DCOP

instances

using

cross-edged

pseudotree

arrangements.

Our

algorithm

extends

the

DPOP

algorithm

by

adding

additional

utility

propagation

messages,

and

introducing

the

concept

of

branch

merging

during

the

utility

propagation

phase.

Our

algorithm

also

allows

value

assignments

to

occur

at

higher

level

merge

points

for

lower

level

nodes.

We

have

shown

that

DCPOP

fully

extends

DPOP

by

performing

the

same

operations

given

the

same

input.

We

have

also

shown

through

some

examples

and

experimental

data

that

DCPOP

can

achieve

greater

performance

for

some

problem

instances

by

extending

the

allowable

input

set

to

include

cross-edged

pseudotrees.

We

placed

particular

emphasis

on

the

role

that

edge-traversal

heuristics

play

in

the

generation

of

pseudotrees.

We

have

shown

that

the

performance

penalty

is

minimal

to

generate

multiple

heuristics,

and

that

we

can

choose

the

best

generated

pseudotree

in

linear

space-time

complexity.

Given

the

importance

of

a

good

pseudotree

for

performance,

future

work

will

include

new

heuristics

to

find

better

pseudotrees.

Future

work

will

also

include

adapting

existing

DPOP

extensions

that

support

different

problem

domains

for

use

with

DCPOP.

REFERENCES

J.

Liu

and

K.

P.

Sycara.

Exploiting

problem

structure

for

distributed

constraint

optimization.

In

V.

Lesser,

editor,

Proceedings

of

the

First

International

Conference

on

Multi-Agent

Systems,

pages

San

Francisco,

CA,

MIT

Press.

P.

J.

Modi,

H.

Jung,

M.

Tambe,

W.-M.

Shen,

and

S.

Kulkarni.

A

dynamic

distributed

constraint

satisfaction

approach

to

resource

allocation.

Lecture

Notes

in

Computer

Science,

P.

J.

Modi,

W.

Shen,

M.

Tambe,

and

M.

Yokoo.

An

asynchronous

complete

method

for

distributed

constraint

optimization.

In

AAMAS

A.

Petcu.

Frodo:

A

framework

for

open/distributed

constraint

optimization.

Technical

Report

No.

Swiss

Federal

Institute

of

Technology

(EPFL),

Lausanne

(Switzerland),

A.

Petcu

and

B.

Faltings.

A-dpop:

Approximations

in

distributed

optimization.

In

poster

in

CP

pages

Sitges,

Spain,

October

A.

Petcu

and

B.

Faltings.

Dpop:

A

scalable

method

for

multiagent

constraint

optimization.

In

IJCAI

pages

Edinburgh,

Scotland,

Aug

A.

Petcu,

B.

Faltings,

and

D.

Parkes.

M-dpop:

Faithful

distributed

implementation

of

efficient

social

choice

problems.

In

AAMAS

pages

Hakodate,

Japan,

May

G.

Ushakov.

Solving

meeting

scheduling

problems

using

distributed

pseudotree-optimization

procedure.

Master"s

thesis,

´Ecole

Polytechnique

F´ed´erale

de

Lausanne,

M.

Yokoo,

E.

H.

Durfee,

T.

Ishida,

and

K.

Kuwabara.

Distributed

constraint

satisfaction

for

formalizing

distributed

problem

solving.

In

International

Conference

on

Distributed

Computing

Systems,

pages

M.

Yokoo,

E.

H.

Durfee,

T.

Ishida,

and

K.

Kuwabara.

The

distributed

constraint

satisfaction

problem:

Formalization

and

algorithms.

Knowledge

and

Data

Engineering,

The

Sixth

Intl.

Joint

Conf.

on

Autonomous

Agents

and

Multi-Agent

Systems

(AAMAS

O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O B I I O O B I O O O O B O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O B I O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O

distribute constraint satisfaction and optimization

distributed constraint optimization
pseudotree arrangement
agent
maximum sequential path cost
job shop scheduling
resource allocation
teamwork coordination
global utility