# Thompson Sampling

# Importing the dataset
dataset <- read.csv('Ads_CTR_Optimisation.csv')

#Reading the results of the ads
str(dataset)
## 'data.frame':    10000 obs. of  10 variables:
##  $ Ad.1 : int  1 0 0 0 0 1 0 1 0 0 ...
##  $ Ad.2 : int  0 0 0 1 0 1 0 1 0 0 ...
##  $ Ad.3 : int  0 0 0 0 0 0 0 0 0 1 ...
##  $ Ad.4 : int  0 0 0 0 0 0 1 0 0 0 ...
##  $ Ad.5 : int  1 0 0 0 0 0 0 1 0 0 ...
##  $ Ad.6 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Ad.7 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ Ad.8 : int  0 0 0 1 0 0 0 0 0 0 ...
##  $ Ad.9 : int  1 1 0 0 0 0 0 0 0 0 ...
##  $ Ad.10: int  0 0 0 0 0 0 0 0 0 0 ...
#Implementing UCB
N <- 10000
d <- 10

numbers_of_rewards_1 <- integer(d)
numbers_of_rewards_0 <- integer(d)
sum_of_reward <- 0

ads_selected <- integer(0)


for(n in 1:N)
{
  max_random <- 0
  ad <- 0
  
  for(i in 1:d)
  {
    #Generate random draws
    random_beta <- rbeta(n=1 ,
                         shape1 = numbers_of_rewards_1[i] + 1,
                         shape2 = numbers_of_rewards_0[i] + 1)
    
    if(random_beta > max_random)
    {
      max_random <- random_beta
      ad <- i
    }
  }
  reward <- dataset[n,ad]
  if(reward == 1)
  {
    numbers_of_rewards_1[ad] <- numbers_of_rewards_1[ad] + 1
  }
  else
  {
    numbers_of_rewards_0[ad] <- numbers_of_rewards_0[ad] + 1
  }
  ads_selected <- append(ads_selected , ad)
  sum_of_reward <- sum_of_reward + dataset[n,ad]
}

print("Total Reward")
## [1] "Total Reward"
sum_of_reward
## [1] 2610
print("Individual ad performance")
## [1] "Individual ad performance"
numbers_of_rewards_1
##  [1]   11   12    1   10 2500    0    0   65   11    0
# Visualising the results
hist(ads_selected,
     col = 'blue',
     main = 'Histogram of ads selections',
     xlab = 'Ads',
     ylab = 'Number of times each ad was selected')