jaga.pj.circuits.experiment
Class SimpleOscillatorExperiment

java.lang.Object
  |
  +--jaga.pj.circuits.experiment.SimpleOscillatorExperiment
All Implemented Interfaces:
Experiment, java.io.Serializable

public class SimpleOscillatorExperiment
extends java.lang.Object
implements Experiment

See Also:
Serialized Form

Constructor Summary
SimpleOscillatorExperiment(int period)
          Creates new SimpleOscillatorExperiment
SimpleOscillatorExperiment(int period, int periodsToTest, int testChunks, int logicThreshold)
          Creates new SimpleOscillatorExperiment
 
Method Summary
 SampleData[] generateInput()
          generates an array of inputs suitable for this experiment using default input sample separation.
 SampleData[] generateInput(int inputSampleSeparation)
          generates an array of inputs suitable for this experiment.
 double getFitness(SampleData[] in, SampleData[] out)
          returns a fitness associated to a given input/output pair for this experiment.
 int getNumOfInputs()
           
 int getNumOfOutputs()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SimpleOscillatorExperiment

public SimpleOscillatorExperiment(int period)
Creates new SimpleOscillatorExperiment
Parameters:
period - how often we want a rising edge to appear in the output measured in sampleData elements (the smallest simulator time slice)

SimpleOscillatorExperiment

public SimpleOscillatorExperiment(int period,
                                  int periodsToTest,
                                  int testChunks,
                                  int logicThreshold)
Creates new SimpleOscillatorExperiment
Parameters:
period - how often we want a rising edge to appear in the output measured in sampleData elements
periodsToTest - sample enough so that we try and achieve what number of rising edges: ie. if we are looking for 1 rising edge every 10 samples then we have to generate a test of 200 samples to expect to find 20 rising edges.
testChunks - defines in how many pieces we will subdivide our test. If the pieces are too large then we may have a lot of edges at beginning and none at end and we don't want that!
how - long output has to stay stable for it to count as a 1 or 0 horter glitches will be punished..
Method Detail

getFitness

public double getFitness(SampleData[] in,
                         SampleData[] out)
returns a fitness associated to a given input/output pair for this experiment. The fitness is a double and is in adjusted fitness format. From 0 to 1, 1 being perfectly fit. There should be periodsToTest rising edges in the output because of the length it has been set to in the generateInput function. So now a good fitness function looks like: fitness = 1 / ( abs( risingEdges - periodsToTest ) + 1 ) which looks like a big circus tent with its roof at (periodsToTest, 1) This is calculated for each chunks and their average fitness taken. Rising edges which result around 1s and 0s that don't meet the logicThreshold criteria are counted as bad edges and they contribute to a penalty which is multiplied to the fitness: penalty = 1 / ( badEdges + 1 )
Specified by:
getFitness in interface Experiment
Parameters:
in - array of inputs
out - array of outputs

generateInput

public SampleData[] generateInput()
generates an array of inputs suitable for this experiment using default input sample separation.
Specified by:
generateInput in interface Experiment

generateInput

public SampleData[] generateInput(int inputSampleSeparation)
generates an array of inputs suitable for this experiment.
Specified by:
generateInput in interface Experiment
Parameters:
inputSampleSeparation - relative frequency of input to output samples. If this is n, then n outputs will be sampled for every change in inputs.

getNumOfInputs

public int getNumOfInputs()
Specified by:
getNumOfInputs in interface Experiment

getNumOfOutputs

public int getNumOfOutputs()
Specified by:
getNumOfOutputs in interface Experiment

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object