#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 fifth PC/node */ place("p51"); place("p52"); place("p53"); trans("t51"); trans("t52"); trans("t53"); rateval("t51", 0.01); rateval("t53", 0.1); probval("t52", 1.0); priority("t52", 1); init("p51",1); iarc("t51","p51"); iarc("t52","p52"); iarc("t52","p5"); iarc("t53","p53"); oarc("t51","p52"); oarc("t52","p53"); oarc("t53","p51"); oarc("t53","q5"); /* The sixth PC/node */ place("p61"); place("p62"); place("p63"); trans("t61"); trans("t62"); trans("t63"); rateval("t61", 0.01); rateval("t63", 0.1); probval("t62", 1.0); priority("t62", 1); init("p61",1); iarc("t61","p61"); iarc("t62","p62"); iarc("t62","p6"); iarc("t63","p63"); oarc("t61","p62"); oarc("t62","p63"); oarc("t63","p61"); oarc("t63","q6"); /* The seventh PC/node */ place("p71"); place("p72"); place("p73"); trans("t71"); trans("t72"); trans("t73"); rateval("t71", 0.01); rateval("t73", 0.1); probval("t72", 1.0); priority("t72", 1); init("p71",1); iarc("t71","p71"); iarc("t72","p72"); iarc("t72","p7"); iarc("t73","p73"); oarc("t71","p72"); oarc("t72","p73"); oarc("t73","p71"); oarc("t73","q7"); /* The eighth PC/node */ place("p81"); place("p82"); place("p83"); trans("t81"); trans("t82"); trans("t83"); rateval("t81", 0.01); rateval("t83", 0.1); probval("t82", 1.0); priority("t82", 1); init("p81",1); iarc("t81","p81"); iarc("t82","p82"); iarc("t82","p8"); iarc("t83","p83"); oarc("t81","p82"); oarc("t82","p83"); oarc("t83","p81"); oarc("t83","q8"); /* The LAN */ place("p1"); place("q1"); place("p2"); place("q2"); place("p3"); place("q3"); place("p4"); place("q4"); place("p5"); place("q5"); place("p6"); place("q6"); place("p7"); place("q7"); place("p8"); place("q8"); trans("tb1"); trans("tw2"); trans("tb2"); trans("tw3"); trans("tb3"); trans("tw4"); trans("tb4"); trans("tw5"); trans("tb5"); trans("tw6"); trans("tb6"); trans("tw7"); trans("tb7"); trans("tw8"); trans("tb8"); trans("tw1"); rateval("tw1", 1.0); rateval("tw2", 1.0); rateval("tw3", 1.0); rateval("tw4", 1.0); rateval("tw5", 1.0); rateval("tw6", 1.0); rateval("tw7", 1.0); rateval("tw8", 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); probval("tb5", 1.0); priority("tb5", 1); probval("tb6", 1.0); priority("tb6", 1); probval("tb7", 1.0); priority("tb7", 1); probval("tb8", 1.0); priority("tb8", 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("tw5","q4"); iarc("tb5","p5"); iarc("tw6","q5"); iarc("tb6","p6"); iarc("tw7","q6"); iarc("tb7","p7"); iarc("tw8","q7"); iarc("tb8","p8"); iarc("tw1","q8"); harc("tb1","p1"); harc("tb2","p2"); harc("tb3","p3"); harc("tb4","p4"); harc("tb5","p5"); harc("tb6","p6"); harc("tb7","p7"); harc("tb8","p8"); oarc("tb1", "q1"); oarc("tw2", "p2"); oarc("tb2", "q2"); oarc("tw3", "p3"); oarc("tb3", "q3"); oarc("tw4", "p4"); oarc("tb4", "q4"); oarc("tw5", "p5"); oarc("tb5", "q5"); oarc("tw6", "p6"); oarc("tb6", "q6"); oarc("tw7", "p7"); oarc("tb7", "q7"); oarc("tw8", "p8"); oarc("tb8", "q8"); 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") || enabled("t53") || enabled("t63") || enabled("t73") || enabled("t83")) 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 the ring",util); pr_expected("Throughput of PC1",tput); pr_expected("Average no. of data packets at PC1",DP); }