2014-09-19 57 views
1

当我尝试运行我的代码时,只是遇到以下错误。我不明白我做错了什么。有什么建议么?com.cra.figaro.algorithm.NotATargetException当在Scala中使用Figaro时

com.cra.figaro.algorithm.NotATargetException 
    at com.cra.figaro.algorithm.ProbQueryAlgorithm$class.check(ProbQueryAlgorithm.scala:68) 
    at com.cra.figaro.algorithm.ProbQueryAlgorithm$class.probability(ProbQueryAlgorithm.scala:138) 
    at com.cra.figaro.algorithm.sampling.WeightedSampler.probability(WeightedSampler.scala:25) 
    at prob1.BetaBinomial$.runner1(BetaBinomial.scala:24) 

林在SBT与runner1("HHHHTHHHHHHTHHTHHHTHH")执行,我还有其他的代码在工作费加罗但是这只是一个将无法启动。

package prob1 

import com.cra.figaro.library.atomic.continuous.Beta 
import com.cra.figaro.library.atomic.discrete.Binomial 
import com.cra.figaro.language.Flip 
import com.cra.figaro.algorithm.sampling.Importance 

object BetaBinomial { 
    def runner1(data: String){ 
     val outcomes = data 
     val numTosses = outcomes.length 
     val numObservedHeads = outcomes.count((c: Char) => c == 'H') 
     val bias = Beta(2,5) 
     val numberOfHeads = Binomial(numTosses, bias) 
     val nextToss = Flip(bias) 

     numberOfHeads.observe(numObservedHeads) 
     val algorithm = Importance(bias) 
     algorithm.start() 
     Thread.sleep(1000) 
     algorithm.stop() 
     //This is where i get the error 
     val probHeads = algorithm.probability(nextToss, true) 
     println("Probability of heads = " + probHeads) 
     algorithm.kill() 
     numberOfHeads.unobserve() 
    } 
} 

回答

1

我不熟悉的费加罗,但望着ProbQueryAlgorithm.check实施表明您指定的目标不是queryTargets的一部分。该queryTargets被初始化为Importance/WeightedSampler构造函数:

abstract class WeightedSampler(override val universe: Universe, targets: Element[_]*) extends ProbQueryAlgorithm with Sampler { 
    lazy val queryTargets = targets.toList 
    ... 
} 

abstract class Importance(universe: Universe, targets: Element[_]*) 
    extends WeightedSampler(universe, targets: _*) { 
    ... 
} 

你试试这个?

val algorithm = Importance(bias, nextToss) 
+0

这样做的伎俩,谢谢! – user3139545 2014-09-19 15:44:59