Changeset 2026


Ignore:
Timestamp:
07/23/15 13:43:38 (9 years ago)
Author:
sherbold
Message:
  • made generation of random sequences with an expected valid end and a predefined maximum length more robust. the generation now aborts after a user-defined number of attempts to create a valid sequence and returns an empty sequence instead.
Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-testgeneration/src/main/java/de/ugoe/cs/autoquest/testgeneration/RandomWalkGenerator.java

    r927 r2026  
    7474    /** 
    7575     * <p> 
     76     * Maximal number of attempts for creating a valid sequence. If this value is reached, the 
     77     * sequence generation will be aborted. 
     78     * </p> 
     79     */ 
     80    private final long maxIterValidSequence; 
     81 
     82    /** 
     83     * <p> 
    7684     * Actual number of random walks performed to generate the test suite. 
    7785     * </p> 
     
    103111     *            maximal number of random walks before aborting the test case generation (see 
    104112     *            {@link #maxIter}) 
     113     * @param maxIterValidSequence 
     114     *            maximal number of attempts to create a valid sequence within the given restrictions 
    105115     */ 
    106116    public RandomWalkGenerator(int numSequences, 
     
    108118                               int maxLength, 
    109119                               boolean validEnd, 
    110                                long maxIter) 
     120                               long maxIter, 
     121                               long maxIterValidSequence) 
    111122    { 
    112123        // check validity of the parameters 
     
    117128        if (maxLength < 1) { 
    118129            throw new IllegalArgumentException( 
    119                                                 "maximal allowed length of test cases must be at least 1 but is " + 
    120                                                     maxLength); 
     130                                               "maximal allowed length of test cases must be at least 1 but is " + 
     131                                                   maxLength); 
    121132        } 
    122133        if (minLength > maxLength) { 
    123134            throw new IllegalArgumentException( 
    124                                                 "minimal allowed length of test cases must be less than or equal to the maximal allowed length (min length: " + 
    125                                                     minLength + " ; max length: " + maxLength + ")"); 
     135                                               "minimal allowed length of test cases must be less than or equal to the maximal allowed length (min length: " + 
     136                                                   minLength + " ; max length: " + maxLength + ")"); 
    126137        } 
    127138        if (maxIter < numSequences) { 
    128139            throw new IllegalArgumentException( 
    129                                                 "maximal number of iterations must greater than or equal to the number of sequences (number of sequences: " + 
    130                                                     numSequences + 
    131                                                     " ; max iterations: " + 
    132                                                     maxIter + 
    133                                                     ")"); 
     140                                               "maximal number of iterations must greater than or equal to the number of sequences (number of sequences: " + 
     141                                                   numSequences + 
     142                                                   " ; max iterations: " + 
     143                                                   maxIter + 
     144                                                   ")"); 
     145        } 
     146        if( maxIterValidSequence < 1) { 
     147            throw new IllegalArgumentException("maximal number of attempts to get a valid sequence must be positive, but is: " + maxIterValidSequence); 
    134148        } 
    135149        this.numSequences = numSequences; 
     
    138152        this.validEnd = validEnd; 
    139153        this.maxIter = maxIter; 
     154        this.maxIterValidSequence = maxIterValidSequence; 
    140155    } 
    141156 
     
    157172        actualIter = 0; 
    158173        while (sequences.size() < numSequences && actualIter < maxIter) { 
    159             List<Event> generatedSequence = model.randomSequence(maxLength, validEnd); 
     174            List<Event> generatedSequence = model.randomSequence(maxLength, validEnd, maxIterValidSequence); 
    160175            if (generatedSequence.size() >= minLength && generatedSequence.size() <= maxLength) { 
    161176                ((List<Event>) generatedSequence).add(0, Event.STARTEVENT); 
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/IStochasticProcess.java

    r1641 r2026  
    6161     */ 
    6262    double getProbability(List<Event> sequence); 
    63      
    64     /** 
    65      * <p> 
    66      * Returns the sum of the negative logarithm of the probabilities.  
    67      * </p> 
    68      * 
     63 
     64    /** 
     65     * <p> 
     66     * Returns the sum of the negative logarithm of the probabilities. 
     67     * </p> 
     68     *  
    6969     * @param sequence 
    7070     *            sequences of which the logsum is calculated 
     
    101101     * @param validEnd 
    102102     *            if true, only sequences that finish with {@link Event#ENDEVENT} are generated 
     103     * @param maxIter 
     104     *            maximum number of attempts for the generation of the sequence; in case of failure 
     105     *            and empty sequence is returned 
    103106     * @return randomly generated sequence 
    104107     *  
    105108     */ 
    106     public List<Event> randomSequence(int maxLength, boolean validEnd); 
     109    public List<Event> randomSequence(int maxLength, boolean validEnd, long maxIter); 
    107110 
    108111    /** 
  • trunk/autoquest-core-usageprofiles/src/main/java/de/ugoe/cs/autoquest/usageprofiles/TrieBasedModel.java

    r1996 r2026  
    147147    @Override 
    148148    public List<Event> randomSequence() { 
    149         return randomSequence(Integer.MAX_VALUE, true); 
     149        return randomSequence(Integer.MAX_VALUE, true, 100); 
    150150    } 
    151151 
     
    156156     */ 
    157157    @Override 
    158     public List<Event> randomSequence(int maxLength, boolean validEnd) { 
     158    public List<Event> randomSequence(int maxLength, boolean validEnd, long maxIter) { 
    159159        List<Event> sequence = new LinkedList<Event>(); 
     160        int attempts = 0; 
    160161        if (trie != null) { 
    161162            boolean endFound = false; 
    162             while (!endFound) { // outer loop for length checking 
    163                 sequence = new LinkedList<Event>(); 
     163            while (!endFound && attempts <= maxIter) { // outer loop for length checking 
    164164                IncompleteMemory<Event> context = new IncompleteMemory<Event>(trieOrder - 1); 
    165165                context.add(Event.STARTEVENT); 
     
    186186                    } 
    187187                } 
     188                if (!endFound) { 
     189                    sequence = new LinkedList<Event>(); 
     190                } 
     191                attempts++; 
    188192            } 
    189193        } 
     
    398402        List<Event> context = new LinkedList<Event>(); 
    399403        for (Event event : sequence) { 
    400             odds += Math.log(getProbability(context, event)+1); 
     404            odds += Math.log(getProbability(context, event) + 1); 
    401405            context.add(event); 
    402406        } 
  • trunk/autoquest-ui-core/src/main/java/de/ugoe/cs/autoquest/commands/usage/CMDgenerateRandomSequences.java

    r927 r2026  
    8181 
    8282                RandomWalkGenerator generator = new RandomWalkGenerator(numSessions, 
    83                                 minLength, maxLength, validEnd, maxIter); 
     83                                minLength, maxLength, validEnd, maxIter, 100); 
    8484                Collection<List<Event>> sequences = generator 
    8585                                .generateTestSuite(model); 
Note: See TracChangeset for help on using the changeset viewer.