Peramalan dengan Jaringan Syaraf Tiruan

Jaringan syaraf tiruan (jst) sering juga dijadikan sarana untuk meramalan. Berbeda dengan fitting yang mengandalkan variabel-variabel input, peramalan hanya mengandalkan data berdasarkan deretan waktu (time series). Dan seperti time series lainnya, jumlah data sangat menentukan kualitas peramalannya, walaupun dua data bisa meramalkan data ketiga tetapi tentu saja kalah akurat dibanding meramalkan data ke 1001 dari 1000 data.

Misal saya memiliki data tiga tahun, kemudian saya susun menjadi bentuk seperti ini dimana matriks berisi dua baris dengan baris pertama tahun pertama dan baris kedua tahun kedua. Sementara tahun ketiga saya jadikan target pelatihan.

Dengan membuka toolbox JST (ketik nntool di command window) kita rakit JST untuk dilatih dengan target pelatihan tahun ketiga:

Masukan variabel-variabel masukan dan target di jendela nntool. Buat JST dengan jumlah neuron sesuai keinginan, lakukan training.

Begitu pula JST-nya, buat saja dengan mengklik tombol ‘new’ di jendela network designer. Atau bisa juga menggunakan fungsi di command window tanpa toolbox (fungsi newff).

Jika sudah, dobel klik pada network1 untuk melakukan proses training. Pilih lagi input dan target datanya, lakukan simulasi, dan tunggu sesaat hingga proses pelatihan selesai.

Hasilnya jangan lupa disimpan untuk memprediksi tahun keempat. Bagaimana memprediksi tahun keempat? Gunakan saja tahun kedua dan tahun ketiga sebagai input, maka JST akan memprediksi tahun keempat berdasar pelatihan sebelumnya.

Kemudian lakukan simulasi dengan fungsi sim dari Matlab. Gunakan network1 yang telah di ekspor dari proses pelatihan sebelumnya. Gunakan kode berikut di command window, maka prediksi tahun keempat selesai, akurasi tentu saja bisa diuji jika Anda punya data tahun keempat yang sesungguhnya.

Tentu saja dua data untuk meramalkan data ketiga kurang baik, seperti halnya anda memprediksi kurs dollar terhadap rupiah hanya dengan dua data, karena belum tentu rupiah terus melemah, bisa saja menguat jika data pelatihannya banyak. Tetapi yang namanya ramalan ya belum tentu benar kan?

Membuka Model yang Tersimpan di ArcGIS

Memang kalau sudah bermain di level aplikasi, banyak keanehan-keanehan yang terjadi yang memang disebabkan oleh keterbatasan manusia dalam membuat suatu aplikasi. Tidak mungkin aplikasi dibentuk dengan sempurna. Hanya tuhanlah yang sempurna, begitu juga dengan aplikasi ArcGIS. Tidak mungkin bisa memuaskan semua penggunanya. Salah satu servis terbaru di ArcGIS yang sangat membantu para perancang untuk mempresentasikan hasil olahnya adalah “MODEL”. Di sini tiap proses direpresentasikan dalam bentuk block diagram. Setelah dibentuk, model bisa dijalankan dengan menekan tombol run.

Tetapi karena masih awam, sudah capek-capek membuat model ketika di-close, saya kesulitan memanggilnya karena sudah terbiasa dengan mendobel klik file-nya. Repotnya lagi, terkadang kita tidak tahu dimana lokasi filenya. Oiya, ArcGIS memiliki aturan, kita harus memasukan direktori kerja kita via Arc Catalog, di sanalah file-file kita tersimpan, yang secara default di folder “user”, C:\Users\toshiba064\Documents\ArcGIS. Untuk membukanya dapat dilakukan dengan cara membuka arc catalog, cari file yang disimpan.

Setelah itu, jangan klik “Open” karena model tidak terlihat, melainkan pilih “Edit”. Di situlah yang menurut saya anehnya, biasanya sih klik open seperti pada Matlab. Tampak proses reclassify, clip serta raster to polygon dengan weighted sum untuk menghasilkan nilai optimal. Apa itu? Ya belajar pelan-pelan dulu ArcGIS untuk optimasinya.

Simple Pareto Front dengan Matlab (Multiobjective)

