Minggu, 08 Februari 2015

Dempster-Shafer Theory Dalam sistem pakar

Teori Dempster-Shafer ( DST ) merupakan teori matematika dari evidence. Teori tersebut dapat memberikan sebuah cara untuk menggabungkan evidence dari beberapa sumber dan mendatangkan/memberikan tingkat kepercayaan (direpresentasikan melalui fungsi kepercayaan) dimana mengambil dari seluruh evidence yang tersedia. Teori tersebut pertama kali dikembangkan oleh Arthur P. Dempster and Glenn Shafer.

Dalam sebuah akal yang sempit, definisi teori Dempster-Shafer mengacu pada konsepsi original dari pada teori oleh Dempster dan Shafer. Bagaimanapun, merupakan sebuah teori yang biasa digunakan untuk mendefinisikan akal secara lebih luas dari beberapa pendekatan umum serupa, sebagaimana telah diadaptasi untuk beberapa jenis dari situasi. Pada situasi tertentu , banyak penulis telah menawarkan aturan berbeda untuk menggabungkan barang bukti, biasanya dengan melihat kembali dan menangani konflik barang bukti secara lebih baik.

Teori Dempster–Shafer merupakan generalisasi dari teori Bayesian probabilitas subjektif. Dimana kebutuhan probabilitas yang akan dibutuhkan untuk setiap pertanyaan dari keinginan, fungsi kepercayaan berdasarkan pada tingkat kepercayaan ( percaya diri atau percaya ) untuk sebuah pertanyaan dalam probabilitas untuk sebuah pertanyaan tertentu. Derajat kepercayaan dapat memiliki atau tidak memiliki properti matematika dari probabilitas, berapa banyak perbedaan yang bergantung dari seberapa dekat 2 buah pertanyaan berelasi. Tempatkan di jalur lain, yang merupakan jalur untuk merepresentasikan epistemic plausibilitas, tetapi hal tersebut dapat memberikan hasil jawaban yang kontradiksi dimana dapat dihasilkan menggunakan teori probabilitas.

Melalui yang digunakan sebagai metode dari penggabungan sensor, teori dempster shafer beradasarkan pada dua ide : memperoleh tingkat kepercayaan untuk sebuah pertanyaan dari probabilitas subjektif dimana dapat berdasarkan pada item independent sebuah barang bukti. Dengan esensi, derajat dari kepercayaan dalam sebuah proporsi yang bergantung secara primer daripada jumlah jawaban ( untuk pertanyaan yang berelasi ) yang berisikan proposi. Dan probabilitas subjektif untuk setiap pertanyaan. Dan juga berkontribusi pada aturan dari kombinasi yang merefleksikan asumsi umum mengenai data.

Melalui formalisasi sebuah derajat kepercayaan ( dan juga diferensikan secara umum ) merupakan sebuah representasi sebagai fungsi kepercayaan dari pada distribusi probabilitas Bayesian . Nilai probabilitas diberikan untuk sekumpulan dari kemungkinan daripada sebuah acara tunggal. : melalui perbandingan tersebut ditetapkan dari fakta dimana secara natural menyandikan barang bukti sesuai dengan keinginan dari proporsi.

Kerangka shafer’s dapat memberikan kepercayaan mengenai proposi untuk dapat direpresentasikan sebagai interval, diliputi dengan 2 buah nilai, keperyaan ( atau dukungan ) dan hal yang masuk akal.

belief ≤ plausibility

Kepercayaan dalam hipotesis di konstitusikan melalui jumlah dari masa dari keseluruhan kumpulan dengan (seperti jumlah dari masa untuk keseluruhan subset dari hipotesis ). Merupakan jumlah dari kepercayaan dimana secara langsung mendukung sekumpulan hipotesis yang diberikan terakhir, membentuk dasar. Kepercayaan ( biasanya dinotasikan dengan Bel ) mengukur kekuatan dari barang bukti dalam kesukaan dari sekumpulan atau proporsi. Memiliki rentang antara 0 ( mengindikasikan tidak ada barang bukti ) sampai 1 ( yang menunjukan kepastian ). Hal yang masuk akal merupakan 1 dikurangi jumlah dari masa dari semua kumpulan masa untuk seluruh kumpulan yang berinterseksi dengan hipotesis adalah kosong.

Merupakan sebuah batas atas dari kemungkinan dimana hipotesis dapat menjadi benar. Dapat memungkinkan menjadi kondisi dari sistem menuju nilai yang diinginkan, dikarenakan terdapat banyak barang bukti, dikarenakan terdapat banyak barang bukti yang kontradiksi hipotesis. Plausability ( hal yang masuk akal ) didefinisikan sebagai Pl(s) = 1 – Bel ( ~s). juga memiliki rentang dari 0 sampai 1 dan mengukur tambahan dimana setiap barang bukti merupakan selera dari ~s merupakan ruang diluar dari pada s.

tabel probabilitas

Hypothesis

Mass

Belief

Plausibility

Null (neither alive nor dead)

0.0

0.0

0.0

Alive

0.2

0.2

0.5

Dead

0.5

0.5

0.8

Either (alive or dead)

0.3

1.0

1.0

Algoritma Dempster-Shafer

merupakan gambaran algoritma, untuk mempermudah pembacaan algoritma DST, maka dijelaskan melalui flow diagram sebagai berikut :

clip_image001

Keterangan :

X = Penyakit

I = Iterasi jumlah Gejala

m = nilai densitas / kepercayaan

Beberapa pengembangan dari aturan dempster-shafer :

Inagaki mempelajari hubungan relasi antara ketiga aturan : Yager, Dempster dan Inagaki “extra rule”. Tanaka dan Klir menuliskan bahwa seleksi dari parameter k biasanya menentukan bagaimana dapat bertepatan dengan informasi yang memiliki konflik.

clip_image002

Aturan Yager (k=0) memberikan konflik pada kumpulan universal dan tidak merubah barang bukti.

Aturan Dempster (k=1/ [1-q(Æ]) menyaring barang bukti dengan mengacuhkan setiap konflik.

Aturan Inagaki (k=1/ [1- q(Æ) – q(X)] ) menyaring barang bukti dengan melakukan skala konflik dan pengacuhan.

Derajat dari pengaruh dari penyekalaan yang ditentukan melalui nilai relative q(X) dan q(Æ).

K memiliki efek untuk penyekalaan pentingnya konflik yang direpresentasikan melalui hasil kombinasi. Semakin besar nilai dari k, maka semakin besar pula perubahan nilai untuk barang bukti. Sebagaimana yang telah dituliskan sebelumnnya, prosedur yang telah ditetapkan untuk seleksi k merupakan langkah maju dalam mengimplementasikan aturan di dalam aplikasi. Semakin besar konstribusi dari inagaki.

Penyatuan aturan dari kombinasi dapat disimpulkan sebagai berikut :

1. Penggunaan fungsi dasar yager untuk membangun kelas yang telah memiliki parameter dari aturan kombinasi dimana bagian dari kedua aturan dempster dan aturan yager

2. Inagaki membandingkan dan memesan 3 kombinasi aturan : aturan dempster, yager dan ingaki, merupakan sebuah nilai m di dalam konteks dari sebuah aplikasi.

referensi:

Kari Sentz and Scott Ferson (2002); Combination of Evidence in Dempster–Shafer Theory, Sandia National Laboratories SAND 2002-0835

http://en.wikipedia.org/wiki/Dempster-Shafer

Seminar Nasional Aplikasi Teknologi Informasi 2008 (SNATI 2008)

Combination of Evidence in Dempster-Shafer Theory, Kari Sentz

SISTEM PAKAR DIAGNOSA PENYAKIT TANAMAN PADI BERBASIS WEB DENGAN BACKWARD CHAINING

Kali ini saya mengambil pada Jurnal Anton Setiawan Honggowibowo dengan judul SISTEM PAKAR DIAGNOSA PENYAKIT TANAMAN PADI BERBASIS WEB DENGAN FORWARD DAN BACKWARD CHAINING dengan nomor ISSSN : 1693-6930

Disini saya Cuma mengambil backward chaining nya saja. Dengan mengambil diagnose sebagai berikut :

NO

GEJALA

1

Tanaman Kerdil

2

Anakan berkurang / sedikit

3

Daun menguning sampai jinga dari pucuk ke pangkal

4

Daun muda terlihat seperti mottle

5

Daun tua seperti bintik-bintik coklat bekas ditusuk

6

Bercak-bercak berwarna coklat

7

Anakan bertambah banyak

8

Daun pendek dan sempit

9

Daun berwarna hijau pucat/kekuningan-kuningan

10

Bercak menyerang daun

11

Anakan tumbuh tegak

Rulenya adalah :

clip_image002

dan jika user melakukan proses input gejala di luar rule akan di berikan nilai defaultnya yaitu :" Penyakit Tidak Terdeteksi"

Untuk penyakit hanya mendeteksi 2 buah penyakit pada padi yaitu : Tungro & Kerdil Rumput

sistem dibangun menggunakan

Framework CodeIgniter 2.2.0

Tampilan menggunakan BootStrap

Bentuk View pada sistem :

clip_image004

Master Gejala

clip_image006

Master Penyakit

clip_image008

Master Solusi

clip_image010

Master Rule

clip_image012

Konfigurasi Sistem

clip_image014

Master User

clip_image016

Tampilan Input Gejala

clip_image018

Hasil Penyakit dan Solusi

Live Demo : DISINI

Sumber


CATATAN:

Metode Backward Chaining adalah metode yang digunakan untuk menentukan jenis penyakit dengan menyebutkan gejala – gejala yang ditimbulkan kemudian dari gejala-gejala tersebut akan disimpulkan suatu kesimpulan. metode backward chaining sering digunakan dalam aplikasi sistem pakar karena metode sangat mudah dalam menentukan kesimpulan.

MESIN Interferensi Forward Chaining dan Backward Chaining


Mesin Inferensi (Inference engine) merupakan pusat pengambilan keputusan pada Sistem Pakar dengan penyesuaian fakta-fakta pada memori dengan basis pengetahuan untuk mendapatkan kesimpulan dan jawaban. Inference engine merupakan otak dan pemikir dari suatu Sistem Pakar. Dalam inference engine ini sistem melakukan suatu penalaran yang dilandasi oleh basis pengetahuan (didapat dari pakar) yang dimiliki sistem sehingga menghasilkan sebuah keputusan.

Proses penalaran ada dua macam dan biasanya lebih disebut dengan proses chaining (forward chaining dan backward chaining). Kedua metode ini mempunyai kelebihan tersendiri, semuanya itu tergantung terutama dari kondisi permasalahan yang dihadapi dan basis pengetahuan.

Ada dua metode inferensi yang dapat digunakan, yaitu:

  • Forward Chaining

Forward chaining merupakan metode inferensi yang melakukan penalaran dari suatu masalah kepada solusinya. Jika klausa premis sesuai dengan situasi (bernilai TRUE), maka proses akan menyatakan konklusi. Forward chaining adalah data-driven karena inferensi dimulai dengan informasi yang tersedia dan baru konklusi diperoleh. Jika suatu aplikasi menghasilkan tree yang lebar dan tidak dalam, maka gunakan forward chaining.

Contoh :

Terdapat 10 aturan yang tersimpan dalam basis pengetahuan yaitu :

R1 : if A and B then C

R2 : if C then D

R3 : if A and E then F

R4 : if A then G

R5 : if F and G then D

R6 : if G and E then H

R7 : if C and H then I

R8 : if I and A then J

R9 : if G then J

R10 : if J then K

Fakta awal yang diberikan hanya A dan E, ingin membuktikan apakah K bernilai benar. Proses penalaran forward chaining terlihat pada gambar dibawah :

Gambar Forward Chaining
  • Backward Chaining

Menggunakan pendekatan goal-driven, dimulai dari harapan apa yang akan terjadi (hipotesis) dan kemudian mencari bukti yang mendukung (atau berlawanan) dengan harapan kita. Sering hal ini memerlukan perumusan dan pengujian hipotesis sementara. Jika suatu aplikasi menghasilkan tree yang sempit dan cukup dalam, maka gunakan backward chaining.

Contoh :

Seperti pada contoh forward chining, terdapat 10 aturan yang sama pada basis pengetahuan dan fakta awal yang diberikan hanya A dan E. ingin membuktikan apakah K bernilai benar. Proses penalaran backward chaining terlihat pada gambar berikut :

Gambar Backward Chaining

Contoh KASUS  Sistem Pakar Penasehat Keuangan

Kasus : user ingin berkonsultasi apakah tepat jika dia berinvestasi pada stock IBM?

Variabel-variabel yang digunakan:

A = memiliki uang $10.000 untuk investasi

B = berusia < 30 tahun

C = tingkat pendidikan pada level college

D = pendapatan minimum pertahun $40.000

E = investasi pada bidang Sekuritas (Asuransi)

F = investasi pada saham pertumbuhan (growth stock)

G = investasi pada saham IBM

Setiap variabel dapat bernilai TRUE atau FALSE

FAKTA YANG ADA:

§ Diasumsikan si user (investor) memiliki data:

o Memiliki uang $10.000 (A TRUE)

o Berusia 25 tahun (B TRUE)

§ Dia ingin meminta nasihat apakah tepat jika berinvestasi pada IBM stock?

RULES

R1 : IF seseorang memiliki uang $10.000 untuk berinvestasi AND dia berpendidikan pada level college THEN dia harus berinvestasi pada bidang sekuritas

R2 : IF seseorang memiliki pendapatan per tahun min $40.000 AND dia berpendidikan pada level college THEN dia harus berinvestasi pada saham pertumbuhan (growth stocks)

R3 : IF seseorang berusia < 30 tahun AND dia berinvestasi pada bidang sekuritas THEN dia sebaiknya berinvestasi pada saham pertumbuhan

R4 : IF seseorang berusia <> 22 tahun THEN dia berpendidikan college

R5 : IF seseorang ingin berinvestasi pada saham pertumbuhan THEN saham yang dipilih adalah saham IBM.

Rule simplification:

– R1: IF A and C, THEN E

– R2: IF D and C, THEN F

– R3: IF B and E, THEN F

– R4: IF B, THEN C

– R5: IF F, THEN G

Solusi dengan Forward Chaining :

Step I : IF A and C Then E = R1

Step II : IF B then C A,B,C -> True = R4

Step III : If A and C then E A,B,C -> True = R2

Step IV : If B ad E then F A,B,C,E,F -> true = R3

step V : if F then G. G->True

kesimpulan : Cocok untuk investasi saham IBM


Sumber:


Catatan :

Aritkel ini berisi tentang penjelasan tentang mesi interferensi (Forward Chaining dan Backward Chaining) dan contoh-contoh penggunaannya.

Pengantar logika fuzzy

Fuzzy Logic adalah metodologi pemecahan masalah  dengan beribu – ribu aplikasi dalam pengendali yang tersimpan dan pemrosesan informasi. Fuzzy logic menyediakan cara sederhana untuk menggambarkan kesimpulan pasti dari informasi yang ambigu, samar – samar, atau tidak tepat. Sedikit banyak, fuzzy logic menyerupai pembuatan keputusan pada manusia dengan kemampuannya untuk bekerja dari data yang ditafsirkan dan mencari solusi yang tepat.

Fuzzy logic pada dasarnya merupakan logika bernilai banyak (multivalued logic) yang dapat mendefinisikan nilai diantara keadaan konvensional seperti ya atau tidak, benar atau salah, hitam atau putih, dan sebagainya. Penalaran fuzzy menyediakan cara untuk memahami kinerja dari system dengan cara menilai input dan output system dari hasil pengamatan.


Sejarah

Konsep Fuzzy Logic diperkenalkan oleh Prof. Lotfi Zadeh dari Universitas California di Berkeley pada 1965, dan dipresentasikan bukan sebagai suatu metodologi control, tetapi sebagai suatu cara pemrosesan data dengan memperkenankan penggunaan partial set membership dibanding crisp set membership atau non-membership. Pendekatan pada set teori ini tidak diaplikasikan pada system control sampai tahun 70an karena kemampuan computer yang tidak cukup pada saat itu. Profesor Zadeh berpikir bahwa orang tidak membutuhkan kepastian, masukan informasi numeric, dan belum mampu terhadap control adaptif yang tinggi.

Konsep fuzzy logic kemudian berhasil diaplikasikan dalam bidang control oleh E.H. Mamdani. Sejak saat itu aplikasi fuzzy berkembang kian pesat. Di tahun 1980an negara Jepang dan negara – negara di Eropa secara agresif membangun produk nyata sehubungan dengan konsep logika fuzzy yang diintegrasikan dalam produk – produk kebutuhan rumah tangga seperti vacuum cleaner, microwave oven dan kamera video.  Sementara pengusaha di Amerika Serikat tidak secepat itu mencakup teknologi ini. Fuzzy logic  berkembang pesat selama beberapa tahun terakhir. Terdapat lebih dari dua ribu produk dipasaran yang menggunakan konsep fuzzy logic, mulai dari mesin cuci hingga kereta berkecepatan tinggi. Setiap aplikasi tentunya menyadari beberapa keuntungan dari fuzzy logic seperti performa, kesederhaan, biaya rendah dan produktifitasnya.


Alasan Penggunaan Fuzzy Logic

Fuzzy logic menawarkan beberapa karakteristik unik yang menjadikannya suatu pilihan yang baik untuk banyak masalah control. Karakteristik tersebut antara lain :

  1. Sudah menjadi sifatnya yang kuat selama tidak membutuhkan ketepatan, input yang bebas derau, dan dapat diprogram untuk gagal dengan aman jika sensor arus balik dimatikan atau rusak. Control output adalah fungsi control halus meskipun jarak variasi input yang cukup besar.
  2. Selama fuzzy logic controller memproses aturan – aturan yang dibuat user yang memerintah system control target, ia dapat dimodifikasi dengan mudah untuk meningkatkan atau mengubah secara drastis performa system. Sensor yang baru dapat dengan mudah digabungkan kedalam system secara sederhana dengan menghasilkan aturan memerintah yang sesuai.
  3. Fuzzy logic tidak terbatas pada sedikit masukan umpan-balik dan satu atau dua output control, tidak juga penting untuk menilai atau menghitung parameter rata -  rata perubahan dengan tujuan agar ia diimplementasikan. Sensor data yang menyediakan  beberapa indikasi untuk aksi dan reaksi system sudah cukup. Hal ini memungkinkan sensor menjadi murah dan tidak tepat sehingga menghemat biaya system keseluruhan dan kompleksitas rendah.
  4. Karena operasi – operasi yang berbasiskan aturan, jumlah input yang masuk akal dapat diproses ( 1 sampai 8 atau lebih ) dan  banyak output ( 1 sampai 4 atau lebih ) dihasilkan, walaupun pendefinisian rulebase secara cepat menjadi rumit jika terlalu banyak input dan output dipilih untuk implementasi tunggal selama pendefinisian rules(aturan), hubungan timbal baliknya juga harus didefinisikan. Akan lebih baik jika memecah system kedalam potongan – potongan yang lebih kecil dan menggunakan fuzzy logic controllers yang lebih kecil untuk didistribusikan pada system, masing – masing dengan tanggung jawab yang lebih terbatas.
  5. Fuzzy Logic dapat mengontrol system nonlinier yang akan sulit atau tidak mungkin untuk dimodelkan secara matematis. Hal ini membuka pintu bagi system control yang secara normal dianggap tidak mungkin untuk otomatisasi.

Sedangkan karakteristik utama dari fuzzy logic yang ditemukan oleh Prof. Lotfi A. Zadeh adalah sebagai berikut:

  • Dalam fuzzy logic, penalaran tepat dipandang sebagai suatu kasus terbatas dari penalaran kira –kira.
  • Dalam fuzzy logic segala sesuatunya adalah masalah derajat.
  • System logis manapun dapat difuzzifikasi.
  • Dalam fuzzy logic, pengetahuan diinterpretasikan sebagai koleksi dari fuzzy yang dipaksakan pada sekumpulan variable.
  • Kesimpulan dipandang sebagai sebuah proses dari perkembangan pembatas elastis.

Kelebihan Logika Fuzzy

  1. Konsep logika fuzzy mudah dimengerti. Konsep matematis yang mendasari penalaran fuzzy sangat sederhana dan mudah dimengerti.
  2. Logika Fuzzy sangat fleksibel.
  3. Logika fuzzy memiliki toleransi terhadap data-data yang tidak tepat.
  4. Logika Fuzzy mampu memodelkan fungsi-fungsi non linearyang sangat kompleks.
  5. Logika fuzzy dapat membangun dan mengaplikasikan pengalaman-pengalaman para pakar secara langsung tanpa harus melalui proses pelatihan.
  6. Logika Fuzzy dapat bekerjasama dengan teknik-teknik kendali secara konvensional.
  7. Logika fuzzy didasarkan pada bahasa alami.

Kekurangan Logika Fuzzy

Selain kelebihan yang telah dijelaskan di atas, ternyata Fuzzy Logic juga memiliki kekurangan. Dalam mendesain fuzzy logic, sering ditemukan kesulitan dalam menentukan preferensi atau parameter agar output yang dihasilkan akurat, yaitu :

  1. Model Mamdani atau Sugeno atau model lain? Penentuan model inference harus tepat, Mamdani biasanya cocok untuk masalah intuitive sedangkan sugeno untuk permasalahan yang menangani control
  2. Jumlah Nilai Linguistik untuk setiap variabel?Kita harus merubah nilai crisp menjadi nilai linguisik. Jumlah dari nilai linguistik yang digunakan harus sesuai dengan permasalahan yang akan kita selesaikan.
  3. Batas-batas Nilai Linguistik? Batas-batas nilai linguistik akan sangat berpengaruh pada akurasi fuzzy logic.
  4. Fungsi Keanggotaan: Segitiga, trapesium, phi, …?
  5. Fuzzy rule yang tepat?

Bagaimana Fuzzy Logic Digunakan

Adapun langkah – langkah penggunaan fuzzy logic adalah sebagai berikut:

  • Definisikan obyektif dan criteria control :
  1. Apa yang kita coba control ?
  2. Apa yang harus kita lakukan untuk mengontrol system ?
  3. Respon seperti apa yang kita butuhkan ?
  4. Apa mode kegagalan system yang mungkin ?
  • Tentukan hubungan antara input dan output serta memilih jumlah minimum variable input pada mesin fuzzy logic(secara khusus error dan rata – rata perubahan error).
  • Dengan menggunakan struktur berbasis aturan dari fuzzy logic, jabarkan permasalahan control ke dalam aturan IF X AND Y THEN Z yang mendefinisikan respon output system yang diinginkan untuk kondisi input system yang diberikan. Jumlah dan kompleksitas dari rules bergantung pada jumlah parameter input yang diproses dan jumlah variable fuzzy yang bekerjasama dengan tiap – tiap parameter. Jika mungkin, gunakan setidaknya satu variable dan turunan waktunya. Walaupun mungkin untuk menggunakan sebuah parameter tunggal yang error saat itu juga tanpa mengetahui rata – rata perubahannya, hal ini melumpuhkan kemampuan system untuk meminamalisasi keterlampauan untuk sebuah tingkat input.
  • Buat fungsi keanggotaan yang menjelaskan nilai input atau output yang digunakan didalam rules.
  • Buat rutinitas proses awal dan akhir yang penting jika diimplementasikan dalam software, sebaliknya program rules kedalam mesin hardware fuzzy logic.
  • Test system, evaluasi hasil, atur rules dan fungsi keanggotaan, dan retest sampai hasil yang memuaskan didapat.


Beberapa Hal yang Perlu diketahui dalam Logika Fuzzy

Ada beberapa hal yang perlu diketahui dalam sistem fuzzy, yaitu:

a. Variabel Fuzzy

Variabel fuzzy merupakan variabel yang akan dibahas dalam suatu sistem fuzzy. Contoh: umur, permintaan, persediaan, produksi, dsb.

b. Himpunan Fuzzy

Tahun 1965, Profesor L.A. Zadeh memperkenalkan teori himpunan fuzzy, yang secara tidak langsung mengisyaratkan bahwa tidak hanya teori probabilitas saja yang dapat merepresentasikan ketidakpastian. Teori himpunan fuzzy adalah merupakan perluasan dari teori logika Boolean yang menyatakan tingkat angka 1 atau 0 atau pernyataan benar atau salah, sedang pada teori logika fuzzy terdapat tingkat nilai, yaitu :

  1. satu (1), yang berarti bahwa suatu item menjadi anggota dalam suatu himpunan, atau
  2. nol (0), yang berarti bahwa suatu item tidak menjadi anggota dalam suatu himpunan.

Contoh 1:
Jika diketahui:
S = {1,2,3,4,5,6} adalah semesta pembicaraan
A = {1,2,3}
B = {3,4,5}

Maka, bisa dikatakan bahwa :

  • Nilai keanggotaan 2 pada himpunan A, fuzzyA, karena fuzzyD.
  • Nilai keanggotaan 3 pada himpunan A, fuzzyB, karena fuzzyE .
  • Nilai keanggotaan 2 pada himpunan B, fuzzyC, karena fuzzyF.

Contoh 2:
Misalkan variabel suhu dibagi menjadi 3 kategori, yaitu:
DINGIN suhu < 15 derajat celcius SEDANG 15 ? suhu ? 28 derajat celcius PANAS suhu > 28 derajat celcius
Nilai keanggotaan secara grafis, himpunan DINGIN, SEDANG, dan PANAS dapat dilihat pada gambar berikut:

fuzzy2

Dari gambar diatas yang merupakan himpunan dari DINGIN, SEDANG, dan PANAS dapat dijelaskan bahwa:

  • Apabila terdapat suhu 14 derajat celcius, maka dikatakan suhu adalah DINGIN fuzzyG
  • Apabila terdapat suhu 15 derajat celcius, maka dikatakan suhu adalah TIDAK DINGIN fuzzyH
  • Apabila terdapat suhu 15 derajat celcius kurang 0.5 derajat celcius, maka dikatakan suhu adalah TIDAK DINGIN fuzzyI, dan seterusnya.

Dari keterangan diatas dapat diambil kesimpulan bahwa pemakaian himpunan crisp (tegas) untuk menyatakan suhu sangat riskan, karena dengan adanya perubahan yang kecil saja terhadap nilai mengakibatkan perbedaan kategori yang cukup signifikan.

Maka dari itu, himpunan fuzzy digunakan untuk mengantisipasi keadaan tersebut. Pengalokasian suhu dapat berada di dalam 2 himpunan yang berbeda. Misalnya suhu dapat berada di dalam himpunan DINGIN dan SEDANG, SEDANG dan PANAS, dan sebagainya. Dan seberapa besar nilai eksistensinya dalam himpunan tersebut dapat dilihat dari nilai keanggotaannya.

c. Semesta Pembicaraan

Semesta pembicaraan adalah keseluruhan nilai yang diperbolehkan untuk

dioperasikan dalam suatu variabel fuzzy. Semesta pembicaraan merupakan

himpunan bilangan real yang senantiasa naik (bertambah) secara monoton dari kiri

ke kanan. Nilai semesta pembicaraan dapat berupa bilangan positif maupun

negatif. Adakalanya nilai semesta pembicaraan ini tidak dibatasi batas atasnya.

Contoh: Semesta pembicaraan untuk variabel suhu : [0, 40].

d. Domain

Domain himpunan fuzzy adalah keseluruhan nilai yang diijinkan dalam semesta

pembicaraan dan boleh dioperasikan dalam suatu himpunan fuzzy. Seperti halnya

semesta pembicaraan, domain merupakan himpunan bilangan real yang senantiasa

naik (bertambah) secara monoton dari kiri ke kanan. Nilai domain dapat berupa

bilangan positif maupun negatif.


Sistem Inferensi Fuzzy (Fuzzy Inference System/FIS)

Sistem Inferensi Fuzzy (Fuzzy Inference System/FIS) disebut juga fuzzy inference engine adalah sistem yang dapat melakukan penalaran dengan prinsip serupa seperti manusia melakukan penalaran dengan nalurinya. Terdapat beberapa jenis FIS yang dikenal yaitu Mamdani, Sugeno dan Tsukamoto.

REFERENSI

Anonim1. http://id.wikipedia.org. Logika Fuzzy. Tanggal Akses : 23 Februari 2011

Anonim2. http://repository.usu.ac.id. Sistem Pendukung Keputusan Menggunakan Sistem Fuzzy. Tanggal Akses : 23 Februari 2011

Anonim3. http://www.ittelkom.ac.id. Sistem Fuzzy. Tanggal Akses : 23 Februari 2011

Anonim3. http://ndoware.com/fuzzy-logic-logika-fuzzy-bagian-i.html. Fuzzy Logic :29 Desember 2009


Catatan :

Artkel ini berisi tentang pengenalan logika fuzzy mulai dari pengertian logika fuzzy, Alasan penggunaan logika fuzzy dan keuntungan dan kerugian logika fuzzy

Pengantar Sistem pakar

Pakar adalah orang yang memiliki pengetahuan, penilaian, pengalaman, metode khusus, serta kemampuan untuk menerapkan bakat ini dalam memberi nasihat dan memecahkan masalah. Misalnya seorang dokter, penasehat keuangan, pakar mesin mobil, dll. (Kusumadewi,2003)
Kepakaran (expertise) adalah pengetahuan yang ekstensif (meluas) dan spesifik yang diperoleh melalui rangkaian pelatihan, membaca, dan pengalaman. Pengetahuan membuat pakar dapat mengambil keputusan secara lebih baik dan lebih cepat daripada non-pakar dalam memecahkan problem yang kompleks. Kepakaran mempunyai sifat berjenjang, pakar top memiliki pengetahuan lebih banyak daripada pakar yunior.(Kusummadewi,2003)
Sistem Pakar adalah : Sistem yang berusaha mengadopsi pengetahuan manusia ke komputer, agar komputer dapat menyelesaikan masalah seperti yang biasa dilakukan para ahli. (Syammsudin aries,2004)
Sistem pakar diciptakan tidak untuk menggantikan kedudukan seorang pakar tetapi untuk memasyarakatkan pengetahuan & pengalaman pakar tersebut. Tujuan dari sebuah sistem pakar adalah untuk mentransfer kepakaran yang dimiliki seorang pakar kedalam komputer, dan kemudian kepada orang lain (nonexpert).
Bentuk umum sistem pakar adalah suatu program yang dibuat berdasarkan suatu set aturan yang menganalisis informasi (biasanya diberikan oleh pengguna suatu sistem) mengenai suatu kelas masalah spesifik serta analisis matematis dari masalah tersebut.

Alasan Penggunaan Sistem Pakar

Terdapat beberapa alasan bagi suatu perusahaan untuk mengadopsi sistem pakar menurut B.G. Buchaman (rule-based expert system:1984) :
  1. Pakar di suatu perusahaan/instansi bisa pensiun, keluar, atau telah meninggal. Suatu aplikasi sistem pakar dapat diperbanyak dan disebarluaskan dengan mudah dan cepat. Hal ini berarti telah memperbanyak jumlah pakar dan memperluas jangkauan aksesnya.
  2. Pengetahuan perlu di dokumentasikan atau dianalisis. Penyimpanan data-data pengetahun ke dalam database dengan lengkap dan terpercaya menyebabkan informasi yang dibutuhkan bisa diakses dalam jangka waktu yang cukup lama.
  3. Sistem pakar memungkinkan pengetahuan ditransfer lebih mudah dengan biaya lebih rendah. Sehingga seseorang yang berkonsultasi dengan sistem tersebut seolah-olah berkonsultasi dengan pakar aslinya
  4. Sistem Pakar dapat menyediakan kepakaran setiap waktu dan diberbagai lokasi. Efisiensi waktu, namun sistem atau orang biasa/awam yang terlibat di dalamnya bekerja layaknya sang pakar.
  5. Secara otomatis mengerjakan tugas-tugas rutin yang membutuhkan
    seorang pakar.
  6. Seorang Pakar mahal dan langka Efisiensi kerja, karena sistem biaya yang dikeluarkan untuk perancangan, implementasi dan perawatan (maintenance) sistem pakar relatif lebih murah dan tidak mengenal sifat lelah/lupa dll. Hal ini berimbas pada meningkatnya produktivitas dan kinerja perusahaan.
  7. Efisiensi waktu, namun sistem atau orang biasa/awam yang terlibat di dalamnya bekerja layaknya sang pakar.
  8. Penyimpanan data-data pengetahun ke dalam database dengan lengkap dan terpercaya menyebabkan informasi yang dibutuhkan bisa diakses dalam jangka waktu yang cukup lama. Sehingga seseorang yang berkonsultasi dengan sistem tersebut seolah-olah berkonsultasi dengan pakar aslinya.
  9. Dimungkinkan terjadinya penyatuan kemampuan sistem pakar yang satu dengan yang lainnya, sehingga membuat kualitas hasil lebih meningkat sehingga seolaholah seorang user berkonsultasi dengan banyak pakar.
  10. Efisiensi kerja, karena sistem biaya yang dikeluarkan untuk perancangan, implementasi dan perawatan (maintenance) sistem pakar relatif lebih murah dan tidak mengenal sifat lelah/lupa dll. Hal ini berimbas pada meningkatnya produktivitas dan kinerja perusahaan.
Perbandingan Seorang Ahli (Human Expert) dengan Sistem Pakar (ES)
Faktor
Human Expert
Expert System
Time Availability
Hari Kerja
Setiap saat
Geografis
Lokal/tertentu
Dimana saja
Keamanan
Tidak tergantikan
Dapat diganti
Perishable/Dapat habis
Ya
Tidak
Performansi
Variabel
Konsisten
Kecepatan
Variable
Konsisten & lebih cepat
Biaya
Tinggi
Terjangkau

Sumber:Syamsudinn aries ( pengantar system pakar.2004)

Perbandingan Sistem Konvensional dan Sistem Pakar
Sistem KonvensionalSistem Pakar
Informasi dan pemrosesan umumnya digabung dlm satu program sequentialKnowledge base terpisah dari mekanisme pemrosesan (inference)
Program tidak pernah salah (kecuali programer-nya yang salah)Program bisa saja melakukan kesalahan
Tidak menjelaskan mengapa input dibutuhkan atau bagaimana hasil diperolehPenjelasan (explanation) merupakan bagian dari ES
Membutuhkan semua input dataTidak harus mambutuhkan semua input data atau fakta
Perubahan pada program merepotkanPerubahan pada rules dapat dilakukandengan mudah
Sistem bekerja jika sudah lengkapSistem dapat bekerja hanya dengan rules yang sedikit
Eksekusi secara algoritmik (step-by-step)Eksekusi dilakukan secara heuristic dan logic
Manipulasi efektif pada database yang besarManipulasi efektif pada knowledge-base yang besar
Efisiensi adalah tujuan utamaEfektifitas adalah tujuan utama
Data kuantitatifData kualitatif
Representasi data dalam numerikReperesentasi pengetahuan dalam symbol
Menangkap, menambah dan mendistribusi data numerik atau informasiMenangkap, menambah dan mendistribusi pertimbangan (judgment) dan pengetahuan

Sumber:Syamsudinn aries ( pengantar system pakar.2004)

Ciri-Ciri Sistem Pakar


Sistem pakar yang baik harus memenuhi ciri-ciri sebagai berikut :
• Memiliki informasi yang handal.
• Mudah dimodifikasi.
• Dapat digunakan dalam berbagai jenis komputer.
• Memiliki kemampuan untuk belajar beradaptasi.

Keuntungan Sistem Pakar


Secara garis besar, banyak manfaat yang dapat diambil dengan adanya sistem pakar, antara lain :
1. Memungkinkan orang awam bisa mengerjakan pekerjaan para ahli.
2. Bisa melakukan proses secara berulang secara otomatis.
3. Menyimpan pengetahuan dan keahlian para pakar.
4. Meningkatkan output dan produktivitas.
5. Meningkatkan kualitas.
6. Mampu mengambil dan melestarikan keahlian para pakar (terutama yang termasuk keahlian langka).
7. Mampu beroperasi dalam lingkungan yang berbahaya.
8. Memiliki kemampuan untuk mengakses pengetahuan.
9. Memiliki reabilitas.
10. Meningkatkan kapabilitas sistem komputer.
11. Memiliki kemampuan untuk bekerja dengan informasi yang tidak lengkap dan mengandung ketidakpastian.
12. Sebagai media pelengkap dalam pelatihan.
13. Meningkatkan kapabilitas dalam penyelesaian masalah.
14. Menghemat waktu dalam pengambilan keputusan

Kelemahan Sistem Pakar


Di samping memiliki beberapa keuntungan, sistem pakar juga memiliki beberapa kelemahan, antara lain :
1. Biaya yang diperlukan untuk membuat dan memeliharanya sangat mahal.
2. Sulit dikembangkan. Hal ini tentu saja erat kaitannya dengan ketersediaan pakar di bidangnya.
3. Sistem Pakar tidak 100% bernilai benar.

Modul Penyusun Sistem Pakar

Menurut Staugaard (1987) suatu sistem pakar disusun oleh tiga modul utama yaitu :
  1. Modul Penerimaan Pengetahuan (Knowledge Acquisition Mode) Sistem berada pada modul ini, pada saat ia menerima pengetahuan dari pakar. Proses mengumpulkan pengetahuan-pengetahuan yang akan digunakan untuk pengembangan sistem, dilakukan dengan bantuan knowledge engineer. Peran knowledge engineer adalah sebagai penghubung antara suatu sistem pakar dengan pakarnya.
  2. Modul Konsultasi (Consultation Mode)
    Pada saat sistem berada pada posisi memberikan jawaban atas permasalahan yang diajukan oleh user, sistem pakar berada dalam modul konsultasi. Pada modul ini, user berinteraksi dengan sistem dengan menjawab pertanyaan-pertanyaan yang diajukan oleh sistem.
  3. Modul Penjelasan (Explanation Mode)
    Modul ini menjelaskan proses pengambilan keputusan oleh system (bagaimana suatu keputusan dapat diperoleh).
Struktur Sistem Pakar, komponen utama pada struktur sistem pakar menurut Hu et al (1987) meliputi:
  1. Basis Pengetahuan (Knowledge Base)
    Basis pengetahuan merupakan inti dari suatu sistem pakar, yaitu berupa representasi pengetahuan dari pakar. Basis pengetahuan tersusun atas fakta dan kaidah. Fakta adalah informasi tentang objek, peristiwa, atau situasi. Kaidah adalah cara untuk membangkitkan suatu fakta baru dari fakta yang sudah diketahui.
  2. Mesin Inferensi (Inference Engine)
    Mesin inferensi berperan sebagai otak dari sistem pakar. Mesin inferensi berfungsi untuk memandu proses penalaran terhadap suatu kondisi, berdasarkan pada basis pengetahuan yang tersedia. Di dalam mesin inferensi terjadi proses untuk memanipulasi dan mengarahkan kaidah, model, dan fakta yang disimpan dalam basis pengetahuan dalam rangka mencapai solusi atau kesimpulan. Dalam prosesnya, mesin inferensi menggunakan strategi penalaran dan strategi pengendalian. Strategi penalaran terdiri dari strategi penalaran pasti (Exact Reasoning) dan strategi penalaran tak pasti (Inexact Reasoning). Exact reasoning akan dilakukan jika semua data yang dibutuhkan untuk menarik suatu kesimpulan tersedia, sedangkan inexact reasoning dilakukan pada keadaan sebaliknya.Strategi pengendalian berfungsi sebagai panduan arah dalam melakukan prose penalaran. Terdapat tiga tehnik pengendalian yang sering digunakan, yaitu forward chaining, backward chaining, dan gabungan dari kedua teknik pengendalian tersebut.
  3. Basis Data (Data Base)
    Basis data terdiri atas semua fakta yang diperlukan, dimana fakta fakta tersebut digunakan untuk memenuhi kondisi dari kaidah-kaidah dalam sistem. Basis data menyimpan semua fakta, baik fakta awal pada saat sistem mulai beroperasi, maupun fakta-fakta yang diperoleh pada saat proses penarikan kesimpulan sedang dilaksanakan. Basis data digunakan untuk menyimpan data hasil observasi dan data lain yang dibutuhkan selama pemrosesan.
  4. Antarmuka Pemakai (User Interface)
    Fasilitas ini digunakan sebagai perantara komunikasi antara pemakai.dengan komputer.

Tahap-tahap Pembuatan Sistem Pakar

Untuk membuat suatu program sistem pakar, mulai dari konsep hingga memerlukan banyak pemikiran, rancangan, pemrograman dan debugging. Sepuluh tahap pembuatan sistem pakar terdapat pada gambar.

 3
Gambar. Langkah-langkah dalam proses pengembangan sistem pakar

Untuk memberikan gambaran langkah demi langkah dalam membuat sistem pakar maka akan dijelaskan bagaimana bekerjanya, langkah-langkah itu termasuk prosedur dan teknik yang digunakannya.
  1. Mengidentifikasi masalah dan kebutuha. Tahap pertama pembuatan sistem pakar ini adalah mengkaji situsi memutuskan dengan pasti tentang masalah yang akan dikomputerisasi dan apakah sistem pakar dapat membantu menjawab permasalahan tersebut.
  2. Menentukan problem yang cocok.Jika masalah telah didefinisikan dengan jelas, maka langkah selanjutnya adalah mengkaji lebih dalam untuk mengetahui apakah masalah tersebut tepat untuk sistem pakar. Menganalisa masalah dimulai dengan jelas menulis pertanyaan itu sendiri. Mewawancarai orang-orang yang berhubungan dengan seseorang agar memperoleh pandangan yang berbeda.
  3. Mempertimbangkan alternatif. Pertimbangan alternatif solusi lainnya adalah sistem manajemen basis data untuk masalah yang akan dikerjakan. Dengan Database Manajemen System proses yang diutamakan adalah penyimpan data atau informasi dan hanya mengakses jika diperlukan. Walaupun telah diputuskan bahwa masalah tersebut merupakan pengetahuan yang terkait dan sesuai dengan salah satu kategori yang berhubungan dengan sistem pakar.
  4. Menghitung pengembalian investasi. Jika pilihan jatuh kepada sistem pakar, maka langkah berikutnya adalah menentukan apakah sistem pakar lebih mengutamakan atau tidak. Di sini harus diperhitungkan pengembalian investasi dengan jalan menganalisis biaya dengan kemungkinan keuntungan.
  5. Memilih alat pengembangan. Alat pengembangan sistem pakar merupakan paket perangkat lunak yang memungkinkan untuk memasukkan pengetahuan pakar kedalam komputer tanpa harus membuat suatu program terlebih dahulu. Hampir semua alat pengembangan sistem pakar menggunakan aturan. Beberapa diantaranya menggunakan implementasi frame dan jaringan semantik.
  6. Merekayasa pengetahuan.Pengembangan sistem pakar dimulai dengan merekayasa pengetahuan, yaitu bagaimana untuk memperoleh pengetahuan dapat diperoleh dengan berbagai cara seperti melalui buku, artikel-artikel ilmiah atau acuan lainya yang dapat diperoleh dari individu atau seseorang yang memang ahlinya pada bidangnya. Format atau bentuk akan menuntun dan mengarahkan dalam pemilihan skema penampilan pengetahuan yang diperoleh. Jika pengetahuan tersebut merupakan yang luar biasa maka dapat dipastikan untuk menggunakan representasi pengetahuan dalam bentuk atutan produksi. Pekerjaan mengumpulkan dan mengorganisasi kedalam bentuk yang sesuai dengan sistem pakar tersebut dikenal dengan nama Rekayasa Pengetahuan.
  7. Merancang sistem.Dengan menggunakan pengetahuan yang telah diperoleh, sistem pakar siap dirancang. Hal pertama yang harus diperhatikan adalah membuat garis besar masalah. Hal-hal lain yang membantu, mengorganisasi dan memahami pengetahuan tersebut. Salah satu langkah ini dilakukan adalah dengan mengidentifikasi suatu fakta, angka dan informasi lainya yang memerlukan jawaban atau pemecahan masalah yang diberikan sistem pakar, apabila sistem yang dirancang terlalu besar dan kompleks, untuk memulai penulisan aturan secara langsung dan masukan serta keluaran, maka sebaiknya dibuat garis besar yang mungkin dapat membantu untuk mengorganisasi informasi dan membaginya kedalam bagian-bagian yang kecil. Jika pengetahuan yang akan diolah telah sampai pada penyusunan prosedur sebaiknya dibuat bagan alur (flowchat), walaupun bagan alur mungkin tidak cocok untuk aplikasi sistem pakar, akan tetapi hal tersebut dapat membantu untuk memahami dan mengorganisasi pengetahuan untuk sistem pakar. Selanjutnya dengan mulai mengkonversi pengetahuan dalam bentuk kaidah IF-THEN. Sebaiknya ikuti prosedur tertentu sesuai dengan yang disarankan oleh software yang digunakan, bila sudah selesai, baru menggunakan alat untuk membuat prototype bagian sistem. Kemudian menerjemahkan bagian pengetahuan kedalam kaidah dan menguji bagian yang sudah dibuat baru. Hal ini dimaksudkan untuk menguji konsep sebelum melanjutkan pembuatan seluruh program.
  8. Melengkapi pengembangan. Cara terbaik untuk mengerjakan hal ini adalah dengan jalan meluruskan bagian demi bagian secara khusus, pengetahuan itu akan dibagi kedalam potongan-potongan yang logis, masing-masing dengan blok aturan, setiap bagian diuji apakah sudah dapat berjalan sesuai yang diinginkan.
  9. Menguji dan mencari masalah sistem. Sesudah sistem pakar dikembangkan, pemakai hanya perlu menyisihkan waktu untuk menguji dan mencari kesalahan. Tahap pengujian ini diusahakan untuk melihat keabsahan sistem pakar tersebut, agar jalannya sistem benar-benar sesuai dengan tujuan yang dimaksud. Penguji sistem sangat diperlukan untuk menentukan keberhasilan suatu sistem, dan melakukan perbaikan-perbaikan jika masih terjadi kesalahan.
  10. Memelihara sistem. Beberapa subyek atau domain bersifat dinamis oleh karena itu sistem pakar harus selalu dipelihara dan dikembangkan sesuai dengan perkembangan pengetahuan itu sendiri. Salah satu contohnya dengan memperbaharui pengetahuan, mengganti pengetahuan yang sudah ketinggalan dan meluweskan sistem agar dapat lebih baik lagi dalam menyelesaikan masalahnya.

Teknik Representasi Pengetahuan


Representasi pengetahuan adalah suatu teknik untuk merepresentasikan basis pengetahuan yang diperoleh ke dalam suatu skema/diagram tertentu sehingga dapat diketahui relasi/keterhubungan antara suatu data dengan data yang lain. Teknik ini membantu knowledge engineer dalam memahami struktur pengetahuan yang akan dibuat sistem pakarnya. Terdapat beberapa teknik representasi pengetahuan yang biasa digunakan dalam pengembangan suatu sistem pakar, yaitu
  1. Rule-Based Knowledge
    Pengetahuan direpresentasikan dalam suatu bentuk fakta (facts) dan aturan (rules). Bentuk representasi ini terdiri atas premise dan kesimpulan.
  2. Frame-Based Knowledge
    Pengetahuan direpresentasikan dalam suatu bentuk hirarki atau jaringan frame.
  3. Object-Based Knowledge
    Pengetahuan direpresentasikan sebagai jaringan dari obyek-obyek. Obyek adalah elemen data yang terdiri dari data dan metoda (proses).
  4. Case-Base Reasoning
    Pengetahuan direpresentasikan dalam bentuk kesimpulan kasus (cases).
Inferencing dengan Rule : Forward dan Backward Chaining
Inferensi dengan rules merupakan implementasi dari modus ponen, yang direfleksikan dalam mekanisme search (pencarian). Dapat pula mengecek semua rule pada knowledge base dalam arah forward maupun backward. Proses pencarian berlanjut sampai tidak ada rule yang dapat digunakan atau sampai sebuah tujuan (goal) tercapai. w:st=”on”Ada dua metode inferencing dengan rules, yaitu forward chaining atau data-driven dan backward chaining atau goal-driven.
  1. Backward chaining
    • Menggunakan pendekatan goal-driven, dimulai dari ekspektasi apa yang diinginkan terjadi (hipotesis), kemudian mengecek pada sebab-sebab yang mendukung (ataupun kontradiktif) dari ekspektasi tersebut.
    • Jika suatu aplikasi menghasilkan tree yang sempit dan cukup dalam, maka gunakan backward chaining.
  2. Forward chaining
    • Forward chaining merupakan grup dari multiple inferensi yang melakukan pencarian dari suatu masalah kepada solusinya.
    • Jika klausa premis sesuai dengan situasi (bernilai TRUE), maka proses akan meng-assert konklusi.
    • Forward chaining adalah data-driven karena inferensi dimulai dengan informasi yang tersedia dan baru konklusi diperoleh.
    • Jika suatu aplikasi menghasilkan tree yang lebar dan tidak dalam, maka gunakan forward chaining.

Contoh Aplikasi Sistem Pakar


  1. Aplikasi Sederhana: Sistem Pakar Bengkel Mobil
    Ini adalah contoh Sistem Pakar sederhana, yang bertujuan untuk mencari apa yang salah sehingga mesin mobil pelanggan yang tidak mau hidup, dengan
    memberikan gejala-gejala yang teramati. Anggap Sistem Pakar kita memiliki aturan-aturan berikut:
    1. JIKA mesin_mendapatkan_bensin DAN starter_dapat_dihidupkan MAKA ada_masalah_dengan_pengapian
    2. JIKA TIDAK BENAR starter_dapat_dihidupkan DAN TIDAK BENAR lampu_menyala MAKA ada_masalah_dengan_aki
    3. JIKA TIDAK BENAR starter_dapat_dihidupkan DAN lampu_menyala MAKA ada_masalah_dengan_starter
    4. JIKA ada_bensin_dalam_tangki_bahan_bakar MAKA mesin_mendapatkan_bensin
    Terdapat 3 masalah yang mungkin, yaitu: ada_masalah_dengan_pengapian, ada_masalah_dengan_aki dan ada_masalah_dengan_starter. Dengan sistem terarah-tujuan (goal-driven), kita hendak membuktikan keberadaan setiap masalah tadi.
    Pertama, Sistem Pakar berusaha untuk membuktikan kebenaran ada_masalah_dengan_pengapian. Di sini, aturan 1 dapat digunakan, sehingga Sistem Pakar akan menset goal baru untuk membuktikan apakah mesin_mendapatkan_bensin serta starter_dapat_dihidupkan. Untuk membuktikannya, aturan 4 dapat digunakan, dengan goal baru untuk membuktikan mesin_mendapatkan_bensin. Karena tidak ada aturan lain yang dapat digunakan menyimpulkannya, sedangkan sistem belum memperoleh solusinya, maka Sistem Pakar kemudian bertanya kepada pelanggan: “Apakah ada bensin dalam tangki bahan bakar?”. Sekarang, katakanlah jawaban klien adalah “Ya”, jawaban ini kemudian dicatat, sehingga klien tidak akan ditanyai lagi dengan pertanyaan yang sama.
    Nah, karena sistem sekarang sudah dapat membuktikan bahwa mesin mendapatkan bensin, maka sistem sekarang berusaha mengetahui apakah starter_dapat_dihidupkan. Karena sistem belum tahu mengenai hal ini, sementara tidak ada aturan lagi yang dapat menyimpulkannya, maka Sistem Pakar bertanya lagi ke klien: “Apakah starter dapat dihidupkan?”. Misalkan jawabannya adalah “Tidak”, maka tidak ada lagi aturan yang dapat membuktikan ada_masalah_dengan_pengapian, sehingga Sistem Pakar berkesimpulan bahwa hal ini bukanlah solusi dari problem yang ada, dan kemudian melihat hipotesis berikutnya: ada_masalah_dengan_aki. Sudah diketahui (dibuktikan) bahwa mesin tidak dapat distarter, sehingga yang harus dibuktikan adalah bahwa lampu tidak menyala. Sistem Pakar kemudian bertanya: “Apakah lampu menyala?”. Misalkan jawabannya adalah “Tidak”, maka sudah terbukti bahwa ada masalah dengan aki.
    Sistem ini mungkin berhenti sampai di sini, tetapi biasanya ada kemungkinan terdapat lebih dari satu solusi (misalnya terdapat lebih dari satu kerusakan), atau ada kemungkinan terdapat solusi lain yng lebih tepat, sehingga biasanya semua hipotesis diperiksa kebenarannya. Sistem Pakar ini kemudian mencoba membuktikan bahwa ada_masalah_dengan_starter, namun dari fakta yang sudah diperoleh, yaitu lampu tidak menyala, maka pembuktiannya menjadi gagal. Dengan demikian solusi yang diberikan oleh Sistem Pakar adalah ada masalah dengan aki.
    Secara lengkap, interaksi antara Sistem Pakar dengan klien mungkin seperti ini:
    System Pakar: Apakah ada bensin dalam tangki bahan bakar?
    Klien: Ya
    System Pakar: Apakah starter dapat dihidupkan?
    Klien: Tidak
    System Pakar: Apakah lampu menyala?
    Klien: Tidak
    System Pakar: Saya berkesimpulan bahwa ada masalah dengan aki
    Fasilitas Penjelasan
    Kebanyakan Sistem Pakar mempunyai fasilitas penjelasan yang mengijinkan klien untuk bertanya mengapa dia diberi suatu pertanyaan atau bagaimana dapat mencapai suatu kesimpulan. Pertanyaan dari klien tersebut dijawab dengan mengacu pada goal, aturan yang dipakai, dan data-data yang ada. Contoh pemakaian fasilitas penjelas dalam Sistem Pakar di atas dapat dilihat pada percakapan berikut:
    System Pakar: Apakah ada bensin dalam tangki bahan bakar?
    Klien: Ya
    System Pakar: Apakah starter dapat dihidupkan?
    Klien: Tidak
    System Pakar: Apakah lampu menyala?
    Klien: Mengapa?
    System Pakar: Saya mencoba membuktikan bahwa ada masalah dengan aki. Sudah ditunjukkan adalah tidak benar starter dapat dihidupkan. Sehingga jika tidak benar bahwa lampu menyala, maka ada masalah dengan aki. Apakah lampu menyala?
    Klien: Tidak
    System Pakar: Saya berkesimpulan bahwa ada masalah dengan aki
    Klien: Bagaimana bisa?
    System Pakar: Hal ini sesuai dengan aturan no 2: JIKA TIDAK BENAR starter_dapat_dihidupkan DAN TIDAK BENAR lampu_menyala MAKA ada_masalah_dengan_aki bahwa tidak benar starter_dapat_dihidupkan sudah dijawab, bahwa tidak benar lampu_menyala sudah dijawab, sehingga dapat disimpulkan bahwa ada_masalah_dengan_aki.
    Fasilitas penjelasan berhubungan dengan pencatatan aturan apa saja yang digunakan untuk mengambil kesimpulan, dan menggunakan catatan tersebut untuk menyusun penjelasan. Pembangkitan penjelasan sederhana seperti contoh di atas bukanlah persoalan yang sulit, namun pemahaman klien terhadap penjelasan tersebut tidaklah sama, sehingga seringkali klien tetap tidak mengerti maksudnya. Hal ini karena biasanya penjelasan hanya meliputi pengetahuan yang dangkal atau hanya permukaan saja sebagaimana tercantum dalam autran yang dipunyai, bukannya pengetahuan yang mendalam yang mendasari aturan tersebut. Dalam contoh di atas, Sistem Pakar hanya mengatakan bahwa hal ini sesuai dengan aturan no 2, tetapi tidak menjelaskan secara lebih detil mengenai aturan 2 tersebut. Mungkin klien perlu diberi pengertian bahwa lampu dan starter dua-duanya menggunakan aki untuk menyalakannya. Hal penting lain adalah ketika klien gagal mengerti atau menerima penjelasan yang diberikan, biasanya Sistem Pakar tidak dapat memberi penjelasan dengan cara lain (tidak begitu halnya dengan seorang pakar yang mampu menggunakan kalimat yang lain untuk mencoba menjelaskannya).
  2. Eliza
    Eliza adalah salah satu Sistem Pakar yang paling awal dikembangkan. Ini adalah program komputer terapis yang dibuat oleh Joseph Weizenbaum di MIT. Pengguna berkomunikasi dengannya sebagaimana sedang berkonsultasi dengan seorang terapis. Berikut ini adalah contoh percakapan antara Eliza dengan seorang klien:
    Eliza: Hello. I am ELIZA. How can I help you?
    Salam. Saya adalah ELIZA. Bagaimana saya dapat membantu kamu?
    Klien: My name is Kuncoro.
    Nama saya adalah Kuncoro.
    Eliza: I have told you before, I do not care about names.
    Saya sudah menceritakan kepada kamu sebelumnya, saya tidak peduli tentang nama.
    Klien: I don’t have any money. That’s my problem.
    Saya tidak mempunyai uang. Itu adalah masalah saya.
    Eliza: Why do you say your problem?
    Mangapa kamu katakan masalah mu?
    Klien: Because you asked me.
    Sebab kamu bertanya saya.
    Eliza: Do any other reasons not come to mind?
    Lakukan tanggapan-tanggapan lain yang tidak ada anda pikirkan?
    Klien: No.
    Tidak ada.
    Eliza: You are being a bit negative.
    Kamu sedang sedikit kurang baik.
    Klien: Why?
    Mengapa?
    Eliza: Please go on.
    Silahkan diteruskan.
    Klien: OK. I am bankrupt.
    OK. Saya sedang bangkrut.
    Eliza: How long have you been bankrupt?
    Berapa lama kamu telah bangkrut?
    Klien: A year.
    Satu tahun.
    Eliza: Please go on.
    Silahkan diteruskan.
    Klien: So, what should I do?
    Maka, apa yang sebaiknya saya lakukan?
    Eliza: Does that question interest you?
    Apakah pertanyaan itu menarik perhatian kamu?
    Klien: Yes, how can I make big money?
    Ya, bagaimana saya dapat memperoleh uang banyak?
    Eliza: You are sure?
    Kamu yakin?
    Klien: Of course I’m sure.
    Tentu saja Saya yakin.
    ... etc.

  3. Parry
    Parry adalah Sistem Pakar yang juga paling awal dikembangkan di Stanford University oleh seorang psikiater, Kenneth Colby, yang mensimulasikan seorang paranoid. Berikut ini contoh respon Parry terhadap pertanyaan seorang psikiater yang menginterviunya.
    Psikiater: Why are you in the hospital?
    Parry: I shouldn't be here.
    Psikiater: Who brought you here?
    Parry: The police.
    Psikiater: What trouble did you have with the police?
    Parry: Cops don't do their job.
    Psikiater: What do they do instead?
    Parry: Cops arrest the wrong people.
    Psikiater: They arrest the right ones sometimes
    Parry: The law should get those Italian crooks.
    Psikiater: Are you Italian?
    Parry: My background is British but I was born in this country.
    Psikiater: Do you know any Italian crooks?
    Parry: I try to avoid the underworld. http://note-why.blogspot.com/2012/09/pengertian-sistem-pakar.html

CATATAN:
Artikel ini berisi tentang penjelasan secara singkat tentang sistem pakar, alasan penggunaan sitempakar, keuntungan dan kerugian sistem pakar serat contoh – contoh aplikasi sistem pakar.
















Sabtu, 20 September 2014

AKSes wamp SERVER via lan

1. Klik WAMP Manager TrayIcon Anda > Config File > httpd.conf

2. Akan muncul "http.conf" yang dibuka dalam notepad, berikut ini. :

Cari pada bagian :

<Directory />

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    Deny from all

    Satisfy all

</Directory>

dan juga pada bagian :

#   onlineoffline tag - don't remove

    Order Deny,Allow

    Deny from all

    Allow from 127.0.0.1

</Directory>

Hapus sekrip :

Order Deny,Allow
Deny from all


dan

Deny from all
Allow from 127.0.0.1

Sehingga menjadi :

<Directory />  
Options Follow
SymLinks    Allow
Override None   
Satisfy all
</Directory>

dan

#   onlineoffline tag - don't remove
    Order Deny,Allow
</Directory>

3. Selanjutnya Restart Apache Anda :



4. Jalankan Browser di komputer lain lalu Ketikkan IP Komputer yang ada wamp servernya lalu enter. jika berhasil tampilannya akan seperti berikut ini :

6. Selesai,

Kamis, 18 September 2014

CRUD With Bootstrap

PHP Object Oriented CRUD Example

Our tutorial for today is about creating a simple database application with a PHP Object Oriented CRUD Example in mind. We use Bootstrap so that our application will have a decent UI.

If you don’t know what Bootstrap is, and you want to learn how to use it in few steps, I highly recommend following my previous tutorial first.

There are so many PHP OOP tutorial on the web today, they have different examples and implementations. Some might be completely correct, some maybe not.

I’m writing this tutorial with a clear goal: to give the best PHP Object Oriented CRUD Example for beginners. I welcome your comments and suggestions to help me achieve this.

We want to learn the correct PHP OOP implementation. There are PHP frameworks such as CakePHP, CodeIgniter and Laravel that correctly do it.

Those things are one step higher, for now, we will learn the basic PHP Object Oriented Programming. Working with a PHP framework should be easy after following this tutorial.

So here it is, this post will include the following contents:

1.0 Code’s Final Output
1.1 Video
1.2 Screenshots

2.0 Database Table Structure
2.1 Products Table
2.2 Categories Table

3.0 Create the Template Files
3.1 Header Code with header.php
3.2 Footer Code with footer.php

4.0 Creating Record in PHP the OOP Way
4.1 Set the “Create Product” Headers in create_product.php
4.2 Set the Footer
4.3 Create a “Read Products” Button
4.4 Get a Database Connection
4.5 Create the Database Configuration Class
4.6 Create a Form in create_product.php
4.7 Loop Through the Categories Records to show as Drop-down
4.8 Create the Object Class for Categories
4.9 Code when the Form was Submitted
4.10 Create the Object Class for Products

5.0 Reading Record in PHP the OOP Way
5.1 Create index.php and Set the “Read Products” Headers
5.2 Set the Footer
5.3 Add a “Create Product” button
5.4 Configure Pagination Variables
5.5 Retrieve Records from the Database
5.6 readAll() Method in product.php
5.7 Put the Edit and Delete Action Buttons
5.8 Create paging_product.php for Paging Buttons
5.9 Add the countAll() method in product.php
5.10 Include paging_product.php in index.php

6.0 Updating Record in PHP the OOP Way
6.1 Create update_product.php and Set the “Update Product” Headers
6.2 Create a “Read Products” Button
6.3 Retrieve One Product Information Based on the Given ID.
6.4 Add readOne() method in the Product Object Class.
6.5 Put the Values in the Form.
6.6 Loop Through the Categories Records to show as Drop-down
6.7 Code When Form was Submitted
6.8 Update Code in the Product Class

7.0 Deleting Record in PHP the OOP Way
7.1 Put this JavaScript Code in index.php
7.2 Create delete_product.php
7.3 Delete Code in Product Class

8.0 Online Resources
8.1 Download Source Code

Alright, so let’s get started with the codes…

1.0 Code’s Final Output

I believe we have to know where we’re headed, so first, let’s take a look at our code’s final output!

1.1 Video
1.2 Screenshots

Coming Soon.

2.0 Database Table Structure

The files products.sql and categories.sql are also included in the code download, located at the sql/ folder.

2.1 Products Table

Yup, we will use products as objects to maintain in our object oriented CRUD example. Database table and dummy data were provided below, you can instantly run this in your PhpMyAdmin after creating your database.

--

-- Table structure for table `products`

--

CREATE TABLE `products` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(32) NOT NULL,

`description` text NOT NULL,

`price` int(11) NOT NULL,

`category_id` int(11) NOT NULL,

`created` datetime NOT NULL,

`modified` timestamp NOT NULL default CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

--

-- Dumping data for table `products`

--

INSERT INTO `products` VALUES(1, 'LG P880 4X HD', 'My first awesome phone!', 336, 3, '0000-00-00 00:00:00', '0000-00-00 00:00:00');

INSERT INTO `products` VALUES(2, 'Google Nexus 4', 'The most awesome phone of 2013!', 299, 2, '0000-00-00 00:00:00', '0000-00-00 00:00:00');

INSERT INTO `products` VALUES(3, 'Samsung Galaxy S4', 'How about no?', 600, 3, '0000-00-00 00:00:00', '0000-00-00 00:00:00');

INSERT INTO `products` VALUES(6, 'Bench Shirt', 'The best shirt!', 29, 1, '2014-06-01 01:12:26', '2014-05-31 10:12:21');

INSERT INTO `products` VALUES(7, 'Lenovo Laptop', 'My business partner.', 399, 2, '2014-06-01 01:13:45', '2014-05-31 10:13:39');

INSERT INTO `products` VALUES(8, 'Samsung Galaxy Tab 10.1', 'Good tablet.', 259, 2, '2014-06-01 01:14:13', '2014-05-31 10:14:08');

INSERT INTO `products` VALUES(9, 'Spalding Watch', 'My sports watch.', 199, 1, '2014-06-01 01:18:36', '2014-05-31 10:18:31');

INSERT INTO `products` VALUES(10, 'Sony Smart Watch', 'The coolest smart watch!', 300, 2, '2014-06-06 17:10:01', '2014-06-06 02:09:51');

INSERT INTO `products` VALUES(11, 'Huawei Y300', 'For testing purposes.', 100, 2, '2014-06-06 17:11:04', '2014-06-06 02:10:54');

INSERT INTO `products` VALUES(12, 'Abercrombie Lake Arnold Shirt', 'Perfect as gift!', 60, 1, '2014-06-06 17:12:21', '2014-06-06 02:12:11');

INSERT INTO `products` VALUES(13, 'Abercrombie Allen Brook Shirt', 'Cool red shirt!', 70, 1, '2014-06-06 17:12:59', '2014-06-06 02:12:49');

2.2 Categories Table

We are going to have “Fashion”, “Electronics” and “Motors” as categories in our example. I got those three category ideas from ebay, haha!

--

-- Table structure for table `categories`

--

CREATE TABLE `categories` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(256) NOT NULL,

`created` datetime NOT NULL,

`modified` timestamp NOT NULL default CURRENT_TIMESTAMP,

PRIMARY KEY (`id`)

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--

-- Dumping data for table `categories`

--

INSERT INTO `categories` VALUES(1, 'Fashion', '2014-06-01 00:35:07', '2014-05-31 09:34:33');

INSERT INTO `categories` VALUES(2, 'Electronics', '2014-06-01 00:35:07', '2014-05-31 09:34:33');

INSERT INTO `categories` VALUES(3, 'Motors', '2014-06-01 00:35:07', '2014-05-31 09:34:54');

3.0 Create the Template Files

To reduce some mess from our code, we will create these two template files: header.php and footer.php.

I’m actually not sure what these files are called so for now we’ll call them “template files”. It wraps the main content of our web pages. We can imagine it like this:

<?php

include_once 'header.php';

?>

// main content of web page must be here!

<?php

include_once 'footer.php';

?>

3.1 Header Code with header.php

This header.php file will be included at the beginning of some of our core files so that we won’t have to write the same header codes every-time.

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title><?php echo $page_title; ?></title>

<!-- some custom CSS -->

<style>

.left-margin{

margin:0 .5em 0 0;

}

.right-button-margin{

margin: 0 0 1em 0;

overflow: hidden;

}

</style>

<!-- Bootstrap -->

<!-- Latest compiled and minified CSS -->

<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">

<!-- HTML5 Shiv and Respond.js IE8 support of HTML5 elements and media queries -->

<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->

<!--[if lt IE 9]>

<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>

<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>

<![endif]-->

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<!-- Include all compiled plugins (below), or include individual files as needed -->

<!-- Latest compiled and minified JavaScript -->

<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>

</head>

<body>

<!-- container -->

<div class="container">

<?php

// show page header

echo "<div class='page-header'>";

echo "<h1>{$page_title}</h1>";

echo "</div>";

?>

3.2 Footer Code with footer.php

This footer.php file will be included at the end of some of our core files so that we won’t have to write the same footer codes every-time.

</div>

<!-- /container -->

</body>

</html>

4.0 Creating Record in PHP the OOP Way

4.1 Set the “Create Product” Headers in create_product.php

<?php

// set page headers

$page_title = "Create Product";

include_once "header.php";

?>

4.2 Set the Footer

<?php

include_once "footer.php";

?>

4.3 Create a “Read Products” Button

This will be put in between the header and footer. Under the “create product” header.

echo "<div class='right-button-margin'>";

echo "<a href='index.php' class='btn btn-default pull-right'>Read Products</a>";

echo "</div>";

4.4 Get a Database Connection

We can use it for retrieving categories or saving new product record later. Put the following code under 4.3 code.

// get database connection

include_once 'config/database.php';

$database = new Database();

$db = $database->getConnection();

4.5 Create the Database Configuration Class

Getting a database connection (4.3 above) will not work without this class. We will name the file database.php and put it inside the config folder.

<?php

class Database{

// specify your own database credentials

private $host = "change_to_your_db_host";

private $db_name = "change_to_your_db_name";

private $username = "change_to_your_db_username";

private $password = "change_to_your_db_password";

public $conn;

// get the database connection

public function getConnection(){

$this->conn = null;

try{

$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);

}catch(PDOException $exception){

echo "Connection error: " . $exception->getMessage();

}

return $this->conn;

}

}

?>

4.6 Create a Form in create_product.php

<!-- HTML form for creating a product -->

<form action='create_product.php' method='post'>

<table class='table table-hover table-responsive table-bordered'>

<tr>

<td>Name</td>

<td><input type='text' name='name' class='form-control' required></td>

</tr>

<tr>

<td>Price</td>

<td><input type='text' name='price' class='form-control' required></td>

</tr>

<tr>

<td>Description</td>

<td><textarea name='description' class='form-control'></textarea></td>

</tr>

<tr>

<td>Category</td>

<td>

<!-- categories from database will be here -->

</td>

</tr>

<tr>

<td></td>

<td>

<button type="submit" class="btn btn-primary">Create</button>

</td>

</tr>

</table>

</form>

4.7 Loop Through the Categories Records to show as Drop-down

Remember the form earlier? The category part must be like this now:

<tr>

<td>Category</td>

<td>

<?php

// read the product categories from the database

include_once 'objects/category.php';

$category = new Category($db);

$stmt = $category->read();

// put them in a select drop-down

echo "<select class='form-control' name='category_id'>";

echo "<option>Select category...</option>";

while ($row_category = $stmt->fetch(PDO::FETCH_ASSOC)){

extract($row_category);

echo "<option value='{$id}'>{$name}</option>";

}

echo "</select>";

?>

</td>

</tr>

4.8 Create the Object Class for Categories

Of course, 4.3 above won’t work without the category object class. We’ll call it category.php and put it inside objects/ folder.

<?php

class Category{

// database connection and table name

private $conn;

private $table_name = "categories";

// object properties

public $id;

public $name;

public function __construct($db){

$this->conn = $db;

}

// used by select drop-down list

function read(){       

//select all data      

$query = "SELECT

id, name

FROM

" . $this->table_name . "

ORDER BY

name"; 

$stmt = $this->conn->prepare( $query );      

$stmt->execute();

return $stmt;  

}

?>

4.9 Code when the Form was Submitted

This code should be put before the HTML form. User will enter the values in the HTML form and when the create (submit) button was clicked, values will be sent via POST request, code below will save it in the database.

// if the form was submitted

if($_POST){

// instantiate product object

include_once 'objects/product.php';

$product = new Product($db);

// set product property values

$product->name = $_POST['name'];

$product->price = $_POST['price'];

$product->description = $_POST['description'];

$product->category_id = $_POST['category_id'];

// create the product

if($product->create()){

echo "<div class=\"alert alert-success alert-dismissable\">";

echo "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";

echo "Product was created.";

echo "</div>";

}

// if unable to create the product, tell the user

else{

echo "<div class=\"alert alert-danger alert-dismissable\">";

echo "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";

echo "Unable to create product.";

echo "</div>";

}

}

4.10 Create the Object Class for Products

Of course, 4.9 will not work without the product object. We’ll name the file product.php and put it inside objects/ folder.

<?php

class Product{

// database connection and table name

private $conn;

private $table_name = "products";

// object properties

public $id;

public $name;

public $price;

public $description;

public $category_id;

public $timestamp;

public function __construct($db){

$this->conn = $db;

}

// create product

function create(){

// to get time-stamp for 'created' field

$this->getTimestamp();

//write query

$query = "INSERT INTO

" . $this->table_name . "

SET

name = ?, price = ?, description = ?, category_id = ?, created = ?";

$stmt = $this->conn->prepare($query);

$stmt->bindParam(1, $this->name);

$stmt->bindParam(2, $this->price);

$stmt->bindParam(3, $this->description);

$stmt->bindParam(4, $this->category_id);

$stmt->bindParam(5, $this->timestamp);

if($stmt->execute()){

return true;

}else{

return false;

}

}

}

?>

5.0 Reading Record in PHP the OOP Way

This time we will list the records from the database.

5.1 Create index.php and Set the “Read Products” Headers

<?php

$page_title = "Read Products";

include_once "header.php";

?>

5.2 Set the Footer

<?php

include_once "footer.php";

?>

5.3 Add a “Create Product” button

echo "<div class='right-button-margin'>";

echo "<a href='create_product.php' class='btn btn-default pull-right'>Create Product</a>";

echo "</div>";

5.4 Configure Pagination Variables

// page given in URL parameter, default page is one

$page = isset($_GET['page']) ? $_GET['page'] : 1;

// set number of records per page

$records_per_page = 3;

// calculate for the query LIMIT clause

$from_record_num = ($records_per_page * $page) - $records_per_page;

5.5 Retrieve Records from the Database

// include database and object files

include_once 'config/database.php';

include_once 'objects/product.php';

include_once 'objects/category.php';

// instantiate database and product object

$database = new Database();

$db = $database->getConnection();

$product = new Product($db);

// query products

$stmt = $product->readAll($page, $from_record_num, $records_per_page);

$num = $stmt->rowCount();

// display the products if there are any

if($num>0){

$category = new Category($db);

echo "<table class='table table-hover table-responsive table-bordered'>";

echo "<tr>";

echo "<th>Product</th>";

echo "<th>Price</th>";

echo "<th>Description</th>";

echo "<th>Category</th>";

echo "<th>Actions</th>";

echo "</tr>";

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){

extract($row);

echo "<tr>";

echo "<td>{$name}</td>";

echo "<td>{$price}</td>";

echo "<td>{$description}</td>";

echo "<td>";

$category->id = $category_id;

$category->readName();

echo $category->name;

echo "</td>";

echo "<td>";

// edit and delete button will be here

echo "</td>";

echo "</tr>";

$x++;

}

echo "</table>";

// paging buttons will be here

}

// tell the user there are no products

else{

echo "<div>No products found.</div>";

}

5.6 readAll() Method in product.php

Retrieving records in 5.5 won’t work without this method in the objects/product.php

function readAll($page, $from_record_num, $records_per_page){

$query = "SELECT

id, name, description, price, category_id

FROM

" . $this->table_name . "

ORDER BY

name ASC

LIMIT

{$from_record_num}, {$records_per_page}";

$stmt = $this->conn->prepare( $query );

$stmt->execute();

return $stmt;

}

5.7 Put the Edit and Delete Action Buttons

echo "<td>";

// edit and delete button is here

echo "<a href='update_product.php?id={$id}' class='btn btn-default left-margin'>Edit</a>";

echo "<a delete-id='{$id}' class='btn btn-default delete-object'>Delete</a>";

echo "</td>";

5.8 Create paging_product.php for Paging Buttons

<?php

// the page where this paging is used

$page_dom = "index.php";

echo "<ul class=\"pagination\">";

// button for first page

if($page>1){

echo "<li><a href='{$page_dom}' title='Go to the first page.'>";

echo "<<";

echo "</a></li>";

}

// count all products in the database to calculate total pages

$total_rows = $product->countAll();

$total_pages = ceil($total_rows / $records_per_page);

// range of links to show

$range = 2;

// display links to 'range of pages' around 'current page'

$initial_num = $page - $range;

$condition_limit_num = ($page + $range)  + 1;

for ($x=$initial_num; $x<$condition_limit_num; $x++) {

// be sure '$x is greater than 0' AND 'less than or equal to the $total_pages'

if (($x > 0) && ($x <= $total_pages)) {

// current page

if ($x == $page) {

echo "<li class='active'><a href=\"#\">$x <span class=\"sr-only\">(current)</span></a></li>";

}

// not current page

else {

echo "<li><a href='{$page_dom}?page=$x'>$x</a></li>";

}

}

}

// button for last page

if($page<$total_pages){

echo "<li><a href='" .$page_dom . "?page={$total_pages}' title='Last page is {$total_pages}.'>";

echo ">>";

echo "</a></li>";

}

echo "</ul>";

?>

5.9 Add the countAll() method in objects/product.php

// used for paging products

public function countAll(){

$query = "SELECT id FROM " . $this->table_name . "";

$stmt = $this->conn->prepare( $query );

$stmt->execute();

$num = $stmt->rowCount();

return $num;

}

5.10 Include paging_product.php in index.php

// paging buttons here

include_once 'paging_product.php';

6.0 Updating Record in PHP the OOP Way

6.1 Create update_product.php and Set the “Update Product” Headers

