Skip to main content

Weighted attacks and β (scene intensity)

Weighted attacks let you express "this attack is stronger than that one." β (scene intensity) is a single dial that decides how strongly attacks bind. This page explains both with worked regimes.

Dung's classical framework treats every attack as binary — it either defeats or it doesn't. For scene authoring, that's too coarse: a casual remark is not the same as a sworn-on-oath testimony. Weighted argumentation (Dunne, Hunter, McBurney, Parsons, Wooldridge 2011) attaches a weight to each attack, and a single intensity parameter β decides which weights bind.

The mechanics

Each attack edge (attacker, target) carries a weight w ∈ [0, 1]. A scene-level budget β ∈ [0, 1] is the threshold below which attacks are considered "droppable":

  • w > β → attack binds (acts as a regular Dung attack).
  • w ≤ β → attack drops (treated as if absent).

Higher β = more attacks drop = more permissive scene = more arguments survive. Lower β = fewer attacks drop = sharper scene = fewer arguments survive.

The β-residual of a framework at a given β is the Dung framework you get by removing all dropped attacks. Acceptance semantics then run on the residual exactly as they do on a classical framework.

Three regimes, one framework

Take a simple two-argument framework with one weighted attack:

A → B with weight 0.4
attacksdrag nodes · scroll to pan

Walk three β regimes:

β = 0.0 — sharp regime

The attack weight (0.4) is greater than β (0.0), so the attack binds. The framework is equivalent to classical Dung with one attack. Grounded extension: {A} (A has no attacker; A attacks B; B is out). B is rejected.

β = 0.4 — boundary

At the inclusive boundary w ≤ β, the attack drops. The framework is equivalent to classical Dung with no attacks. Grounded extension: {A, B}. B is accepted.

β = 1.0 — permissive regime

All attacks drop unconditionally. Same answer as β = 0.4 here. As β passes each attack weight, that attack drops out one at a time.

β as a tension dial

For a single attack, β acts as a binary switch — either the attack binds or it doesn't. The richer behaviour comes when a framework has multiple attacks at different weights:

Attack weightsβ = 0.0β = 0.3β = 0.5β = 0.8
0.2, 0.4, 0.6all bind0.2 drops0.2, 0.4 dropall drop
0.5 (one)bindsbindsdrops (boundary)drops
0.5, 0.5both bindboth bindboth drop (boundary)both drop

As β rises, attacks drop in weight order. The acceptance pattern shifts at each crossing.

Picking β

There's no "correct" β for a scene — it's an authoring choice that shapes the dramatic register:

RegisterSuggested βWhy
Courtroom0.0–0.2Every objection lands; arguments must withstand strict scrutiny.
Heated debate0.2–0.4Most attacks bind; weak attacks drop.
Boardroom0.4–0.6Mid-strength attacks drop; tolerance for partial agreement.
Cordial discussion0.6–0.8Only the strongest objections matter.
Brainstorming0.8–1.0Almost everything stands; ideas get to breathe.

See the tune-β guide for picking β by scene register and escalating mid-scene.

Worked four-attack regime sweep

Take the east-wall example — Alice (military) wants to fortify; Bob (logistics) wants to abandon. Multiple attacks at different weights:

  • Bob's logistics objection → Alice's fortify proposal: weight 0.4
  • Alice's strategic objection → Bob's abandon proposal: weight 0.5
  • (no others)

Regime sweep:

βAttack statesGrounded
0.0Both bind (both attacked)
0.3Both bind
0.4Bob's drops (boundary); Alice's still binds{abandon} (Alice's argument has no live counter; abandon defeats fortify; abandon survives)
0.45Bob's dropped; Alice's binds{abandon}
0.5Both drop (boundary){fortify, abandon}
0.8Both drop{fortify, abandon}

The scene's outcome flips at each β crossing. The east-wall's BetaPlayground lets you drag β and watch the acceptance pattern shift live.

Composition with other dimensions

β composes with bipolar (attack + support), values, and scheme strength:

  • Bipolar: supports propagate acceptance; β decides which attacks block. The two compose at the residual layer — drop attacks first, then run bipolar semantics.
  • Values: the audience-conditioned defeat graph filters attacks first (using Audience::prefers), then β filters by weight. An attack must survive both filters to bind.
  • Scheme strength: schemes carry a Strength (Strong/Moderate/Weak) that the bridge's SchemeActionScorer reads. This scales boost magnitudes, not attack weights — orthogonal to β.

In our library

ConstructMethod
Set βstate.set_intensity(Budget::new(beta).unwrap())
Add a weighted attackstate.add_weighted_attack(&attacker, &target, weight)?
Credulous acceptance at current βstate.is_credulously_accepted(&arg)?
Skeptical acceptance at current βstate.is_skeptically_accepted(&arg)?
Inspect direct attackers (β-independent)state.attackers_of(&target)

Budget::new(beta) returns Result because β must be in [0, 1] — anything outside is an error.

Further reading