Kalau dulu multi objective diselesaikan dengan memberi bobot terhadap tiap-tiap fungsi objektif atau dengan hierarki, saat ini teknik tersebut mulai ditinggalkan dan diganti dengan non-dominate objectif atau dikenal dengan istilah pareto, yang diusulkan pertama kali oleh pareto pada tahun 1896. Jadi kita tidak memaksakan memberi bobot terhadap fungsi-fungsi objektif dan memberikan range tertentu terhadap hasil optimasi. Range tersebut makin luas makin baik (wide spread). Misalnya penjelasan yang dapat dilihat di situs ini, kita coba jalankan dengan Matlab.

Ada dua fungsi objektif yang akan dicari nilai optimalnya (biasanya nilai minimum). Perhatikan dua grafik ini yang memiliki dua nilai minimum tergantung fungsi mana yang digunakan.

Untuk melakukan optimasi terhadap dua objektif fungsi di atas (fungsi garis merah dan garis biru). Sebelumnya buka matlab editor untuk membuat satu fungsi baru dengan mengetik di command window:

>>edit simple_multiobjective

Ternyata Matlab sudah membuatkan fungsi tersebut, sepertinya untuk demonstrasi optimasi multiobjektif. Untuk mengoptimasinya, fungsi yang digunakan di Matlab adalah gamultiobj. Ketik atau copas kode ini ke command window:

  • FitnessFunction = @simple_multiobjective;
  • numberOfVariables = 1;
  • [x,fval] = gamultiobj(FitnessFunction,numberOfVariables);

Di sini disebutkan jumlah variabel 1, yaitu x saja. Kemudian di sebelah kiri sama dengan ada x dan fval sebagai hasil dari optimasinya. Untuk melihat isinya dapat kita ketik di command window x dan fval tersebut. Apa hasilnya?

Hasilnya adalah matlab memberikan beberapa hasil optimasi (berupa range) kombinasi dari cenderung optimal di fungsi satu hingga ke optimal di fungsi dua. Ketik di command window untuk melihat grafiknya:

>> plot(fval(:,1),fval(:,2),’*’)

Hasilnya berupa grafik pareto dari nilai optimal dua fungsi tersebut. Di sini bobot bervariasi dari kecenderungan ke fval pertama hingga ke fval kedua. Fval adalah nilai optimal fungsi-fungsi fitness nya.

Bagaimana jika tiga fungsi objektif? Tentu saja kalau ingin divisualisasikan nanti berupa grafik tiga dimensi. Bagaimana jika empat objektif? Seperti disertasi saya, tentu saja sulit digambarkan. Matlab juga menyediakan visualisasi yang bagus (running ketika program berjalan) dengan memasukan kode di command windows sebagai berikut:

  • A = []; b = [];
  • Aeq = []; beq = [];
  • lb = -1.5;
  • ub = 0;
  • x = gamultiobj(FitnessFunction,numberOfVariables,A,b,Aeq,beq,lb,ub);
  • options = gaoptimset(‘PlotFcns’,{@gaplotpareto,@gaplotscorediversity});
  • gamultiobj(FitnessFunction,numberOfVariables,[],[],[],[],lb,ub,options);

 

Bikin Buku Lagi .. “Pemrograman Database dengan Matlab”

Menganggur saat bulan puasa ternyata enak juga buat menulis. Saat berada di “dunia” sendiri tiba-tiba adzan maghrib pertanda waktu berbuka puasa. Setelah berbuka, refresh lagi, dan siap meracik tulisan lagi. Setelah lebaran, jadilah satu buku “Pemrograman Basis Data dengan Matlab”. Belum tentu itu judulnya karena terkadang penerbit menyarankan untuk mengganti judul dengan judul yang menarik dari sisi pemasaran. Begitulah, harus terjadi kerjasama yang baik antara penulis dengan pemasaran, jika tidak, sudah dapat dipastikan buku tersebut tidak laku.