<?php

$page_title = "Update Product";

include_once "header.php";

?>

6.2 Create a “Read Products” Button

echo "<div class='right-button-margin'>";

echo "<a href='index.php' class='btn btn-default pull-right'>Read Products</a>";

echo "</div>";

6.3 Retrieve One Product Information Based on the Given ID.

// get ID of the product to be edited

$id = isset($_GET['id']) ? $_GET['id'] : die('ERROR: missing ID.');

// include database and object files

include_once 'config/database.php';

include_once 'objects/product.php';

// get database connection

$database = new Database();

$db = $database->getConnection();

// prepare product object

$product = new Product($db);

// set ID property of product to be edited

$product->id = $id;

// read the details of product to be edited

$product->readOne();

6.4 Add readOne() method in the Product Object Class.

The readOne() method used in 6.3 above will not work without the following code inside objects/product.php

function readOne(){

$query = "SELECT

name, price, description, category_id

FROM

" . $this->table_name . "

WHERE

id = ?

LIMIT

0,1";

$stmt = $this->conn->prepare( $query );

$stmt->bindParam(1, $this->id);

$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);

$this->name = $row['name'];

$this->price = $row['price'];

$this->description = $row['description'];

$this->category_id = $row['category_id'];

}

6.5 Put the Values in the Form.

