-
Notifications
You must be signed in to change notification settings - Fork 22
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
Using FST-PSO for discrete optimization ? #15
Comments
Hi Charlie, due to the coronavirus outbreak I am a bit overwhelmed by additional duties (e.g., transitioning to online courses and exams). I will get back at your idea asap! |
Hi Charlie, I created a separate branch for discrete FST-PSO (dfstpso). The feature is still in alpha stage, so it was not added to the master branch, yet. Let me know if you want to play with it, I will explain the API to you. Cheers, Marco |
Hello Marco, Thank you for coming back to this, I'm really looking forward to testing it. Cheers 👍 |
I tried to keep FST-PSO 2's API as simple and immediate as the first version. Hence, this is how it works:
As you can see, everything is basically identical to FST-PSO. What changes is the new
In this case, the problem has 3 variables/dimensions. The first variable can take boolean values; the second variable can take the integer values 0, 1, and 2; the third variable can be one of those four letters. Any sublist composed with discrete elements is valid. Of course, the Internally, FST-PSO 2 converts the discrete problem to the real-valued problem of parameterizing a generative probabilistic model able to produce high quality solutions. The algorithm returns a tuple with three values: the optimal structure of the probabilistic model (not really interesting - I am considering the removal of this information); the fitness value of the best individual found; the best discrete solution found. Please let me know if you need additional information. Cheers! |
Thank you very much for these explanations. I'm sure I will have good use cases for this algo :) So now I'm wondering if you have benchmarked the performances already, and if I could have a look at a paper/pre-print ? I will let you know how it goes as soon as I start using it 👍 |
Not yet, we are beginning the test right now! |
Hi Charly, this is to let you know that I pushed a new version of the discrete algorithm because I identified a couple of bugs. The new version seems to be even more effective than before. |
Hello Marco !
I now have a new optimization problem, which is very demanding computationally (several biological systems in different MD simulations at each evaluation during optimization) and most probably does NOT require using a continuous search space.
For example, this given parameter to be optimized: X(i) will be able to vary between say [0,1] but I would like it to adopt values chosen within set_X(i) = {0, 0.05, 0.10, 0.15, ..., 0.95, 1}. And each parameter to be optimized: X(n) have their own set_X(n) = {whatever discrete domain}.
I have read a little and I understand PSO and FST-PSO are designed for continuous domains, that efficiencies are tested and guaranteed only for continuous domains and that some PSO variants have been developed specifically for discrete domains. Also other algos might be helpful, but for some reasons I trust FST-PSO more :) Notably because I believe gradient descent or genetic algos might not perform too good on the problem at hand and FST-PSO nicely solved my previous optimization needs.
What would it take to adapt FST-PSO for discrete optimization ? How relevant would it be ?
I'm thinking, for example if:
AND
(this point 2. is very optional and can be left to the user in the eval_function for speed-up, although if there are let's say 50 parameters, that would mean exploring for example a database looking for 50 keys to retrieve the previously calculated fitness value for this set of discrete parameters)
AND
How relevant would this be ?
Or maybe adapting PSO in these kind of ways just makes no sense ...
I would be very glad to hear your take on this ! :)
The text was updated successfully, but these errors were encountered: