我正在写一个"AI“(更像是一个聊天机器人),我有很多不同的功能可以完成。它可以发送一篇维基百科文章,发布一个模因,问一个问题等等。我希望每个可能的结果都有一个不同的加权概率(IE,30%的概率发布一个模因,只有10%的几率发布一个模因,等等)。显而易见的方法是得到一个随机浮动,然后检查这个值是否小于给定的值。问题是,我将增加更多的功能,我想调整每次结果的概率,这样感觉就更好了。以一种容易选择的方式在这些功能之间选择最好的方式是什么?
发布于 2022-03-12 16:52:20
也许可以制作一个字典,它的词条有一个函数和一个权重,所以如果稍后添加另一个函数,您只需要给它一个相对于其他函数的权重(例如,权重2的函数出现的可能性要比权重1的函数大一倍)。
functions = {'joke':[joke_fn,its_weight],....}然后在做决定时,要么算出你需要生成的随机数的数学,要么为每个函数滚动一个随机数,然后乘以它的权重,然后选择具有最高滚重的函数。
编辑:np.random.choices([x[0] for x in functions],[x[1] for x in functions])也能工作。
发布于 2022-03-12 17:16:58
按照注释中的建议使用random.choices,我会这样做:
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)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?https://stackoverflow.com/questions/71451482
复制相似问题