Skip to content
Snippets Groups Projects
Commit 9827900d authored by Paul A. Rubin's avatar Paul A. Rubin
Browse files

Improved the maxQuality bound.

parent 7d3a901d
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ package xmtrclusters; ...@@ -3,6 +3,7 @@ package xmtrclusters;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
...@@ -65,21 +66,20 @@ public final class Problem { ...@@ -65,21 +66,20 @@ public final class Problem {
} }
assignedUsers.get(best[u]).add(u); assignedUsers.get(best[u]).add(u);
} }
// The maximum quality for each user occurs when the worst transmitter for // The maximum quality for each user occurs when the C best transmitters
// that user is the only transmitter not in the user's cluster. // for that user form a cluster, where C is the upper limit on cluster
// size.
maxQuality = new double[nUsers]; maxQuality = new double[nUsers];
for (int u = 0; u < nUsers; u++) { for (int u = 0; u < nUsers; u++) {
double worst = Double.MAX_VALUE; ArrayList<Double> w = new ArrayList<>();
int w = -1;
for (int t = 0; t < nTrans; t++) { for (int t = 0; t < nTrans; t++) {
if (weight[t][u] < worst) { w.add(weight[t][u]);
worst = weight[t][u];
w = t;
}
} }
HashSet<Integer> c = new HashSet<>(allTransmitters); maxQuality[u] =
c.remove(w); w.stream().sorted(Comparator.reverseOrder()).limit(maxSize)
maxQuality[u] = userQuality(u, c); .mapToDouble(d -> d).sum()
/ w.stream().sorted(Comparator.reverseOrder()).skip(maxSize)
.mapToDouble(d -> d).sum();
} }
} }
......
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