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. |