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 Agent
NAssets.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: Forward
NAssets.OFMessage
— MethodMessage with no input port
NAssets.OFMessage
— MethodMessage with pair in data
NAssets.SimNE
— TypeSimulated Physical Network Element
NAssets.SimpleAgState
— TypeAgent's state, including observed state of
monitoring/controlling asset
NAssets.SimpleAssetState
— Type"Real" state of the asset
NAssets.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 agents
NAssets.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 agents
NAssets.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 msg
NAssets.do_match!
— MethodPrepare MATCH reply
NAssets.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 AGMessage
NAssets.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 messages
NAssets.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 evaluate
NAssets.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 time
NAssets.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
@Deprecated
NAssets.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
: graphnodes
: 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 steps
NAssets.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 agent
NAssets.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 T
NAssets.init_step_state!
— MethodInitialise state of model for a given step
NAssets.initialize
— MethodBasic initialization
NAssets.install_flow!
— FunctionFunction that makes a control agent trigger a flow install in the sne
NAssets.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 evaluate
NAssets.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 passed
NAssets.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 id
NAssets.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 id
NAssets.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 take
NAssets.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 passed
NAssets.plot_geo_network
— MethodPlot network on top of the given geo plot passed
NAssets.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 node
NAssets.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 SimNE
NAssets.push_msg!
— Methodpush OF message to from src SimNE to dst SimNE
NAssets.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 path
NAssets.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 graph
NAssets.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 Δᵩ