Importing the dataset

dataset <-  read.csv('G:\\RStudio\\udemy\\ml\\Machine Learning AZ\\Part 6 - Reinforcement Learning\\Section 32 - Upper Confidence Bound (UCB)\\UCB\\Ads_CTR_Optimisation.csv')
head(dataset)

Implementing UCB algorithm

There is package to use UCB. So we will create the algorithm from scatch

# initialize variables we will be using
N <-  10000
d <-  10
ads_selected <-  integer(0)
numbers_of_selections <-  integer(d)
sums_of_rewards <-  integer(d)
total_reward <-  0
for (n in 1:N) {
  
  ad <-  0
  max_upper_bound <-  0
    for ( i in 1 : d) { 
      # dont use this if we are just starting out
      if (numbers_of_selections[i] > 0){
    average_reward <-  sums_of_rewards[i] / numbers_of_selections[i]
    delta_i <-  sqrt(3/2 * log(n) / numbers_of_selections[i])
    upper_bound <-  average_reward + delta_i
      } else {
        upper_bound = 1e400
      }
    if (upper_bound > max_upper_bound) {
      max_upper_bound <-  upper_bound
      ad <-  i
    }
  }
  ads_selected <-  append(ads_selected, ad)
  numbers_of_selections[ad] <- numbers_of_selections[ad] + 1
  reward <-  dataset[n,ad]
  sums_of_rewards[ad] <-  sums_of_rewards[ad] + reward
  total_reward <-  total_reward + reward
}

Visualising the resuls by using a histogram

hist(ads_selected, 
     col = "Blue",
     main = "Histogram of Ad Selections",
     xlab = "Ads",
     ylab = "Number of times each ad was selected")

LS0tDQp0aXRsZTogIk1MUiBzZWN0aW9uIDI1IFVwcGVyIENvbmZpZGVuY2UgQm91bmQgIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KSW1wb3J0aW5nIHRoZSBkYXRhc2V0DQpgYGB7cn0NCmRhdGFzZXQgPC0gIHJlYWQuY3N2KCdHOlxcUlN0dWRpb1xcdWRlbXlcXG1sXFxNYWNoaW5lIExlYXJuaW5nIEFaXFxQYXJ0IDYgLSBSZWluZm9yY2VtZW50IExlYXJuaW5nXFxTZWN0aW9uIDMyIC0gVXBwZXIgQ29uZmlkZW5jZSBCb3VuZCAoVUNCKVxcVUNCXFxBZHNfQ1RSX09wdGltaXNhdGlvbi5jc3YnKQ0KaGVhZChkYXRhc2V0KQ0KYGBgDQoNCiMgSW1wbGVtZW50aW5nIFVDQiBhbGdvcml0aG0NClRoZXJlIGlzIHBhY2thZ2UgdG8gdXNlIFVDQi4gU28gd2Ugd2lsbCBjcmVhdGUgdGhlIGFsZ29yaXRobSBmcm9tIHNjYXRjaA0KDQpgYGB7cn0NCiMgaW5pdGlhbGl6ZSB2YXJpYWJsZXMgd2Ugd2lsbCBiZSB1c2luZw0KTiA8LSAgMTAwMDANCmQgPC0gIDEwDQphZHNfc2VsZWN0ZWQgPC0gIGludGVnZXIoMCkNCm51bWJlcnNfb2Zfc2VsZWN0aW9ucyA8LSAgaW50ZWdlcihkKQ0Kc3Vtc19vZl9yZXdhcmRzIDwtICBpbnRlZ2VyKGQpDQp0b3RhbF9yZXdhcmQgPC0gIDANCg0KZm9yIChuIGluIDE6Tikgew0KICANCiAgYWQgPC0gIDANCiAgbWF4X3VwcGVyX2JvdW5kIDwtICAwDQoNCiAgICBmb3IgKCBpIGluIDEgOiBkKSB7IA0KICAgICAgIyBkb250IHVzZSB0aGlzIGlmIHdlIGFyZSBqdXN0IHN0YXJ0aW5nIG91dA0KICAgICAgaWYgKG51bWJlcnNfb2Zfc2VsZWN0aW9uc1tpXSA+IDApew0KICAgIGF2ZXJhZ2VfcmV3YXJkIDwtICBzdW1zX29mX3Jld2FyZHNbaV0gLyBudW1iZXJzX29mX3NlbGVjdGlvbnNbaV0NCiAgICBkZWx0YV9pIDwtICBzcXJ0KDMvMiAqIGxvZyhuKSAvIG51bWJlcnNfb2Zfc2VsZWN0aW9uc1tpXSkNCiAgICB1cHBlcl9ib3VuZCA8LSAgYXZlcmFnZV9yZXdhcmQgKyBkZWx0YV9pDQogICAgICB9IGVsc2Ugew0KICAgICAgICB1cHBlcl9ib3VuZCA9IDFlNDAwDQogICAgICB9DQogICAgaWYgKHVwcGVyX2JvdW5kID4gbWF4X3VwcGVyX2JvdW5kKSB7DQogICAgICBtYXhfdXBwZXJfYm91bmQgPC0gIHVwcGVyX2JvdW5kDQogICAgICBhZCA8LSAgaQ0KICAgIH0NCiAgfQ0KICBhZHNfc2VsZWN0ZWQgPC0gIGFwcGVuZChhZHNfc2VsZWN0ZWQsIGFkKQ0KICBudW1iZXJzX29mX3NlbGVjdGlvbnNbYWRdIDwtIG51bWJlcnNfb2Zfc2VsZWN0aW9uc1thZF0gKyAxDQogIHJld2FyZCA8LSAgZGF0YXNldFtuLGFkXQ0KICBzdW1zX29mX3Jld2FyZHNbYWRdIDwtICBzdW1zX29mX3Jld2FyZHNbYWRdICsgcmV3YXJkDQogIHRvdGFsX3Jld2FyZCA8LSAgdG90YWxfcmV3YXJkICsgcmV3YXJkDQp9DQoNCmBgYA0KDQpWaXN1YWxpc2luZyB0aGUgcmVzdWxzIGJ5IHVzaW5nIGEgaGlzdG9ncmFtDQoNCmBgYHtyfQ0KaGlzdChhZHNfc2VsZWN0ZWQsIA0KICAgICBjb2wgPSAiQmx1ZSIsDQogICAgIG1haW4gPSAiSGlzdG9ncmFtIG9mIEFkIFNlbGVjdGlvbnMiLA0KICAgICB4bGFiID0gIkFkcyIsDQogICAgIHlsYWIgPSAiTnVtYmVyIG9mIHRpbWVzIGVhY2ggYWQgd2FzIHNlbGVjdGVkIikNCmBgYA0KDQo=