{"id":17449752,"url":"https://github.com/bolner/finite-group-explorer","last_synced_at":"2025-04-02T22:25:41.646Z","repository":{"id":148174532,"uuid":"270311960","full_name":"bolner/Finite-Group-Explorer","owner":"bolner","description":"Heuristic search algorithms for abelian and non-abelian small groups for educational purposes.","archived":false,"fork":false,"pushed_at":"2020-06-30T14:01:51.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-08T12:46:58.758Z","etag":null,"topics":["cayley","cpp","graph","graphviz","group-theory"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bolner.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":"2020-06-07T13:17:04.000Z","updated_at":"2020-06-30T14:01:53.000Z","dependencies_parsed_at":"2023-05-19T09:00:20.751Z","dependency_job_id":null,"html_url":"https://github.com/bolner/Finite-Group-Explorer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bolner%2FFinite-Group-Explorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bolner%2FFinite-Group-Explorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bolner%2FFinite-Group-Explorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bolner%2FFinite-Group-Explorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bolner","download_url":"https://codeload.github.com/bolner/Finite-Group-Explorer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246901446,"owners_count":20852219,"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":["cayley","cpp","graph","graphviz","group-theory"],"created_at":"2024-10-17T21:51:30.567Z","updated_at":"2025-04-02T22:25:41.621Z","avatar_url":"https://github.com/bolner.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Finite Group Explorer\n=====================\n\nHeuristic search algorithms for [abelian](https://en.wikipedia.org/wiki/Abelian_group) and [non-abelian](https://en.wikipedia.org/wiki/Non-abelian_group) [small groups](https://en.wikipedia.org/wiki/List_of_small_groups).\n\nMy main motivation was the lack of similar heuristic programs on the internet. I was curious which are the biggest\ngroups that can be found this way, and how soon would one reach a combinatorial explosion on current CPUs. (This limit seems to be around order 10 for random search and 16-20 for the systematic.)\n\n# Modules\n\nThe underlying representation of the groups in each module is done by using [Cayley tables](https://en.wikipedia.org/wiki/Cayley_table). In addition to the Cayley table, the search algorithms are making use of bitmasks that summarize values appearing on a given row or column (etc.). This technique is used frequently in Chess engines.\n\n| Module | Description |\n| --- | --- |\n| [LatinHeuristics.hpp](./LatinHeuristics.hpp) | Searches for [reduced latin squares](https://en.wikipedia.org/wiki/Latin_square#Reduced_form) and disregards the [associative rule](https://en.wikipedia.org/wiki/Group_(mathematics)#Definition). Its findings might be either quasigroups or groups when associativity appears by chance. |\n| [AssocHeuristics.hpp](./AssocHeuristics.hpp) | Searches for proper groups by using the associative rule too. The results can be both abelian and non-abelian. |\n| [RandomHeuristics.hpp](./RandomHeuristics.hpp) | Same as AssocHeuristics but the search is randomized. This has much worse performance. |\n| [CycleGraph.hpp](./CycleGraph.hpp) | Can generate the [Graphviz](https://dreampuf.github.io/GraphvizOnline/) and the [CsAcademy](https://csacademy.com/app/graph_editor/) code of the [Cycle Graph](https://en.wikipedia.org/wiki/Cycle_graph_(algebra)) of a group. Can also list the cyclic subgroups of the group. |\n| [Classifier.hpp](./Classifier.hpp) | Checks for properties of the group. Now supports: Associative, Abelian, Cyclic, Simple, Dedekind, Hamiltonian. Can list the subgroups and normal subgroups. |\n\n# 1. Example result: A\u003csub\u003e4\u003c/sub\u003e\n\nA\u003csub\u003e4\u003c/sub\u003e non-abelian, alternating group, order 12.\n\n## 1.1. Cycle graph\n\n![Alt text](./doc/a4.svg)\n\n## 1.2. Cayley table\n\n| * |1|2|3|4|5|6|7|8|9|10|11|12|\n| - | - | - | - | - | - | - | - | - | - | - | - | - |\n|\u003cb\u003e1\u003c/b\u003e|1|2|3|4|5|6|7|8|9|10|11|12|\n|\u003cb\u003e2\u003c/b\u003e|2|1|4|3|6|5|8|7|10|9|12|11|\n|\u003cb\u003e3\u003c/b\u003e|3|4|1|2|7|8|5|6|11|12|9|10|\n|\u003cb\u003e4\u003c/b\u003e|4|3|2|1|8|7|6|5|12|11|10|9|\n|\u003cb\u003e5\u003c/b\u003e|5|7|8|6|9|11|12|10|1|3|4|2|\n|\u003cb\u003e6\u003c/b\u003e|6|8|7|5|10|12|11|9|2|4|3|1|\n|\u003cb\u003e7\u003c/b\u003e|7|5|6|8|11|9|10|12|3|1|2|4|\n|\u003cb\u003e8\u003c/b\u003e|8|6|5|7|12|10|9|11|4|2|1|3|\n|\u003cb\u003e9\u003c/b\u003e|9|12|10|11|1|4|2|3|5|8|6|7|\n|\u003cb\u003e10\u003c/b\u003e|10|11|9|12|2|3|1|4|6|7|5|8|\n|\u003cb\u003e11\u003c/b\u003e|11|10|12|9|3|2|4|1|7|6|8|5|\n|\u003cb\u003e12\u003c/b\u003e|12|9|11|10|4|1|3|2|8|5|7|6|\n\n# 2. Example result: G\u003csub\u003e16\u003c/sub\u003e\u003csup\u003e6\u003csup\u003e\n\nAbelian, order 16, product. Z\u003csub\u003e4\u003c/sub\u003e x Z\u003csub\u003e2\u003c/sub\u003e\u003csup\u003e2\u003csup\u003e\n\n## 2.1. Cycle graph\n\n![Alt text](./doc/g16.svg)\n\n## 2.2. Generated Graphviz code of the graph\n\n```dot\nstrict graph Group {\n    node [shape=circle, fontsize=6, fixedsize=true, width=0.2]\n    1 [style=filled]\n\n    1 -- 9 -- 3 -- 11 -- 1\n    1 -- 10 -- 3 -- 12 -- 1\n    1 -- 13 -- 3 -- 15 -- 1\n    1 -- 14 -- 3 -- 16 -- 1\n    1 -- 2 -- 1\n    1 -- 4 -- 1\n    1 -- 5 -- 1\n    1 -- 6 -- 1\n    1 -- 7 -- 1\n    1 -- 8 -- 1\n}\n```\n\n## 2.3. Cayley table\n\n| | | | | | | | | | | | | | | | |\n| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |\n|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|\n|2|1|4|3|6|5|8|7|10|9|12|11|14|13|16|15|\n|3|4|1|2|7|8|5|6|11|12|9|10|15|16|13|14|\n|4|3|2|1|8|7|6|5|12|11|10|9|16|15|14|13|\n|5|6|7|8|1|2|3|4|13|14|15|16|9|10|11|12|\n|6|5|8|7|2|1|4|3|14|13|16|15|10|9|12|11|\n|7|8|5|6|3|4|1|2|15|16|13|14|11|12|9|10|\n|8|7|6|5|4|3|2|1|16|15|14|13|12|11|10|9|\n|9|10|11|12|13|14|15|16|3|4|1|2|7|8|5|6|\n|10|9|12|11|14|13|16|15|4|3|2|1|8|7|6|5|\n|11|12|9|10|15|16|13|14|1|2|3|4|5|6|7|8|\n|12|11|10|9|16|15|14|13|2|1|4|3|6|5|8|7|\n|13|14|15|16|9|10|11|12|7|8|5|6|3|4|1|2|\n|14|13|16|15|10|9|12|11|8|7|6|5|4|3|2|1|\n|15|16|13|14|11|12|9|10|5|6|7|8|1|2|3|4|\n|16|15|14|13|12|11|10|9|6|5|8|7|2|1|4|3|\n\n# 3. Example result: Dih\u003csub\u003e4\u003c/sub\u003e\n\nDih\u003csub\u003e4\u003c/sub\u003e: non-abelian, dihedral group, order 8, extraspecial group, nilpotent.\n\n## 3.1. Cycle graph\n\n![Alt text](./doc/dih4.svg)\n\n## 3.2. Generated Graphviz code of the graph\n\n```dot\nstrict graph Group {\n    node [shape=circle, fontsize=6, fixedsize=true, width=0.2]\n    1 [style=filled]\n\n    1 -- 2 -- 1\n    1 -- 3 -- 6 -- 7 -- 1\n    1 -- 4 -- 1\n    1 -- 5 -- 1\n    1 -- 7 -- 6 -- 3 -- 1\n    1 -- 8 -- 1\n}\n```\n\n## 3.3. Cayley table\n\n| | | | | | | | |\n| - | - | - | - | - | - | - | - |\n|1|2|3|4|5|6|7|8|\n|2|1|4|3|6|5|8|7|\n|3|8|6|2|4|7|1|5|\n|4|7|5|1|3|8|2|6|\n|5|6|8|7|1|2|4|3|\n|6|5|7|8|2|1|3|4|\n|7|4|1|5|8|3|6|2|\n|8|3|2|6|7|4|5|1|\n\n# 4. Example result: G\u003csub\u003e24\u003c/sub\u003e\n\nAbelian, order 24. This was found by accident, when I forgot to stop a program and it ran for around an hour.\n\n## 4.1. Cycle graph\n\n![Alt text](./doc/g24.svg)\n\n## 4.2. Generated Graphviz code of the graph\n\n```dot\nstrict graph Group {\n    node [shape=circle, fontsize=6, fixedsize=true, width=0.2]\n    1 [style=filled]\n\n    1 -- 10 -- 17 -- 2 -- 9 -- 18 -- 1\n    1 -- 11 -- 17 -- 3 -- 9 -- 19 -- 1\n    1 -- 12 -- 17 -- 4 -- 9 -- 20 -- 1\n    1 -- 13 -- 17 -- 5 -- 9 -- 21 -- 1\n    1 -- 14 -- 17 -- 6 -- 9 -- 22 -- 1\n    1 -- 15 -- 17 -- 7 -- 9 -- 23 -- 1\n    1 -- 16 -- 17 -- 8 -- 9 -- 24 -- 1\n}\n```\n\n## 4.3. Cayley table\n\n| | | | | | | | | | | | | | | | | | | | | | | | |\n| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |\n|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|\n|2|1|4|3|6|5|8|7|10|9|12|11|14|13|16|15|18|17|20|19|22|21|24|23|\n|3|4|1|2|7|8|5|6|11|12|9|10|15|16|13|14|19|20|17|18|23|24|21|22|\n|4|3|2|1|8|7|6|5|12|11|10|9|16|15|14|13|20|19|18|17|24|23|22|21|\n|5|6|7|8|1|2|3|4|13|14|15|16|9|10|11|12|21|22|23|24|17|18|19|20|\n|6|5|8|7|2|1|4|3|14|13|16|15|10|9|12|11|22|21|24|23|18|17|20|19|\n|7|8|5|6|3|4|1|2|15|16|13|14|11|12|9|10|23|24|21|22|19|20|17|18|\n|8|7|6|5|4|3|2|1|16|15|14|13|12|11|10|9|24|23|22|21|20|19|18|17|\n|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|1|2|3|4|5|6|7|8|\n|10|9|12|11|14|13|16|15|18|17|20|19|22|21|24|23|2|1|4|3|6|5|8|7|\n|11|12|9|10|15|16|13|14|19|20|17|18|23|24|21|22|3|4|1|2|7|8|5|6|\n|12|11|10|9|16|15|14|13|20|19|18|17|24|23|22|21|4|3|2|1|8|7|6|5|\n|13|14|15|16|9|10|11|12|21|22|23|24|17|18|19|20|5|6|7|8|1|2|3|4|\n|14|13|16|15|10|9|12|11|22|21|24|23|18|17|20|19|6|5|8|7|2|1|4|3|\n|15|16|13|14|11|12|9|10|23|24|21|22|19|20|17|18|7|8|5|6|3|4|1|2|\n|16|15|14|13|12|11|10|9|24|23|22|21|20|19|18|17|8|7|6|5|4|3|2|1|\n|17|18|19|20|21|22|23|24|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|\n|18|17|20|19|22|21|24|23|2|1|4|3|6|5|8|7|10|9|12|11|14|13|16|15|\n|19|20|17|18|23|24|21|22|3|4|1|2|7|8|5|6|11|12|9|10|15|16|13|14|\n|20|19|18|17|24|23|22|21|4|3|2|1|8|7|6|5|12|11|10|9|16|15|14|13|\n|21|22|23|24|17|18|19|20|5|6|7|8|1|2|3|4|13|14|15|16|9|10|11|12|\n|22|21|24|23|18|17|20|19|6|5|8|7|2|1|4|3|14|13|16|15|10|9|12|11|\n|23|24|21|22|19|20|17|18|7|8|5|6|3|4|1|2|15|16|13|14|11|12|9|10|\n|24|23|22|21|20|19|18|17|8|7|6|5|4|3|2|1|16|15|14|13|12|11|10|9|\n\n# TODO\n\n- Add more tests into the classifier.\n- Find a decent graph rendering tool.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbolner%2Ffinite-group-explorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbolner%2Ffinite-group-explorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbolner%2Ffinite-group-explorer/lists"}