Giter Site home page Giter Site logo

Comments (3)

jajcayn avatar jajcayn commented on May 23, 2024

Hey!
After digging really deep into the code, I managed to find out the solution on three out of the four problems, however, I am stuck on the de-potentiation self-connection.

I implemented it as a coupling operator:

DisfacilitationCO:
  description: >
    Coupling operator that models disfacilitation assuming that the
    strength of pyramidal-pyramidal connections is subject to synaptic
    de-potentiation. When pyramidal cells fire at a high rate for a long time
    they weaken.
  base: CouplingOperator
  equations:
    - "V_in = c * V_out"
    - "d/dt * c = (-c + c_max * (1 - r)) / tau_c_pp"
  variables:
    c:
      description:
        Connectivity constant that reflects connection strength
        from one neural population on another.
      unit: null
      default: variable
    c_max:
      name: max_pp_connectivity
      description: "maximum connectivity constant for pyramidal-pyramidal
        connection"
      unit: null
      default: 2.22
    r:
      name: incoming_firing_rate
      description: Mean incoming firing rate at a specific synapse type
      unit: Hz
      default: input
    tau_c_pp:
      name: time_constant_pp_connectivity
      description: "time constant of synaptic disfacilitation for
        pyramidal-pyramidal connection"
      default: 10.
      unit: s

and attached it to the self-connection edge between Pyramidal and Pyramidal population. However, PyRates does not allow more than 1 input on the edge, hence on compiling the circuit I got following error:

PyRatesException: Too many input variables found. Exactly one or zero input variables are required per edge.

Is there any way to circumvent this? Or any ideas how else can the temporal dependence of the edge weight modelled?
Thanks a lot!

from pyrates.

Richert avatar Richert commented on May 23, 2024

Dear jajcayn, thanks a lot for bringing up this issue and for using our software. And sorry for the late reply, we are currently still in the developmental stage and as you can see over here, we haven't dealt much with users yet, that address us over the issue system instead of in person.
Anyway, thanks a lot for bringing up this issue. Due to a recent change in how we manage the equation system in the backend, the CouplingOperator functionality was broken. However, we are working on fixing this and I will keep you updated here.

In the mean-time, I suggest the following:
Instead of setting up on edge operator, just use a normal linear edge with weight set to 1
[source, target, None, {weight: 1.0, delay: x}]
This is, by the way, the way how you add discrete delays with value x to edges in PyRates.
You can then introduce an input variable target to your node operator and scale it with C_pp.
inp = target * C_pp
Then you can move your differential equation for C_pp to the node operator, instead of creating a new CouplingOperator. In other words, just add the equation
d/dt * C_pp = (C_max*(1-r_p) - C_pp) / tau
to the same operator, where the node input enters and is scaled by C_pp.

Does this make sense? Hope I could help and I will keep you updated about the progress on re-enabling the usage of EdgeOperators.

Cheers!

from pyrates.

Richert avatar Richert commented on May 23, 2024

With the recent version (PyRates 0.9.0), coupling operators have been re-enabled and should work as implemented initially by @jajcayn. Closing this now

from pyrates.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.