Problems in Algorithmic Self-assembly and a Genetic Approach to Patterns