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

feat: add new reconfiguration process #1352

Open
wants to merge 22 commits into
base: main
Choose a base branch
from

Conversation

zepfred
Copy link
Contributor

@zepfred zepfred commented Jan 24, 2025

This pull request introduces a restart mechanism for the LS phase and a reconfiguration process.

  1. There is one restart mechanism based on the unimproved move count of the best solution.
  2. The restart logic employs a technique known as geometric restart, which increases the related metric exponentially.
  3. The reconfiguration process is executed by the LS every time a restart is triggered. Currently, the process simply restores the last best solution and "restarts" the search.

@zepfred zepfred changed the title feat: add Local Search reconfiguration process feat: add new reconfiguration process Jan 24, 2025
@zepfred zepfred requested a review from triceo January 24, 2025 17:54
@zepfred zepfred marked this pull request as ready for review January 24, 2025 17:54
Copy link
Contributor

@triceo triceo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First round of review is in.

My most general comment is: we need a different name for "reconfiguration". I know that the papers use this word, but we cannot. We already have "configuration", and using "reconfiguration" would be confusing - the "configuration" in "reconfiguration" has nothing to do with solver configuration.

Reheating? Restart? Refresh? Reboot? Let's discuss.

@triceo
Copy link
Contributor

triceo commented Jan 27, 2025

Another concern: we only support LA (and DLAS). But shouldn't we support simulated annealing too? In SA, the process is actually called reheating, and is well researched as far as I know.

For the record: I don't much care for SA, because it is hard to configure and therefore not much useful. But if we don't support reheating the SA, it should be a conscious decision, and not just something we forgot to do.

Copy link
Contributor

@triceo triceo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Next round of comments.

protected final Clock clock;
protected final Logger logger = LoggerFactory.getLogger(AbstractGeometricRestartStrategy.class);
protected final double scalingFactor;
private static final long GRACE_PERIOD_MILLIS = 30_000; // Same value as DiminishedReturnsTermination
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Questionable. If the diminished termination is enabled, don't we want the solver to be able to restart before the termination triggers? Then arguably this should be less than whatever the termination is configured to be. But I'm not sure if we even want that.

Should we detect the termination in the solver config? Should we depend on whatever values the user has configured there? I'm not sure either.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand your viewpoint and struggled to select an appropriate default value. That's why I opted for the same value as the diminished termination.

However, I believe we should not rely on that termination at all. This should stand as an independent value.

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

Successfully merging this pull request may close these issues.

2 participants