#include "user.h" #include /* global variables */ double P1,P2,P3; int R1; 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); /* allow the user to enter values for parameters */ P1=input("Mean processing rate for A parts at Machine 1?"); R1=input("Mean repair time for Machine 1?"); P2=input("Mean processing rate for B parts at Machine 2?"); P3=input("Mean assembly rate for widgets at Machine 3?"); } void net() { /* robot */ place("r1"); /* machine 1 */ place("p11"); place("p12"); place("p13"); place("p14"); place("p15"); place("p16"); trans("t11"); // acquiring robot (machine 1) trans("t12"); // loading A part trans("t13"); // processing A part trans("t14"); // acquring robot and machine 3 access trans("t15"); // transfer to machine 3 trans("t16"); // breakdown trans("t17"); // repair /* probabilities and priorities for immediate transitions */ probval("t11", 0.5); priority("t11", 1); probval("t14", 0.5); priority("t14", 1); /* rates for timed transitions */ rateval("t12", 0.1); rateval("t13", 0.95*(P1)); rateval("t15", 0.1); rateval("t16", 0.05*(P1)); rateval("t17", 1.0/R1); /* arcs */ iarc("t11","p11"); iarc("t12","p12"); iarc("t11","r1"); iarc("t13","p13"); iarc("t14","p14"); iarc("t14","r1"); iarc("t15","p15"); iarc("t16","p13"); iarc("t17","p16"); oarc("t11","p12"); oarc("t12","p13"); oarc("t12","r1"); oarc("t13","p14"); oarc("t14","p15"); oarc("t15","p11"); oarc("t15","r1"); oarc("t16","p16"); oarc("t17","p13"); /* machine 2 */ place("p21"); place("p22"); place("p23"); place("p24"); place("p25"); trans("t21"); // acquiring robot (machine 2) trans("t22"); // loading B part trans("t23"); // processing B part trans("t24"); // acquiring robot and machine 3 access trans("t25"); // transfer to machine 3 /* probabilities and priorities for immediate transitions */ probval("t21", 0.5); priority("t21", 1); probval("t24", 0.5); priority("t24", 1); /* rates for timed transitions */ rateval("t22", 0.1); rateval("t23", P2); rateval("t25", 0.1); /* arcs */ iarc("t21","p21"); iarc("t22","p22"); iarc("t21","r1"); iarc("t23","p23"); iarc("t24","p24"); iarc("t24","r1"); iarc("t25","p25"); oarc("t21","p22"); oarc("t22","p23"); oarc("t22","r1"); oarc("t23","p24"); oarc("t24","p25"); oarc("t25","p21"); oarc("t25","r1"); /* machine 3 */ place("p33"); place("p34"); place("p31"); place("p32"); place("p35"); place("p36"); trans("t31"); // widget assembly trans("t32"); // loading A part from buffer /* rates for timed transitions */ rateval("t31", P3); rateval("t32", 0.5); /* arcs */ iarc("t14","p33"); iarc("t24","p34"); iarc("t31","p35"); iarc("t31","p32"); iarc("t32","p36"); iarc("t32","p31"); oarc("t15","p31"); oarc("t25","p32"); oarc("t31","p36"); oarc("t31","p34"); oarc("t32","p35"); oarc("t32","p33"); /* initial marking */ init("p13",1); // machine 1 init("p23",1); // machine 2 init("p33",3); // buffer capacity init("p34",1); // machine 3 (for A parts) init("p36",1); // machine 3 (for B parts) init("r1",1); // robot } int assert() { return(RES_NOERR); } void ac_init() { pr_net_info(); } void ac_reach() { printf("The reachability graph has been generated\n"); } void ac_final() { pr_mc_info(); pr_std_average(); }