【问题标题】:Gambling algorithm赌博算法
【发布时间】:2015-05-06 06:42:01
【问题描述】:

我很难弄清楚如何用 R 编写程序。 我想在红色上下注 1 美元,如果我赢了,我会得到 1 美元,然后再下注,如果我输了,我会加倍下注。该程序应该运行到我赢得 10 美元或赌注大于 100。 这是我的代码:

    W=0
    B=1

    for(i=sample(0:1,1)){
      B<-1
      W<-0
      while(W<10 & B<=100){
        if(i=1){
          W<-W+B 
          B<-B
        }else{
          B<-2*B
        }
        print(B)
      }
    }

i 决定我是输还是赢。我使用print(B) 来查看 if 程序的运行情况。此时它不是,B无论如何都等于1。

【问题讨论】:

  • 我也试过vec1=sample(0:1,50)并设置i=vec1。但几乎同样的事情也会发生。
  • 您的sample 需要在您的while() { ... } 中发生

标签: r gambling


【解决方案1】:

为了使这种赌博的后果更加明显,我们可以修改这个程序,添加变量来存储总赢/输和这个数字的动态。

W_dyn <- c()      # will store cumulative Win/Lose dynamics
W. <- 0           # total sum of Win/Lose        
step <- 0         # number of bet round - a cycle of bets till one of 
                  # conditions to stop happen:   W > 10 or B >= 100
while (abs(W.) < 1000)
{ B <- 1
  while (W < 10 & B <= 100)
  { i <- sample(0:1, 1)
    if (i == 1)
    { W <- W + B 
      B <- 1
    } else
    { W <- W - B
      B <- 2 * B
    } 
    print(B)
  }
  W. <- W. + W
  W <- 0
  step <- step + 1
  W_dyn[step] <- W.
  cat("we have", W., "after", step, "bet rounds\n")
}
# then we can visualize our way to wealth or poverty
plot(W_dyn, type = "l")

顺便说一句,在最大可能的条件下B &lt; Inf 这样的赌博从长远来看总是浪费金钱。

【讨论】:

    【解决方案2】:

    您的for 循环在这种情况下没有意义。您应该每次在while 循环中再采样一次。

      B = 1
      W = 0
      while(W<10 & B<=100){
        i=sample(0:1,1)
        if(i==1){
          W<-W+B 
          B<-B
        }else{
          B<-2*B
        }
        print(B)
      }
    

    此外,在您原来的 for 循环中,在循环开始之前,您需要在 sample(0:1,1) 之后的额外右括号 )。没有它,程序将无法按预期运行。

    另外,在描述逻辑相等时,您应该使用== 而不是=

    【讨论】:

    • 谢谢,编辑了原帖。由于某种原因,当我运行时,您提供的采样示例没有发生。 i 保持等于 1。或者如果我实际上写了if(i&lt;-0) 等。i 保持等于 0
    • = 登录i=1 应该是==,使得i==1
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2014-05-25
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多