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
val variable = directory.variableOf(sender)
if (debug) println(s"Supervisor ($stateName): $variable is ready")
stay using
new SupervisorStatus(readyVariables = status.readyVariables + variable,
new SupervisorStatus(readyVariables = status.readyVariables + variable, previousObj = status.previousObj,
isFirstRound = status.isFirstRound)
//When all the agents become ready
......@@ -100,7 +100,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
directory.addressOf(anyVariable) ! Trigger
}
goto(RunningSupervisorState) using
new SupervisorStatus(readyVariables = status.readyVariables + variable,
new SupervisorStatus(readyVariables = status.readyVariables + variable, previousObj = status.previousObj,
isFirstRound = status.isFirstRound)
}
......@@ -121,15 +121,17 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
stay using new SupervisorStatus(readyVariables = status.readyVariables,
inactiveVariables = status.inactiveVariables + variable,
assignment = status.assignment.fix(variable,value),
previousObj = status.previousObj,
isFirstRound = status.isFirstRound)
// When all the agent become inactive
case Event(InformValue(value), status) if status.assignment.valuation.size == pb.size - 1 =>
val variable: Variable = directory.variableOf(sender)
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,
assignment = status.assignment.fix(variable,value),
previousObj = status.previousObj,
isFirstRound = false)
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
directory.addressOf(anyVariable) ! Query
}
if (trace) println(s"Supervisor -> self : StopAlgo")
updatedStatus = updatedStatus.updateObjectiveValue(pb.objective(status.assignment))
self ! StopAlgo
}
goto(Deciding) using updatedStatus
......@@ -203,6 +206,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
killedVariables = status.killedVariables + variable,
assignment = status.assignment,
status.metric,
previousObj = status.previousObj,
isFirstRound = status.isFirstRound)
// When all the agent become inactive
......@@ -222,7 +226,9 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
inactiveVariables = status.inactiveVariables,
killedVariables = status.killedVariables + variable,
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(),
val killedVariables: Set[Variable] = Set(),
val assignment: Context = new Context(),
val metric: Metric= collection.mutable.Map[String,Double](),
val previousObj: Double = 0.0,
val isFirstRound : Boolean = true
){
......@@ -49,9 +50,22 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
killedVariables,
assignment = new Context(),
metric,
previousObj,
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