1. A non-transitory storage medium from which to generate a software product line for a multi-agent system, the medium comprising: a plurality of software products substantially similar to each other software product, each software product being a different implementation of each other software product, each software product being generated by an automated code generator; a domain of reusable core assets, the reusable core assets being software components considered common to the software products in the software product line; a plurality of software-asset requirements; and at least one agent, wherein the at least one agent is a self-directed autonomous module within the multi-agent system that performs its predetermined function within the multi-agent system, wherein a software asset is an implementation of one or more of the plurality of software-asset requirements, and wherein a software product line specification comprises a specification and an architecture of each product in the software product line in relation to a plurality of software assets.