- NAssets.Agent
- NAssets.Flow_Type
- NAssets.GraphModel
- NAssets.MaintenanceInfo
- NAssets.OFMessage
- NAssets.OFMessage
- NAssets.OFMessage
- NAssets.SimNE
- NAssets.SimpleAgState
- NAssets.SimpleAssetState
- NAssets.add_edges_gids!
- NAssets.add_geo_coordinates_to_graph!
- NAssets.agent_step!
- NAssets.agent_step!
- NAssets.check_create_dir!
- NAssets.clear_cache!
- NAssets.clear_pending_query!
- NAssets.config
- NAssets.controlled_sne_down!
- NAssets.create_agents!
- NAssets.create_control_agents!
- NAssets.create_csv_template
- NAssets.create_pkt
- NAssets.create_sim_asset_agents!
- NAssets.create_subgraph
- NAssets.create_subgraph
- NAssets.delete_flow!
- NAssets.deteriorate!
- NAssets.do_confidence_check!
- NAssets.do_events_step!
- NAssets.do_match!
- NAssets.do_match!
- NAssets.do_ne_down
- NAssets.do_query
- NAssets.do_query!
- NAssets.do_query!
- NAssets.do_receive_messages
- NAssets.do_rul_predictions!
- NAssets.do_update_flows_from_changes!
- NAssets.do_update_flows_from_path!
- NAssets.drop_node!
- NAssets.drop_packet!
- NAssets.exp_c
- NAssets.exp_f
- NAssets.exp_t
- NAssets.exp_ts
- NAssets.find_agent
- NAssets.forward!
- NAssets.forward!
- NAssets.generate_sensor_series
- NAssets.generate_traffic!
- NAssets.generate_ttf_series
- NAssets.get_address
- NAssets.get_ag_msg
- NAssets.get_default_config
- NAssets.get_dropping_times
- NAssets.get_edge_plot_props_step
- NAssets.get_eid
- NAssets.get_end_points
- NAssets.get_exclusions
- NAssets.get_graph
- NAssets.get_live_snes
- NAssets.get_live_snes
- NAssets.get_next_maintenance_due
- NAssets.get_random_packets_to_process
- NAssets.get_run_label
- NAssets.get_subgraph
- NAssets.get_throughput
- NAssets.get_throughput_up
- NAssets.has_prop_vertex
- NAssets.in_packet_handler
- NAssets.in_packet_processing
- NAssets.init_agent!
- NAssets.init_agent!
- NAssets.init_array_vectors
- NAssets.init_step_state!
- NAssets.initialize
- NAssets.install_flow!
- NAssets.install_flow!
- NAssets.is_in
- NAssets.is_invalid_path
- NAssets.isless_paths
- NAssets.join_subgraphs
- NAssets.lineal_d
- NAssets.link_down!
- NAssets.link_up!
- NAssets.load_base_cfgs
- NAssets.load_control_graph
- NAssets.load_graph_from_csv
- NAssets.load_network_graph
- NAssets.load_run_data
- NAssets.log_c
- NAssets.log_info
- NAssets.log_info
- NAssets.log_info
- NAssets.log_info
- NAssets.maintenance_cost
- NAssets.mark_reprocess_of_msg!
- NAssets.mnt_in_range
- NAssets.model_step!
- NAssets.next_amid!
- NAssets.next_event_time
- NAssets.next_ofmid!
- NAssets.nnoised
- NAssets.node_rejoin_handler
- NAssets.ntw_link_step!
- NAssets.pending_pkt_handler
- NAssets.plot_asset_networks
- NAssets.plot_base_map
- NAssets.plot_ctl_network_mono
- NAssets.plot_ctl_network_multi
- NAssets.plot_ctl_throughput
- NAssets.plot_empty
- NAssets.plot_geo_network
- NAssets.plot_geo_network
- NAssets.plot_geo_network_step
- NAssets.plot_geo_network_step
- NAssets.plot_packet_loss
- NAssets.plot_subg
- NAssets.plot_throughput
- NAssets.plot_tpt_step
- NAssets.plot_tpt_step
- NAssets.plotabm_networks
- NAssets.port_delete_handler
- NAssets.prepare_service_paths
- NAssets.process_msg!
- NAssets.process_route!
- NAssets.push_ep_entry!
- NAssets.push_msg!
- NAssets.push_msg!
- NAssets.push_pending!
- NAssets.query_paths
- NAssets.query_paths
- NAssets.record_active_flow!
- NAssets.record_benchmark!
- NAssets.rejoin_node!
- NAssets.remove_drop_sne!
- NAssets.route_traffic!
- NAssets.run_model
- NAssets.run_sim
- NAssets.schedule_event!
- NAssets.schedule_event!
- NAssets.score_path
- NAssets.set_down!
- NAssets.set_up!
- NAssets.single_run
- NAssets.soft_remove_vertex
- NAssets.start_mnt!
- NAssets.stop_mnt!
- NAssets.to_local_vertex
- NAssets.to_local_vertex
- NAssets.trigger_of_event!
- NAssets.trigger_random_node_drops!
- NAssets.update_addresses_removal!
- NAssets.update_maintenance_plan!
- NAssets.update_maintenance_plan!
- NAssets.values_f
- NAssets.wb_t
- NAssets.wb_ts
- NAssets.weibull_f
- NAssets.xᵩ
NAssets.Agent — TypeControl AgentNAssets.Flow_Type — TypeIndicates the type of a flow within a path
NAssets.GraphModel — TypeSupported Graphs
NAssets.MaintenanceInfo — TypeIt represents data structure for maintenance related info
NAssets.OFMessage — MethodMessage with default reason: ForwardNAssets.OFMessage — MethodMessage with no input portNAssets.OFMessage — MethodMessage with pair in dataNAssets.SimNE — TypeSimulated Physical Network ElementNAssets.SimpleAgState — TypeAgent's state, including observed state of 
monitoring/controlling assetNAssets.SimpleAssetState — Type"Real" state of the assetNAssets.add_edges_gids! — Methodadd_edges_gids(g,lv,nbs_gids,gid)
Add edges between the local vertex lv and the list of gids (global ids passed) using property gid
NAssets.add_geo_coordinates_to_graph! — MethodIt annotates the graph with the coordinates obtained from the passed file name and location (location/name.csv). Annotating the graph is just adding attributes to the MetaGraph object passed.
NAssets.agent_step! — MethodProgress control agents one step.NAssets.agent_step! — MethodProgress SimNE one step.NAssets.check_create_dir! — MethodChecks if a directory exists, otherwise create it.NAssets.clear_cache! — MethodClears cache of control agent
TODO Opportunity to investigate ways to store relevant cache rather than clearing all
NAssets.clear_pending_query! — Methodclear queries requested by sne to controller that have expired, so the same query can be requested after some time model.ofmsg_reattempt
NAssets.config — Methodconfig(bconfig)
It prepares a config object based on the plain configuration (bconfig) passed as parameter.
NAssets.controlled_sne_down! — MethodIt simulates a NE-controller link down In reality this is the routine that checks heartbeats from controlled NEs.
NAssets.create_agents! — MethodSimplest create agents
NAssets.create_control_agents! — MethodCreate control agentsNAssets.create_csv_template — MethodHelper function to create a csv file template out of a given config object passed
NAssets.create_pkt — MethodCreate a packet using arguments
NAssets.create_sim_asset_agents! — MethodCreate simulated asset agentsNAssets.create_subgraph — Methodcreate_subgraph(egs,eqv,gid_prop)
Creates a graph g (MetaGraph) for the given  edge list egs, where g represents a subgraph of a global graph. In eqv, every pair has the form: (lv,gv) where lv is the local vertex id and gv is the global vertex id. gid_prop indicates the property of g used to reference gv.
NAssets.create_subgraph — Methodcreate_subgraph(m,eqv)
Creates a graph g (MetaGraph) for the given adjacency matrix m,  where g represents a subgraph of a global graph. The vector eqv, gives the tuples: (lv,gv) where lv is the local vertex id and gv is the global vertex id.
NAssets.delete_flow! — MethodDelete all the flows that output to the given port
NAssets.deteriorate! — MethodFunction to deteriorate a network element
NAssets.do_confidence_check! — MethodCheck confindence of a path @Deprecated (for time being)
NAssets.do_events_step! — MethodIt processes scheduled events
NAssets.do_match! — MethodProcessing for MATCH_PATH msgNAssets.do_match! — MethodPrepare MATCH replyNAssets.do_ne_down — MethodIt process a msg from a neighbor controller notifying a sne is down
NAssets.do_query! — MethodQuery by neighbour control agent after receiving AGMessageNAssets.do_query! — MethodInitial query by controller receiving OF message
NAssets.do_query — MethodQuery local calculated paths and local graph
NAssets.do_receive_messages — MethodReceives inter-agent messagesNAssets.do_rul_predictions! — MethodRun RUL predictions for the assets controlled by agent $a$
NAssets.do_update_flows_from_changes! — MethodIt deals with prediction of unavailability (for a given time window) of a set of NEs under control.
NAssets.do_update_flows_from_path! — MethodUpdate flows of the snes controlled by the agent a and for the path given,
NAssets.drop_node! — MethodRemoves asset node (sne) from the network
NAssets.drop_packet! — MethodAdd to the count of dropped packets for the given sne
NAssets.exp_c — MethodDetermines criteria for valid values to TTF for
the exponential function.
    t₀: unused, defined to keep uniformity of function
        (TODO: check if this can be removed)
    t: value to evaluateNAssets.exp_f — MethodBasic implementation of exponential deterioration function
