Package jline.lang

Class Environment

All Implemented Interfaces:
Serializable, Copyable
Direct Known Subclasses:
Env

public class Environment extends Ensemble
An environment model defined by a collection of network sub-models coupled with an environment transition rule that selects the active sub-model.
See Also:
  • Field Details

  • Constructor Details

    • Environment

      public Environment(String name)
    • Environment

      public Environment(String name, int numStages)
  • Method Details

    • addStage

      public void addStage(int stageIdx, String name, String type, Model model)
      Adds a network model to a specific stage of the environment. All stages must have networks with the same number of stateful nodes.
      Parameters:
      stageIdx - the index of the stage (0-based)
      name - the name of this stage
      type - the type classification for this stage
      model - the network model to associate with this stage
      Throws:
      RuntimeException - if the model has a different number of stateful nodes than other stages
    • getStageModels

      public Model[] getStageModels()
      Stage models by absolute index; may hold Network or LayeredNetwork.
    • addTransition

      public void addTransition(int fromStageIdx, int toStageIdx, Distribution distrib)
      Adds a transition between two stages with default reset function (identity).
      Parameters:
      fromStageIdx - the source stage index
      toStageIdx - the destination stage index
      distrib - the distribution governing this transition: a COMPETING arc, i.e. a latent clock started on entry to the stage, the first of the stage's clocks to ring picking the destination. A non-Markovian law makes the environment semi-Markov, which only SolverENV method 'smp' solves.
    • addTransition

      public void addTransition(int fromStageIdx, int toStageIdx, Distribution distrib, Environment.ResetQueueLengthsFunction resetFun)
      Adds a transition between two stages with a custom reset function.
      Parameters:
      fromStageIdx - the source stage index
      toStageIdx - the destination stage index
      distrib - the distribution governing this transition (a competing arc)
      resetFun - function to apply when transitioning to reset queue lengths
    • addTransition

      public void addTransition(int fromStageIdx, int toStageIdx, Distribution distrib, Environment.ResetQueueLengthsFunction resetFun, Environment.ResetEnvRatesFunction resetEnvRatesFun)
      Adds a transition between two stages with custom reset functions for both queue lengths and environment rates.
      Parameters:
      fromStageIdx - the source stage index
      toStageIdx - the destination stage index
      distrib - the distribution governing this transition (a competing arc)
      resetFun - function to apply when transitioning to reset queue lengths
      resetEnvRatesFun - function to apply when transitioning to reset environment rates
    • addKernelTransition

      public void addKernelTransition(int fromStageIdx, int toStageIdx, double prob, Distribution distrib)
      Adds a KERNEL arc of the semi-Markov kernel Q(e,h,t) = prob * distrib(t): on entry to the source stage the next stage is the destination with probability prob, and the sojourn is then distributed as distrib. This is the sojourn-time parameterization (Approach I of Asanjarani et al.), beside addTransition's competing clocks (Approach II). A stage's arcs must be all kernel or all competing, and the probabilities of a kernel stage must sum to one. Only SolverENV method 'smp' solves an environment with kernel arcs.
      Parameters:
      fromStageIdx - the source stage index
      toStageIdx - the destination stage index
      prob - the probability of the transition, in (0,1]
      distrib - the conditional sojourn law of a visit that ends in the destination
    • addKernelTransition

      public void addKernelTransition(int fromStageIdx, int toStageIdx, double prob, Distribution distrib, Environment.ResetQueueLengthsFunction resetFun)
      Adds a kernel arc with a custom queue-length reset function; see addKernelTransition(int, int, double, Distribution).
    • addKernelTransition

      public void addKernelTransition(int fromStageIdx, int toStageIdx, double prob, Distribution distrib, Environment.ResetQueueLengthsFunction resetFun, Environment.ResetEnvRatesFunction resetEnvRatesFun)
      Adds a kernel arc with custom queue-length and environment-rate reset functions; see addKernelTransition(int, int, double, Distribution).
    • isKernelStage

      public boolean isKernelStage(int e)
      True if stage e's arcs are kernel arcs (addKernelTransition).
    • isSemiMarkovStage

      public boolean isSemiMarkovStage(int e)
      True if stage e's holding time has no Markovian (MAP) form: kernel arcs, or a competing non-Markovian arc.
    • isAbsorbingStage

      public boolean isAbsorbingStage(int e)
      True if stage e has no outgoing transition: once entered, the environment stays there, with infinite holding time.
    • isSemiMarkov

      public boolean isSemiMarkov()
      True if any stage is semi-Markov.
    • getStageArcs

      public Distribution[] getStageArcs(int e)
      The transitions out of stage e in the form Smp_stage_cif takes: element h is the law of e->h or null where there is none (the self arc excluded).
    • getStageKernelProbs

      public double[] getStageKernelProbs(int e)
      The kernel probabilities of stage e, or null for a competing stage. Validates that the stage does not mix kernel and competing arcs and that its probabilities sum to one.
    • holdTimeCdf

      public double[] holdTimeCdf(int e, double[] t)
      CDF of the holding time of stage e at the instants t (after init): the MAP of a Markovian stage, the arc race or kernel mixture of a semi-Markov one.
    • holdTimeMean

      public double holdTimeMean(int e)
      Mean holding time of stage e (after init).
    • getSmpArcs

      public Distribution[] getSmpArcs(int e)
      The arcs of semi-Markov stage e as Smp_stage_cif takes them, or null for a Markovian stage (after init).
    • getSmpProbs

      public double[] getSmpProbs(int e)
      The kernel probabilities of semi-Markov stage e, or null for a competing or Markovian one (after init).
    • init

      public void init()
    • printStageTable

      public void printStageTable()
      Prints a formatted table showing all stages, their properties, and transitions. Displays stage names, types, associated networks, and transition rates.
    • findStageByName

      public int findStageByName(String stageName)
      Finds the stage index by name.
      Parameters:
      stageName - the name of the stage to find
      Returns:
      the index of the stage, or -1 if not found
    • getStageName

      public String getStageName(int stageIdx)
      Gets the name of the stage at the given index.
      Parameters:
      stageIdx - the index of the stage (0-based)
      Returns:
      the name of the stage
      Throws:
      ArrayIndexOutOfBoundsException - if stageIdx is out of range
    • getStageType

      public String getStageType(int stageIdx)
      Gets the type classification of the stage at the given index.
      Parameters:
      stageIdx - the index of the stage (0-based)
      Returns:
      the type of the stage, or an empty string when none was declared
      Throws:
      ArrayIndexOutOfBoundsException - if stageIdx is out of range
    • getNumberOfStages

      public int getNumberOfStages()
      Gets the number of stages in this environment.
      Returns:
      the number of stages
    • addNodeBreakdown

      public void addNodeBreakdown(Network baseModel, String nodeName, Markovian breakdownDist, Markovian downServiceDist)
      Adds a breakdown stage for a specific node in the network. This creates an UP stage (if not already present) and a DOWN stage where the specified node has a reduced service rate. A transition from UP to DOWN is added with the given breakdown distribution.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      nodeName - the name of the node that can break down
      breakdownDist - the distribution for time until breakdown (UP->DOWN transition)
      downServiceDist - the service distribution when the node is down
      Throws:
      RuntimeException - if the node is not found in the base model
    • addNodeBreakdown

      public void addNodeBreakdown(Network baseModel, Node node, Markovian breakdownDist, Markovian downServiceDist)
      Adds a breakdown stage for a specific node in the network. Overload that accepts a Node object instead of a node name.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      node - the node that can break down
      breakdownDist - the distribution for time until breakdown (UP->DOWN transition)
      downServiceDist - the service distribution when the node is down
    • addNodeBreakdown

      public void addNodeBreakdown(Network baseModel, String nodeName, Markovian breakdownDist, Markovian downServiceDist, Environment.ResetQueueLengthsFunction resetFun)
      Adds a breakdown stage for a specific node with a custom reset policy.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      nodeName - the name of the node that can break down
      breakdownDist - the distribution for time until breakdown
      downServiceDist - the service distribution when the node is down
      resetFun - function to reset queue lengths on breakdown
    • addNodeBreakdown

      public void addNodeBreakdown(Network baseModel, Node node, Markovian breakdownDist, Markovian downServiceDist, Environment.ResetQueueLengthsFunction resetFun)
      Adds a breakdown stage for a specific node with a custom reset policy. Overload that accepts a Node object instead of a node name.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      node - the node that can break down
      breakdownDist - the distribution for time until breakdown
      downServiceDist - the service distribution when the node is down
      resetFun - function to reset queue lengths on breakdown
    • addNodeBreakdown

      public void addNodeBreakdown(Network baseModel, String nodeName, Markovian breakdownDist, Markovian downServiceDist, String resetPolicy)
      Adds a breakdown with a named reset policy.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      nodeName - the name of the node that can break down
      breakdownDist - the distribution for time until breakdown
      downServiceDist - the service distribution when the node is down
      resetPolicy - named reset policy, "keep" or "clear"
    • addNodeBreakdown

      public void addNodeBreakdown(Network baseModel, Node node, Markovian breakdownDist, Markovian downServiceDist, String resetPolicy)
      Adds a breakdown with a named reset policy. Overload that accepts a Node object instead of a node name.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      node - the node that can break down
      breakdownDist - the distribution for time until breakdown
      downServiceDist - the service distribution when the node is down
      resetPolicy - named reset policy, "keep" or "clear"
    • addNodeRepair

      public void addNodeRepair(String nodeName, Markovian repairDist)
      Adds a repair transition from DOWN to UP stage for a previously added breakdown.
      Parameters:
      nodeName - the name of the node that can be repaired
      repairDist - the distribution for repair time (DOWN->UP transition)
      Throws:
      RuntimeException - if the DOWN stage for this node is not found
    • addNodeRepair

      public void addNodeRepair(String nodeName, Markovian repairDist, String resetPolicy)
      Adds a repair transition with a named reset policy.
      Parameters:
      nodeName - the name of the node that can be repaired
      repairDist - the distribution for repair time
      resetPolicy - named reset policy, "keep" or "clear"
    • addNodeRepair

      public void addNodeRepair(Node node, Markovian repairDist, String resetPolicy)
      Adds a repair transition with a named reset policy. Overload that accepts a Node object instead of a node name.
      Parameters:
      node - the node that can be repaired
      repairDist - the distribution for repair time
      resetPolicy - named reset policy, "keep" or "clear"
    • addNodeRepair

      public void addNodeRepair(Node node, Markovian repairDist)
      Adds a repair transition from DOWN to UP stage for a previously added breakdown. Overload that accepts a Node object instead of a node name.
      Parameters:
      node - the node that can be repaired
      repairDist - the distribution for repair time (DOWN->UP transition)
    • addNodeRepair

      public void addNodeRepair(String nodeName, Markovian repairDist, Environment.ResetQueueLengthsFunction resetFun)
      Adds a repair transition with a custom reset policy.
      Parameters:
      nodeName - the name of the node that can be repaired
      repairDist - the distribution for repair time
      resetFun - function to reset queue lengths on repair
    • addNodeRepair

      public void addNodeRepair(Node node, Markovian repairDist, Environment.ResetQueueLengthsFunction resetFun)
      Adds a repair transition with a custom reset policy. Overload that accepts a Node object instead of a node name.
      Parameters:
      node - the node that can be repaired
      repairDist - the distribution for repair time
      resetFun - function to reset queue lengths on repair
    • addNodeFailureRepair

      public void addNodeFailureRepair(Network baseModel, String nodeName, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist)
      Convenience method to add both breakdown and repair for a node. This is the most common use case where a node can fail and be repaired.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      nodeName - the name of the node that can break down and repair
      breakdownDist - the distribution for time until breakdown
      repairDist - the distribution for repair time
      downServiceDist - the service distribution when the node is down
    • addNodeFailureRepair

      public void addNodeFailureRepair(Network baseModel, String nodeName, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist, String resetBreakdown, String resetRepair)
      Adds both breakdown and repair for a node with named reset policies.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      nodeName - the name of the node that can break down and repair
      breakdownDist - the distribution for time until breakdown
      repairDist - the distribution for repair time
      downServiceDist - the service distribution when the node is down
      resetBreakdown - named breakdown reset policy, "keep" or "clear"
      resetRepair - named repair reset policy, "keep" or "clear"
    • addNodeFailureRepair

      public void addNodeFailureRepair(Network baseModel, Node node, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist, String resetBreakdown, String resetRepair)
      Adds both breakdown and repair for a node with named reset policies. Overload that accepts a Node object instead of a node name.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      node - the node that can break down and repair
      breakdownDist - the distribution for time until breakdown
      repairDist - the distribution for repair time
      downServiceDist - the service distribution when the node is down
      resetBreakdown - named breakdown reset policy, "keep" or "clear"
      resetRepair - named repair reset policy, "keep" or "clear"
    • addNodeFailureRepair

      public void addNodeFailureRepair(Network baseModel, Node node, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist)
      Convenience method to add both breakdown and repair for a node. Overload that accepts a Node object instead of a node name.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      node - the node that can break down and repair
      breakdownDist - the distribution for time until breakdown
      repairDist - the distribution for repair time
      downServiceDist - the service distribution when the node is down
    • addNodeFailureRepair

      public void addNodeFailureRepair(Network baseModel, String nodeName, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist, Environment.ResetQueueLengthsFunction resetBreakdown, Environment.ResetQueueLengthsFunction resetRepair)
      Adds both breakdown and repair for a node with custom reset policies.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      nodeName - the name of the node that can break down and repair
      breakdownDist - the distribution for time until breakdown
      repairDist - the distribution for repair time
      downServiceDist - the service distribution when the node is down
      resetBreakdown - reset function for breakdown transition
      resetRepair - reset function for repair transition
    • addNodeFailureRepair

      public void addNodeFailureRepair(Network baseModel, Node node, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist, Environment.ResetQueueLengthsFunction resetBreakdown, Environment.ResetQueueLengthsFunction resetRepair)
      Adds both breakdown and repair for a node with custom reset policies. Overload that accepts a Node object instead of a node name.
      Parameters:
      baseModel - the base network model with normal (UP) service rates
      node - the node that can break down and repair
      breakdownDist - the distribution for time until breakdown
      repairDist - the distribution for repair time
      downServiceDist - the service distribution when the node is down
      resetBreakdown - reset function for breakdown transition
      resetRepair - reset function for repair transition
    • setBreakdownResetPolicy

      public void setBreakdownResetPolicy(String nodeName, Environment.ResetQueueLengthsFunction resetFun)
      Sets the reset policy for queue lengths when a node breaks down.
      Parameters:
      resetFun - function to reset queue lengths: resetFun(q) -> q_new Common policies: - input -> input (keep all jobs, default) - input -> input.mult(0, null) (clear all queues)
      Throws:
      RuntimeException - if the breakdown transition is not found
    • setBreakdownResetPolicy

      public void setBreakdownResetPolicy(Node node, Environment.ResetQueueLengthsFunction resetFun)
      Sets the reset policy for queue lengths when a node breaks down. Overload that accepts a Node object instead of a node name.
      Parameters:
      resetFun - function to reset queue lengths: resetFun(q) -> q_new
    • setBreakdownResetPolicy

      public void setBreakdownResetPolicy(String nodeName, String resetPolicy)
      Sets a named reset policy for queue lengths when a node breaks down.
      Parameters:
      resetPolicy - named reset policy, "keep" or "clear"
    • setBreakdownResetPolicy

      public void setBreakdownResetPolicy(Node node, String resetPolicy)
      Sets a named reset policy for queue lengths when a node breaks down. Overload that accepts a Node object instead of a node name.
      Parameters:
      resetPolicy - named reset policy, "keep" or "clear"
    • setRepairResetPolicy

      public void setRepairResetPolicy(String nodeName, Environment.ResetQueueLengthsFunction resetFun)
      Sets the reset policy for queue lengths when a node is repaired.
      Parameters:
      resetFun - function to reset queue lengths: resetFun(q) -> q_new
      Throws:
      RuntimeException - if the repair transition is not found
    • setRepairResetPolicy

      public void setRepairResetPolicy(Node node, Environment.ResetQueueLengthsFunction resetFun)
      Sets the reset policy for queue lengths when a node is repaired. Overload that accepts a Node object instead of a node name.
      Parameters:
      resetFun - function to reset queue lengths: resetFun(q) -> q_new
    • setRepairResetPolicy

      public void setRepairResetPolicy(String nodeName, String resetPolicy)
      Sets a named reset policy for queue lengths when a node is repaired.
      Parameters:
      resetPolicy - named reset policy, "keep" or "clear"
    • setRepairResetPolicy

      public void setRepairResetPolicy(Node node, String resetPolicy)
      Sets a named reset policy for queue lengths when a node is repaired. Overload that accepts a Node object instead of a node name.
      Parameters:
      resetPolicy - named reset policy, "keep" or "clear"
    • getReliabilityTable

      public Map<String,Double> getReliabilityTable()
      Computes system-wide reliability metrics (MTTF, MTTR, MTBF, Availability). Analyzes the breakdown/repair transitions configured using addNodeBreakdown() and addNodeRepair() to compute reliability metrics.
      Returns:
      a Map containing reliability metrics with keys: "MTTF" - Mean Time To Failure (time from UP to DOWN) "MTTR" - Mean Time To Repair (time from DOWN to UP) "MTBF" - Mean Time Between Failures (MTTF + MTTR) "Availability" - Steady-state probability of being in UP state
      Throws:
      RuntimeException - if the environment has not been initialized or if no breakdown/repair transitions are configured
    • relT

      public Map<String,Double> relT()
      Short alias for getReliabilityTable.
      Returns:
      a Map containing reliability metrics (MTTF, MTTR, MTBF, Availability)
      See Also:
    • getRelT

      public Map<String,Double> getRelT()
      Short alias for getReliabilityTable.
      Returns:
      a Map containing reliability metrics (MTTF, MTTR, MTBF, Availability)
      See Also:
    • relTable

      public Map<String,Double> relTable()
      Short alias for getReliabilityTable.
      Returns:
      a Map containing reliability metrics (MTTF, MTTR, MTBF, Availability)
      See Also:
    • getRelTable

      public Map<String,Double> getRelTable()
      Short alias for getReliabilityTable.
      Returns:
      a Map containing reliability metrics (MTTF, MTTR, MTBF, Availability)
      See Also:
    • resolveResetPolicy

      public static Environment.ResetQueueLengthsFunction resolveResetPolicy(String policyName)
      Resolves a named queue-length reset policy into its function.
      Parameters:
      policyName - "keep" (identity) or "clear" (empty the queues), case-insensitive
      Returns:
      the reset function implementing the policy
      Throws:
      RuntimeException - if the policy name is not recognised
    • keepResetPolicy

      public static Environment.ResetQueueLengthsFunction keepResetPolicy()
      Returns:
      the reset function of the "keep" policy: the queue lengths are unchanged
    • clearResetPolicy

      public static Environment.ResetQueueLengthsFunction clearResetPolicy()
      Returns:
      the reset function of the "clear" policy: all queues are emptied
    • getNodeFailures

      public List<Environment.NodeFailure> getNodeFailures()
      Returns:
      the node breakdown/repair descriptors recorded on this environment
    • findNodeFailure

      public int findNodeFailure(String nodeName)
      Finds the node-failure descriptor for a node.
      Returns:
      the index of the descriptor, or -1 when absent
    • registerNodeFailure

      public void registerNodeFailure(String nodeName, Markovian breakdownDist, Markovian repairDist, Markovian downServiceDist, String breakdownPolicy, String repairPolicy)
      Attaches a node breakdown/repair descriptor to stages that already exist. This is the counterpart of addNodeBreakdown/addNodeRepair for the case where the UP and DOWN_<node> stages and their transitions have already been built (for instance by LineModelIO reading the expanded stages/transitions form). It records the descriptor and applies the queue-length reset policies, which the expanded form cannot carry.
      Parameters:
      nodeName - the node that breaks down
      breakdownDist - the time-to-breakdown distribution
      repairDist - the repair-time distribution, or null when no repair is defined
      downServiceDist - the service distribution while down
      breakdownPolicy - named breakdown reset policy ("keep" or "clear")
      repairPolicy - named repair reset policy ("keep" or "clear")
    • getStageTable

      public String getStageTable()
      Returns a table of stage information for this environment. Matches MATLAB Environment.getStageTable() which returns a Table with columns: Stage, Name, Type, Prob, HoldT, Model.
      Returns:
      a formatted string table of stage information
    • getStageT

      public String getStageT()
      Short alias for getStageTable.
      Returns:
      a formatted string table of stage information
      See Also: