Membuat Digital Elevation Model (DEM) dari Peta Kontur

Untuk menentukan lokasi yang tepat terkadang ada syarat yang mengharuskan kemiringan tertentu, misalnya lokasi sekolah, perumahan, dan lain-lain. Oleh karena itu dibutuhkan data layer yang digunakan untuk menentukan lokasi dengan syarat tersebut. Biasanya syaratnya tidak hanya slope, jarak tertentu dari jalan raya, polusi, daerah rawan bencana dan lain sebagainya. Untuk DEM sendiri biasanya data yang tersedia berupa kontur yaitu garis-garis yang merepresentasikan ketinggian tertentu. ArcGIS memiliki fasilitas topografi untuk membuat DEM yang bertipe raster agar lebih mudah di-overlay dengan kriteria-kriteria yang lain.

Buat project baru dengan nama misalnya dem, kemudian tambahkan shapefile peta kontur lokasi yang akan dibuat DEM-nya. Buka Arc Catalog, drag file shapefile ke Table of Contents.

Buka ArcToolbox, dan di 3D analysis tool di bagian raster interpolation pilih topo to raster yang akan mengkonversi topografi menjadi raster. Isi shapefile yang dibutuhkan, untuk extent keluaran bisa dibatasi untuk region tertentu. Isi nama file keluaran dari hasil proses interpolasi ini. Tunggu hingga ArcGIS menginformasikan berhasil atau tidaknya proses konversi dengan memunculkan pesan berikut di pojok kanan bawah komputer.

Jika silang merah, berarti ada yang salah dengan proses tersebut. Jika berhasil, DEM siap digunakan. Selamat mencoba.

 

Error 000824 the tool is not licensed

Mempelajari software baru sangat menjengkelkan tetapi menyenangkan. Kita bisa mengetahui kecanggihan hasil karya orang yang tidak jarang membuat kita takjub. Walaupun kita tidak boleh tergantung dari tools, tetapi untuk menuangkan ide tentu saja kita membutuhkan alat yang dapat merepresentasikan isi kepala kita dengan cepat dan gampang terlihat. Untuk masalah data spasial, ArcGIS menjadi andalan beberapa peneliti. Software buatan ESRI ini terus mengembangkan versi-versi terbarunya agar mudah dan nyaman digunakan, salah satunya adalah proses pembuatan model.

Lisensi ArcGIS cukup mahal, tetapi biasanya institusi-institusi pendidikan, pemerintah, dan instansi lain biasanya telah membeli lisensi. Walaupun sudah ada versi open source yang gratis, sepertinya ArcGIS masih menjadi andalan dan banyak dipakai oleh peneliti-peneliti. Paper-paper di jurnal-jurnal internasional banyak kita jumpai penerapan software ini. Kembali ke model, setelah berpusing-pusing ria dengan problem sistem koordinat dan proyeksi, muncul masalah baru ketika akan melakukan model suitability analysis yaitu error 000824 the tool is not licensed. Sungguh menjengkelkan, karena hari itu saya sudah jenuh membaca ketika melakukan searching di google. Akhirnya saya mencoba membuka youtube, karena tidak perlu membaca, tinggal mendengarkan sambil melamun 🙂.

Ternyata beres juga masalah tersebut, dengan caru masuk ke menu Customize – Extension, lalu centang fasilitas-fasilitas yang kita butuhkan. Atau centang saja semua, beres sudah masalah.

Menentukan Suatu Titik di Dalam atau di Luar Polygon

Setelah berhasil merancang algoritma yang berfungsi mengoptimasi beberapa lokasi landuse, berikutnya adalah merancang optimasi dengan batasan. Tidak ada gunanya merancang sistem yang mengoptimasi lokasi optimal tetapi tidak melibatkan batasan tertentu. Batasan di sini misalnya lokasi yang menjadi target lokasi optimal harus bebas banjir, tidak berbahaya, dan aspek-aspek suitability/kesesuaian sesuai jenis peruntukan lahannya (perumahan, kantor, komersial, dan lain-lain). Dengan demikian saat proses optimasi, harus terlebih dahulu dipastikan bahwa kandidat lokasi tersebut berada di dalam region yang diperbolehkan. Istilah untuk optimasi jenis ini adalah constraint optimization.

Ilmu yang mempelajari apakah satu titik berada di dalam dan di luar suatu polygon adalah computer graphic. Secara gampangnya, suatu titik berada di dalam suatu area apabila beririsan dengan garis/lengkungan area tersebut tepat satu kali, dimana garis itu ditarik dari titik yang akan diuji pada sumbu x atau sumbu y keluar/menjauh. Jika beririsan dua kali, atau tidak sama sekali, maka dipastikan titik tersebut berada di luar bidang area tersebut. Cukup sederhana tetapi prakteknya sangat sulit. Setelah searching di internet, ternyata sudah banyak yang membuat M-file dengan bahasa Matlab, salah satunya adalah pada link berikut ini.

