Genetic algorithms offer a powerful approach to molecular optimisation, particularly in scenarios where the exact mathematical form of the evaluation function is inaccessible. They generate molecules by iteratively modifying molecules from a database or those previously obtained by the algorithm. The optimisation process of genetic algorithms involves two fundamental operations: mutations and crossovers. Mutations involve randomly changing molecules from the current population, while crossovers stochastically combine parts of molecules from the population. Selection pressure is applied in each generation of the optimisation process, where only the most fit molecules, based on a given and external evaluation function, are retained. This process mimics natural selection, promoting the survival and spread of the most relevant motives from high-scoring molecules.