Now we can put the latest values to each form elements.

<form action='update_product.php?id=<?php echo $id; ?>' method='post'>

<table class='table table-hover table-responsive table-bordered'>

<tr>

<td>Name</td>

<td><input type='text' name='name' value='<?php echo $product->name; ?>' class='form-control' required></td>

</tr>

<tr>

<td>Price</td>

<td><input type='text' name='price' value='<?php echo $product->price; ?>' class='form-control' required></td>

</tr>

<tr>

<td>Description</td>

<td><textarea name='description' class='form-control'><?php echo $product->description; ?></textarea></td>

</tr>

<tr>

<td>Category</td>

<td>

<!-- categories select drop-down will be here -->

</td>

</tr>

<tr>

<td></td>

<td>

<button type="submit" class="btn btn-primary">Update</button>

</td>

</tr>

</table>

</form>

6.6 Loop Through the Categories Records to show as Drop-down

Notice that we put an IF statement if($category_id==$id){… inside the while loop. This is to pre-select the option of the current record.

<tr>

<td>Category</td>

<td>

<?php

// read the product categories from the database

include_once 'objects/category.php';

$category = new Category($db);

$stmt = $category->read();

// put them in a select drop-down

echo "<select class='form-control' name='category_id'>";

echo "<option>Please select...</option>";

while ($row_category = $stmt->fetch(PDO::FETCH_ASSOC)){

extract($row_category);

// current category of the product must be selected

if($category_id==$id){

echo "<option value='$id' selected>";

}else{

echo "<option value='$id'>";

}

echo "$name</option>";

}

echo "</select>";

?>

</td>

</tr>

6.7 Code When Form was Submitted

// if the form was submitted

if($_POST){

// set product property values

$product->name = $_POST['name'];

$product->price = $_POST['price'];

$product->description = $_POST['description'];

$product->category_id = $_POST['category_id'];

// update the product

if($product->update()){

echo "<div class=\"alert alert-success alert-dismissable\">";

echo "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";

echo "Product was updated.";

echo "</div>";

}

// if unable to update the product, tell the user

else{

echo "<div class=\"alert alert-danger alert-dismissable\">";

echo "<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>";

echo "Unable to update product.";

echo "</div>";

}

}

6.8 Update Code in the Product Class

The update function used in the IF statement above will not work without adding the following code in objects/product.php

function update(){

$query = "UPDATE

" . $this->table_name . "

SET

name = :name,

price = :price,

description = :description,

category_id  = :category_id

WHERE

id = :id";

$stmt = $this->conn->prepare($query);

$stmt->bindParam(':name', $this->name);

$stmt->bindParam(':price', $this->price);

$stmt->bindParam(':description', $this->description);

$stmt->bindParam(':category_id', $this->category_id);

$stmt->bindParam(':id', $this->id);

// execute the query

if($stmt->execute()){

return true;

}else{

return false;

}

}

7.0 Deleting Record in PHP the OOP Way

7.1 Put this JavaScript Code in index.php

Put this JavaScript code before footer.php

<script>

$(document).on('click', '.delete-object', function(){

var id = $(this).attr('delete-id');

var q = confirm("Are you sure?");

if (q == true){

$.post('delete_product.php', {

object_id: id

}, function(data){

location.reload();

}).fail(function() {

alert('Unable to delete.');

});

}

return false;

});

</script>

7.2 Create delete_product.php

In this file is where the ID was sent by the JavaScript code in 7.1.

<?php

// check if value was posted

if($_POST){

// include database and object file

include_once 'config/database.php';

include_once 'objects/product.php';

// get database connection

$database = new Database();

$db = $database->getConnection();

// prepare product object

$product = new Product($db);

// set product id to be deleted

$product->id = $_POST['object_id'];

// delete the product

if($product->delete()){

echo "Object was deleted.";

}

// if unable to delete the product

else{

echo "Unable to delete object.";

}

}

?>

7.3 Delete Code in Product Class

This is the delete() method inside the product object class used by delete_product.php

// delete the product

function delete(){

$query = "DELETE FROM " . $this->table_name . " WHERE id = ?";

$stmt = $this->conn->prepare($query);

$stmt->bindParam(1, $this->id);

if($result = $stmt->execute()){

return true;

}else{

return false;

}

}

8.0 Online Resources

8.1 Download Source Code

This is also one way to view the complete code. DOWNLOAD CODE HERE

That’s it for now, again please let us know in the comments section below if you have any problem with our code for today, or if you just want to put some additional explanation and examples.

Please note that this post is in continuous development, meaning I’ll update it every now and then.

If you have a friend, or know someone who need this PHP Object Oriented CRUD Example, please share this page to them! I know you will help them a lot by doing it. Thanks!