From dd6b4536b650c7825b86db87c95b9a091104b02d Mon Sep 17 00:00:00 2001
From: Jean-Christophe <jean-christophe.routier@univ-lille.fr>
Date: Thu, 2 Jul 2020 14:39:27 +0200
Subject: [PATCH] isTerminated becomes a counter condition

---
 .../decentralized/agent/VariableAgent.scala    |  2 +-
 .../decentralized/mgm2/AgentBehaviour.scala    |  2 +-
 .../decentralized/supervisor/Supervisor.scala  | 15 ++++++++++++---
 .../supervisor/SupervisorStatus.scala          | 18 ++++++++++--------
 4 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/main/scala/org/scadcop/solver/decentralized/agent/VariableAgent.scala b/src/main/scala/org/scadcop/solver/decentralized/agent/VariableAgent.scala
index 5c76167..89f8bbf 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/agent/VariableAgent.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/agent/VariableAgent.scala
@@ -23,7 +23,7 @@ abstract class VariableAgent(val variable: Variable,
                              val constraints: Set[Constraint]) extends Actor {
   var trace: Boolean = false
   var debug: Boolean = false
-  var debugState: Boolean = true
+  var debugState: Boolean = false
 
   var supervisor: ActorRef = context.parent
   var directory: Directory = new Directory()
diff --git a/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala b/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala
index ead4194..8e81a91 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala
@@ -414,7 +414,7 @@ class AgentBehaviour(variable: Variable,
     case Event(Act(true, None), mind) =>
     if (debug) println(s"$variable in $stateName has received Act(true) but has no move")
     if (trace) println(s"$variable -> Supervisor : I kept my previous value = InformValue(${mind.context.getValue(variable).get})")
-    supervisor ! InformValue(updatedMind.context.getValue(variable).get)
+    supervisor ! InformValue(mind.context.getValue(variable).get)
     goto(Continue) using mind
     
     // When it should not act because it does not have the highest delta in the neighbourhood
diff --git a/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala b/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
index 16289b6..b85c71d 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
@@ -15,8 +15,8 @@ import akka.actor.{Actor, ActorRef, FSM, Props, Stash, PoisonPill}
 class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Stash
     with FSM[SupervisorState, SupervisorStatus] {
 
-  var debug = true
-  var debugState = true
+  var debug = false
+  var debugState = false
   var trace = false
 
   var solver: ActorRef = context.parent // Reference to the distributed solver
@@ -162,7 +162,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
     //when it receives its own decison that it should continue
     case Event(ContinueAlgo, status) => {
       val newStatus: SupervisorStatus = status.resetContext()
-      unstashall
+      unstashAll
       goto(RunningSupervisorState) using newStatus
     }
 
@@ -246,3 +246,12 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
   initialize()
 }
 
+object Supervisor {
+  var counter = 0
+  val NB_ROUNDS = 2
+
+  def incrementCounter() : Int = {
+    counter = counter + 1
+    counter
+  }
+}
diff --git a/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala b/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
index 5ad8423..2e44305 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
@@ -40,16 +40,18 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
     * Returns true if the algorithm ends
     * @todo modify it
     */
-  def isTerminated : Boolean = ! isFirstRound
+  def isTerminated : Boolean = Supervisor.incrementCounter() == Supervisor.NB_ROUNDS
 
   /*Returns the updated supervisor's status when resetting the context*/
-  def resetContext(): SupervisorStatus {
+  def resetContext(): SupervisorStatus = {
     new SupervisorStatus(readyVariables,
-                       inactiveVariables = Set(),
-                       killedVariables,
-                       assignment new Context(),
-                       metric,
-                       isFirstRound
-                      )
+      inactiveVariables = Set(),
+      killedVariables,
+      assignment = new Context(),
+      metric,
+      isFirstRound
+    )
   }
 }
+
+
-- 
GitLab