Unorthodox Hello World
This repository contains two strategies for printing Hello, world!
:
- Co-called genetic algorithm
- Machine learning like approach
Bascially two approaches have a single input: randomly generated string
out of which each algorithm must derive target string, Hello, world!
.
Genetic* Approach
This algorithm described numerous times in various blogs and has different flavours. Logic behind this algorithm is simple: get a population and mutate it until cost function will output zero.
This algorithm can get complex with all the mimicry to evolution processes. In essense it mutates input string/strings unless in a way that cost function gets better and better results.
Machine Learning Like Approach
This approach relies on a linear transformation. Having a target and a random input string, of the same length as the target, algorithm find such a linear transformation (function) which converts the input string into the target string.
Linear transformation can be found numerically via change in data representation. String makes more sense in a shape of array of integers.
On this plot target
represents a target string, Hello, world!
, sample
represents
a randomly generated string, subject to transform somehow into the target string.
Dashed line, weights
, represents a vector. Using simple transformation function
f(x, w) = x + w
the sample string, x
, will be transformed to target
string via weight, w
,
transformation.
This idea can be seen clearly on the plot where x = 2
. Sample at x
is slightly
above target at x
, and weights at x
is equally slightly below zero line.
Therefore, after transformation sample at x
will be equal to target at x
.