|
From: <jom...@us...> - 2008-04-25 17:34:12
|
Revision: 1260
http://jason.svn.sourceforge.net/jason/?rev=1260&view=rev
Author: jomifred
Date: 2008-04-25 10:33:58 -0700 (Fri, 25 Apr 2008)
Log Message:
-----------
jason team: new computation of herding positions
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/tests/TestIF.java
trunk/applications/jason-team/AC-Local-JasonTeam.mas2j
trunk/applications/jason-team/src/asl/dummy.asl
trunk/applications/jason-team/src/asl/exploration.asl
trunk/applications/jason-team/src/asl/gaucho.asl
trunk/applications/jason-team/src/asl/goto.asl
trunk/applications/jason-team/src/java/arch/ACArchitecture.java
trunk/applications/jason-team/src/java/arch/CowboyArch.java
trunk/applications/jason-team/src/java/jia/Vec.java
trunk/applications/jason-team/src/java/jia/herd_position.java
trunk/applications/jason-team/src/java/test/TestBasicHerding.java
trunk/src/jason/environment/grid/Location.java
Added Paths:
-----------
trunk/applications/as-unit-test/src/jason/tests/TestLoop.java
Modified: trunk/applications/as-unit-test/src/jason/tests/TestIF.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/TestIF.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/as-unit-test/src/jason/tests/TestIF.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -20,7 +20,11 @@
"+!test1 <- a1; "+
" .if( b(X), {jason.asunit.print(X); b1}, {jason.asunit.print(no)}); "+
" a2. "+
- "+!test2 <- -b(_); !test1. "
+
+ "+!test2 <- -b(_); !test1. "+
+
+ "+!test3 <- .if( b(X), { Y = X*10; Z = 10 }, { Y = 60; Z=20 }); jason.asunit.print(Y,\" \",Z). "+
+ "+!test4 <- -b(_); !test3. "
);
}
@@ -38,4 +42,12 @@
ag.assertPrint("no", 5);
ag.assertAct("a2", 5);
}
+
+ @Test
+ public void testUnifiyInThenElse() {
+ ag.addGoal("test3");
+ ag.assertPrint("30 10", 5);
+ ag.addGoal("test4");
+ ag.assertPrint("60 20", 10);
+ }
}
Added: trunk/applications/as-unit-test/src/jason/tests/TestLoop.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/TestLoop.java (rev 0)
+++ trunk/applications/as-unit-test/src/jason/tests/TestLoop.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -0,0 +1,37 @@
+package jason.tests;
+
+import jason.asunit.TestAgent;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestLoop {
+
+ TestAgent ag;
+
+ // initialisation of the agent test
+ @Before
+ public void setupAg() {
+ ag = new TestAgent();
+
+ // defines the agent's AgentSpeak code
+ ag.parseAScode(
+ "b(1). "+
+ "+!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)."
+ );
+ }
+
+ @Test
+ public void test1() {
+ ag.addGoal("test1");
+ ag.assertBel("b(4)", 20);
+ }
+
+ @Test
+ public void test2() {
+ ag.addGoal("test2");
+ ag.assertBel("b(4)", 30);
+ }
+}
Modified: trunk/applications/jason-team/AC-Local-JasonTeam.mas2j
===================================================================
--- trunk/applications/jason-team/AC-Local-JasonTeam.mas2j 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/AC-Local-JasonTeam.mas2j 2008-04-25 17:33:58 UTC (rev 1260)
@@ -10,40 +10,40 @@
infrastructure: Centralised
agents:
- orgManager [osfile="src/team-os.xml",gui=yes]
+ orgManager [osfile="src/team-os.xml",gui=no]
agentArchClass jmoise.OrgManager;
- gaucho1 gaucho.asl
+ gaucho1 dummy.asl
[verbose=1, gui=yes, write_status=yes, ac_sim_back_dir="./massim-server/backup",
host="localhost", port=12300, username=participant1, password="1"]
agentArchClass arch.ACArchitecture
agentClass agent.SelectEvent
- beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)","pratio(_)");
- gaucho2 gaucho.asl
+ beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)");
+ gaucho2 dummy.asl
[verbose=1,host="localhost", port=12300, username=participant2, password="2"]
agentArchClass arch.ACArchitecture
agentClass agent.SelectEvent
- beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)","pratio(_)");
- gaucho3 gaucho.asl
+ beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)");
+ gaucho3 dummy.asl
[verbose=1,host="localhost", port=12300, username=participant3, password="3"]
agentArchClass arch.ACArchitecture
agentClass agent.SelectEvent
- beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)","pratio(_)");
- gaucho4 gaucho.asl
+ beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)");
+ gaucho4 dummy.asl
[verbose=1,host="localhost", port=12300, username=participant4, password="4"]
agentArchClass arch.ACArchitecture
agentClass agent.SelectEvent
- beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)","pratio(_)");
- gaucho5 gaucho.asl
+ beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)");
+ gaucho5 dummy.asl
[verbose=1,host="localhost", port=12300, username=participant5, password="5"]
agentArchClass arch.ACArchitecture
agentClass agent.SelectEvent
- beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)","pratio(_)");
- gaucho6 gaucho.asl
+ beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)");
+ gaucho6 dummy.asl
[verbose=1,host="localhost", port=12300, username=participant6, password="6"]
agentArchClass arch.ACArchitecture
agentClass agent.SelectEvent
- beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)","pratio(_)");
+ beliefBaseClass agent.UniqueBelsBB("gsize(_,_)","steps(_)","cell(_,_,key)","corral(_,_,_,_)");
aslSourcePath: "src/asl";
Modified: trunk/applications/jason-team/src/asl/dummy.asl
===================================================================
--- trunk/applications/jason-team/src/asl/dummy.asl 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/asl/dummy.asl 2008-04-25 17:33:58 UTC (rev 1260)
@@ -47,7 +47,7 @@
// revise target each 4 steps
+pos(Step,_,_) // new cycle
- : Step mod 4 == 0
+ : Step mod 10 == 0
<- !decide_target.
Modified: trunk/applications/jason-team/src/asl/exploration.asl
===================================================================
--- trunk/applications/jason-team/src/asl/exploration.asl 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/asl/exploration.asl 2008-04-25 17:33:58 UTC (rev 1260)
@@ -15,7 +15,7 @@
+gsize(_Weight,_Height) // new match've started
: .my_name(gaucho1) // agent 1 is responsible for the team creation
- <- .print("oooo creating team group");
+ <- //.print("oooo creating team group");
.if( group(team,Old), {
jmoise.remove_group(Old)
});
@@ -40,40 +40,46 @@
<- .broadcast(tell, group_area(ID,G,A)).
-/* plans for agents with even id */
+/* plans for agents with odd id */
+gsize(_,_)
: .my_name(Me) &
agent_id(Me,AgId) &
- AgId mod 2 == 0 // I have an even Id
- <- // wait my pos
- .if(not pos(MyX, MyY,_), { MyX = 333; MyY = 444 }); //.wait("+pos(MyX,MyY,_)")
- .print("oooo ",MyX, MyY); //?pos(MyX, MyY,_);
+ AgId mod 2 == 1 // I have an odd Id
+ <- .print("ooo Recruiting scouters for my explorer group....");
+
+ // wait my pos
+ ?pos(MyX,MyY,_);
// wait others pos
- .if(not cell(_,_,ally(_)), { .wait("+cell(_,_,ally(_))") });
- .wait(200);
+ .while( .count(cell(_,_,ally(_)), N) & N < 5, {
+ .print("ooo waiting others pos ");
+ .wait("+cell(_,_,ally(_))", 500, nofail)
+ });
- // find distance to odd agents
+ // find distance to even agents
.findall(ag_d(D,AgName),
- cell(X,Y,ally(AgName)) & .print(AgName) & agent_id(AgName,Id) & .print(AgName," ooo ",Id) & Id mod 2 == 1 & jia.dist(MyX, MyY, X, Y, D),
+ cell(X,Y,ally(AgName)) & agent_id(AgName,Id) & Id mod 2 == 0 & jia.dist(MyX, MyY, X, Y, D),
LOdd);
.sort(LOdd, LSOdd);
+
// test if I received the area of my group
- .if( not group_area(AgId div 2,G,A), { .wait("+group_area(AgId div 2,G,A)") });
- .print("oooo Ags=", LSOdd," in area ",group_area(AgId div 2,G,A));
+ ?group_area(AgId div 2,G,A);
+ .print("ooo Scouters candidates =", LSOdd," in area ",group_area(AgId div 2,G,A));
// adopt role explorer in the group
jmoise.adopt_role(explorer,G);
!find_scouter(LSOdd, G).
+!find_scouter([],_)
- <- .print("oooo I do not find a scouter to work with me!").
+ <- .print("ooo I do not find a scouter to work with me!").
+!find_scouter([ag_d(_,AgName)|_],GId)
- <- .send(AgName, achieve, play_role(scouter,GId));
- .wait("+play(Ag,scouter,GId)",1000).
+ <- .print("ooo Ask ",AgName," to play scouter");
+ .send(AgName, achieve, play_role(scouter,GId));
+ .wait("+play(Ag,scouter,GId)",2000).
-!find_scouter([_|LSOdd],GId) // in case the wait fails, try next agent
- <- !find_scouter(LSOdd,GId).
+ <- .print("ooo find_scouter failure, try another agent.");
+ !find_scouter(LSOdd,GId).
/* plans for agents the others */
Modified: trunk/applications/jason-team/src/asl/gaucho.asl
===================================================================
--- trunk/applications/jason-team/src/asl/gaucho.asl 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/asl/gaucho.asl 2008-04-25 17:33:58 UTC (rev 1260)
@@ -32,12 +32,18 @@
/* -- plans -- */
++pos(_,_,_) <- do(skip).
+
+
++?pos(X, Y, S) <- .wait("+pos(X,Y,S)").
++?group_area(Id,G,A) <- .wait("+group_area(Id,G,A)").
+
+end_of_simulation(_Result)
<- .abolish(area(_,_,_,_,_,_)).
+!restart
- <- //.print("*** restart ***");
- .drop_all_desires;
+ <- .print("*** restart ***");
+ //.drop_all_desires;
.abolish(target(_,_)).
// TODO: what to do?
//!decide_target.
Modified: trunk/applications/jason-team/src/asl/goto.asl
===================================================================
--- trunk/applications/jason-team/src/asl/goto.asl 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/asl/goto.asl 2008-04-25 17:33:58 UTC (rev 1260)
@@ -24,12 +24,13 @@
!!move.
// I still do not know my location
+/*
+!move
: not pos(_,_,_)
<- .print("waiting my location....");
.wait("+pos(_,_,_)");
!move.
-
+*/
+!move
: not target(_,_)
<- .print("waiting my target....");
Modified: trunk/applications/jason-team/src/java/arch/ACArchitecture.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/ACArchitecture.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/java/arch/ACArchitecture.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -177,7 +177,7 @@
// prepare msg to print out
String w = "";
- if (lastActionInCurrentCycle == null && cycleCounter > 3) { // ignore problem in the first cycles (the agent is still in setup!)
+ if (lastActionInCurrentCycle == null && cycleCounter > 10) { // ignore problem in the first cycles (the agent is still in setup!)
addRestart();
w = "*** ";
}
Modified: trunk/applications/jason-team/src/java/arch/CowboyArch.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/CowboyArch.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/java/arch/CowboyArch.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -1,6 +1,7 @@
package arch;
import jason.JasonException;
+import jason.ReceiverDoesNotExistException;
import jason.RevisionFailedException;
import jason.asSemantics.Intention;
import jason.asSemantics.Message;
@@ -67,6 +68,8 @@
massimBackDir = stts.getUserParameter("ac_sim_back_dir");
if (massimBackDir != null && massimBackDir.startsWith("\""))
massimBackDir = massimBackDir.substring(1,massimBackDir.length()-1);
+ logger = Logger.getLogger(CowboyArch.class.getName() + ".CA-" + getAgName());
+
}
@Override
@@ -299,9 +302,15 @@
if (!getAgName().equals(oname)) {
Message msg = new Message(m);
msg.setReceiver(oname);
- try {
- sendMsg(msg);
- } catch (JasonException e) {} // no problem, the agent still does not exists
+ for (int t=0; t<4; t++) {
+ try {
+ sendMsg(msg);
+ break; // the for
+ } catch (ReceiverDoesNotExistException e) {
+ // wait and try again
+ Thread.sleep(500);
+ }
+ }
}
}
}
Modified: trunk/applications/jason-team/src/java/jia/Vec.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/Vec.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/java/jia/Vec.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -34,7 +34,7 @@
public int getX() { return (int)Math.round(x); }
public int getY() { return (int)Math.round(y); }
public double magnitude() { return r; }
- public double angle() { return t; }
+ public double angle() { return t; }
public Location getLocation(LocalWorldModel model) {
return new Location(getX(), model.getHeight()-getY()-1);
@@ -54,7 +54,9 @@
while (t < 0) t = t + PI2;
return new Vec(r*Math.cos(t), r*Math.sin(t));
}
-
+ public Vec newMagnitude(double r) {
+ return new Vec(r*Math.cos(t), r*Math.sin(t));
+ }
@Override
public boolean equals(Object o) {
if (o == null) return false;
Modified: trunk/applications/jason-team/src/java/jia/herd_position.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/herd_position.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/java/jia/herd_position.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -9,7 +9,6 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.ListIterator;
import java.util.logging.Level;
import arch.CowboyArch;
@@ -27,9 +26,9 @@
public static final double maxStdDev = 3;
public enum Formation {
- one { int[] getAngles() { return new int[] { 0 }; } },
- six { int[] getAngles() { return new int[] { 10, -10, 30, -30, 60, -60 }; } };
- abstract int[] getAngles();
+ one { int[] getDistances() { return new int[] { 0 }; } },
+ six { int[] getDistances() { return new int[] { 2, -2, 6, -6, 10, -10 }; } };
+ abstract int[] getDistances();
};
@Override
@@ -99,6 +98,7 @@
Vec mean = Vec.mean(cows);
int stepsFromCenter = (int)Math.round(Vec.max(cows).sub(mean).magnitude())+1;
+ //Vec max = Vec.max(cows);
// run A* to see the cluster target in n steps
Search s = new Search(model, mean.getLocation(model), model.getCorralCenter(), null, false, false, false, true, null);
@@ -108,40 +108,60 @@
Vec cowstarget = new Vec(model, s.getNodeLocation(np.get(n)));
Vec agsTarget = mean.sub(cowstarget);
- Vec agTarget = agsTarget;
List<Location> r = new ArrayList<Location>();
- for (int angle: formation.getAngles()) {
- double nt = angle * (Math.PI / 180);
-
- agTarget = agsTarget.newAngle(agsTarget.angle() + nt);
- Location l = agTarget.add(mean).getLocation(model);
- r.add(l);
+ int initAgTS = 1;
+ for (int dist: formation.getDistances()) { // 2, -2, 6, -6, ....
+ Vec agTarget = agsTarget;
+ Location l = agTarget.add(mean).getLocation(model);
- // TODO: test the code below
- /*
- for (double varangle = nt; nt < 180; nt += 5) {
- agTarget = agsTarget.newAngle(agsTarget.angle() + varangle);
- Location l = agTarget.add(mean).getLocation(model);
-
- // if l is in the path of cows, continue with next varangle
- boolean inpath = false;
- for (Nodo pn: np) {
- if (l.maxBorder(s.getNodeLocation(pn)) <= 0) {
- inpath = true;
- break;
- }
- }
- if (!inpath) {
- r.add(l);
- break;
- }
+ //System.out.println("....... "+dist+" antes angle "+agTarget);
+ if (dist >= 0)
+ agTarget = new Vec( -agTarget.y, agTarget.x);
+ else
+ agTarget = new Vec( agTarget.y, -agTarget.x);
+
+ Location lastloc = null;
+ boolean uselast = false;
+ for (int agTargetSize = initAgTS; agTargetSize <= Math.abs(dist); agTargetSize++) {
+ l = agTarget.newMagnitude(agTargetSize).add(mean).add(agsTarget).getLocation(model);
+ //System.out.println("pos angle "+agTargetSize);
+ uselast = !model.inGrid(l) || model.hasObject(WorldModel.OBSTACLE, l) && lastloc != null;
+ if (uselast) {
+ r.add(pathToNearCow(model, lastloc));
+ break;
+ }
+ lastloc = l;
}
- */
+ if (!uselast)
+ r.add(pathToNearCow(model, l));
+ if (dist < 0)
+ initAgTS = Math.abs(dist)+1;
}
+ //System.out.println("all places "+r);
return r;
}
+ private Location pathToNearCow(LocalWorldModel model, Location t) {
+ Location near = null;
+ for (Location c: model.getCows()) {
+ if (near == null || t.maxBorder(c) < t.maxBorder(near))
+ near = c;
+ }
+ if (near != null) {
+ Vec nearcv = new Vec(model,near);
+ Vec dircow = new Vec(model,t).sub(nearcv);
+ //System.out.println("Near cow to "+t+" is "+near+" vec = "+dircow);
+ for (int s = 1; s <= 20; s++) {
+ Location l = dircow.newMagnitude(s).add(nearcv).getLocation(model);
+ if (model.isFree(l))
+ return l;
+ }
+ }
+ return t;
+ }
+
public Location nearFreeForAg(LocalWorldModel model, Location ag, Location t) throws Exception {
+ /*
// run A* to get the path from ag to t
if (! model.inGrid(t))
t = model.nearFree(t);
@@ -159,6 +179,7 @@
if (i++ > 3) // do not go to far from target
break;
}
+ */
return model.nearFree(t);
}
}
Modified: trunk/applications/jason-team/src/java/test/TestBasicHerding.java
===================================================================
--- trunk/applications/jason-team/src/java/test/TestBasicHerding.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/applications/jason-team/src/java/test/TestBasicHerding.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -149,20 +149,20 @@
assertEquals(3, stepsFromCenter);
Location byIA = new herd_position().getAgTarget(model, Formation.one, cowboy.getLocation(model));
- assertEquals(new Location(7,37), byIA);
+ assertEquals(new Location(6,38), byIA);
byIA = new herd_position().getAgTarget(model, Formation.six, cowboy.getLocation(model));
- assertEquals(new Location(6,37), byIA);
+ assertEquals(new Location(5,38), byIA);
- // add an agent in 6,38
- model.add(WorldModel.AGENT, 6,38);
+ // add an agent in 5,38
+ model.add(WorldModel.AGENT, 5,38);
byIA = new herd_position().getAgTarget(model, Formation.six, cowboy.getLocation(model));
- assertEquals(new Location(8,38), byIA);
+ assertEquals(new Location(7,42), byIA);
- // add an agent in 8,39 (near 8,38)
- model.add(WorldModel.AGENT, 8,39);
+ // add an agent in 7,42
+ model.add(WorldModel.AGENT, 7,42);
byIA = new herd_position().getAgTarget(model, Formation.six,cowboy.getLocation(model));
- assertEquals(new Location(3,37), byIA);
+ assertEquals(new Location(8,42), byIA);
}
@Test
Modified: trunk/src/jason/environment/grid/Location.java
===================================================================
--- trunk/src/jason/environment/grid/Location.java 2008-04-25 14:39:27 UTC (rev 1259)
+++ trunk/src/jason/environment/grid/Location.java 2008-04-25 17:33:58 UTC (rev 1260)
@@ -41,6 +41,7 @@
@Override
public boolean equals(Object obj) {
+ if (obj == null) return false;
if (this == obj) return true;
if (getClass() != obj.getClass()) return false;
final Location other = (Location) obj;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|