Friday 22 May 2009

maraIRAgents

Just finished the first version of the 'maraIRAgents' implementation (2 agents, 1+ resources each, 1 goal each, distributed fulfils plans).

Seems to run and not loop infinitely but identified a problem case, as follows:

-----

a1: goal(a1,g1), has(a1,r1), fulfils(r2,g1)
a2: goal(a2,g2), has(a2,r2), fulfils(r1,g1), fulfils(r2,g2)

-----

If a2 can communicate fulfils(r1,g1) to a1 then both agents end successfully but this doesn't happen.

Solution: Responding agent should only agree to a response if one of the two agents end up better off (similar to the condition for initiating a request). Otherwise it should refuse providing argument as such.

Wednesday 20 May 2009

Deliberation Examples

I need to think of an example for a multi-agent deliberation-like dialogue to include in a forthcoming paper. Here are some first tries:

--- 1 ---

swapAppointments(Ag1,Ag2,App1,App2) <- requires(Ag1,Req1), fulfils(App2,Req1), has(Ag1,App1), ¬fulfils(App1,Req1), canSwap(Ag2,App2,App1)

cantSwap(Ag,App1,App2) <- ¬has(Ag,App1)

cantSwap(Ag,App1,App2) <- has(Ag,App1), requires(Ag,Req), fulfils(App1,Req), ¬fulfils(App2,Req)

Assumptions = {¬fulfils(App,Req), canSwap(Ag,App1,App2)}

Contrary(¬fulfils(App,Req)) = fulfils(App,Req)
Contrary(canSwap(Ag,App1,App2)) = cantSwap(Ag,App1,App2)

Consider two concrete agents, ag1 and ag2, with initial private beliefs as follows:
Priv(ag1) = {has(ag1,app1), requires(ag1,fridayAppointment), fulfils(app1,morningAppointment), fulfils(app2,fridayAppointment)}
Priv(ag2) = {has(ag2,app2), requires(ag2,morningAppointment), fulfils(app2,morningAppointment)}

--- 2 ---

buy(House) <- withinBudget(House), goodLocation(House)

badLocation(House) <- farFromWork(House), badTransportLinks(House)

goodTransportLinks(House) <- nearBusStop(House), frequentBusService(House)

Assumptions = {goodLocation(House), badTransportLinks(House), frequentBusService(House)}

Contrary(goodLocation(House)) = badLocation(House)

Contrary(badTransportLinks(House)) = goodTransportLinks(House)

Contrary(frequentBusService(House)) = infrequentBusService(House)

Consider two concrete agents, ag1 and ag2, with initial private beliefs as follows:
Priv(ag1) = {withinBudget(house1), nearBusStop(house1)}
Priv(ag2) = {farFromWork(house1)}

--- 3 ---

watch(Ag1,Ag2,Film) <- criticallyAcclaimed(Film), willLike(Ag1,Film), willLike(Ag2,Film)

wontLike(ag2,Film) <- actor(Film,timRobbins), boring(Film)

¬boring(Film) <- actor(Film,morganFreeman), goodUserRating(Film)

Assumptions = {willLike(Ag,Film), boring(Film), goodUserRating(Film)}

Contrary(willLike(Ag,Film)) = wontLike(Ag,Film)

Contrary(boring(Film)) = ¬boring(Film)

Contrary(goodUserRating(Film)) = badUserRating(Film)

Consider two concrete agents, ag1 and ag2, with initial private beliefs as follows:
Priv(ag1) = {criticallyAcclaimed(shawshankRedemption), actor(shawshankRedemption,morganFreeman)}
Priv(ag2) = {actor(shawshankRedemption,timRobbins)}

------

Wednesday 6 May 2009

Reviewing the eumas08 negotiation policy

Consider an agent system consisting of 2 agents and 2 resources as follows:

a1 has r1 and needs r1, r2
a2 has r2 and needs r1, r2

According to the eumas08 negotiation policy (simple and reason-based procedures) both agents end unsuccessfully. However, a1 could end successfully if a2 gave it r2. Likewise, a2 could end successfully if a1 gave it r1. However, according to the policy, neither will make this sacrifice and thus an optimal (maximal) number of agents that end successfully is not reached.

Consider including offers/arguments of the form: "Your goal G of obtaining R1, ..., Rn is not achievable because ... so give me Ri".

Monday 4 May 2009

Computing for Kids

I need to demonstrate/explain Computing to young children (9 years of age) in a fun/interactive way. I thought of the following group exercises:

Find Median - split children into teams of 7 or 9, have each team make a line, give each child in the team a number (in no particular order), ask the children in their teams to work out the middle (median) number. The key is for them to first assign a captain and order themselves by their numbers (highest to lowest or lowest to highest).

Bubble Sort - split children into teams, have each team make a line with each child spaced out from the next by one metre, give each child in the team a number (in no particular order), ask the children to sort themselves (highest to lowest or lowest to highest) by only being allowed to speak to the person immediately in front or behind. Can't get around this problem by assigning a captain!

Resource Allocation - split children into teams of 7ish, have each team make a circle, give each child in the team an item (chocolate?) and a goal (item to obtain), ask the children to maximise the number of "happy" children in their teams. Need to think of cases involving conflict.

Friday 1 May 2009

Changes to Prolog deduction program

Made changes to my Prolog 'deduction' program to (properly) allow 'member', '\==' and '>' prefix predicates/operators to be used in the 'body' of 'rule' predicates.