refactor Agent member variables
refactor Agent constructor to call member variable constructors
refactor the Agent copy constructor