Kamis, 25 Februari 2016

SMA* / Modern Memory Bounded A*

Pengertian dan Penjelasan

SMA * atau Modern Memory Bounded A * adalah algoritma jalur terpendek berdasarkan A * algoritma. Keuntungan utama dari SMA * adalah bahwa ia menggunakan memori dibatasi, sedangkan A * algoritma mungkin perlu memori eksponensial. Semua karakteristik lain dari SMA * diwariskan dari A *. (!@#$%^&?) o_O
Seperti A *, memperluas cabang yang paling menjanjikan menurut heuristik tersebut. Apa yang membuat SMA * terpisah adalah bahwa hal itu prunes nodes  yang ekspansi telah mengungkapkan kurang menjanjikan dari yang diharapkan. Pendekatan ini memungkinkan algoritma untuk mengeksplorasi cabang dan mundur untuk mengeksplorasi cabang lainnya.

Ekspansi dan pemangkasan node didorong dengan menjaga dua nilai dari f untuk setiap node. Node x toko nilai f (x) yang memperkirakan biaya mencapai tujuan dengan mengambil jalan melalui simpul itu. Semakin rendah nilai, semakin tinggi prioritas. Seperti di A * nilai ini diinisialisasi untuk h (x) + g (x), tetapi kemudian akan diperbarui untuk mencerminkan perubahan perkiraan ini ketika anak-anak yang diperluas. Sebuah node sepenuhnya diperluas akan memiliki nilai f setidaknya setinggi itu dari penerusnya. Selain itu, node menyimpan nilai f dari penerus terbaik dilupakan. Nilai ini dikembalikan jika penerus lupa diturunkan menjadi penerus yang paling menjanjikan. (!@#$%^&?) o_O

Dimulai dengan node pertama, ia mempertahankan OPEN, memerintahkan leksikografis oleh f dan kedalaman. Ketika memilih sebuah node untuk memperluas, ia memilih yang terbaik sesuai dengan urutan itu. Ketika memilih sebuah node untuk memangkas, ia memilih yang terburuk.
Pelaksanaan SMA * sangat mirip dengan salah satu dari A *, satu-satunya perbedaan adalah bahwa ketika tidak ada ruang yang tersisa, node dengan tertinggi f-biaya yang dipangkas dari antrian. Karena mereka node dihapus, SMA * juga harus mengingat f-biaya anak terbaik lupa dengan node induk. Ketika tampaknya semua jalan dieksplorasi lebih buruk daripada seperti jalur lupa, jalan tersebut kembali dihasilkan.

Pseudo code:
function SMA-star(problem): path
  queue: set of nodes, ordered by f-cost;
begin
  queue.insert(problem.root-node);

  while True do begin
    if queue.empty() then return failure; //there is no solution that fits in the given memory
    node := queue.begin(); // min-f-cost-node
    if problem.is-goal(node) then return success;
    
    s := next-successor(node)
    if !problem.is-goal(s) && depth(s) == max_depth then
        f(s) := inf; 
        // there is no memory left to go past s, so the entire path is useless
    else
        f(s) := max(f(node), g(s) + h(s));
        // f-value of the successor is the maximum of
        //      f-value of the parent and 
        //      heuristic of the successor + path length to the successor
    endif
    if no more successors then
       update f-cost of node and those of its ancestors if needed
    
    if node.successors  queue then queue.remove(node); 
    // all children have already been added to the queue via a shorter way
    if memory is full then begin
      badNode := shallowest node with highest f-cost;
      for parent in badNode.parents do begin
        parent.successors.remove(badNode);
        if needed then queue.insert(parent); 
      endfor
    endif

    queue.insert(s);
  endwhile
end
 (!@#$%^&?) o_O

Tidak ada komentar:

Posting Komentar