{"id":21703272,"url":"https://github.com/hacklone/coool-genetics","last_synced_at":"2025-07-20T09:32:22.513Z","repository":{"id":208962405,"uuid":"722903748","full_name":"Hacklone/coool-genetics","owner":"Hacklone","description":"Genetic algorithm for TypeScript","archived":false,"fork":false,"pushed_at":"2024-06-16T20:07:47.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-06T12:06:18.819Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hacklone.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-11-24T08:21:15.000Z","updated_at":"2024-06-16T20:07:50.000Z","dependencies_parsed_at":"2023-12-24T09:31:40.702Z","dependency_job_id":"9fdd03fb-9a4e-4bb0-a378-620904958359","html_url":"https://github.com/Hacklone/coool-genetics","commit_stats":null,"previous_names":["hacklone/coool-genetics","hacklone/cool-genetics"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Hacklone/coool-genetics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacklone%2Fcoool-genetics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacklone%2Fcoool-genetics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacklone%2Fcoool-genetics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacklone%2Fcoool-genetics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hacklone","download_url":"https://codeload.github.com/Hacklone/coool-genetics/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hacklone%2Fcoool-genetics/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266100247,"owners_count":23876542,"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","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":[],"created_at":"2024-11-25T21:30:14.865Z","updated_at":"2025-07-20T09:32:22.471Z","avatar_url":"https://github.com/Hacklone.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Genetic algorithm framework\nA framework to make working with genetics algorithm easy\n\n## Install\n\u003e npm i --save @coool/genetics\n\n## Set up\n\n### Create Candidate\n\n```typescript car.ts\nimport { ICandidate, CandidateId, ICandidateMove } from '@coool/genetics';\nimport { RoadState } from './race';\n\nexport interface CarMove extends ICandidateMove {\n  // Decision data of candidate\n}\n\nexport class Car implements ICandidate {\n  constructor(\n    public id: CandidateId,\n  ) {\n  }\n  \n  public async getNextMoveAsync(roadState: RoadState): Promise\u003cCarMove\u003e {\n    // Return turn decision of candidate\n  }\n}\n```\n\n### Create Candidate Factory\n\n```typescript car.factory.ts\nimport { ICandidateFactory, ICandidate } from '@coool/genetics';\nimport { Car } from './car';\n\nexport class CarFactory implements ICandidateFactory {\n  public createRandomCandidateAsync(): Promise\u003cCar\u003e {\n    // Create a random candidate\n  }\n\n  public createCloneCandidateAsync(originalCandidate: Readonly\u003cCar\u003e): Promise\u003cCar\u003e {\n    // Clone a candidate\n  }\n\n  public createCrossOverCandidateAsync(candidate1: Readonly\u003cCar\u003e, candidate2: Readonly\u003cCar\u003e): Promise\u003cCar\u003e {\n    // Create a cross over from two parent candidates \n  }\n\n  public createMutatedCandidateAsync(originalCandidate: Readonly\u003cCar\u003e): Promise\u003cCar\u003e {\n    // Create a mutated version of the candidate\n  }\n}\n```\n\n### Create Candidate Test\n\n```typescript race.ts\nimport { ICandidateTest, ICandidateTestResult, ICandidateTestFactory, ICandidateTestHistoryEntry, CandidateId } from '@coool/genetics';\nimport { Car } from 'car.ts';\n\nexport interface RaceResult extends ICandidateTestResult {\n  history: RaceHistoryEntry[];\n  candidateRanks: {\n    candidateId: CandidateId;\n    score: number;\n  }[];\n}\n\nexport interface RaceHistoryEntry extends ICandidateTestHistoryEntry {\n  // Data relevant to turns of the candidate test\n}\n\nexport class Race implements ICandidateTest {\n  public async runAsync(cars: Car[]): Promise\u003cICandidateTestResult\u003e {\n    // Run test between candidates and return the result of the test \n  }\n}\n\nexport class RaceFactory implements ICandidateTestFactory {\n  public async createCandidateTestAsync(): Promise\u003cRace\u003e {\n    // Create candidate test instance\n  }\n}\n```\n\n## Run\n\n### Iterations\n- Round tournament\n    - Round tournament between population candidates\n- Simple iteration\n    - Run an iteration between all population candidates\n\n### Populations\n- Natural selection\n    - Natural selection strategy to create new population\n\n```typescript runner.ts\nimport { GeneticsRunnerBase } from '@coool/genetics';\n\nexport class CarGenetics extends GeneticsRunnerBase {\n  constructor(\n    carFactory: CarFactory,\n    raceFactory: RaceFactory,\n  ) {\n    super(\n      new NaturalSelectionPopulationFactory(carFactory),\n      new RoundTournamentIteration(raceFactory),\n    );\n  }\n}\n```\n\n```typescript main.ts\nexport class Main {\n  constructor(\n    private _carGenetics: CarGenetics,\n  ) {\n  }\n\n  public async runAsync() {\n    for (let i = 0; i \u003c 100; i++) {\n      const iterationResult = this._carGenetics.runNextPopulationAsync();\n      \n      console.log(iterationResult);\n    }\n  }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhacklone%2Fcoool-genetics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhacklone%2Fcoool-genetics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhacklone%2Fcoool-genetics/lists"}