Package jline.lang

Class Signal

All Implemented Interfaces:
Serializable, Copyable

public class Signal extends JobClass implements Serializable
A signal placeholder class that automatically resolves to OpenSignal or ClosedSignal.

Signal is a placeholder class that users can use in both open and closed networks. The resolution to the concrete type (OpenSignal or ClosedSignal) happens during model finalization when getStruct() is called. This provides a simplified API where users don't need to explicitly choose between OpenSignal and ClosedSignal.

Resolution rules:

  • If the network has a Source node: resolves to OpenSignal
  • If the network has no Source node: resolves to ClosedSignal

For explicit control, users can directly use OpenSignal or ClosedSignal.

Signal types:

  • NEGATIVE: Removes a job from the destination queue
  • CATASTROPHE: Resets the destination queue to empty state
  • REPLY: Triggers a reply action (unblocks servers waiting for reply)

Reference: Gelenbe, E. (1991). "Product-form queueing networks with negative and positive customers", Journal of Applied Probability

See Also:
  • Constructor Details

    • Signal

      public Signal(Network model, String name, SignalType signalType, int priority, DiscreteDistribution removalDistribution, RemovalPolicy removalPolicy)
      Creates a new signal placeholder with full configuration for batch removal.
      Parameters:
      model - the network model to add this class to
      name - the name for this signal class
      signalType - the type of signal (NEGATIVE, CATASTROPHE, or REPLY)
      priority - the priority level for signals in this class
      removalDistribution - the distribution for number of jobs to remove (null for exactly 1)
      removalPolicy - the policy for selecting which jobs to remove
    • Signal

      public Signal(Network model, String name, SignalType signalType, int priority)
      Creates a new signal placeholder with the specified type and priority. Uses default removal behavior (remove exactly 1 job, random selection).
      Parameters:
      model - the network model to add this class to
      name - the name for this signal class
      signalType - the type of signal (NEGATIVE, CATASTROPHE, or REPLY)
      priority - the priority level for signals in this class
    • Signal

      public Signal(Network model, String name, SignalType signalType)
      Creates a new signal placeholder with the specified type and default priority (0). Uses default removal behavior (remove exactly 1 job, random selection).
      Parameters:
      model - the network model to add this class to
      name - the name for this signal class
      signalType - the type of signal (NEGATIVE, CATASTROPHE, or REPLY) - REQUIRED
  • Method Details

    • resolve

      public JobClass resolve(boolean isOpen, Station refstat)
      Resolves this Signal placeholder to OpenSignal or ClosedSignal.
      Parameters:
      isOpen - true if the network is open (has Source node)
      refstat - reference station for closed networks (ignored for open)
      Returns:
      the resolved OpenSignal or ClosedSignal instance
    • getModel

      public Network getModel()
      Gets the network model this signal belongs to.
      Returns:
      the network model
    • getSignalType

      public SignalType getSignalType()
      Gets the signal type for this signal class.
      Returns:
      the signal type
    • setSignalType

      public void setSignalType(SignalType signalType)
      Sets the signal type for this signal class.
      Parameters:
      signalType - the new signal type
    • forJobClass

      public Signal forJobClass(JobClass jobClass)
      Associates this signal with a job class.

      For REPLY signals, this specifies which job class's servers will be unblocked when this signal arrives.

      Parameters:
      jobClass - the JobClass to associate with this signal
      Returns:
      this Signal instance (for method chaining)
    • getTargetJobClass

      public JobClass getTargetJobClass()
      Gets the associated job class.
      Returns:
      the JobClass associated with this signal, or null if none
    • getTargetJobClassIndex

      public int getTargetJobClassIndex()
      Gets the index of the associated job class.
      Returns:
      the index of the associated JobClass, or -1 if none
    • getRemovalDistribution

      public DiscreteDistribution getRemovalDistribution()
      Gets the removal distribution for this negative signal.

      The removal distribution determines how many positive customers are removed when this signal arrives at a queue. If null, exactly one customer is removed (default G-network behavior).

      Returns:
      the removal distribution, or null for single removal
    • setRemovalDistribution

      public void setRemovalDistribution(DiscreteDistribution removalDistribution)
      Sets the removal distribution for this negative signal.
      Parameters:
      removalDistribution - the distribution for number of removals
    • getRemovalPolicy

      public RemovalPolicy getRemovalPolicy()
      Gets the removal policy for this negative signal.

      The removal policy determines which customers are selected for removal when this signal arrives at a queue.

      Returns:
      the removal policy (RANDOM, FCFS, or LCFS)
    • setRemovalPolicy

      public void setRemovalPolicy(RemovalPolicy removalPolicy)
      Sets the removal policy for this negative signal.
      Parameters:
      removalPolicy - the policy for selecting customers to remove
    • isCatastrophe

      public boolean isCatastrophe()
      Returns whether this signal is a catastrophe (removes all jobs).
      Returns:
      true if signalType is CATASTROPHE
    • printSummary

      public void printSummary()
      Prints a summary of this signal class configuration.
      Overrides:
      printSummary in class JobClass