There are many techniques that can be used to tackle a Computational Design problem.
In addition to the genetic algorithm, other examples include:
solving with pen and paper
manual guess and check
set packing or partitioning algorithms
stochastic (or, random) local search and filtering results to find a desired maximum, minimum, or median values.
linear, integer, or quadratic programming
Some of these techniques are quite basic and easy to implement (see the 'Optioneering section'); others are far more sophisticated. Choosing the right technique for your application is tricky and much more of an art than a science. Often, it comes down to the precise design question you are tackling and your familiarity with a given technique.