You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Multilayer networks would allow to have multiple "network layers". A network layer is a part of the network with
homogenous edge inputs (the outputs of the vertices)
homogenous edge output (the inputs for the vertices)
homogeneous aggregation function for edge states [1]
For example, a AC network with u_r, u_i as edge inputs and i_r, i_ias edge outputs. Multiple network layers would allow you to define another coupling for a different part of the network, for example a DC network withuas edge inputs andi` as edge outputs.
The node indices are unique and span all network layers. In the example above, both network layers would have 6 vertices and 4 edges. However not every node needs to have a dynamic in both network layers.
Essentially, we'd need to define a layer_membership for every VertexFunction, which would probably default to (1,) for normal vertices. The vertex function interface would have the following form:
f(du, u, esum, p, t) # single membership verticesf(du, u, esum1, esum2, p, t) # vertex with membership (1, 2)f(du, u, [esum for esum in membership layers]..., p, t) # general
Additionally, we need to properly define the "public" states. Thus we need something like output_idxs(vertexf, i) which retrieves the indices of the "public"/"output" states for the given edge layer i. For example, a multilayer vertex in a mixed AC/DC network might have the state ordering
[:u_r, :u_i, :u_dc, :x1, :x2, :x3]
Thus output_idx(vf, 1) == 1:2 and output_idx(vf, 2) == 3:3 would retrieve the outputs for layers 1 and 2. The xi states are additional internal states.
I think it should be possible to code everything we need for that in a completely generic way, such that single layer vertices are just a special case of multilayer vertices with layer_membership = (1,). A "standard" NetworkDynamics object would be the same as a multilayer network which happens to have only one layer. This could be hidden for normal users by sensible defaults for layer membership and so on.
[1] Note that this aggregation function prevents us from using multilayer networks for communication purposes. For communication between vertices see #150
The text was updated successfully, but these errors were encountered:
Multilayer networks would allow to have multiple "network layers". A network layer is a part of the network with
For example, a AC network with
u_r
,u_i
as edge inputs andi_r
, i_ias edge outputs. Multiple network layers would allow you to define another coupling for a different part of the network, for example a DC network with
uas edge inputs and
i` as edge outputs.The node indices are unique and span all network layers. In the example above, both network layers would have 6 vertices and 4 edges. However not every node needs to have a dynamic in both network layers.
Essentially, we'd need to define a
layer_membership
for everyVertexFunction
, which would probably default to(1,)
for normal vertices. The vertex function interface would have the following form:Additionally, we need to properly define the "public" states. Thus we need something like
output_idxs(vertexf, i)
which retrieves the indices of the "public"/"output" states for the given edge layeri
. For example, a multilayer vertex in a mixed AC/DC network might have the state orderingThus
output_idx(vf, 1) == 1:2
andoutput_idx(vf, 2) == 3:3
would retrieve the outputs for layers 1 and 2. Thexi
states are additional internal states.I think it should be possible to code everything we need for that in a completely generic way, such that single layer vertices are just a special case of multilayer vertices with
layer_membership = (1,)
. A "standard" NetworkDynamics object would be the same as a multilayer network which happens to have only one layer. This could be hidden for normal users by sensible defaults for layer membership and so on.[1] Note that this aggregation function prevents us from using multilayer networks for communication purposes. For communication between vertices see #150
The text was updated successfully, but these errors were encountered: