RUNLOCALAIv38
->Will it run?Best GPUCompareTroubleshootStartLearnPulseModelsHardwareToolsBench
Run check
RUNLOCALAI

Independently operated catalog for local-AI hardware and software. Hand-written verdicts. Source-cited claims. Reproducible commands when we have them.

OP·Fredoline Eruo
DIR
  • Models
  • Hardware
  • Tools
  • Benchmarks
TOOLS
  • Will it run?
  • Compare hardware
  • Cost vs cloud
  • Choose my GPU
  • Prompting kits
  • Quick answers
REF
  • All buyer guides
  • Learn local AI
  • Methodology
  • Glossary
  • Errors KB
  • Trust
EDITOR
  • About
  • Author
  • How we make money
  • Editorial policy
  • Contact
LEGAL
  • Privacy
  • Terms
  • Sitemap
MAIL · MONTHLY DIGEST
Get monthly local AI changes
Monthly recap. No spam.
DISCLOSURE

Some links on this site are affiliate links (Amazon Associates and other first-class retailers). When you buy through them, we earn a small commission at no extra cost to you. Affiliate links do not influence our verdicts — there are cards we rate highly that we don't have affiliate relationships with, and cards that sell well that we refuse to recommend. Read more →

© 2026 runlocalai.coIndependently operated
RUNLOCALAI · v38
  1. >
  2. Home
  3. /Learn
  4. /Courses
  5. /Multi-Agent Systems
  6. /Ch. 11
Multi-Agent Systems

11. Conflict Resolution

Chapter 11 of 24 · 20 min
KEY INSIGHT

