Pada matakuliah Kecerdasan Buatan semester ini, dosenku memberi tugas untuk membuat suatu permasalahan yg bisa diselesaikan dengan menggunakan teori Automata. Teori Automata adalah teori tentang mesin abstrak, yaitu mesin sekuensial yang menerima masukan dan keluaran dalam bentuk diskrit. Sedangkan Finite State Automata (FSA) adalah model matematika dari sistem dengan masukan dan keluaran berupa nilai diskrit.

Setiap FSA memiliki:
1. Himpunan berhingga (finite) status (state),
    • Satu buah status sebagai status awal (initial state), biasa dinyatakan q0
    • Beberapa buah status sebagai status akhir (final state)
2. Himpunan berhingga simbol masukan,
3. Fungsi transisi
    • Menentukan status berikutnya dari setiap pasang status dan sebuah simbol masukan


Pada tugas kali ini, kelompokku yang terdiri dari tiga orang yaitu aku, gulpi dan anis memutuskan untuk membuat aplikasi game yang diselesaikan dengan FSA. Berikut penjelasan mengenai permasalahan yang kami angkat.

PERMASALAHAN
Di kutub selatan, terdapat enam binatang yang terdiri dari induk pinguin, anak pinguin, induk singa laut, anak singa laut, induk beruang kutub, dan anak beruang kutub. Semua binatang ini hendak menyebrang ke gunung es pada sisi lainnya. Di antara dua gunung es ini terdapat balok es yang hanya bisa ditempati untuk dua binatang saja. Namun, terdapat suatu masalah yaitu anak binatang tidak boleh ditinggal bersama induk binatang yang berlainan jenis dan singa laut harus menjadi yang pertama sampai di sisi lainnya karena anak singa laut sedang terluka sehingga harus cepat sampai di kelompoknya. Bantulah mereka untuk menyebrang ke gunung es pada sisi lainnya!

SOLUSI
• Input (himpunan simbol masukan)
  {AP, IP, AS, IS, AB, IB, AP-IP, AS-IS, AB-IB, AP-AS, AP-AB, AS-AB}

• State (himpunan status berhingga)




















• Fungsi transisi















• Diagram transisi












Aplikasi dibuat menggunakan Flash. Aplikasi ini dibuat oleh Gulpi. Karena dosen kami tidak memperhatikan tampilan, jadi Gulpi membuatnya sangat sederhana, yang penting konsep FSAnya harus ada. Berikut tampilan dari aplikasi kami.


Berikut listing programnya.

q=0;
emp=0;
inp1=0;
inp2=0;
pad=0;
pos1=0;
pos2=0;
pos3=0;
pos4=0;
pos5=0;
pos6=0;

