Browse Source

Fixes, tidies in simulator.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@1963 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 16 years ago
parent
commit
4a8ea16a6c
  1. 3
      prism/src/simulator/GenerateSimulationPath.java
  2. 113
      prism/src/simulator/SimulatorEngine.java

3
prism/src/simulator/GenerateSimulationPath.java

@ -226,7 +226,8 @@ public class GenerateSimulationPath
done = false; done = false;
while (!done) { while (!done) {
// generate a single step of path // generate a single step of path
engine.automaticTransitions(1, simLoopCheck);
// TODO: engine.automaticTransitions(1, simLoopCheck);
engine.automaticTransitions(1);
if (stochastic) if (stochastic)
t += engine.getTimeSpentInPathStep(i++); t += engine.getTimeSpentInPathStep(i++);
else else

113
prism/src/simulator/SimulatorEngine.java

@ -1176,10 +1176,10 @@ public class SimulatorEngine
public Object modelCheckSingleProperty(ModulesFile modulesFile, PropertiesFile propertiesFile, Expression expr, State initialState, int numIters, public Object modelCheckSingleProperty(ModulesFile modulesFile, PropertiesFile propertiesFile, Expression expr, State initialState, int numIters,
int maxPathLength) throws PrismException int maxPathLength) throws PrismException
{ {
ArrayList exprs;
ArrayList<Expression> exprs;
Object res[]; Object res[];
exprs = new ArrayList();
exprs = new ArrayList<Expression>();
exprs.add(expr); exprs.add(expr);
res = modelCheckMultipleProperties(modulesFile, propertiesFile, exprs, initialState, numIters, maxPathLength); res = modelCheckMultipleProperties(modulesFile, propertiesFile, exprs, initialState, numIters, maxPathLength);
@ -1335,37 +1335,30 @@ public class SimulatorEngine
private void doSampling(State initialState, int numIters, int maxPathLength) throws PrismException private void doSampling(State initialState, int numIters, int maxPathLength) throws PrismException
{ {
int iters = 0;
int lastPercentageDone = 0;
int percentageDone = 0;
double avgPathLength = 0;
int minPathFound = 0, maxPathFound = 0;
int i, iters;
// Flags
boolean stoppedEarly = false; boolean stoppedEarly = false;
boolean deadlocks_found = false;
boolean deadlocksFound = false;
boolean allKnown = false; boolean allKnown = false;
int i;
boolean shouldStopSampling = false;
// Path stats
double avgPathLength = 0;
int minPathFound = 0, maxPathFound = 0;
// Progress info
int lastPercentageDone = 0;
int percentageDone = 0;
// Timing info // Timing info
long start, start2, stop;
long start, stop;
double time_taken; double time_taken;
//TODO: allow stopping of sampling mid-way through?
//External flag set to false
boolean should_stop_sampling = false;
start = start2 = System.currentTimeMillis();
// Start
start = System.currentTimeMillis();
mainLog.print("\nSampling progress: ["); mainLog.print("\nSampling progress: [");
mainLog.flush(); mainLog.flush();
//The loop continues until each pctl/csl formula is satisfied:
//E.g. usually, this is when the correct number of iterations
//has been performed, but for some, such as cumulative rewards
//this can be early if a loop is detected at any point, this
//is all handled by the All_Done_Sampling() function
// Main sampling loop // Main sampling loop
while (!should_stop_sampling && iters < numIters) {
iters = 0;
while (!shouldStopSampling && iters < numIters) {
// Display progress // Display progress
percentageDone = ((10 * (iters)) / numIters) * 10; percentageDone = ((10 * (iters)) / numIters) * 10;
@ -1375,26 +1368,13 @@ public class SimulatorEngine
mainLog.flush(); mainLog.flush();
} }
//do polling and feedback every 2 seconds
stop = System.currentTimeMillis();
if (stop - start2 > 2000) {
//Write_Feedback(iteration_counter, numIters, false);
//int poll = Poll_Control_File();
//if(poll & STOP_SAMPLING == STOP_SAMPLING)
// should_stop_sampling = true;
start2 = System.currentTimeMillis();
}
iters++; iters++;
// Start the new path for this iteration (sample) // Start the new path for this iteration (sample)
initialisePath(initialState); initialisePath(initialState);
//loop_detection->Reset();
// Generate a path, up to at most maxPathLength steps // Generate a path, up to at most maxPathLength steps
for (i = 0; i < maxPathLength; i++) { for (i = 0; i < maxPathLength; i++) {
// See if all samplers have established a value; if so, stop. // See if all samplers have established a value; if so, stop.
allKnown = true; allKnown = true;
for (Sampler sampler : propertySamplers) { for (Sampler sampler : propertySamplers) {
@ -1403,51 +1383,13 @@ public class SimulatorEngine
} }
if (allKnown) if (allKnown)
break; break;
// Make a random transition // Make a random transition
automaticTransition(); automaticTransition();
//if(!loop_detection->Is_Proven_Looping()) { // removed this: for e.g. cumul rewards need to keep counting in loops...
/*if (modelType.continuousTime()) {
double time_in_state = Get_Sampled_Time();
last_state->time_spent_in_state = time_in_state;
for (int i = 0; i < no_reward_structs; i++) {
last_state->state_cost[i] = last_state->state_instant_cost[i]*time_in_state;
last_state->transition_cost[i] = Get_Transition_Reward(i);
total_state_cost[i] += last_state->state_instant_cost[i]*time_in_state;
total_transition_cost[i] += last_state->transition_cost[i];
path_cost[i] = total_state_cost[i] + total_transition_cost[i];
last_state->cumulative_state_cost[i] = total_state_cost[i];
last_state->cumulative_transition_cost[i] = total_transition_cost[i];
}
Notify_Path_Formulae(last_state, state_variables, loop_detection);
}
else
{
for (int i = 0; i < no_reward_structs; i++) {
last_state->state_cost[i] = last_state->state_instant_cost[i];
last_state->transition_cost[i] = Get_Transition_Reward(i);
total_state_cost[i] += last_state->state_instant_cost[i];
total_transition_cost[i] += last_state->transition_cost[i];
path_cost[i] = total_state_cost[i] + total_transition_cost[i];
last_state->cumulative_state_cost[i] = total_state_cost[i];
last_state->cumulative_transition_cost[i] = total_transition_cost[i];
}
Notify_Path_Formulae(last_state, state_variables, loop_detection);
}*/
//}
} }
// record if we found any deadlocks (can check this outside path gen loop because never escape deadlocks) // record if we found any deadlocks (can check this outside path gen loop because never escape deadlocks)
//if (loop_detection->Is_Deadlock()) deadlocks_found = true;
//if (loop_detection->Is_Deadlock()) deadlocksFound = true;
// TODO
// Update path length statistics // Update path length statistics
avgPathLength = (avgPathLength * (iters - 1) + (i)) / iters; avgPathLength = (avgPathLength * (iters - 1) + (i)) / iters;
@ -1467,7 +1409,7 @@ public class SimulatorEngine
} }
if (!stoppedEarly) { if (!stoppedEarly) {
if (!should_stop_sampling)
if (!shouldStopSampling)
mainLog.print(" 100% ]"); mainLog.print(" 100% ]");
mainLog.println(); mainLog.println();
stop = System.currentTimeMillis(); stop = System.currentTimeMillis();
@ -1481,11 +1423,11 @@ public class SimulatorEngine
} }
// print a warning if deadlocks occurred at any point // print a warning if deadlocks occurred at any point
if (deadlocks_found)
if (deadlocksFound)
mainLog.print("\nWarning: Deadlocks were found during simulation: self-loops were added\n"); mainLog.print("\nWarning: Deadlocks were found during simulation: self-loops were added\n");
// print a warning if simulation was stopped by the user // print a warning if simulation was stopped by the user
if (should_stop_sampling)
if (shouldStopSampling)
mainLog.print("\nWarning: Simulation was terminated before completion.\n"); mainLog.print("\nWarning: Simulation was terminated before completion.\n");
//write to feedback file with true to indicate that we have finished sampling //write to feedback file with true to indicate that we have finished sampling
@ -1498,9 +1440,10 @@ public class SimulatorEngine
} }
/** /**
* TODO
* Used to halt the sampling algorithm in its tracks.
* Halt the sampling algorithm in its tracks (not implemented).
*/ */
public static native void stopSampling();
public void stopSampling()
{
// TODO
}
} }
Loading…
Cancel
Save