Skip to content

Consumers ignore PDL impacts aimed at them #45

Description

@Hackatro

Follow-up from #37, which split the pooled eu_farmers list into one agent per consumer entity.

Problem 1 — declared impacts are not read

livestock_pressure declares supply: -9% and price: +20% against poultry_farms, conditional on feed_price_spike.active. The simulation reads neither.

Since #37 each consumer is its own roster entry with its own ("<eid>", "supply") capacity binding, so the wiring is in place — but _step_consumer() never calls effective("capacity"), and consumers carry no unit_price for a price impact to land on. Before the split this was excusable: the consumers were one anonymous pool with no entity identity to bind to. That is no longer true.

The shock is tracked, shock_scales is seeded from the event registry rather than the roster, so ("poultry_farms", "supply") already has a live scale every step. Nothing consumes it.

Open questions, to settle before implementing:

  • What should a supply impact on a livestock farm mean — reduced capacity to take feed, or reduced livestock output from the feed it did receive? The two produce different downstream behaviour.
  • price: +20% has nowhere to land at all, since consumers do not price. Either consumers gain a price, or consumer-side price impacts are explicitly declared out of model scope and documented as such.

Problem 2 — the feed share assumes one shared upstream

_step_consumer() divides by the count of all active consumer agents across every consumer list, but sums feed only from its own upstream.

Exact in the shipped PDL, where all three consumers are fed by eu_feed_trader. In a PDL where one consumer has a different or missing upstream, the feed-less consumer still occupies a share and the others are left short. The divisor and the numerator come from different sets.

Any weighting by dependency criticality, by entity size is a modelling decision the PDL does not currently state, so this needs a decision as much as an implementation.

Scope

  • src/provider_simenv/agents/farmer.py_step_consumer()
  • possibly data_collector.py, if consumers gain a recorded price

Acceptance

  • A PDL supply impact targeting a consumer changes that consumer's recorded output
  • A PDL where consumers have different upstreams conserves feed: each consumer's feed_received sums to what its own upstream actually holds
  • The chosen semantics for a consumer-side supply impact are written down, and consumer-side price impacts are either implemented or explicitly declared out of scope

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    improvementFor everything that improves an already existing feature.simulation logicFor everything related to the internal simulation logic

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions