Selalu Bersama


Penuh kasih sayang disetiap waktu

Dimasa-masa bahagia kita selalu bersama menikmati dunia.
Dimasa-masa nestapa kita tetap sama-sama selalu berdoa.
Derai-derai air mata mu membuat ku lebih-lebih sayang padamu.
Derai-derai gelak tawamu membuat ku lebih-lebih cinta padamu.
Dimasa kapanpun juga ku ingin tetap bersama dengan kekasihku yang setia.
Dimasa kapanpun nanti ku ingin terus begini cinta setia abadi. (Amin.. :) )

Abang <–> SayangQ

I Love My Wife Dwi Yunitasari

Tugas dulu? apa Ujian dulu?


Kalau mau ngelakuin segala sesuatu, klo bisa dikerjain sekarang, kerjain jangan banyak perhitungan. Karena bakal sama2 nemuin kendala yang sama karena pekerjaan yang mau kita lakuin sama aja. Malah kita rugi waktu hanya memikirkan ini atau itu…hadehh..(pengalaman). kalo kita kerjain rencana dengan segera dan nemuin kendala dengan cepat maka kita masih banyak waktu buat mengatasi kendala tersebut dan mengevaluasi apa tindakan yg harus kita lakuin lg. (selesai mah g tau jg yang penting usaha..hehe) :))

(I Love My Wife Dwi Yunitasari Quotes)

K-Nearest Neighbor


K-Nearest Neighbor merupakan salah satu metode yang digunakan dalam klasifikasi. Prinsip kerja KNN adalah dengan mengelompokkan data baru berdasarkan jarak ke beberapa data k tetangga terdekat (neighbor) dalam data pelatihan. Nilai k yang terbaik untuk algoritma ini tergantung pada data, secara umum nilai k yang tinggi akan mengurangi efek noise pada klasifikasi, tetapi membuat batasan antara setiap klasifikasi menjadi lebih kabur. Teknik cross validasi digunakan untuk mencari nilai k yang optimal dalam mencari parameter terbaik dalam sebuah model. Jarak Euclidean menurut McAndrew (2004) digunakan untuk menghitung jarak antara dua vektor yang berfungsi menguji ukuran yang bisa digunakan sebagai interpretasi kedekatan jarak antara dua obyek yang direpresentasikan dalam persamaan.

Klasifikasi dengan K-Nearest Neighbor Classifier

      K-Nearest Neighbor adalah supervised learning algorithm dimana sebuah objek diklasifikasikan berdasarkan kelas mayoritas dari k buah tetangga terdekatnya. Klasifikasi memanfaatkan mekanisme voting dari k buah objek terdekat dan bila hasil voting seri, maka label untuk objek akan dipilih secara acak.

     K-Nearest Neighbor berdasarkan konsep ‘learning by analogy’. Data learning dideskripsikan dengan atribut numerik n-dimensi. Tiap data learning merepresentasikan sebuah titik dalam ruang n-dimensi. Jika sebuah data query yang labelnya tidak diketahui diinputkan, maka K-Nearest Neighbor akan mencari k buah data learning yang jaraknya paling dekat dengan data query dalam ruang n-dimensi. Jarak antara data query dengan data learning dihitung dengan cara mengukur jarak antara titik yang merepresentasikan data query dengan semua titik yang merepresentasikan data learning dengan rumus Euclidean Distance.

Diberikan 2 buah titik P dan Q dalam sebuah ruang vektor n-dimensi dengan P(p1, p2,…, pn) dan Q(q1, q2,…,qn), maka jarak antara P dan Q dapat diukur dengan menggunakan persamaan Euclidean Distance sebagai berikut:

           1

dimana P dan Q adalah titik pada ruang vektor n dimensi sedangkan pi dan qi adalah besaran skalar untuk dimensi ke i dalam ruang vektor n dimensi.

     K buah data learning terdekat akan melakukan voting untuk menentukan label mayoritas. Label data query akan ditentukan berdasarkan label mayoritas dan jika ada lebih dari satu label mayoritas maka label data query dapat dipilih secara acak di antara label-label mayoritas yang ada.

Naive Bayes


Naïve Bayes Classifier merupakan sebuah metode klasifikasi yang berakar pada teorema Bayes. Ciri utama dari  Naïve Bayes Classifier ini adalah asumsi yang sangat kuat (naïf) akan independensi dari masing-masing kondisi/kejadian. Pada teorema Bayes, bila terdapat dua kejadian yang terpisah (misalkan A dan B), maka teorema Bayes dirumuskan sebagai berikut:

1

Teorema Bayes sering pula dikembangkan mengingat berlakunya hukum probabilitas total, menjadi seperti berikut:

2

dimana A1U A2 U … U An = S

Untuk menjelaskan teorema  Naïve Bayes,  perlu diketahui bahwa proses klasifikasi memerlukan sejumlah petunjuk untuk menentukan kelas apa yang cocok bagi sampel yang dianalisis tersebut. Karena itu, teorema Bayes di atas disesuaikan sebagai berikut:

3

Dimana variabel C merepresentasikan kelas, sementara variabel F1 … Fn  merepresentasikan karakteristik-karakteristik petunjuk yang dibutuhkan untuk melakukan klasifikasi. Maka rumus tersebut menjelaskan bahwa peluang masuknya sampel dengan karakteristik tertentu dalam kelas C (posterior) adalah peluang munculnya kelas C (sebelum masuknya sampel tersebut, seringkali disebut prior), dikali dengan peluang kemunculan karakteristik-karakteristik sampel pada kelas C (disebut juga likelihood), dibagi dengan peluang kemunculan karakteristik-karakteristik sampel secara global (disebut juga evidence).

Nilai evidence  selalu tetap untuk setiap kelas pada satu sampel. Nilai dari  Posterior  tersebut yang nantinya akan dibandingkan dengan nilai-nilai  Posterior  kelas lainnya untuk menentukan ke kelas apa suatu sampel akan diklasifikasikan.

Principle Component Analysis (PCA)


Sebuah citra 2D dengan dimensi b baris dan k kolom dapat direpresentasikan kedalam bentuk citra 1D dengan dimensi n (n=b*k). Dengan ekspresi lain dapat dituliskan sebagai , adalah ruang citra dengan dimensi n. Citra training yang digunakan sebanyak sampel dinyatakan dengan   yang diambil dari sebanyak   obyek/kelas yang dinyatakan dengan .  Total matrix scatter  (atau matrix covariance) didefinisikan sebagai berikut:

1

dimana   adalah rata-rata sampel citra yang diperoleh dengan merata-rata training citra . Dengan dekomposisi eigen, matrix covariance ini dapat didekomposisi menjadi:

                                                                                           2

 Dimana   adalah matrix eigenvector, dan  adalah is a diagonal matrix dari nilai eigen. Kemudian dipilih sejumlah   kolom eigenvector dari  matrix  yang berasosiasi dengan sejumlah m nilai eigen terbesar. Pemilihan eigenvector ini menghasilkan matrix transformasi atau matrix proyeksi , yang mana terdiri dari m kolom eigenvector terpilih yang biasa disebut juga dengan ‘eigen citra’. Berikutnya sebuah citra x (berdimensi n) dapat diekstraksi kedalam feature baru y (berdimensi m < n) dengan memproyeksikan x searah dengan  sebagai berikut:

                                                                                                  3

       Dengan kata lain metode PCA memproyeksikan ruang asal  kedalam ruang  baru yang berdimensi lebih rendah , yang mana sebanyak mungkin kandungan informasi asal tetap dipertahankan untuk tidak terlalu banyak hilang setelah dibawa ke dimensi feature yang lebih kecil. Disini terlihat reduksi feature yang signifikan dari n buah menjadi m buah yang tentunya akan sangat meringankan komputasi dalam proses pengenalan berikutnya

