About 6 years ago, I joined a project where my main responsibility was to create a scheduler for cab routing in the UK. The task was challenging, but my background in a scientific company and education helped me to find a solution even when I had just a few years of experience. I tried a genetic algorithm.
A generic algorithm is one of the metaheuristics evolutionary algorithms that mainly simulate generic NP-complex problem-solving in the form of evolution and tries to find quasi-optimal solutions. Possible solutions are individuals. Their properties are abstracted as chromosomes and genes. All the surviving solutions in each generation constitute the population. Individuals are comparable via fitness function (objective function). On every iteration, the algorithm performs selection, mutation, and crossover. Amazing! Isn’t it?
The more tech progress moves forward, the more I come across options to leverage the idea of evolution. So, evolution moves from nature to digital in the context where our technologies evolve more quickly than we do. Can you imagine how I rejoiced when I realized that the same idea is applied in software architecture? Look at this evolutionaryarchitecture.com.
Evolutionary architecture has some perfect matching with reality and common sense as well as with my feeling that an iterative approach is the key. Neal Ford, Rebecca Parsons, and Patrick Kua wrote a book about that.
Your fitness function includes technical and business parameters. Automation is crucial here to control the level of fitness. Architecture incrementally moves forward alongside context updates.
I have not read the book yet, but it is already on my reading list.
Learn with me
Whenever I hear about NP-hardness, I google it because I cannot remember the meaning. Seems I found a good video that explains the concept.