Skip to content
Snippets Groups Projects
Commit bb989286 authored by Alex's avatar Alex
Browse files

problematic supervisor

parent bd0551c1
No related branches found
No related tags found
No related merge requests found
...@@ -88,7 +88,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co ...@@ -88,7 +88,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
val variable = directory.variableOf(sender) val variable = directory.variableOf(sender)
if (debug) println(s"Supervisor ($stateName): $variable is ready") if (debug) println(s"Supervisor ($stateName): $variable is ready")
stay using stay using
new SupervisorStatus(readyVariables = status.readyVariables + variable, new SupervisorStatus(readyVariables = status.readyVariables + variable, previousObj = status.previousObj,
isFirstRound = status.isFirstRound) isFirstRound = status.isFirstRound)
//When all the agents become ready //When all the agents become ready
...@@ -100,7 +100,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co ...@@ -100,7 +100,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
directory.addressOf(anyVariable) ! Trigger directory.addressOf(anyVariable) ! Trigger
} }
goto(RunningSupervisorState) using goto(RunningSupervisorState) using
new SupervisorStatus(readyVariables = status.readyVariables + variable, new SupervisorStatus(readyVariables = status.readyVariables + variable, previousObj = status.previousObj,
isFirstRound = status.isFirstRound) isFirstRound = status.isFirstRound)
} }
...@@ -121,15 +121,17 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co ...@@ -121,15 +121,17 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
stay using new SupervisorStatus(readyVariables = status.readyVariables, stay using new SupervisorStatus(readyVariables = status.readyVariables,
inactiveVariables = status.inactiveVariables + variable, inactiveVariables = status.inactiveVariables + variable,
assignment = status.assignment.fix(variable,value), assignment = status.assignment.fix(variable,value),
previousObj = status.previousObj,
isFirstRound = status.isFirstRound) isFirstRound = status.isFirstRound)
// When all the agent become inactive // When all the agent become inactive
case Event(InformValue(value), status) if status.assignment.valuation.size == pb.size - 1 => case Event(InformValue(value), status) if status.assignment.valuation.size == pb.size - 1 =>
val variable: Variable = directory.variableOf(sender) val variable: Variable = directory.variableOf(sender)
if (debug) println(s"Supervisor ($stateName): $variable is finally inactive") if (debug) println(s"Supervisor ($stateName): $variable is finally inactive")
val updatedStatus = new SupervisorStatus(readyVariables = status.readyVariables, var updatedStatus = new SupervisorStatus(readyVariables = status.readyVariables,
inactiveVariables = status.inactiveVariables + variable, inactiveVariables = status.inactiveVariables + variable,
assignment = status.assignment.fix(variable,value), assignment = status.assignment.fix(variable,value),
previousObj = status.previousObj,
isFirstRound = false) isFirstRound = false)
if (! updatedStatus.isTerminated){// If the solving must be restart for another round if (! updatedStatus.isTerminated){// If the solving must be restart for another round
...@@ -147,6 +149,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co ...@@ -147,6 +149,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
directory.addressOf(anyVariable) ! Query directory.addressOf(anyVariable) ! Query
} }
if (trace) println(s"Supervisor -> self : StopAlgo") if (trace) println(s"Supervisor -> self : StopAlgo")
updatedStatus = updatedStatus.updateObjectiveValue(pb.objective(status.assignment))
self ! StopAlgo self ! StopAlgo
} }
goto(Deciding) using updatedStatus goto(Deciding) using updatedStatus
...@@ -203,6 +206,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co ...@@ -203,6 +206,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
killedVariables = status.killedVariables + variable, killedVariables = status.killedVariables + variable,
assignment = status.assignment, assignment = status.assignment,
status.metric, status.metric,
previousObj = status.previousObj,
isFirstRound = status.isFirstRound) isFirstRound = status.isFirstRound)
// When all the agent become inactive // When all the agent become inactive
...@@ -222,7 +226,9 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co ...@@ -222,7 +226,9 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
inactiveVariables = status.inactiveVariables, inactiveVariables = status.inactiveVariables,
killedVariables = status.killedVariables + variable, killedVariables = status.killedVariables + variable,
assignment = status.assignment, assignment = status.assignment,
metric, isFirstRound = status.isFirstRound) metric,
previousObj = status.previousObj,
isFirstRound = status.isFirstRound)
} }
/** /**
......
...@@ -18,6 +18,7 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(), ...@@ -18,6 +18,7 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
val killedVariables: Set[Variable] = Set(), val killedVariables: Set[Variable] = Set(),
val assignment: Context = new Context(), val assignment: Context = new Context(),
val metric: Metric= collection.mutable.Map[String,Double](), val metric: Metric= collection.mutable.Map[String,Double](),
val previousObj: Double = 0.0,
val isFirstRound : Boolean = true val isFirstRound : Boolean = true
){ ){
...@@ -49,9 +50,22 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(), ...@@ -49,9 +50,22 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
killedVariables, killedVariables,
assignment = new Context(), assignment = new Context(),
metric, metric,
previousObj,
isFirstRound isFirstRound
) )
} }
//Returns the updated status with new value of objective function
def updateObjectiveValue(newObj: Double): SupervisorStatus = {
new SupervisorStatus(readyVariables,
inactiveVariables,
killedVariables,
assignment,
metric,
previousObj = newObj,
isFirstRound
)
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment