further refactoring using ModelStructure and InitialPopulation record types