OK.onRelease=function(){
 if(emp!=0){
  
  //cek posisi pad
  if(pad==0){
   PAD._x=150;
   pad=1;
  }else{
   PAD._x=210;
   pad=0;
  }
  
  //cek posisi objek
  if(pos1==-1){
   IB._x=50;
   IB._y=90;
   pos1=1;
  }else if(pos1==-2){
   IB._x=475;
   IB._y=90;  
   pos1=0;
  }
  if(pos2==-1){
   AB._x=50;
   AB._y=140;
   pos2=1;
  }else if(pos2==-2){
   AB._x=475;
   AB._y=140;  
   pos2=0;
  }
  if(pos3==-1){
   IP._x=50;
   IP._y=190;
   pos3=1;
  }else if(pos3==-2){
   IP._x=475;
   IP._y=190;  
   pos3=0;
  }
  if(pos4==-1){
   AP._x=50;
   AP._y=240;
   pos4=1;
  }else if(pos4==-2){
   AP._x=475;
   AP._y=240;  
   pos4=0;
  }
  if(pos5==-1){
   IS._x=50;
   IS._y=300;
   pos5=1;
  }else if(pos5==-2){
   IS._x=475;
   IS._y=300;  
   pos5=0;
  }
  if(pos5==-1){
   IS._x=50;
   IS._y=300;
   pos5=1;
  }else if(pos5==-2){
   IS._x=475;
   IS._y=300;  
   pos5=0;
  }
  if(pos5==-1){
   IS._x=50;
   IS._y=300;
   pos5=1;
  }else if(pos5==-2){
   IS._x=475;
   IS._y=300;  
   pos5=0;
  }
  if(pos6==-1){
   AS._x=50;
   AS._y=350;
   pos6=1;
  }else if(pos6==-2){
   AS._x=475;
   AS._y=350;  
   pos6=0;
  }
  
  //cek kondisi (FSA)
  switch(q){
   case 0:
    if(((inp1==6)&&(inp2==5))||((inp1==5)&&(inp2==6))){
     q=1;
    }else{
     q=-1;
    }
   break;
   case 1:
    if(((inp1==6)&&(inp2==0))){
     q=2;
    }else{
     q=-1;
    }
   break;
   case 2:
    if(((inp1==6)&&(inp2==2))||((inp1==2)&&(inp2==6))){
     q=3;
    }else if(((inp1==6)&&(inp2==4))||((inp1==4)&&(inp2==6))){
     q=10;
    }else{
     q=-1;
    }
   break;
   case 3:
    if(((inp1==2)&&(inp2==0))){
     q=4;
    }else{
     q=-1;
    }
   break;
   case 4:
    if(((inp1==2)&&(inp2==1))||((inp1==1)&&(inp2==2))){
     q=5;
    }else if(((inp1==3)&&(inp2==4))||((inp1==4)&&(inp2==3))){
     q=11;
    }else{
     q=-1;
    }
   break;
   case 5:
    if(((inp1==2)&&(inp2==0))){
     q=6;
    }else{
     q=-1;
    }
   break;
   case 6:
    if(((inp1==2)&&(inp2==4))||((inp1==4)&&(inp2==2))){
     q=7;
    }else{
     q=-1;
    }
   break;
   case 7:
    if(((inp1==4)&&(inp2==0))){
     q=8;
    }else{
     q=-1;
    }
   break;
   case 8:
    if(((inp1==3)&&(inp2==4))||((inp1==4)&&(inp2==3))){
     q=9;
    }else{
     q=-1;
    }
   break;
   case 9:
    trace("YOu Won");
   break;
   case 10:
    if(((inp1==4)&&(inp2==0))){
     q=4;
    }else{
     q=-1;
    }
   break;
   case 11:
    if(((inp1==4)&&(inp2==0))){
     q=12;
    }else{
     q=-1;
    }
   break;
   case 12:
    if(((inp1==4)&&(inp2==2))||((inp1==2)&&(inp2==4))){
     q=13;
    }else{
     q=-1;
    }
   break;
   case 13:
    if(((inp1==2)&&(inp2==0))){
     q=14;
    }else{
     q=-1;
    }
   break;
   case 14:
    if(((inp1==1)&&(inp2==2))||((inp1==2)&&(inp2==1))){
     q=9;
    }else{
     q=-1;
    }
   break;
  }

  //reset semua temporary
  emp=0;
  inp1=0;
  inp2=0;
  txtQ.text=q;
  trace(q);
 }
}

IS.onRelease=function(){
 if(pos5==0){
  if(pad==0){
   if(emp==0){
    IS._x=280;
    IS._y=180;
    pos5=-1;
    emp++;
    inp1=5;
   }else if(emp==1){
    IS._x=280;
    IS._y=250;
    pos5=-1;   
    emp++;
    inp2=5;
   }
  }
 }else if(pos5==1){
  if(pad==1){
   if(emp==0){
    IS._x=280;
    IS._y=180;
    pos5=-2;
    emp++;
    inp1=5;
   }else if(emp==1){
    IS._x=280;
    IS._y=250;
    pos5=-2;   
    emp++;
    inp2=5;
   } 
  }
 }
}

AS.onRelease=function(){
 if(pos6==0){
  if(pad==0){
   if(emp==0){
    AS._x=280;
    AS._y=180;
    pos6=-1;
    emp++;
    inp1=6;
   }else if(emp==1){
    AS._x=280;
    AS._y=250;
    pos6=-1;   
    emp++;
    inp2=6;
   }
  }
 }else if(pos6==1){
  if(pad==1){
   if(emp==0){
    AS._x=280;
    AS._y=180;
    pos6=-2;
    emp++;
    inp1=6;
   }else if(emp==1){
    AS._x=280;
    AS._y=250;
    pos6=-2;   
    emp++;
    inp2=6;
   } 
  }
 }
}

IP.onRelease=function(){
 if(pos3==0){
  if(pad==0){
   if(emp==0){
    IP._x=280;
    IP._y=180;
    pos3=-1;
    emp++;
    inp1=3;
   }else if(emp==1){
    IP._x=280;
    IP._y=250;
    pos3=-1;   
    emp++;
    inp2=3;
   }
  }
 }else if(pos3==1){
  if(pad==1){
   if(emp==0){
    IP._x=280;
    IP._y=180;
    pos3=-2;
    emp++;
    inp1=3;
   }else if(emp==1){
    IP._x=280;
    IP._y=250;
    pos3=-2;   
    emp++;
    inp2=3;
   } 
  }
 }
}

AP.onRelease=function(){
 if(pos4==0){
  if(pad==0){
   if(emp==0){
    AP._x=280;
    AP._y=180;
    pos4=-1;
    emp++;
    inp1=4;
   }else if(emp==1){
    AP._x=280;
    AP._y=250;
    pos4=-1;   
    emp++;
    inp2=4;
   }
  }
 }else if(pos4==1){
  if(pad==1){
   if(emp==0){
    AP._x=280;
    AP._y=180;
    pos4=-2;
    emp++;
    inp1=4;
   }else if(emp==1){
    AP._x=280;
    AP._y=250;
    pos4=-2;   
    emp++;
    inp2=4;
   } 
  }
 }
}

IB.onRelease=function(){
 if(pos1==0){
  if(pad==0){
   if(emp==0){
    IB._x=280;
    IB._y=180;
    pos1=-1;
    emp++;
    inp1=1;
   }else if(emp==1){
    IB._x=280;
    IB._y=250;
    pos1=-1;   
    emp++;
    inp2=1;
   }
  }
 }else if(pos1==1){
  if(pad==1){
   if(emp==0){
    IB._x=280;
    IB._y=180;
    pos1=-2;
    emp++;
    inp1=1;
   }else if(emp==1){
    IB._x=280;
    IB._y=250;
    pos1=-2;   
    emp++;
    inp2=1;
   } 
  }
 }
}

AB.onRelease=function(){
 if(pos2==0){
  if(pad==0){
   if(emp==0){
    AB._x=280;
    AB._y=180;
    pos2=-1;
    emp++;
    inp1=2;
   }else if(emp==1){
    AB._x=280;
    AB._y=250;
    pos2=-1;   
    emp++;
    inp2=2;
   }
  }
 }else if(pos2==1){
  if(pad==1){
   if(emp==0){
    AB._x=280;
    AB._y=180;
    pos2=-2;
    emp++;
    inp1=2;
   }else if(emp==1){
    AB._x=280;
    AB._y=250;
    pos2=-2;   
    emp++;
    inp2=2;
   } 
  }
 }
}

penasaran?? kLick hEre...

4 komentar:

Anonim mengatakan...

klo listing program mesin pencari bilangan real dgn FSA gmn gan ?

Zain Alcantara mengatakan...

klo listing program FSA mesin pencari bilangan real gmn gan ?

padioryza mengatakan...

wah y sama gan zainun.... :-D

Rahmi Imanda mengatakan...

artikel yang menarik, kami juga punya artikel tentang 'himpunan state' silahkan buka link ini
http://repository.gunadarma.ac.id/bitstream/123456789/3053/1/IMG_0015.pdf
semoga bermanfaat ya

Let's havE fUn gUys!!