individual := { r : real := uniform(1, 0.0, 1.0); att : int := case att_1 of 0 : 1 if r < p.pHawkToDove_1 else 2 if r < p.pHawkToDove_1 + p.pHawkToLawA_1 else att_1; 1 : 0 if r < p.pDoveToHawk_1 else 2 if r < p.pDoveToHawk_1 + p.pDoveToLawA_1 else att_1; default : 0 if r < p.pLawAToHawk_1 else 1 if r < p.pLawAToHawk_1 + p.pLawAToDove_1 else att_1; end; p : list of pop; }; pop := { indiv : list of individual; hawk : int := haselements(indiv.att, 0); dove : int := haselements(indiv.att, 1); lawa : int := haselements(indiv.att, 2); yieldd : real := kappa*(dove * rdd + hawk * rdh + lawa * rdl) * dove; yieldh : real := kappa*(dove * rhd + hawk * rhh + lawa * rhl) * hawk; yieldl : real := kappa*(dove * rld + hawk * rlh + lawa * rll) * lawa; pHawkToDove : real := ny * exp(yieldd - yieldh); pHawkToLawA : real := ny * exp(yieldl - yieldh); pDoveToHawk : real := ny * exp(yieldh - yieldd); pDoveToLawA : real := ny * exp(yieldl - yieldd); pLawAToHawk : real := ny * exp(yieldh - yieldl); pLawAToDove : real := ny * exp(yieldd - yieldl); errorCond : int := (1.0 - pHawkToDove - pHawkToLawA < 0.0) || (1.0 - pDoveToHawk - pDoveToLawA < 0.0) || (1.0 - pLawAToHawk - pLawAToDove < 0.0); lHawk : list of int := append(lHawk_1, hawk); lDove : list of int := append(lDove_1, dove); lLawA : list of int := append(lLawA_1, lawa); };