#include "user.h" #include /* prototype reward functions */ double util (); double tput (); double DP (); void parameters() { iopt(IOP_METHOD,VAL_GASEI); iopt(IOP_PR_FULL_MARK,VAL_YES); iopt(IOP_PR_RSET,VAL_NO); iopt(IOP_ITERATIONS,20000); fopt(FOP_PRECISION,0.00000001); iopt(IOP_PR_RGRAPH,VAL_NO); iopt(IOP_PR_MC,VAL_NO); iopt(IOP_PR_PROB,VAL_NO); iopt(IOP_MC,VAL_CTMC); iopt(IOP_DEBUG,VAL_NO); } void net() { /* The first PC/node */ place("p11"); place("p12"); place("p13"); trans("t11"); trans("t12"); trans("t13"); rateval("t11", 0.01); rateval("t13", 0.1); probval("t12", 1.0); priority("t12", 1); init("p11",1); iarc("t11","p11"); iarc("t12","p12"); iarc("t12","p1"); iarc("t13","p13"); oarc("t11","p12"); oarc("t12","p13"); oarc("t13","p11"); oarc("t13","q1"); /* The second PC/node */ place("p21"); place("p22"); place("p23"); trans("t21"); trans("t22"); trans("t23"); rateval("t21", 0.01); rateval("t23", 0.1); probval("t22", 1.0); priority("t22", 1); init("p21",1); iarc("t21","p21"); iarc("t22","p22"); iarc("t22","p2"); iarc("t23","p23"); oarc("t21","p22"); oarc("t22","p23"); oarc("t23","p21"); oarc("t23","q2"); /* The third PC/node */ place("p31"); place("p32"); place("p33"); trans("t31"); trans("t32"); trans("t33"); rateval("t31", 0.01); rateval("t33", 0.1); probval("t32", 1.0); priority("t32", 1); init("p31",1); iarc("t31","p31"); iarc("t32","p32"); iarc("t32","p3"); iarc("t33","p33"); oarc("t31","p32"); oarc("t32","p33"); oarc("t33","p31"); oarc("t33","q3"); /* The fourth PC/node */ place("p41"); place("p42"); place("p43"); trans("t41"); trans("t42"); trans("t43"); rateval("t41", 0.01); rateval("t43", 0.1); probval("t42", 1.0); priority("t42", 1); init("p41",1); iarc("t41","p41"); iarc("t42","p42"); iarc("t42","p4"); iarc("t43","p43"); oarc("t41","p42"); oarc("t42","p43"); oarc("t43","p41"); oarc("t43","q4"); /* The LAN */ place("p1"); place("q1"); place("p2"); place("q2"); place("p3"); place("q3"); place("p4"); place("q4"); trans("tb1"); trans("tw2"); trans("tb2"); trans("tw3"); trans("tb3"); trans("tw4"); trans("tb4"); trans("tw1"); rateval("tw1", 1.0); rateval("tw2", 1.0); rateval("tw3", 1.0); rateval("tw4", 1.0); probval("tb1", 1.0); priority("tb1", 1); probval("tb2", 1.0); priority("tb2", 1); probval("tb3", 1.0); priority("tb3", 1); probval("tb4", 1.0); priority("tb4", 1); init("p1",1); iarc("tb1","p1"); iarc("tw2","q1"); iarc("tb2","p2"); iarc("tw3","q2"); iarc("tb3","p3"); iarc("tw4","q3"); iarc("tb4","p4"); iarc("tw1","q4"); harc("tb1","p1"); harc("tb2","p2"); harc("tb3","p3"); harc("tb4","p4"); oarc("tb1", "q1"); oarc("tw2", "p2"); oarc("tb2", "q2"); oarc("tw3", "p3"); oarc("tb3", "q3"); oarc("tw4", "p4"); oarc("tb4", "q4"); oarc("tw1", "p1"); } int assert(){ return(RES_NOERR); } void ac_init() { pr_net_info(); } void ac_reach() { printf("The reachability graph has been generated\n"); } /* Utilisation of the ring, i.e. % of time spent transmitting */ double util() { if (enabled("t13") || enabled("t23") || enabled("t33") || enabled("t43")) return(1.0); else return(0.0); } /* Throughput of data packets from the first PC */ double tput() { if (enabled("t13")) return(0.1); else return(0.0); } /* Number of data packets ready for transmission, or in transmission, at first PC */ double DP() { return(mark("p12") + mark("p13")); } void ac_final() { pr_mc_info(); pr_std_average(); pr_expected("Utilisation of LAN for transmission",util); pr_expected("Throughput of PC1",tput); pr_expected("Average no. of data packets at PC1",DP); }