# include "user.h" /* This example corresponds to the following piece of software: A: statements; PARBEGIN B1: statements; B2: IF cond THEN C: statements; ELSE DO D: statements WHILE cond; IFEND PAREND */ parameters() { /* Transient analysis */ iopt(IOP_METHOD,VAL_TSUNIF); } /* rates and probabilities are defined as functions */ rate_type rate0() { return(1.0);} rate_type rate1() { return(0.3);} probability_type prob2() { return(0.4);} probability_type prob3() { return(0.6);} rate_type rate4() { return(0.2);} rate_type rate5() { return(7.0);} probability_type prob6() { return(0.05);} probability_type prob7() { return(0.95);} probability_type prob8() { return(1.0);} net() { place("p0"); init("p0",1); place("p1"); place("p2"); place("p3"); place("p4"); place("p5"); place("p6"); place("p7"); place("p8"); /* priorities associated with transitions */ trans("A"); trans("B1"); trans("t2"); priority("t2",1); trans("t3"); priority("t3",1); trans("C"); trans("D"); trans("t6"); priority("t6",1); trans("t7"); priority("t7",1); trans("t8"); priority("t8",1); /* rate and probability functions */ ratefun("A", rate0); ratefun("B1",rate1); probfun("t2",prob2); probfun("t3",prob3); ratefun("C", rate4); ratefun("D", rate5); probfun("t6",prob6); probfun("t7",prob7); probfun("t8",prob8); iarc("A","p0"); oarc("A","p1"); oarc("A","p3"); iarc("B1","p1"); oarc("B1","p2"); iarc("t2","p3"); oarc("t2","p4"); iarc("t3","p3"); oarc("t3","p5"); iarc("C","p4"); oarc("C","p6"); iarc("D","p5"); oarc("D","p7"); iarc("t6","p7"); oarc("t6","p6"); iarc("t7","p7"); oarc("t7","p5"); iarc("t8","p2"); iarc("t8","p6"); oarc("t8","p8"); } assert() { return(RES_NOERR); } ac_init() { fprintf(stderr,"\nSoftware modeling example\n\n"); } ac_reach() { } reward_type rfunc() { return(mark("p8")); } ac_final() { int i; /* Transient analysis with multiple time points */ /* reward function */ for ( i = 1; i < 10; i++ ) { time_value( (double) i ); pr_expected("probability of completion", rfunc); } for ( i = 10; i <= 20; i += 2 ) { time_value( (double) i ); pr_expected("probability of completion", rfunc); } for ( i = 20; i <= 50; i += 5 ) { time_value( (double) i ); pr_expected("probability of completion", rfunc); } }