Karena Area of Interest (AOI) riset saya adalah kota Bekasi, maka saya membutuhkan region kota Bekasi dalam format shapefile (*.shp). Data dapat diunduh (biasanya berupa data untuk seluruh kota di Indonesia). Lakukan proses clipping untuk menemukan region kota Bekasi saja. Setelah itu impor ke dalam workspace dengan instruksi:

  • data1=impor(‘bekasi_city.shp’);
  • y=transpose([data1.X;data1.Y]);
  • land=(y);

Fungsi impor saya buat sendiri, untuk mempermudah saja, yaitu fungsi shaperead, yang bisa Anda lihat dengan mengetik ‘help shaperead’ di command window untuk lebih jelasnya. Untuk melihat secara visual regionnya, gunakan ‘mapview’ dan buka file shapefile yang Anda miliki.

Letakkan kursor di dalam region kota Bekasi, catat koordinatnya, kemudian cek apakah berada di dalam kota Bekasi atau di luar kota Bekasi. Misalnya titik yang berada di dalam adalah (106.98, -6.27), ikuti instruksi berikut ini untuk mengecek apakah berada di dalam atau di luar.

  • p1=[106.98 -6.27]
  • p1 =
  • 106.9800 -6.2700
  • >> in=inpoly(p1,land)
  • in =
  • 1

Perhatikan, Matlab menjawab 1, yang berarti titik berada di dalam kota Bekasi. Bagaimana jika di luar kota Bekasi? Arahkan mouse di luar kota Bekasi, catat koordinatnya, misalnya (107, -6), test lagi:

  • p=[107 -6];
  • in=inpoly(p,land)
  • in =
  • 0

Matlab menjawab nol, yang artinya di luar region/area. Jadi kode teruji benar. Terjawablah sudah problem menentukan suatu titik di luar atau di dalam region yang nantinya akan diintegrasikan dengan algoritma optimisasi. Akhir kata, fungsi di atas juga bisa digunakan untuk deretan titik, tidak harus satu titik saja. Misalnya kedua titik di atas, titip pertama p dan titik kedua p1, akan dicek secara bersama, kita tinggal menggabungkan kedua titik tersebut menjadi variabel titik:

  • test = [p;p1]
  • test =
  • 107.0000 -6.0000
  • 106.9800 -6.2700
  • in=inpoly(test,land)
  • in =
  • 0
  • 1

Yang artinya titik pertama di luar dan titik kedua didalam. Selamat mencoba dan bermain-main dengan data spatial dengan Matlab.

Koneksi Matlab dengan ArcGIS/ArcView

Sempet juga saya kelabakan ketika menerima hibah penelitian tentang spatial data yang diintegrasikan dengan algoritma tertentu. Karena kepepet, waktu itu saya menggunakan GUI matlab untuk membuat peta seperti arcgis dan juga bantuan aplikasi google map/earth yang ditempel di web berbasis ruby on rails, karena waktu kuliah web technology saya diajarkan bahasa pemrograman ruby on rails. Hasilnya kira-kira berikut ini:

Meneruskan riset yang sederhana tentang optimasi lokasi, untuk optimasi landuse tentu saja tidak bisa dengan cara seperti optimasi spbu yang memang terletak di pinggir jalan. Landuse akan mencari areal dua dimensi yang luas sekali, terutama untuk kasus kota bekasi yang luasnya sekitar 200 km persegi. Ternyata rumit juga terutama criteria/objective function untuk suitability. Ditambah lagi constraint untuk candidate locations, weh. Untuk sementara hasilnya seperti ini, semoga lancar ke depannya.

Optimasi Landuse dengan Matlab

Saatnya mulai membuat kode program matlab untuk mengoptimasi lokasi landuse dan landcover dengan data dari arcview/arcgis. Banyak algoritma yang digunakan oleh riset-riset optimasi saat ini, dua yang terkenal yaitu dengan Particle Swarm Optimization (PSO) dan Genetic Algorithms (GAs). Karena masing-masing memiliki kelemahan dan kelebihan, banyak yang berusaha melakukan hybrid antara satu metode dengan metode lainnya yang ternyata menghasilkan efisiensi dan akurasi yang baik.

Gambar di atas memperlihatkan hasil optimasi landuse tipe lingkaran. Di sini kode masih agak error, dan belum menerapkan algoritma untuk constraint (terlihat result berwarna hijau kabur melewati batas wilayah), tapi untuk sementara cukup menggembirakan karena dapat menghubungkan antara matlab dengan arcview/arcgis untuk menampilkannya. Setiap selesai melakukan optimasi, untuk melihat hasilnya kita harus merefresh Arcview dengan menekan tombol layer .

Menjawab Problem Data type “Struct” di Matlab

