Tugas Besar 1 — IF2211 Strategi Algoritma
Pemanfaatan Algoritma Greedy dalam Pembuatan Bot Permainan Battlecode 2025
Semester II Tahun 2025/2026 — Institut Teknologi Bandung
| Nama | NIM |
|---|---|
| Aziza Dharma Putri | 13524017 |
| Suryani Mulia Utami | 13524042 |
| Alya Nur Rahma | 13524081 |
Nama Kelompok: LKCJS
Tubes1-IF2211StrategiAlgoritma-LKCJS/
├── src/
│ ├── mainbot/ # Bot Utama
│ │ ├── Helpers/
│ │ │ ├── common.java
│ │ │ ├── message.java
│ │ │ ├── pathFinder.java
│ │ │ ├── roaming.java
│ │ │ └── target.java
│ │ ├── Towers/
│ │ │ └── TowerAction.java
│ │ ├── Units/
│ │ │ ├── Mopper.java
│ │ │ ├── Soldier.java
│ │ │ └── Splasher.java
│ │ ├── Util/
│ │ ├── RobotPlayer.java
│ │ ├── Tower.java
│ │ └── Unit.java
│ ├── alt1/ # Bot Alternatif 1 — Adaptive Territory Control
│ │ ├── helpers/
│ │ │ ├── Comm.java
│ │ │ ├── MopperHelpers.java
│ │ │ ├── Navigation.java
│ │ │ ├── Sensing.java
│ │ │ ├── SoldierHelpers.java
│ │ │ └── SplasherHelpers.java
│ │ ├── towers/
│ │ │ └── TowerActions.java
│ │ ├── units/
│ │ │ ├── Mopper.java
│ │ │ ├── Soldier.java
│ │ │ └── Splasher.java
│ │ ├── util/
│ │ │ └── Constants.java
│ │ ├── Robot.java
│ │ ├── RobotPlayer.java
│ │ ├── Tower.java
│ │ └── Unit.java
│ └── alt2/ # Bot Alternatif 2 — Priority-Based Greedy
│ ├── helpers/
│ │ ├── MopperHelpers.java
│ │ ├── Navigation.java
│ │ ├── Sensing.java
│ │ ├── SoldierHelpers.java
│ │ └── SplasherHelpers.java
│ ├── towers/
│ │ └── TowerActions.java
│ ├── units/
│ │ ├── Mopper.java
│ │ ├── Soldier.java
│ │ └── Splasher.java
│ ├── util/
│ │ └── Constants.java
│ ├── Robot.java
│ ├── RobotPlayer.java
│ ├── Tower.java
│ └── Unit.java
├── doc/
│ └── LKCJS.pdf # Laporan Tugas Besar
└── README.md
Ketiga bot mengimplementasikan algoritma greedy yang bekerja dengan prinsip yang sama: setiap turn, setiap robot mengevaluasi semua aksi yang mungkin menggunakan fungsi skor heuristik, lalu mengeksekusi aksi dengan skor tertinggi. Tidak ada backtracking — setiap keputusan bersifat lokal-optimal.
Fungsi skor umum yang digunakan:
score(action) = benefit - distancePenalty - riskPenalty + bonus
Strategi berbasis koordinasi antar unit dengan komunikasi eksplisit melalui sistem message. Soldier melaporkan ruin bermasalah ke Tower, Tower meneruskan ke Mopper/Splasher, dan Mopper melaporkan kembali setelah ruin bersih. Pemilihan jenis Tower dilakukan secara greedy berdasarkan kondisi resource saat itu.
Heuristik utama:
- Soldier: task queue berbasis eksplorasi (
exploreTargets) dan pembangunan tower - Mopper: bersihkan ruin kotor → bersihkan enemy paint → roam
- Splasher: serang cluster enemy paint terbesar dalam jangkauan
- Tower: spawn unit berdasarkan skor
scoreSoldier,scoreMopper,scoreSplasher
Struktur package: mainbot
Pendekatan task-based greedy selection. Setiap robot memiliki 5–6 task kandidat yang dinilai dengan skor independen setiap turn. Task dengan skor tertinggi langsung dieksekusi.
Heuristik utama:
- Soldier: evaluasi 6 task setiap turn (REFILL, CLAIM_RUIN, TAINT_RUIN, SIEGE, PAINT_SRP, EXPLORE); pilih task dengan skor tertinggi; lakukan trailing paint di setiap tile yang dilewati
- Mopper: swing mop ke arah dengan robot musuh terbanyak → drain robot musuh non-tower → hapus cat musuh terdekat ruin → maju ke enemy base jika tidak ada target visible
- Splasher: hitung skor splash tiap tile (+12 enemy, +4 neutral, −3 ally, +30 enemy tower); serang tile skor tertinggi; navigasi agresif ke enemy tower tanpa penalti bahaya
- Tower: hitung skor tiga-way (soldier/mopper/splasher) berdasarkan ruin, enemy paint, ronde, dan jumlah tower; spawn unit skor tertinggi; broadcast intel ke tower sekutu
Struktur package: alt1
Pendekatan berbasis rasio unit dan wilayah kuadran. Tower memproduksi unit berdasarkan rasio Soldier:Mopper yang ada. Eksplorasi dilakukan dengan memilih kuadran peta terjauh dari posisi saat ini, ditambah jitter acak untuk menghindari pergerakan deterministik.
Heuristik utama:
- Soldier: evaluasi 4 aksi (REFILL, CLAIM_RUIN, DENY_RUIN, EXPLORE) dengan formula
baseScore − (distance × penalty); Soldier lebih memilih ruin terdekat untuk diklaim atau di-deny - Mopper: refill Soldier terdekat yang kritis → swing mop ke arah musuh terbanyak → hapus cat musuh dengan skor berbasis jarak dan bonus area ruin
- Splasher: hitung kepadatan area tiap tile dalam jangkauan serangan; serang tile dengan jumlah tile non-ally terbanyak di area splash
- Tower: spawn unit berdasarkan rasio Soldier:Mopper saat itu; serang musuh dengan HP terendah; upgrade jika chips > threshold
Struktur package: alt2
- Java versi 21 (direkomendasikan:
21.0.7 x86_64) - Gradle (tersedia di repo engine)
- OS: Windows / Linux / macOS
git clone https://github.com/Fariz36/STIMA-battle
cd STIMA-battleSalin folder mainbot/, alt1/, dan alt2/ dari repo ini ke dalam folder src/ di dalam STIMA-battle/.
STIMA-battle/
└── src/
├── mainbot/
├── alt1/
└── alt2/
# Di root STIMA-battle
./gradlew buildWindows: gunakan
gradlew.bat build
cd client
.\"Stima Battle Client"
# Jalankan aplikasi client yang tersediaSetelah aplikasi terbuka:
- Pilih direktori
STIMA-battlesebagai root directory (bukanSTIMA-battle/src) - Masuk ke tab Runner
- Pilih Team A dan Team B (misalnya
mainbotvsalt1) - Pilih map yang ingin diuji
- Klik Run
- Repositori GitHub: https://github.com/alyanrrhma/Tubes1-IF2211StrategiAlgoritma-LKCJS
- Video Pengenalan Program: https://bit.ly/VideoTubes1LKCJS
- Engine Battlecode STIMA 2026: https://github.com/Fariz36/STIMA-battle
- Dokumentasi API Battlecode: https://releases.battlecode.org/javadoc/battlecode25/3.1.0/battlecode/common/package-summary.html