【问题标题】:Choose variable based on weighted probability根据加权概率选择变量
【发布时间】:2019-08-22 10:02:35
【问题描述】:

我有一个变量列表及其加权概率,如下所示:

Cloudy: 0.25
Sunny and warm: 0.25
Dry and cold: 0.125
Wet and cold: 0.25
Wet and warm: 0.375
Stormy/rainy: 0

在谷歌表格中,我使用以下函数根据累积概率选择变量

=INDEX('WeatherChoices'!A2:A7,COUNTIF('WeatherChoices'!D2:D7,"<="&RAND())+1)

其中 A2:A7 是天气类型列表,D2:D7 是累积概率。

我现在正在尝试将其复制为 google 脚本函数,但无法找到嵌套 IF 语句的替代方法。 IE。生成一个随机数,如果在两个累积值之间选择变量。

有没有更优雅的方式一步完成?

我查看了文档,但除了 .random() 函数之外找不到任何其他内容。

【问题讨论】:

  • random() 什么是最有效的,你考虑过switch 声明吗?它看起来比一堆if/else 语句更精简,可以接受吗?
  • 不,我以前没有遇到过。就可读性而言,它看起来确实简单得多。感谢您的推荐。今天下午我会去实施它。
  • 你的公式是如何工作的? Rand() 创建一个介于 0 和 1 之间的随机数。如果 rand() 的结果大于 0.5,countif 总是返回 6,index 总是返回 Stormy/rainy
  • 刚刚意识到我没有提到对于 google sheet 函数我实际上使用了累积概率,所以在上面的示例中它永远不会返回 Storm/rainy。我现在编辑以说明这一点。

标签: random google-apps-script probability


【解决方案1】:

试试这个:

function test(){
  var number= 0;
  for (var i = 0; i < 100; i++){
    number = Math.random().toFixed(3);
    switch(true){
      case number > 0 && number < 0.375:
        Logger.log("wet");
        break;
      case number > 0.376:
        Logger.log("something else");
        break;
    }
  }
}

这是您需要的一个非常简单的版本,但它向您展示了如何在应用脚本中使用开关。您需要为您拥有的不同概率设置每种情况,类似于if 语句,但这看起来更有条理。如果您有任何疑问,this link 将为您提供基础知识,this one 将向您展示如何设置更复杂的案例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2017-04-17
    • 2011-02-15
    • 2013-08-27
    • 1970-01-01
    • 2017-11-05
    • 2015-08-22
    相关资源
    最近更新 更多