Algorithms

TVBO provides built-in iterative tuning algorithms for balancing excitation-inhibition dynamics before optimization.

Feedback Inhibition Control (FIC)

FIC adjusts inhibitory weights to maintain a target firing rate across brain regions:

tuning_algorithms:
    fic:
        name: FIC
        n_iterations: 200
        objective:
            type: activity_target
            target_value: 3.0
            label: "Mean excitatory firing rate"
        update_rules:
            - target_parameter: J_i
              equation: {rhs: "J_i + delta * (mean_S_e - target)"}
              parameters:
                  delta: {value: 0.01}

How it works

At each iteration:

  1. Run a short simulation
  2. Measure mean excitatory activity per region
  3. If activity > target → increase inhibition (\(J_i\))
  4. If activity < target → decrease inhibition (\(J_i\))

Excitation-Inhibition Balance (EIB)

EIB tunes coupling weights to match empirical functional connectivity:

tuning_algorithms:
    eib:
        name: EIB
        depends_on: fic
        n_iterations: 2000
        objective:
            type: fc_target
            label: "FC correlation"
        observations:
            - name: fc
              pipeline:
                  - function: numpy.corrcoef

The depends_on: fic ensures FIC runs first — EIB starts from an already-balanced state.

Algorithm Chaining

A typical pipeline chains algorithms before gradient optimization:

flowchart LR
    FIC[FIC<br/>Balance activity] --> EIB[EIB<br/>Match FC] --> OPT[Gradient<br/>Optimization]

Results Access

result = exp.run("tvboptim")

# FIC results
result.fic.pre_tuning         # Simulation before FIC
result.fic.post_tuning        # Simulation after FIC
result.fic.history.mean_S_e   # Activity per iteration

# EIB results
result.fic_eib.post_tuning
result.fic_eib.post_tuning.observations.fc

See Also