Mohamed Hamlil
Français GitHub

What I build outside coursework

Five self-contained projects in machine learning, computer algebra and applied mathematics. Nobody assigned any of it, every number is produced by code in the repository, and CI reruns the checks on every push.

The one worth telling

A convolutional network learning Flappy Bird from nothing but rendered frames. The largest gain in the whole project came from the observation rather than from any hyperparameter. Reducing a frame to one channel is standard and the standard way is a luminance greyscale, but the bird is yellow and the sky is light blue, and those are nearly equiluminant: measured off the sprites, the bird stands out from the sky by 22 levels out of 255 in luminance and by 181 in the blue channel.

Greyscale was delivering the obstacles at three times the contrast of the bird itself, which is the one object whose position the policy most needs. With everything else held fixed, same seed and same hyperparameters, taking the blue channel instead moved the agent from 0.4 pipes to 12.65 at 250k steps. The greyscale run never passed 0.8 in 420k.

The five

Site Browse them all Every project on one page, with the animations and charts at full size. RL Flappy Bird from pixels DQN reaching 12.21 pipes mean over 100 episodes, and a REINFORCE run that never cleared one, explained. Algebra 3-SAT over GF(2) Clauses as polynomials in the Boolean ring. 500 instances checked against exhaustive search with zero wrong verdicts. Maths Matrix algorithms from scratch FFT, Schur-complement determinant and an exact integer inverse, checked against NumPy to 1e-13. Applied French income tax The effective rate fitted per bracket, with Lambert W locating the inflection at 59 800 EUR. Graphics Sorting, rendered Bubble and merge sort keyframed through Blender's Python API so the access pattern is watchable.

What the SAT solver actually shows

Its own measurement is that the algebraic step is nearly inert: across the unsatisfiable instances tested, the elimination on its own caught almost none, and the branching does the work. The repository says so rather than burying it. It is also benchmarked below the phase transition, where most instances are satisfiable, which the write-up names as its own open item.