Modeling Diffusion Using An Agent-Based Approach