Design patterns for multi-agent programming. (2016)