[{"data":1,"prerenderedAt":527},["ShallowReactive",2],{"projects":3},[4,48,92,125,158,190,236,318,347,381,427,455,497],{"id":5,"title":6,"body":7,"description":11,"extension":14,"heroImages":15,"highlights":19,"meta":29,"navigation":30,"overview":31,"path":32,"role":33,"seo":34,"stack":35,"stem":43,"tagline":44,"type":45,"year":46,"__hash__":47},"projects\u002Fprojects\u002Ff1-onboard-analyzer.md","F1 Onboard Video Analyzer",{"type":8,"value":9,"toc":10},"minimark",[],{"title":11,"searchDepth":12,"depth":12,"links":13},"",2,[],"md",[16,17,18],"\u002Fresources\u002Fimg\u002Ff1-analyzer\u002Fdashboard.png","\u002Fresources\u002Fimg\u002Ff1-analyzer\u002Fdetection.png","\u002Fresources\u002Fimg\u002Ff1-analyzer\u002Ftimeline.png",[20,23,26],{"title":21,"description":22},"Multi-Modal Analysis","Combined visual, audio, and telemetry analysis achieving 94% accuracy in event detection across diverse racing conditions.",{"title":24,"description":25},"Real-time Processing","Optimized pipeline processing 1080p video at 2x real-time speed using GPU acceleration and efficient frame sampling strategies.",{"title":27,"description":28},"Comprehensive Event Detection","Identifies 15+ event types including yellow\u002Fred flags, pitstops, overtakes, DRS zones, and safety car deployments with precise timestamps.",{},true,"Developed an AI system that automatically analyzes Formula 1 onboard videos to detect and timestamp events like pitstops, flags, overtakes, and incidents using computer vision and deep learning.","\u002Fprojects\u002Ff1-onboard-analyzer","ML Engineer & Data Scientist",{"title":6,"description":11},[36,37,38,39,40,41,42],"Python","TensorFlow","OpenCV","YOLO","FFmpeg","FastAPI","PostgreSQL","projects\u002Ff1-onboard-analyzer","AI-powered analysis of F1 onboard footage to detect and timestamp key racing events.","Personal",2024,"SQ7cyH7rHq6A0m7v6-SqzQwsfZNSXQTYJoTmf9JT7uE",{"id":49,"title":50,"body":51,"description":56,"extension":14,"heroImages":65,"highlights":69,"meta":79,"navigation":30,"overview":80,"path":81,"role":82,"seo":83,"stack":84,"stem":89,"tagline":90,"type":45,"year":46,"__hash__":91},"projects\u002Fprojects\u002Fgame-of-life.md","Conway's Game of Life Simulator",{"type":8,"value":52,"toc":63},[53,57,60],[54,55,56],"p",{},"A Game of Life I made with JavaFX. You get a grid of cells and some buttons: Play (it becomes Pause), Increment to do one generation, Clear, and Randomize to fill the board with random cells. A speed choice (Slow, Medium, Fast) changes the time between two generations, and a counter shows the generation number.",[54,58,59],{},"The rules are the 4 classic ones. A live cell with fewer than 2 or more than 3 neighbors dies, a live cell with 2 or 3 neighbors stays alive, and a dead cell with exactly 3 neighbors becomes alive. The edges of the board are walls, there is no wrapping. Each cell has an age, and the color changes when a cell survives more than one generation, so you can see what is new and what is stable.",[54,61,62],{},"I wrote unit tests with JUnit for the board, the cells, the directions and the states. There is also an INFECTED state in the code, with its own color, but I didn't do the logic for it yet.",{"title":11,"searchDepth":12,"depth":12,"links":64},[],[66,67,68],"\u002Fresources\u002Fimg\u002Fgame-of-life\u002Fsimulation.png","\u002Fresources\u002Fimg\u002Fgame-of-life\u002Fpatterns.png","\u002Fresources\u002Fimg\u002Fgame-of-life\u002Fcontrols.png",[70,73,76],{"title":71,"description":72},"Age of the cells","The color of a live cell changes when it survives more than one generation.",{"title":74,"description":75},"Unit tests","The board, the cells, the directions and the states are tested with JUnit.",{"title":77,"description":78},"Infection","There is an INFECTED state in the code with its own color, but the logic is still a TODO.",{},"A Game of Life with a JavaFX interface: a grid of cells, play and pause, step by step, random start and three speeds.","\u002Fprojects\u002Fgame-of-life","Developer",{"title":50,"description":56},[85,86,87,88],"Java","JavaFX","Maven","JUnit","projects\u002Fgame-of-life","Conway's Game of Life made with JavaFX.","XEC3Ll-ZV1YdifTPNhCrSRCxd-Xsw1BU4Ob3hQ9j9Vo",{"id":93,"title":94,"body":95,"description":11,"extension":14,"heroImages":99,"highlights":102,"meta":112,"navigation":30,"overview":113,"path":114,"role":115,"seo":116,"stack":117,"stem":121,"tagline":122,"type":123,"year":46,"__hash__":124},"projects\u002Fprojects\u002Fgraph-visualizer.md","Interactive Graph Visualization",{"type":8,"value":96,"toc":97},[],{"title":11,"searchDepth":12,"depth":12,"links":98},[],[100,101],"\u002Fresources\u002Fimg\u002Fgraph\u002Fc-graph.png","\u002Fresources\u002Fimg\u002Fgraph\u002Fgraph.png",[103,106,109],{"title":104,"description":105},"Algorithm Visualization","Real-time step-by-step visualization of 6+ graph algorithms with adjustable execution speed and detailed operation logs.",{"title":107,"description":108},"Performance Optimization","Optimized rendering engine capable of handling graphs with 1000+ nodes while maintaining 60 FPS performance.",{"title":110,"description":111},"Interactive Learning","Educational mode with algorithm complexity analysis, execution traces, and interactive problem-solving exercises.",{},"Built an interactive Java application for visualizing and manipulating complex graph data structures with real-time optimization algorithms.","\u002Fprojects\u002Fgraph-visualizer","Software Developer & Algorithm Designer",{"title":94,"description":11},[85,86,118,119,120],"Git","Graph Algorithms","Data Structures","projects\u002Fgraph-visualizer","From Data Structures to Optimization - A Java-based visualization tool.","Education","GPMxkdMLnDhNRacfuHQqVUFJS6Sq6XQLHcV6Fi9yE2E",{"id":126,"title":127,"body":128,"description":11,"extension":14,"heroImages":132,"highlights":136,"meta":145,"navigation":30,"overview":146,"path":147,"role":148,"seo":149,"stack":150,"stem":155,"tagline":156,"type":123,"year":46,"__hash__":157},"projects\u002Fprojects\u002Fhealth-website.md","Health & Well-Being Platform",{"type":8,"value":129,"toc":130},[],{"title":11,"searchDepth":12,"depth":12,"links":131},[],[133,134,135],"\u002Fresources\u002Fimg\u002Fnine\u002Fhome.png","\u002Fresources\u002Fimg\u002Fnine\u002Fmobile.png","\u002Fresources\u002Fimg\u002Fnine\u002Fcontact.png",[137,140,143],{"title":138,"description":139},"Responsive Architecture","Implemented a mobile-first approach with breakpoints optimized for various devices, ensuring consistent user experience across platforms.",{"title":141,"description":142},"Accessibility Compliance","Achieved WCAG 2.1 Level AA compliance with semantic HTML, ARIA labels, and keyboard navigation support.",{"title":107,"description":144},"Optimized loading times through image compression, lazy loading, and efficient CSS\u002FJS bundling, achieving 90+ Lighthouse scores.",{},"Developed a responsive health and wellness platform for a fictional health tech company, focusing on user-centric design and modern web technologies.","\u002Fprojects\u002Fhealth-website","Full-stack Developer & UI\u002FUX Designer",{"title":127,"description":11},[151,152,118,153,154],"HTML5","CSS3","Responsive Design","Figma","projects\u002Fhealth-website","From Personal to Responsive Website - A comprehensive health tech solution.","Gz214a3vieuVSxHZ4Z858np7vi7-JBOsJggvAyc0s_I",{"id":159,"title":160,"body":161,"description":11,"extension":14,"heroImages":165,"highlights":169,"meta":179,"navigation":30,"overview":180,"path":181,"role":182,"seo":183,"stack":184,"stem":187,"tagline":188,"type":123,"year":46,"__hash__":189},"projects\u002Fprojects\u002Fjava-workshop.md","Interactive Java Workshop",{"type":8,"value":162,"toc":163},[],{"title":11,"searchDepth":12,"depth":12,"links":164},[],[166,167,168],"\u002Fresources\u002Fimg\u002Fjpo\u002F2d-array.png","\u002Fresources\u002Fimg\u002Fjpo\u002Fmethod.png","\u002Fresources\u002Fimg\u002Fjpo\u002Fnetbeans.png",[170,173,176],{"title":171,"description":172},"Adaptive Learning Path","Developed a flexible curriculum that automatically adjusted difficulty based on participant progress, ensuring engagement for all skill levels.",{"title":174,"description":175},"Interactive Teaching Tools","Created 10+ interactive JavaFX demonstrations that visualized programming concepts in real-time, improving concept retention by 60%.",{"title":177,"description":178},"Engagement Success","Achieved 85% participant completion rate with overwhelmingly positive feedback, contributing to a 20% increase in program applications.",{},"Designed and delivered an interactive Java programming workshop for prospective students during university Open House Day.","\u002Fprojects\u002Fjava-workshop","Workshop Designer & Technical Instructor",{"title":160,"description":11},[85,86,185,186],"Educational Design","Interactive Learning Tools","projects\u002Fjava-workshop","Introduction to Computer Science - An educational experience for Open House Day.","h3omGm809WfLZceJhiOISl1z_1e4ZWHxGGSip4DqExw",{"id":191,"title":192,"body":193,"description":197,"extension":14,"heroImages":209,"highlights":213,"meta":223,"navigation":30,"overview":224,"path":225,"role":82,"seo":226,"stack":227,"stem":232,"tagline":233,"type":45,"year":234,"__hash__":235},"projects\u002Fprojects\u002Flaravel-ai-seeder.md","Laravel AI Database Seeder",{"type":8,"value":194,"toc":207},[195,198,201,204],[54,196,197],{},"This is a Laravel package to fill a database with test data written by an AI instead of random words. For now it is only the base, the generation part is not written yet.",[54,199,200],{},"What exists: the service provider, a facade (AiSeeder), a config file, and the classes that read this config. In the config you choose a driver. I put two: OpenAI (gpt-4o-mini by default) and a local one that points to a local server (mistral by default). For each one you can set the batch size and how many requests run at the same time.",[54,202,203],{},"For the models, there is an abstract class called AiModelDefinition. For each model you describe its fields and, if needed, a context text to help the AI understand what the data should look like. A Faker instance is also available in each definition.",[54,205,206],{},"On the tooling side, Pint checks the code style and PHPUnit runs on GitHub Actions. The only test is a placeholder for now, and the namespace is still the Vendor placeholder.",{"title":11,"searchDepth":12,"depth":12,"links":208},[],[210,211,212],"\u002Fresources\u002Fimg\u002Fai-seeder\u002Fconfig.png","\u002Fresources\u002Fimg\u002Fai-seeder\u002Fgeneration.png","\u002Fresources\u002Fimg\u002Fai-seeder\u002Fresults.png",[214,217,220],{"title":215,"description":216},"Two drivers","The config has OpenAI (gpt-4o-mini by default) and a local one (mistral by default), each with a batch size and a max concurrency.",{"title":218,"description":219},"Model definitions","An abstract class where you describe the fields of a model and a context text for the AI.",{"title":221,"description":222},"Tooling","Pint for the code style and PHPUnit on GitHub Actions.",{},"The base of a Laravel package to fill a database with data written by an AI instead of random words. The generation part is not written yet.","\u002Fprojects\u002Flaravel-ai-seeder",{"title":192,"description":197},[228,229,230,231],"PHP","Laravel","Faker","PHPUnit","projects\u002Flaravel-ai-seeder","A Laravel package to seed a database with AI generated data.",2026,"9ZAnftwRLhWJdWxotsVaCtefxHbXzZvT7HpBO-BbMtc",{"id":237,"title":238,"body":239,"description":243,"extension":14,"heroImages":288,"highlights":289,"meta":299,"navigation":30,"overview":300,"path":301,"role":302,"seo":303,"stack":304,"stem":314,"tagline":315,"type":316,"year":234,"__hash__":317},"projects\u002Fprojects\u002Fmcp-grid-decision-support.md","MCP Servers for a Power Grid",{"type":8,"value":240,"toc":286},[241,244,247,250,260,263,266,269,280,283],[54,242,243],{},"I did this project during my internship at Jade Hochschule in Wilhelmshaven, Germany, from April to June 2026. The team works on a decision support tool for the people who run the power grid. When the grid is too loaded, they need to find the risks fast, try some switching options and check what happens after. My part was to see if an LLM can help with that when it can ask questions to the grid data and run simulations.",[54,245,246],{},"The grid data comes as CGMES files, the standard format used between grid operators in Europe. They are big XML files, not easy to use directly. The team already had a tool called GridPIM that loads them into a Neo4j graph database and builds a Pandapower network from it, so I started from that. I also added an Apache Jena Fuseki triple store, to query the same data with SPARQL.",[54,248,249],{},"Then I built two MCP servers in Python, so the LLM can use all of this as tools:",[251,252,253,257],"ul",{},[254,255,256],"li",{},"The first one talks to Neo4j and Pandapower. The model can get a summary of the grid, list buses, lines, transformers, switches and generators, then create a scenario, open or close switches, run an AC power flow, look for bottlenecks and compare two scenarios.",[254,258,259],{},"The second one talks to Fuseki and only reads the ontology.",[54,261,262],{},"In both there is a tool to run a raw query (Cypher or SPARQL) when the other tools are not enough. I did not use RAG, because it loses the structure of the grid. A question like \"what is connected to this line\" needs the real graph.",[54,264,265],{},"The data of the real operators is confidential, so we tested on the MiniGrid T1 from ENTSO-E, which is public. It is also why a local model matters: with a cloud model, the grid data leaves the company. So I compared two local Qwen 3.6 models running on Ollama with Qwen 3.6 Plus and Claude Sonnet 4.6 in the cloud.",[54,267,268],{},"I ran three experiments:",[251,270,271,274,277],{},[254,272,273],{},"Does the model need the schema of the graph? I tried with no schema, with a tool to get it, and with the schema given at the start. Giving it at the start helped the smaller models not get lost.",[254,275,276],{},"20 questions in 5 categories (connectivity, topology, generation, simulation, grid state), with no tools, with one server or with both.",[254,278,279],{},"An N-1 test: for each of the 9 lines, open its switches, run the bottleneck analysis and give the result in JSON.",[54,281,282],{},"What I got is that the tools matter more than the model. Without tools, the models can answer almost nothing. Claude got up to 45%, but I think it is because MiniGrid T1 is on the internet and was in its training data. With the tools, the local Qwen 3.6 27B got 85 to 90% and Claude Sonnet 4.6 got 90 to 95%. On the N-1 test, Qwen 27B was right on 8 lines out of 9, Qwen 35B-A3B on 9 out of 9 and Claude on 6 out of 9. The tools gave the right data every time. The mistakes came from the model counting the violations wrong when writing the JSON. Giving both servers at the same time did not help either, the models started to use the wrong one.",[54,284,285],{},"So a local model can do this job if the tools are good, and this is what the team wanted to know. We wrote a paper about it, and it was accepted at the BCS SGAI 2026 conference in Cambridge.",{"title":11,"searchDepth":12,"depth":12,"links":287},[],[],[290,293,296],{"title":291,"description":292},"Two MCP servers","One for the Neo4j graph and the Pandapower simulation, one for the ontology in Fuseki with SPARQL.",{"title":294,"description":295},"Local models work","With good tools, a local Qwen 3.6 27B got 85 to 90% on 20 grid questions. Claude Sonnet 4.6 got 90 to 95%.",{"title":297,"description":298},"Paper","Accepted at the BCS SGAI 2026 conference, Peterhouse College, Cambridge.",{},"My internship at Jade Hochschule: I built MCP servers so an LLM can query power grid data and run simulations, and we tested if a local model can do the job. We wrote a paper about it.","\u002Fprojects\u002Fmcp-grid-decision-support","AI Software Engineer Intern",{"title":238,"description":243},[36,305,306,307,308,309,310,311,312,313],"MCP","Neo4j","Cypher","Apache Jena Fuseki","SPARQL","Pandapower","Ollama","Qwen","Claude","projects\u002Fmcp-grid-decision-support","Letting an LLM ask questions to a power grid and run simulations.","Work","cvJXUwECl80Tag9Z7ARDs2bLdcYGKTOC08p3d3rabuY",{"id":319,"title":320,"body":321,"description":325,"extension":14,"heroImages":331,"highlights":335,"meta":336,"navigation":30,"overview":337,"path":338,"role":82,"seo":339,"stack":340,"stem":344,"tagline":345,"type":45,"year":46,"__hash__":346},"projects\u002Fprojects\u002Fmcts-visualizer.md","MCTS Algorithm Visualizer",{"type":8,"value":322,"toc":329},[323,326],[54,324,325],{},"I used the Monte Carlo Tree Search algorithm in a school project and I wanted to see what it really does while it runs. So I started a visualizer. The idea comes from another project called mcts-viz.",[54,327,328],{},"The goal is to show the tree for a game of Tic-tac-toe and see how the algorithm builds it. At the moment the repo is only the base: a Vue 3 and Vite project with Sass, and a page that says Hello World. The visualization is not done yet.",{"title":11,"searchDepth":12,"depth":12,"links":330},[],[332,333,334],"\u002Fresources\u002Fimg\u002Fmcts\u002Ftree-view.png","\u002Fresources\u002Fimg\u002Fmcts\u002Fgameplay.png","\u002Fresources\u002Fimg\u002Fmcts\u002Fstatistics.png",[],{},"A visualizer for the Monte Carlo Tree Search algorithm, made to understand what it does while it runs. Only the base of the project exists for now.","\u002Fprojects\u002Fmcts-visualizer",{"title":320,"description":325},[341,342,343],"Vue 3","Vite","Sass","projects\u002Fmcts-visualizer","Visualization of the MCTS algorithm applied to Tic-tac-toe.","qiC_bJSK4o0i79aOcVK-Kwxw7djJgrs26urd18iuzes",{"id":348,"title":349,"body":350,"description":11,"extension":14,"heroImages":354,"highlights":357,"meta":367,"navigation":30,"overview":368,"path":369,"role":370,"seo":371,"stack":372,"stem":377,"tagline":378,"type":123,"year":379,"__hash__":380},"projects\u002Fprojects\u002Fobject-oriented-game-development.md","IAcademy Of Doom Development Project",{"type":8,"value":351,"toc":352},[],{"title":11,"searchDepth":12,"depth":12,"links":353},[],[355,356],"\u002Fresources\u002Fimg\u002Fcsharp\u002Fgame-running.jpeg","\u002Fresources\u002Fimg\u002Fcsharp\u002Finterface.jpeg",[358,361,364],{"title":359,"description":360},"Conception Objet (UML)","Création de diagrammes de classes UML pour modéliser le code existant et concevoir les modifications structurelles pour les nouvelles fonctionnalités (e.g., salles optionnelles et actions).",{"title":362,"description":363},"Implémentation de Nouvelles Logiques","Ajout de la fonctionnalité d'achats de salles et d'actions, et implémentation de l'algorithme d'orientation des proto-IA pour optimiser leur déplacement.",{"title":365,"description":366},"Améliorations IHM","Amélioration de l'ergonomie par la mise en œuvre du glisser-déplacer pour le placement\u002Freplacement des salles et par la refonte de l'affichage des informations (dialogues plutôt que listing).",{},"Analyse, conception et développement orienté objets d'un jeu existant (IAcademy Of Doom) en C#, se concentrant sur les nouvelles fonctionnalités et l'amélioration de l'interface humain-machine.","\u002Fprojects\u002Fobject-oriented-game-development","Développeur Orienté Objets & Concepteur IHM",{"title":349,"description":11},[373,374,375,376],"C#","Développement Orienté Objets","UML","Interfaces Graphiques (IHM)","projects\u002Fobject-oriented-game-development","Développement Objet C# - Amélioration d'un jeu de simulation\u002Fdéfense existant.",2025,"VyglYZhcmZiqmmRe9PLhxEF3AVb9cCNLb-JXjg_fNGc",{"id":382,"title":383,"body":384,"description":388,"extension":14,"heroImages":400,"highlights":404,"meta":414,"navigation":30,"overview":415,"path":416,"role":82,"seo":417,"stack":418,"stem":424,"tagline":425,"type":45,"year":234,"__hash__":426},"projects\u002Fprojects\u002Fpytorch-bottleneck.md","PyTorch Data Opti.",{"type":8,"value":385,"toc":398},[386,389,392,395],[54,387,388],{},"When I trained small CNNs like a ResNet18, I noticed the GPU was under 40% most of the time. The model was not the problem, the GPU was just waiting for data. The way I see it, the CPU is the kitchen assistant who prepares the ingredients, and the GPU is the expensive chef. If the assistant is too slow, the chef stands there doing nothing.",[54,390,391],{},"My guess was that the normal synchronous loading creates small stops, because of Python and the GIL. So I made a benchmark to test it, and I looked at the time of each batch, not only the average. The average hides these stops, but you see them in the jitter.",[54,393,394],{},"Then I tried the optimizations one by one, to know what each one really changes: async loading, prefetching and caching in memory. I think a stable speed matters as much as a high speed when you train for a long time.",[54,396,397],{},"At the end, the GPU went from 38% to more than 90% usage. For me this project was about understanding what is really happening between the framework and the hardware.",{"title":11,"searchDepth":12,"depth":12,"links":399},[],[401,402,403],"\u002Fresources\u002Fimg\u002Fbottlenecks\u002Fthroughput-bench.png","\u002Fresources\u002Fimg\u002Fbottlenecks\u002Fgpu-utilization.png","\u002Fresources\u002Fimg\u002Fbottlenecks\u002Flatency-jitter.png",[405,408,411],{"title":406,"description":407},"GPU usage","From under 40% to around 94% by loading and prefetching the data in the background.",{"title":409,"description":410},"Speed","3 times more images per second, by finding what was slowing the CPU and the bus and going around it.",{"title":412,"description":413},"Jitter","I made a small tool to see how much the loading time changes from one batch to another, to keep the training steady.",{},"Why my GPU was waiting for data when I trained small CNNs, and how I went from 38% to over 90% GPU usage.","\u002Fprojects\u002Fpytorch-bottleneck",{"title":383,"description":388},[36,419,420,421,422,423],"PyTorch","CUDA","Performance Profiling","Matplotlib","NumPy","projects\u002Fpytorch-bottleneck","Hardware Efficiency Research - Eliminating GPU starvation in Deep Learning pipelines.","rqEmcYcU8KAGz3AT1FfzQ2rGo-hTSJAsS_yrWwH-jnc",{"id":428,"title":429,"body":430,"description":434,"extension":14,"heroImages":440,"highlights":444,"meta":445,"navigation":30,"overview":446,"path":447,"role":82,"seo":448,"stack":449,"stem":452,"tagline":453,"type":45,"year":46,"__hash__":454},"projects\u002Fprojects\u002Fscala-pipeline.md","ScalaPipeline Framework",{"type":8,"value":431,"toc":438},[432,435],[54,433,434],{},"ScalaPipeline is a data pipeline framework I want to build in Scala. The idea is to read data from a source, apply some transformations and checks, then write the result somewhere else, with types so that the compiler catches the mistakes.",[54,436,437],{},"For now it is only the start. The sbt project is set up with Scala 3 and the code is just a hello world. I wrote the list of what I want to do in the README (modular steps, error handling, sources and outputs you can add, logs, parallel processing) but none of it is built yet.",{"title":11,"searchDepth":12,"depth":12,"links":439},[],[441,442,443],"\u002Fresources\u002Fimg\u002Fscala-pipeline\u002Farchitecture.png","\u002Fresources\u002Fimg\u002Fscala-pipeline\u002Fdashboard.png","\u002Fresources\u002Fimg\u002Fscala-pipeline\u002Fflow.png",[],{},"The start of a data pipeline framework in Scala: read data from a source, transform and check it, then write it somewhere else.","\u002Fprojects\u002Fscala-pipeline",{"title":429,"description":434},[450,451],"Scala 3","sbt","projects\u002Fscala-pipeline","A data pipeline framework built with Scala.","PZF1Z5J-Ynb_i41QxwfIclNAU2kpzn_CiI7vKz2-Jc0",{"id":456,"title":457,"body":458,"description":462,"extension":14,"heroImages":474,"highlights":478,"meta":488,"navigation":30,"overview":489,"path":490,"role":82,"seo":491,"stack":492,"stem":494,"tagline":495,"type":45,"year":46,"__hash__":496},"projects\u002Fprojects\u002Fsnake-ai.md","Snake AI with Deep Q-Learning",{"type":8,"value":459,"toc":472},[460,463,466,469],[54,461,462],{},"This is a Snake game with an AI that learns to play it by itself. I made the game with Pygame, then I added the agent with PyTorch.",[54,464,465],{},"The AI does not see the screen. At each step it gets 11 values: if there is danger straight, to the right or to the left, the direction the snake is going (4 values), and where the food is compared to the head (4 values). The network is small: 11 inputs, one hidden layer of 256 neurons and 3 outputs, which are go straight, turn right and turn left.",[54,467,468],{},"It learns with Q-learning. After each move the agent trains on what just happened, and at the end of each game it trains on a random batch of 1000 moves taken from a memory of the last 100 000. The reward is +10 when the snake eats and -10 when it dies. At the start it plays a lot of random moves, and less and less as the number of games goes up.",[54,470,471],{},"After each game it saves the model, the scores and the graph, so I can stop the training and start it again later.",{"title":11,"searchDepth":12,"depth":12,"links":473},[],[475,476,477],"\u002Fresources\u002Fimg\u002Fsnake-ai\u002Fgameplay.png","\u002Fresources\u002Fimg\u002Fsnake-ai\u002Ftraining.png","\u002Fresources\u002Fimg\u002Fsnake-ai\u002Fmetrics.png",[479,482,485],{"title":480,"description":481},"Small network","11 inputs, one hidden layer of 256 neurons and 3 outputs: go straight, turn right, turn left.",{"title":483,"description":484},"Replay memory","After each game it trains on a random batch of 1000 moves taken from the last 100 000.",{"title":486,"description":487},"Training you can resume","The model, the scores and the graph are saved after each game, so I can stop and start again later.",{},"A Snake game made with Pygame and an AI made with PyTorch that learns to play it alone with Q-learning.","\u002Fprojects\u002Fsnake-ai",{"title":457,"description":462},[36,419,423,493,422],"Pygame","projects\u002Fsnake-ai","A neural network trained with Q-learning that plays Snake.","biStArYDQ1xR-phWJO_FMbYMkYbo3sMWWMQEUPclZgQ",{"id":498,"title":499,"body":500,"description":11,"extension":14,"heroImages":504,"highlights":507,"meta":517,"navigation":30,"overview":518,"path":519,"role":520,"seo":521,"stack":522,"stem":524,"tagline":525,"type":316,"year":46,"__hash__":526},"projects\u002Fprojects\u002Fstrategic-audit.md","SME Strategic Audit System",{"type":8,"value":501,"toc":502},[],{"title":11,"searchDepth":12,"depth":12,"links":503},[],[505,506],"\u002Fresources\u002Fimg\u002Fsme\u002F1st-page.png","\u002Fresources\u002Fimg\u002Fsme\u002Fintro.png",[508,511,514],{"title":509,"description":510},"Comprehensive Assessment","Developed a 360-degree evaluation framework covering 8 business dimensions with 150+ weighted criteria for accurate digital maturity scoring.",{"title":512,"description":513},"Automated Intelligence","Implemented ML-based recommendation engine that generates customized strategic roadmaps based on industry patterns and success factors.",{"title":515,"description":516},"Business Impact","Enabled SMEs to identify an average of 12 high-impact improvement opportunities, with 70% securing transformation funding within 6 months.",{},"Developed a comprehensive digital audit system for enterprises to assess their digital maturity and create strategic transformation roadmaps.","\u002Fprojects\u002Fstrategic-audit","Business Analyst",{"title":499,"description":11},[523],"Other","projects\u002Fstrategic-audit","From Functional & Environmental Assessment to Strategic Roadmap.","PQPe6MVSrm7ks0o4wXbAmBBx6GHtjmTDrLaVg5dQG-w",1791377584488]