2-dimensional planar antenna optimized with genetic algorithms.
The main goal of this project is simulating the evolution of a planar antenna subject to space and shape constraints, in order to maximize isotropic gain of the "north" region (toward theta = 0, standar spherical coordinates) and minimize backlobes propagation in the south region. The simulation is carried out through a genetic algorithm framed as described in the following paragraphs.
A planar antenna can be represented as a path with both cartesian and polar coordinates. The latter is our case (see rod-based robots). Each segment of the polygonal chain is a polar coordinate (angle, distance) whose origin is the end-point of the previous segment.
Throughout the simulation (at any given time of it), every path must be contained inside a circle of diameter outer_diameter - specified in config.yaml file - and must avoid an inner circle of diameter inner_diameter, namely the hole for the onboard camera.
A linear objective function:
A single cut-point crossover is done at the moment. Crossover recombines genes from the previous generation to reach population_size individuals.
Mutation is a draw without replacement of mutation_rate * population_size individuals to which a random mutation (for both angles and lengths) is applied.
Dependencies installation:
python3 -m pip install -r requirements.txt
Proof-of-concept:
cd src
python3 poc.py [-p] [-go GRAPHICS_OUTDIR] [-b] [-so STATS_OUTDIR] [-bm INSTANCES]
Where:
-p
is the short option for--plot
.-go
stands for--graphics-outdir
(output directory where a bunch of svg files will be saved). With (-b
) or without boundaries.-so
stands for--stats-outdir
, namely the output folder for statsXXX.mat files.-bm
allows the user to spawn several instances of the simulation to perform a "benchmark" of the current algorithm.
Get more details with -h
or --help
option.
Now the big question. How to interpret the simulation's results? this task can involve a vast set of knowledge. In addition, our interpretation can not only be incomplete, but also partially wrong, so take it with a grain of salt.
A well-formed algorithm should have an increasing monotonic mean fitness (or decreasing if minimizing it): at any given time, the mean/average fitness should be greater than the previous generation's mean/average fitness. Namely, the population is evolving towards better fitness thanks to evolutionary pressure.
On the other hand we have a decreasing fitness's standard deviation, due to the fact that individuals are becoming more and more similar to each other, until they become a single individual cloned N times (for std = 0).
The fitness of the best indiviual can oscillate near the mean. A smaller value can appear, for instance, if a "destructive" mutation hits this indivual.
- Enlightening Advanced antenna design for a NASA satellite mission paper (https://digitalcommons.usu.edu/cgi/viewcontent.cgi?article=1426&context=smallsat)
- Learning and evolution of artificial systems lectures (UniMoRe)