-
Notifications
You must be signed in to change notification settings - Fork 65
Mutable connection table #1919
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mutable connection table #1919
Conversation
It's great to see this functionality in! Some queries about the API:
|
Good questions, I'll answer the easy one first (2) Regarding the edit command approach, I wanted to reach for that first. However the code for building the actual table There's a additional wrinkle though: What if connectivity is random? Resetting the pRNG helps, but might not be sufficient |
Regarding spikes in flight: This is really a question of what we believe is correct, ensuring this happens, and then documenting it. My gut instinct says they can just be delivered, since they have been injected into a working connection Additionally I expect that usually a connection will decay smoothly in time rather than just being turned from |
On the rebuilding connection tables front, the cheapest solution for an edit-based approach is to just allow changes to weights, not topology. This would mean all potential connections need to be declared in the original recipe, with weights set to zero as appropriate, but given that modifying the model to permit new sources and targets is a whole different and larger kettle of fish, I don't think that's necessarily a severe restriction. Connections would be identified by an associated connection-specific key or label that's attached when they are described in the recipe; an edit would be something like: modify (e.g. assign, or scale, or, add a delta) weight on connections matching filter (at simplest: with a given label) by or from a given value. |
For random things: we have to be sure that every 'random' sequence is essentially functional in specification, with the possibility that some of the parameters of that function corresponding to seeds or stream identifiers might be implicit. If new random connections are required, they will have to be pulled from a different random sequence (identified by a stream id) or be a different segment of the same random sequence. But we can do all that without exposing R123 itself through the interface. |
Declaring all potential connections has been considered, but obviously grows like O(N^2) in the number of cells, |
It would be all potential connections given the biological model; it might grow as O(N^2) for small N, where every neuron is 'close enough' to every other neuron, but it should still be O(N) for large models. Extra traffic would only arise in the cases where a source has all of its potential targets with zero weights (i.e. connected to nothing at all); not creating events with zero weight at the delivery side of things would be the optimization. |
Hmm, about that for a compromise (fixing the perfectly valid ontological concerns): I factor out the rebuildable parts into |
This could be a good solution! Would you be modifying the recipe interface? (e.g. to inherit from a connection-set-specifying interface which captures connections_on and maybe gap_junctions_on?) |
I am not going to inflict Alexandrescu-style policy template aggregation on our users ;)
Note that 2. is essentially 1. in disguise, but leaves the aggregation to the actual classes.
|
- Remove MPI from examples - Add Py/CXX examples to auto-run queue - Update readmes - Update docs to mention `topping`c
Note that For the rest: I added some definitions. |
Anything still amiss @brenthuisman @lukasgd |
on all MPI ranks using ``Allgatherv`` and targets are responsible for selecting | ||
events they have subscribed to. This is optimised for by sorting events locally | ||
(by source) and relying on the process layout to convert this into a *globally* | ||
sorted array. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The second heading (Exchange of Spikes) shows an implementation for communicator::exchange
, not a description of a communicator
. The struct is shown much further down, line 205. I think it's easier to follow this text if people are aware of what it contains up front.
Add functionality, docs, and examples on editing the connection table. This is a first, small PR
on the topic, further functionality will come as requested.
Teaser example
Update July '22
topping
until further notice)recipes
aretoppings
via inheritance