{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/improving-genetic-programming-for-symbolic","title":"Improving Genetic Programming for Symbolic Regression with Equality Graphs","arxiv_id":"2501.17848","date":"2025-01-29","proceeding":null,"authors":["Fabricio Olivetti de Franca","Gabriel Kronberger"],"abstract":"The search for symbolic regression models with genetic programming (GP) has a tendency of revisiting expressions in their original or equivalent forms. Repeatedly evaluating equivalent expressions is inefficient, as it does not immediately lead to better solutions. However, evolutionary algorithms require diversity and should allow the accumulation of inactive building blocks that can play an important role at a later point. The equality graph is a data structure capable of compactly storing expressions and their equivalent forms allowing an efficient verification of whether an expression has been visited in any of their stored equivalent forms. We exploit the e-graph to adapt the subtree operators to reduce the chances of revisiting expressions. Our adaptation, called eggp, stores every visited expression in the e-graph, allowing us to filter out from the available selection of subtrees all the combinations that would create already visited expressions. Results show that, for small expressions, this approach improves the performance of a simple GP algorithm to compete with PySR and Operon without increasing computational cost. As a highlight, eggp was capable of reliably delivering short and at the same time accurate models for a selected set of benchmarks from SRBench and a set of real-world datasets.","url_abs":"https://arxiv.org/abs/2501.17848v1","url_pdf":"https://arxiv.org/pdf/2501.17848v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"improving-genetic-programming-for-symbolic","repo_url":"https://github.com/folivetti/eggp_paper_GECCO","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"none","reach":null},{"paper_slug":"improving-genetic-programming-for-symbolic","repo_url":"https://github.com/folivetti/srtree/blob/main/apps/eggp/README.md","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"evolutionary-algorithms","task_name":"Evolutionary Algorithms"},{"task_slug":"symbolic-regression","task_name":"Symbolic Regression"},{"task_slug":"regression-1","task_name":"regression"}],"methods":[{"method_slug":"set","method_name":"SET"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2501.17848","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2501.17848"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/folivetti/eggp_paper_GECCO","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/folivetti/srtree/blob/main/apps/eggp/README.md","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran_draft_wrong":1,"ran_honours":1},"by_repo_kind":{"official":{"samples":2,"ran":2,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"e82a3c89ed6d5a1f","entry":"auc_agg","repo":"folivetti/eggp_paper_GECCO","repo_kind":"official","path":"realworld_experiment/perfplot.py","file_url":"https://github.com/folivetti/eggp_paper_GECCO/blob/HEAD/realworld_experiment/perfplot.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e82a3c89ed6d5a1f"}},{"code_sha256_prefix":"57bbf9211507c5e1","entry":"iqr","repo":"folivetti/eggp_paper_GECCO","repo_kind":"official","path":"realworld_experiment/perfplot.py","file_url":"https://github.com/folivetti/eggp_paper_GECCO/blob/HEAD/realworld_experiment/perfplot.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"57bbf9211507c5e1"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}