Description
# simple-AGI
## Emergent Artificial Intelligence for Minecraft
> **Minecraft Forge 1.20.1 · Java 17 · Mod ID: `simple_agi`**
[🇺🇦 Українська версія](README.md)
---
**simple-AGI** is a Minecraft Forge mod that replaces the vanilla mob AI with a full cognitive pipeline.
```
Body → Hormones → Emotions → Memory → MindContext → Decision → Action
```
Each AGI entity (mob) owns a brain with **emotions, memory, hormones, social bonds, a spatial belief map, instincts, and genetically inherited species traits**. The system is fundamentally **stochastic** — two identical mobs in the same conditions will make different choices, producing an emergent living ecosystem.
---
## Table of Contents
- [Features](#features)
- [How It Works](#how-it-works)
- [Architecture](#architecture)
- [Commands](#commands)
- [Technical Details](#technical-details)
- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
---
## Features
### 1. Cognitive Stack (7 Layers)
| Layer | Component | Description |
|-------|-----------|-------------|
| **Layer 1** | Body / Perception | Health, movement, attack, environment scanning |
| **Layer 2** | Hormones / Emotions | 7 hormones → 8 emotions (fear, grief, loneliness, confidence, etc.) |
| **Layer 3** | Memory | Episodic memory with emotional weighting, persistent disk storage |
| **Layer 4** | Social | Signal field, emotional contagion, bonds, species disposition |
| **Layer 5** | Cognition | MindContext (50+ fields), DecisionEngine (16 rule blocks), role system |
| **Layer 6** | Decision | ActionField with softmax + stochastic sampling (NOT argmax!) |
| **Layer 7** | Execution | MobAgentBody — move, attack, flee, stop |
### 2. Hormones & Emotions
**7 Hormones:**
- `adrenaline` — rapid threat spike
- `cortisol` — chronic stress
- `dopamine` — reward for exploration
- `serotonin` — environment stability
- `oxytocin` — social proximity
- `hormoneAggression` — combat readiness
- `melatonin` — night-cycle rhythm
**8 Emotions:**
- `fear`, `confidence`, `grief`, `loneliness`, `comfort`, `peacefulness`, `boredom`, `stress`
### 3. Memory & Spatial Belief Map
- **MemorySystem** — weighted episodic memory (max 100 events). Importance = base × (1 + fear + adrenaline × 0.5). Events decay over time.
- **WorldModel** — spatial belief map (8-block grid). Each zone has `danger`, `food`, `safety`, `familiarity` with time-based decay.
- **PersistentMemoryManager** — disk persistence in JSON: `cognitive_data/entity/<uuid>.json`, `species/<type>.json`, `world/danger_zone.json`.
### 4. Social System
- **LocalSignalField** — spatial signal field (`DANGER`, `FOOD`, `ATTACK`, `HELP`, `SAFE`, `RETREAT`). Signals decay over ~143 ticks.
- **SocialExchangeSystem** — emotional contagion between mobs (fear-comfort transmission), bond reinforcement.
- **AttachmentSystem** — home + bonds to allies. Grief at ally death scales with bond strength.
- **ResourceExchangeSystem** — item trading between mobs (`OFFER_ITEM`, `ACCEPT_ITEM`).
### 5. Species Knowledge Inheritance
- **SpeciesKnowledgeStore** — cross-generation trait inheritance:
- `caution`, `aggression`, `curiosity`, `playerHostility`
- `generations` — generation counter
- On mob death, traits pass to the next generation with 70% weight.
### 6. Emergent Language
- **Phoneme** — 16-symbol alphabet (4 energy groups).
- **Utterance** — word (1–3 phonemes), unique int key for O(1) lookup.
- **LexiconEntry** — meaning vector (6 slots: DANGER, FOOD, SAFE, ATTACK, RETREAT, CONTACT).
- Language emerges spontaneously: a mob sees danger → makes a sound → a neighbor hears it during the threat → association reinforces → shared lexicon.
- Words with confidence `+0.55` are inherited across generations.
### 7. Build System
- **BuildPlanner** + **BuildExecutor** — planning and construction.
- Bot can build from templates: `shelter`, `small_house`, `farm`, `wall`, `pillar`.
- Features: inventory check, stall detection, retry logic.
### 8. Group Capability Assessment
- Scans `20-block` radius to identify allies and threats.
- States: `DOMINANT` (ratio > 1.4), `CONTESTED` (0.5–1.4), `VULNERABLE` (< 0.5), `ALONE`.
- Influences FLEE/ATTACK in the DecisionEngine.
### 9. Role System
Automatically assigned by context:
- `LEADER` — dominant group → broadcasts ATTACK signals
- `SCOUT` — high dopamine → boosts EXPLORE
- `ATTACKER` — aggressive state → boosts ATTACK
- `DEFENDER` — protects allies
- `FOLLOWER` — follows leader
### 10. Trauma Propagation
When a mob dies within a 24-block radius:
- Witnesses gain `fear` + `grief` (attenuated by distance).
- Allies receive `allyBonus` + `bondGrief` (scaled by bond strength).
- `RevengeMotive` activates.
- Adrenaline spike, emotional memory log, and `DEATH` WorldModel event trigger.
---
## How It Works
### Full Brain Cycle (per server tick)
```
SERVER TICK (every N ticks)
│
├─ AttachedMobController → loops over all AGENTS (up to 150)
│ │
│ ├─ 1. BODY: Homeostasis.quickTick(), FeelingsSystem.tick(), RevengeMotive.tick()
│ ├─ 2. SOCIAL: SocialExchange (every 40 ticks)
│ ├─ 3. THREAT: findNearestThreat() → memory → DANGER/HELP signal → WorldModel
│ ├─ 3b. WORLDMODEL: markVisited(); tick() (every 20 ticks)
│ ├─ 4. TIME: dayTime, isNight, isSunset, isSunrise
│ ├─ 5. GROUP: GroupCapabilityModel (every 30 ticks)
│ ├─ 6. REVENGE: RevengeMotive.getKillerEntity()
│ ├─ 7. SIGNALS: LocalSignalField.senseIntensity ×6 types
│ ├─ 7a. FOOD: scanNearestFood (every 25 ticks)
│ ├─ 7b. ZONES: findSafeZone / findFoodZone (every 40 ticks)
│ ├─ 8. MindContext: full snapshot (50+ fields)
│ ├─ 9. DecisionEngine: 16 rule blocks → ActionField
│ ├─ 10. ProfileBias: species-specific instincts
│ ├─ 11. RoleSystem: role-based field shift
│ ├─ softmaxNormalize() → sample() → ActionIntent
│ ├─ 12. executeForMob(): MobAgentBody executes action
│ ├─ 13. MicroBehavior (if IDLE/EXPLORE)
│ └─ 14. MemoryDecay: decayEntityRecords() + decayImportance()
```
### DecisionEngine (16 Rule Blocks)
| Block | Description | Key Factors |
|-------|-------------|-------------|
| Block 1 | **FLEE** | fear × 0.45, cortisol × 0.20, critical health < 25% |
| Block 2 | **ATTACK** | aggressionTrait × 0.30, hormoneAggression × 0.35, adrenaline × 0.20 |
| Block 3 | **EXPLORE** | curiosityTrait × 0.30, dopamine × 0.25, boredom × 0.25 |
| Block 4 | **IDLE** | peacefulness × 0.30, grief × 0.45 (paralysis) |
| Block 5 | **EAT / MOVE_TO_FOOD** | hungerRatio × 0.60, nearestFood bonus |
| Block 6 | **Cave penalty** | isInCave + dark → FLEE↑, IDLE↑ for non-aggressors |
| Block 7 | **Semantic food** | semanticFoodScore > 0.1 → EXPLORE↑ |
| Block 8-11 | **Signal blocks** | sigDanger, sigFood, sigAttack, sigHelp, sigSafe, sigRetreat |
| Block 12 | **Home pull** | homesickness > 0.3 → MOVE_TO(home) |
| Block 13 | **Temporal** | isNight + avoidsSun → IDLE↑, FLEE↑ |
| Block 14 | **Revenge** | revengeMotive > 0.4 → ATTACK(revengeTarget) |
| Block 15 | **GroupCapability** | DOMINANT → ATTACK↑; VULNERABLE → FLEE↑ |
| Block 16 | **WorldModel** | zoneDanger > 0.35 → FLEE↑; familiarity < 0.05 → EXPLORE↑ |
### Stochasticity
`ActionField.sample()` uses **softmax + random sampling** instead of argmax. This means **no mob is predictable** — the same mob in the same conditions may choose differently, following a flexible probability distribution.
---
## Architecture
### Project Structure
```
src/main/java/com/rayman/
├── action/
│ ├── ActionExecutor.java — Action execution (move, attack, flee, eat, explore)
│ ├── ActionField.java — Probability weight field (softmax + sample)
│ └── ActionIntent.java — Action intent (with target)
├── ai/
│ ├── AttachedMobController.java ← CENTRAL ORCHESTRATOR
│ ├── AgiGoal.java — Minecraft Goal API wrapper
│ └── AIController.java — BotEntity controller
├── body/
│ ├── BotEntity.java — Dedicated AI player-like entity
│ ├── MobAgentBody.java — Move/attack/stop for any Mob
│ ├── AgentBody.java — Base body interface
│ ├── InventorySystem.java — Inventory management
│ └── core/
│ ├── Homeostasis.java — Body state aggregator
│ ├── HormoneSystem.java — 7-hormone system
│ ├── FeelingsSystem.java — 8-emotion system
│ ├── InstinctSystem.java — Basic instincts
│ ├── ReflexSystem.java — Reflexes
│ ├── NervousSystem.java — Nervous system
│ ├── FatigueSystem.java — Fatigue
│ ├── PainSystem.java — Pain
│ └── TemperatureSystem.java — Temperature
├── core/
│ ├── MindContext.java ← COGNITIVE STATE SNAPSHOT (50+ fields)
│ ├── DecisionEngine.java ← 16 RULE BLOCKS
│ ├── ActionScheduler.java — Action scheduler
│ ├── AttentionSystem.java — Attention system
│ ├── GoalSystem.java — Goals
│ ├── MotivationSystem.java — Motivation
│ ├── PredictionSystem.java — Prediction
│ ├── FailureModel.java — Failure model
│ ├── StabilityGovernor.java — Behavior stability
│ ├── SkillSystem.java — Skills
│ ├── GroupCapabilityModel.java — Force balance assessment
│ ├── RevengeMotive.java — Revenge motive
│ ├── RoleSystem.java — Role system
│ ├── CognitiveLayer.java — Cognitive layer interface
│ └── MicroBehaviorSystem.java — Small animations
├── memory/
│ ├── MemorySystem.java — Episodic memory
│ └── PersistentMemoryManager.java — Persistent JSON storage
├── perception/
│ ├── PerceptionSystem.java — Perception system
│ ├── AttentionFocus.java — Attention focus (central/peripheral)
│ ├── VisualMemory.java — Visual memory
│ ├── VisibilityResolver.java — Visibility resolution
│ ├── DynamicVisibility.java — Dynamic visibility
│ └── PerceptionResult.java — Perception result
├── personality/
│ ├── Personality.java — Personality
│ ├── FeelingsSystem.java — Emotional system
│ └── SelfModel.java — Self-model
├── social/
│ ├── LocalSignalField.java — Spatial signal field
│ ├── SocialExchangeSystem.java — Emotional exchange
│ ├── AttachmentSystem.java — Bonds and home
│ ├── SocialMemory.java — Disposition toward entities
│ ├── SpeciesKnowledgeStore.java — Cross-generation memory
│ ├── SpeciesMind.java — Inherited traits
│ ├── MobBehaviorProfile.java — Species behavior profile
│ ├── CognitiveTier.java — Cognitive tier
│ └── ResourceExchangeSystem.java — Item exchange
├── language/
│ ├── LanguageSystem.java — Language processor
│ ├── Phoneme.java — 16-symbol alphabet
│ ├── Utterance.java — Word (1–3 phonemes)
│ ├── LexiconEntry.java — Lexicon entry (meaning vector)
│ ├── SpeciesLexicon.java — Species lexicon
│ ├── Ukrainian* — Ukrainian language extensions
│ └── OntologicalRoot.java — Ontological root
├── build/
│ ├── BuildPlanner.java — Build planning
│ ├── BuildExecutor.java — Build execution
│ ├── BuildValidator.java — Plan validation
│ └── BuildProgress.java — Progress tracking
├── structure/
│ ├── StructureTemplate.java — Building template
│ └── TemplateLibrary.java — Template library
├── world/
│ ├── WorldModel.java — Spatial belief map
│ └── WorldState.java — World state
├── SimpleAgi.java ← Main mod class
├── Config.java Configuration
└── ARCHITECTURE.md Full architectural documentation
```
---
## Commands
| Command | Description |
|---------|-------------|
| `/gamerule globalCognition true/false` | Auto-attach AGI to all new mobs |
| `/simpleagi spawn` | Create BotEntity |
| `/simpleagi kill` | Remove BotEntity |
| `/simpleagi attach` | Attach AGI to the mob you are looking at |
| `/simpleagi attach_type <type> [radius]` | Attach AGI to all mobs of a given type |
| `/simpleagi detach` | Detach AGI from the mob you are looking at |
| `/simpleagi detach_all` | Detach all agents |
| `/simpleagi agents` | Show number of active agents |
| `/simpleagi build <template>` | Start building (shelter, small_house, farm, wall, pillar) |
| `/simpleagi build_stop` | Stop building |
### Configuration (`config/simple_agi-common.toml`):
```toml
aiTickInterval = 5 # AI tick interval (server ticks)
maxAgents = 150 # Maximum active AGI mobs (1–1000)
```
---
## Technical Details
### Performance & Optimization
- **LOD (Level of Detail):**
- `0–32 blocks` → full AI
- `32–64 blocks` → half rate (skip 1/2)
- `>64 blocks` → quarter rate (skip 3/4)
- **Staggering:** Each mob has a unique `phase = gameTime + mob.getId()`, spreading operations across time.
- **Chunk boundary guard:** Skips mobs in unloaded chunks.
- **ConcurrentHashMap:** All static maps use `ConcurrentHashMap` for thread safety.
### Cognitive Tiers
| Tier | lvl | maxPhon | lexCap | shareWds | memCap | wmRes | canTrade |
|------|-----|---------|--------|----------|--------|-------|----------|
| PRIMITIVE | 1 | 0 | 0 | 0 | 20 | 32 blocks | false |
| SIMPLE | 2 | 1 | 12 | 0 | 40 | 16 blocks | false |
| SOCIAL | 3 | 2 | 24 | 4 | 60 | 8 blocks | true |
| INTELLIGENT | 4 | 3 | 48 | 8 | 80 | 6 blocks | true |
| SAPIENT | 5 | 3 | 96 | 16 | 200 | 4 blocks | true |
### Time Characteristics
| Operation | Interval | Frequency |
|-----------|----------|-----------|
| Body tick | every AI tick | ~4/sec |
| Threat scan | every AI tick | ~4/sec |
| WorldModel.observe | every AI tick | ~4/sec |
| Social exchange | 40 game-ticks | ~0.5/sec |
| Food item scan | 25 game-ticks | ~0.8/sec |
| GroupCapabilityModel | 30 game-ticks | ~0.67/sec |
| WorldModel tick (decay) | 20 game-ticks | ~1/sec |
| DANGER memory log | 20 game-ticks | ~1/sec |
| Memory auto-flush (DANGER) | 200 mem-ticks | ~1 per 10 sec |
| Memory auto-flush (DEATH) | immediate | — |
---
## Requirements
- **Minecraft:** 1.20.1
- **Forge:** e.g., 47.x
- **Java:** 17+
- **Gradle:** 8.8+
## Installation
1. Clone the repository.
2. Open in your IDE (IntelliJ IDEA / Eclipse / VS Code).
3. Run `./gradlew build` (or `gradlew.bat build` on Windows).
4. Find the `.jar` in `build/libs/simple_agi-<version>.jar`.
5. Place the JAR in your Minecraft profile's `mods/` folder.
6. Launch the game with Forge.
## Quick Start
1. Create a world.
2. Enable global cognition: `/gamerule globalCognition true` (or manually attach AGI: look at a mob and run `/simpleagi attach`).
3. All mobs now have their own brains, emotions, memories, and even language!
4. Use `/simpleagi agents` to track the number of active agents.
5. To build: `/simpleagi build shelter`.
---
## License
All rights reserved, author: bruhasub
---
> **Note:** For full architectural documentation, see [ARCHITECTURE.md](ARCHITECTURE.md) (includes ASCII diagrams, impact matrices, detailed component interaction schematics, and a complete description of every cognitive layer).
UA:
# simple-AGI — Emergent Artificial Intelligence for Minecraft
> **Minecraft Forge 1.20.1 · Java 17 · Mod ID: `simple_agi`**
**simple-AGI** замінює стандартний ІІ мобів Minecraft повноцінним когнітивним пайплайном:
```
Тіло → Гормони → Емоції → Пам'ять → MindContext → Рішення → Дія
```
Кожен AGI-кієкт (mob) має власний мозок із емоціями, пам'яттю, гормонами, соціальними зв'язками, просторовою картой переконань, інстинктами та генетично успадкованими рисами виду. Система повністю стохастична — два однакові моби в однакових умовах зроблять різні вибори, створюючи ефект живої екосистеми.
---
## Зміст
- [Функціонал](#функціонал)
- [Механізми роботи](#механізми-роботи)
- [Архітектура](#архітектура)
- [Команди](#команди)
- [Технічні деталі](#технічні-деталі)
- [Вимоги](#вимоги)
- [Встановлення](#встановлення)
- [Швидкий старт](#швидкий-старт)
---
## Функціонал
### 1. Когнітивний стек мобів (7 шарів)
| Шар | Компонент | Опис |
|-----|-----------|------|
| **Шар 1** | Тіло / Сприйняття | Здоров'я, рух, атака, сканування оточення |
| **Шар 2** | Гормони / Емоції | 7 гормонів → 8 емоцій (страх, горе, самотність, впевненість тощо) |
| **Шар 3** | Пам'ять | Епізодична пам'ять із емоційним вагуванням, постійне збереження на диск |
| **Шар 4** | Соціум | Сигнальне поле, обмін емоціями, бонди, міжвидова диспозиція |
| **Шар 5** | Когніція | MindContext (50+ полів), DecisionEngine (16 блоків правил), рольова система |
| **Шар 6** | Рішення | ActionField із softmax + стохастичний sample (NE argmax!) |
| **Шар 7** | Виконання | MobAgentBody — рух, атака, втеча, зупинка |
### 2. Емоції та гормони
**7 гормонів:**
- `adrenaline` — швидкий сплеск при загрозі
- `cortisol` — хронічний стрес
- `dopamine` — винагорода за дослідження
- `serotonin` — стабільність середовища
- `oxytocin` — соціальна близькість
- `hormoneAggression` — бойова готовність
- `melatonin` — нічний цикл
**8 емоцій:**
- `fear` (страх), `confidence` (впевненість), `grief` (горе),
- `loneliness` (самотність), `comfort` (комфорт), `peacefulness` (благість),
- `boredom` (нудьга), `stress` (стрес)
### 3. Пам'ять та просторова карта
- **MemorySystem** — епізодична пам'ять із вагованою важливістю (max 100 подій). Важливість = base × (1 + fear + adrenaline × 0.5). Події затухають із часом.
- **WorldModel** — просторова карта переконань (`8-блоковая сітка`). Кожна зона має: `danger`, `food`, `safety`, `familiarity` — усі з часовим затуханням.
- **PersistentMemoryManager** — збереження на диск у JSON: `cognitive_data/entity/<uuid>.json`, `species/<type>.json`, `world/danger_zone.json`.
### 4. Соціальна система
- **LocalSignalField** — просторове сигнальне поле (`DANGER`, `FOOD`, `ATTACK`, `HELP`, `SAFE`, `RETREAT`). Сигнали затухають (~143 тіків).
- **SocialExchangeSystem** — передача емоцій між мобами (зараження страхом/теплом), посилення бондів.
- **AttachmentSystem** — дім + бонди до союзників. Горе при смерті союзника ураховує силу бонду.
- **ResourceExchangeSystem** — обмін предметами між мобами (`OFFER_ITEM`, `ACCEPT_ITEM`).
### 5. Міжпоколінна пам'ять виду
- **SpeciesKnowledgeStore** — успадковує риси між поколіннями:
- `caution` (обережність), `aggression` (агресивність), `curiosity` (цікавість)
- `playerHostility` (ворожість до гравців)
- `generations` — лічильник поколінь
- При смерті моба риси із 70% вагою передаються наступному поколінню.
### 6. Виникаюча мова (Emergent Language)
- **Phoneme** — 16-символьний алфавіт (4 групи енергії).
- **Utterance** — слово (1–3 фонеми), унікальний int-ключ для O(1) lookup.
- **LexiconEntry** — вектор значень (6 слотів: DANGER, FOOD, SAFE, ATTACK, RETREAT, CONTACT).
- Мова виникає спонтанно: моб бачить загрозу → видає звук → сусід чує в той самий тік під час загрози → асоціація закріплюється → загальний лексикон.
- Слова, набрані впевненість `>= 0.55`, успадковуються між поколіннями.
### 7. Будівельна система (Build System)
- **BuildPlanner** + **BuildExecutor** — планування та виконання будівництва.
- Бот може будувати з шаблонів: `shelter`, `small_house`, `farm`, `wall`, `pillar`.
- З перевірками: перевірка інвентаря, контролі залипання, повторні спроби.
### 8. Оцінка балансу сил (GroupCapabilityModel)
- Сканування `20 блоків` для визначення союзників і загроз.
- Стани: `DOMINANT` (ratio > 1.4), `CONTESTED` (0.5–1.4), `VULNERABLE` (< 0.5), `ALONE`.
- Впливає на FLEE/ATTACK у DecisionEngine.
### 9. Рольова система (RoleSystem)
Автоматично призначається за контекстом:
- `LEADER` — домінантна група → broadcasts ATTACK
- `SCOUT` — високий dopamine → EXPLORE ↑
- `ATTACKER` — агресивний стан → ATTACK ↑
- `DEFENDER` — захист союзників
- `FOLLOWER` — слідування за лідером
### 10. Травматичне поширення (Trauma Propagation)
При смерті моба в радіусі 24 блоків:
- Свідки отримують fear + grief (з послабленням за відстань).
- Союзники отримують allyBonus + bondGrief (залежно від бонду).
- RevengeMotive активується.
- Adrenaline + emotional memory log + WorldModel event `DEATH`.
---
## Механізми роботи
### Повний цикл роботи мозку (за серверний тік)
```
SERVER TICK (кожні N тіків)
│
├─ AttachedMobController → цикл по всіх AGENTS (до 150)
│ │
│ ├─ 1. ТІЛО: Homeostasis.quickTick(), FeelingsSystem.tick(), RevengeMotive.tick()
│ ├─ 2. СОЦІУМ: SocialExchange (кожні 40 тіків)
│ ├─ 3. ЗАГРОЗА: findNearestThreat() → пам'ять → DANGER/HELP сигнал → WorldModel
│ ├─ 3b. WORLDMODEL: markVisited(); tick() (кожні 20 тіків)
│ ├─ 4. ЧАС: dayTime, isNight, isSunset, isSunrise
│ ├─ 5. ГРУПА: GroupCapabilityModel (кожні 30 тіків)
│ ├─ 6. ПОМСТА: RevengeMotive.getKillerEntity()
│ ├─ 7. СИГНАЛИ: LocalSignalField.senseIntensity ×6 типів
│ ├─ 7a. ПІШУГА: scanNearestFood (кожні 25 тіків)
│ ├─ 7b. ЗОНИ: findSafeZone / findFoodZone (кожні 40 тіків)
│ ├─ 8. MindContext: повний знімок (50+ полів)
│ ├─ 9. DecisionEngine: 16 блоків правил → ActionField
│ ├─ 10. ProfileBias: вид-специфічні інстинкти
│ ├─ 11. RoleSystem: роль → окремий зсув поля
│ ├─ softmaxNormalize() → sample() → ActionIntent
│ ├─ 12. executeForMob(): MobAgentBody виконує дію
│ ├─ 13. MicroBehavior (якщо IDLE/EXPLORE)
│ └─ 14. MemoryDecay: decayEntityRecords() + decayImportance()
```
### DecisionEngine (16 блоків правил)
| Блок | Опис | Ключові фактори |
|------|------|-----------------|
| Блок 1 | **FLEE** | fear × 0.45, cortisol × 0.20, critical health < 25% |
| Блок 2 | **ATTACK** | aggressionTrait × 0.30, hormoneAggression × 0.35, adrenaline × 0.20 |
| Блок 3 | **EXPLORE** | curiosityTrait × 0.30, dopamine × 0.25, boredom × 0.25 |
| Блок 4 | **IDLE** | peacefulness × 0.30, grief × 0.45 (паралізація) |
| Блок 5 | **EAT / MOVE_TO_FOOD** | hungerRatio × 0.60, nearestFood bonus |
| Блок 6 | **Cave penalty** | isInCave + dark → FLEE↑, IDLE↑ у non-aggressor |
| Блок 7 | **Semantic food** | semanticFoodScore > 0.1 → EXPLORE↑ |
| Блок 8-11 | **Сигнальні блоки** | sigDanger, sigFood, sigAttack, sigHelp, sigSafe, sigRetreat |
| Блок 12 | **Home pull** | homesickness > 0.3 → MOVE_TO(home) |
| Блок 13 | **Temporal** | isNight + avoidsSun → IDLE↑, FLEE↑ |
| Блок 14 | **Revenge** | revengeMotive > 0.4 → ATTACK(revengeTarget) |
| Блок 15 | **GroupCapability** | DOMINANT → ATTACK↑; VULNERABLE → FLEE↑ |
| Блок 16 | **WorldModel Phase 9** | zoneDanger > 0.35 → FLEE↑; familiarity < 0.05 → EXPLORE↑ |
### Стохастичність
`ActionField.sample()` використовує softmax + випадковий sample замість argmax. Це означає, що **жоден моб не є передбачуваним** — один і той самий моб у тих самих умовах може обрати різні дії, відповідно до пружної розподілу ймовірностей.
---
## Архітектура
### Структура проєкту
```
src/main/java/com/rayman/
├── action/
│ ├── ActionExecutor.java — Виконавець дій (рух, атака, втеча, їжа, дослідження)
│ ├── ActionField.java — Поле ваг імовірностей (softmax + sample)
│ └── ActionIntent.java — Інтент дії (з ціллю)
├── ai/
│ ├── AttachedMobController.java ← ЦЕНТРАЛЬНИЙ ОРКЕСТРАТОР
│ ├── AgiGoal.java — Minecraft Goal API wrapper
│ └── AIController.java — Контролер BotEntity
├── body/
│ ├── BotEntity.java — Спеціальна сутність AI-бота
│ ├── MobAgentBody.java — Рух/атака/стоп для будь-якого Mob
│ ├── AgentBody.java — Базовий інтерфейс для тіл
│ ├── InventorySystem.java — Управління інвентарем
│ └── core/
│ ├── Homeostasis.java — Агрегатор тілесного стану
│ ├── HormoneSystem.java — 7-гормональна система
│ ├── FeelingsSystem.java — 8-емоційна система
│ ├── InstinctSystem.java — Базові інстинкти
│ ├── ReflexSystem.java — Рефлекси
│ ├── NervousSystem.java — Нервова система
│ ├── FatigueSystem.java — Втома
│ ├── PainSystem.java — Біль
│ └── TemperatureSystem.java — Температура
├── core/
│ ├── MindContext.java ← ЗНІМОК КОГНІТИВНОГО СТАНУ (50+ полів)
│ ├── DecisionEngine.java ← 16 БЛОКІВ ПРАВИЛ
│ ├── ActionScheduler.java — Планувальник дій
│ ├── AttentionSystem.java — Система уваги
│ ├── GoalSystem.java — Цілі
│ ├── MotivationSystem.java — Мотивація
│ ├── PredictionSystem.java — Прогнозування
│ ├── FailureModel.java — Модель невдач
│ ├── StabilityGovernor.java — Стабільність поведінки
│ ├── SkillSystem.java — Навички
│ ├── GroupCapabilityModel.java — Оцінка балансу сил
│ ├── RevengeMotive.java — Мотив помсти
│ ├── RoleSystem.java — Рольова система
│ ├── CognitiveLayer.java — Інтерфейс когнітивного шару
│ └── MicroBehaviorSystem.java — Дрібні анімації
├── memory/
│ ├── MemorySystem.java — Епізодична пам'ять
│ └── PersistentMemoryManager.java — Постійне збереження JSON
├── perception/
│ ├── PerceptionSystem.java — Система сприйняття
│ ├── AttentionFocus.java — Фокус уваги (central/peripheral)
│ ├── VisualMemory.java — Візуальна пам'ять
│ ├── VisibilityResolver.java — Розв'язання видимості
│ ├── DynamicVisibility.java — Динамічна видимість
│ └── PerceptionResult.java — Результат сприйняття
├── personality/
│ ├── Personality.java — Особистість
│ ├── FeelingsSystem.java — Емоційна система
│ └── SelfModel.java — Модель самого себе
├── social/
│ ├── LocalSignalField.java — Просторове сигнальне поле
│ ├── SocialExchangeSystem.java — Обмін емоціями
│ ├── AttachmentSystem.java — Бонди та дім
│ ├── SocialMemory.java — Диспозиція до істот
│ ├── SpeciesKnowledgeStore.java — Міжпоколінна пам'ять
│ ├── SpeciesMind.java — Успадковані риси
│ ├── MobBehaviorProfile.java — Профіль поведінки виду
│ ├── CognitiveTier.java — Когнітивний рівень
│ └── ResourceExchangeSystem.java — Обмін предметами
├── language/
│ ├── LanguageSystem.java — Мовний процесор
│ ├── Phoneme.java — 16-символьний алфавіт
│ ├── Utterance.java — Слово (1–3 фонеми)
│ ├── LexiconEntry.java — Вхід у лексикон (вектор значень)
│ ├── SpeciesLexicon.java — Лексикон виду
│ ├── Ukrainian* — Розширення для української мови
│ └── OntologicalRoot.java — Онтологічний корінь
├── build/
│ ├── BuildPlanner.java — Планування будівництва
│ ├── BuildExecutor.java — Виконання будівництва
│ ├── BuildValidator.java — Валідація плану
│ └── BuildProgress.java — Відстеження прогресу
├── structure/
│ ├── StructureTemplate.java — Шаблон будівлі
│ └── TemplateLibrary.java — Бібліотека шаблонів
├── world/
│ ├── WorldModel.java — Просторова карта переконань
│ └── WorldState.java — Держава світу
├── SimpleAgi.java ← Головний клас мода
├── Config.java Конфігурація
└── ARCHITECTURE.md Повна архітектурна документація
```
---
## Команди
| Команда | Опис |
|---------|------|
| `/gamerule globalCognition true/false` | Авто-прикріплення AGI до всіх нових мобів |
| `/simpleagi spawn` | Створити BotEntity |
| `/simpleagi kill` | Видалити BotEntity |
| `/simpleagi attach` | Прикріпити AGI до моба в прицілі |
| `/simpleagi attach_type <type> [radius]` | Прикріпити AGI до всіх мобів типу |
| `/simpleagi detach` | Відкріпити AGI від моба в прицілі |
| `/simpleagi detach_all` | Відкріпити всі агенти |
| `/simpleagi agents` | Кількість активних агентів |
| `/simpleagi build <template>` | Розпочати будівництво (shelter, small_house, farm, wall, pillar) |
| `/simpleagi build_stop` | Зупинити будівництво |
### Конфігурація (config/simple_agi-common.toml):
```toml
aiTickInterval = 5 # Інтервал AI-тіків (сервер-тіків)
maxAgents = 150 # Максимум активних AGI-мобів (1–1000)
```
---
## Технічні деталі
### Performance & Optimization
- **LOD (Level of Detail):**
- `0–32 блоків` → повна AI
- `32–64 блоків` → половинна частота (skip 1/2)
- `>64 блоків` → чверть частота (skip 3/4)
- **Staggering:** Кожен моб має унікальний `phase = gameTime + mob.getId()`, тому всі операції з різними інтервалами рознесені по часу.
- **Chunk boundary guard:** Пропуск мобів у进展情况ванних чанках.
- **ConcurrentHashMap:** Усі static мапи використовують `ConcurrentHashMap` для потокобезпечності.
### Когнітивні рівні (CognitiveTier)
| Tier | lvl | maxPhon | lexCap | shareWds | memCap | wmRes | canTrade |
|------|-----|---------|--------|----------|--------|-------|----------|
| PRIMITIVE | 1 | 0 | 0 | 0 | 20 | 32 блоки | false |
| SIMPLE | 2 | 1 | 12 | 0 | 40 | 16 блоків| false |
| SOCIAL | 3 | 2 | 24 | 4 | 60 | 8 блоків | true |
| INTELLIGENT | 4 | 3 | 48 | 8 | 80 | 6 блоків | true |
| SAPIENT | 5 | 3 | 96 | 16 | 200 | 4 блоки | true |
---
## Вимоги
- **Minecraft:** 1.20.1
- **Forge:** наприклад, 47.x
- **Java:** 17+
- **Gradle:** 8.8+
## Встановлення
1. Склонуйте репозиторій.
2. Відкрийте у IDE (IntelliJ IDEA / Eclipse / VS Code).
3. Виконайте `./gradlew build` (або `gradlew.bat build` на Windows).
4. Отримайте `.jar` у `build/libs/simple_agi-<версія>.jar`.
5. Покладіть JAR у папку `mods/` вашого профілю Minecraft.
6. Запустіть гру з Forge.
## Швидкий старт
1. Створіть світ.
2. Увімкніть глобальне когнітивне підключення: `/gamerule globalCognition true` (або прикріпіть AGI вручну: дивіться на моба і виконайте `/simpleagi attach`).
3. Всі моби відте мають власний мозок, емоції, пам'ять і навіть мову!
4. Використайте `/simpleagi agents` щоб відстежувати кількість активних агентів.
5. Для будівництва: `/simpleagi build shelter`.
---
## Ліцензія
Всі права захищено, автор: bruhasub
---
> **Примітка:** Для повної архітектурної документації див. [ARCHITECTURE.md](ARCHITECTURE.md) (включає ASCII-схеми, матриці впливів, детальні схеми зв'язків між компонентами та повний опис кожного когнітивного шару).


