  We use a genetic algorithm to construct Hadamard Matrices. The initial
population of random matrices is generated to have a balanced number of +1 and
-1 entries in each column except the first column with all +1. Several fitness
functions are implemented in order to find the most effective one. The
crossover process creates offspring matrix population by exchanging columns of
the parent matrix population. The mutation process flips +1 and -1 entry pairs
in random columns. The use of CuPy library in Python on graphics processing
units enables us to handle populations of thousands of matrices and matrix
operations in parallel.
