|
From: <jom...@us...> - 2016-04-11 11:37:07
|
Revision: 1895
http://sourceforge.net/p/jason/svn/1895
Author: jomifred
Date: 2016-04-11 11:37:05 +0000 (Mon, 11 Apr 2016)
Log Message:
-----------
use collection instead of list for perception (is it more general and allows further improvements)
Modified Paths:
--------------
trunk/applications/as-unit-test/src/jason/asunit/TestArch.java
trunk/src/jason/architecture/AgArch.java
trunk/src/jason/architecture/AgArchInfraTier.java
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/environment/Environment.java
trunk/src/jason/environment/TimeSteppedEnvironment.java
trunk/src/jason/infra/centralised/CentralisedAgArch.java
trunk/src/jason/infra/centralised/CentralisedRuntimeServices.java
trunk/src/jason/infra/jade/JadeEnvironment.java
Modified: trunk/applications/as-unit-test/src/jason/asunit/TestArch.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/asunit/TestArch.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/applications/as-unit-test/src/jason/asunit/TestArch.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -1,6 +1,7 @@
package jason.asunit;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import jason.JasonException;
@@ -69,7 +70,7 @@
}
@Override
- public List<Literal> perceive() {
+ public Collection<Literal> perceive() {
if (getEnvInfraTier() != null)
return super.perceive();
else
Modified: trunk/src/jason/architecture/AgArch.java
===================================================================
--- trunk/src/jason/architecture/AgArch.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/architecture/AgArch.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -23,6 +23,7 @@
package jason.architecture;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
@@ -171,7 +172,7 @@
/** Gets the agent's perception as a list of Literals.
* The returned list will be modified by Jason.
*/
- public List<Literal> perceive() {
+ public Collection<Literal> perceive() {
if (successor == null)
return null;
else
@@ -217,15 +218,18 @@
}
public void wakeUpSense(boolean ts) {
- wake();
+ if (successor != null)
+ wakeUpSense(ts);
}
public void wakeUpDeliberate(boolean ts) {
- wake();
+ if (successor != null)
+ wakeUpDeliberate(ts);
}
public void wakeUpAct(boolean ts) {
- wake();
+ if (successor != null)
+ wakeUpAct(ts);
}
Modified: trunk/src/jason/architecture/AgArchInfraTier.java
===================================================================
--- trunk/src/jason/architecture/AgArchInfraTier.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/architecture/AgArchInfraTier.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -24,23 +24,23 @@
package jason.architecture;
+import java.util.Collection;
+
import jason.asSemantics.ActionExec;
import jason.asSemantics.Message;
import jason.asSyntax.Literal;
import jason.runtime.RuntimeServicesInfraTier;
-import java.util.List;
-
/**
* This interface is implemented by the infrastructure tier (Saci/Jade/Centralised/...)
* to provide concrete perception, action, and communication to the agent architecture.
**/
public interface AgArchInfraTier {
- /** Gets the agent's perception as a list of Literals */
- public List<Literal> perceive();
+ /** Gets the agent's perception as a set of Literals */
+ public Collection<Literal> perceive();
/** Reads the agent's mailbox and adds messages into the agent's circumstance */
public void checkMail();
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/asSemantics/Agent.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -723,7 +723,7 @@
*
* @return the number of changes (add + dels)
*/
- public int buf(List<Literal> percepts) {
+ public int buf(Collection<Literal> percepts) {
/*
// complexity 3n
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -1368,10 +1368,10 @@
}
public boolean canSleep() {
- return (C.isAtomicIntentionSuspended() && !C.hasFeedbackAction() && !conf.C.hasMsg())
- || (!conf.C.hasEvent() && !conf.C.hasIntention() &&
- !conf.C.hasFeedbackAction() &&
- !conf.C.hasMsg() &&
+ return (C.isAtomicIntentionSuspended() && !C.hasFeedbackAction() && !conf.C.hasMsg()) // atomic case
+ || (!conf.C.hasEvent() && // other cases (deliberate)
+ !conf.C.hasIntention() && !conf.C.hasFeedbackAction() && // (action)
+ !conf.C.hasMsg() && // (sense)
taskForBeginOfCycle.isEmpty() &&
getUserAgArch().canSleep());
}
@@ -1431,6 +1431,7 @@
}
nrcslbr++; // counting number of cycles since last belief revision
+ // TODO: move all sleep related code to archs classes
if (!(getUserAgArch() instanceof CentralisedAgArchAsynchronous)) {
if (canSleep()) {
if (!sleepingEvt) {
Modified: trunk/src/jason/environment/Environment.java
===================================================================
--- trunk/src/jason/environment/Environment.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/environment/Environment.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -24,10 +24,6 @@
package jason.environment;
-import jason.asSemantics.Unifier;
-import jason.asSyntax.Literal;
-import jason.asSyntax.Structure;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -42,6 +38,10 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import jason.asSemantics.Unifier;
+import jason.asSyntax.Literal;
+import jason.asSyntax.Structure;
+
/**
* It is a base class for Environment, it is overridden by the user
* application to define the environment "behaviour".
@@ -147,7 +147,7 @@
* This method is to be called by TS and should not be called
* by other objects.
*/
- public List<Literal> getPercepts(String agName) { // TODO in a future release, call this method doPerception, and get simply returns the list
+ public Collection<Literal> getPercepts(String agName) {
// check whether this agent needs the current version of perception
if (uptodateAgs.contains(agName)) {
@@ -161,7 +161,7 @@
if (agl != null) {
size += agl.size();
}
- List<Literal> p = new ArrayList<Literal>(size);
+ Collection<Literal> p = new ArrayList<Literal>(size);
if (! percepts.isEmpty()) { // has global perception?
synchronized (percepts) {
Modified: trunk/src/jason/environment/TimeSteppedEnvironment.java
===================================================================
--- trunk/src/jason/environment/TimeSteppedEnvironment.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/environment/TimeSteppedEnvironment.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -1,12 +1,9 @@
package jason.environment;
-import jason.asSyntax.Literal;
-import jason.asSyntax.Structure;
-
+import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
-import java.util.List;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
@@ -17,7 +14,10 @@
import java.util.logging.Level;
import java.util.logging.Logger;
+import jason.asSyntax.Literal;
+import jason.asSyntax.Structure;
+
/**
* General environment class that "synchronise" all agents actions.
* It waits one action for each agent and, when all actions is received,
@@ -289,7 +289,7 @@
/** stops perception while executing the step's actions */
@Override
- public List<Literal> getPercepts(String agName) {
+ public Collection<Literal> getPercepts(String agName) {
synchronized (requests) {
return super.getPercepts(agName);
}
Modified: trunk/src/jason/infra/centralised/CentralisedAgArch.java
===================================================================
--- trunk/src/jason/infra/centralised/CentralisedAgArch.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/infra/centralised/CentralisedAgArch.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -50,6 +50,8 @@
* This class provides an agent architecture when using Centralised
* infrastructure to run the MAS inside Jason.
*
+ * Each agent has its own thread.
+ *
* <p>
* Execution sequence:
* <ul>
@@ -130,12 +132,10 @@
wake(); // so that it leaves the run loop
if (myThread != null)
myThread.interrupt();
- synchronized (syncStopRun) { // wait the run loop to finish
- masRunner.delAg(agName);
- }
getTS().getAg().stopAg();
getUserAgArch().stop(); // stops all archs
}
+
public void setLogger() {
logger = Logger.getLogger(CentralisedAgArch.class.getName() + "." + getAgName());
@@ -175,8 +175,6 @@
return infraControl;
}
- private Object syncStopRun = new Object();
-
private Thread myThread = null;
public void setThread(Thread t) {
myThread = t;
@@ -233,24 +231,22 @@
public void run() {
- synchronized (syncStopRun) {
- TransitionSystem ts = getTS();
- while (running) {
- if (ts.getSettings().isSync()) {
- waitSyncSignal();
- reasoningCycle();
- boolean isBreakPoint = false;
- try {
- isBreakPoint = ts.getC().getSelectedOption().getPlan().hasBreakpoint();
- if (logger.isLoggable(Level.FINE)) logger.fine("Informing controller that I finished a reasoning cycle "+getCycleNumber()+". Breakpoint is " + isBreakPoint);
- } catch (NullPointerException e) {
- // no problem, there is no sel opt, no plan ....
- }
- informCycleFinished(isBreakPoint, getCycleNumber());
- } else {
- incCycleNumber();
- reasoningCycle();
+ TransitionSystem ts = getTS();
+ while (running) {
+ if (ts.getSettings().isSync()) {
+ waitSyncSignal();
+ reasoningCycle();
+ boolean isBreakPoint = false;
+ try {
+ isBreakPoint = ts.getC().getSelectedOption().getPlan().hasBreakpoint();
+ if (logger.isLoggable(Level.FINE)) logger.fine("Informing controller that I finished a reasoning cycle "+getCycleNumber()+". Breakpoint is " + isBreakPoint);
+ } catch (NullPointerException e) {
+ // no problem, there is no sel opt, no plan ....
}
+ informCycleFinished(isBreakPoint, getCycleNumber());
+ } else {
+ incCycleNumber();
+ reasoningCycle();
}
}
logger.fine("I finished!");
@@ -264,7 +260,7 @@
public void sleep() {
try {
if (!getTS().getSettings().isSync()) {
- logger.fine("Entering in sleep mode....");
+ //logger.fine("Entering in sleep mode....");
synchronized (sleepSync) {
sleepSync.wait(sleepTime); // wait for messages
if (sleepTime < MAX_SLEEP)
@@ -277,17 +273,34 @@
}
}
+ @Override
public void wake() {
synchronized (sleepSync) {
sleepTime = 50;
sleepSync.notifyAll(); // notify sleep method
}
}
+
+ @Override
+ public void wakeUpSense(boolean ts) {
+ wake();
+ }
+
+ @Override
+ public void wakeUpDeliberate(boolean ts) {
+ wake();
+ }
+
+ @Override
+ public void wakeUpAct(boolean ts) {
+ wake();
+ }
// Default perception assumes Complete and Accurate sensing.
- public List<Literal> perceive() {
+ @Override
+ public Collection<Literal> perceive() {
if (infraEnv == null) return null;
- List<Literal> percepts = infraEnv.getUserEnvironment().getPercepts(getAgName());
+ Collection<Literal> percepts = infraEnv.getUserEnvironment().getPercepts(getAgName());
if (logger.isLoggable(Level.FINE) && percepts != null) logger.fine("percepts: " + percepts);
return percepts;
}
Modified: trunk/src/jason/infra/centralised/CentralisedRuntimeServices.java
===================================================================
--- trunk/src/jason/infra/centralised/CentralisedRuntimeServices.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/infra/centralised/CentralisedRuntimeServices.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -1,5 +1,10 @@
package jason.infra.centralised;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
import jason.JasonException;
import jason.architecture.AgArch;
import jason.asSemantics.Agent;
@@ -8,11 +13,6 @@
import jason.runtime.RuntimeServicesInfraTier;
import jason.runtime.Settings;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
/** This class implements the centralised version of the runtime services. */
public class CentralisedRuntimeServices implements RuntimeServicesInfraTier {
@@ -94,6 +94,7 @@
CentralisedAgArch ag = masRunner.getAg(agName);
if (ag != null && ag.getTS().getAg().killAcc(byAg)) {
ag.stopAg();
+ masRunner.delAg(agName);
return true;
}
return false;
Modified: trunk/src/jason/infra/jade/JadeEnvironment.java
===================================================================
--- trunk/src/jason/infra/jade/JadeEnvironment.java 2016-04-10 14:25:42 UTC (rev 1894)
+++ trunk/src/jason/infra/jade/JadeEnvironment.java 2016-04-11 11:37:05 UTC (rev 1895)
@@ -139,7 +139,7 @@
ACLMessage r = m.createReply();
r.setPerformative(ACLMessage.INFORM);
try {
- List<Literal> percepts = userEnv.getPercepts(m.getSender().getLocalName());
+ Collection<Literal> percepts = userEnv.getPercepts(m.getSender().getLocalName());
if (percepts == null) {
r.setContent("nothing_new");
} else {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|