/** * Coalition Formation Algorithm * * Implements minimal winning coalition theory with policy distance optimization * * Research Foundation: * - Laver (2020): Agent-based modeling in political decision making * - Martin & Stevenson (2001): Government formation in parliamentary democracies * - Spatial model: Parties closer in policy space more likely to form coalitions * * Algorithm: * 1. Generate all possible coalitions that exceed threshold (>50% seats) * 2. Filter to minimal winning coalitions (no redundant parties) * 3. Filter incompatible party combinations (blacklists) * 4. Calculate policy distance for each viable coalition * 5. Select coalition with minimum policy distance (most cohesive) * * @module coalition/CoalitionFormation */ import { PoliticalParty } from '../core/PoliticalParty.js'; import { Coalition } from './Coalition.js'; /** * Coalition formation options */ export interface CoalitionFormationOptions { /** Seat threshold for coalition (default: 0.5 for majority) */ threshold?: number; /** Current month in simulation (for formation date) */ currentMonth?: number; /** Maximum coalition size (default: 4 parties) */ maxCoalitionSize?: number; /** Prefer minimal winning coalitions? (default: true) */ preferMinimalWinning?: boolean; } /** * Form government coalition from election results * * @param parties - All parties with seat shares * @param options - Formation options * @returns Coalition, or null if no viable coalition exists */ export declare function formCoalition(parties: PoliticalParty[], options?: CoalitionFormationOptions): Coalition | null; /** * Find all minimal winning coalitions * * Useful for analyzing coalition options */ export declare function findAllMinimalWinningCoalitions(parties: PoliticalParty[], _threshold?: number, maxSize?: number): Coalition[]; /** * Calculate formation probability for a coalition * Based on policy distance and coalition preferences * * @returns Probability 0-1 */ export declare function calculateFormationProbability(coalition: Coalition): number;