So I’ve prepared 4 examples to show. 1 non-adaptive case and 3 adaptive cases. First here is the density plot for the 4 cases (the non-adaptive is in the top left corner)

img <- readPNG("Density plots.png")
grid.raster(img)

You can see that the non-adaptive density plot has a slight mini peak to the left as I mentioned.

Now I will plot some item and player plots for each case.

Non Adaptive

Item-plots

The first row of item plots are the item urn sizes over time for 4 items (172, 363, 849 and 1083). The second row of item plots are the item_urn_pv / item_urn_size over time

img <- readPNG("setting1_item.png")
grid.raster(img)

Player plots

The first row of player plots are the item urn sizes over time for 4 players (2425, 8283, 26918 and 36618). The second row of player plots are the player_urn_pv / player_urn_size over time. The third row is the expected probability of a correct response over time.

img <- readPNG("setting1_player.png")
grid.raster(img)

Adaptive with start size of 40, increasing urns by 1 after 10 counts and decreasing player urn size by 20 after 30 days of not playing

Item-plots

img <- readPNG("setting2_item.png")
grid.raster(img)

Player plots

img <- readPNG("setting2_player.png")
grid.raster(img)

Adaptive with start size of 20, increasing urns by 1 after 3 counts and decreasing player urn size by 10 after 30 days of not playing

Item-plots

img <- readPNG("setting3_item.png")
grid.raster(img)

Player plots

img <- readPNG("setting3_player.png")
grid.raster(img)

Adaptive with a non-linear function

Start size was 40 and the size increased by 1 after 3 counts. The I have 2 variables that control the speed at which the rate of urn size increase. As you can see from the plots the urn size curves slowly flatten out.

Additionally, In this non-linear function I decreae player urns by 20 when they dont player for 30 days, and then for each extra day I decrease the urn by addional 1.2. So if a player doesnt play for 35 days then I decrease their urn by 26.

Item-plots

img <- readPNG("setting4_item.png")
grid.raster(img)

Player plots

img <- readPNG("setting4_player.png")
grid.raster(img)

The RMSEs

rmses = read.csv("Rules Data")
rmses[1:4, 1] <- c("Non-adaptive", "Linear-1", "Linear-1", "Non-Linear")
rmses[, c(1,20)]
##              X      rmse
## 1 Non-adaptive 0.1912064
## 2     Linear-1 0.1306888
## 3     Linear-1 0.1429879
## 4   Non-Linear 0.1218089

We can see that in this case the non-linear function actually produced the best RMSE and quite low one compared to the non-adaptive function. This is promising as this is just a random setting I picked.

I think the plan for me now is to play around with the linear function and see what is the best setting for that and then move on to the non-linear function.