Skip to content

Bug in propagation algorithm for updates #10

@Rex-8

Description

@Rex-8

Bounty Points: 150

Branch Instructions

push changes to a new 'propogation' branch


Explanation:

  • num_of_cars() function incorrectly calculates car redistribution
  • Only counts incoming cars from one edge instead of all incoming edges
  • Logic error: uses cars_initial[node] when should use source node count
  • Distribution ratios applied incorrectly
  • Causes negative car counts and simulation errors

Current buggy code:

def num_of_cars(node):
    t = 0
    for i in distances:
        if i[1] == node:
            for j in distribution:
                if j == i[0]:
                    for k in distribution[j]:
                        if k[0] == node:
                            t += (cars_initial[node]) * k[1]  # BUG: wrong node
    t -= (distribution[node][0][1]) * (cars_initial[node])
    cars_initial[node] = t
    return t

Possible fix/approach:

  • For each edge (source -> target) where target == node:
    • Add cars_initial[source] * distribution[source][target_ratio]
  • Calculate outgoing cars separately
  • Formula: new_count = current + incoming - outgoing
  • Ensure non-negative car counts
  • Fix global state mutation issue

Correct logic (Example):

incoming = sum(cars_initial[src] * ratio
                for edge in distances if edge[1] == node
               for src, ratio in get_incoming_ratio(edge[0], node))
outgoing = sum(cars_initial[node] * ratio
                for dest, ratio in distribution[node] if dest != node)

Maintainer notes:

  • Critical bug affecting entire simulation accuracy
  • Test with simple 2-3 node graphs first
  • Verify car conservation (total cars should remain constant)
  • Check distribution ratios sum to 1.0

Resources:

  • Traffic flow conservation principles
  • Graph theory: flow networks

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions