Class NodeRandomizer

  • All Implemented Interfaces:
    java.lang.Cloneable, Actor, Executable, FiringsRecordable, Initializable, TypedActor, Changeable, Debuggable, DebugListener, Derivable, Instantiable, ModelErrorHandler, MoMLExportable, Moveable, Nameable

    public class NodeRandomizer
    extends TypedAtomicActor
    This actor, when fired, randomizes the locations of all actors in the same container that contain an attribute named "randomize" with value true. It can also optionally perform the randomization in its initialize() method. In both cases, the randomization is performed in a change request, so it will take effect after the current iteration.

    This actor assumes that the location is represented in an object of class Locatable (which is an attribute that implements Settable) with name "_location". This is how Vergil represents locations.

    The range parameter is an array of arrays giving the range of possible values for each dimension of the location. For example, if the location is in two dimensions, then range has the form {{x1, x2}, {y1, y2}}, indicating that the X value of the location is uniformly distributed between x1 and x2, and that the Y value is uniformly distributed between y1 and y2.

    If the resetOnEachRun parameter is true (the default value), then each run resets the random number generator. If the seed is non-zero, then this makes each run identical. This is useful for constructing tests. If the seed is zero, then a new seed is generated on each run (using the current time and the hash code of this object).

    The maxPrecision parameter specifies the number of digits to be used when generating a random location; results are rounded to this precision. If the value is 0 (the default value), then use the maximum precision allowed by the Java double type and the random number generator.

    Since:
    Ptolemy II 4.0
    Version:
    $Id$
    Author:
    Sanjeev Kohli, N. Vinay Krishnan, Cheng Tien Ee, Edward Lee, Xiaojun Liu and Elaine Cheong.
    See Also:
    Locatable
    Pt.AcceptedRating:
    Red (sanjeev)
    Pt.ProposedRating:
    Yellow (eal)
    • Field Detail

      • isPersistent

        public Parameter isPersistent
        If the isPersistent parameter is false, then the MoMLChangeRequest that places the nodes will not be persistent so the user will not be prompted to save the model upon closing. Models in the test suite might want to have this parameter set to false so as to avoid a dialog asking if the user wants to save the model. The default is a boolean with a value of false, indicating that change will not be persistent.
      • maxPrecision

        public Parameter maxPrecision
        The maximum precision (number of digits to be used, results are rounded to this precision) of the generated locations. If equal to 0, the resulting random locations will not be rounded. The default value is 0.
      • randomizeInInitialize

        public Parameter randomizeInInitialize
        If set to true, randomly distribute nodes in initialize(). The default value is false.
      • range

        public Parameter range
        The range of values for locations to be set when randomizing. This is an array of arrays that defaults to {{0.0, 500.0}, {0.0, 500.0}}, indicating that the X and Y values are uniformly distributed between 0.0 and 500.0.
      • resetOnEachRun

        public Parameter resetOnEachRun
        If set to true, reset the random number generator with the seed value each time preinitialize() is invoked. The default value is true, which means that if the seed value is non-zero, the node layout will be the same each time this model is run. When the value is false and the seed value is non-zero, the random number generator will not be reset, and the node layout will be different each time this model is run within the same session (within the lifetime of the JVM), although the overall pattern of node layouts will be the same across different JVM sessions.
      • seed

        public Parameter seed
        The seed that controls the random number generation to use when randomizing. A seed of zero is interpreted to mean that no seed is specified, which means that each execution of the model could result in distinct data. For the value 0, the seed is set to System.currentTimeMillis() + hashCode(), which means that with extremely high probability, two distinct actors will have distinct seeds. However, current time may not have enough resolution to ensure that two subsequent executions of the same model have distinct seeds. This parameter contains a LongToken, initially with value 0.
      • trigger

        public TypedIOPort trigger
        A trigger input to cause this actor to fire in domains that require a trigger. This has undeclared type.
    • Constructor Detail

      • NodeRandomizer

        public NodeRandomizer​(CompositeEntity container,
                              java.lang.String name)
                       throws IllegalActionException,
                              NameDuplicationException
        Construct an actor in the given container with the given name. The container argument must not be null, or a NullPointerException will be thrown. If the name argument is null, then the name is set to the empty string. Increment the version number of the workspace.
        Parameters:
        container - Container of the actor.
        name - Name of the actor.
        Throws:
        IllegalActionException - If the actor is not compatible with the specified container.
        NameDuplicationException - If the name collides with an entity in the container.
    • Method Detail

      • initialize

        public void initialize()
                        throws IllegalActionException
        Override the base class to randomize the positions of the nodes if randomizeInInitialize is set to true. Also initialize the random number generator so that if a nonzero seed is provided, then the results are repeatable. If resetOnEachRun is set to true (default value), then the seed is reset for each run.
        Specified by:
        initialize in interface Initializable
        Overrides:
        initialize in class AtomicActor<TypedIOPort>
        Throws:
        IllegalActionException - If the initialize() method of one of the associated actors throws it, or if the range parameter is malformed.
      • _randomize

        protected void _randomize()
                           throws IllegalActionException
        Randomly distribute the nodes in the model that contain a boolean valued parameter named "randomize" with value true. This method distributes the location according to uniform random variables (one for each dimension) with ranges given by the range parameter. Subclasses can override this to perform some other randomization. This delegates to the method _setLocationOfNode() to actually set the location of the actor.

        If the isPersistent parameter is true, then the change is marked as a persistent change, which will cause the model to be modified, which means the user will be prompted to save the model upon exiting.

        Throws:
        IllegalActionException - If the range parameter is malformed.
      • _getLocationSetMoML

        protected java.lang.String _getLocationSetMoML​(CompositeEntity container,
                                                       Entity node,
                                                       double[] location)
                                                throws IllegalActionException
        Return moml that will set the location of the specified node. The moml should set the _location attribute, which is the location as used in Vergil, the visual editor. Derived classes may override this to store the location differently.
        Parameters:
        container - The container.
        location - The specified location.
        node - The node for which to set the location.
        Returns:
        MoML that sets the location of the specified node.
        Throws:
        IllegalActionException - If the location attribute cannot be set.