This kind of model is actually often used when e.g. one simulates Tax-Benefit systems. You start with an initial representative population and you evolve each individual given some predefined behavioral rules which do not need interaction between the agents themselves. I found Agents.jl very capable in this space already, and much better than using a DataFrame instead. We can showcase this because you can also demonstrate that in this case parallelizing the step is trivial, because individual agents steps can be parallelized because only simultaneous reading operations are required, which are almost always thread-safe.
This kind of model is actually often used when e.g. one simulates Tax-Benefit systems. You start with an initial representative population and you evolve each individual given some predefined behavioral rules which do not need interaction between the agents themselves. I found Agents.jl very capable in this space already, and much better than using a DataFrame instead. We can showcase this because you can also demonstrate that in this case parallelizing the step is trivial, because individual agents steps can be parallelized because only simultaneous reading operations are required, which are almost always thread-safe.