according to:
* T. Wang, J. Yu, D. Siegel, and J. Lee, “2008 International Conference on Prognostics and Health Management, PHM2008,” 
  2008 Int. Conf. Progn. Heal. Manag. PHM 2008, 2008.
  * A. Salvador Palau, M. Dhada, and A. Parlikad, “Multi-Agent System architectures for collaborative prognostics,” 
  J. Intell. Manuf., 2019.
a: max expected value of condition/health indicator (i.e. 1 if normalised)
b: curvature parameter
t: remaining time-to-failure (generally calculated with exp_t function)NAssets.exp_t — MethodCalculates remaining ttf(time-to-failure) for a given expected ttf
and current t
ttf: expected time-to-failure
t: current timeNAssets.exp_ts — MethodScales exponential function considering shifting for long term
behaviour.
ttf: expected time-to-failure
t: value to scale
d: units to shift to the right (near TTF)NAssets.find_agent — MethodFind agent in the model given the id
NAssets.forward! — MethodIt forwards packet to a host
NAssets.forward! — MethodIt forwards packet to another sne
NAssets.generate_sensor_series — MethodIt generates the sensor time series for a given asset ttf:time-to-failure ot: off-time
NAssets.generate_traffic! — MethodTraffic generation per tick #TODO Implement this function as per required
NAssets.generate_ttf_series — MethodIt illustrates how to use the other TTE functions
NAssets.get_address — MethodGiven a SimNE id it returns its ntw node address.
NAssets.get_ag_msg — MethodReturn total of control messages exchanged by agents
NAssets.get_default_config — Methodget_default_config()
It returns the default config for simulation.
NAssets.get_dropping_times — Methodreturn the times when random assets will fail according to total sim time (N), quantity (q) of assets and proportion. It receives also random
NAssets.get_edge_plot_props_step — Methodlabels is a dictionary where keys are: :tpt for througput and :up for node alive.
NAssets.get_eid — MethodGiven a ntw node address it returns the corresponding SimNE id
NAssets.get_end_points — Methodget_end_points(seed,g::G,coverage::Float64)
Given a set of paths, return the start and end vertices
NAssets.get_exclusions — MethodGet query exclusions for a given message
@DeprecatedNAssets.get_graph — Methodget_graph(seed,size,topo;k=0,B=0,adj_m_csv=nothing,sep=';')
Helper function to get underlying graph, passing either the size and topo required or the name adj_m_csv of the csv file with the adjacency matrix and the separator.
NAssets.get_live_snes — MethodReturn SNEs that are up
NAssets.get_live_snes — MethodReturn SNEs controlled by Agent a that are up
NAssets.get_next_maintenance_due — MethodNAssets.get_random_packets_to_process — MethodGet a random number of packets to be processed by a sne on a given tick defined by the sequence passed (tick + sne_id)
NAssets.get_run_label — Methodget_run_label(config)
It obtains the label for a simulation run based on the configuration parameters: config. Label is based on the graph model of the underlying controlled network and the control network, plus the size, seed and maintenance policy.
NAssets.get_subgraph — Methodget_subgraph(g,nodes,id_prop)
It generates subgraph for the vector of nodes passed. This is similar to egonet but it keeps custom indexes given in id_prop parameter.
- g: graph
- nodes: It receives vector of controlled assets (nodes)
- id_prop: could be either :eid (simNE) or :aid (agent)
NAssets.get_throughput — MethodCalculates throughput for the given trajectory
- packet/bytes trajectory 
- interval: time stepsNAssets.get_throughput_up — MethodIt filters throughput only when the given sne is up
NAssets.has_prop_vertex — Methodhas_prop_vertex(value,g,prop)
Check if vertex of the given graph g has property prop with value value.
NAssets.in_packet_handler — Methodmsg: SimNE.id, in_port, DPacket
NAssets.in_packet_processing — MethodPacket processing per tick per agentNAssets.init_agent! — MethodInitialise control agents
NAssets.init_agent! — MethodInitialise sne agents
NAssets.init_array_vectors — MethodInitialize an array of dimensions d1 x d2 that contains vectors of type TNAssets.init_step_state! — MethodInitialise state of model for a given stepNAssets.initialize — MethodBasic initialization
NAssets.install_flow! — FunctionFunction that makes a control agent trigger a flow install in the sneNAssets.install_flow! — MethodInstall the given flow in the sne. I t does not check if the flow is valid (the port is available), as this flow could be installed for the future.
NAssets.is_in — MethodHelper function that checks if x value is in vector V
NAssets.is_invalid_path — MethodCheck if path is invalid according to local knowledge. It does not mean is valid as this agent might not have all info to check validity. Only flags invalid if 100% sure. cnes:controlled nes by this agent (a)
NAssets.isless_paths — Methodisless_paths(a,b)
Used to compare and ordering tuples of paths where tuples is of the form (tick,score)
NAssets.join_subgraphs — Methodjoin_subgraphs(g1,g2)
It joins two subgraphs assuming they are both part of a global graph. The id in the global graph is given by property :eid.
NAssets.lineal_d — MethodLinear degradation m: degradation slope b: expected life t: current time
NAssets.link_down! — MethodIt simulates operations happening in a network asset when the link corresponding to the given dpnid goes down. sne is up and node went down is dpnid.
NAssets.link_up! — MethodIt simulates operations happening in a network asset when the link corresponding to the given rjnid rejoins. sne is up and node re-joining is rjnid.
NAssets.load_base_cfgs — Methodload_base_cfgs
It loads the simulation config parameters from csv file which location and name is passed. I passes a list with delimiters (delims) used in the file from outer, to inner. Default=[';',',']
NAssets.load_control_graph — Methodload_control_graph(graph::MetaGraph)
It Loads(initialises) the graph of the control system
NAssets.load_graph_from_csv — Methodloadgraphfrom_csv
This function loads a graph from csv file containing the adjacency matrix of the graph. The file location and name is passed as argument (location/name.csv) together with the separator used in the csv e.g. ';' or ','.
NAssets.load_network_graph — Methodload_network_graph(graph::MetaGraph)
It loads (initialise) the graph of the network to control
NAssets.load_run_data — MethodIt loads serialised data for all the runs in the passed directory
NAssets.log_c — MethodDetermines criteria for valid values to TTF for
the logistics function.
    t₀: initial value for the cycle/phase
    t: value to evaluateNAssets.log_info — Methodlogs only for a given agent