Multi-agent conflicts reveal design gaps; effective resolution requires understanding whether conflicts stem from resource contention, goal misalignment, or factual disagreement. Multi-agent systems encounter conflicts when agents produce incompatible outputs, compete for shared resources, or hold contradictory beliefs. Conflict resolution strategies depend on conflict type—resource contention requires scheduling, goal misalignment requires priority or hierarchy, factual disagreement requires evidence evaluation. Resource conflicts arise when multiple agents need the same limited resource simultaneously. Database connections, API rate limits, and computational capacity create contention. Resolution options include queuing (first-come-first-served), priority ordering (critical tasks first), and fair sharing (rotating access). Goal conflicts emerge when agent objectives contradict. A cost-optimization agent might minimize expenses while a reliability agent maximizes redundancy. These conflicts require explicit priority definitions or higher-level arbitration. Belief conflicts occur when agents derive different conclusions from the same inputs. A classification agent might categorize content differently than expected. Resolution requires evidence comparison, uncertainty quantification, or human arbitration. Resolution mechanisms operate at different speeds. Synchronous resolution blocks until conflict resolves—appropriate for critical decisions. Asynchronous resolution allows agents to proceed and handles conflicts later—appropriate for non-critical work. Resolution strategies should be consistent to avoid confusion. Random resolution creates unpredictable behavior. Agent priority ordering provides stable outcomes. Time-based resolution handles transient conflicts (both agents wanted the same slot at different times). ```python from dataclasses import dataclass, field from typing import Any, Optional, Callable from enum import Enum from datetime import datetime import asyncio class ConflictType(Enum): RESOURCE = "resource" GOAL = "goal" BELIEF = "belief" DATA = "data" @dataclass class Conflict: id: str type: ConflictType participants: list[str] # Agent IDs involved description: str timestamp: datetime = field(default_factory=datetime.utcnow) severity: int = 1 # 1-5, higher is more severe resolution_status: str = "pending" @dataclass class Resolution: conflict_id: str strategy: str outcome: Any resolver: str # Agent or system component that resolved timestamp: datetime = field(default_factory=datetime.utcnow) class ConflictResolver: def __init__(self, priority_registry: dict[str, int]): self.priority_registry = priority_registry # agent_id -> priority (higher wins) self.conflicts: list[Conflict] = [] self.resolutions: list[Resolution] = [] self.resolution_strategies: dict[ConflictType, Callable] = {} self._register_default_strategies() def _register_default_strategies(self) -> None: self.resolution_strategies[ConflictType.RESOURCE] = self._resolve_resource self.resolution_strategies[ConflictType.GOAL] = self._resolve_goal self.resolution_strategies[ConflictType.BELIEF] = self._resolve_belief self.resolution_strategies[ConflictType.DATA] = self._resolve_data async def register_conflict(self, conflict: Conflict) -> str: """Register a new conflict for resolution""" self.conflicts.append(conflict) return conflict.id async def resolve(self, conflict_id: str) -> Optional[Resolution]: """Resolve a specific conflict""" conflict = self._find_conflict(conflict_id) if not conflict: return None strategy = self.resolution_strategies.get(conflict.type) if not strategy: return None resolution = await strategy(conflict) self.resolutions.append(resolution) conflict.resolution_status = "resolved" return resolution async def resolve_all_pending(self) -> list[Resolution]: """Resolve all pending conflicts""" results = [] for conflict in self.conflicts: if conflict.resolution_status == "pending": result = await self.resolve(conflict.id) if result: results.append(result) return results def _find_conflict(self, conflict_id: str) -> Optional[Conflict]: for conflict in self.conflicts: if conflict.id == conflict_id: return conflict return None async def _resolve_resource(self, conflict: Conflict) -> Resolution: """Resolve resource contention using priority and fairness""" # Sort participants by priority (higher wins) sorted_participants = sorted( conflict.participants, key=lambda agent_id: self.priority_registry.get(agent_id, 0), reverse=True ) # Winner gets resource winner = sorted_participants[0] losers = sorted_participants[1:] return Resolution( conflict_id=conflict.id, strategy="priority_queue", outcome={ "winner": winner, "losers": losers, "queue_positions": { agent: pos + 1 for pos, agent in enumerate(sorted_participants) } }, resolver="system" ) async def _resolve_goal(self, conflict: Conflict) -> Resolution: """Resolve goal conflicts using explicit priority rules""" # Check for explicit priority rules priorities = [ (agent_id, self.priority_registry.get(agent_id, 0)) for agent_id in conflict.participants ] # Highest priority wins winner = max(priorities, key=lambda x: x[1])[0] return Resolution( conflict_id=conflict.id, strategy="priority_override", outcome={ "primary_agent": winner, "secondary_agents": [ a for a in conflict.participants if a != winner ], "compromise_required": True }, resolver="system" ) async def _resolve_belief(self, conflict: Conflict) -> Resolution: """Resolve belief conflicts through evidence comparison""" # For belief conflicts, collect evidence from participants # This would integrate with the actual agent system # Simple strategy: pick belief with highest confidence # Real implementation would aggregate evidence return Resolution( conflict_id=conflict.id, strategy="confidence_weighted", outcome={ "resolution_type": "requires_human_review", "agents_in_dispute": conflict.participants }, resolver="system" ) async def _resolve_data(self, conflict: Conflict) -> Resolution: """Resolve data inconsistencies""" return Resolution( conflict_id=conflict.id, strategy="timestamp_latest", outcome={ "resolution": "use_most_recent_value", "requires_manual_review": conflict.severity >= 4 }, resolver="system" ) class HierarchicalConflictEscalation: """Handles escalation when standard resolution fails""" def __init__(self, resolver: ConflictResolver): self.resolver = resolver self.escalation_levels = { 1: "agent_level", # Agents negotiate directly 2: "supervisor_level", # Supervisor arbitrates 3: "system_level", # System-wide rules apply 4: "human_review" # Human intervention required } async def escalate(self, conflict_id: str) -> str: """Escalate conflict to higher resolution level""" conflict = self.resolver._find_conflict(conflict_id) if not conflict: return "unknown" new_level = min(conflict.severity + 1, 4) conflict.severity = new_level return self.escalation_levels[new_level] # Usage example resolver = ConflictResolver({ "critical_agent": 100, "data_agent": 80, "analytics_agent": 60, "cache_agent": 40 }) async def handle_agent_conflict(agent1: str, agent2: str, resource: str): conflict = Conflict( id=f"conflict_{resource}_{datetime.utcnow().timestamp()}", type=ConflictType.RESOURCE, participants=[agent1, agent2], description=f"Both {agent1} and {agent2} require {resource}", severity=2 ) await resolver.register_conflict(conflict) result = await resolver.resolve(conflict.id) return result ```

EXERCISE

Design a conflict resolution system for a multi-agent order fulfillment pipeline. Agents handle inventory reservation, payment processing, and shipping coordination. Conflicts might include: two agents reserving the same inventory unit, payment processing conflicting with inventory updates, shipping preferences conflicting with delivery speed requirements. Specify resolution strategies for each conflict type, escalation paths, and how conflicts are logged for audit. (12 minutes)

← Chapter 10
Tool Sharing
Chapter 12 →
Consensus Mechanisms