[This article was first published on Econometrics by Simulation, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I would like to code up a simple method of minimizing the number of coins required to give change. Then I would like see what coins are most likely to be called into usage if change is required from a uniform draw between 1 cent and 499 cents.
# Define denominations to search throughden <- c(200,100,25,10,5,1) # I use the 200 and 100 for Canadian coins the Loonies and Twoonies. # The changer function will do what we want.# It is based on the concept that if we exhaust our biggest # currencies first then we will minize coin requirements.# This might not be the case if we had unusual coinage, # for instance a 30 cent peice would give 2×30 + 1xto + 1×5 = 75 cents# while 3×25 would be the preferred route.# However, since coinage tends to be divisible, in any example I can# think of using largest coins first always minimizes coin requirements.changer <- function(value, den) { # value is the change that must be made # den is the denominations available remainder <- value # Remainder counts how much change is still required to be made for count <- den # counts the required instances of each denomination names(count) <- den # loops through each of the denominations and removes the required # coinage for (i in 1:length(den)) { count[i] <- floor(remainder/den[i]) remainder <- remainder–count[i]*den[i] } count} changer(341,den)# 200 100 25 10 5 1 # 1 1 1 1 1 1 # Now let’s see how many coins are required to make change for# all possible change between 1 cent and $4.99 cents.curcount <- NULLfor (i in 1:499) curcount <- rbind(curcount, changer(i,den)) (meancur <- apply(curcount, 2, mean))# 200 100 25 10 5 1 # 0.8016032 0.4008016 1.5030060 0.8016032 0.4008016 2.0040080 # We can see that the average transaction required .8 2 dollar coins,# .4 dollars, 1.5 quarters, .8 dimes, .4 nickels, and 2 pennies (ratiocur <- meancur/sum(meancur))# 200 100 25 10 5 1 # 0.13559322 0.06779661 0.25423729 0.13559322 0.06779661 0.33898305# Pennies had the largest ratio of 34% required while 25% of quarters# were required. den <- c(25,10,5,1)curcount <- NULLfor (i in 1:99) curcount <- rbind(curcount, changer(i,den)) (meancur <- apply(curcount, 2, mean))# 25 10 5 1 # 1.5151515 0.8080808 0.4040404 2.0202020 require(plotrix)pie3D(meancur, explode=0.3,radius=2.9, labels=c(“quarters”, “dimes”, “nickles”, “pennies”), main=“Currency Ratios Required for Change”) (ratiocur <- meancur/sum(meancur))# 25 10 5 1 # 0.31914894 0.17021277 0.08510638 0.42553191# Once again pennies have the highest requirement at 42% of transactions# while quarters are next with 32%. Nickles are the least required with# only 8.5% of the ratio of required coins. # We might also want to know for what percentage of transactions certain# coins are required. We can do this one mostly in our head. Pennies will# be required whenever change is not divisible by 5, thus ~4/5 times.# Quarters will be required whenever the change is greater than 24 cents,# thus ~75/99=757. Dimes will be required when whatever remains # after dividing by quarters is greater than 9 cents, thus ~15/25=60%.# Finally, nickles are required whenever whatever is left after quarters # and dimes is greater or equal to 5. 25 -> 1,2,3,4,x5,x6,x7,x8,x9,0,1,2,# 3,4,x5,x6,x7,x8,x9,0,1,2,3,4 so, ~10/25=40%. # Let’s check.apply(curcount>0, 2, mean)# 25 10 5 1 # 0.7575758 0.6060606 0.4040404 0.8080808 # Thus we can see that though nickles represent a small portion of the# optimal ratio of currency in circulation, the do represent a large# portion of the optimal change patterns required.
To leave a comment for the author, please follow the link and comment on their blog: Econometrics by Simulation.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.