NAssets.log_info — Methodlogs an info msg for tick and agent_id passed
NAssets.log_info — Methodlogs an info msg for tick passedNAssets.log_info — MethodLog info msg
NAssets.maintenance_cost — MethodMaintenance cost at a given time step:
rul_mnt: rul of an asset (sne) of the network that is undergoing maintenance. If rul == 0., then it is corrective maintenance, if rul > 0, then it is preventive maintenance. Otherwise (-1) no maintenance ongoing.
is_start: indicates if maintenance has just started so time-independent costs are added
is_active: indicates if the asset was active in the network before maintenance started, i.e. was part of an active flow.
dt_cost: downtime cost, cost of service flow/production loss per time step, time-dependent. Added when corrective maintenance.
l_cost: labour cost per time step, time-dependent.
p_cost: parts costs for maintenance regardless of the time it takes, time-independent, only added when maintenance starts.
r_cost: cost of loss of remaining life. Added when preventive maintenance.
NAssets.mark_reprocess_of_msg! — MethodWhen a solution is received for a query it marks the pending msg so it can be reprocessed in the next tick
NAssets.mnt_in_range — MethodReturn mnt jobs in a given range for the passed plan
NAssets.model_step! — MethodIt advance model one step. Agents are progressed here to ensure that one action is perform in
all agents before the next action is performed in all agents, instead of having one action
executed in some agents and then some start with second action.NAssets.next_amid! — MethodNext agent message's idNAssets.next_event_time — MethodIt returns the next event time for a given random number and rate of events
NAssets.next_ofmid! — MethodNext Open Flow message idNAssets.nnoised — MethodAdd random normally distributed noise to a given value. Ensures that always: 0 ⋜ v + ϵ ⋜ y, for a random noise ϵ.
v: original value without noise
ϵₛ: noise standard deviation
ϵ₀: noise μ
y:  max value the noised value can takeNAssets.node_rejoin_handler — MethodIt handles msg from sne when a neighbor sne has rejoined the underlying network.
NAssets.ntw_link_step! — MethodThis function progresses one step each link of the sne network.
NAssets.pending_pkt_handler — MethodIt enqueues packets that were not processed in 
previous time steps. It discard packets according to defined size of the queue.NAssets.plot_asset_networks — MethodPlots the underlying controlled network
NAssets.plot_base_map — MethodPlots the bare base map using the shp file passed
NAssets.plot_ctl_network_mono — MethodPlots a single agent control network
NAssets.plot_ctl_network_multi — MethodPlots a multiagent control network
NAssets.plot_ctl_throughput — MethodPlots message exchange among control agents
NAssets.plot_empty — MethodPlots an empty placeholder
NAssets.plot_geo_network — MethodPlot network on top of the given geo plot passedNAssets.plot_geo_network — MethodPlot network on top of the given geo plot passedNAssets.plot_geo_network_step — MethodIt plots one step at a time, receiving all steps in a vector of vector of NetworkAssetState
NAssets.plot_geo_network_step — MethodIt plots one step at a time, receiving all steps in a DataFrame with data coming from NetworkAssetState
NAssets.plot_packet_loss — MethodPlots packet loss of the underlying controlled network
NAssets.plot_subg — MethodPlots a subgraph that is part of a greater one global ids in property :eid.
NAssets.plot_throughput — MethodPlots throughput of the underlying controlled network
NAssets.plot_tpt_step — MethodIt plots throughput and reference for one step of an animation of t timesteps
NAssets.plot_tpt_step — MethodIt plots throughput for one step of an animation of t timesteps
NAssets.plotabm_networks — MethodMain plotting function calls others
NAssets.port_delete_handler — MethodIt processes OF msg sent by controlled NE  to
remove a given port from its graph
This is done by the agent controlling the neighbour of a dropped nodeNAssets.prepare_service_paths — MethodFunction that prepare serialised time series of control agents for plotting
NAssets.process_msg! — MethodProcesses msgs to SimNE
NAssets.process_route! — MethodIt processes a route received from optimisation algorithm
NAssets.push_ep_entry! — MethodPush a new port edge pair
NAssets.push_msg! — Methodpush OF message to from simulated host to dst SimNENAssets.push_msg! — Methodpush OF message to from src SimNE to dst SimNENAssets.push_pending! — MethodIt records messages pending to process in a given tick
NAssets.query_paths — Methodquery_paths(lg,s,d)
A wrapper of the Julia Graph ecosystem shortest_paths functions. It searches for a path between nodes with global id (eid) s and  d in the local graph lg. It assumes property :eid of each vertex is global id of vertex
NAssets.query_paths — Methodquery_paths(lg,t)
Path search in local graph lg, receiving source s and destination d in a tuple t, such as t:(s,d).
NAssets.record_active_flow! — MethodIt records active flow for reporting active pathNAssets.record_benchmark! — MethodRecords benchmark for a query
NAssets.rejoin_node! — MethodRejoin node to network according to
- base_network
- current_network
- rejoining node id
NAssets.remove_drop_sne! — MethodIt removes a dropped sne node from local paths and graphNAssets.route_traffic! — MethodIt routes packets according to installed flow rules. There could be rules that are not valid in the current time step but will be valid later.
NAssets.run_model — MethodSimple run model function
NAssets.run_sim — Methodrun_sim(config)
Based on config parameters received it creates objects required to trigger simulation run. 
NAssets.schedule_event! — MethodSchedules an event of type $type$ on the given agent $a$ at time $time$, affecting the snes with ids: $snes$.
NAssets.schedule_event! — MethodSchedules an event of type $type$ on the given agent $a$ at time $time$.
NAssets.score_path — Methodscore_path(path)
Wrapper the path score function. It gives a score to the given path, initially only based on length of path
NAssets.set_down! — MethodSet controller agent down
NAssets.set_up! — MethodSet controller agent up
NAssets.single_run — Methodsingle_run(config) -> ctl_ags,ne_ags,model
It runs a single simulation with the passed configuration, returning simulation data in ctl_ags,ne_ags,model. Optionally logging to a  file if parameter log_to_file set to true.
NAssets.soft_remove_vertex — Methodsoft_remove_vertex(g::AbstractGraph,dpn_id::Int)
Given the graph g, this function creates a deep copy of g and removes all the edges of the vertex whose global id (eid) is dpn_id and returns the new graph. The vertex whose id is dpn_id is only disconnected from the graph.
NAssets.start_mnt! — Methodstart_mnt!(a::Agent,sne::SimNE,model::ABM)
It simulates start of maintenance.
NAssets.stop_mnt! — Methodstop_mnt!(a::Agent,sne::SimNE,model::ABM)
It simulates completion of maintenance, refilling RUL and rejoining asset to the network.
NAssets.to_local_vertex — Methodto_local_vertex(lg,gv,gid)
It obtains the local id of a vertex in graph lg given its global gv in property in gid
NAssets.to_local_vertex — Methodto_local_vertex(lg,eid)
It obtains id of vertex in a local graph lg given vertex's global eid set to property :eid
NAssets.trigger_of_event! — MethodA controller agent is notified of an event happening in the controlled element
NAssets.trigger_random_node_drops! — MethodTriggers random failures on active nodes. This function is coupled to the model as it detects nodes that are active and make sure disruption happen to some of those nodes. If decoupled, cleaner, but then requires to know in advance what paths are used at every time, to make sure that dropping nodes are always active.
NAssets.update_addresses_removal! — MethodUpdate (ntw node) addresses of SimNE agents after removal of a given SimNE
NAssets.update_maintenance_plan! — Methodupdate_maintenance_plan!(a::Agent,mnt_policy::Type{PreventiveM},model::ABM)
It schedules maintenance events (start/stop maintenance) for assets under control of a that are configured with preventive or predictive mnt_policy
NAssets.update_maintenance_plan! — Methodupdate_maintenance_plan!(a::Agent,mnt_policy::Type{PreventiveM},model::ABM)
It schedules maintenance events (start/stop maintenance) for assets under control of a that are configured with predictive mnt_policy with maintenance planning running in python.
NAssets.values_f — MethodGenerates the time series until failure of an asset, given 
the provided parameters:
ttf: expected time-to-failure
n: maximum number of cycles the asset can last
Δᵩ: Delta of number of time steps that are reduced as the asset
    reaches a new cycle/phase