Menjawab permasalahan yang dijumpai ketika membuat kode program dengan bahasa Matlab adalah dengan cara: 1) membaca help, 2) situs www.matworks.com, 3) komunitas di internet, dengan bantuan google, dan 4) youtube. Permasalahan muncul karena karakter bahasa matlab yang sedikit berbasis objek. Buku yang beredar di pasaran pun tidak sanggup menjawab seluruh pertanyaan yang beredar. Pertanyaan-pertanyaan liar selalu bermunculan baik melalui komentar ataupun email. Salah satu yang bikin ribet adalah masalah struktur data, karena Matlab memiliki struktur data yang agak banyak. Banyaknya struktur data mungkin dikarenakan kemudahan-kemudahan yang matlab berikan melebihi bahasa induknya yaitu c++ dan fortran.

Beberapa kata kunci yang melibatkan struktur data di matlab dan dapat diakses di fasilitas help antara lain: num2str, cellstr, num2cell, dan sebagainya. Untuk mengetahui tata caranya secara cepat dengan cara mengetik di command window, misalnya: >>help num2str.

Yang menarik di sini, kita dapat mengetahui pula fungsi-fungsi yang berhubungan dengannya lewat informasi “See also”. Untuk mengetahui secara detail dalam bentuk GUI yang rapi dapat mengganti help dengan doc sebelum kata fungsi yang ingin kita ketahui lebih lanjut. Atau menekan tulisan doc num2str.

Untuk situs resmi matlab, sepertinya formatnya tidak jauh berbeda dengan help, yang memaksa kita untuk membaca luas yang terkadang jadi lupa dengan masalah utamanya. Sepertinya andalan utama untuk saat ini adalah searching di internet dengan search engine tercanggih di dunia, google (www.google.com). Untuk bahasa pemrograman, biasanya google mengarahkan ke situs resmi dan komunitas programming, seperti misalnya stackoverflow (www.stackoverflow.com). Perhatikan jawaban di bawahnya oleh para senior, misalnya pertanyaan untuk kasus saya di muka berikut ini:

Terkadang kita tidak mengenal fungsi-fungsi tertentu, karena memang jumlahnya sangat banyak dan tidak mungkin dihapal semuanya. Nah, di sini karena yang ikut terlibat adalah programmer-programmer dengan latar belakang yang beragam, bagi programmer tertentu mungkin banyak memakai fungsi tertentu yang khas di bidangnya yang bagi orang di bidang lain masih dianggap asing. Contoh di atas adalah fungsi setfield yang masih asing bagi pemula atau yang menggunakan matlab untuk komputasi yang tidak berhubungan dengan database. Ikuti di command window saran di atas, dan berhasil. Tentu saja andalan utama kita adalah help yang resmi dari Matlab. Berikut ini trik untuk mengupdate nilai field dari data jenis struct.

Misalkan kita punya data landtype:

  • landtype =
  • 4134884 7681103
  • 9275435 3020821
  • 2063774 5498421
  • 5850328 1631791
  • 5932021 1324960
  • 4557209 2641519
  • 1531668 5462547
  • 2804685 2757848
  • 7250245 6744421
    • ……….

Akan dimasukan ke variabel struktur “data” untuk variabel X dan Y di dalam data tersebut.

  • data =
  • 17×1 struct array with fields:
  • Geometry
  • X
  • Y
  • ID

Dengan mengetikan instruksi ini, fields X dan Y akan berisi landtype.

  • for i=1:17
  • data(i).X=landtype(i,1)
  • data(i).Y=landtype(i,2)
  • end

Kita uji, misalnya untuk data pertama.

  • >> [data(1).X data(1).Y]
  • ans =
  • 4134884 7681103

Bernilai sama dengan landtype pada data di atas yang dicetak tebal. Berikutnya akan kita ekspor hasilnya menjadi shapefile agar bisa dibuka di arcview / arcgis.

>> shapewrite(data,’result’)

Doctoral-Thessis Proposal

Entah sudah berapa kali saya membuat proposal, baik saat studi lanjut ataupun saat mengajukan dana hibah penelitian. Alhamdulillah, seluruh proposal yg saya ajukan, termasuk proposal disertasi, diterima. Kalaupun tidak itu karena masalah administrasi seperti tidak boleh menerima dana hibah lebih dari satu dalam tahun yang sama dan sebagainya. Berbeda dengan proposal-proposal sebelumnya, proposal disertasi merupakan proposal terberat yang pernah saya buat karena membutuhkan ilmu-ilmu yang telah saya pelajari sebelumnya. Selain itu, mencari temuan baru, walaupun hanya secuil ternyata membutuhkan usaha yang besar dari mempelajari riset-riset terkini hingga menganalisa bahwa temuan yang akan kita teliti memang bisa dikerjakan dalam range waktu yang sudah ditentukan.

