首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使选择这么多函数中的一个函数的概率不均匀?

如何使选择这么多函数中的一个函数的概率不均匀?
EN

Stack Overflow用户
提问于 2022-03-12 16:44:33
回答 2查看 58关注 0票数 0

我正在写一个"AI“(更像是一个聊天机器人),我有很多不同的功能可以完成。它可以发送一篇维基百科文章,发布一个模因,问一个问题等等。我希望每个可能的结果都有一个不同的加权概率(IE,30%的概率发布一个模因,只有10%的几率发布一个模因,等等)。显而易见的方法是得到一个随机浮动,然后检查这个值是否小于给定的值。问题是,我将增加更多的功能,我想调整每次结果的概率,这样感觉就更好了。以一种容易选择的方式在这些功能之间选择最好的方式是什么?

EN

回答 2

Stack Overflow用户

发布于 2022-03-12 16:52:20

也许可以制作一个字典,它的词条有一个函数和一个权重,所以如果稍后添加另一个函数,您只需要给它一个相对于其他函数的权重(例如,权重2的函数出现的可能性要比权重1的函数大一倍)。

代码语言:javascript
复制
functions = {'joke':[joke_fn,its_weight],....}

然后在做决定时,要么算出你需要生成的随机数的数学,要么为每个函数滚动一个随机数,然后乘以它的权重,然后选择具有最高滚重的函数。

编辑:np.random.choices([x[0] for x in functions],[x[1] for x in functions])也能工作。

票数 0
EN

Stack Overflow用户

发布于 2022-03-12 17:16:58

按照注释中的建议使用random.choices,我会这样做:

代码语言:javascript
复制
import random

def did_you_know(a,b,op):
    print(f"Did you know that {a} {op} {b} = {eval(f'{a}{op}{b}')}?")

def add(a,b): return(did_you_know(a,b,"+"))
def subtract(a,b): return(did_you_know(a,b, "-"))
def multiply(a,b): return(did_you_know(a,b,"*"))
def divide(a,b): return(did_you_know(a,b,"/"))


functions = [[add, 1],
             [subtract, 2],
             [multiply, 2]]

for x in random.choices(*list(zip(*functions)), k = 5):
    x(5,3)

print('--- Add divide to the list of functions ---')
functions.append([divide, 3])

for x in random.choices(*list(zip(*functions)), k = 5):
    x(7, 2)
代码语言:javascript
复制
Did you know that 5 * 3 = 15?
Did you know that 5 * 3 = 15?
Did you know that 5 - 3 = 2?
Did you know that 5 + 3 = 8?
Did you know that 5 * 3 = 15?
--- Add divide to the list of functions ---
Did you know that 7 / 2 = 3.5?
Did you know that 7 * 2 = 14?
Did you know that 7 * 2 = 14?
Did you know that 7 - 2 = 5?
Did you know that 7 * 2 = 14?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71451482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档