问题描述
|
在我的假设应用程序中,用户可以提出问题,然后以“ 0”回答。您可以使用
Predictor.predictor
方法获得适当的ѭ0ѭ,然后您可以向其提出问题。当您对问题“ 3”回答时,您会得到一个答案,以及对它的回答“ 0”的确定性(0..1范围内的浮点数)。
class BaSEOracle; def ask(question); ...; end; end
class UnreliableOracle < BaSEOracle; ...; end
module Predictor
def self.predictor
@predictor ||= UnreliableOracle.new
end
end
Predictor.predictor.ask(\"How many fingers am I holding up?\")
# => [\"three fingers\",0.2]
在此实现中,您每次都会获得一个UnreliableOracle实例相同的Oracle。我想做的就是更改Predictor.predictor的实现,以便将在其上调用的方法委托给一组Oracle,其中一些优于其他Oracle。换句话说,我希望它能像这样工作:
class BaSEOracle; ...; end
class UnreliableOracle < BaSEOracle; ...; end
class PopCultureOracle < BaSEOracle; ...; end
class ScienceOracle < BaSEOracle; ...; end
class LiteraryOracle < BaSEOracle; ...; end
class FingerCountingOracle < BaSEOracle; ...; end
module Predictor
def self.predictor
############## What goes here?
end
end
# This actually asks several oracles for an answer and picks the best one.
Predictor.predictor.ask(\"How many fingers am I holding up?\")
# => [\"four fingers\",1.0]
最好的方法是什么?
解决方法
这本质上是策略设计模式,其中每个Oracle实际上都是回答问题的策略。
最简单(也许最干净)的方法是构造一个“ 7”,询问其他预言者正确的答案是什么,并选择最佳答案:
class MetaOracle
def oracles
@oracles ||= [ScienceOracle.new,LiteraryOracle.new,# ...
end
def ask(question)
oracles.map { |o| o.ask question }. # Ask each Oracle a question ...
sort_by { |answer| -answer.certainty }. # sort by the best answers ...
first # ... and pick the best one.
end
end
module Predictor
def self.predictor
@predictor ||= MetaOracle.new
end
end
现在,具有最佳答案的Oracle将赢得胜利,它将成为您所看到的答案。