Memang tidak ada salahnya jujur terhadap diri sendiri, sampai di mana kemampuan kita. Setelah mencoba nekat mengambil jurusan ilmu computer, saya nyerah juga akhirnya. Ketika saya pertama kali kuliah di jurusan computer science, kira2 dua tahun yang lalu, ada pertemuan mahasiswa-mahasiswa Indonesia di gedung Remote Sensing and Geographic Information Systems (RS-GIS) dan ketika melewati lorong-lorongnya, entah mengapa di hati saya berdesir suatu kekaguman terhadap bidang itu ketika melihat foto-foto yang dipajang di dinding lorong itu. Dengan blackberry, saya foto-foto di situ. Foto-foto tersebut masih tersimpan dan saya anggap angin lalu. Dan saya terkejut ketika beberapa waktu yang lalu membuka-buka file lama berisi foto-foto backup blackberry saya, tampak foto “iseng” tersebut yang seolah-olah mengingatkan saya bahwa saya dulu “pernah” terketuk hatinya dengan bidang GIS yang saat ini menjadi bidang disertasi saya. Lebih “ganas”nya lagi, saya harus membahas juga aspek environment/lingkungan seperti yang pernah saya foto juga. “There is no accident”, kata si guru kura2 dalam film kungfu panda,  semua ada yang ngatur.

Kembali ke masalah salah jurusan. Untung saya hobi main catur, saya teringat tiap kali melakukan kesalahan, yang harus saya kerjakan adalah mengurangi dampak dari kesalahan yang telah saya buat itu. Demikian pula, ketika saya tidak sanggup melanjutkan jurusan berat tersebut, saya langsung beralih ke jurusan information management yang sedikit fleksibel. Seluruh kekuatan saya data, termasuk hibah penelitian yang saya peroleh tiga tahun berturut-turut (akan saya lanjutkan menjadi disertasi), walaupun sulit saya anggap kekuatan karena secara logika menghemat tiga tahun. Bedanya hanya cakupan ilmu yang harus diperketat dengan tambahan temuan-temuan baru (research gap).

Mata kuliah-mata kuliah pendukung saya ambil, dari GIS hingga Artificial Intelligent & Neuro-Fuzzy, karena akan saya kombinasikan keduanya menjadi domain riset saya. Yah, begitulah, namanya orang kepepet.

http://alumni.ugm.ac.id/simponi/?page=adir_prf&niu=103361

Mungkin kalau dipikir-pikir aneh juga seorang insinyur mesin, mengambil jenjang tertinggi bidang informatika. Banyak juga yang seperti itu kok, Rano Karno juga, insinyur mesin sekarang jadi plt walikota .. (itu kan insinyurnya di film he he .. 🙂 ).

Pareto Front Optimal

Belajar sesuatu terkadang lebih mudah dengan langsung mempraktekannya. Kata pepatah experience is the best teacher. Matlab menyediakan fasilitas help baik yang terselip di programmnya atau di situs resminya, www.mathworks.com.

Buka matlab, buat fungsi objective yang akan diminimisasi. File – New – Function, atau saya lebih suka langsung mengetik di command window nama M-file yang akan saya buat >>edit simple_multi. Tekan enter ketika Matlab mengkonfirmasi bahwa M-file yang dimaksud tidak ada dan apakah kita akan membuatnya.

Ada dua fungsi di dalam satu fungsi pada M-file di atas. Tugasnya adalah mencari nilai X yang membuat dua fungsi itu minimum. Tidak ditentukan di awal bobot antara fungsi 1 dan fungsi 2 karena kalau bobotnya sudah ditentukan tentu saja langsung bisa ketemu jawabannya. Bobot yang kita gunakan bobot standar yang jika dijumlahkan = 1, misalnya w1=0.3 dan w2=0.7. Ikuti saja instruksi dari www.mathworks.com untuk memperoleh nilai x beserta bobotnya.

  • F = simple_multi(t);
  • t = linspace(-0.5,1.5);
  • plot(t,F, ‘LineWidth’ ,2)
  • hold on
  • plot([0,0],[0,8], ‘g–‘ );
  • plot([1,1],[0,8], ‘g–‘ );
  • plot([0,1],[1,6], ‘k.’ , ‘MarkerSize’ ,15);
  • text(-0.25,1.5, ‘Minimum(f_1(x))’ )
  • text(.75,5.5, ‘Minimum(f_2(x))’ )
  • hold off
  • legend( ‘f_1(x)’ , ‘f_2(x)’ )
  • xlabel({‘x’ ; ‘Tradeoff region between the green lines’ })
  • edit pickindex
  • k = 1;
  • [min1,minfn1] = fminbnd(@(x)pickindex(x,k),-1,2);
  • k = 2;
  • [min2,minfn2] = fminbnd(@(x)pickindex(x,k),-1,2);
  • goal = [minfn1,minfn2];
  • nf = 2;
  • N = 50;
  • onen = 1/N;
  • x = zeros(N+1,1);
  • f = zeros(N+1,nf);
  • fun = @simple_multi;
  • x0 = 0.5;
  • for r = 0:N
  • t = onen*r; % 0 through 1
  • weight = [t,1-t];
  • [x(r+1,:),f(r+1,:)] = fgoalattain(fun,x0,goal,weight, …
  • [],[],[],[],[],[],[]);
  • End