Total matrix scatter  diatas sesungguhnya adalah jumlahan dari matrix scatter dalam kelas (within-class scatter matrix)  dan  matrix scatter antar kelas (between-class scatter matrix)  yaitu, . Dengan demikian, kekurangan utama yang terlihat disini adalah bahwa dalam proses PCA ke dua matrix scatter ini termaksimalkan bersama-sama. Sesungguhnya yang diinginkan adalah hanya maksimalisasi  saja, sedangkan  sebisa mungkin diminimalkan agar anggota didalam kelas lebih terkumpul penyebarannya yang pada akhirnya dapat meningkatkan  keberhasilan pengenalan. Misalkan pada variasi perubahan iluminasi maupun skala dari citra yang terjadi pada obyek yang sama, dapat menyebabkan matrix scatter dalam kelas menjadi besar yang cukup menyulitkan dalam proses pengenalan. Bila ini terjadi, dengan demikian PCA akan menyertakan variasi iluminasi didalam eigencitra-nya, dan konsekuensinya PCA menjadi tidak handal terhadap variasi iluminasi yang terjadi pada obyek. Dengan metode LDA,  akan diminimisasi sehingga ekstrasi feature yang dihasilkan menjadi lebih handal terhadap variasi yang terjadi didalam kelas.

Citra Processing


Pengolahan citra digital merupakan proses pengolahan dan analisis yang banyak melibatkan persepsi visual, sehingga informasi sebagai output yang berbentuk citra. Citra digital bisa diperoleh secara otomatis dari sistem penangkap citra berupa kamera yang telah dilengkapi dengan alat dijitasi yang mengubah citra masukan berbentuk analog menjadi citra digital dan membentuk suatu matriks yang elemen-elemennya menyatakan nilai intensitas cahaya atau tingkat keabuan setiap piksel.

Implementasi algoritma Ant Coloni Optimization (ACO) Pada Persoalan Traveling Salesman Problem (TSP) Menggunakan Matlab


Skenario 1:

  • Kasus #1 = 6 kota
  • Kasus #2 = 7 kota
  • Kasus #3 = 8 kota
  • Kasus #4 = 9 kota
  • Kasus #5 = 10 kota
KASUS #1:
Best Rute = 1 3 5 2 4 6 1
Min-cost = 53
KASUS #2:
Best Rute = 1 4 3 7 2 6 5 1
Min-cost = 40
KASUS #3:
Best Rute = 1 7 8 2 6 3 5 4 1
Min-cost = 83
KASUS #4:
Best Rute = 1 5 7 3 9 6 2 4 8 1
Min-cost = 46
KASUS #5:
Best Rute = 1 6 2 7 4 9 3 5 10 8 1
Min-cost = 37

Deskripsi :

Skenario 1 pada soal kecil diatas merupakan best rute dan min-cost untuk masing kasus(1-5) dengan iterasi 100

Source code:

function [bestrute,mincost]=aco(d,iter,n_ants);
%input:
%d - matrik jarak ukuran n x n
%iter -jumlah iterasi (digunakan 200 iterasi)
%n_ants- jumlah semut (digunakan 50 ants)
m=n_ants;                  %jumlah semut
n=length(d);         %jumlah kota.
e=.5;                      %evaporation coefficient.
alpha=1;                   %pangkat untuk ants’ sight.
beta=3;                    %pangkat untuk trace’s effect.
for i=1:n                  %generating sight matrix.
for j=1:n
if d(i,j)==0
h(i,j)=0;
else
h(i,j)=1/d(i,j);%inverse distance
end
end
end
t=0.01*ones(n);            %tho awal,
el=.96;                    %coefficient of common cost elimination.
for i=1:iter
for i=1:m
app(i,1)=1;          %semua semut mulai dari kota 1
end
%rute semut
for i=1:m                  %untuk semua semut
mh=h;                      %matriks invers jarak
for j=1:n-1                 %simpul berikutnya
c=app(i,j);          %memilih satu kota
mh(:,c)=0;           %jika sdh dipilih maka inv distance=0
temp=(t(c,:).^beta).*(mh(c,:).^alpha)
%menghitung tho pheromone
s=(sum(temp))        %jumlah tho
p=(1/s).*temp;       %probabilitas
r=rand;
s=0;
for k=1:n            %banyaknya kota
s=s+p(k);
if r<=s
app(i,j+1)=k;
%penempatan semut i di simpul berikutnya
break
end
end
end
end
at=app;                    % hasil rute
at=horzcat(at,at(:,1));
% diakhir rute kembali ke kota 1
% menghitung cost
for i=1:m
s=0;
for j=1:n
s=s+d(at(i,j),at(i,j+1));
%menghitung jarak rute utk semua semut
end
f(i)=s;
end
cost=f;
f=f-el*min(f);             %eliminasi ongkos .
%update ruas dari rute terbaik
for i=1:m
for j=1:n
dt=1/f(i);           %inverse jarak total
t(at(i,j),at(i,j+1))=(1-e)*t(at(i,j),at(i,j+1))+dt;
%updating tau, dimana rute terbaik otomatis
%mendapat tambahan pheromone terbesar.
end
end
[mincost(i),number]=min(cost);
bestrute(i,:)=at(number,:);
iteration(i)=i;
end
bestrute=bestrute(end,:);

