Ignore:
Timestamp:
07/04/11 10:35:39 (13 years ago)
Author:
sherbold
Message:
  • moved generation of all possible sequences of a fixed length from de.ugoe.cs.eventbench.coverage.CoverageCalculator? to de.ugoe.cs.eventbench.models.IStochasticProcess
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/EventBenchCore/src/de/ugoe/cs/eventbench/coverage/CoverageCalculator.java

    r85 r93  
    11package de.ugoe.cs.eventbench.coverage; 
    22 
    3 import java.security.InvalidParameterException; 
    4 import java.util.ArrayList; 
    53import java.util.LinkedHashMap; 
    64import java.util.LinkedHashSet; 
     
    1614         
    1715        private final IStochasticProcess process; 
    18         private final List<List<Event<?>>> sequences; 
     16        private final List<List<? extends Event<?>>> sequences; 
    1917        private final int length; 
    2018         
    21         private Set<List<Event<?>>> containedSubSeqs = null; 
    22         private Set<List<Event<?>>> allPossibleSubSeqs = null; 
    23         private Map<List<Event<?>>, Double> subSeqWeights = null; 
     19        private Set<List<? extends Event<?>>> containedSubSeqs = null; 
     20        private Set<List<? extends Event<?>>> allPossibleSubSeqs = null; 
     21        private Map<List<? extends Event<?>>, Double> subSeqWeights = null; 
    2422         
    2523         
    26         public CoverageCalculator(IStochasticProcess process, List<List<Event<?>>> sequences, int length) { 
     24        public CoverageCalculator(IStochasticProcess process, List<List<? extends Event<?>>> sequences, int length) { 
    2725                this.process = process; 
    2826                this.sequences = sequences; 
     
    4341                } 
    4442                if( allPossibleSubSeqs==null ) { 
    45                         allPossibleSubSeqs = generateSubSequences(process, length); 
     43                        allPossibleSubSeqs = process.generateSequences(length); 
    4644                } 
    4745                return((double) containedSubSeqs.size())/allPossibleSubSeqs.size(); 
     
    5351                } 
    5452                if( allPossibleSubSeqs==null ) { 
    55                         allPossibleSubSeqs = generateSubSequences(process, length); 
     53                        allPossibleSubSeqs = process.generateSequences(length); 
    5654                } 
    5755                if( subSeqWeights==null ) { 
     
    5957                } 
    6058                double weight = 0.0; 
    61                 for( List<Event<?>> subSeq : containedSubSeqs ) { 
     59                for( List<? extends Event<?>> subSeq : containedSubSeqs ) { 
    6260                        weight += subSeqWeights.get(subSeq); 
    6361                } 
     
    6563        } 
    6664         
    67         private Map<List<Event<?>>, Double> generateWeights(IStochasticProcess process, Set<List<Event<?>>> sequences) { 
    68                 Map<List<Event<?>>, Double> subSeqWeights = new LinkedHashMap<List<Event<?>>, Double>(); 
     65        private Map<List<? extends Event<?>>, Double> generateWeights(IStochasticProcess process, Set<List<? extends Event<?>>> sequences) { 
     66                Map<List<? extends Event<?>>, Double> subSeqWeights = new LinkedHashMap<List<? extends Event<?>>, Double>(); 
    6967                double sum = 0.0; 
    70                 for( List<Event<?>> sequence : sequences ) { 
     68                for( List<? extends Event<?>> sequence : sequences ) { 
    7169                        double prob = 1.0; 
    7270                        List<Event<?>> context = new LinkedList<Event<?>>(); 
     
    7977                } 
    8078                if( sum<1.0 ) { 
    81                         for( Map.Entry<List<Event<?>>, Double> entry : subSeqWeights.entrySet() ) { 
     79                        for( Map.Entry<List<? extends Event<?>>, Double> entry : subSeqWeights.entrySet() ) { 
    8280                                entry.setValue(entry.getValue()/sum); 
    8381                        } 
     
    9088        } 
    9189         
    92         // O(symbols^length)     
    93         private Set<List<Event<?>>> generateSubSequences(IStochasticProcess process, int length) { 
    94                 Set<List<Event<?>>> subSequenceSet = new LinkedHashSet<List<Event<?>>>();; 
    95                 if( length<1 ) { 
    96                         throw new InvalidParameterException("Length of generated subsequences must be at least 1."); 
    97                 } 
    98                 if( length==1 ) { 
    99                         for( Event<?> event : process.getEvents() ) { 
    100                                 List<Event<?>> subSeq = new LinkedList<Event<?>>(); 
    101                                 subSeq.add(event); 
    102                                 subSequenceSet.add(subSeq); 
    103                         } 
    104                         return subSequenceSet; 
    105                 } 
    106                 Set<Event<?>> events = process.getEvents(); 
    107                 Set<List<Event<?>>> subSeqsShorter = generateSubSequences(process, length-1); 
    108                 for( Event<?> event : events ) { 
    109                         for( List<Event<?>> subSequence : subSeqsShorter ) { 
    110                                 Event<?> lastEvent = event; 
    111                                 if( process.getProbability(subSequence, lastEvent)>0.0 ) { 
    112                                         List<Event<?>> subSeq = new ArrayList<Event<?>>(subSequence); 
    113                                         subSeq.add(lastEvent); 
    114                                         subSequenceSet.add(subSeq); 
    115                                 } 
    116                         } 
    117                 } 
    118                 return subSequenceSet; 
    119         } 
    120  
    12190        // O(numSeq*lenSeq)      
    122         private Set<List<Event<?>>> containedSubSequences(List<List<Event<?>>> sequences, int length) { 
    123                 Set<List<Event<?>>> containedSubSeqs = new LinkedHashSet<List<Event<?>>>(); 
     91        private Set<List<? extends Event<?>>> containedSubSequences(List<List<? extends Event<?>>> sequences, int length) { 
     92                Set<List<? extends Event<?>>> containedSubSeqs = new LinkedHashSet<List<? extends Event<?>>>(); 
    12493                List<Event<?>> subSeq = new LinkedList<Event<?>>(); 
    12594                boolean minLengthReached = false; 
    126                 for( List<Event<?>> sequence : sequences ) { 
     95                for( List<? extends Event<?>> sequence : sequences ) { 
    12796                        for( Event<?> event : sequence ) { 
    12897                                subSeq.add(event); 
Note: See TracChangeset for help on using the changeset viewer.