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:
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.6 | all bind | 0.2 drops | 0.2, 0.4 drop | all drop |
| 0.5 (one) | binds | binds | drops (boundary) | drops |
| 0.5, 0.5 | both bind | both bind | both 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:
| Register | Suggested β | Why |
|---|---|---|
| Courtroom | 0.0–0.2 | Every objection lands; arguments must withstand strict scrutiny. |
| Heated debate | 0.2–0.4 | Most attacks bind; weak attacks drop. |
| Boardroom | 0.4–0.6 | Mid-strength attacks drop; tolerance for partial agreement. |
| Cordial discussion | 0.6–0.8 | Only the strongest objections matter. |
| Brainstorming | 0.8–1.0 | Almost 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 states | Grounded |
|---|---|---|
| 0.0 | Both bind | ∅ (both attacked) |
| 0.3 | Both bind | ∅ |
| 0.4 | Bob's drops (boundary); Alice's still binds | {abandon} (Alice's argument has no live counter; abandon defeats fortify; abandon survives) |
| 0.45 | Bob's dropped; Alice's binds | {abandon} |
| 0.5 | Both drop (boundary) | {fortify, abandon} |
| 0.8 | Both 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'sSchemeActionScorerreads. This scales boost magnitudes, not attack weights — orthogonal to β.
In our library
| Construct | Method |
|---|---|
| Set β | state.set_intensity(Budget::new(beta).unwrap()) |
| Add a weighted attack | state.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
- Dunne et al. (2011) — weighted argument systems, the formal basis.
- The east wall — engine-driven example with live β slider.
- The siege council — multi-attack framework where β crossings matter.
- Tune β for your scene — practical authoring how-to.
- Glossary — quick definitions.