Class: Lernen::Algorithm::KearnsVaziraniVPA::KearnsVaziraniVPALearner
- Inherits:
-
Learner
- Object
- Learner
- Lernen::Algorithm::KearnsVaziraniVPA::KearnsVaziraniVPALearner
- Defined in:
- lib/lernen/algorithm/kearns_vazirani_vpa/kearns_vazirani_vpa_learner.rb
Overview
KearnzVaziraniVPALearner is an implementation of Kearnz-Vazirani algorithm for VPA.
The idea behind this implementation is described by [Isberner (2015) “Foundations of Active Automata Learning: An Algorithmic Overview”](eldorado.tu-dortmund.de/handle/2003/34282).
Instance Method Summary collapse
- #build_hypothesis ⇒ Object
- #initialize(alphabet, call_alphabet, return_alphabet, sul, cex_processing: :binary) ⇒ KearnsVaziraniVPALearner constructor
- #refine_hypothesis(cex, hypothesis, state_to_prefix) ⇒ Object
Methods inherited from Learner
Constructor Details
#initialize(alphabet, call_alphabet, return_alphabet, sul, cex_processing: :binary) ⇒ KearnsVaziraniVPALearner
: (
Array[In] alphabet, Array[Call] call_alphabet, Array[Return] return_alphabet,
System::MooreLikeSUL[In | Call | Return, bool] sul,
?cex_processing: cex_processing_method
) -> void
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/lernen/algorithm/kearns_vazirani_vpa/kearns_vazirani_vpa_learner.rb', line 29 def initialize(alphabet, call_alphabet, return_alphabet, sul, cex_processing: :binary) super() @alphabet = alphabet.dup @call_alphabet = call_alphabet.dup @return_alphabet = return_alphabet.dup @sul = sul @cex_processing = cex_processing @tree = nil end |
Instance Method Details
#build_hypothesis ⇒ Object
42 43 44 45 46 47 |
# File 'lib/lernen/algorithm/kearns_vazirani_vpa/kearns_vazirani_vpa_learner.rb', line 42 def build_hypothesis tree = @tree return tree.build_hypothesis if tree [build_first_hypothesis, { 0 => [] }] end |
#refine_hypothesis(cex, hypothesis, state_to_prefix) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/lernen/algorithm/kearns_vazirani_vpa/kearns_vazirani_vpa_learner.rb', line 50 def refine_hypothesis(cex, hypothesis, state_to_prefix) tree = @tree if tree tree.refine_hypothesis(cex, hypothesis, state_to_prefix) # steep:ignore return end @tree = DiscriminationTreeVPA.new( @alphabet, @call_alphabet, @return_alphabet, @sul, cex:, cex_processing: @cex_processing ) end |