ϵₛ: Standard deviation of the gaussian noise 
f: function to generate values until ttf
params: params required by the f
tsf: function to scale t for the given function
tse: extra parameter required by tsf
f_c: function that defines criteria for a valid value in the time series.NAssets.wb_t — MethodWeibull scaling function ttf: expected time-to-failure γ: factor to tune max y (yₙ) value, e.g. for max y=1, with ttf =100, λ=0.5, κ=05 => γ=8
TODO: check if γ might be calculated from ttf, λ and κ
NAssets.wb_ts — MethodScales weibull input t value considering shifting 
for long term behaviour
ttf: expected time-to-failure
γ: factor to tune max y (yₙ) value, e.g. for max y=1, with ttf =100,
λ=0.5, κ=05 => γ=8
d: units to shift to the right (near TTF)NAssets.weibull_f — MethodBasic implementation of Weibull function with 2-parameters
κ: shape parameter, κ > 0
λ: scale parameter, λ > 0
t: current time (generally calculated with wb_t function)NAssets.xᵩ — MethodIntroduces a variation on the x value according to the phase (ϕ) Used concretely for long-term TTF, we assume: * An asset has expected TTF (x) * After TTF the asset can be repaired or maintained and then will operate for a number of cycles/phases. * The current cycle/phase is given by ϕ * After every phase ϕ, the asset reduces its TTF by Δᵩ