Class Node

All Implemented Interfaces:
Serializable, Cloneable, Copyable
Direct Known Subclasses:
ClassSwitch, Fork, Logger, Sink, StatefulNode

public class Node extends NetworkElement implements Serializable, Cloneable
Superclass for a node element within a Network model
See Also:
  • Field Details

    • model

      public Network model
    • input

      protected InputSection input
    • output

      protected OutputSection output
    • server

      protected ServiceSection server
    • dropStrategy

      protected DropStrategy dropStrategy
    • statefulIdx

      protected int statefulIdx
    • nodeIndex

      protected int nodeIndex
    • stationIdx

      public int stationIdx
    • state

      protected Matrix state
    • sdrDeclarations

      protected Map<JobClass,StateDepRouting> sdrDeclarations
      Declared Krzesinski state-dependent routing structures, one per job class.
  • Constructor Details

    • Node

      public Node(String nodeName)
      Creates a new node with the specified name. Initializes default routing and service configurations.
      Parameters:
      nodeName - the name for this node
  • Method Details

    • getAttribute

      public NodeAttribute getAttribute()
      Gets the attribute object containing additional metadata for this node.
      Returns:
      the node attribute object
    • getCap

      public double getCap()
      Returns the total capacity limit for this node. Default implementation returns infinite capacity.
      Returns:
      the total capacity limit
    • getClassCap

      public double getClassCap(JobClass jobClass)
      Returns the capacity limit for a specific job class at this node. Default implementation returns infinite capacity.
      Parameters:
      jobClass - the job class to query
      Returns:
      the capacity limit for the job class
    • getDropStrategy

      public DropStrategy getDropStrategy()
      Gets the drop strategy used by this node when capacity limits are exceeded.
      Returns:
      the drop strategy
    • getInput

      public InputSection getInput()
      Gets the input section that handles incoming jobs to this node.
      Returns:
      the input section
    • getModel

      public Network getModel()
      Returns the network model containing this node.
      Returns:
      the parent network model
    • setModel

      public void setModel(Network model)
      Sets the network model containing this node.
      Parameters:
      model - the parent network model
    • getNodeIndex

      public int getNodeIndex()
      Gets the index of this node in the network's node collection. The index is lazily computed if not already set.
      Returns:
      the node index
    • setNodeIdx

      public void setNodeIdx(int index)
      Sets the index of this node in the network's node collection.
      Parameters:
      index - the node index to set
    • getOutput

      public OutputSection getOutput()
      Gets the output section that handles job routing from this node.
      Returns:
      the output section
    • getOutputStrategies

      public List<OutputStrategy> getOutputStrategies()
      Returns the list of output strategies configured for this node.
      Returns:
      list of output routing strategies
    • removeJobClass

      public void removeJobClass(JobClass jobClass)
      Removes all per-class configuration referencing the given job class from this node. The base implementation drops the class's output (routing) strategies; subclasses extend it to drop service, capacity, arrival and class-switching configuration. Called by Network.removeClass(jline.lang.JobClass).
      Parameters:
      jobClass - the job class being removed from the model
    • getRoutingStrategy

      public RoutingStrategy getRoutingStrategy(JobClass jobClass)
      Returns the routing strategy configured for a specific job class.
      Parameters:
      jobClass - the job class to query
      Returns:
      the routing strategy, or RAND if none specified
    • getSections

      public List<Section> getSections()
      Gets all sections (input, server, output) that compose this node.
      Returns:
      list containing all node sections
    • getServer

      public ServiceSection getServer()
      Gets the service section that handles job processing at this node.
      Returns:
      the service section
    • getStatefulIdx

      public int getStatefulIdx()
      Gets the index of this node in the network's stateful node collection. Returns -1 if this node is not stateful.
      Returns:
      the stateful node index, or -1 if not stateful
    • getStationIdx

      public int getStationIdx()
      Gets the index of this node in the network's station collection. The index is lazily computed if not already set.
      Returns:
      the station index
    • setStationIdx

      public void setStationIdx(int index)
      Sets the index of this node in the network's station collection.
      Parameters:
      index - the station index to set
    • isReferenceStation

      public boolean isReferenceStation()
      Checks if this node is a reference station. Default implementation returns false; override in subclasses as needed.
      Returns:
      true if this is a reference station, false otherwise
    • isStateful

      public boolean isStateful()
      Checks if this node maintains state between job visits.
      Returns:
      true if this node is stateful, false otherwise
    • setState

      public void setState(Matrix state)
      Sets the state of this node.
      Parameters:
      state - the state matrix to set
    • getState

      public Matrix getState()
      Gets the current state of this node.
      Returns:
      the current state matrix
    • printSummary

      public void printSummary()
      Prints a summary of this node's configuration to the console.
    • reset

      public void reset()
      Resets the internal state of this node. Called when the network model is reset. Default implementation is no-op; override in subclasses as needed.
    • resetRouting

      public void resetRouting()
      Resets all routing configurations for this node.
    • setProbRouting

      public void setProbRouting(JobClass jobClass, Node destination, double probability)
      Sets probabilistic routing for a job class to a specific destination.
      Parameters:
      jobClass - the job class to configure routing for
      destination - the destination node
      probability - the routing probability (0.0 to 1.0)
    • setRouting

      public void setRouting(JobClass jobClass, RoutingStrategy routingStrategy)
      Sets the routing strategy for a specific job class.
      Parameters:
      jobClass - the job class to configure routing for
      routingStrategy - the routing strategy to use
    • setStateDepRouting

      public void setStateDepRouting(JobClass jobClass, Node departure, List<List<Node>> branches, int[] level, double[] C, double[][] d)
      Declares this node the entry center e of a subnetwork Q(V,V) served by the product-form state-dependent routing of Krzesinski (1987), "Multiclass Queueing Networks with State-Dependent Routing", Performance Evaluation 7(2):125-143.

      The departure center may be this node itself in a central server model. Branches follow the paper's own indexing: index 0 of the list is the unused complement M-V and must be null or empty, and entry b lists the nodes of branch b with its entry center first and its departure center last. A single-center branch is a one-element list. level[b] is the index t of the subnetwork with B_b in V_t - V_{t+1}, and level[0] is ignored.

      Negative C_t and positive d_tb make the routing prefer the least congested branches and impose the population bounds m_b <= d_tb/(-C_t) and v_t <= D_tt/(-C_t).

      Parameters:
      jobClass - the job class routed by this subnetwork
      departure - the departure center d of Q(V,V)
      branches - branch node lists, index 0 unused
      level - branch levels, index 0 unused
      C - coefficients C_t, length T
      d - coefficients d_tb, T rows by B columns
    • getStateDepRouting

      public StateDepRouting getStateDepRouting(JobClass jobClass)
      Returns the state-dependent routing structure declared for a job class.
      Parameters:
      jobClass - the job class
      Returns:
      the declared structure, or null when the class is not routed by SDR
    • setSQRouting

      public void setSQRouting(JobClass jobClass, int d)
      Configures power-of-K-choices routing for a job class.
      Parameters:
      jobClass - the job class
      d - number of randomly sampled destinations (must be >= 1)
    • setRouting

      public void setRouting(JobClass jobClass, RoutingStrategy routingStrategy, Node destination, double probability)
      Sets the routing strategy with destination and probability for a job class.
      Parameters:
      jobClass - the job class to configure routing for
      routingStrategy - the routing strategy to use
      destination - the destination node
      probability - the routing probability to this destination
    • setRouting

      public void setRouting(JobClass jobClass, RoutingStrategy routingStrategy, Object param)
      Sets a routing strategy taking a single parameter, twin of the MATLAB setRouting(class, strategy, par1) call. SQ reads the parameter as the number d of sampled destinations; every other strategy takes none, so the parameter is ignored and the strategy is declared as in setRouting(JobClass, RoutingStrategy).
      Parameters:
      jobClass - the job class to configure routing for
      routingStrategy - the routing strategy to use
      param - the strategy parameter
    • hasClassSwitching

      public boolean hasClassSwitching()
      Checks whether this node switches the class of the jobs traversing it.
      Returns:
      true when the service section is a class switcher
    • isStation

      public boolean isStation()
      Checks whether this node is a station, i.e. a node holding jobs in a queue or in service.
      Returns:
      true if this node is a Station
    • link

      public Node link(Node nodeTo)
      Links this node to another one in the model it belongs to.
      Parameters:
      nodeTo - the destination node
      Returns:
      this node, so calls can be chained
    • summary

      public void summary()
      Prints the one-line node summary, twin of MATLAB Node.summary.
    • copyElement

      protected Node copyElement()
      Returns a copy of this node, twin of the MATLAB Node.copyElement: every field is copied shallowly, then the three sections are copied so the clone can be re-wired without disturbing the original. The model handle stays shared, as it does in MATLAB.
      Returns:
      a copy of this node
    • copy

      public <T extends Copyable> T copy()
      Returns a copy of this node. Overrides the serialization-based Copyable.copy() because that one would also clone the Network reached through model; MATLAB shares the model handle instead, and copyElement() reproduces that.
      Specified by:
      copy in interface Copyable
      Returns:
      a copy of this node