Commit 22b6a492 authored by Benoît Barbot's avatar Benoît Barbot
Browse files

small progress

parent 623c5b8f
Pipeline #989 failed with stages
in 3 minutes and 3 seconds
const double T=150;
const double T=200;
const double invT=0.005;
const double Ttrans=0;
VariablesList = {time,DISC countT, t_a, t_b, PLVAR_powerState, PLVAR_B12O1, PLVAR_B12O2, PLVAR_B12O3} ;
LocationsList = {l0, l1,l2};
Valid=PROB;
remain=AVG(Last(PLVAR_B12O2));
Throughput_t_a= AVG(Last(t_a));
Throughput_t_b= AVG(Last(t_b));
MeanToken_powerState= AVG(Last( PLVAR_powerState));
......@@ -22,4 +23,4 @@ Edges={
((l1,l1),{t_b},time<=T,{t_b = t_b + invT, countT = countT+1 });
((l1,l1),{time_0_0,time_1_0,time_2_0,SynchIN15,Synch12O1,Synch12O2,Synch12O3,Synctrans},time<=T, # );
((l1,l2),#,time=T ,#);
};
\ No newline at end of file
};
pta
module originator
o : [0..1] init 0;
x : clock;
y : clock;
invariant
(o=0) => (x<=1)&(y<=1)
(x<=1)&(y<=1)
endinvariant
[a] (o=0) & (x<1)&(x>0) -> (o'=1) & (y'=0);
[b] (o=1) & (y<1)& (x<1)&(x>0)&(y>0) -> (o'=0) & (x'=0) & (y'=0);
[a] (o=0) & (x<1) -> (o'=1) & (y'=0);
[a] (o=1) & (y<1)&(x<1) -> (o'=0) & (x'=0) & (y'=0);
endmodule
......@@ -35,13 +35,13 @@ using namespace std;
template<class DEDState>
void LHA_orig<DEDState>::copyState(LHA_orig *A){
this->Vars = A->Vars;
this->LinForm.swap(A->LinForm);
this->OldLinForm.swap(A->OldLinForm);
this->LhaFunc.swap(A->LhaFunc);
this->Likelihood = A->Likelihood;
this->CurrentTime =A->CurrentTime;
this->CurrentLocation=A->CurrentLocation;
this->Vars = A->Vars;
this->LinForm.swap(A->LinForm);
this->OldLinForm.swap(A->OldLinForm);
this->LhaFunc.swap(A->LhaFunc);
this->Likelihood = A->Likelihood;
this->CurrentTime =A->CurrentTime;
this->CurrentLocation=A->CurrentLocation;
}
......@@ -60,7 +60,7 @@ void LHA_orig<DEDState>::fireAutonomous(int EdgeIndex,const DEDState &M){
/**
* Find a suitable syncronized transitions in the LHA
* Find a suitable syncronized transitions in the LHA
* @param tr a SPN transiiton index
* @param M is the marking of the SPN
* @param b a binding of the colored variable of the SPN for the transition.
......@@ -68,7 +68,7 @@ void LHA_orig<DEDState>::fireAutonomous(int EdgeIndex,const DEDState &M){
template<class DEDState>
int LHA_orig<DEDState>::synchroniseWith(size_t tr, const DEDState& m,const abstractBinding& b){
//Check if there exist a valid transition in the automata.
int SE = GetEnabled_S_Edges(tr, m, b);
if (SE >= 0) {
......@@ -97,11 +97,11 @@ AutEdge LHA_orig<DEDState>::GetEnabled_A_Edges(const DEDState& Marking) {
Ed.Index = it;
Ed.FiringTime = I.first;
}
}
}
}
return Ed;
}
......@@ -113,10 +113,10 @@ AutEdge LHA_orig<DEDState>::GetEnabled_A_Edges(const DEDState& Marking) {
template<class DEDState>
void LHA_orig<DEDState>::updateLHA(double DeltaT, const DEDState &Marking){
this->DoElapsedTimeUpdate(DeltaT, Marking);
this->UpdateLinForm(Marking);
this->UpdateLhaFunc(DeltaT);
this->CurrentTime += DeltaT;
this->DoElapsedTimeUpdate(DeltaT, Marking);
this->UpdateLinForm(Marking);
this->UpdateLhaFunc(DeltaT);
this->CurrentTime += DeltaT;
}
......@@ -141,9 +141,9 @@ void LHA_orig<DEDState>::reset(const DEDState& Marking) {
*/
template<class DEDState>
void LHA_orig<DEDState>::getFinalValues(const DEDState& m,vector<double>& v,vector<bool>& v2){
this->UpdateLinForm(m);
this->UpdateFormulaVal(m);
v=this->FormulaVal;
this->UpdateLinForm(m);
this->UpdateFormulaVal(m);
v=this->FormulaVal;
v2=this->FormulaValQual;
}
......@@ -258,4 +258,3 @@ double LHA<DEDState>::BoxedIntegral(double OldInt, double t, double Delta, doubl
//#include "MarkovChain.hpp"
//template class LHA<State>;
//template class LHA_orig<State>;
......@@ -55,7 +55,7 @@ ostream& operator<<(ostream& f, const Poly<N>& p){
}else{
f<< "x_" << (j+1) << "^";
}
f << p[i].d[j]<< " ";
}
}
......@@ -81,7 +81,7 @@ std::vector<Poly<N>> parse(const std::string file){
vector<Poly<N>> polyT;
std::ifstream polyf(file);
if(polyf.is_open()){
std::cerr << "start reading:" << file << endl;
//std::cerr << "start reading:" << file << endl;
while( polyf.good()){
string line;
std::getline(polyf, line);
......@@ -106,7 +106,7 @@ std::vector<Poly<N>> parse(const std::string file){
polyT.push_back(p);
}
}
cerr << "Finish parsing found "<< polyT.size() <<" polynomes" << endl;
//cerr << "Finish parsing found "<< polyT.size() <<" polynomes" << endl;
return polyT;
}
......
......@@ -53,4 +53,3 @@ template class LHA_orig<abstractState>;*/
#include "SKModelBase.cpp"
template class SKModel<EventsQueue>;
template class SKModel<EventsQueueSet>;
......@@ -175,7 +175,8 @@ void KroneckerState::seed(unsigned long seed){
double KroneckerState::sample(){
double alpha = pow(phi_d,baseId);
//(5437*baseId + 3671) % 9973; // A simple random (I choose the parameters randomly) linear congruantial pseudo random number generator.
//double alpha = sqrt(boost::math::prime(baseId-1));
double d;
double sample = modf( seed_val + (double)it * alpha, &d);
if(P.verbose > 4)cerr << "Sampling Kronecker; seed: "<< seed_val << " base: "<< baseId << "\tn: "<< it << "\tbasealpha: " << phi_d << "\talpha: "<< alpha << "->" << sample << endl;
......@@ -197,8 +198,8 @@ void KroneckerState::newTrajectory(){
}
double timeGen::sampleQuasiRandom(size_t){
//return vanDerCorputSampler.sample();
return kroneckerSampler.sample();
return vanDerCorputSampler.sample();
//return kroneckerSampler.sample();
}
void timeGen::reset(){
......@@ -408,10 +409,10 @@ double timeGen::GenerateTime(DistributionType distribution,size_t trid, const ar
/*
//Isotrop Hack
//std::uniform_real_distribution<> unif(lower, upper);
//gentime = unif(RandomNumber);
gentime = sampleQuasiRandom(trid);
gentime = (upper-lower)*gentime + lower;
std::uniform_real_distribution<> unif(lower, upper);
gentime = unif(RandomNumber);
//gentime = sampleQuasiRandom(trid);
//gentime = (upper-lower)*gentime + lower;
cerr << cd.userDefineCDF(param,gentime) << endl;
return gentime;
//Isotrop Hack
......
......@@ -6,165 +6,24 @@ using namespace std;
#include <math.h>
#include <float.h>
#include "LHA.hpp"
const double T=100;
const double T=100000;
const double Ttrans=0;
const double invT=0.01;
const double invT=1e-05;
namespace hybridVar {
};
struct Variables {
double time;
double countT;
double EXRayBlood;
double FallIll;
double HospitalArrival;
double EToThreat;
double EToSurgery;
double HighPrio;
double MediumPrio;
double DischargeL;
double LowPrio;
double BSurgery;
double ToSurgery;
double ToDoctor;
double ToDoctorL;
double BToStabilize;
double EToStabilize;
double DischargeRec;
double BBlood;
double BXRay;
double DischargeM;
double EBloodEx;
double EXRay;
double PLVAR_ReadyT;
double PLVAR_Healthy;
double PLVAR_Ill;
double PLVAR_Arrival;
double PLVAR_ThreatedByDocH;
double PLVAR_ThreatedByDocL;
double PLVAR_WaitingRoom;
double PLVAR_OperatingRoom;
double PLVAR_ArrivalUrgence;
double PLVAR_USurgery;
double PLVAR_TraumaTeam;
double PLVAR_Ustab;
double PLVAR_WSurgery;
double PLVAR_WBloodEx;
double PLVAR_WXRayEx;
double PLVAR_CountDoctor;
double PLVAR_MonitoredRoom;
double PLVAR_Doctor;
double PLVAR_PatientRecovered;
double PLVAR_UBloodEx;
double PLVAR_ResB;
double PLVAR_Waiting;
double PLVAR_ResX;
double PLVAR_UXRayEx;
double PLVAR_FXRay;
double PLVAR_FBloodEx;
};
bool varOrder(const Variables &v1,const Variables &v2){
if(v1.time<v2.time)return true;
if(v1.countT<v2.countT)return true;
if(v1.EXRayBlood<v2.EXRayBlood)return true;
if(v1.FallIll<v2.FallIll)return true;
if(v1.HospitalArrival<v2.HospitalArrival)return true;
if(v1.EToThreat<v2.EToThreat)return true;
if(v1.EToSurgery<v2.EToSurgery)return true;
if(v1.HighPrio<v2.HighPrio)return true;
if(v1.MediumPrio<v2.MediumPrio)return true;
if(v1.DischargeL<v2.DischargeL)return true;
if(v1.LowPrio<v2.LowPrio)return true;
if(v1.BSurgery<v2.BSurgery)return true;
if(v1.ToSurgery<v2.ToSurgery)return true;
if(v1.ToDoctor<v2.ToDoctor)return true;
if(v1.ToDoctorL<v2.ToDoctorL)return true;
if(v1.BToStabilize<v2.BToStabilize)return true;
if(v1.EToStabilize<v2.EToStabilize)return true;
if(v1.DischargeRec<v2.DischargeRec)return true;
if(v1.BBlood<v2.BBlood)return true;
if(v1.BXRay<v2.BXRay)return true;
if(v1.DischargeM<v2.DischargeM)return true;
if(v1.EBloodEx<v2.EBloodEx)return true;
if(v1.EXRay<v2.EXRay)return true;
if(v1.PLVAR_ReadyT<v2.PLVAR_ReadyT)return true;
if(v1.PLVAR_Healthy<v2.PLVAR_Healthy)return true;
if(v1.PLVAR_Ill<v2.PLVAR_Ill)return true;
if(v1.PLVAR_Arrival<v2.PLVAR_Arrival)return true;
if(v1.PLVAR_ThreatedByDocH<v2.PLVAR_ThreatedByDocH)return true;
if(v1.PLVAR_ThreatedByDocL<v2.PLVAR_ThreatedByDocL)return true;
if(v1.PLVAR_WaitingRoom<v2.PLVAR_WaitingRoom)return true;
if(v1.PLVAR_OperatingRoom<v2.PLVAR_OperatingRoom)return true;
if(v1.PLVAR_ArrivalUrgence<v2.PLVAR_ArrivalUrgence)return true;
if(v1.PLVAR_USurgery<v2.PLVAR_USurgery)return true;
if(v1.PLVAR_TraumaTeam<v2.PLVAR_TraumaTeam)return true;
if(v1.PLVAR_Ustab<v2.PLVAR_Ustab)return true;
if(v1.PLVAR_WSurgery<v2.PLVAR_WSurgery)return true;
if(v1.PLVAR_WBloodEx<v2.PLVAR_WBloodEx)return true;
if(v1.PLVAR_WXRayEx<v2.PLVAR_WXRayEx)return true;
if(v1.PLVAR_CountDoctor<v2.PLVAR_CountDoctor)return true;
if(v1.PLVAR_MonitoredRoom<v2.PLVAR_MonitoredRoom)return true;
if(v1.PLVAR_Doctor<v2.PLVAR_Doctor)return true;
if(v1.PLVAR_PatientRecovered<v2.PLVAR_PatientRecovered)return true;
if(v1.PLVAR_UBloodEx<v2.PLVAR_UBloodEx)return true;
if(v1.PLVAR_ResB<v2.PLVAR_ResB)return true;
if(v1.PLVAR_Waiting<v2.PLVAR_Waiting)return true;
if(v1.PLVAR_ResX<v2.PLVAR_ResX)return true;
if(v1.PLVAR_UXRayEx<v2.PLVAR_UXRayEx)return true;
if(v1.PLVAR_FXRay<v2.PLVAR_FXRay)return true;
if(v1.PLVAR_FBloodEx<v2.PLVAR_FBloodEx)return true;
return false;
};
template<class DEDState>
void LHA<DEDState>::resetVariables(){
Vars->time= 0;
Vars->countT= 0;
Vars->EXRayBlood= 0;
Vars->FallIll= 0;
Vars->HospitalArrival= 0;
Vars->EToThreat= 0;
Vars->EToSurgery= 0;
Vars->HighPrio= 0;
Vars->MediumPrio= 0;
Vars->DischargeL= 0;
Vars->LowPrio= 0;
Vars->BSurgery= 0;
Vars->ToSurgery= 0;
Vars->ToDoctor= 0;
Vars->ToDoctorL= 0;
Vars->BToStabilize= 0;
Vars->EToStabilize= 0;
Vars->DischargeRec= 0;
Vars->BBlood= 0;
Vars->BXRay= 0;
Vars->DischargeM= 0;
Vars->EBloodEx= 0;
Vars->EXRay= 0;
Vars->PLVAR_ReadyT= 0;
Vars->PLVAR_Healthy= 0;
Vars->PLVAR_Ill= 0;
Vars->PLVAR_Arrival= 0;
Vars->PLVAR_ThreatedByDocH= 0;
Vars->PLVAR_ThreatedByDocL= 0;
Vars->PLVAR_WaitingRoom= 0;
Vars->PLVAR_OperatingRoom= 0;
Vars->PLVAR_ArrivalUrgence= 0;
Vars->PLVAR_USurgery= 0;
Vars->PLVAR_TraumaTeam= 0;
Vars->PLVAR_Ustab= 0;
Vars->PLVAR_WSurgery= 0;
Vars->PLVAR_WBloodEx= 0;
Vars->PLVAR_WXRayEx= 0;
Vars->PLVAR_CountDoctor= 0;
Vars->PLVAR_MonitoredRoom= 0;
Vars->PLVAR_Doctor= 0;
Vars->PLVAR_PatientRecovered= 0;
Vars->PLVAR_UBloodEx= 0;
Vars->PLVAR_ResB= 0;
Vars->PLVAR_Waiting= 0;
Vars->PLVAR_ResX= 0;
Vars->PLVAR_UXRayEx= 0;
Vars->PLVAR_FXRay= 0;
Vars->PLVAR_FBloodEx= 0;
};
template<class DEDState>
void LHA<DEDState>::printHeader(ostream &s)const{
......@@ -177,444 +36,39 @@ void LHA<DEDState>::printState(ostream &s){
template<class DEDState>
const int LHA<DEDState>::ActionEdgesAr[] = {
1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,};
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,};
template<class DEDState>
LHA<DEDState>::LHA():NbLoc(3),NbTrans(21),NbVar(49),FinalLoc( 3,false){
LHA<DEDState>::LHA():NbLoc(3),NbTrans(21),NbVar(2),FinalLoc( 3,false){
InitLoc.insert(0);
FinalLoc[2]=true;
Edge= vector<LhaEdge>(24);
Edge= vector<LhaEdge>(4);
Edge[0] = LhaEdge(0, 0, 0,Synch);
Edge[1] = LhaEdge(1, 0, 1,Auto);
Edge[2] = LhaEdge(2, 1, 1,Synch);
Edge[3] = LhaEdge(3, 1, 1,Synch);
Edge[4] = LhaEdge(4, 1, 1,Synch);
Edge[5] = LhaEdge(5, 1, 1,Synch);
Edge[6] = LhaEdge(6, 1, 1,Synch);
Edge[7] = LhaEdge(7, 1, 1,Synch);
Edge[8] = LhaEdge(8, 1, 1,Synch);
Edge[9] = LhaEdge(9, 1, 1,Synch);
Edge[10] = LhaEdge(10, 1, 1,Synch);
Edge[11] = LhaEdge(11, 1, 1,Synch);
Edge[12] = LhaEdge(12, 1, 1,Synch);
Edge[13] = LhaEdge(13, 1, 1,Synch);
Edge[14] = LhaEdge(14, 1, 1,Synch);
Edge[15] = LhaEdge(15, 1, 1,Synch);
Edge[16] = LhaEdge(16, 1, 1,Synch);
Edge[17] = LhaEdge(17, 1, 1,Synch);
Edge[18] = LhaEdge(18, 1, 1,Synch);
Edge[19] = LhaEdge(19, 1, 1,Synch);
Edge[20] = LhaEdge(20, 1, 1,Synch);
Edge[21] = LhaEdge(21, 1, 1,Synch);
Edge[22] = LhaEdge(22, 1, 1,Synch);
Edge[23] = LhaEdge(23, 1, 2,Auto);
Edge[3] = LhaEdge(3, 1, 2,Auto);
Vars = new Variables;
tempVars = new Variables;
resetVariables();
Out_A_Edges =vector< set < int > >(NbLoc);
Out_A_Edges[0].insert(1);
Out_A_Edges[1].insert(23);
LinForm= vector<double>(47,0.0);
OldLinForm=vector<double>(47,0.0);
LhaFunc=vector<double>(47,0.0);
LhaFuncDefaults=vector<double>(47,0.0);
FormulaVal = vector<double>(47,0.0);
Out_A_Edges[1].insert(3);
LinForm= vector<double>(0,0.0);
OldLinForm=vector<double>(0,0.0);
LhaFunc=vector<double>(0,0.0);
LhaFuncDefaults=vector<double>(0,0.0);
FormulaVal = vector<double>(0,0.0);
FormulaValQual = vector<bool>(0,false);
}
template<class DEDState>
void LHA<DEDState>::DoElapsedTimeUpdate(double DeltaT,const DEDState& Marking) {
Vars->time += GetFlow(0, Marking) * DeltaT;
Vars->EXRayBlood += GetFlow(2, Marking) * DeltaT;
Vars->FallIll += GetFlow(3, Marking) * DeltaT;
Vars->HospitalArrival += GetFlow(4, Marking) * DeltaT;
Vars->EToThreat += GetFlow(5, Marking) * DeltaT;
Vars->EToSurgery += GetFlow(6, Marking) * DeltaT;
Vars->HighPrio += GetFlow(7, Marking) * DeltaT;
Vars->MediumPrio += GetFlow(8, Marking) * DeltaT;
Vars->DischargeL += GetFlow(9, Marking) * DeltaT;
Vars->LowPrio += GetFlow(10, Marking) * DeltaT;
Vars->BSurgery += GetFlow(11, Marking) * DeltaT;
Vars->ToSurgery += GetFlow(12, Marking) * DeltaT;
Vars->ToDoctor += GetFlow(13, Marking) * DeltaT;
Vars->ToDoctorL += GetFlow(14, Marking) * DeltaT;
Vars->BToStabilize += GetFlow(15, Marking) * DeltaT;
Vars->EToStabilize += GetFlow(16, Marking) * DeltaT;
Vars->DischargeRec += GetFlow(17, Marking) * DeltaT;
Vars->BBlood += GetFlow(18, Marking) * DeltaT;
Vars->BXRay += GetFlow(19, Marking) * DeltaT;
Vars->DischargeM += GetFlow(20, Marking) * DeltaT;
Vars->EBloodEx += GetFlow(21, Marking) * DeltaT;
Vars->EXRay += GetFlow(22, Marking) * DeltaT;
Vars->PLVAR_ReadyT += GetFlow(23, Marking) * DeltaT;
Vars->PLVAR_Healthy += GetFlow(24, Marking) * DeltaT;
Vars->PLVAR_Ill += GetFlow(25, Marking) * DeltaT;
Vars->PLVAR_Arrival += GetFlow(26, Marking) * DeltaT;
Vars->PLVAR_ThreatedByDocH += GetFlow(27, Marking) * DeltaT;
Vars->PLVAR_ThreatedByDocL += GetFlow(28, Marking) * DeltaT;
Vars->PLVAR_WaitingRoom += GetFlow(29, Marking) * DeltaT;
Vars->PLVAR_OperatingRoom += GetFlow(30, Marking) * DeltaT;
Vars->PLVAR_ArrivalUrgence += GetFlow(31, Marking) * DeltaT;
Vars->PLVAR_USurgery += GetFlow(32, Marking) * DeltaT;
Vars->PLVAR_TraumaTeam += GetFlow(33, Marking) * DeltaT;
Vars->PLVAR_Ustab += GetFlow(34, Marking) * DeltaT;
Vars->PLVAR_WSurgery += GetFlow(35, Marking) * DeltaT;
Vars->PLVAR_WBloodEx += GetFlow(36, Marking) * DeltaT;
Vars->PLVAR_WXRayEx += GetFlow(37, Marking) * DeltaT;
Vars->PLVAR_CountDoctor += GetFlow(38, Marking) * DeltaT;
Vars->PLVAR_MonitoredRoom += GetFlow(39, Marking) * DeltaT;
Vars->PLVAR_Doctor += GetFlow(40, Marking) * DeltaT;
Vars->PLVAR_PatientRecovered += GetFlow(41, Marking) * DeltaT;
Vars->PLVAR_UBloodEx += GetFlow(42, Marking) * DeltaT;
Vars->PLVAR_ResB += GetFlow(43, Marking) * DeltaT;
Vars->PLVAR_Waiting += GetFlow(44, Marking) * DeltaT;
Vars->PLVAR_ResX += GetFlow(45, Marking) * DeltaT;
Vars->PLVAR_UXRayEx += GetFlow(46, Marking) * DeltaT;
Vars->PLVAR_FXRay += GetFlow(47, Marking) * DeltaT;
Vars->PLVAR_FBloodEx += GetFlow(48, Marking) * DeltaT;
}
template<class DEDState>
double LHA<DEDState>::GetFlow(int v, const DEDState& Marking)const{
switch (v){
case 1: //countT
break;
case 26: //PLVAR_Arrival
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_Arrival.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 31: //PLVAR_ArrivalUrgence
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_ArrivalUrgence.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 38: //PLVAR_CountDoctor
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_CountDoctor * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 40: //PLVAR_Doctor
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_Doctor * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 48: //PLVAR_FBloodEx
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_FBloodEx.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 47: //PLVAR_FXRay
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_FXRay.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 24: //PLVAR_Healthy
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_Healthy.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 25: //PLVAR_Ill
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_Ill.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 39: //PLVAR_MonitoredRoom
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_MonitoredRoom.card() * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break;
case 30: //PLVAR_OperatingRoom
switch (CurrentLocation){
case 1: //l1
return Marking.P->_PL_OperatingRoom * 0.01;
break;
default: //l0,l2,
return 0.0;
break;
}
break<