{"id":22350841,"url":"https://github.com/shsiena/Evolutionary-Dots","last_synced_at":"2025-10-14T21:30:54.270Z","repository":{"id":239503849,"uuid":"799029263","full_name":"shsiena/Evolutionary-Dots","owner":"shsiena","description":"A simple pygame genetic-algorithm project simulating evolution of dots to find a path around obstacles to a goal.","archived":false,"fork":false,"pushed_at":"2024-05-13T19:30:07.000Z","size":2083,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T15:40:18.015Z","etag":null,"topics":["evolutionary-algorithm","genetic-algorithm","machine-learning","mutation","numpy","pathfinding","pygame","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shsiena.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-11T02:02:02.000Z","updated_at":"2024-11-13T05:14:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"75dc5e0e-1cda-4cd8-a665-36803879c887","html_url":"https://github.com/shsiena/Evolutionary-Dots","commit_stats":null,"previous_names":["arduino88/evolutionary-dots","shsiena/evolutionary-dots"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/shsiena/Evolutionary-Dots","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shsiena%2FEvolutionary-Dots","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shsiena%2FEvolutionary-Dots/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shsiena%2FEvolutionary-Dots/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shsiena%2FEvolutionary-Dots/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shsiena","download_url":"https://codeload.github.com/shsiena/Evolutionary-Dots/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shsiena%2FEvolutionary-Dots/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279021373,"owners_count":26087022,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["evolutionary-algorithm","genetic-algorithm","machine-learning","mutation","numpy","pathfinding","pygame","python3"],"created_at":"2024-12-04T12:11:28.834Z","updated_at":"2025-10-14T21:30:53.395Z","avatar_url":"https://github.com/shsiena.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Evolutionary Dots\nA personal project inspired by the one and only **[Code Bullet](https://www.youtube.com/@CodeBullet)**\n\n**This is my first foray into the world of numpy-only genetic algorithms**\n\n#### Overview\nIn this program, a group of dots are released into an environment with walls and a goal object.\nThe dots have simulated velocity and acceleration, as well as an input list of acceleration vectors, used as \"genes\", subject to mutations and natural selection.\n\n![](https://github.com/Arduino88/Evolutionary-Dots/blob/main/evolutionary-dots.gif?raw=true)\n\n#### In each run:\n- The dots iterate over their respective list, setting their acceleration to the contained vector, and checking for collisions.\n- Once every dot has either died or reached the goal, their fitnesses are calculated:\n  - fitness = 1 / (distance to goal) ^2.\n  - if touching goal, fitness is multiplied by the remaining steps in the list (incentivizes more efficient paths).\n  - if dead (collided with wall or screen border), divide fitness by two.\n- Then, a new set of dots are created, with a probability of having a dot as a parent proportional to the parent's fitness (fitter dots are more likely as parents).\n- Randomly, for each child in the new dot set, A gaussian noise distribution is calculated and applied to existing vectors.\n- This is controlled by a mutation rate variable, with a low probability of an individual vector being mutated.\n- The best dot is saved from the previous run, and is added to the next generation to prevent detrimental mutations regressing progress (This is the green dot).\n- All dots are re-initialized at the beginning of their acceleration list, and placed at the shared starting position.\n- The next run is initiated.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshsiena%2FEvolutionary-Dots","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshsiena%2FEvolutionary-Dots","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshsiena%2FEvolutionary-Dots/lists"}