{"id":32637355,"url":"https://github.com/heal-research/heal.equationsearch","last_synced_at":"2026-06-29T01:31:15.687Z","repository":{"id":154149889,"uuid":"624819719","full_name":"heal-research/HEAL.EquationSearch","owner":"heal-research","description":"Equation learning with tree search using an expression grammar","archived":false,"fork":false,"pushed_at":"2023-11-16T15:49:02.000Z","size":25895,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-10-31T01:56:24.575Z","etag":null,"topics":["equation-learning","nonlinear-regression","symbolic-regression","tree-search"],"latest_commit_sha":null,"homepage":"","language":"C#","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/heal-research.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-07T10:33:55.000Z","updated_at":"2023-04-24T10:19:45.000Z","dependencies_parsed_at":"2023-11-11T16:41:24.882Z","dependency_job_id":null,"html_url":"https://github.com/heal-research/HEAL.EquationSearch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/heal-research/HEAL.EquationSearch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heal-research%2FHEAL.EquationSearch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heal-research%2FHEAL.EquationSearch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heal-research%2FHEAL.EquationSearch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heal-research%2FHEAL.EquationSearch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heal-research","download_url":"https://codeload.github.com/heal-research/HEAL.EquationSearch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heal-research%2FHEAL.EquationSearch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34910177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"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":["equation-learning","nonlinear-regression","symbolic-regression","tree-search"],"created_at":"2025-10-31T01:56:21.872Z","updated_at":"2026-06-29T01:31:15.645Z","avatar_url":"https://github.com/heal-research.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HEAL.EquationSearch\nEquation learning with tree search using an expression grammar.\n\nSearch is implemented via https://github.com/heal-research/TreesearchLib.\n\nWe use separable nonlinear least squares (variable projection) for parameter optimization. The linear parameters are solved via ordinary least squares (via QR decomposition) and the nonlinear parameters are optimized via an iterative algorithm (see https://iopscience.iop.org/article/10.1088/0266-5611/19/2/201). \n\nThe algorithm can be used via breadth-first search to generate all expressions up to a given length from the grammar.\n\n## Grammars\nSeveral grammars for expressions can be used. \nThe grammars are restricted to limit the number of possible expressions visited by the algorithm.\n\nPolynomial grammar:\n```\nExpr -\u003e param | param * Term + Expr\nTerm -\u003e Fact | Fact * Term \nFact -\u003e var_1 | ... | var_n\n```\n\nDefault (full) grammar:\n```\nExpr -\u003e param | param * Term + Expr\nTerm -\u003e Fact | Fact * Term\nFact -\u003e var_1 | ... | var_n\n        | 1 / '(' PolyExprOne ')'\n        | log '(' abs '(' PolyExprOne ')' ')'\n        | exp '(' param * PolyTerm ')'\n        | cos '(' PolyExpr ')'\nPolyExpr    -\u003e param * PolyTerm + param | param * PolyTerm + PolyExpr \nPolyExprOne -\u003e param * PolyTerm + 1 | param * PolyTerm + PolyExprOne\nPolyTerm -\u003e PolyFact | PolyFact * PolyTerm\nPolyFact -\u003e var_1 | ... | var_n\n```\n\n## Building\n```sh\ndotnet build -c Release HEAL.EquationSearch\n```\n\nRun the unit tests with\n```sh\ndotnet test\n```\n\n## Using the CLI\nHEAL.EquationSearch.Console provides a simple command line interface to run the algorithm for CSV datafiles.\n\nExample to run on the Nikuradse (flow in rough pipes) dataset:\n```sh\nwget https://github.com/EpistasisLab/pmlb/blob/master/datasets/nikuradse_1/nikuradse_1.tsv.gz?raw=true \\\n     -O nikuradse_1.tsv.gz\ngzip -d -c nikuradse_1.tsv.gz | sed 's/\\t/,/g' \u003e nikuradse_1.csv\ndotnet run --project .\\HEAL.EquationSearch.Console\\ -- \\\n           --dataset nikuradse_1.csv \\\n           --target target \\\n           --train 0:361 \\\n           --max-length 50 \\\n           --noise-sigma 0.015 \\\n           --seed 1234\n```\n\n## Native interpreter\nThe repository includes a binary of a native library (for Windows and Ubuntu 20.04) that is used for automatic differentiation and parameter optimization for efficiency. The C++ code for the native interpreter is not published yet.\n\n## Citation\n\nThis algorithm is based on [Kammerer et al, 2023](https://link.springer.com/chapter/10.1007/978-3-030-39958-0_5) ([preprint](https://arxiv.org/abs/2109.13895)) with several improvements developed after the publication.\n\nFull citation:\n```\nKammerer, L., Kronberger, G., Burlacu, B., Winkler, S.M., Kommenda, M., Affenzeller, M. (2020).\nSymbolic Regression by Exhaustive Search: Reducing the Search Space Using Syntactical Constraints \nand Efficient Semantic Structure Deduplication. In: Banzhaf, W., Goodman, E., Sheneman, L., \nTrujillo, L., Worzel, B. (eds) Genetic Programming Theory and Practice XVII. Genetic and \nEvolutionary Computation. Springer, Cham. https://doi.org/10.1007/978-3-030-39958-0_5\n```\n\n## License\nMIT License\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheal-research%2Fheal.equationsearch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheal-research%2Fheal.equationsearch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheal-research%2Fheal.equationsearch/lists"}