A general approach to solving hardware and software partitioning problem based on evolutionary algorithms. (September 2021)