|
From: <jom...@us...> - 2008-05-02 08:43:50
|
Revision: 1283
http://jason.svn.sourceforge.net/jason/?rev=1283&view=rev
Author: jomifred
Date: 2008-05-02 01:43:47 -0700 (Fri, 02 May 2008)
Log Message:
-----------
jason team: use pattern for org goal
new experimental syntax for { ... } terms (they can be placed after ")" as in
.for( .member(X,[a,b,c]) ) {
.print(X)
};
it is more similar to java/c
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/tests/TestLoop.java
trunk/applications/jason-team/AC-Local-JasonTeam.mas2j
trunk/applications/jason-team/doc/roles/ac2008-roles.tex
trunk/applications/jason-team/src/asl/exploration.asl
trunk/applications/jason-team/src/asl/gaucho.asl
trunk/applications/jason-team/src/asl/herding.asl
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
Added Paths:
-----------
trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java
Modified: trunk/applications/as-unit-test/src/jason/tests/TestLoop.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/TestLoop.java 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/applications/as-unit-test/src/jason/tests/TestLoop.java 2008-05-02 08:43:47 UTC (rev 1283)
@@ -20,9 +20,9 @@
"p(1,a). p(2,a). p(3,b). p(4,b). p(6,a). "+
"+!test1 <- .while( .count(b(_),N) & N < 4, {+b(N+1) })."+
- "+!test2 <- L=4; .while( .count(b(_)) < L { ?b(X); +b(X+1) }); jason.asunit.print(end). "+
+ "+!test2 <- L=4; .while( .count(b(_)) < L) { ?b(X); +b(X+1) }; jason.asunit.print(end). "+
- "+!test3 <- L=4; .for( p(N,a) & N < L { jason.asunit.print(N) }); jason.asunit.print(end). "+
+ "+!test3 <- L=4; .for( p(N,a) & N < L) { jason.asunit.print(N) }; jason.asunit.print(end). "+
"+!test4 <- .for( .member(N, [1,3,4]), { jason.asunit.print(N) }); jason.asunit.print(end). "
);
Modified: trunk/applications/jason-team/AC-Local-JasonTeam.mas2j
===================================================================
--- trunk/applications/jason-team/AC-Local-JasonTeam.mas2j 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/applications/jason-team/AC-Local-JasonTeam.mas2j 2008-05-02 08:43:47 UTC (rev 1283)
@@ -45,6 +45,7 @@
agentClass agent.SelectEvent
beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","ally_pos(key,_,_)","corral(_,_,_,_)");
+ directives: maintenance_goal = agent.OrgMaintenanceGoal;
+
aslSourcePath: "src/asl";
-
}
Modified: trunk/applications/jason-team/doc/roles/ac2008-roles.tex
===================================================================
--- trunk/applications/jason-team/doc/roles/ac2008-roles.tex 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/applications/jason-team/doc/roles/ac2008-roles.tex 2008-05-02 08:43:47 UTC (rev 1283)
@@ -291,6 +291,42 @@
\ascomment{}
+
+\section{Some algorithms}
+
+\subsection{Cluster identification}
+
+some how based on Hierarchical Clustering Algorithms
+http://home.dei.polimi.it/matteucc/Clustering/tutorial\_html
+
+\begin{verbatim}
+V = set of all seen cows sorted by the distance to the center of V
+C = { the cow near to the center of V }
+
+add = true
+while (add)
+ add = false
+ for all v in V
+ if (some cow in C sees v)
+ add v in C
+ add = true
+\end{verbatim}
+
+\subsection{Merging clusters/groups}
+
+performed by each herder of group gi
+\begin{verbatim}
+for all herding groups gj with id > gi.id
+
+let Si the set of cows seen by agents of group gi
+let Sj the set of cows seen by agents of group gj
+if Si intersect Sj not empty
+ // merge condition
+ group gj is removed from the organisation
+ all agents from gj adopt scouter in gi
+\end{verbatim}
+
+
\section{TODO list}
\begin{enumerate}
Modified: trunk/applications/jason-team/src/asl/exploration.asl
===================================================================
--- trunk/applications/jason-team/src/asl/exploration.asl 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/applications/jason-team/src/asl/exploration.asl 2008-05-02 08:43:47 UTC (rev 1283)
@@ -14,7 +14,7 @@
/* plans for the team's groups creation */
+!create_team_group
- <- .print("oooo creating new team group -- ************************************************ ");
+ <- .print("oooo creating new team group ------------------------------------------------- ");
!remove_org;
jmoise.create_group(team).
@@ -45,9 +45,9 @@
: .my_name(Me) &
agent_id(Me,AgId) &
AgId mod 2 == 1 // I have an odd Id
- <- .if( .my_name(gaucho1) {
+ <- .if( .my_name(gaucho1) ) {
!create_team_group
- });
+ };
.print("ooo Recruiting scouters for my explorer group....");
@@ -55,10 +55,10 @@
?pos(MyX,MyY,_);
// wait others pos
- .while( .count(ally_pos(_,_,_), N) & N < 5 {
+ .while( .count(ally_pos(_,_,_), N) & N < 5 ) {
.print("ooo waiting others pos ");
.wait("+ally_pos(_,_,_)", 500, nofail)
- });
+ };
// find distance to even agents
.findall(ag_d(D,AgName),
@@ -95,6 +95,8 @@
// TODO: make a pattern for organisational maintainance goal
+{ begin maintenance_goal("+pos(_,_,_)") }
+
+!goto_near_unvisited[scheme(Sch),mission(Mission)]
<- .print("ooo I should find the nearest unvisited location and go there!");
.my_name(Me);
@@ -102,19 +104,27 @@
?group_area(_,GroupId, Area); // get the area of this group
?pos(MeX, MeY, _); // get my location
jia.near_least_visited(MeX, MeY, Area, TargetX, TargetY);
- -+target(TargetX, TargetY);
+ -+target(TargetX, TargetY).
+
+ /* added by the pattern
.wait("+pos(_,_,_)"); // wait next cycle
- !!goto_near_unvisited[scheme(Sch),mission(Mission)].
+ !!goto_near_unvisited[scheme(Sch),mission(Mission)]
+ */
+
+{ end }
+/* added by the pattern
-!goto_near_unvisited[scheme(Sch),mission(Mission)]
<- .current_intention(I);
.print("ooo Failure to goto_near_unvisited ",I);
.wait("+pos(_,_,_)"); // wait next cycle
!!goto_near_unvisited[scheme(Sch),mission(Mission)].
-
+*/
/* -- plans for the goals of role scouter -- */
+{ begin maintenance_goal("+pos(_,_,_)") }
+
+!follow_leader[scheme(Sch),group(Gr)]
: play(Leader, explorer, Gr)
<- .print("ooo I should follow the leader ",Leader);
@@ -124,22 +134,14 @@
jia.dist(MyX, MyY, LX, LY, DistanceToLeader);
// If I am far from him, go to him
- .if( DistanceToLeader > (AGPR * 2) -3, {
+ .if( DistanceToLeader > (AGPR * 2) -3) {
.print("ooo Approaching leader.");
-+target(LX,LY)
- }, {
+ }{
.print("ooo being in formation with leader.");
.send(Leader,askOne,target(X,Y),target(TX,TY));
jia.scouter_pos(LX, LY, TX, TY, SX, SY);
-+target(SX,SY)
- });
-
- .wait("+pos(_,_,_)"); // wait next cycle
- !!follow_leader[scheme(Sch),group(Gr)].
-
--!follow_leader[scheme(Sch),group(Gr)]
- <- .current_intention(I);
- .print("ooo Failure to follow_leader ",I);
- .wait("+pos(_,_,_)"); // wait next cycle
- !!follow_leader[scheme(Sch),group(Gr)].
-
\ No newline at end of file
+ }
+
+{ end }
Modified: trunk/applications/jason-team/src/asl/gaucho.asl
===================================================================
--- trunk/applications/jason-team/src/asl/gaucho.asl 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/applications/jason-team/src/asl/gaucho.asl 2008-05-02 08:43:47 UTC (rev 1283)
@@ -95,13 +95,13 @@
// remove all groups and schemes (only agent1 does that)
+!remove_org
: .my_name(gaucho1)
- <- .if( group(team,Old) {
+ <- .if( group(team,Old) ) {
jmoise.remove_group(Old)
- });
+ };
- .for( scheme(_,SchId) {
+ .for( scheme(_,SchId)) {
jmoise.remove_scheme(SchId)
- }).
+ }.
+!remove_org.
// finish the scheme if it has no more players
Modified: trunk/applications/jason-team/src/asl/herding.asl
===================================================================
--- trunk/applications/jason-team/src/asl/herding.asl 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/applications/jason-team/src/asl/herding.asl 2008-05-02 08:43:47 UTC (rev 1283)
@@ -5,21 +5,23 @@
/* -- plans for the goals of role herder -- */
+{ begin maintenance_goal("+pos(_,_,_)") }
+
+!recruit[scheme(Sch)]
- <- .print("ooo I should revise the size of the cluster and recruit!");
- // TODO
- .wait("+pos(_,_,_)"); // wait next cycle
- !!recruit[scheme(Sch)].
+ <- .print("ooo I should revise the size of the cluster and recruit!").
+{ end }
+{ begin maintenance_goal("+pos(_,_,_)") }
+
+!define_formation[scheme(Sch)]
<- .print("ooo I should define the formation of my group!");
?my_group_players(G, herder);
jia.herd_position(.length(G),L);
.print("ooo formation is ",L);
- !alloc_all(G,L);
- .wait("+pos(_,_,_)"); // wait next cycle
- !!define_formation[scheme(Sch)].
+ !alloc_all(G,L).
+
+{ end }
+!alloc_all([],LA).
+!alloc_all([HA|TA],LA)
@@ -45,9 +47,10 @@
/* -- plans for the goals of all roles (herder and herdboy) -- */
+{ begin maintenance_goal("+pos(_,_,_)") }
+
+!be_in_formation[scheme(Sch)]
- <- .print("ooo I should be in formation!");
+ <- .print("ooo I should be in formation!").
// TODO
- .wait("+pos(_,_,_)"); // wait next cycle
- !!be_in_formation[scheme(Sch)].
-
+
+{ end }
Added: trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java
===================================================================
--- trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java (rev 0)
+++ trunk/applications/jason-team/src/java/agent/OrgMaintenanceGoal.java 2008-05-02 08:43:47 UTC (rev 1283)
@@ -0,0 +1,63 @@
+package agent;
+
+import jason.asSemantics.Agent;
+import jason.asSyntax.InternalActionLiteral;
+import jason.asSyntax.Literal;
+import jason.asSyntax.Plan;
+import jason.asSyntax.PlanBody;
+import jason.asSyntax.PlanBodyImpl;
+import jason.asSyntax.Pred;
+import jason.asSyntax.directives.Directive;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class OrgMaintenanceGoal implements Directive {
+
+ static Logger logger = Logger.getLogger(OrgMaintenanceGoal.class.getName());
+
+ public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
+ try {
+ Agent newAg = new Agent();
+
+ PlanBody endofplan = null;
+ Literal goal = null;
+
+ // change all inner plans
+ for (Plan p: innerContent.getPL()) {
+ // create end of plan: .wait
+ InternalActionLiteral wait = new InternalActionLiteral(".wait");
+ wait.addTerm(directive.getTerm(0));
+ endofplan = new PlanBodyImpl(PlanBody.BodyType.internalAction, wait);
+
+ // create end of plan: !!goal[.....]
+ goal = p.getTrigger().getLiteral().copy();
+ endofplan.add(new PlanBodyImpl(PlanBody.BodyType.achieveNF, goal));
+
+ // add in the end of plan
+ p.getBody().add(endofplan);
+
+ logger.info("*** changed plan = "+p);
+ }
+
+ // add failure plan:
+ // -!goto_near_unvisited[scheme(Sch),mission(Mission)]
+ // <- .current_intention(I);
+ // .print("ooo Failure to goto_near_unvisited ",I);
+ // .wait("+pos(_,_,_)"); // wait next cycle
+ // !!goto_near_unvisited[scheme(Sch),mission(Mission)].
+ String sp = "-!"+goal+" <- .current_intention(I); " +
+ ".print(\"ooo Failure in organisational goal "+goal+", I\"); "+
+ endofplan + ".";
+
+ logger.info("*** new plan s = "+sp);
+ Plan p = Plan.parse(sp);
+
+ newAg.getPL().add(p);
+ return newAg;
+ } catch (Exception e) {
+ logger.log(Level.SEVERE,"OrgMaintenanceGoal directive error.", e);
+ }
+ return null;
+ }
+}
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/src/jason/asSyntax/Literal.java 2008-05-02 08:43:47 UTC (rev 1283)
@@ -250,6 +250,10 @@
c.hashCodeCache = this.hashCodeCache;
return c;
}
+
+ public Literal copy() {
+ return (Literal)clone();
+ }
@Override
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2008-05-02 08:43:47 UTC (rev 1283)
@@ -421,7 +421,7 @@
}
/* Annotated Formulae */
-Pred pred() : { Token K; Pred p; List l; ListTerm lt;}
+Pred pred() : { Token K; Pred p; List l; ListTerm lt; PlanBody b; }
{
(
K=<ATOM>
@@ -429,28 +429,29 @@
K=<TK_BEGIN>
|
K=<TK_END>
- ) { p = new Pred(K.image);
- p.setSrcLine(K.beginLine);
- p.setSrc(asSource);
- }
+ ) { p = new Pred(K.image);
+ p.setSrcLine(K.beginLine);
+ p.setSrc(asSource);
+ }
[
- "(" l = terms()
- ")" { p.setTerms(l); }
+ "(" l = terms()
+ ")" { p.setTerms(l); }
]
+ ( b=plan_body_term() { p.addTerm(b); }
+ )*
[
- lt = list() { p.setAnnots(lt); }
+ lt = list() { p.setAnnots(lt); }
]
- { return p; }
+ { return p; }
}
/* List of terms */
-List terms() : { List listTerms = new ArrayList(); Term v; Object o; }
+List terms() : { List listTerms = new ArrayList(); Term v; PlanBody o; }
{
v=term() { listTerms.add(v); }
( "," v=term() { listTerms.add(v); }
- | o=plan_body_term() { listTerms.add(o); }
)*
{ return listTerms; }
}
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2008-05-01 21:29:36 UTC (rev 1282)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2008-05-02 08:43:47 UTC (rev 1283)
@@ -578,7 +578,7 @@
/* Annotated Formulae */
final public Pred pred() throws ParseException {
- Token K; Pred p; List l; ListTerm lt;
+ Token K; Pred p; List l; ListTerm lt; PlanBody b;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ATOM:
K = jj_consume_token(ATOM);
@@ -594,64 +594,64 @@
jj_consume_token(-1);
throw new ParseException();
}
- p = new Pred(K.image);
- p.setSrcLine(K.beginLine);
- p.setSrc(asSource);
+ p = new Pred(K.image);
+ p.setSrcLine(K.beginLine);
+ p.setSrc(asSource);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 39:
jj_consume_token(39);
l = terms();
jj_consume_token(40);
- p.setTerms(l);
+ p.setTerms(l);
break;
default:
jj_la1[24] = jj_gen;
;
}
+ label_9:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case 27:
+ ;
+ break;
+ default:
+ jj_la1[25] = jj_gen;
+ break label_9;
+ }
+ b = plan_body_term();
+ p.addTerm(b);
+ }
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 42:
lt = list();
- p.setAnnots(lt);
+ p.setAnnots(lt);
break;
default:
- jj_la1[25] = jj_gen;
+ jj_la1[26] = jj_gen;
;
}
- {if (true) return p;}
+ {if (true) return p;}
throw new Error("Missing return statement in function");
}
/* List of terms */
final public List terms() throws ParseException {
- List listTerms = new ArrayList(); Term v; Object o;
+ List listTerms = new ArrayList(); Term v; PlanBody o;
v = term();
listTerms.add(v);
- label_9:
+ label_10:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 27:
case 41:
;
break;
default:
- jj_la1[26] = jj_gen;
- break label_9;
+ jj_la1[27] = jj_gen;
+ break label_10;
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case 41:
- jj_consume_token(41);
- v = term();
+ jj_consume_token(41);
+ v = term();
listTerms.add(v);
- break;
- case 27:
- o = plan_body_term();
- listTerms.add(o);
- break;
- default:
- jj_la1[27] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
}
{if (true) return listTerms;}
throw new Error("Missing return statement in function");
@@ -709,7 +709,7 @@
case 42:
f = term_in_list();
last = lt.append(f); lt.setSrcLine(f.getSrcLine()); lt.setSrc(f.getSrc());
- label_10:
+ label_11:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case 41:
@@ -717,7 +717,7 @@
break;
default:
jj_la1[29] = jj_gen;
- break label_10;
+ break label_11;
}
jj_consume_token(41);
f = term_in_list();
@@ -1199,30 +1199,40 @@
finally { jj_save(0, xla); }
}
+ final private boolean jj_3R_16() {
+ if (jj_scan_token(27)) return true;
+ return false;
+ }
+
final private boolean jj_3_1() {
if (jj_scan_token(27)) return true;
if (jj_scan_token(TK_BEGIN)) return true;
- if (jj_3R_11()) return true;
+ if (jj_3R_12()) return true;
if (jj_scan_token(28)) return true;
return false;
}
- final private boolean jj_3R_13() {
- if (jj_3R_14()) return true;
+ final private boolean jj_3R_15() {
+ if (jj_3R_17()) return true;
return false;
}
- final private boolean jj_3R_12() {
+ final private boolean jj_3R_14() {
+ if (jj_3R_16()) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_13() {
if (jj_scan_token(39)) return true;
return false;
}
- final private boolean jj_3R_14() {
+ final private boolean jj_3R_17() {
if (jj_scan_token(42)) return true;
return false;
}
- final private boolean jj_3R_11() {
+ final private boolean jj_3R_12() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(20)) {
@@ -1233,9 +1243,13 @@
}
}
xsp = jj_scanpos;
- if (jj_3R_12()) jj_scanpos = xsp;
+ if (jj_3R_13()) jj_scanpos = xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_14()) { jj_scanpos = xsp; break; }
+ }
xsp = jj_scanpos;
- if (jj_3R_13()) jj_scanpos = xsp;
+ if (jj_3R_15()) jj_scanpos = xsp;
return false;
}
@@ -1256,10 +1270,10 @@
jj_la1_1();
}
private static void jj_la1_0() {
- jj_la1_0 = new int[] {0x8000000,0x10cb00,0x8000000,0x80000000,0x8000000,0x10000,0x10cb00,0x8000000,0x8000000,0x20000000,0x10000,0x0,0x0,0x0,0x80000000,0x80000000,0x30cb80,0x0,0x0,0x80000000,0x80000000,0x800,0x10cb00,0x10c000,0x0,0x0,0x8000000,0x8000000,0x83acf80,0x0,0x200080,0x0,0x3acb80,0x3acb80,0x0,0x0,0x3acf80,0x3acb80,0x0,0x83acb80,0x0,0x0,0x0,0x3000,0x3000,0x0,0x32cb80,0x200080,0x0,};
+ jj_la1_0 = new int[] {0x8000000,0x10cb00,0x8000000,0x80000000,0x8000000,0x10000,0x10cb00,0x8000000,0x8000000,0x20000000,0x10000,0x0,0x0,0x0,0x80000000,0x80000000,0x30cb80,0x0,0x0,0x80000000,0x80000000,0x800,0x10cb00,0x10c000,0x0,0x8000000,0x0,0x0,0x83acf80,0x0,0x200080,0x0,0x3acb80,0x3acb80,0x0,0x0,0x3acf80,0x3acb80,0x0,0x83acb80,0x0,0x0,0x0,0x3000,0x3000,0x0,0x32cb80,0x200080,0x0,};
}
private static void jj_la1_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x10,0x10,0x0,0x20,0x4,0x5c,0x5c,0x0,0x0,0x0,0x80,0x400,0x200,0x200,0x488,0x200,0x400,0x800,0x488,0x488,0x800,0x2000,0x88,0x88,0x3fc000,0x488,0x3fc000,0xc,0xc,0xc00000,0xc00000,0x1000000,0x88,0x0,0x400,};
+ jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x10,0x10,0x0,0x20,0x4,0x5c,0x5c,0x0,0x0,0x0,0x80,0x0,0x400,0x200,0x488,0x200,0x400,0x800,0x488,0x488,0x800,0x2000,0x88,0x88,0x3fc000,0x488,0x3fc000,0xc,0xc,0xc00000,0xc00000,0x1000000,0x88,0x0,0x400,};
}
final private JJCalls[] jj_2_rtns = new JJCalls[1];
private boolean jj_rescan = false;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|