Sebenarnya buku yang sedang direview oleh penerbit (semoga lolos) tersebut berawal dari pertanyaan-pertanyaan di blog ini. Lalu muncul ide bagaimana jika dibuat dalam satu paket buku beserta contoh-contoh aplikasinya. Apalagi banyak yang masih sangsi bahwa Matlab bisa menghasilkan aplikasi yang terhubung dengan basis data seperti bahasa-bahasa yang lain seperti visual basic, java, dan bahasa pemrograman visual lainnya. Matlab selama ini dipuji karena tangguh di sisi komputasi. Bukan tangguh sih sebenarnya, tetapi mudah dan user friendly. Jadi jika bisa mengelola database, maka perancang bisa dengan baik menghubungkan komputasi teknis, soft computing, data mining, dengan basis data yang dimiliki. Database Management System (DBMS) yang dipilih adalah Microsoft Access sebagai perwakilan DBMS desktop dan MySQL untuk DBMS berbasis web. Sepertinya cukup karena keduanya merupakan DBMS yang paling banyak digunakan saat ini, terutama mahasiswa.

Untuk contoh aplikasi, dipilih kasus-kasus yang sering dijadikan tugas akhir (skripsi atau thessis) para mahasiswa yaitu data mining dengan clustering, enkripsi database, pengolahan citra, yang dirakit tentu saja dengan GUI. Tulisan diakhiri dengan lampiran-lampiran yaitu pembuatan executable program dan teori dasar struktur data di Matlab yang sangat penting karena proses perpindahan dari DBMS ke Matlab untuk diproses dan sebaliknya.

Seperti biasa, operasi dasar pada pemrograman basis data dipelajari yang dikenal dengan istilah CRUID (create, read, update, insert, dan delete). Pembuatan grafik setelah proses clustering dan pengolahan citra digital yang kemudian disimpan ke database dibahas dengan sederhana. Jika tombol “clustering” ditekan maka tiap record di database data langsung terupdate masuk kluster yang mana (kluster 0 atau 1). Tentu saja Anda bisa mengembangkan menjadi lebih dari dua kluster. Tanda tangan yang tadinya image kini dirubah menjadi biner (0 dan 1) yang bermanfaat untuk mengurangi kapasitas penyimpanan (dibandingkan penyimpanan dalam bentuk image utuh) yang biasanya diterapkan di perbankan.

Sepertinya pengolahan data dengan notepad atau excel yang bersifat offline dari database sudah mulai diganti dengan sistem yang online karena perubahan data terjadi secara cepat dengan jumlah yang besar (big data). Semoga buku seharga beberapa bungkus rokok tersebut segera terbit (whee lah …). Amiin.

Melanjutkan Riset yang Tertunda

Setelah hampir tiga bulan hilang dari peredaran karena libur kuliah, akhirnya sekarang mulai lagi bertarung mengerjakan disertasi yang sempat terhenti. Tadinya ingin masuk bulan berikutnya tetapi karena ada email bahwa pemesanan kamar kos kategori 2 sudah disetujui dan harus diambil maksimal minggu depan, mau tidak mau segera berangkat karena tipe kos ini merupakan idola semua mahasiswa AIT terutama yang sedang tesis atau disertasi mengingat bentuknya yang sangat private dan egois (karakter mahasiswa yang sedang nulis).

Banyak hal terjadi baik di Indonesia maupun di Thailand ketika mau berangkat. Beberapa hal yang mungkin bisa dijadikan masukan untuk pembaca yang mau berangkat ke Thailand:

  • Kartu Sim Card harus teregister. Berbeda dengan di Indonesia yang registrasi hanya dengan mengisi nama, no KTP dan alamat, si sini harus datang ke Simcard center dengan membawa kartu Identitas (id card/paspor). Agak ribet juga, walau bisa juga dengan online chat dgn webcam. Kita difoto dengan paspor.

  • Pesawat Air Asia mulai memberlakukan dengan ketat berat barang yang masuk ke Cabin. Jika di atas 7 kg, bakal kena charge .. waspadalah. Sepertinya petugas hanya mengincar yang membawa tas beroda, buktinya saya lolos dengan tas sanggul, walau lebih dari 7 kg.

  • Rupiah melemah terus terhadap dollar, walau mata uang tetangga2 juga ikut melemah. Berdampak terhadap harga-harga, terutama tiket pesawat.

Uang kiriman dikti belum turun .. kalo ini masalah khusus .. he he he.

Memetakan Landuse dari Satelite

