Stat405                Problem solving


                                Hadley Wickham
Wednesday, 16 September 2009
Homework
                   Great improvement. A few tips:
                   Headings should be in sentence case, and be ...
Feedback
                   Speed seems about right.
                   Frustration is a natural part of the learning
    ...
1. Recap of problem
               2. Task
               3. Basic strategy
               4. Turning ideas into code




...
Slots
                   Casino claims that slot machines have
                   prize payout of 92%. Is this claim true?...
Bootstrapping
                   Slot machine is basically a random
                   number generator - three numbers
  ...
DD                DD   DD   800
                                               windows <- c("DD", "C", "C")
              ...
Your turn


                   There are three basic cases of prizes.
                   What are they? Take 3 minutes to
...
Cases

                   1. All windows have same value
                   2. A bar (B, BB, or BBB) in every window
     ...
Same values




Wednesday, 16 September 2009
Same values

                   1. Determine that all windows are the
                      same. How?




Wednesday, 16 S...
Same values

                   1. Determine that all windows are the
                      same. How?
                   ...
Same values

                   1. Determine that all windows are the
                      same. How?
                   ...
# Same value
         same <- length(unique(windows)) == 1

         # OR
         same <- windows[1] == windows[2] &&
   ...
If
                   if (cond) expression
                   Cond should be a logical vector of length 1
                ...
