for (int m = 0; m < 50; m++) {
bandit.add(bf.createBandit(totalItems, gen));
}
double[] prob = new double[totalItems];
Uniform u = new Uniform(gen);
for (int j = 0; j < totalItems; j++) {
prob[j] = u.nextDouble();
}
Arrays.sort(prob);
for (int j = 0; j < totalItems; j++) {
prob[j] = 1 - prob[j];
}
double cumulativeRegret = 0;
PrintWriter quality = new PrintWriter("quality.csv");
quality.printf("Trials,Precision,Regret,CumulativeRegret\n");
for (int i = 0; i < 1000; i++) {
double precision = 0;
double regret = 0;
for (int m = 0; m < 50; m++) {
List<Integer> page = bandit.get(m).rank(pageSize);
for (Integer item : page) {
if (item < keyItems) {
precision++;
}
}
for (int j = 0; j < pageSize; j++) {
int k = page.get(j);
regret += prob[j] - prob[k];
}
for (int j = 0; j < pageSize; j++) {
int k = page.get(j);
int reward = u.nextDouble() < prob[k] ? 1 : 0;
bandit.get(m).train(k, reward);
}
}
precision /= keyItems * 50.0;
regret /= 50;