{"id":18767163,"url":"https://github.com/alandoescs/easy-java-rl-library","last_synced_at":"2026-02-04T22:35:39.372Z","repository":{"id":250382315,"uuid":"790431818","full_name":"AlanDoesCS/Easy-Java-RL-Library","owner":"AlanDoesCS","description":"A simple RL library, with a focus on DQNs","archived":false,"fork":false,"pushed_at":"2024-12-24T14:44:08.000Z","size":11815,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-24T15:43:21.622Z","etag":null,"topics":["adam-optimizer","ddqn","dqn","machine-learning","pathfinding","reinforcement-learning"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlanDoesCS.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":"2024-04-22T21:41:14.000Z","updated_at":"2024-12-24T14:44:11.000Z","dependencies_parsed_at":"2024-08-13T01:14:55.588Z","dependency_job_id":"56548d94-0590-4b7a-9b6f-189f2798a054","html_url":"https://github.com/AlanDoesCS/Easy-Java-RL-Library","commit_stats":null,"previous_names":["alandoescs/rl-pathfinding","alandoescs/easy-java-rl-library"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanDoesCS%2FEasy-Java-RL-Library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanDoesCS%2FEasy-Java-RL-Library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanDoesCS%2FEasy-Java-RL-Library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlanDoesCS%2FEasy-Java-RL-Library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlanDoesCS","download_url":"https://codeload.github.com/AlanDoesCS/Easy-Java-RL-Library/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239671174,"owners_count":19677869,"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":["adam-optimizer","ddqn","dqn","machine-learning","pathfinding","reinforcement-learning"],"created_at":"2024-11-07T19:06:37.178Z","updated_at":"2025-12-09T14:30:13.756Z","avatar_url":"https://github.com/AlanDoesCS.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Easy Java Reinforcement Learning Library (EJRLL)\nA simple neural network library for training Deep Q Networks in different environments.\n\n![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/AlanDoesCS/RL-Pathfinding)\n![GitHub commit activity](https://img.shields.io/github/commit-activity/t/AlanDoesCS/RL-Pathfinding)\n![GitHub contributors](https://img.shields.io/github/contributors/AlanDoesCS/RL-Pathfinding)\n![GitHub Repo stars](https://img.shields.io/github/stars/AlanDoesCS/RL-Pathfinding)\n![GitHub forks](https://img.shields.io/github/forks/AlanDoesCS/RL-Pathfinding)\n\n---\n\n## Environments\n- 2D perlin noise\n- Maze (generated using recursive backtracking)\n- Pseudorandom noise\n\n---\n\n## RL Algorithms\n- DQN\n- Double DQN\n\n## Replay\n- Replay Buffer\n- Prioritized Experience Replay\n\n## Optimizers\n- Adam\n\n---\n\n## Example usage:\n\n```java\npublic class Main {\n    public static void main(String[] args) {\n        Environment.setStateType(Environment.StateType.PositionVectorOnly);\n        Environment.setDimensions(10, 10);\n        Environment.setActionSpace(4);\n\n        DDQNAgentTrainer trainer;\n        try {\n            trainer = new DDQNAgentTrainer(Set.of(EmptyGridEnvironment.class, RandomGridEnvironment.class, PerlinGridEnvironment.class, MazeGridEnvironment.class));\n        } catch (InvalidTypeException e) {\n            e.printStackTrace();\n            return;\n        }\n\n        List\u003cLayer\u003e layers = new ArrayList\u003c\u003e();\n        LeakyReLU leakyRelu = new LeakyReLU(0.1f);\n        float lambda = 0.0001f;\n\n        // StateSpace is 104, ActionSpace is 5\n        layers.add(new MLPLayer(Environment.getStateSpace(), 64, leakyRelu, 0, lambda));\n        layers.add(new MLPLayer(64, 64, leakyRelu, 0, lambda));\n        layers.add(new MLPLayer(64, Environment.getActionSpace(), new Linear(), 0, lambda));\n\n        DDQNAgent ddqnAgent = new DDQNAgent(\n                Environment.getActionSpace(),  // action space\n                layers,                        // layers\n                1,                             // initial epsilon\n                0.9999,                        // epsilon decay\n                0.01,                          // epsilon min\n                0.999,                         // gamma\n                0.0001,                        // learning rate\n                0.99995,                       // learning rate decay\n                0.000001f,                     // learning rate minimum\n                0.005                          // tau\n        );\n\n        trainer.trainAgent(\n                ddqnAgent,                     // agent\n                600000,                        // num episodes\n                500,                           // save period\n                1,                             // visualiser update period\n                \"plot\", \"ease\", \"axis_ticks\", \"show_path\", \"verbose\" // varargs\n        );\n    }\n}\n```\n\n## Papers \u0026 Resources Used\nThis list is incomplete, but I will try and ensure I add all the sources I used eventually\n\n### Papers\n- https://arxiv.org/pdf/1511.08458\n- http://arxiv.org/pdf/1511.05952v4\n- https://arxiv.org/pdf/1412.6980\n- http://arxiv.org/pdf/1502.03167\n- https://proceedings.neurips.cc/paper/2020/file/32fcc8cfe1fa4c77b5c58dafd36d1a98-Paper.pdf\n- https://doi.org/10.1109/ACCESS.2019.2941229\n- http://www.arxiv.org/pdf/1509.06461\n- https://arxiv.org/pdf/1312.5602\n\n### Videos\n- https://www.youtube.com/watch?v=z9hJzduHToc\n- https://www.youtube.com/watch?v=s2coXdufOzE\n- https://youtu.be/ECV5yeigZIg?si=3EXfuIGTH2BABkeS\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falandoescs%2Feasy-java-rl-library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falandoescs%2Feasy-java-rl-library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falandoescs%2Feasy-java-rl-library/lists"}