【发布时间】:2017-07-22 06:48:48
【问题描述】:
所以我目前有以下方法,它根据加权概率(based on this)随机返回一个字符串(一组已知字符串):
def get_response(request)
responses = ['text1', 'text2', 'text3', 'text4', 'text5', 'text6']
weights = [5, 5, 10, 10, 20, 50]
ps = weights.map { |w| (Float w) / weights.reduce(:+) }
# => [0.05, 0.05, 0.1, 0.1, 0.2, 0.5]
weighted_response_hash = responses.zip(ps).to_h
# => {"text1"=>0.05, "text2"=>0.05, "text3"=>0.1, "text4"=>0.1, "text5"=>0.2, "text6"=>0.5}
response = weighted_response_hash.max_by { |_, weight| rand ** (1.0 / weight) }.first
response
end
现在,我希望输出基于输入字符串保持一致,同时保持响应的加权概率,而不是随机加权输出。因此,例如,这样的调用:
get_response("This is my request")
应该始终产生相同的输出,同时保持输出文本的加权概率。
我认为 Modulo 可以以某种方式在这里使用,哈希映射到相同的结果,但我有点迷路了。
【问题讨论】:
-
你看过srand吗?
-
@maxpleaner 我不是想播种随机函数。我正在尝试根据字符串输入获得一致的加权输出。
-
我很难理解你的问题。您的方法
get_response接受一个参数request,该参数未在方法主体中使用。你能解决这个问题吗?