Class Station

All Implemented Interfaces:
Serializable, Copyable
Direct Known Subclasses:
Join, Place, ServiceStation, Source

public abstract class Station extends ServiceNode implements Serializable
A node where jobs can spend time stationing there
See Also:
  • Field Details

  • Constructor Details

    • Station

      public Station(String name)
      Creates a new station with the specified name. Initializes default capacity, scheduling, and service configurations.
      Parameters:
      name - the name for this station
  • Method Details

    • getCap

      public double getCap()
      Description copied from class: Node
      Returns the total capacity limit for this node. Default implementation returns infinite capacity.
      Overrides:
      getCap in class Node
      Returns:
      the total capacity limit
    • setCapacity

      public void setCapacity(int cap)
      Sets the total capacity limit for this station. Capacity follows Kendall notation where K = total system capacity (queue + in-service).
      Parameters:
      cap - the maximum number of jobs that can be at this station
    • setCap

      public void setCap(int cap)
      Alias for setCapacity() for backwards compatibility.
      Parameters:
      cap - the maximum number of jobs that can be at this station
    • getClassCap

      public double getClassCap(JobClass jobClass)
      Description copied from class: Node
      Returns the capacity limit for a specific job class at this node. Default implementation returns infinite capacity.
      Overrides:
      getClassCap in class Node
      Parameters:
      jobClass - the job class to query
      Returns:
      the capacity limit for the job class
    • getDropRule

      public DropStrategy getDropRule(JobClass jobclass)
      Gets the drop strategy for a specific job class when capacity is exceeded.
      Parameters:
      jobclass - the job class to query
      Returns:
      the drop strategy for the job class, or null if not set
    • getLimitedClassDependence

      public SerializableFunction<Matrix,Double> getLimitedClassDependence()
      Gets the limited class-dependent scaling function for this station.
      Returns:
      the class-dependent scaling function, or null if not set
    • setLimitedClassDependence

      public void setLimitedClassDependence(SerializableFunction<Matrix,Double> gamma)
      Sets the limited class-dependent scaling function for this station.
      Parameters:
      gamma - the class-dependent scaling function
    • getLimitedLoadDependence

      public Matrix getLimitedLoadDependence()
      Gets the limited load-dependent scaling matrix for this station.
      Returns:
      the load-dependent scaling matrix
    • setLimitedLoadDependence

      public void setLimitedLoadDependence(Matrix alpha)
      Sets the limited load-dependent scaling matrix for this station.
      Parameters:
      alpha - the load-dependent scaling matrix
    • getLimitedJointDependence

      public Matrix getLimitedJointDependence()
      Gets the limited joint-dependent scaling matrix for this station.
      Returns:
      the joint-dependent scaling matrix (linearized)
    • getLimitedJointDependenceCutoffs

      public Matrix getLimitedJointDependenceCutoffs()
      Gets the per-class cutoffs for joint dependence.
      Returns:
      the cutoffs matrix [N1, N2, ..., NR]
    • setLimitedJointDependence

      public void setLimitedJointDependence(Matrix scalingTable, Matrix cutoffs)
      Sets the limited joint-dependent scaling for this station.
      Parameters:
      scalingTable - the linearized scaling table
      cutoffs - the per-class cutoffs [N1, N2, ..., NR]
    • getLimitedJointClassDependence

      public Map<JobClass,Matrix> getLimitedJointClassDependence()
      Gets the limited joint-class-dependent scaling tables for this station. Each class has its own scaling table indexed by population vector.
      Returns:
      map from JobClass to scaling matrix
    • getLimitedJointClassDependenceCutoffs

      public Matrix getLimitedJointClassDependenceCutoffs()
      Gets the per-class cutoffs for joint class dependence.
      Returns:
      the cutoffs matrix [N1, N2, ..., NR]
    • setLimitedJointClassDependence

      public void setLimitedJointClassDependence(Map<JobClass,Matrix> scalingTables, Matrix cutoffs)
      Sets the limited joint-class-dependent scaling for this station. Unlike setLimitedJointDependence which uses a single table for all classes, this method allows each class to have its own scaling table indexed by the population vector (n1, n2, ..., nK).
      Parameters:
      scalingTables - map from JobClass to linearized scaling table
      cutoffs - the per-class cutoffs [N1, N2, ..., NR]
    • getNumberOfServers

      public int getNumberOfServers()
      Overrides:
      getNumberOfServers in class StatefulNode
    • setNumberOfServers

      public void setNumberOfServers(int numberOfServers)
      Sets the number of servers at this station.
      Parameters:
      numberOfServers - the number of servers (use Integer.MAX_VALUE for infinite servers)
    • getSchedStrategy

      public SchedStrategy getSchedStrategy()
      Returns the scheduling strategy used by this station.
      Overrides:
      getSchedStrategy in class ServiceNode
      Returns:
      the scheduling strategy (FCFS, PS, etc.)
    • getServiceRates

      public List<Object> getServiceRates()
      Gets the service rates configured for all job classes at this station. Returns a list containing rate values or Distribution objects.
      Returns:
      list of service rates for each job class
    • getSourceRates

      public List<Object> getSourceRates()
      Gets the source (arrival) rates for all job classes at this station. Only applicable for source nodes.
      Returns:
      list of source rates for each job class
    • isReferenceStation

      public boolean isReferenceStation()
      Description copied from class: Node
      Checks if this node is a reference station. Default implementation returns false; override in subclasses as needed.
      Overrides:
      isReferenceStation in class Node
      Returns:
      true if this is a reference station, false otherwise
    • isServiceDefined

      public boolean[] isServiceDefined()
      Checks which job classes have defined service processes.
      Returns:
      array indicating which classes have defined service processes
    • isServiceDefined

      public boolean isServiceDefined(JobClass jobClass)
      Checks if a specific job class has a defined service process.
      Parameters:
      jobClass - the job class to check
      Returns:
      true if service is defined for this class, false otherwise
    • isServiceDisabled

      public boolean[] isServiceDisabled()
      Checks which job classes have disabled service processes.
      Returns:
      array indicating which classes have disabled service processes
    • isServiceDisabled

      public boolean isServiceDisabled(JobClass jobClass)
      Checks if a specific job class has a disabled service process.
      Parameters:
      jobClass - the job class to check
      Returns:
      true if service is disabled for this class, false otherwise
    • setChainCapacity

      public void setChainCapacity(double[] values)
      Sets the capacity for each chain in the network. Configures per-class capacity based on chain membership and service availability.
    • setClassCap

      public void setClassCap(JobClass jobClass, int cap)
      Sets the capacity limit for a specific job class at this station.
      Parameters:
      jobClass - the job class to set capacity for
      cap - the maximum number of jobs of this class
    • setDropRule

      public void setDropRule(JobClass jobclass, DropStrategy drop)
      Sets the drop strategy for a specific job class when capacity is exceeded.
      Parameters:
      jobclass - the job class to configure
      drop - the drop strategy to apply
    • setSwitchoverTime

      public void setSwitchoverTime(JobClass fromClass, JobClass toClass, Distribution switchoverTime)
      Sets the switchover time from one job class to another. This is used for class-to-class switchover functionality.
      Parameters:
      fromClass - the job class to switch from
      toClass - the job class to switch to
      switchoverTime - the switchover time distribution
    • getSwitchoverTime

      public Distribution getSwitchoverTime(JobClass fromClass, JobClass toClass)
      Gets the switchover time from one job class to another.
      Parameters:
      fromClass - the job class to switch from
      toClass - the job class to switch to
      Returns:
      the switchover time distribution, or null if not set
    • hasSwitchoverTime

      public boolean hasSwitchoverTime(JobClass fromClass, JobClass toClass)
      Checks if a switchover time is set for the given job class pair.
      Parameters:
      fromClass - the job class to switch from
      toClass - the job class to switch to
      Returns:
      true if switchover time is set, false otherwise
    • setPatience

      public void setPatience(JobClass jobClass, Distribution distribution)
      Sets the patience distribution for a specific job class at this station. Jobs that wait longer than their patience time will abandon the queue. This setting takes precedence over the global class patience. Defaults to RENEGING patience type for backwards compatibility.
      Parameters:
      jobClass - the job class
      distribution - the patience time distribution
      Throws:
      IllegalArgumentException - if distribution is a modulated process or arguments are null
    • setPatience

      public void setPatience(JobClass jobClass, ImpatienceType impatienceType, Distribution distribution)
      Sets the impatience type and distribution for a specific job class at this station. Jobs that wait longer than their patience time will abandon the queue. This setting takes precedence over the global class patience.
      Parameters:
      jobClass - the job class
      impatienceType - the type of impatience (RENEGING or BALKING)
      distribution - the patience time distribution
      Throws:
      IllegalArgumentException - if distribution is a modulated process or arguments are null
    • getPatience

      public Distribution getPatience(JobClass jobClass)
      Gets the effective patience distribution for a specific job class. Returns the station-specific setting if available, otherwise falls back to the global class patience.
      Parameters:
      jobClass - the job class
      Returns:
      the patience distribution, or null if not set
    • getPatienceLocal

      public Distribution getPatienceLocal(JobClass jobClass)
      Gets the station-specific patience distribution (without fallback).
      Parameters:
      jobClass - the job class
      Returns:
      the station-specific patience distribution, or null if not set
    • getImpatienceType

      public ImpatienceType getImpatienceType(JobClass jobClass)
      Gets the effective impatience type for a specific job class. Returns the station-specific setting if available, otherwise falls back to the global class impatience type.
      Parameters:
      jobClass - the job class
      Returns:
      the impatience type, or null if not set
    • getImpatienceTypeLocal

      public ImpatienceType getImpatienceTypeLocal(JobClass jobClass)
      Gets the station-specific impatience type (without fallback).
      Parameters:
      jobClass - the job class
      Returns:
      the station-specific impatience type, or null if not set
    • hasPatience

      public boolean hasPatience(JobClass jobClass)
      Checks if patience is configured for a job class (local or global).
      Parameters:
      jobClass - the job class
      Returns:
      true if patience is configured, false otherwise
    • hasPatienceLocal

      public boolean hasPatienceLocal(JobClass jobClass)
      Checks if patience is configured locally at this station.
      Parameters:
      jobClass - the job class
      Returns:
      true if local patience is configured, false otherwise
    • setBalking

      public void setBalking(JobClass jobClass, BalkingStrategy strategy, List<BalkingThreshold> thresholds)
      Sets the balking configuration for a specific job class at this station. This setting takes precedence over the global class balking configuration.
      Parameters:
      jobClass - the job class
      strategy - the balking strategy to use
      thresholds - list of balking thresholds mapping queue lengths to probabilities
      Throws:
      IllegalArgumentException - if any argument is null or thresholds is empty
    • setBalking

      public void setBalking(JobClass jobClass, BalkingStrategy strategy, int minJobs, double probability)
      Sets the balking configuration using a single threshold. Convenience method for simple balking configurations.
      Parameters:
      jobClass - the job class
      strategy - the balking strategy to use
      minJobs - minimum queue length to trigger balking
      probability - balking probability when queue length >= minJobs
    • getBalkingStrategy

      public BalkingStrategy getBalkingStrategy(JobClass jobClass)
      Gets the effective balking strategy for a specific job class. Returns the station-specific setting if available, otherwise falls back to the global class balking strategy.
      Parameters:
      jobClass - the job class
      Returns:
      the balking strategy, or null if not configured
    • getBalkingStrategyLocal

      public BalkingStrategy getBalkingStrategyLocal(JobClass jobClass)
      Gets the station-specific balking strategy (without fallback).
      Parameters:
      jobClass - the job class
      Returns:
      the station-specific balking strategy, or null if not set
    • getBalkingThresholds

      public List<BalkingThreshold> getBalkingThresholds(JobClass jobClass)
      Gets the effective balking thresholds for a specific job class. Returns the station-specific setting if available, otherwise falls back to the global class balking thresholds.
      Parameters:
      jobClass - the job class
      Returns:
      the balking thresholds, or null if not configured
    • getBalkingThresholdsLocal

      public List<BalkingThreshold> getBalkingThresholdsLocal(JobClass jobClass)
      Gets the station-specific balking thresholds (without fallback).
      Parameters:
      jobClass - the job class
      Returns:
      the station-specific balking thresholds, or null if not set
    • hasBalking

      public boolean hasBalking(JobClass jobClass)
      Checks if balking is configured for a job class (local or global).
      Parameters:
      jobClass - the job class
      Returns:
      true if balking is configured, false otherwise
    • hasBalkingLocal

      public boolean hasBalkingLocal(JobClass jobClass)
      Checks if balking is configured locally at this station.
      Parameters:
      jobClass - the job class
      Returns:
      true if local balking is configured, false otherwise
    • setRetrial

      public void setRetrial(JobClass jobClass, Distribution delayDistribution, int maxAttempts)
      Sets the retrial configuration for a specific job class at this station. This setting takes precedence over the global class retrial configuration.
      Parameters:
      jobClass - the job class
      delayDistribution - the distribution for retrial delay times
      maxAttempts - maximum retry attempts (-1 for unlimited, 0 for no retries)
      Throws:
      IllegalArgumentException - if arguments are null or distribution is modulated
    • setRetrial

      public void setRetrial(JobClass jobClass, Distribution delayDistribution)
      Sets the retrial configuration with unlimited retry attempts.
      Parameters:
      jobClass - the job class
      delayDistribution - the distribution for retrial delay times
    • getRetrialDelayDistribution

      public Distribution getRetrialDelayDistribution(JobClass jobClass)
      Gets the effective retrial delay distribution for a specific job class. Returns the station-specific setting if available, otherwise falls back to the global class retrial distribution.
      Parameters:
      jobClass - the job class
      Returns:
      the retrial delay distribution, or null if not configured
    • getRetrialDelayDistributionLocal

      public Distribution getRetrialDelayDistributionLocal(JobClass jobClass)
      Gets the station-specific retrial delay distribution (without fallback).
      Parameters:
      jobClass - the job class
      Returns:
      the station-specific retrial delay distribution, or null if not set
    • getMaxRetrialAttempts

      public int getMaxRetrialAttempts(JobClass jobClass)
      Gets the effective maximum retrial attempts for a specific job class. Returns the station-specific setting if available, otherwise falls back to the global class max attempts.
      Parameters:
      jobClass - the job class
      Returns:
      maximum attempts (-1 for unlimited), or -1 if not configured
    • getMaxRetrialAttemptsLocal

      public Integer getMaxRetrialAttemptsLocal(JobClass jobClass)
      Gets the station-specific maximum retrial attempts (without fallback).
      Parameters:
      jobClass - the job class
      Returns:
      the station-specific max attempts, or null if not set
    • hasRetrial

      public boolean hasRetrial(JobClass jobClass)
      Checks if retrial is configured for a job class (local or global).
      Parameters:
      jobClass - the job class
      Returns:
      true if retrial is configured, false otherwise
    • hasRetrialLocal

      public boolean hasRetrialLocal(JobClass jobClass)
      Checks if retrial is configured locally at this station.
      Parameters:
      jobClass - the job class
      Returns:
      true if local retrial is configured, false otherwise