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

Introduce lazy greedy algorithm to _solve_hssp #5285

Closed
Alnusjaponica opened this issue Feb 29, 2024 · 3 comments
Closed

Introduce lazy greedy algorithm to _solve_hssp #5285

Alnusjaponica opened this issue Feb 29, 2024 · 3 comments
Labels
code-fix Change that does not change the behavior, such as code refactoring. enhancement Change that does not break compatibility and not affect public interfaces, but improves performance. needs-discussion Issue/PR which needs discussion.

Comments

@Alnusjaponica
Copy link
Collaborator

Alnusjaponica commented Feb 29, 2024

Motivation

Practically speed-up _solve_hssp() using lazy greedy algorithm.

Description

The current implementation of _solve_hssp() relies on the greedy algorithm for submodular maximization problems with a cardinality constraint. the greedy algorithm guarantees the best approximation ratio of $1-1/e$ (refer to https://doi.org/10.1007/BFb0121195) for monotone cases and obtains practically good solution for non-monotone cases.

To further enhance performance, I propose introducing the lazy greedy algorithm (see https://doi.org/10.1007/BFb0006528) to the hypervolume subset selection problems. This extension allows the algorithm to strategically delay oracle calls until necessary, leveraging the submodular property for practical speed improvements over the naive greedy algorithm. Notably, the number of oracle calls is maintained at most equivalent to the original greedy algorithm.

This straightforward combination of contribution calculation and lazy strategy has been experimentally validated in https://doi.org/10.1109/CEC48606.2020.9185878.

Alternatives (optional)

We need to examine benchmark results to judge whether the lazy strategy really accelerates _solve_hssp(). This is because lazy greedy has the overhead of heap operations and can be slow depending on the input.

Additional context (optional)

No response

@Alnusjaponica Alnusjaponica added feature Change that does not break compatibility, but affects the public interfaces. needs-discussion Issue/PR which needs discussion. code-fix Change that does not change the behavior, such as code refactoring. enhancement Change that does not break compatibility and not affect public interfaces, but improves performance. and removed feature Change that does not break compatibility, but affects the public interfaces. labels Feb 29, 2024
@abant07
Copy link

abant07 commented Feb 29, 2024

Hey would I be able to work on this. Just out of curiosity however, would this deal with backend more?

Also, is there anything I need to know when reproducing the environment other than just following the ReadME?

Thanks

@Alnusjaponica
Copy link
Collaborator Author

Alnusjaponica commented Feb 29, 2024

Thank you very much for expressing your interest in contributing to our repository.

To get started, I recommend reviewing CONTRIBUTING.md, which outlines guidelines and instructions for initiating contributions.

Regarding this issue, it involves understanding the algorithm's functionality and comparing benchmark results before and after. We are going to decide whether to use a lazy greedy algorithm based on these comparisons. Consequently, it might seem overwhelming for those who haven't contributed to our repositories before, unless this particular issue aligns well with your preferences.

If you're enthusiastic about contributing, we have several issues tagged with contribution-welcome. These are specifically designed for newcomers, offering a smooth entry into the project. Feel free to choose any of these issues.

@abant07
Copy link

abant07 commented Mar 1, 2024

Ok cool, I will try and look for a contribution-welcome tag issue. But if nobody takes up this issue after I finish with the welcome issue, then I will give this a shot

Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
code-fix Change that does not change the behavior, such as code refactoring. enhancement Change that does not break compatibility and not affect public interfaces, but improves performance. needs-discussion Issue/PR which needs discussion.
Projects
None yet
Development

No branches or pull requests

3 participants