Grafik pertama berisi grafik dua fungsi objective yang akan dioptimasi:

Kita harus mengkompromikan antara f1 dan f2 karena ketika f1 ke arah minimum, fungsi f2 naik nilainya. Pareto menggunakan prinsip nondominant dimana tidak boleh ada yg dominan antara f1 dan f2. Perhatikan grafik kedua dari instruksi di atas:

Grafik di atas adalah sebaran beberapa komposisi bobot w1 dan w2 terhadap kedua fungsi objective. Titik2 itu membentuk garis lengkungan yang menggambarkan nondominant. Titik terbaiknya dapat dilihat dari panduan di link ini, perhatikan gambarnya.

Mengetahui Id Scopus Beserta H-Index

Salah satu tri darma perguruan tinggi adalah penelitian selain pengajaran dan pengabdian kepada masyarakat (lanjutan tulisan yg lalu). Terkejut juga ketika membuka kembali laman penelitian dikti (www.simlitabmas.dikti.go.id) yang tiba-tiba saat login dosen muncul kolom isian id scopus beserta h-index yang dimiliki. Saya hanya menduga mungkin pemerintah mulai mengarahkan dosen menjadi peneliti setelah terpisahnya kemendikbud menjadi kementerian pendidikan dan kementerian ristek – pendidikan tinggi. Sebelumnya memang muncul di sosial media berita ranking ilmuwan-ilmuwan Indonesia yang terindex scopus, yang dapat dilihat di link berikut ini.

Tampak nama, institution, h-index, dan citations. Pertanyaannya adalah dari mana memperoleh informasi tersebut? Dikti memberikan kolom isian di simlitabmas bahkan tanpa memberi penjelasan bagaimana menemukannya. Di google ada beberapa situs yang menjelaskan dengan baik, tapi sayangnya itu dari negara tetangga malaysia di link ini. Berikut langkah untuk memperolehnya:

  • Langkah pertama untuk memperoleh nomor identitas di scopus adalah mempublikasi paper yang terindeks di scopus. Tidak harus menjadi peneliti utama, co-author bisa langsung mendapat nomor ID. Tidak ada cara lain. (kalo ada cara lain, kasih tahu ya ..)
  • Buka situs scopus (www.scopus.com), dan klik Author search, ketik nama belakang Anda (family name) dilanjutkan dengan menekan simbol kaca pembesar (search). Untuk institusi yang tidak berlangganan scopus, sepertinya hanya bisa melihat Author saja. Ketika muncul peringatan untuk mendaftar/register scopus, di bawah ada link berwarna biru dengan tulisan “author preview” yang bisa diklik dan dilanjutkan dengan searching lewat nama Author.

  • Tunggu beberapa saat, jika tidak muncul memang nama Anda tidak ada, segera membuat publikasi ilmiah yang terindeks di level internasional, misalnya scopus, thomson, google scholar, dll. Jika terindeks maka akan muncul nama anda di scopus, thomson, google scholar, dan indexer lainnya. Untuk saat ini sepertinya dikti masih memakai Scopus, mungkin indexer yg lain segera menyusul.

  • Setelah muncul beberapa nama, cari nama yang sesuai dengan afiliasi dan paper-paper yang telah dipublish. Nama di atas saya itu Prof. Eko Handayanto dari Malang (nomor 71 di list). Di sini saya memakai bendera Asian Institute of Technology (AIT) Thailand setelah sebelumnya Islam 45 university karena memang saya sedang belajar di sana, juga alasan-alasan lain yg tidak dapat saya jelaskan di sini. Setelah itu klik nama Anda di kolom paling kiri.

  • Di sana tampak nama, institusi (affiliation), Author ID, serta h-index. Jika ingin melihat grafik h-index, bisa dengan menekan view h-graph. Untuk perhitungan lebih detil dapat disearching di google, atau menunggu postingan saya berikutnya. Maaf ya Prof. E. Handayanto, ijin menampilkan nama Anda di sini ya, semoga bisa seperti Anda.

  • Setelah itu isi di kolom simlitabmas ID Author saya di scopus dengan skor index yang baru satu.

Update:  7 Mei 2015

Ternyata kalau tidak login scopus tidak bisa dijalankancara di atas ya. Ok kita coba tanpa login. masuk ke http://www.scopus.com kemudian klik Author Preview.

Jika saya masukkan nama saya, akan muncul tulisan-tulisan saya, dan karena saya penulis utama, nama saya bisa diklik untuk melihat h-indexnya.

scopus-rahmadya

Sementara, untuk co-author saya, misalnya Samsiana. Tampak nama samsiana tidak bisa diklik, kemungkinan besar h-index masih nol. untuk mengisi id scopus bisa melihat di bawah (saya pake mozilla) untuk mengetahui nomor id scopus berikut ini:

scopus-rahmadya

Particle Swarm Optimization (PSO) – dengan Octave

Tulisan ini merupakan lanjutan dari tulisan sebelumnya yang menggunakan Matlab sebagai medianya. Ketika membuka Octave pertama kali, ada dua pilihan yaitu mode Command Line Interface (CLI) atau Graphical User Interface (GUI). Kita pilih yang mudah saja yaitu GUI. Tampak tampilan yang mirip dengan matlab. Untuk yang ingin menginstallnya, baca postingan saya yang lalu.

Seperti pada Matlab, Octave juga membutuhkan direktori kerja dimana M-file yang telah kita buat berada. Di sini saya harus menempatkan dua file yaitu file algoritma PSO, simplepso.m dan fungsi2.m yang merupakan fungsi tujuan (objective function) yang akan dioptimalkan.

Tampak hasil optimasi untuk 4 iterasi dengan fungsi pause yang saya sisipkan untuk melihat perjalanan program tiap operasi. Di sini sedikit berbeda, ketika Octave menjumpai fungsi pause ternyata ada pesan agar kita menekan huruf f yang artinya forward (maju).

Grafik di atas merupakan hasil plot yang kecanggihannya ga jauh beda dengan Matlab. Harga Octave pun tidak terlalu mahal, hanya Rp. 0,- alias gratis, dibanding harga lisensi Matlab versi stand alonenya (individual price) sekitar Rp. 34 juta dengan harga 1 dollar yang saat ini melambung Rp. 13.000,-.

Particle Swarm Optimization (PSO)

PSO jika diterjemahkan berarti optimasi segerombolan partikel. Partikel di sini adalah makhluk hidup seperti burung, ikan, atau lebah yang sedang mencari makanan. Mengapa mengikuti prinsip pergerakan segerombolah makhluk-makhluk tersebut? Jawabannya sederhana, karena makhluk-makhluk tersebut berhasil menemukan makanannya. PSO pertama kali dicetuskan oleh kennedy dan Eberhart pada tahun 1995 yang membahas mengenai perilaku kerumunan makhluk hidup.

Menurut beberapa paper, misalnya Sathya, yang melakukan optimasi terhadap segmentasi gambar, PSO memiliki beberapa kelebihan di antaranya:

  • Mudah diimplementasikan dan hanya sedikit parameter yang dibutuhkan.
  • Tidak ada evolusi pada operatornya, misalnya mutasi dan crossover pada Genetic Algorithms (GAs).
  • Di GAs kromosom membagi informasi sehingga pergerakan mengikuti group-nya sendiri, berbeda dengan PSO yang berkelompak, dan menurut Sathya PSO lebih robust. Sepertinya saya kurang setuju dengan pendapat yang ini, apa boleh buat kita rujuk saja.
  • PSO lebih efisien karena membutuhkan sedikit komputasi.
  • Dibanding GAs dan metode heuristik lainnya, PSO lebih fleksibel dalam menjaga keseimbangan antara pencarian global dan lokal terhadap search space-nya.

Salah satu point menarik yang dibahas oleh kennedi et al. adalah masalah collision karena jika setiap partikel menganggap ada partikel lain yang lebih “optimum” tentu saja dia akan mengarah ke sana dan terjadi tuburukan/collision. Tetapi kenyataannya tidak ada tabrakan saat burung terbang, ikan berenang, lebah menari-nari dan sebagainya.

Untuk menerapkan algoritma PSO, di sini kita coba dengan menggunakan matlab atau octave. Kita coba terlebih dahulu dengan matlab. Sebagai referensi, Anda dapat mendownload materi budi santoso dari ITS di link berikut, kemudian coba jalankan kode yang ada di dalamnya. Di sana dijelaskan dua jenis PSO dengan dan tanpa inersia. Agar lebih mudah memahami alur instruksi programnya, di bawah instruksi yang akan saya selidiki biasanya saya sisipkan instruksi pause dan titik kemo di belakang kode yang dibuat saya hilangkan titik koma-nya agar muncul di layar command window. Saya coba jalankan dengan jumlah partikel 3 dan iterasi maksimum 4.

Variabel v,x,f yang menyatakan nilai awal kecepatan, swarm, dan nilai fitness-nya dimunculkan dalam variabel yang saya lingkari di atas. Untuk menampilkan nilai minimum minftot saya hapus titik komanya agar muncul di command window ketika berhenti sejenak di tiap iterasi karena instruksi pause yang saya sisipkan. Hasilnya tampak di bawah ini dimana fitness yang terbaik adalah pada swarm ketiga (34.8627) dengan swarm 105.9045. Ini tentu saja masih belum optimal karena masih iterasi pertama.

Setelah iterasi keempat dijalankan dengan menekan sembarang tombol untuk melanjutkan akibat instruksi pause tersebut diperoleh grafik dan hasil akhir. Kita coba dengan octave, di tulisan selanjutnya

Octave – Matlab Versi Gratis

Lanjutan postingan sebelumnya yang kurang memuaskan nih, kita coba selain scilab. Silahkan donlot dari situs resminya, biar aman dari virus, sesuaikan dengan sistem operasi yang anda miliki.

Ada yang versi installer, ada yang portable, untuk lebih lengkap saya coba versi intaller saja (sekitar ratusan Mb).

Seperti biasa, khusus pemula klik saja next terus dan pilih yang default. Tunggu sampai proses instalasi selesai. Lisensinya berbasis GNU, apa itu GNU? Sebenarnya GNU itu kalo dibalik UNG dan kalo dibaca mirip UNIX kan? Sebenarnya UNIX itu rencananya open source, tetapi ditelikung sama vendor jadi berbayar, akhirnya rombongan penggemar open source “beraksi” dengan mengembangkan sejenis UNIX dengan nama UNG yang open source, hingga terciptalah Linux .. katanya. Eh selesai .. instalnya.

Coba dijalankan saja. Test dengan fungsi-fungsi dasarnya, apakah sama dengan matlab? Ternyata tampilan prosesnya agak jadul juga (muncul console window beberapa detik). Tampilannya, mirip-mirip juga sih dengan Scilab dan Matlab.

Ok, fungsi matrix dasar berfungsi dan sama dengan Scilab. Bagaimana dengan programmingnya? Pertanyaan yang sama dengan pembahasan Scilab diawal tulisan. Buka/Open direktori kerja .. kok agak lama ya prosesnya. Sebelumnya saya membuat program dengan bahasa Matlab sebagai berikut:

function y=latih(x)

y=x*2

end

Disimpan dengan nama “latih.m”, oke kita coba jalankan dengan Octave.

>> latih(3)

y = 6

ans = 6

Wow .. dapat dijalankan. Sepertinya octave lebih menarik dari Scilab. Bagaimana untuk program lainnya? Kita coba saja fungsi M-file yang ada di matlab, misalnya fungsi norm yang menghitung normal euclidean (jarak) antara satu object dengan lainnya. Yah .. ternyata fungsi norm ada juga di octave.

Ok, berhubung ada yang bertanya mengenai Fuzzy C-Means (FCM) akan kita coba menjalankan fungsi FCM Matlab di octave .. Hmmm mudah-mudahan berhasil. Mula-Mula kita harus latihan dulu membaca listing code matlab. Fungsi fcm di matlab kelihatannya sederhana tetapi dia memanggil banyak sekali fungsi-fungsi yaitu:

Copy saja seluruh file itu di direktori kerja Anda. Sebenarnya ketika kita menjalankan fungsi fcm di octave, dia akan memberikan pesan error di line tertentu, telusuri saja maka Anda akan menemukan fungsi lainnya yaitu distfcm, initfcm, dst. Ok .. jalankan sesuai instruksi pada help fcm.

  • data = rand(100,2);
  • [center,U,obj_fcn] = fcm(data,2);

Ketemu dah pusat clusternya:

  • >> center
  • center =
  • 0.59526 0.66670
  • 0.35972 0.27357

Octave

Mantap .. FCM dapat berjalan di octave .. Bagaimana dengan Jaringan Syaraf Tiruan? Fuzzy? Coba saja, ga dilarang kok .. Selamat mencoba dan menikmati software Octave yang open source dan gratis dengan bahasa Matlab.

Scilab – Matlab Versi Gratis

Matlab yang merupakan perkembangan lebih lanjut dari bahasa komputasi Fortran mulai banyak diminati oleh peneliti karena kemudahannya. Akan tetapi karena harga lisensinya yang mahal, membuat beberapa penggemar open source merakit bahasa yang memiliki struktur bahasa yang serupa dengan matlab, salah satunya adalah Scilab.

Selain Scilab, dijumpai juga Octave yang telah banyak dimanfaatkan khalayak untuk melakukan perhitungan dengan biaya nol, alias gratis. Cara pembuatan matrix dan pengoperasian fungsi aritmatika juga tidak jauh berbeda.

Tampilannya mirip matlab tetapi sederhana, tanpa adanya toolbox-toolbox. Bagaimana untuk programmingnya? Ternyata ribet juga, karena sintax yang beda banget sama matlab. File extensi untuk programmingnya pun *.sci berbeda dengan matlab yang *.m. Okelah, coba yang lain.

Memahami Function Matlab

Kalo kita searching internet, bidang informatika ternyata banyak cabangnya dari yang cenderung ke hardware hingga yang cenderung ke software. Jika kita menjumpai seseorang dengan gelar S.Kom kita tidak bisa memastikan yang bersangkutan bisa mengutak-atik jaringan, merancang software, atau bidang-bidang spesifik lainnya. Apalagi jika gelarnya M.Kom atau Ph.D lebih spesifik lagi bidangnya.

Beberapa peneliti ingin mengetahui atau membandingkan dua jenis metode, tentu saja dengan alat ukur yang adil, dimana tidak membandingkan dua metode dengan dua bahasa yang berbeda. Oiya, beberapa literatur membedakan metode dengan algoritma, walaupun ada juga yang menganggapnya sama. Untuk memperbaiki kinerja suatu metode, beberapa peneliti menggunakan bahasa yang mudah, yaitu Matlab. Bahasa ini sulit dibeli oleh individu, dan biasanya institusi yang membelinya karena mahal. Belum lagi kontroversi dari sisi pendidikan dimana Matlab dituduh tidak melatih siswa untuk sungguh-sungguh belajar programming. Banyak pertanyaan-pertanyaan muncul mengenai kode bahasa matlab yang kebanyakan dalam bentuk function dan toolbox.

Berbeda dengan toolbox lain seperti WEKA, SPSS, dan sejenisnya yang melakukan proses data mining dengan menyembunyikan source code, Matlab sebenarnya menunjukan kode yang digunakannya. Jadi jika kita diminta menelusuri algoritmnya, tinggal buka saja M-file yang digunakan. Misalnya kita akan mengkluster dengan Fuzzy C-Means (FCM), secara sederhana kita dapat mencari kluster secara langsung baik lewat GUI atau function. Coba buka kode yang ada dengan mengetik edit fcm di command window. Jika muncul pesan, klik saja Yes.

Untuk bisa membaca kode tersebut, sedikit diperlukan “usaha”. Apalagi jika belum pernah sekalipun belajar bahasa pemrograman. Jika tidak pernah, maka yang disalahkan adalah institusi tempat mahasiswa belajar informatika, karena salah satu dasar seluruh jenis kurikulum informatika (TI, SI, SK, ILKOM) pasti belajar dasar-dasar pemrograman. Di tulisan yang lalu, saya menyinggung fungsi objective FCM. Nah dimanakah letak fungsi objective itu di function matlab?

Jika Anda teliti ternyata fungsi fcm memanggil fungsi stepfcm, maka buka lagi fungsi tersebut dengan mengetik edit stepfcm. Di situ dengan jelas fungsi yang dalam bentuk matematisnya adalah sigma.

Ternyata ada juga fungsi distfcm, ok. Buka saja dan pelajari lagi. Dan untungnya kita tidak terlalu pusing-pusing menerjemahkan karena ada baris komentar yang diawali dengan simbol % yang fungsinya menjelaskan satu line code.

Jika Anda ingin membuat dalam bahasa pemrograman open source, bisa menerapkannya di octave, scilab, dan sejenisnya yang dapat diunduh gratis dari internet. Ok, semoga bermanfaat.

Prediksi dengan Matlab

Prediksi adalah memperikiran hasil yang akan datang berdasarkan kondisi terkini. Biasanya dipergunakan untuk memperkirakan kejadian di waktu yang akan datang, misalnya harga saham, bencana, dan sebagainya. Terkadang kita memprediksi dari rentetan beberapa data seperti harga saham, komposisi kimia dan sebagainya. Untuk matlab terbaru sudah tersedia fasilitas GUI, tetapi versi yang lama dapat menggunakan toolbox neural network fitting tool.

Sebagai contoh time series dari 12 data, kita akan melatih NNs dengan data tersebit dimana dua kolom pertama sebagai data training dan satu kolom terakhir sebagai target (t+1). Buka GUI NNs Fitting Tool lewat jendela start atau dengan mengetik nftool di command window.

Sebelumnya masukan terlebih dahulu data dan targetnya di workspace karena akan kita gunakan nanti. Klik Next dilanjutkan dengan memasukan data dan target. Pastikan tombol Next muncul, jika tidak arahkan option button di rows.

Tambahkan Hidden Neuron seoptimal mungkin, di sini saya menggunakan nilai default yang tidak terlalu banyak, 20. Teruskan hingga proses pelatihan dan jangan lupa menyimpan hasilnya.

Terus saja menekan Next hingga proses pelatihan selesai. Jangan lupa menyimpan hasil pelatihan, misalnya net1. Setelah itu ujilah dengan menjalankan hasil pelatihan NNs tersebut. Untuk menguji hasil training, simulasikan saja net1 dengan data pelatihan.

Sepertinya ada empat data yang error dari 12 data yang dilatih. Perbaiki dengan menambah hidden neuron dan jumlah data untuk pelatihan. Untuk memprediksi, masukan dua data berurutan untuk mengetahui data prediksinya, misalnya [18980 18990] yang akan menghasilkan.

Cek, apakah benar perkiraan ketiga 19032? Waulahu a’lam, namanya saja prediksi.