Untuk mengetahui landuse suatu wilayah kita bisa memesan dari instansi baik swasta maupun pemerintah yang bertanggung jawab menyediakan data-data geografis suatu wilayah, di Indonesia kita mengenal bakosurtanal (www.bakosurtanal.go.id) yang berada di Bogor. Tetapi masalahnya data yang diberikan hanya membedakan secara global seperti bangunan, pertanian, dan sebagainya. Jika kita ingin mengetahui apakah suatu bangunan itu perumahan, rumah sakit, sekolah, atau yang lainnya mau tidak mau kita harus mencari tahu sendiri. Cara mudahnya adalah dengan bantuan google baik google search ataupun google earth. Untungnya ArcGIS sudah menyediakan layanan online tersebut di dalam softwarenya.

Pilih imagery atau Imagery with labels. Sepertinya yang kedua lebih jelas, karena ada labelnya. Zoom ke arah lokasi yang akan dituju, misalnya kota bekasi.

Isi nama yang jelas agar mudah dicari ketika akan kembali lagi ke lokasi tersebut.

Pilih proyeksi sesuai dengan lokasi agar dapat diintegrasikan dengan shapefile lainnya. Klik kanan di peta dan pilih Data Frame Properties. Ini merupakan hal penting, lihat tulisan sebelumnya.

Pilih UTM zona jabotabek, yaitu di daerah S (south), atau sesuai dengan negara Anda tinggal. Ingat !!! bekasi di bumi .. bukan di planet lain.

Tambahkan peta patokan untuk memetakan landuse pertama misalnya residential/perumahan. Jangan lupa simpan terlebih dahulu project Anda untuk jaga-jaga agar jika ada masalah, data tersimpan. Zoom ke arah lokasi yang ingin dilihat:

Mulai menambah satu shapefile baru untuk landuse type resident. Buat dengan format vektor titik (point vector). Cara yang dianjurkan adalah dengan menambah satu file baru di catalog dengan nama dan jenis tertentu.

Beri nama sesuai

Klik Edit untuk mengeset proyeksi sesuai dengan proyeksi basemap dan kawan-kawan. Jika sudah maka satu map baru berformat titik muncul di Table of contents pada layer Anda. Karena saya menggambar lokasi yang berpopulasi rendah, maka saya harus mencari di area yang bisa ditambah perumahan di lokasi tersebut, biasanya di pinggiran kota. Lihat tulisan sebelumnya tentang menggambar polyline jika ingin mengetahui bagaimana menggambar polyline.

Biasanya harus menekan shapefile yang akan diedit agar pilihan menggambar titik muncul.

Karena terlalu banyak jika satu rumah untuk satu titik, maka bisa diwakilkan beberapa rumah untuk satu titik, di sini saya ambil kira-kira sepuluh rumah atau satu blok.

Jangan lupa menghentikan proses editing jika sudah selesai, dilanjutkan dengan menekan tombol simpan ketika muncul pesan untuk menyimpan hasil editing. Edit dengan simbol yang Anda inginkan. Selamat mencoba ..

Digitalization dari Peta Manual

Terkadang instansi yang kita minta datanya hanya memiliki data cetakan biasa, sehingga untuk melakukan analisa diperlukan konversi ke data digital. Misalnya kita akan mendigitalisasi wilayah hutan di kota Bekasi dengan data hutan jawa barat. Scan peta manual tersebut dengan resolusi yang tinggi karena kita hanya menggunting pada wilayah tertentu saja yang kecil, misalnya kota bekasi.

Atau kalau mau enak gambarnya dicrop aja sebesar kota bekasi. Klik kanan di menu dan aktifkan menu georeferencing. Minimal dua pasangan titik bisa membuat referensi geografis dari gambar/image tersebut. Pasangan pertama merupakan titik gambar dan titik shapefile yang sudah terproyeksi, begitu juga pasangan titik kedua. Perlu dua titik karena jika hanya satu titik, Arcgis tidak sanggup mengakuratkan hasil karena ukuran/skala yang biasanya kacau.

Kalo sudah selesai maka buat shapefile baru dengan tipe polygon untuk membuat area ruang terbuka yang nantinya menjadi dasar dalam membuat analisa suitability.

Atur dulu proyeksinya samakan dengan proyeksi kota yang telah diset sebelumnya. Setelah itu mulai proses penggambaran. Lakukan proses menggambar polygon dengan mencontek dari peta cetak yang sudah digeoreferencing, hasilnya adalah data ruang terbuka yang berada tepat di kota bekasi (berwarna biru muda).

Membuat Peta Jalan dari Open Street Map

