Warning: session_start(): open(/var/lib/php/sessions/sess_667kn8tq7p2vsf3remmaieji3p, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass ProbabilisticScheduler implements Steppable {
transient TreeSetWithDuplicates entries = new(byProbability());
bool verbose;
double cutoffProbabilityOnAdd = 50;
double cutoffProbabilityOnExecute = 50;
Comparator byProbability() { ret (a, b) -> cmp(b.probability, a.probability); }
new ThreadLocal threadProbability;
class Entry {
double probability;
Runnable action;
run { action.run(); }
toString {
ret toStringWithFields(this, "stateNumber", "probability");
}
}
void add(double probability, Runnable action) {
if (action == null) ret;
if (probability < cutoffProbabilityOnAdd) ret;
entries.add(action);
}
public bool step() {
ret stepFirstUnstepped();
}
Entry nextSteppable() {
Entry s = first(entries);
if (s != null && s.probability < cutoffProbabilityOnExecute) nullk;
ret s;
}
// returns false when done stepping
bool stepFirstUnstepped() {
Entry s = firstUnstepped(), ret false if null;
entries.remove(s);
temp tempSetTL(currentProbability, s.probability);
s.run();
true;
}
void reset {
entries.clear();
}
run {
stepAll(this);
}
void printStats() {
Entry first = entries.first(), last = entries.last();
print("ProbabilisticScheduler. nEntries(entries)
+ ", highest probability in queue: " + (first == null ? "-" : first.probability)
+ ", lowest probability in queue: " + (last == null ? "-" : last.probability)
+ ", cutoff probability: " + cutoffProbabilityOnAdd + "/" + cutoffProbabilityOnExecute
+ ", done: " + yesNoShort(nextSteppable() == null));
}
S stats(TreeSetWithDuplicates ts) {
ret l(ts) + (empty(ts) ? "" : " (best: " + iround(first(ts).probability) + ")");
}
}