Automated Reasoning : Backward Chaining

9 Maret 2026 7 views

1. Konsep Penalaran Otomatis

Penalaran (Reasoning) adalah proses berpikir untuk menarik kesimpulan dari fakta dan aturan yang diketahui. Dalam kecerdasan buatan, proses ini dilakukan secara otomatis oleh Mesin Inferensi (Inference Engine).
salah satu Mesin inferensi yang di pakai yaitu Backward Chaning

No

Strategi

Arah

Pertanyaan Kunci

2

Backward Chaining

Hipotesis → Fakta

"Apakah pasien ini menderita flu?"

2. Backward Chaining (Pelacakan Mundur)

2.1 Pengertian

Backward Chaining adalah metode inferensi yang bekerja dari hipotesis/tujuan menuju fakta (goal-driven). Sistem memulai dengan sebuah hipotesis (tujuan yang ingin dibuktikan), lalu menelusuri mundur untuk mencari fakta-fakta yang mendukung hipotesis tersebut.

2.2 Cara Kerja

LANGKAH-LANGKAH BACKWARD CHAINING:

1. Tentukan HIPOTESIS / TUJUAN yang ingin dibuktikan
2. Cari aturan yang kesimpulannya (THEN) = hipotesis
3. Periksa setiap kondisi (IF) dari aturan tersebut:
   → Jika kondisi ada di fakta → kondisi TERPENUHI ✓
   → Jika kondisi TIDAK ada di fakta → jadikan sub-tujuan baru
     → Ulangi langkah 2 untuk sub-tujuan tersebut
4. Jika semua kondisi terpenuhi → hipotesis TERBUKTI
   Jika ada kondisi yang tidak bisa dibuktikan → hipotesis GAGAL

2.3 Contoh Ilustrasi

Diketahui Basis Pengetahuan (sama seperti contoh Forward Chaining):

R1: IF A AND B        THEN C
R2: IF C AND D        THEN E
R3: IF E              THEN F

Diketahui Fakta Awal: A, B, D
Tujuan: Buktikan apakah F benar?

Proses Backward Chaining:

Tujuan: F
│
├─ Cari aturan → R3: IF E THEN F
│  └─ Apakah E ada di fakta? ❌ TIDAK → jadikan sub-tujuan
│
│     Sub-tujuan: E
│     ├─ Cari aturan → R2: IF C AND D THEN E
│     │  ├─ Apakah C ada di fakta? ❌ TIDAK → jadikan sub-tujuan
│     │  │
│     │  │     Sub-tujuan: C
│     │  │     ├─ Cari aturan → R1: IF A AND B THEN C
│     │  │     │  ├─ Apakah A ada di fakta? ✅ YA
│     │  │     │  └─ Apakah B ada di fakta? ✅ YA
│     │  │     └─ C TERBUKTI ✅ (tambahkan ke fakta)
│     │  │
│     │  └─ Apakah D ada di fakta? ✅ YA
│     └─ E TERBUKTI ✅ (tambahkan ke fakta)
│
└─ F TERBUKTI ✅

Kesimpulan: F = BENAR

3. Studi Kasus: Sistem Pakar Diagnosa Penyakit

Kita akan menerapkan Forward Chaining dan Backward Chaining pada kasus nyata: diagnosa penyakit berdasarkan gejala.

Basis Pengetahuan:

R1: IF demam AND batuk AND pilek               THEN Flu
R2: IF demam AND batuk_kering AND sesak_napas   THEN COVID-19
R3: IF demam_tinggi AND nyeri_sendi AND ruam    THEN Demam Berdarah
R4: IF demam AND sakit_perut AND diare          THEN Tifus
R5: IF nyeri_lambung AND mual AND kembung       THEN Maag
# === Studi Kasus: Backward Chaining - Diagnosa Penyakit ===

# Basis Pengetahuan: Aturan diagnosa penyakit
rules_penyakit = [
    {"id": "R1", "kondisi": ["demam", "batuk", "pilek"],
     "kesimpulan": "Flu"},
    {"id": "R2", "kondisi": ["demam", "batuk_kering", "sesak_napas"],
     "kesimpulan": "COVID-19"},
    {"id": "R3", "kondisi": ["demam_tinggi", "nyeri_sendi", "ruam"],
     "kesimpulan": "Demam Berdarah"},
    {"id": "R4", "kondisi": ["demam", "sakit_perut", "diare"],
     "kesimpulan": "Tifus"},
    {"id": "R5", "kondisi": ["nyeri_lambung", "mual", "kembung"],
     "kesimpulan": "Maag"},
]

