I really appreciated your work. You started with a simple RMHC algorithm that any person, with a little effort, can understand its logic, and then you gradually moved on more advanced algorithms, like self-adaptive hill climbing and simulated annealing.
The idea of ​​dynamically changing the strength of the mutation in the self-adaptive version, depending on the progress of the optimization process, is fantastic. You've made the hill climbing algorithm more adaptive and you've achieved a great balance between exploration and exploitation. If the algorithm finds a certain number of increasingly better solutions, you are right. I can explore new areas in the solution space, push myself further, increasing strength. Thank you very much for this point of reflection.
I also tried to do some experiments on your code, modifying the mutation strength and the buffer size and I think the choice you made is a good one. Well done! I'll leave you the link of an online resource that I found very interesting and which could help us improve the performance of the algorithm even further. It's an excerpt of a conference paper "On a Hill-Climbing Algorithm with Adaptive Step Size: Towards a Control Parameter-Less Black-Box Optimisation Algorithm": https://link.springer.com/chapter/10.1007/3-540-34783-6_56.
Just two notes. I'm very sorry that in the simulated annealing algorithm there is no check on whether the solution obtained is valid or not (a simpleif not valid(new_solution) might have been enough) and that you didn't take the time to write the README because it would have been a great way to present your work and make it easier to understand. But these are the only flaws. For the rest, congratulations for the commitment and care you put into the entire notebook 🚀.
Agnese, thank you very much for your feedback and suggestions!
I apologize for the README, and I will make an effort to improve clarity and better support to the code in the future.
Hello Luciana 👋,
I really appreciated your work. You started with a simple RMHC algorithm that any person, with a little effort, can understand its logic, and then you gradually moved on more advanced algorithms, like self-adaptive hill climbing and simulated annealing.
The idea of ​​dynamically changing the strength of the mutation in the self-adaptive version, depending on the progress of the optimization process, is fantastic. You've made the hill climbing algorithm more adaptive and you've achieved a great balance between exploration and exploitation. If the algorithm finds a certain number of increasingly better solutions, you are right. I can explore new areas in the solution space, push myself further, increasing strength. Thank you very much for this point of reflection.
I also tried to do some experiments on your code, modifying the mutation strength and the buffer size and I think the choice you made is a good one. Well done! I'll leave you the link of an online resource that I found very interesting and which could help us improve the performance of the algorithm even further. It's an excerpt of a conference paper "On a Hill-Climbing Algorithm with Adaptive Step Size: Towards a Control Parameter-Less Black-Box Optimisation Algorithm": https://link.springer.com/chapter/10.1007/3-540-34783-6_56.
Just two notes. I'm very sorry that in the simulated annealing algorithm there is no check on whether the solution obtained is valid or not (a simple
if not valid(new_solution)
might have been enough) and that you didn't take the time to write the README because it would have been a great way to present your work and make it easier to understand. But these are the only flaws. For the rest, congratulations for the commitment and care you put into the entire notebook 🚀.Thanks again for everything and an happy weekend.