Data merupakan aset yang sangat berharga. Dengan mengolah data kita bisa memetik keuntungan dan manfaat dari data tersebut. Menyadari hal itu banyak orang yang butuh data mengeluarkan kocek yang besar untuk mendapatkan data. Akibatnya penyedia data terkadang merahasiakan data yang dimilikinya. Hal ini bisa menguntungkan bisa juga merugikan. Terlepas dari hal itu, karena data geografis menyangkut hajat hidup orang banyak, sangat dibutuhkan data yang dapat diakses oleh semua orang, salah satunya adalah peta jalan. Sebenarnya sudah banyak aplikasi baik desktop, web-based, atau android yang dapat mengakses peta jalan ini, tetapi peneliti membutuhkan peta tematik tertentu yang akan digunakan untuk analisa spasial. Ok, langsung saja buka ArcGis, dan tambahkan satu basemap dengan nama Open Street Map.

Cukup banyak data yang tersedia, baik topography peta satelit, laut, dan sebagainya. Di sini saya akan mencoba membuat peta jalan. Jika Anda telah memiliki peta jalan, dapat Anda tambahkan di ArcMap, jangan lupa samakan terlebih dahulu proyeksinya, lihat postingan sebelumnya. Data jalan sebenarnya bisa dibeli di Bakosurtanal untuk negara Indonesia, sayangnya berbayar (ada perpres nya). Akan tetapi beberapa blogger telah memiliki data tersebut dan dengan baik hati menshare. Masalahnya adalah datanya tidak Uptodate. Contohnya adalah kota Bekasi, tampak fly over yang mengarah ke sumarecon belum digambar, oleh karena itu saya akan mencoba menggambarnya.

Klik kanan pada layer Jalan – Edit Fiture – Start Editing. Jika belum muncul juga jendela Create fiture, klik editor, masuk ke Editing Windows dan klik Ceate features.

Dobel klik pada objek Jalan, yang merupakan objek polyline (garis/lengkungan). Ternyata ada sedikit masalah yaitu pesan berikut ketika selesai membuat satu polyline.

Sepertinya ArcMap tidak sanggup memetakan garis tersebut. Oleh karena itu kita kembali selidiki shapefile jalan yang telah kita proyeksikan sebelumnya. Ternyat koordinat belum ada ukurannya:

Lalu apa yang harus dilakukan? Tentu saja harus mengisi koordinat yang sesuai pada layer Jalan tersebut. Cara penyelesaian saya adalah dengan mengekspor fitur ke file lainnya dengan mengklik kanan layer Jalan – Data – Export Data, dan pilih this layer source data, isi nama file baru hasil export tersebut. Hasilnya harus seperti berikut ini dimana polyline baru berhasil ditambahkan, karena banyak harus yang saya tambahkan, capek dan membosankan, teruskan sendiri ya.

Mengatasi Problem Koordinat dan Proyeksi di ArcGIS

ArcMap adalah salah satu fasilitas yang tersedia di ArcGis. Fungsinya mirip ArcView yang merupakan versi lawas dari ArcGis. Ketika menambah satu layer di ArcMap terkadang muncul pesan berikut ini:

Atau mungkin pesan lain yang mengatakan koordinat belum teridentifikasi dengan jelas. Tentu saja kita bisa mengklik ‘OK’ dan peta tampak di ArcMap. Masalah akan muncul jika ArcMap kita terdiri dari lebih dari satu shapefile yang beda koordinat dan proyeksinya. Untuk pesan di atas kita diminta menyamakan proyeksi shapefile tersebut. Cara yang terstruktur adalah dengan membuka Arc Catalog, dan cari file yang akan disamakan proyeksinya tersebut.

Klik kanan dan masuk ke propertis. Samakan proyeksinya dengan layer BaseMap seperti pada gambar di atas. Apa itu BaseMap, akan dijelaskan pada postingan berikutnya. Samakan seperti pada gambar di bawah ini:

Di sini saya menggunakan WGS 1984 UTM Zone 48S yang merupakan wilayah jabotabek. Jika berhasil, maka Anda akan melihat dua layer yang sekarang memiliki proyeksi yang sama. Atur susunan layer karena jika dua poligon saling berimpit, salah satunya akan tertutup. Akhirnya tampak seperti gambar di bawah ini:

Selamat mencoba, atau mungkin ada teknik lain yang lebih ok, tolong dishare.

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’)