2014-09-19 63 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