def backward_chaining_diagnosa(rules, fakta, tujuan, indent=0):
    """
    Backward Chaining untuk memverifikasi apakah pasien
    menderita penyakit tertentu.
    """
    prefix = "  " * indent

    # Jika tujuan sudah ada di fakta (gejala yang dialami pasien)
    if tujuan in fakta:
        print(f"{prefix}✅ Gejala '{tujuan}' → ADA pada pasien")
        return True

    # Cari aturan yang kesimpulannya = tujuan
    for rule in rules:
        if rule["kesimpulan"] == tujuan:
            print(f"{prefix} {rule['id']}: Untuk membuktikan '{tujuan}', "
                  f"perlu: {rule['kondisi']}")

            semua_terpenuhi = True
            for kondisi in rule["kondisi"]:
                print(f"{prefix}   Cek gejala: '{kondisi}'")
                if kondisi in fakta:
                    print(f"{prefix}      ✅ '{kondisi}' ADA pada pasien")
                else:
                    print(f"{prefix}      ❌ '{kondisi}' TIDAK ADA pada pasien")
                    semua_terpenuhi = False

            if semua_terpenuhi:
                print(f"{prefix}✅ Semua gejala terpenuhi → '{tujuan}' TERBUKTI!")
                return True
            else:
                print(f"{prefix}❌ Gejala tidak lengkap → '{tujuan}' TIDAK terbukti")
                return False

    print(f"{prefix}❌ Tidak ada aturan untuk '{tujuan}'")
    return False


# ===== CONTOH: Verifikasi Hipotesis =====
gejala_pasien = {"demam", "batuk", "pilek"}

# Hipotesis 1: Apakah pasien menderita Flu?
print("=" * 60)
print("BACKWARD CHAINING — Verifikasi Hipotesis")
print("=" * 60)
print(f"Gejala pasien: {gejala_pasien}")
print()

print("━" * 60)
print("Hipotesis 1: Apakah pasien menderita FLU?")
print("━" * 60)
hasil_1 = backward_chaining_diagnosa(rules_penyakit, gejala_pasien, "Flu")

print()
print("━" * 60)
print("Hipotesis 2: Apakah pasien menderita COVID-19?")
print("━" * 60)
hasil_2 = backward_chaining_diagnosa(rules_penyakit, gejala_pasien, "COVID-19")

print()
print("━" * 60)
print("Hipotesis 3: Apakah pasien menderita DEMAM BERDARAH?")
print("━" * 60)
hasil_3 = backward_chaining_diagnosa(rules_penyakit, gejala_pasien, "Demam Berdarah")

# Ringkasan
print()
print("=" * 60)
print("RINGKASAN VERIFIKASI")
print("=" * 60)
hipotesis = [("Flu", hasil_1), ("COVID-19", hasil_2), ("Demam Berdarah", hasil_3)]
for nama, hasil in hipotesis:
    status = "✅ TERBUKTI" if hasil else "❌ TIDAK TERBUKTI"
    print(f"   {nama:20s} → {status}")
print("=" * 60)

4. Studi Kasus Lanjutan: Sistem Pakar Rekomendasi Beasiswa

Kasus ini lebih kompleks karena menggunakan aturan berantai (chained rules) — di mana kesimpulan satu aturan menjadi kondisi bagi aturan lain.

Basis Pengetahuan:

Aturan Level 1 (fakta dasar → fakta antara):

R1: IF IPK >= 3.5 AND semester >= 5       THEN akademik_baik
R2: IF penghasilan_ortu_rendah             THEN ekonomi_lemah
R3: IF aktif_organisasi AND aktif_lomba    THEN non_akademik_baik
R4: IF sertifikat_bahasa AND publikasi     THEN prestasi_khusus

Aturan Level 2 (fakta antara → rekomendasi):

R5: IF akademik_baik AND ekonomi_lemah                     THEN Beasiswa Bidikmisi
R6: IF akademik_baik AND non_akademik_baik                 THEN Beasiswa Prestasi
R7: IF akademik_baik AND prestasi_khusus                   THEN Beasiswa LPDP
R8: IF akademik_baik AND ekonomi_lemah AND non_akademik_baik  THEN Beasiswa Unggulan

Perhatikan bahwa R5–R8 bergantung pada hasil R1–R4. Ini menunjukkan bagaimana aturan berantai bekerja dalam sistem pakar yang lebih realistis.

Silahkan anda untuk mencoba sendiri dari studi kasus ini

Komentar

Tulis Komentar

Belum ada komentar. Jadilah yang pertama!