Ignore:
Timestamp:
12/12/11 11:52:35 (13 years ago)
Author:
sherbold
Message:
  • finished command generateGreedy
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDgenerateGreedy.java

    r288 r293  
    22 
    33import java.security.InvalidParameterException; 
    4 import java.util.Collection; 
     4import java.util.ArrayList; 
    55import java.util.LinkedHashSet; 
     6import java.util.LinkedList; 
    67import java.util.List; 
     8import java.util.Map; 
     9import java.util.Set; 
    710 
    811import de.ugoe.cs.eventbench.CommandHelpers; 
     12import de.ugoe.cs.eventbench.coverage.CoverageCalculatorProcess; 
     13import de.ugoe.cs.eventbench.coverage.SequenceTools; 
    914import de.ugoe.cs.eventbench.data.Event; 
    1015import de.ugoe.cs.eventbench.data.GlobalDataContainer; 
    1116import de.ugoe.cs.eventbench.models.IStochasticProcess; 
     17import de.ugoe.cs.util.ArrayTools; 
    1218import de.ugoe.cs.util.console.Command; 
    1319import de.ugoe.cs.util.console.Console; 
     
    2127 */ 
    2228public class CMDgenerateGreedy implements Command { 
     29         
     30        final double eps = 0.000000000001; 
    2331 
    2432        @Override 
     
    2836                int minLength; 
    2937                int maxLength; 
     38                int coverageDepth; 
    3039                float desiredCoverage; 
    3140                try { 
     
    3443                        minLength = Integer.parseInt((String) parameters.get(2)); 
    3544                        maxLength = Integer.parseInt((String) parameters.get(3)); 
    36                         desiredCoverage = Float.parseFloat((String) parameters.get(4)); 
     45                        coverageDepth = Integer.parseInt((String) parameters.get(4)); 
     46                        desiredCoverage = Float.parseFloat((String) parameters.get(5)); 
    3747                } catch (Exception e) { 
    3848                        throw new InvalidParameterException(); 
     
    5060                } 
    5161                model = (IStochasticProcess) dataObject; 
    52                 Collection<List<? extends Event<?>>> sequences = new LinkedHashSet<List<? extends Event<?>>>(); 
     62                 
     63                // set up everything 
     64                List<List<? extends Event<?>>> allSequences = new ArrayList<List<? extends Event<?>>>(); 
    5365                for (int length = minLength; length <= maxLength; length++) { 
    54                         sequences.addAll(model.generateValidSequences(length + 2)); 
     66                        allSequences.addAll(model.generateValidSequences(length + 2)); 
    5567                } 
    56                 Console.traceln("" + sequences.size() + " possible"); 
     68                Console.traceln("" + allSequences.size() + " possible"); 
    5769                 
     70                Set<List<? extends Event<?>>> allSubSeqs = SequenceTools.containedSubSequences(allSequences, coverageDepth); 
     71                Map<List<? extends Event<?>>, Double> weightMap = SequenceTools.generateWeights(model, allSubSeqs); 
     72                Set<List<? extends Event<?>>> coveredSubSeqs = new LinkedHashSet<List<? extends Event<?>>>(); 
    5873                 
    59                 // TODO implement sequence selection 
     74                List<Set<List<? extends Event<?>>>> containedSubSeqs = new ArrayList<Set<List<? extends Event<?>>>>(allSequences.size()); 
     75                for( List<? extends Event<?>> sequence : allSequences ) { 
     76                        List<List<? extends Event<?>>>  wrapper = new LinkedList<List<? extends Event<?>>>(); 
     77                        wrapper.add(sequence); 
     78                        Set<List<? extends Event<?>>> currentSubSeqs = SequenceTools.containedSubSequences(wrapper, coverageDepth); 
     79                        containedSubSeqs.add(currentSubSeqs); 
     80                } 
    6081                 
    61                 if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) { 
     82                Double[] sequenceGain = new Double[allSequences.size()]; 
     83                List<List<? extends Event<?>>> testSuite = new LinkedList<List<? extends Event<?>>>(); 
     84                CoverageCalculatorProcess coverageCalculator = new CoverageCalculatorProcess(model, testSuite, coverageDepth); 
     85                double currentCoverage = 0.0d; 
     86                 
     87                // Build test suite 
     88                while( currentCoverage<desiredCoverage ) { 
     89                        for( int i=0 ; i<allSequences.size() ; i++ ) { 
     90                                double gain = 0.0d; 
     91                                for( List<? extends Event<?>> subSeq : containedSubSeqs.get(i) ) { 
     92                                        if( !coveredSubSeqs.contains(subSeq) ) { 
     93                                                gain += weightMap.get(subSeq); 
     94                                        } 
     95                                } 
     96                                sequenceGain[i] = gain; 
     97                        } 
     98                        int maxIndex = ArrayTools.findMax(sequenceGain); 
     99                        if( sequenceGain[maxIndex] <= 0.0+eps ) { 
     100                                Console.traceln("No gain anymore! Desired coverage cannot be satisfied!"); 
     101                                break; 
     102                        } 
     103                        testSuite.add(allSequences.get(maxIndex)); 
     104                        coveredSubSeqs.addAll(containedSubSeqs.get(maxIndex)); 
     105                        coverageCalculator.setSequences(testSuite); 
     106                        currentCoverage = coverageCalculator.getCoveragePossibleWeight(); 
     107                } 
     108                 
     109                if (GlobalDataContainer.getInstance().addData(sequencesName, testSuite)) { 
    62110                        CommandHelpers.dataOverwritten(sequencesName); 
    63111                } 
    64                 Console.println("" + sequences.size() + " sequences generated"); 
     112                Console.println("" + testSuite.size() + " sequences generated"); 
     113                Console.println("" + currentCoverage + " coverage achieved"); 
    65114        } 
    66115 
    67116        @Override 
    68117        public void help() { 
    69                 Console.println("generateGreedy <modelname> <sequencesName> <minLength> <maxLength> <desiredCoverage>"); 
     118                Console.println("generateGreedy <modelname> <sequencesName> <minLength> <maxLength> <coverageDepth> <desiredCoverage>"); 
    70119        } 
    71120 
Note: See TracChangeset for help on using the changeset viewer.