Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for custom individual generation #64

Closed
btezergil opened this issue Oct 9, 2023 · 5 comments
Closed

Support for custom individual generation #64

btezergil opened this issue Oct 9, 2023 · 5 comments

Comments

@btezergil
Copy link

btezergil commented Oct 9, 2023

Feature Request

First of all, thanks for this amazing and comprehensive library! I am working on a new project based on genetic algorithms (actually an old one, but the code was in Python and I've moved it to Clojure), and stumbled upon your library during my research for a new library to manage the evolution flow.

Problem Statement

Regarding the project above, I have a rather complex sequence representation that has a distinct structure consisting of non-uniform alleles. Consequently, generating individuals with generate-sequence method of this library does not work for me.

There are some potential workarounds for me such as writing new wrappers that use my own version of generate-sequence, but looking at the library code, I thought that since the library supports custom binary (i.e. crossover) and unary (i.e. mutation) operators, I think it's also logical for it to support custom generation methods.

Ideal Solution

evolve function can get a generator function instead of an allele-set allowing generation based on a custom function.

Alternative solutions

In my case, methods like evolve and generate-sequence can be overriden with versions that generate custom sequences, but it's not a native solution.

Additional Context

While I'm not very well-versed in Clojure, I can also try to add this to the library. I just wanted to know your point of view on this issue as the owner.

@github-actions
Copy link

github-actions bot commented Oct 9, 2023

Thank you for taking the time to let us know!

@btezergil
Copy link
Author

Hello again @nnichols, I did not have much time to work on this in recent months, but I'm now back on this again. I gave another glance at the existing code and my solution, and I think that this implementation of mine is a potential solution, albeit an ugly one. I'm working on a better solution, and in the meanwhile hosted my own version on Clojars for easier access.

I'm not sure whether you want to maintain this library, but if you can take some time to give me some feedback regarding my ask, I'd greatly appreciate it. If you don't want to maintain this anymore, I can continue from my fork for my own use if you think that's more appropriate. Let me know what you think.

@nnichols
Copy link
Owner

@btezergil Hello, I'm back from vacation and will catch up on your PR.

This library was mostly an educational endeavor for myself, and I provide basic support when I'm available. That said, it's not production code for any system I maintain- so I don't regularly run or test it myself. If you want to use it in a production capacity, I recommend maintaining your own fork. If you'd like to contribute back, great! If not, I totally understand that too.

@btezergil
Copy link
Author

Hello again @nnichols, and thanks for the response!

First of all, I do not plan to use this code in a production capacity, it's mostly for research purposes. My first choice would be contributing to the library itself (in terms of implementation and maintenance) if we can align on the changes. That said, I've noticed that my initial PR covers some areas but leads to some ugly code in the main runner, and will try to address that.

Other than that, I understand that you are okay with the changes; I think we can continue from the PR and close this thread, WDYT?

@nnichols
Copy link
Owner

Yeah, I think we can continue the discussion in the PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants