practicing agent based modelling from the ground up