Skip to content
Snippets Groups Projects
Commit 2c91a4bb authored by Dennis Weiss's avatar Dennis Weiss
Browse files

Using heuristic to decide branching order

parent cb0299b5
Branches all-with-parameter
No related tags found
No related merge requests found
...@@ -267,10 +267,10 @@ public class Main { ...@@ -267,10 +267,10 @@ public class Main {
return weightedClusterEditingBinarySearch(graph, k + 1, hi); return weightedClusterEditingBinarySearch(graph, k + 1, hi);
} }
private static ResultEdgeExistsWithSolutionSize getUpperBound(Graph graph, int iter, boolean simulatedAnnealing) { private static ResultEdgeExistsWithSolutionSize getUpperBound(Graph graph, int greedyIterations, int simulatedAnnealingIterations) {
ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSize = new ResultEdgeExistsWithSolutionSize(null, Integer.MAX_VALUE); ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSize = new ResultEdgeExistsWithSolutionSize(null, Integer.MAX_VALUE);
for (int i = 0; i < iter; i++) { for (int i = 0; i < greedyIterations; i++) {
boolean[][] heuristicResultEdgeExists = Heuristics.getGreedyHeuristicNeighborhood(graph); boolean[][] heuristicResultEdgeExists = Heuristics.getGreedyHeuristicNeighborhood(graph);
int heuristicCost = Utils.getCostToChange(graph, heuristicResultEdgeExists); int heuristicCost = Utils.getCostToChange(graph, heuristicResultEdgeExists);
if (heuristicCost < resultEdgeExistsWithSolutionSize.getSolutionSize()) { if (heuristicCost < resultEdgeExistsWithSolutionSize.getSolutionSize()) {
...@@ -279,9 +279,9 @@ public class Main { ...@@ -279,9 +279,9 @@ public class Main {
} }
} }
if (simulatedAnnealing) { if (simulatedAnnealingIterations > 0) {
SimulatedAnnealing.performSimulatedAnnealing( SimulatedAnnealing.performSimulatedAnnealing(
graph, Utils.copy(resultEdgeExistsWithSolutionSize.getResultEdgeExists(), graph.getNumberOfVertices()), 20_000, resultEdgeExistsWithSolutionSize graph, Utils.copy(resultEdgeExistsWithSolutionSize.getResultEdgeExists(), graph.getNumberOfVertices()), simulatedAnnealingIterations, resultEdgeExistsWithSolutionSize
); );
} }
...@@ -289,7 +289,7 @@ public class Main { ...@@ -289,7 +289,7 @@ public class Main {
} }
private static ResultEdgeExistsWithSolutionSize weightedClusterEditingOptim(Graph graph) { private static ResultEdgeExistsWithSolutionSize weightedClusterEditingOptim(Graph graph) {
ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSizeOfUpperBound = getUpperBound(graph, 32, true); ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSizeOfUpperBound = getUpperBound(graph, 32, 20_000);
return weightedClusterEditingOptim( return weightedClusterEditingOptim(
graph, 0, resultEdgeExistsWithSolutionSizeOfUpperBound.getResultEdgeExists(), graph, 0, resultEdgeExistsWithSolutionSizeOfUpperBound.getResultEdgeExists(),
...@@ -362,14 +362,14 @@ public class Main { ...@@ -362,14 +362,14 @@ public class Main {
P3 p3 = getBiggestWeightP3(graph, p3List); P3 p3 = getBiggestWeightP3(graph, p3List);
MergeVerticesInfo mergeVerticesInfo = graph.mergeVertices(p3.getU(), p3.getV()); MergeVerticesInfo mergeVerticesInfo = graph.mergeVertices(p3.getU(), p3.getV());
ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSizeUpperBoundAfterMerge = getUpperBound(graph, 16, false); ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSizeUpperBoundAfterMerge = getUpperBound(graph, 8, 200);
graph.revertMergeVertices(mergeVerticesInfo); graph.revertMergeVertices(mergeVerticesInfo);
int costToFlip = graph.flipEdgeAndSetForbidden(p3.getU(), p3.getV()); int costToFlip = graph.flipEdgeAndSetForbidden(p3.getU(), p3.getV());
ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionsSizeUpperBoundAfterDeletion = getUpperBound(graph, 16, false); ResultEdgeExistsWithSolutionSize resultEdgeExistsWithSolutionSizeUpperBoundAfterDeletion = getUpperBound(graph, 8, 200);
graph.flipBackForbiddenEdge(p3.getU(), p3.getV(), costToFlip); graph.flipBackForbiddenEdge(p3.getU(), p3.getV(), costToFlip);
if (resultEdgeExistsWithSolutionsSizeUpperBoundAfterDeletion.getSolutionSize() < resultEdgeExistsWithSolutionSizeUpperBoundAfterMerge.getSolutionSize()) { if (resultEdgeExistsWithSolutionSizeUpperBoundAfterDeletion.getSolutionSize() + mergeVerticesInfo.getCost() < resultEdgeExistsWithSolutionSizeUpperBoundAfterMerge.getSolutionSize() - costToFlip) {
costToFlip = graph.flipEdgeAndSetForbidden(p3.getU(), p3.getV()); costToFlip = graph.flipEdgeAndSetForbidden(p3.getU(), p3.getV());
ResultEdgeExistsWithSolutionSize solutionAfterDeletion = weightedClusterEditingOptim( ResultEdgeExistsWithSolutionSize solutionAfterDeletion = weightedClusterEditingOptim(
graph, costToEdit - costToFlip, upperBoundSolutionEdgeExists, upperBound graph, costToEdit - costToFlip, upperBoundSolutionEdgeExists, upperBound
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment