Zebra mussel

Description

This example presents a first application of the platform provided by the software MeCoSim for the design of a plan for the management of the reservoir of Ribarroja in the area of Ebro River basin, managed by Endesa S.A., regarding the presence of an exotic invasive species: Zebra Mussel.

Model

The corresponding P-Lingua file is the following:

@model <probabilistic>

def main()
{
    @mu = []'p;
    @mu(p) += [[]'0]'{k},{k} :  101<= k <= 118;
    @mu(0,{k}) += []'{m}: 1<=m<=39, 101<= k <= 118;

    @ms({0},{k+100}) += X{s}*(q{k}) : 2<= s <= 6, 1<= k<= 18;
    @ms({0},{k+100}) += Q{13}*(q{k}), Q{39}*(q{k}) :  1<= k<= 18;
    @ms({36+m}) += alpha : 1<=m<=3;
    @ms({k+100}) += T{0},I1 : 1<=k<=18;

    /*** <Begin External Inoculation> ***/
    /*re1*/ [I1]'{k+100} --> [I*LE{k,1},Ip]'{k+100} :: 1:  1<=k<=18;
    /*re2*/ [I2]'{k+100} --> [I*LE{k,2}]'{k+100} :: 1:  1<=k<=18;
    /*r1*/ I[]'0 --> [I]'0 :: 1;
    /*r2*/ Ip[]'0 --> [Ip]'0 :: 1;
    /*** <End External Inoculation> ***/

    /*** <Begin Simulation of temperatures and order of activation of reproduction> ***/
    /*re3*/ [T{d}]'{k+100} --> [gamma{d+1},T{d+1}]'{k+100} :: p{d+1,k} : 0<= d <=34,1<=k<=18,d<>19 ;
    /*re4*/ [T{d}]'{k+100} --> [T{d+1}]'{k+100} :: 1-p{d+1,k} : 0<= d <=34, 1<=k<=18,d<>19;
    /*r3*/ gamma{m}[]'0 --> [gamma{m}]'0 :: 1 : 1<=m<=36;
    /*r4*/ gamma{m}[]'{m} --> -[gamma]'{m} :: 1 : 1<=m<=36;
    /*r5*/ -[gamma]'{m} --> []'{m} :: 1 : 1<=m<=36;
    /*** <End Simulation of temperatures and order of activation of reproduction>***/


    /*** <Begin Preparation to start reproduction> ***/
    /*r6*/ I -[]'{m} --> [I]'{m} :: 1 : 1<=m<=36;
    /*r7*/ X{1} -[]'{m} --> [#]'{m} :: 1 : 1<=m<=36;
    /*r8*/ X{s} -[]'{m} --> VR[X{s}]'{m} :: 1 : 2<=s<=6,1<=m<=36;
    /*r9*/ Q{d} -[]'{m} --> VR[Q{d+m}]'{m} :: 1 :  20-m<=d<=52-m, 1<=m<=20;
    /*r10*/ Q{d} -[]'{m} --> VR[Q{d+m-20}]'{m} :: 1 :  20-m+20<=d<=52-m+20,  21<=m<=36;
    /*r11*/ Q{d} -[]'{m} --> VR[X{1}]'{m} :: 1 :  53-m<=d<=72-m, 1<=m<=20;
    /*r12*/ Q{d} -[]'{m} --> VR[X{1}]'{m} :: 1 :  53-m+20<=d<=72-m+20,  21<=m<=36;
    /*** <End Preparation to start reproduction> ***/

    /*** <Begin Reproduction> ***/
    /*r13*/ [I]'{m}-->O{m} []'{m}:: 1 : 1<=m<=36;
    /*r14*/[Q{d}]'{m} --> Qp{d,m},O{m}*(g{1}*(12.15*d*d+117.81*d-3392))[]'{m} ::  0.5 : 20<= d <= 52, 1<= m <= 20;
    /*r15*/[Q{d}]'{m} --> Qp{d,m}[]'{m} :: 0.5 : 20<= d =< 52, 1<= m <= 20;
    /*r16*/[Q{d}]'{m} --> Qp{d,m},O{m}*((12.15*d*d+117.81*d-3392)*(1-g{1}))[]'{m} :: 0.5 : 20<= d<= 52,   21<= m <= 36;
    /*r17*/[Q{d}]'{m} --> Qp{d,m}[]'{m} :: 0.5 : 20<= d <= 52, 21<= m <= 36;
    /*r18*/ [X{s}]'{m} --> Y{s},O{m}*((1920.5*(52/4+52/2*s)-79065)*g{1}) []'{m} :: 0.5 : 2<=s<=6, 1<=m<=20;
    /*r19*/ [X{s}]'{m} --> Y{s},O{m}*((1920.5*(52/4+52/2*s)-79065)*(1-g{1}))  []'{m} :: 0.5 : 2<=s<=6, 21<=m<=36;
    /*r20*/ [X{s}]'{m} --> Y{s} []'{m} :: 0.5 : 2<=s<=6, 1<=m<=36;

    /*r21*/ [X{1}]'{m} --> Y{1},O{m}*((1920.5*(52)-79065)*g{1}) []'{m} :: 0.5 :  1<=m<=20;
    /*r22*/ [X{1}]'{m} --> Y{1},O{m}*((1920.5*(52)-79065)*(1-g{1}))  []'{m} :: 0.5 :  21<=m<=36;
    /*r23*/ [X{1}]'{m} --> Y{1} []'{m} :: 0.5 :  1<=m<=36;

    /*r24*/ [Y{s} --> #]'0 :: m{s} :  1<=s<=6;
    /*r25*/ [Y{s}]'0 -->V{s}[]'0 :: 1-m{s} : 1<=s<=6;
    /*** <End Reproduction> ***/

    /**** <Begin Adults Environment> ***/
    /*re5*/ [[V{s}]'{k+100} []'{r+100}]'p -->[[]'{k+100} [Vp{s}]'{r+100}]'p:: PA{k,r}: 1<=s<=6, 1<=k<=18, 1 <=r<=18,k<>r;
    /*re6*/ [[V{s}]'{k+100} ]'p -->[ [Vp{s}]'{k+100}]'p:: PA{k,k}: 1<=s<=6, 1<=k<=18;
    /*r26*/ Vp{s}[]'0 --> [V{s}]'0 :: 1: 1<=s<=6;
    /**** <End Adults Environment> ***/

    /*** <Viability of eggs> ***/
    /*r27*/ [O{m} --> #]'{0} ::g{2}:1<=m<=36;

    /*** <Temperature affecting the success in the fertilization> ***/
    /*r28*/ [O{m} --> L1{m}]'{0} ::(1-g{2})*(1-mo{1}):1<=m<=20;
    /*r29*/ [O{m} --> #]'{0} ::(1-g{2})*mo{1}:1<=m<=20;
    /*r30*/ [O{m} --> L1{m}]'{0} ::(1-g{2})*(1-mo{2}):21<=m<=36;
    /*r31*/ [O{m} --> #]'{0} ::(1-g{2})*mo{2}:21<=m<=36;

    /*** <Mortality> ***/
    /*r32*/ [L1{m} --> L2{m}]'0:: (1-g{3}):  1<=m<=36;
    /*r33*/ [L1{m} --> #]'0:: g{3} :   1<=m<=36;

    /*** <Distribution along the weeks> ***/
    /*r34*/ [L2{m}]'0 --> L3{m+j-1}[]'0:: PI{j,1}:  1<=m<=20, 1<=j<=11;
    /*r35*/ [L2{m}]'0 --> L3{m+j-1}[]'0:: PI{j,2}:  21<=m<=36, 1<=j<=3;

    /*** <Begin Vertical movement of larvae> ***/

    /* This 39 comes from the (36 +3) weeks lasting the reproduction in the second cycle. */
    /*re7*/ [L3{m} --> L{m,0,k,k+7}]'{k+100}:: 0.2*CV{m}:  1<=m<=39, 1<=k<=7;
    /*re8*/ [L3{m} --> L{m,0,k,k}]'{k+100} :: 1-0.2*CV{m}:  1<=m<=39, 1<=k<=7;
    /*re9*/ [L3{m} --> L{m,0,k,k-7}]'{k+100}:: 0.001:  1<=m<=39, 8<=k<=14;
    /*re10*/ [L3{m} --> L{m,0,k,k}]'{k+100} :: 1-0.001:  1<=m<=39, 8<=k<=14;
    /*re11*/ [L3{m} --> L{m,0,k,k-2}]'{k+100}:: 0.001:  1<=m<=39, 17<=k<=18;
    /*re12*/ [L3{m} --> L{m,0,k,k}]'{k+100} :: 1-0.001:  1<=m<=39, 17<=k<=18;
    /*** <End Vertical movement of larvae> ***/

    /*** <Begin Movement among environments due to the water renewal system every week> ***/

    /*** <High> ***/
    /*re13*/ [L{m,i,k,s}--> L{m+1,i+1,k,r}]'{k+100} :: PR{m,s,r} :  1<=m<=42, 0<=i<=3, 1<=k<=18,1<=s<=7,1<=r<=7;
    /*re14*/ [L{m,i,k,s}--> #]'{k+100} :: PR{m,s,8} :  1<=m<=42, 0<=i<=3, 1<=k<=18,1<=s<=7;

    /*** <Low> ***/
    /*re15*/ [L{m,i,k,s}--> L{m+1,i+1,k,r}]'{k+100} :: PR{m,s,r} :  1<=m<=42, 0<=i<=3, 1<=k<=18,8<=s<=14, 8<=r<=14;
    /*re16*/ [L{m,i,k,s}--> #]'{k+100} :: PR{m,s,15} :  1<=m<=42, 0<=i<=3, 1<=k<=18,8<=s<=14;

    /*** <Side branches> ***/
    /*re17*/ [L{m,i,15,15}--> L{m+1,i+1,15,15}]'{115} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re18*/ [L{m,i,15,15}--> L{m+1,i+1,15,1}]'{115} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re19*/ [L{m,i,17,17}--> L{m+1,i+1,17,17}]'{117} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re20*/ [L{m,i,17,17}--> L{m+1,i+1,17,8}]'{117} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re21*/ [L{m,i,17,15}--> L{m+1,i+1,17,15}]'{117} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re22*/ [L{m,i,17,15}--> L{m+1,i+1,17,1}]'{117} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re23*/ [L{m,i,16,16}--> L{m+1,i+1,16,16}]'{116} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re24*/ [L{m,i,16,16}--> L{m+1,i+1,16,6}]'{116} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re25*/ [L{m,i,18,18}--> L{m+1,i+1,18,18}]'{118} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re26*/ [L{m,i,18,18}--> L{m+1,i+1,18,13}]'{118} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re27*/ [L{m,i,18,16}--> L{m+1,i+1,18,16}]'{118} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re28*/ [L{m,i,18,16}--> L{m+1,i+1,18,6}]'{118} :: 0.5 :  1<=m<=42, 0<=i<=3;
    /*re29*/ [[L{m,4,k,r}]'{k+100}[]'{r+100}]'p-->[[]'{k+100}[Lp{m}]'{r+100}]'p::1: 5<=m<=43, 1<=k<=18, 1<=r<=18, r<>k;
    /*re30*/ [L{m,4,k,k}-->Lp{m}]'{k+100}::1: 5<=m<=43, 1<=k<=18;
    /*r36*/ Lp{m} []'0-->[Qp{0,m-1}]'0::1: 5<=m<=43;

    /*** <End Movement among environments due to the water renewal system every week> ***/

    /*** <End of the first cycle> ***/
    /*re31*/  [T{19}]'{k+100} --> [gamma{20},ro{1},ro{0}]'{k+100} :: p{20,k} : 1<=k<=18;
    /*re32*/  [T{19}]'{k+100} --> [delta{20},ro{1},ro{0}]'{k+100} :: 1-p{20,k} : 1<=k<=18;
    /*re33*/  [T{35}]'{k+100} --> [delta{36},ro{2},omega{0}]'{k+100} :: 1 : 1<=k<=18;

    /*** <No reproduction (when temperature conditions do not meet)> ***/
    /*** <First cycle> ***/
    /*r37*/ delta{20}[]'0-->[delta{20}]'0::1;
    /*r38*/ delta{20}[]'20-->+[delta]'20::1;
    /*r39*/ +[delta]'20-->[]'20::1;
    /*r40*/ X{s}+[]'20-->VR[Xp{s}]'20::1: 2<=s<=6;
    /*r41*/ X{1}+[]'20-->[#]'20::1;
    /*r42*/ Q{d}+[]'20-->VR[Qpp{d+20}]'20::1: 1<=d<=32;
    /*r43*/ Q{d}+[]'20-->VR[Xp{1}]'20::1: 33<=d<=52;
    /*r44*/ [Xp{s}]'20--> Y{s}[]'20::1: 1<=s<=6;
    /*r45*/ [Qpp{d}]'20--> Qp{d,20}[]'20::1: 20<=d<=52;

    /*** <Second cycle> ***/
    /*r46*/ delta{36}[]'0-->[delta{36}]'0::1;
    /*r47*/ delta{36}[]'36-->+[delta]'36::1;
    /*r48*/ +[delta]'36-->[]'36::1;
    /*r49*/ X{s}+[]'36-->VR[Xp{s}]'36::1: 2<=s<=6;
    /*r50*/ X{1}+[]'36-->[#]'36::1;
    /*r51*/ Q{d}+[]'36-->[Qpp{d+16}]'36::1: 1<=d<=36;
    /*r52*/ Q{d}+[]'36-->VR[Xp{1}]'36::1: 37<=d<=52;
    /*r53*/ [Xp{s}]'36--> Y{s}[]'36::1: 1<=s<=6;
    /*r54*/ [Qpp{d}]'36--> Qp{d,36}[]'36::1: 16<=d<=52;

    /*** <Synchronization of the process of controlling the capacity for each environment to hold adult mussels> ***/
    /* Rules related with ro and omega */
    /*r55*/ ro{0}[]'0-->[ro{0}]'0::1;
    /*r56*/ ro{0}[]'37-->[ro{0}]'37::1;
    /*r57*/ [ro{i}-->ro{i+1}]'37::1: 0<=i<=10;
    /*r58*/ [ro{11}]'37-->-[ro]'37::1;

    /*r59*/ omega{0}[]'0-->[omega{0}]'0::1;
    /*r60*/ omega{0}[]'38-->[omega{0}]'38::1;
    /*r61*/ [omega{i}-->omega{i+1}]'38::1: 0<=i<=14;
    /*r62*/ [omega{15}]'38-->-[ro]'38::1;

    /*** <Begin Objects to control density> ***/
    /*re34*/ [ro{i}]'{j+100} --> [A{i}*Fi{j},AR*2500]'{j+100}::1: 1<=i<=2,1<=j<=18;
    /*r63*/ A{i}[]'0 --> [A{i}]'0::1: 1<=i<=2;
    /*r64*/ A{i}[]'{36+i} --> [A]'{36+i}::1: 1<=i<=2 ;
    /*r65*/ AR[]'0 --> [AR{1}]'0::1;
    /*r66*/ [AR{i}]'0 --> [AR{i+1}]'0::1:1<=i<=4;
    /*r67*/ AR{5}[]'39 --> +[AR]'39::1;
    /*r68*/ +[alpha]'39 --> +[alpha{1},DP{0}]'39::1;
    /*r69*/ VR+[]'39 --> +[VR]'39::1;
    /*r70*/ +[alpha{1}]'39 --> -[alpha{1}]'39::1;
    /*r71*/ +[AR, VR]'39 --> -[]'39::1;
    /*r72*/ -[alpha{i} --> alpha{i+1}]'39::1: 1<=i<=6;
    /*r73*/ -[AR*125 --> DP{1}]'39::1;
    /*r74*/ -[DP{i},DP{k} --> DP{i+k}]'39::1:0<=i<=20,1<=k<=9;
    /*r75*/ -[alpha{7}]'39 --> [beta{1}]'39::1;
    /*r76*/ [AR]'39 --> []'39::1;
    /*r77*/ [VR]'39 --> []'39::1;
    /*r78*/ [DP{i}]'39 --> DP{i}*(1250*250000)[]'39::1: 0<=i<=20;
    /*r79*/ [beta{i} --> beta{i+1}]'39::1: 1<=i<=7;
    /*r80*/ [beta{8}]'39 --> -[beta{9}]'39::1;
    /*r81*/ -[beta{9}]'39 --> [alpha]'39::1;
    /*** <End Objects to control density> ***/

    /*r82*/ -[ro]'{k}-->[lambda]'{k}::1: 37<=k<=38;
    /*r83*/ -[alpha]'{k} -->[beta{0}]'{k}::1: 37<=k<=38;
    /*r84*/ V{s} -[]'{k} --> [V{s}]'{k}::1: 1<=s<=6, 37<=k<=38;
    /*r85*/ Qp{d,m} -[]'37 -->[Q{20-m+d}]'37::1: -20+m<=d<=52-20+m,1<=m<=20;
    /*r86*/ Qp{d,m} -[]'37 -->[V{1}]'37::1: 53-20+m<=d<=71-20+m,1<=m<=20;
    /*r87*/ Qp{d,m}-[]'38 -->[Q{52-m+d}]'38::1: 0<=d<=m, 21<=m<=40;
    /*r88*/ Qp{d,m} -[]'38 -->[V{1}]'38::1: 1+m<=d<=83-52+m, 21<=m<=40;

    /*** <Mortality due to density excess> ***/

    /*r89*/ [V{s}, A]'{k} -->X{s+1} +[]'{k}:: 0.5*0.2*(s+1) : 2<=s<=5,37<=k<=38;
    /*r90*/ [V{s}, A]'{k} --> +[V{s},A]'{k}:: 1-0.5*0.2*(s+1) : 2<=s<=5,37<=k<=38;
    /*r91*/ +[A]'{k}--> [A{0}]'{k}::1: 37<=k<=38;
    /*r92*/ +[A{s}]'{k} -->[A{s+1}]'{k}::1:0<=s<=4,37<=k<=38;
    /*r93*/ [beta{0}]'{k} -->+[beta{1}]'{k}::1: 37<=k<=38;
    /*r94*/ +[beta{1}]'{k} -->[beta{1}]'{k}::1: 37<=k<=38;
    /*r95*/ [beta{i}]'{k} -->+[alpha{i+1}]'{k}::1: 1<=i<=6,37<=k<=38;
    /*r96*/ +[alpha{i}]'{k} -->[beta{i}]'{k}::1: 2<=i<=6,37<=k<=38;
    /*r97*/ +[alpha{7}]'{k} -->-[]'{k}::1:37<=k<=38;
    /*r98*/ [Q{d}, A{0}]'37 -->QQ{d,37}+[]'37 :: 1:1<=d<=52;
    /*r98*/ [Q{d}, A{0}]'38 -->QQ{d,38}+[]'38 :: 1: 1<=d<= 52;
    /*r99*/ [V{1},A{1}]'{k}--> XX{2,k} +[]'{k}::1:37<=k<=38;
    /*r100*/ [V{s},A{s}]'{k}--> X{s+1}  +[]'{k}::1:2<=s<=5,37<=k<=38;
    /*r101*/ QQ{d,k}, DP{i} +[]'{k} -->Q{d},X{1}[]'{k} :: 0.1*i-1: 1<=d<=52, 10<=i<=20,37<=k<=38;
    /*r102*/ QQ{d,k}, DP{i} +[]'{k}-->  [A{1}]'{k} :: 1-(0.1*i-1): 1<=d<=52,10<=i<=20,37<=k<=38;
    /*r103*/ XX{2,k}, DP{i} +[]'{k}-->X{2}[]'{k} :: 0.1*i-1: 10<=i<=20,37<=k<=38;
    /*r104*/ XX{2,k}, DP{i} +[]'{k} -->  [A{2}]'{k} :: 1-(0.1*i-1): 10<=i<=20,37<=k<=38;
    /*r105*/ QQ{d,k}, DP{i} +[]'{k}-->  [A{1}]'{k} :: 1: 1<=d<=52, 0<=i<=9,37<=k<=38;
    /*r106*/ XX{2,k}, DP{i} +[]'{k} -->  [A{2}]'{k} :: 1: 0<=i<=9,37<=k<=38;
    /*r107*/ -[lambda]'37 -->T{20},Tp{20}[alpha]'37::1;
    /*r108*/ -[lambda]'38 -->T{0}[alpha]'38::1;
    /*r109*/ [Tp{20},Ip]'0--> I2[]'0::1;
    /*r110*/ [T{20}]'0-->T{20}[]'0::1;
    /*r111*/ [T{0}]'0-->T{0}[]'0::1;
    /*r112*/ Tp{20}+[]'36--> []'36::1;

    /***********Update**********/
    /*r113*/ -[V{s}]'{k} -->D[]'{k}::1: 2<=s<=6,37<=k<=38;
    /*r114*/  -[Q{d}]'{k} -->D []'{k}::1:1<=d<=87,37<=k<=38;
    /*r115*/ -[A{5}]'{k}-->[]'{k}::1:37<=k<=38;
    /*r116*/ DP{i}-[]'39-->[]'39::1: 0<=i<=20;

}

Results

The custom application config file defines an app ready to be loaded in MeCoSim. Then, we can run it and set the model given (zebra_mussel.pli). Then the desired scenario data can finally be entered for each virtual experiment we are interested in, as the specific one also provided above (zebra_mussel.ec2).

Once the scenario has been introduced by the user, the simulation can run for the number of years set in MeCoSim custom app window. The system evolves then from the initial population given as part of the scenario, until the end of the simulation, when the output results are shown in the form of tables and charts.

../../_images/ZebraMusselOutputTable.png ../../_images/ZebraMusselOutputChart.png