Generative design

Generative design is an iterative design process that involves a program that will generate a certain number of outputs that meet certain constraints, and a designer that will fine tune the feasible region by selecting specific output or changing input values, ranges and distribution. The designer doesn't need to be a human, it can be a test program in a testing environment or an artificial intelligence, for example a generative adversarial network. The designer learns to refine the program (usually involving algorithms) with each iteration as their design goals become better defined over time.
The output could be images, sounds, architectural models, animation, and much more. It is therefore a fast method of exploring design possibilities that is used in various design fields such as art, architecture, communication design, and product design.
The process combined with the power of digital computers that can explore a very large number of possible permutations of a solution enables designers to generate and test brand new options, beyond what a human alone could accomplish, to arrive at a most effective and optimized design. It mimics nature’s evolutionary approach to design through genetic variation and selection.
Generative design is becoming more important, largely due to new programming environments or scripting capabilities that have made it relatively easy, even for designers with little programming experience, to implement their ideas. Additionally, this process can create solutions to substantially complex problems that would otherwise be resource-exhaustive with an alternative approach making it a more attractive option for problems with a large or unknown solution set. It is also facilitated with tools in commercially available CAD packages. Not only are implementation tools becoming more accessible but also tools leveraging generative design as a foundation.
Generative design in architecture.
Generative design in architecture is an iterative design process that enables industrial product designers and architects to explore a wider solution space with more possibility and creativity. Architectural design has long been regarded as a wicked problem. Compared with traditional top-down design approach, generative design can address design problems efficiently, by using a bottom-up paradigm that uses parametric defined rules to generate complex solutions. The solution itself then evolves to a good, if not optimal, solution. The advantage of using generative design as a design tool is that it does not construct fixed geometries, but take a set of design rules that can generate an infinite set of possible design solutions. The generated design solutions can be more sensitive, responsive, and adaptive to the wicked problem. 
Generative design involves rule definition and result analysis which are integrated with the design process. By defining parameters and rules, the generative approach is able to provide optimized solution for both structural stability and aesthetics. Possible design algorithms include cellular automata, shape grammar, genetic algorithm, space syntax, and most recently, artificial neural network. Due to the high complexity of the solution generated, rule-based computational tools, such as finite element method and topology optimisation, are more preferable to evaluate and optimise the generated solution. The iterative process provided by computer software enables the trial-and-error approach in design, and involves architects interfering with the optimisation process. 
Historical precedent work includes Antoni Gaudí's Sagrada Família, which used rule based geometrical forms for structures, Buckminster Fuller's Montreal Biosphere where the rules to generate individual components is designed, rather than the final product , and a collectium of stadiums designed by Luigi Moretti according to the approach of parametric architecture.
More recent generative design cases includes Foster and Partners' Queen Elizabeth II Great Court, where the tessellated glass roof was designed using a geometric schema to define hierarchical relationships, and then the generated solution was optimized based on geometrical and structural requirement.