agentjs-core
Version:
A comprehensive agent-based modeling framework with built-in p5.js visualization
105 lines • 2.95 kB
TypeScript
/**
* Abstract Scheduler class - foundation for agent activation scheduling
*/
import { EventEmitter } from 'eventemitter3';
import type { Agent } from '../agents/Agent';
/**
* Abstract Scheduler class controlling agent activation order
*
* Responsibilities:
* - Determine order of agent updates each simulation step
* - Manage agent registration/deregistration
* - Provide scheduling statistics and monitoring
* - Handle agent lifecycle events
*
* Educational Context: Represents different approaches to
* community organization and decision-making processes,
* from random consultation to structured hierarchies.
*/
export declare abstract class Scheduler extends EventEmitter {
/** Agents managed by this scheduler */
protected agents: Set<Agent>;
/** Current step number */
protected stepNumber: number;
/** Performance tracking */
protected lastStepTime: number;
protected totalSteps: number;
/** Random seed for deterministic scheduling */
protected randomSeed: number | undefined;
constructor(randomSeed?: number);
/**
* Add agent to scheduling
*/
addAgent(agent: Agent): void;
/**
* Remove agent from scheduling
*/
removeAgent(agent: Agent): boolean;
/**
* Get all scheduled agents
*/
getAgents(): ReadonlyArray<Agent>;
/**
* Get number of scheduled agents
*/
getAgentCount(): number;
/**
* Execute one simulation step
*/
step(): void;
/**
* Reset scheduler state
*/
reset(): void;
/**
* Get current step number
*/
getCurrentStep(): number;
/**
* Get total steps executed
*/
getTotalSteps(): number;
/**
* Get last step execution time in milliseconds
*/
getLastStepTime(): number;
/**
* Get scheduling statistics
*/
getStatistics(): SchedulerStatistics;
/**
* Abstract method: Get agent activation order
* Must be implemented by concrete scheduler types
*/
protected abstract getActivationOrder(): ReadonlyArray<Agent>;
/**
* Abstract method: Get scheduler type name
* Must be implemented by concrete scheduler types
*/
protected abstract getSchedulerType(): string;
/**
* Hook for subclasses when agent is added
*/
protected onAgentAdded(_agent: Agent): void;
/**
* Hook for subclasses when agent is removed
*/
protected onAgentRemoved(_agent: Agent): void;
/**
* Initialize random number generator with seed
*/
private initializeRandom;
}
/**
* Scheduler statistics interface
*/
export interface SchedulerStatistics {
readonly totalAgents: number;
readonly activeAgents: number;
readonly currentStep: number;
readonly totalSteps: number;
readonly lastStepTime: number;
readonly averageStepTime: number;
readonly schedulerType: string;
}
//# sourceMappingURL=Scheduler.d.ts.map