Open SimonKLind opened 3 years ago
Hi guys. As I stated in the commit message, this C backend is currently added in a rather crude way, and I expect that some (or many) changes need to be made before you will consider merging this. I'm creating this pull request already in order to be able to get you guys's input on how you want it integrated into HM, and what functionality you want present before a potential merge.
I should also mention the specifics of what this C backend currently supports:
I think those are the most important restrictions that may need to be addressed before potentially merging.
Overall, I think it looks really good, and I really like this C backend initiative. Good job! I think the acquisition function optimization will be changed a bit based on a meeting we had earlier today, but other than that the rest seems fine. Some higher-level takes:
Commenting on the not-yet-implemented features:
There are some other (many of them minor) features of HM that are not implemented. To keep track (correct me if I'm wrong):
Most of these are minor features that I think we can leave for later, with really low priority, I'm adding it here mostly to have it written down for future reference. The exception may be constrained BO, which might be not very hard to add and is an often-needed feature. Prior injection and GPs are nice, but will probably be tricky to add and I think are not mandatory.
I think the things I'd vote we work on next would be:
and later down the line:
@luinardi what do you think?
Thank you for your comments @arturluis.
Originally when discussing this C-backend with @luinardi, I believe the idea was for it to mostly be a smaller edge-case kind of thing. Essentially just a small, fast backend you can use if it fits your application. So I'm not sure how much effort we're willing to put into this? Of course we should add things like client-server and CSV-logging, but perhaps discuss the more advanced additions like GP model and prior injection etc.
That being said, some of the extra changes you mentioned should be pefectly feasible without too much work. Resuming optimization, batch BO, and extra acquisition functions should all be relatively simple additions. When it comes to prior injection and constrained BO, I don't know these concepts in enough detail (yet) to say how difficult they are to add.
A GP model might be feasible for me to add. I'm currently reading up on GPs anyway, so if I have the time I might just implement it in C.
All in all I definitely agree that we start with client-server, CSV-logging, and the acquisition-optimization.
Good to know, I left those as my impressions and overall thoughts, even for future reference in case we want to expand this in the future. Even then, some of these features (like GPs and prior injection) we may want to leave for really long down the line. For now, though, I'm fully on board with having this as an edge case for specific scenarios. I'm not sure how much effort we should/want to to put into this, but for a minimal version, I think we just need the acquisition optimization and CSV results. To be honest, for a truly minimal backend, we can just have the CSV results and use the same acquisition function optimization as the Python implementation.
The rest I'd say are all nice features, but not requirements.
Cheers!
Note that this C backend is currently not really adapted for HyperMapper and is only plugged in through a very crude wrapper. The C backend is also currently very limited in its functionality. More functionality can be added later. Thus, work to be done includes tweaking the backend + wrapper to fit better into the rest of HyperMapper, and add functionality present in the other optimizer implementations.