|
From: <jom...@us...> - 2008-04-09 13:28:08
|
Revision: 1208
http://jason.svn.sourceforge.net/jason/?rev=1208&view=rev
Author: jomifred
Date: 2008-04-09 06:27:38 -0700 (Wed, 09 Apr 2008)
Log Message:
-----------
improve jason team (18 cows collected!)
Modified Paths:
--------------
trunk/applications/jason-team/src/asl/dummy.asl
trunk/applications/jason-team/src/java/arch/ACArchitecture.java
trunk/applications/jason-team/src/java/arch/LocalWorldModel.java
trunk/applications/jason-team/src/java/arch/WriteStatusThread.java
trunk/applications/jason-team/src/java/env/WorldModel.java
trunk/applications/jason-team/src/java/jia/Search.java
trunk/applications/jason-team/src/java/jia/herd_position.java
trunk/applications/jason-team/todo.org
Added Paths:
-----------
trunk/applications/jason-team/src/java/jia/dist.java
Modified: trunk/applications/jason-team/src/asl/dummy.asl
===================================================================
--- trunk/applications/jason-team/src/asl/dummy.asl 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/asl/dummy.asl 2008-04-09 13:27:38 UTC (rev 1208)
@@ -24,9 +24,17 @@
// find a free random location
random_pos(X,Y) :-
pos(AgX,AgY,_) &
- jia.random(RX,40) & X = (RX-20)+AgX & X > 0 &
- jia.random(RY,40,5) & Y = (RY-20)+AgY &
- not jia.obstacle(X,Y).
+ jia.random(RX,40) & RX > 5 & X = (RX-20)+AgX & X > 0 &
+ jia.random(RY,40,5) & RY > 5 & Y = (RY-20)+AgY &
+ not jia.obstacle(X,Y).
+
+// whether some location X,Y has an agent and I am near that location
+agent_in_target :-
+ pos(AgX,AgY,_) &
+ target(TX,TY) &
+ (cell(TX,TY,ally(_)) | cell(TX,TY,enemy(_)) | cell(TX,TY,cow(_))) &
+ jia.dist(TX,TY,AgX,AgY,D) &
+ D <= 2. // this number should be the same used by A* (DIST_FOR_AG_OBSTACLE constant)
/* -- initial goal */
@@ -40,6 +48,11 @@
<- jia.herd_position(X,Y); // compute new location
.print("COWS! going to ",X,",",Y);
-+target(X,Y). // go to there
+
++pos(_,_,_)
+ : not cell(_,_,cow(_)) // I see no cow
+ <- -target(_,_);
+ !move.
/* -- what todo when arrive at location */
@@ -47,8 +60,11 @@
+!decide_target // chose a new random pos
: not cell(_,_,cow(_))
<- ?random_pos(NX,NY);
+ .print("New random target: ",NX,",",NY);
-+target(NX,NY).
-+!decide_target.
++!decide_target
+ <- .print("No need for a new target, consider last herding location.");
+ do(skip). // send an action so that the simulator does not wait for me.
/* -- plans to move to a destination represented in the belief target(X,Y)
-- (it is a kind of persistent goal)
@@ -70,8 +86,10 @@
// find a new destination
+!move
: pos(X,Y,_) &
- (not target(_,_) | // I have no target OR
- target(X,Y) | // I am at target OR
+ (not target(_,_) | // I have no target OR
+ target(X,Y) | // I am at target OR
+ jia_obstacle(X,Y) | // An obstacle was discovered in the target
+ agent_in_target | // there is an agent in the target
(target(BX,BY) & jia.direction(X, Y, BX, BY, skip))) // is impossible to go to target
<- !decide_target.
Modified: trunk/applications/jason-team/src/java/arch/ACArchitecture.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/ACArchitecture.java 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/java/arch/ACArchitecture.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -142,7 +142,10 @@
}
void newCycle() {
- logger.info("last action sent is "+lastActionInCurrentCycle+". The following was not sent: "+toExecute);
+ String w = "";
+ if (lastActionInCurrentCycle == null) w = "*** ";
+ logger.info(w+"Last sent action was "+lastActionInCurrentCycle+" for cycle "+getCycle()+". The following was not sent: "+toExecute);
+
setLastAct(lastActionInCurrentCycle);
lastActionInCurrentCycle = null;
Modified: trunk/applications/jason-team/src/java/arch/LocalWorldModel.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/LocalWorldModel.java 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/java/arch/LocalWorldModel.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -59,7 +59,7 @@
}
public Location nearFree(Location l) throws Exception {
- int w = 1;
+ int w = 0;
while (true) {
for (int x=l.x-w; x<=l.x+w;x++)
if (isFree(x,l.y))
Modified: trunk/applications/jason-team/src/java/arch/WriteStatusThread.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/WriteStatusThread.java 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/java/arch/WriteStatusThread.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -100,6 +100,7 @@
}
public String shortActionFormat(String act) {
+ if (act == null) return "";
if (act.equals(WorldModel.Move.east.toString())) return "e ";
if (act.equals(WorldModel.Move.northeast.toString())) return "ne";
if (act.equals(WorldModel.Move.southeast.toString())) return "se";
Modified: trunk/applications/jason-team/src/java/env/WorldModel.java
===================================================================
--- trunk/applications/jason-team/src/java/env/WorldModel.java 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/java/env/WorldModel.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -57,7 +57,7 @@
@Override
public boolean isFree(int x, int y) {
- return super.isFree(x,y) && !hasObject(ENEMY, x, y) && !hasObject(COW, x, y) && !hasObject(CORRAL, x, y);
+ return super.isFree(x,y) && !hasObject(ENEMY, x, y) && !hasObject(AGENT, x, y) && !hasObject(COW, x, y) && !hasObject(CORRAL, x, y);
}
public WorldView getView() {
Modified: trunk/applications/jason-team/src/java/jia/Search.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/Search.java 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/java/jia/Search.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -18,6 +18,8 @@
import env.WorldModel;
public class Search {
+
+ public static final int DIST_FOR_AG_OBSTACLE = 2;
final LocalWorldModel model;
final Location from, to;
@@ -187,9 +189,9 @@
return;
if (ia.considerCorralAsObstacles && ia.model.hasObject(WorldModel.CORRAL, newl))
return;
- if (ia.considerAgentsAsObstacles && ia.model.hasObject(WorldModel.AGENT,newl) && ia.from.maxBorder(newl) <= 2)
+ if (ia.considerAgentsAsObstacles && ia.model.hasObject(WorldModel.AGENT,newl) && ia.from.maxBorder(newl) <= Search.DIST_FOR_AG_OBSTACLE)
return;
- if (ia.considerCowsAsObstacles && ia.model.hasObject(WorldModel.COW,newl) && ia.from.maxBorder(newl) <= 2)
+ if (ia.considerCowsAsObstacles && ia.model.hasObject(WorldModel.COW,newl) && ia.from.maxBorder(newl) <= Search.DIST_FOR_AG_OBSTACLE)
return;
int cost = 1;
Added: trunk/applications/jason-team/src/java/jia/dist.java
===================================================================
--- trunk/applications/jason-team/src/java/jia/dist.java (rev 0)
+++ trunk/applications/jason-team/src/java/jia/dist.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -0,0 +1,30 @@
+package jia;
+
+import java.util.logging.Level;
+
+import jason.asSemantics.*;
+import jason.asSyntax.*;
+import jason.environment.grid.Location;
+
+/**
+ * Gets the distance between two points.
+ *
+ * @author jomi
+ */
+public class dist extends DefaultInternalAction {
+
+ @Override
+ public Object execute(TransitionSystem ts, Unifier un, Term[] terms) throws Exception {
+ try {
+ int iagx = (int) ((NumberTerm) terms[0]).solve();
+ int iagy = (int) ((NumberTerm) terms[1]).solve();
+ int itox = (int) ((NumberTerm) terms[2]).solve();
+ int itoy = (int) ((NumberTerm) terms[3]).solve();
+ int dist = new Location(iagx, iagy).maxBorder(new Location(itox, itoy));
+ return un.unifies(terms[4], new NumberTermImpl(dist));
+ } catch (Throwable e) {
+ ts.getLogger().log(Level.SEVERE, "dist error: "+e, e);
+ }
+ 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-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/src/java/jia/herd_position.java 2008-04-09 13:27:38 UTC (rev 1208)
@@ -30,9 +30,13 @@
LocalWorldModel model = ((CowboyArch)ts.getUserAgArch()).getModel();
- Location agTarget = model.nearFree(getAgTarget(model));
- return un.unifies(terms[0], new NumberTermImpl(agTarget.x)) &&
- un.unifies(terms[1], new NumberTermImpl(agTarget.y));
+
+ Location agTarget = getAgTarget(model);
+ if (agTarget != null) {
+ agTarget = model.nearFree(agTarget);
+ return un.unifies(terms[0], new NumberTermImpl(agTarget.x)) &&
+ un.unifies(terms[1], new NumberTermImpl(agTarget.y));
+ }
} catch (Throwable e) {
ts.getLogger().log(Level.SEVERE, "herd_position error: "+e, e);
}
Modified: trunk/applications/jason-team/todo.org
===================================================================
--- trunk/applications/jason-team/todo.org 2008-04-08 21:34:26 UTC (rev 1207)
+++ trunk/applications/jason-team/todo.org 2008-04-09 13:27:38 UTC (rev 1208)
@@ -1,3 +1,4 @@
+* faster simulator
* develop a team of dummies to play against
** what is a dummy strategy?
* base components
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|