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;
   } 
  }
 }
}

Baca Selengkapnya...

5 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 ?

Unknown mengatakan...

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

Unknown mengatakan...

cara membuat mesin fsa dari game flash missionaries and canibal gimana sist ?

Unknown mengatakan...

Permisi ..
mbaa saya Newbie .. itu cara pembuatan game melalui flashnya tidak ada turtorialnya ?
saya agak bingung dengan kodingannya ..
mohon di bantu .. terima kasih :)

About

- alivi -