Multitheading dan Mutual Exclusion


Mutual exclusion (Mutex) adalah sebuah objek program yang dibuat sehingga beberapa program thread dapat berbagi sumber daya yang sama, seperti akses ke file. Mutual exclusion merupakan suatu kondisi dimana setiap sumber daya diberikan tepat pada satu proses pada suatu waktu.

Berdasarkan contoh program saat program dimulai, ia menciptakan mutex untuk diberikan sumber daya pada awal dengan meminta dari sistem dan sistem kembali nama unik atau ID. Setelah itu, setiap thread yang membutuhkan sumber daya yang harus menggunakan mutex untuk mengunci sumber dari thread lain sementara menggunakan sumber daya. Jika mutex sudah terkunci, sebuah thread yang membutuhkan sumber daya yang biasanya antri oleh sistem dan kemudian diberikan kontrol ketika mutex menjadi unlocked.

Pada output aplikasi Mutual Exclusion terdapat 5 thread dan proses penulisan file pada masing-masing thread dengan mengakses sumber daya file yang di shared.

Dapat dilihat pada outputnya 5 thread berproses bersamaan namun thread 0 ketika menulis file tidak berpengaruh pada thread 2,1,3,4 (output).

 

Listing  versi POSIX Thread dan dikompilasi dengan gcc :

mutex_example.cpp

#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>

#define NUM_THREADS 5

FILE  *shared_fd;    pthread_mutex_t      hFileMutex
bool  Use_Mutex;    
int ThreadFunction(int);

int main(int argc, char *argv[])
{
      int i;
      pthread_t hThread[NUM_THREADS];

      if(argc > 1) Use_Mutex = false;
      else Use_Mutex = true;

      if (Use_Mutex) {
            if (pthread_mutex_init(&hFileMutex, NULL)) {
                  fprintf(stderr, "pthread_mutex_init failed\n");
                  return -1;
            }
      }

      shared_fd = stdout;

      srand((unsigned)time(NULL));

      for (i=0; i < NUM_THREADS; ++i) {
            if (pthread_create(&hThread[i], 0, (void*(*)(void*)) ThreadFunction, (void *) i) < 0) {
                  fprintf(stderr, "pthread_create failed: %s\n", strerror(errno));
                  return -1;
            }
      }
      for (i=0; i < NUM_THREADS; ++i) {
            pthread_join(hThread[i], NULL);
      }
      fclose(shared_fd);

      return 1;
}
int ThreadFunction(int num)
{

      if (Use_Mutex)
            pthread_mutex_lock(&hFileMutex);
      fprintf(shared_fd, "I am thread %d.\n", num);
      fflush(shared_fd);

      usleep( 1000 );

      fprintf(shared_fd, "Thread %d is the very best.\n", num);
      fflush(shared_fd);

      usleep( 1000 );

      fprintf(shared_fd, "Thread %d is in control.\n", num);
      fflush(shared_fd);

      if (Use_Mutex)
            pthread_mutex_unlock(&hFileMutex);

      return 0;
}