feat: Add SMGPRegressor (Smooth Multifunction Genetic Programming - #209
Open
MichalicekPetr wants to merge 16 commits into
Open
feat: Add SMGPRegressor (Smooth Multifunction Genetic Programming#209MichalicekPetr wants to merge 16 commits into
MichalicekPetr wants to merge 16 commits into
Conversation
Member
|
thanks for your patience. we finally fixed the other methods that were failing in docker on main. once the tests pass we'll perform our review and update you. |
lacava
added a commit
that referenced
this pull request
Aug 13, 2026
every push and PR rebuilds all 27 images, because the gate in build-and-test is hardcoded to should_run=true (5b13029). check-changes already computes what changed, but nothing consumes it. one method submission can cost a lot: #209 went through 16 full 27-image runs, #210 and #212 another 24 between them. pull requests now build only the methods they touch. everything else - pushes to master/dev, the new weekly schedule, manual dispatch - still rebuilds everything, so a method that breaks from upstream drift without anyone touching it still gets caught. that drift is calendar-driven, which is what the schedule is for; during a quiet stretch there are no merges to catch it. - a method rebuilds if either algorithms/<name>/ or experiment/methods/<name>/ changed. the second one matters: a regressor.py edit has to retest the method even though the install is untouched. - changes to shared build inputs (dockerfiles, base_environment, scripts, entry.sh, configure.sh, workflows) still rebuild everything. - build-and-test always runs and always reports for every algorithm, so the check names stay present and can be marked required. only the docker build step is skipped. - dropped always() from build-and-test. with the gate inside the job, a failed check-changes would have left an empty build list, skipped every build and reported green. - check-changes no longer diffs against github.event.before, so a force-push to a CI branch no longer fails the job. also fixes a long-standing bug: changed-experiments used awk field $2 on experiment/methods/<name>/..., which is the literal string "methods", not the method name. it needs $3. nothing consumed that output before, so it never showed up.
Member
|
we finally got the validation checks working, so we just need you to fix the following: Error: smgp: algorithms/smgp/metadata.yml is missing required key(s): email, url 1 problem(s) found. See CONTRIBUTING.md for the expected layout. thanks |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This Pull Request introduces
SMGPRegressor(Smooth Multifunction Genetic Programming), a novel symbolic regression method designed to address the challenges of non-linear, discontinuous fitness landscapes and efficient hardware acceleration (GPGPU mapping) in traditional Genetic Programming Algorithms (GPAs).The core of this method is based on the research paper "Smooth multi-function in evolutionary algorithm concept" (Michalicek & Brandejsky, University of Pardubice).
Scientific Background & Innovation
Traditional GPAs suffer from low causality in their search space: a single mutation or crossover event (e.g., swapping a multiplication for a sine operator) causes a radical, discontinuous jump in the fitness landscape.
SMGPRegressorsolves this by eliminating the traditional structural evolution of trees during parameter tuning. It embeds a perfect binary tree of Multifunctions parameterized by a single control variable Gamma.Unlike previous versatile/smooth functions (e.g., Diviplication, Subdition, or Versatile Functions with multiple control variables that artificially inflate the dimensionality of the fitness landscape), our proposed method maps n pairs of basis functions into a single continuous template controlled by a single parameter Gamma.
The transition between functions is smoothly continuous (C^1 class continuity). To resolve the non-differentiable sharp bounds of classic triangle/sawtooth membership functions, we utilize a Fourier series approximation of the triangle wave. This guarantees that the left and right derivatives match at all boundary points, smoothing the fitness landscape and enabling highly efficient continuous parameter optimization.
Key Advantages for Benchmarking
Architecture & Integration Details
The repository has been structured strictly following the SRBench Contribution Guide:
install.shto pull the stable engine components from our source repository during the benchmarking setup.SMGPRegressorfully implements the standard.fit(X, y)and.predict(X)API.metadata.ymlmatching the execution requirements.maxSecondsparameter and correctly exposes therandom_stateattribute for reproducibility.model(est, X=None)function maps internal representations back to standard, clean SymPy mathematical equations matching the input feature names of the trainingpd.DataFrame.Checklist
fit,predict).random_stateattribute exposed and respected.metadata.yml,regressor.py,install.sh, andLICENSE.model(est, X=None)returns a valid SymPy-compatible string with correct column mapping.install.shdoes not require sudo permissions.install.sh.