|
Go to the documentation of this file.
42 FD_DX( "ProposingExecutor(" << this << ")::DoAssign(other)");
69 FD_DS( "ProposingExecutor::ResetProposer()");
71 if(seed == 0) seed = static_cast<long>(time(NULL));
74 EventSet::Iterator eit;
86 FD_DS( "ProposingExecutor::ResetProposer(): done");
93 FD_DS( "ProposingExecutor::Reset()");
97 FD_DS( "ProposingExecutor::Reset(): done");
103 std::stringstream retstr;
104 EventSet::Iterator eit;
121 FD_DS( "ProposingExecutor::ExecuteTime(): LoggingExecutor to execute time "<< duration);
124 EventSet::Iterator eit;
151 FD_DS( "ProposingExecutor::ExecuteTime(): LoggingExecutor to execute time: done ");
166 FD_DS( "ProposingExecutor::ExecuteEvent(): ProposingExecutor to execute event "<< mSimEvents. Str(event));
170 FD_DS( "ProposingExecutor::ExecuteEvent(): executed "<< EventName(event));
174 FD_DS( "ProposingExecutor::ExecuteEvent(): new active events "<< newActiveEvents. ToString());
178 EventSet::Iterator eit;
188 FD_DS( "ProposingExecutor::ExecuteEvent(): invalidating trigger type event "<< EStr(*eit));
201 if(etime. In(schedule)) {
204 FD_DS( "ProposingExecutor::ExecuteEvent(): delay event " << EStr(*eit) << ": etime "
205 << etime. Str() << " scheduled " << schedule);
210 FD_DS( "ProposingExecutor::ExecuteEvent(): invalidating state for executed event "<< EStr(*eit));
234 if(newActiveEvents. Exists(*eit))
241 FD_DS( "ProposingExecutor::ExecuteEvent(): done");
250 if(executeEvent. Event==0) return true;
262 FD_DS( "ProposingExecutor::ProposeNextTransition()");
271 EventSet::Iterator eit;
278 FD_DS( "ProposingExecutor::ProposeNextTransition(): current time: " <<
280 FD_DS( "ProposingExecutor::ProposeNextTransition(): timed state: " <<
282 FD_DS( "ProposingExecutor::ProposeNextTransition(): active events: " <<
284 FD_DS( "ProposingExecutor::ProposeNextTransition(): enabled interval: " <<
285 enabledInterval. Str());
286 FD_DS( "ProposingExecutor::ProposeNextTransition(): enabled time: " <<
288 FD_DS( "ProposingExecutor::ProposeNextTransition(): enabled events: " << std::endl <<
293 std::vector<faudes::Idx> candidates;
298 for(eit=enabledEvents. Begin(); eit!=enabledEvents. End(); ++eit) {
302 if(pattr-> Priority().mPriority >prio) {
306 candidates.push_back(candidate);
309 if((pattr-> Priority().mPriority ==prio) && (prio>=0))
310 candidates.push_back(*eit);
314 if(candidates.size()>1) {
320 FD_DS( "ProposingExecutor::ProposeNextTransition(): propose by priority: " << mSimEvents. Str(candidate));
328 for(eit=enabledEvents. Begin(); eit!=enabledEvents. End(); ++eit){
338 candidates.push_back(candidate);
342 candidates.push_back(*eit);
347 if(candidates.size()>1) {
353 FD_DS( "ProposingExecutor::ProposeNextTransition(): propose by stochastic: " << mSimEvents. Str(candidate) << " for " << tpTime::Str(occurence));
360 if(!enabledTime. Empty()) {
362 passtime=enabledInterval. UB();
363 if(enabledInterval. Empty()) passtime=0;
374 FD_DS( "ProposingExecutor::ProposeNextTransition(): propose to pass time: "<< tpTime::Str(passtime));
383 for(eit=enabledEvents. Begin(); eit!=enabledEvents. End(); ++eit){
387 if(pattr-> Priority().mPriority >prio || prio==0) {
391 candidates.push_back(candidate);
394 if((pattr-> Priority().mPriority ==prio) && (prio <0))
395 candidates.push_back(*eit);
399 if(candidates.size()>1) {
405 FD_DS( "ProposingExecutor::ProposeNextTransition(): propose by priority: " << mSimEvents. Str(candidate));
413 FD_DS( "ProposingExecutor::ProposeNextTransition(): Deadlocked");
420 FD_DS( "ProposingExecutor::ProposeNextTransition(): Lifelock");
429 FD_DS( "ProposingExecutor::ExecuteNextTransition() *********************************************************** ");
443 if((execTimedEvent. Event==0) && (execTimedEvent. Time==0)) break;
450 if(execTimedEvent. Event!=0) break;
453 currentTime+=execTimedEvent. Time;
458 if(execTimedEvent. Event!=0) {
459 execTimedEvent. Time=currentTime;
460 return execTimedEvent;
465 execTimedEvent. Event=0;
466 return execTimedEvent;
473 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << ")");
476 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): no stoxchastic attribute found");
482 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): event not expired");
500 if(atarget. Empty()) {
501 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): empty target");
505 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): for timed automaton target " << atarget. Str());
507 std::vector<double> pdfparavec=pattr-> Stochastic().mParameter;
509 starget. LB(static_cast<tpTime::Type>(pdfparavec[0]));
510 starget. UB(static_cast<tpTime::Type>(pdfparavec[1]));
514 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): for restricted target " << atarget. Str());
515 if(atarget. Empty()) {
516 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): empty target");
528 occtime= ran_gauss(pdfparavec[2],pdfparavec[3],atarget. LB(),atarget. UB());
536 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << ") internal error: no valid stochastic defs");
542 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): sampling failed: A");
546 long int round= static_cast<unsigned long>(occtime/ tpTime::Step + 0.5);
548 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): random sample " << schedule
549 << "(" << occtime << ")");
559 if(!atarget. In(schedule)) {
560 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): sampling failed: B");
578 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): re-sampling");
586 FD_DS( "ProposingExecutor::Schedule(" << EStr(event) << "): delay type: etime "
587 << etime. Str() << " delay for " << schedule);
592 schedule+=etime. LB();
593 if(etime. In(schedule)) {
608 std::string label=rLabel;
609 if(label== "") label = "Executor";
620 FD_DC( "ProposingExecutor::DoRead(rTr, " << rLabel<< ")");
621 std::string label=rLabel;
622 if(label== "") label = "Executor";
625 while(!rTr. Eos(label)) {
626 FD_DC( "ProposingExecutor::DoRead(rTr, " << rLabel<< "): loop");
640 conditions. Read(rTr, "Conditions", this);
657 std::stringstream errstr;
658 errstr << "Invalid token, generators, conditions or simeventattribute section expected, " << rTr. FileLine();
659 throw Exception( "ProposingExecutor::DoRead", errstr.str(), 502);
662 FD_DC( "ProposingExecutor::DoRead(rTr, " << rLabel<< "): done");
669 FD_DX( "ProposingExecutor(" << this << ")::RevertToStep("<< step << ")");
673 if(!res) return false;
libFAUDES 2.24g
--- 2014.09.15
--- c++ api documentaion by doxygen
|