if (TRUE) {
       # This will be run
     }

     if (FALSE) {
       # This won't be run
     } else {
       # This wil...
if (TRUE) {
       # This will be run
     }

     if (FALSE) {
       # This won't be run
     } else {
       # This wil...
x <- 5
     if (x < 5) print("x < 5")
     if (x == 5) print("x == 5")

     x <- 1:5
     if (x < 3) print("What should h...
if (window[1] == "DD") {
       prize <- 800
     } else if (windows[1] == "7") {
       prize <- 80
     } else if (windo...
Your turn


                   Complete the previous code so that if all
                   the values in win are the same...
All bars

                   How can we determine if all of the
                   windows are B, BB, or BBB?
            ...
All bars

                   How can we determine if all of the
                   windows are B, BB, or BBB?
            ...
windows[1] %in% c("B", "BB", "BBB")
     windows %in% c("B", "BB", "BBB")

     allbars <- windows %in% c("B", "BB", "BBB"...
Your turn

                   Complete the previous code so that the
                   correct value of prize is set if a...
payoffs <- c("DD" = 800, "7" = 80, "BBB" = 40,
       "BB" = 25, "B" = 10, "C" = 10, "0" = 0)

     same <- length(unique(...
Cherries

                   Need numbers of cherries, and numbers
                   of diamonds (hint: use sum)
        ...
cherries <- sum(windows == "C")
         diamonds <- sum(windows == "DD")

         c(0, 2, 5)[cherries + 1] *
           ...
payoffs <- c("DD" = 800, "7" = 80, "BBB" = 40,
       "BB" = 25, "B" = 10, "C" = 10, "0" = 0)

     same <- length(unique(...
Writing a function

                   Now we need to wrap up this code in to a
                   reusable fashion. We ne...
Basic structure
                   • Name
                   • Input arguments
                        • Names/positions
 ...
calculate_prize <- function(windows) {
       payoffs <- c("DD" = 800, "7" = 80, "BBB" = 40,
         "BB" = 25, "B" = 10,...
Homework

                   What did we miss? Find out the problem
                   with our scoring function and fix it...
Upcoming SlideShare
Loading in...5
×

07 Problem Solving

402

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
402
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

07 Problem Solving

  1. 1. Stat405 Problem solving Hadley Wickham Wednesday, 16 September 2009
  2. 2. Homework Great improvement. A few tips: Headings should be in sentence case, and be a single sentence summary of the section. Include ggsave calls in your code. Don’t use " and " to get “ and ”. Use ` ` and ' '. (Also, I think I’ve been grading quite hard. Think of a 5 as an A+, a 4 as an A, and a 3 as an A-/B+) Wednesday, 16 September 2009
  3. 3. Feedback Speed seems about right. Frustration is a natural part of the learning experience. You will get better! In particularly, it will get easier to find interesting plots (helps to start homework early!) Split homework help session? Also, feel free to email me to set up time to talk. Wednesday, 16 September 2009
  4. 4. 1. Recap of problem 2. Task 3. Basic strategy 4. Turning ideas into code Wednesday, 16 September 2009
  5. 5. Slots Casino claims that slot machines have prize payout of 92%. Is this claim true? mean(slots$payoff) t.test(slots$prize, mu = 0.92) qplot(prize, data = slots, binwidth = 1) Can we do better? Wednesday, 16 September 2009
  6. 6. Bootstrapping Slot machine is basically a random number generator - three numbers between 1 and 7. We can generate a new number by sampling from the data. Doing that lots of times, and calculating the payoff should give us a better idea of the payoff. But first we need some way to calculate the prize from the windows Wednesday, 16 September 2009
  7. 7. DD DD DD 800 windows <- c("DD", "C", "C") 7 7 7 80 # How can we calculate the BBB BBB BBB 40 # payoff? B B B 10 C C C 10 Any bar Any bar Any bar 5 C C * 5 C * C 5 C * * 2 * C * 2 DD doubles any winning combination. Two DD * * C 2 quadruples. Wednesday, 16 September 2009
  8. 8. Your turn There are three basic cases of prizes. What are they? Take 3 minutes to brainstorm with a partner. Wednesday, 16 September 2009
  9. 9. Cases 1. All windows have same value 2. A bar (B, BB, or BBB) in every window 3. Cherries and diamonds Wednesday, 16 September 2009
  10. 10. Same values Wednesday, 16 September 2009
  11. 11. Same values 1. Determine that all windows are the same. How? Wednesday, 16 September 2009
  12. 12. Same values 1. Determine that all windows are the same. How? 2. Given single window, look up prize value. How? Wednesday, 16 September 2009
  13. 13. Same values 1. Determine that all windows are the same. How? 2. Given single window, look up prize value. How? With a partner, brainstorm for 2 minutes on how to solve one of these problems Wednesday, 16 September 2009
  14. 14. # Same value same <- length(unique(windows)) == 1 # OR same <- windows[1] == windows[2] && windows[2] == windows[3] if (same) { # Lookup value } Wednesday, 16 September 2009
  15. 15. If if (cond) expression Cond should be a logical vector of length 1 Use && and || to combine sub-conditions Not & and | - these work on vectors && and || are “short-circuiting”: they do the minimum amount of work Wednesday, 16 September 2009
  16. 16. if (TRUE) { # This will be run } if (FALSE) { # This won't be run } else { # This will be } # Single line form: (not recommended) if (TRUE) print("True!) if (FALSE) print("True!) Wednesday, 16 September 2009
  17. 17. if (TRUE) { # This will be run } if (FALSE) { # This won't be run } else { # This will be } Note indenting. Very important! # Single line form: (not recommended) if (TRUE) print("True!) if (FALSE) print("True!) Wednesday, 16 September 2009
  18. 18. x <- 5 if (x < 5) print("x < 5") if (x == 5) print("x == 5") x <- 1:5 if (x < 3) print("What should happen here?") if (x[1] < x[2]) print("x1 < x2") if (x[1] < x[2] && x[2] < x[3]) print("Asc") if (x[1] < x[2] || x[2] < x[3]) print("Asc") Wednesday, 16 September 2009
  19. 19. if (window[1] == "DD") { prize <- 800 } else if (windows[1] == "7") { prize <- 80 } else if (windows[1] == "BBB") ... # Or use subsetting c("DD" = 800, "7" = 80, "BBB" = 40) c("DD" = 800, "7" = 80, "BBB" = 40)["BBB"] c("DD" = 800, "7" = 80, "BBB" = 40)["0"] c("DD" = 800, "7" = 80, "BBB" = 40)[window[1]] Wednesday, 16 September 2009
  20. 20. Your turn Complete the previous code so that if all the values in win are the same, then prize variable will be set to the correct amount. Wednesday, 16 September 2009
  21. 21. All bars How can we determine if all of the windows are B, BB, or BBB? (windows[1] == "B" || windows[1] == "BB" || windows[1] === "BBB") && ... ? Wednesday, 16 September 2009
  22. 22. All bars How can we determine if all of the windows are B, BB, or BBB? (windows[1] == "B" || windows[1] == "BB" || windows[1] === "BBB") && ... ? Take 2 minutes to brainstorm possible solutions Wednesday, 16 September 2009
  23. 23. windows[1] %in% c("B", "BB", "BBB") windows %in% c("B", "BB", "BBB") allbars <- windows %in% c("B", "BB", "BBB") allbars[1] & allbars[2] & allbars[3] all(allbars) # See also ?any for the complement Wednesday, 16 September 2009
  24. 24. Your turn Complete the previous code so that the correct value of prize is set if all the windows are the same, or they are all bars Wednesday, 16 September 2009
  25. 25. payoffs <- c("DD" = 800, "7" = 80, "BBB" = 40, "BB" = 25, "B" = 10, "C" = 10, "0" = 0) same <- length(unique(windows)) == 1 allbars <- all(windows %in% c("B", "BB", "BBB")) if (same) { prize <- payoffs[windows[1]] } else if (allbars) { prize <- 5 } Wednesday, 16 September 2009
  26. 26. Cherries Need numbers of cherries, and numbers of diamonds (hint: use sum) Then need to look up values (like for the first case) and multiply together Wednesday, 16 September 2009
  27. 27. cherries <- sum(windows == "C") diamonds <- sum(windows == "DD") c(0, 2, 5)[cherries + 1] * c(1, 2, 4)[diamonds + 1] Wednesday, 16 September 2009
  28. 28. payoffs <- c("DD" = 800, "7" = 80, "BBB" = 40, "BB" = 25, "B" = 10, "C" = 10, "0" = 0) same <- length(unique(windows)) == 1 allbars <- all(windows %in% c("B", "BB", "BBB")) if (same) { prize <- payoffs[windows[1]] } else if (allbars) { prize <- 5 } else { cherries <- sum(windows == "C") diamonds <- sum(windows == "DD") prize <- c(0, 2, 5)[cherries + 1] * c(1, 2, 4)[diamonds + 1] } Wednesday, 16 September 2009
  29. 29. Writing a function Now we need to wrap up this code in to a reusable fashion. We need a function Have used functions a lot, and this will be our first time writing one Wednesday, 16 September 2009
  30. 30. Basic structure • Name • Input arguments • Names/positions • Defaults • Body • Output value Wednesday, 16 September 2009
  31. 31. calculate_prize <- function(windows) { payoffs <- c("DD" = 800, "7" = 80, "BBB" = 40, "BB" = 25, "B" = 10, "C" = 10, "0" = 0) same <- length(unique(windows)) == 1 allbars <- all(windows %in% c("B", "BB", "BBB")) if (same) { prize <- payoffs[windows[1]] } else if (allbars) { prize <- 5 } else { cherries <- sum(windows == "C") diamonds <- sum(windows == "DD") prize <- c(0, 2, 5)[cherries + 1] * c(1, 2, 4)[diamonds + 1] } prize } Wednesday, 16 September 2009
  32. 32. Homework What did we miss? Find out the problem with our scoring function and fix it. Also, some readings related to group work. Wednesday, 16 September 2009
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×