1307100008

Kata ku disini semuaa…

Pembangkitan Data

Diarsipkan di bawah: 10 sept 2009, kamis — lialio at 8:16 pm on Minggu, September 13, 2009

kamis, tanggal 10 september 2009 adalah tepat 1 hari menjelang 8 tahun tragedi bom WTC. hari dimana 4 pesawat boing 737 dibajak, dan 2 pesawatnya di arahkan ke gedung WTC distrik Manhattan.. tapi, hari itu apa yang ku rasakan? datar… kejadian itu tak membekas sekalipun di ingatanku. kehidupanku hanya berkisar pada kuliah, BEM, mroyek… yaaah,,, wateper lah… tapi, hari-hari harus ku lalui dengan indah meskipun hasrat belajar kiat hari kian terkikis karena homesick..

seperti biasa, dimana ada simulasi, di situ pasti ada blog.. blog yag menjadi tugas rutin ang diberikan oleh pak Dwi dan diperiksa oleh dua asdosnya.. mas senja dan mbak lutfi…

mas senja… dilihat dari namanya—mungkin dilahirkan ketika senja tiba atau apalah,, dan penulis sendiri juga kurang mengetahui hal ini.. dan mbak lutfi.. awal perkenalan penulis dengan mbak lutfi ketika ada LK I salah satu omek di ITS.. cukup menegangkan sih, karena perempuan satu ini memiliki pandangan mata yang cukup tajam dan tipikal yang orang yang bicaranya to the poin..  perkenalan dengan asdos bisa dikupkan sampai disini, karena tujuan penulisan utama blog ini adalah meng-update blog dengan tugas mingguan..

simulasi kamis ini diisi dengan menjelaskan tentang apa itu Pembagian Bilangan Acak–Pseudo Random  Generation. Pseudo-atau semu,  dilihat dari artinya menurut penulis adalah  merupakan benda yang sebenarnya tak ada tapi diumpamakan ada. enth kenapa, tapi pastinya setiap orang punya persepsi sendiri2. penerapannya langsung

misal : a=2, m=5, dan x0 = 3, maka

x1 = 2 (3)   modulo 5=1                         x2 = 2 (1)   modulo 5=2

x3 = 2 (2)   modulo 5=4                        x4 = 2  (4)   m0dulo 5=3

jika bilangan komputer hanya mengenal biner, 0, 1, dan 2  maka

1=1        11=3        111=7      ……..1 pangkat 7 = 2 pangkat 6 -1   adalah bilangan trebesar yang dapat diproses komputer. diluar itu, adalah komputer diluar kemampuannya bekerja.

tentunya komputer ini adalah mesin yang sangat pintar dalam membangkitkan data distribusi statistika.. dalam kesempatan kali ini, pek dwi memberi tugas membangkitkan data berdistribusi uniform (a, b), exponendial (λ), norma (μ,σ²), lognormal, wellbul, t-student, dan Fisher. untuk memastikan dapat dicek dengan cara membuat plot ataupun melakukan pengujian. berikut jika data dibangkitkan dengan distribusi yang telah disebutkan di atas (menggunakan pascal-delphi).

Interface

Uses util, tipe;

{Type

tipe1 = array[1..5] of double;}

Var

tipe11 : tipe1;

{ 1 } Function Uniform (a,b : double) : double;

{ 2 } Function Eksponensial (beta : double) : double;

{ 3 } Function Weibull (alfa,beta: double) : double;

{ 4a} Procedure Normal (mean,variance : double ; Var z1,z2 : double);

{ 4b} procedure lognormal (mean,varr : double; Var zln1,zln2 : double);

{ 5 } Function Acak_Diskrit_Sebarang (n : longint ; x,probd : tipe1) : double;

{6 } Function tdistribution(m:integer):double;

Implementation

Function Uniform (a,b : double) : double;

Var     u : double;

Begin

u := random;

Uniform := (b-a) * u + a;

End;

Function Eksponensial (beta : double) : double;

Var     u : double;

Begin

u := random;

Eksponensial := -beta * ln(u);

End;

Function Weibull (alfa,beta: double) : double;

Var      u,z : double;

Begin

u := random;

z := -ln(u);

Weibull := beta * exp (ln(z)/alfa);

End;


Procedure Normal (mean,variance : double ; Var z1,z2 : double);

Var       u1,u2,v1,v2,w,y,x1,x2 : double;

Begin

Repeat

u1 := random;

u2 := random;

v1 := 2 * u1 - 1;

v2 := 2 * u2 - 1;

w := sqr(v1) + sqr(v2);

if w <= 1 then

begin

y := sqrt ((-2*ln(w))/w);

x1 := v1 * y;

x2 := v2 * y;

z1 := sqrt (variance) * x1 + mean;

z2 := sqrt (variance) * x2 + mean;

end

Until w <= 1;

End;

Function Acak_Diskrit_Sebarang (n : longint ; x,probd : tipe1) : double;

Var      u : double;

i : longint;

Begin

u := random;

for i:=1 to n-1 do

if u <= probd[i] then

begin

Acak_Diskrit_Sebarang := x[i];

exit

end;

Acak_Diskrit_Sebarang := x[i];

End;

procedure lognormal (mean,varr : double;

Var  zln1,zln2 : double);

Var y1, y2 : double;

begin

Normal (mean,varr,y1,y2);

zln1 := exp(y1);

zln2 := exp(y2);

end;

function tdistribution(m:integer):double;

{ created :

based on Principles of Random Variate Generation

by John Dagpunar, 1988

published by Claredon Press - OXFORD

please check if any other theory of t-distribution }

Label r2;

Var v,x,r,s,c,a,f,g,mm : real;

begin

mm:=0;

if m < 1 then

begin

writeln(’impermissible degrees of freedom.’);

halt;

end;

if (m <> mm) then

begin

s:=m;

c:=-0.25*(s+1);

a:=4/power((1+1/s),c);

f:=16/a;

if m>1 then

begin

g:=s-1;

g:=power(((s+1)/g),c)*sqrt((s+s)/g);

end else

g := 1;

mm:=m;

end;

r2:repeat

r:=random;

until r > 0.0;

x:=(2*random-1)*g/r;

v:=x*x;

if (v>(5-a*r)) then

begin

if ((m>=3) and (r*(v+3)>f)) then goto r2;

if (r>power((1+v/s),c)) then goto r2;

end;

tdistribution :=x;

end;

begin

tipe11[1]:=0.2;

tipe11[1]:=0.3;

tipe11[1]:=0.5;

tipe11[1]:=0.8;

tipe11[1]:=1.0;

end.

running program di atas dibuat di program delphi dengan menggunakan algoritma pascal. penulis menyadari masih terdapat banyal kesalahan dan kekurangan pada penulisan blog ini. blog ini merupakan up date tugas simulasi mingguan. penulis memohon maaf apabila terdapat pembaca diluar ITS yang membaca latikel ini.

terima kasih…

selasa, 1 september 2009

Diarsipkan di bawah: 1 sept 2009 — lialio at 10:43 pm on Sabtu, September 5, 2009

selasa.. tanggal 1 september, tepatnya pada jam pertama kuliah,pak dosen memberikan tugas… yah, tugas… lagi-lagi tugas… dan kali ini beliau memberikan tugas berupa membuat pemprograman merandom data kemudian mencari varian (n) dengan varian (n-1)…  sebelum tugas tersebut muncul, ada sedikit harapan di hati saya… ’semoga hari ini tak ada tugas’. tapi ternyata ada tugas yang diberikan. . waktu awal perkuliahan, beliau menjelaskan tentang penerapan simulasi yang paling sederhana… yang paling mudah diamati dalam kejadian sehari-hari. contohnya saja, pelemparan kapur.. jika di papan tulis digambarkan sebuah kotak yang di dalamnya terdapat lingkarang, untuk mendapatkan luas lingkaran,  dapat di dekati dengan cara melemparkan sebanyak-banyaknya kapur. semakin banyak kapur yang dilempar, semakin mendekati luas lingkaran tersebut. sayangnya, kasus seperti ini sangat sia-sia sekali dilakukan mengingat dibutuhkan waktu dan tenaga yang banyak. untuk melakukan hal ini, terdapat cara yang mudah, yaitu dengan cara membuat logika simulasi dengan program komputer. sedikit penjelasan ditinjau dari matematis:

L lingkaran / L persegi ~ n lingkaran / n persegi

phi r2 / 4 phi r2 ~ n lingkaran/ n persegi

maka di dapatkan phi = 4 n lingkaran / n persegi.

adapun tugas kedua, beliau menjelaskan dalam pascal:

program

var x,p,y : real

i,m,n : integer

begin

randomize;

n:=10000;           m:=0;

for i:= 1 to n do

begin

x:=random;

y:=random;

if (x*x + y*y) <= 1 then m:= m +1;

end;

p:= 4*m/n;         n:=s/m;

writeln (p)

end.

sedangkan pada tugas, dosen memberikan tugas menghitung varian yang diambil dari data random. algoritmanya:

1. mulai

2. bangkitkan x~ N (60,1) sebanyak 100 sebagai populasi

3. ambil n sampel sebanyak 10, hitung S1 kuadrat= Σ (x1 - x bar)2/n dan s2 kuadrat= Σ (x1 - x bar)2/n-1

4. lakukan 3 kali sebanyak 1000 kali

5. hitung bias s1 kuadrat dan s2 kuadrat dan bandingkan

6. selesai.

disini, penulis mencoba untuk membuat pemprograman pascal. jika terdapat kesalahan mohon dimaafkan karena penulis masih dalam tahap pembelajaran dan kurang faham betul mengenai pascal.

program

var  a, b, c,z,varian1, varian2, rata, x,p : real

i,m,n, y, data, g, h : integer

begin

randomize;

k:=100;           l:=0;

for i:= 1 to n do

begin

g:=random;

h:=random;

write (’masukkan nilai n =’;

readln (n);

for i:=1 to n do

begin

write (’data=’);

readln (data);

y:=y+data;

b:=b+sqr(data);

end;

writeln (’total =’, y);

rata:=y/n;

a:=1/n-1;

z:=1/n;

c:=n*sqr(data);

varians1:=a*(b-c);

varians2:=z*(b-c);

writeln (’rata-rata=’,rata:2:2);

writeln (’varian1=’, varian:2:2);

writeln (’varian2=’,varian:2:2′);

end;

end.

Dari perhitungan varian secara simulasi pascal, terlihat bahwa varian1 (n-1) memiliki ketakbiasan daripada varian2 (n).  atau dengan kata lain, varian1 (n-1) atau tak bias, memiliki ketelitian dan perhitungan yang lebih baik daripada varian2 (2) atau yang bias….

terima kasih…. artikel ini ditulis semata-mata untuk memenuhi tugas teknik simulasi…

penulis meminta maaf apabila terdapat kesalahan dalam tulisan ataupun jawaban.

simulasi monte carlo

Diarsipkan di bawah: simulasi monte Carlo — lialio at 11:39 am on Minggu, Agustus 30, 2009

Simulasi Monte Carlo adalah proses menurunkan secara acak nilai variabel tidak pasti secara berulang-ulang untuk mensimulasikan model. Metode Monte Carlo karena itu merupakan teknik stokastik. Kita dapat menemukan metode Monte Carlo diaplikasikan dalam berbagai bidang, mulai dari ekonomi sampai fisika nuklir untuk pengaturan lalu lintas aliran. Tentu saja cara aplikasinya berbeda dari satu bidang ke bidang lainnya, dan ada banyak sekali himpunan bagian Monte Carlo meskipun dalam satu bidang yang sama. Hal yang menyamakan semua itu adalah bahwa percobaan Monte Carlo membangkitkan bilangan acak untuk memeriksa permasalahan. Metode Monte Carlo dianggap sebagai penemuan dari Stanislaw Ulam, seorang matematikawan cemerlang yagn bekerja untuk John Von Neumann di proyek

United’s Manhattan selama perang dunia II. Ulam adalah orang utama yang diketahui merancang bom hidrogen dengan Edward Teller tahun 1951. Dia menemukan metode Monte Carlo tahun 1946 sewaktu memikirkan peluang memenangkan permainan kartu soliter. Percobaan jarum di atas merupakan contoh metode Monte Carlo. Yang kita lakukan dalam lembar kerja adalah mendefinsikan nilai yang mungkin dengan distribusi peluang untuk setiap varaibel tidak tentu. Tipe distribusi yang dipilih didasarkan pada kondisi di sekeliling variabel. Metode Monte Carlo, sebagaimana yang dipahami saat ini, melingkupi sampling statistik yagn digunakan untuk memperkirakan solusi permasalahan kuantitatif. Ulam tidak menciptakan sampling statistik. Metode ini sebelumnya digunakan untuk menyelesaikan permasalahan kuantitatif dengan proses fisik, seperti pelemparan dadu atau pengocokan kartu untuk menurunkan sampel. W.S. Gosset, yang mempublikasikan karyanya dengan nama “Student”, secara acak menarik sampel ukuran jari tengah dari 3000 kriminal untuk mensimulasikan dua distribusi normal berhubungan. Dia mendiskusikan metode Monte Carlo dalam dua publikasinya (1908a dan 1908b). Kontribusi Ulam diakui dalam potensi penemuan baru komputer elektronik untuk mengotomasi penarikan sampel. Bekerja dengan John von Neuman dan Nicholas Metropolis, dia mengembangkan algoritma untuk implementasi komputer, juga mengeksplor alat transformasi permasalahan tidak acak ke dalam bentuk acak yang akan memfasilitasi solusinya melalui penarikan sampel acak. Nama Monte Carlo diberikan oleh Metropolis, dipublikasikan pertama sekali tahun 1949. Nama simulasi Monte Carlo diberikan sesuai dengan nama salah satu kota di Monaco, yaitu Monte Carlo, tempat utama kasino yang mengandung permainan peluang (kesempatan). Permainan peluang seperti roda rolet, dadu dan mesin slot menunjukkan perilaku acak. Perilaku acak dalam permainan peluang adalah sama dengan bagaimana simulasi memilih nilai variabel secara acak untuk mensimulasikan model. Ketika kita melempar dadu, kita tau bahwa yang akan muncul mungkin 1, 2, 3, 4, 5 atau 6, tapi kita tidak tau yang mana pastinya untuk lemparan tertentu. Hal itu sama dengan variabel yang mempunyai kisaran nilai diketahui tapi tidak diketahui nilai pasti untuk waktu atau kejadian tertentu. Pemahaman metode Monte Carlo dapat dilakukan dengan memikirkan bahwa itu merupakan teknik umum integrasi numerikal. Setiap aplikasi metode Monet Carlo dapat direpresentasikan sebagai integral terbatas.

Kebanyakan integral dapat dikonversi ke dalam bentuk ini dengan perubahan variable yang sesuai, sehingga kita dapat mempertimbangkan ini menjadi aplikasi umum yang sesuai untuk metode Monte Carlo. Integral mereprensentasikan permasalahan bukan acak, tetapi metode Monet Carlo memperkirakan solusi dengan memperkenalkan vector acak U yang berdistribusi normal dapa area integrasi.

Monte Carlo menurun sebesar pangkat dua dari ukuran sampel. Kedua, kesalahan standar tidak tergantung pada dimensionalitas integral. Kebanyakan teknik integrasi numerical, seperti aturan trapezoidal atau metode Simpson, tergantung pada dimensionalitas. Ketika digeneralisasikan ke dimensi jamak, jumlah perhitungan yang dibutuhkan meningkat secara eksponensial sesuai dengan dimensionalitas integral. Metode Monet Carlo tidak tergantung dengan dimensionalitas. Dalam analisis Monte Carlo, peningkatan jumlah sample akan mengurangi kesalahan standar, tapi itu akan bernilai mahal. Teknik reduksi ragam dapat digunakan untuk memperbaiki solusi. Teknik ini menggabungkan informasi tambahan tentang analisis secara langsung kedalam penduga. Hal ini memungkinkan penduga Monte Carlo lebih deterministik, dan karenanya mempunyai kesalahan standar lebih rendah. Teknik standar sampling, dan stratified sampling.

Mengaluasinya seperti apa?

Diarsipkan di bawah: Mengevaluasi algoritma — lialio at 11:35 am on Minggu, Agustus 30, 2009

Cara mengevaluasi algoritma:

· Deterministic Modelling: menggunakan perhitungan matematika berdasarkan workload sistem. Sederhana, namun pemakaiannya terbatas.

· Queueing Model: menggunakan perhitungan matematika berdasarkan waktu antrian dan waktu kedatangan proses.

· Simulasi: membuat model sistem komputer. Cara ini mahal dan membutuhkan kerja besar dalam memprogram.

· Implementasi: langsung mengimplementasi pada sistem sebenarnya. Paling efektif, namun mahal.

Tabel 16.3. Scheduling Priorities in Linux

Priorities

Scheduling class

0-99

System Threads, Real time (SCHED_FIFO, SCHED_RR)

100-139

User priorities (SCHED_NORMAL)

Tabel 16.4. Scheduling Priorities in Solaris

Priorities

Scheduling class

0-59

Time Shared, Interactive, Fixed, Fair Share Scheduler

60-99

System Class

100-159

Real-Time (note real-time higher than system threads)

160-169

Low level Interrupts


Implementasi

Diarsipkan di bawah: Implementasi — lialio at 10:51 am on Minggu, Agustus 30, 2009

Simulasi bahkan memiliki keakuratan yang terbatas. Satu-satunya cara yang paling akurat untuk mengevaluasi algoritma penjadwalan  (donwload jurnal) adalah

dengan langsung membuat programnya, masukkan ke dalam sistem operasi, dan lihat bagaimana ia bekerja. Dengan ini, algoritma yang akan dievaluasi

ditempatkan dan dijalankan di sistem yang sebenarnya.

Implementasi ini membutuhkan biaya yang besar. Selain mahal, kesulitannya antara lain:

· Memprogram algoritmanya.

· Memodifikasi sistem operasi agar bisa mendukung algoritma tersebut.

· Reaksi pengguna akan sistem operasi yang terus berubah secara konstan karena pengguna tidak peduli dengan pengembangan sistem operasi.

Pengguna hanya ingin proses yang dijalankannya dapat diselesaikan dengan cepat.

· Environment dimana program dijalankan akan berubah.

Perubahan environment ini bukan hanya perubahan wajar sebagaimana yang terjadi jika program baru ditulis dan tipe-tipe masalah berubah,

tapi juga perubahan performance dari penjadwal. Pengguna (dalam hal ini programmer) bisa memodifikasi programnya untuk memanipulasi penjadwalan.

Misalnya sebuah komputer dikembangkan dengan pengklasifikasian proses menjadi interaktif dan non-interaktif berdasarkan jumlah terminal M/K yang

digunakan proses. Jika dalam interval satu detik suatu proses tidak menggunakan terminal M/K untuk masukan atau keluaran, maka proses itu dikategorikan

proses non-interaktif dan dipindahkan ke antrian yang prioritasnya lebih rendah. Dengan sistem seperti ini, bisa saja seorang programmer memodifikasi programnya - yang bukan program interaktif- untuk menulis karakter acak ke terminal dalam interval kurang dari satu detik. Dengan demikian, programnya akan dianggap program interaktif dan mendapat prioritas tinggi, meskipun sebenarnya output yang diberikan ke terminal tidak memiliki arti. Bagaimanapun, algoritma penjadwalan yang paling fleksibel adalah yang bisa berganti-ganti atau diatur sesuai kebutuhan. Misalnya komputer yang memiliki kebutuhan

grafis tinggi akan memiliki algoritma penjadwalan yang berbeda dengan komputer server. Beberapa sistem operasi seperti UNIX memungkinkan system manager untuk

mengatur penjadwalan berdasarkan konfigurasi sistem tertentu.

sedikit uneg-uneg tentang simulasi

Diarsipkan di bawah: simulasi — lialio at 10:28 am on Minggu, Agustus 30, 2009

Karena inovasi, terutama inovasi yang radikal, merupakan upaya dengan resiko tinggi, perusahaan selalu berusaha mencari cara-cara untuk mengurangi resiko tersebut. Salah satu cara yang semakin sering dipakai saat ini adalah simulasi. Memang konsep simulasi sudah lama ada. Teknik simulasi seperti Monte Carlo sudah lama beredar. Tetapi perkembangan kemampuan komputer dewasa ini memungkinkan diciptakannya simulasi yang jauh lebih rumit dan realistis. Kemampuan software simulator yang dilengkapi dengan animasi juga membantu orang awam melihat langsung hasil simulasi tanpa harus menganalisis data keluaran berlembar-lembar.

Simulasi menjadi penting karena kompleksitas hubungan sebab akibat di dunia bisnis saat ini. Interaksi antar komponen dan aktor dalam sistem sering sulit diramalkan melalui metode analisis linier yang lebih kita kuasai. Otak kita dirancang untuk menganalisis data berdasarkan rata-rata (mean), dan bukan distribusi statistik. Sebagai contoh, bila kita mengetahui rata-rata layanan di kasir adalah 1 menit, dan setiap menit ada 3 orang yang membutuhkan layanan di kasir, Anda mungkin akan memasang 3 orang kasir bila Anda tidak ingin menciptakan antrian. Benarkah perhitungan tersebut? Ya, memang benar bila semua pelayanan diselesaikan tepat dalam 1 menit. Namun 1 menit di sini adalah rata-rata. Pada kenyataannya, mungkin saja ada transaksi yang membutuhkan waktu 5 menit. Hal-hal seperti ini sulit divisualisasikan dengan pikiran kita, tetapi bisa terlihat dengan mudah melalui simulasi komputer.

Contoh tersebut hanyalah contoh sederhana. Bagaimana dengan proses yang lebih rumit seperti di restoran? Tamu datang dengan rata-rata interval tertentu, dan memesan dengan rata-rata interval tertentu. Pesanan makanan juga berbeda dan makanan berbeda membutuhkan waktu penyajian yang berbeda. Belum lagi pengaruh dari jumlah waiter yang ada saat itu. Jumlah tamu juga mempengaruhi berapa lama mereka akan bersantap. Lalu ada juga unsur hari. Tamu di akhir pekan akan duduk lebih lama dibanding hari-hari biasa. Masing-masing kegiatan di atas memiliki karakteristik yang berbeda. Berapakah jumlah waiter, juru masak, dan kasir yang dibutuhkan? Bisakah Anda menghitungnya, meski dengan bantuan Microsoft Excel?

Otak manusia tidak dilengkapi dengan kemampuan meramalkan efek interaksi rumit seperti itu. Ini masih restoran. Bagaimana dengan proses manufaktur yang pasti lebih rumit lagi? Di sinilah simulasi komputer datang menjadi penyelamat. Tanpa harus mengeluarkan biaya yang besar terlebih dahulu, kita bisa meramalkan apa yang terjadi melalui simulasi yang dibangun dengan biaya yang jauh lebih kecil.

Simulasi tentu saja tidak bisa selalu meramal dengan tepat. Bagaimanapun, keakuratan sebuah model tergantung dari kelengkapan variabel dan data yang dimasukkan. Untuk membuat sebuah simulasi yang bagus, harus dilakukan iterasi terus menerus. Selain itu juga dibutuhkan ahli statistik yang mampu mengumpulkan dan menganalisis data yang dimasukkan. Setelah model awal dibuat, model tersebut harus diuji dulu dengan beberapa set data dari dunia nyata. Hasil simulasi lalu dibandingkan dengan kenyataan. Bila terjadi penyimpangan yang besar, model diperiksa kembali. Lakukan secara terus menerus sampai diperoleh hasil yang lumayan akurat. Barulah setelah itu, model bisa dijalankan dengan data yang lebih lengkap.

Simulasi membantu inovasi dalam beberapa cara. Untuk proses bisnis seperti contoh di atas, simulasi mampu memberikan gambaran secara kasar apa yang akan terjadi bila sebuah inovasi proses dilakukan. Simulasi mampu membantu kita menjawab pertanyaan seperti berapa banyak waktu dan biaya yang dihemat. Sedangkan untuk inovasi produk baru, perusahaan bisa terbantu dalam mengidentifikasi produk baru mana yang menjanjikan potensi keuntungan yang lebih besar, atau adakah pengaruh urutan perkenalan produk baru terhadap kemampulabaan perusahaan. Perusahaan juga bisa melakukan uji sensitivitas (sensitivity analysis) seperti menentukan berapa laju adopsi minimum yang dibutuhkan untuk mencapai break-even point. Untuk memasukkan unsur ketidakpastian, teknik Monte Carlo bisa dijalankan ribuan kali dengan skenario berbeda untuk mendapatkan hasil statistik agregat. Dalam hal ini, simulasi memang tidak bisa menghilangkan ketidakpastian dan memberikan jaminan sukses 100%, tetapi hasilnya akan sangat membantu perusahaan mengantisipasi ketidakpastian tersebut dengan lebih baik.

Selain itu, seperti yang kita ketahui, memperkenalkan inovasi dalam perusahaan sering mengakibatkan gesekan politis dan perbenturan antara asumsi-asumsi lama dan baru. Dengan simulasi, pertentangan semacam itu bisa dikurangi karena pendapat yang ada telah didukung oleh data yang lebih akurat.

Terlepas dari semua keuntungan simulasi, tetap haruslah diingat bahwa simulasi adalah alat bantu. Pada akhirnya, semua keputusan dan hasil akhir harus kembali ke tangan manusia yang menjalankannya.

Dalam masalah bisnis, simulasi seperti apaya…?

Diarsipkan di bawah: Aplikasi Simulasi — lialio at 10:18 am on Minggu, Agustus 30, 2009

Misalkan pengusaha Ayam Goreng Mbok Yao menjual omelet untuk sarapan pagi dengan harga 500 rupiah dengan biaya bahannya 200 rupiah.

Bila satu omelet tak laku, maka akan terjadi kerugian sebesar harga bahan 200 rupiah.

Berapa banyak omeletkah yang harus disediakan pengusaha Ayam Goreng Mbok Yao untuk tiap sarapan pagi? Berapakah laba pengusaha jika ia

hanya menyediakan 60 omelet ?

ADA PULA

Rasio luas lingkaran Merah dengan jari-jari 1 satuan dan persegi dengan sisi 2 satuan adalah π/4. Nilai ini juga merupakan rasio wilayah lingkaran pada

kuadran I Langkah Metode Monte Carlo dalam penyelesaian masalah

1. Tentukan banyaknya pengacakan titik (N).

2. Mengacak N buah titik dalam bentuk (x,y). Dengan Microsoft Excel masing-masing absis dan ordinat bisa digunakan perintah = rand().

3. Menghitung banyaknya titik yang berada dalam lingkaran pada kuadran I (m).

4. Menghitung nilai π

aplikasi simulasi

Diarsipkan di bawah: Aplikasi Simulasi — lialio at 1:49 pm on Sabtu, Agustus 29, 2009

Bagi teman-teman yang ingin mencoba buat simulasi, disini saya mencoba membuatkan simulasi Lampu Lalulitas yang sangat sederhana. Mungkin simulasi ini cocok untuk teman yang baru pertama kali mencoba. Banyak perkenalannya, dan mudah. Selamat mencoba dan semoga bermanfaat.

Membuat program di NetBeans lebih mudah dibanding menggunakan alat bantu lain nya,karena NetBeans sudah merupakan IDE (Integrated Development Environment) + RAD (Rapid Application Development).

Bisa dipakai untuk membuat program Aplikasi (standalone), Applet (jalan di web client), Servlet atau Java Server Page (jalan di web server). Di blog yang akan dipraktekkan yaitu Java Applet dan Java Aplikasi. Program aplikasi biasanya digunakan untuk membuat program yang berhubungan dengan database. Bagi yang mau unduh NetBeans, kunjungi aja www.sun.com Misalnya saja kita akan membuat program lampu lalu lintas. Pada penulisan source code, untuk memperjelas penulisan dapat kita tambahkan komentar-komentar. Komentar tidak berpengaruh pada jalannya program, tanda komentar:

   //  … komentar …	: digunakan untuk komentar satu baris
   /**  …komentar….  */	: digunakan untuk komentar satu baris atau lebih, biasanya menjelaskan
                          hal yang berhubugan dengan kode atau jalannya program.
  /* …komentar…   */	: digunakan untuk komentar satu baris atau lebih, biasanya menjelaskan
                          keterangan diluar kode program seperti penulis, waktu, dll.

mulai membuat program Klik menubar File –> NewProject atau tekan alt + shift + n bersamaan . Pilih Java Application, klik next.

Isi nama project dengan awalan huruf besar(standar penulisan), tanpa spasi. Jangan lupa untuk Uncentang “Create main Classnya”. Jadi deh, project kosong kita….

klik kanan pada project kita tadi, kemudian plih New –> JFrame Form , artinya kita akan membuat kelas frame baru.

Isikan datanya, jangan lupa nama kelas dengan awalan huruf kapital, supaya standar… Kemudian isi packagenya, misalnya yang saya isikan &quotLatihan.Blog”, berarti saya akan menyimpan kelas JFrame tadi di direktori &quotsrc/Latihan/Blog” , dengan begitu kita dapat mengelompokkan kelas-kelas mana saja yang sejenis dalam satu direktori sehingga mempermudah kita jika kita ingin menggunakan kelas tersebut pada project lain dengan mengimport kelas tersebut. Lumayan lah, menghemat mengetiknya…hehe… Setelah itu, bisa kita lihat ada Frame kosong. Inilah kehebatan dari GUI (Graphics User Interface), tinggal klik dan drop. Kita akan menambahkan komponen-komponen yang diperlukan :

Bisa teman coba-coba tinggal drag & drop dari kolom sebelah kanan. Semua itu Objek. Ada Objek tombol, panel, text, dll. Kalau mau di ubah textnya, tinggal rename atau klik kanan, Edit Text sedangkan yang berhubungan dengan input-output, lebih baik diubah nama variabelnya, agar mempermudah aksesnya dengan cara klik kanan, Change Variable Name…, untuk menghilangkan keambiguan dan mencocokkan dengan teman2 variabel atau nama objek yang saya gunakan:

Nama objek ditulis dengan huruf kecil standarnya… kemudian pilih nama objek yang mudah di ingat sehingga bisa membedakan objek secara cepat. Selesai juga interfacenya, kalau mau di ubah-ubah atau dikasih gambar-gambar atau icon, warna, tinggal ubah-ubah menu di kotak sebelah kanan bawah, di Properties. KeSemua objek dari kelas Radio Button pada propertiesnya bagian enabled agar di uncentang agar tidak dapat diubah.mudian, kita mulai dengan koding2 deh… Klik pada bagian source, dan yah kita dapatkan lahan buat koding2…

Kemudian, klik Button Ubah, lihat kotak kanan bawah, bagian Events, di bagian Events inilah kita dapat memberikan kelakuan-kelakuan untuk objek. Klik Action Performed –> Enter… Yah disini kita menuliskan kode apa saja yang terjadi ketika tombol ubah ini diklik.

Tambahkan juga even Mouse Entered dan Mouse Exited. Kemudian, isikan kodenya hingga bagian sourcenya seperti ini:

/*
 * MainFrame.java
 *
 * Created on July 26, 2008, 3:14 PM
 */

package Latihan.Blog;

import java.awt.Color;

/**
 * @cca
 */
public class MainFrame extends javax.swing.JFrame {

int a =2;   //pesan variable a

    /** Creates new form MainFrame */
    public MainFrame() {

        initComponents();   //memasang atau mengompile objek-objek
    }

//bagian ini tidak dapat di ubah
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
   Generated code..

//yang terjadi ketika tombol ubah ditekan

    private void bGantiActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:

        a++;     //nilai a terus bertambah satu setiap di tekan
//if conditional, bagian ini mengatur warna lampu dan radio button       

        if(a%3 == 0){
                     pMerah.setBackground(Color.GRAY);      //set warna
                     pHijau.setBackground(Color.GREEN);
                     rbStop.setSelected(false);     //seleksi yang tidak aktif
                     rbGo.setSelected(true);	      //seleksi yang aktif
                               }

         else if(a%3 == 1){
                     pHijau.setBackground(Color.GRAY);
                     pJingga.setBackground(Color.ORANGE);
                     rbGo.setSelected(false);
                     rbHati2.setSelected(true);
                 }

          else {
                     pJingga.setBackground(Color.GRAY);
                     pMerah.setBackground(Color.RED);
                     rbHati2.setSelected(false);
                     rbStop.setSelected(true);
       }

    }

  private void bGantiMouseEntered(java.awt.event.MouseEvent evt) {
        // TODO add your handling code here:
     setCursor(Cursor.HAND_CURSOR);     //saat kursor masuk area tombol, kursor berubah bentuk
    }

  private void bGantiMouseExited(java.awt.event.MouseEvent evt) {
    // TODO add your handling code here:
    setCursor(Cursor.DEFAULT_CURSOR);   //saat kursor kelua area tombol, kursor kembali seperti semula
    }

    /**
     * @ param args the command line arguments
     */
 Dst...

Pastikan bagian ini, pada gambar atas sebelah kanan, berwarna hijau yang menandakan tidak ada masalah, dan bagian tab bawah, tab run, pastikan tidak ada tulisa error dan tidak ada tulisan berwarna biru, yang berarti warning, yang terkadang membuat program kita jadi aneh, gak jalan, dst.

Lalu, run project kita, tekan gambar segitiga hijau di kanan atas (run) atau tekan F6… Jadi deh program kita…

Gimana….??? Pada program ini kita masih belum memanfaatkan fitur-fitur java. Kita hanya gunakan satu kelas, belum rumit sehingga ketidakberadaan kelas belum kita rasakan.

Model Simulasinya seperti apa ya…?

Diarsipkan di bawah: Aplikasi Simulasi — lialio at 11:58 am on Sabtu, Agustus 29, 2009

Model simulasi harus merefleksikan sifat-sifat penting sistem nyata. Untuk menjelaskan proses pemodelan akan digunakan percobaan jarum Buffon.
> Percobaan Disimulasikan
Percobaan Jarum Buffon. Jarum sepanjang l dijatuhkan secara acak pada bidang yang memuat sekumpulan garis paralel dengan jarak antar garis d, yang dapat direpresentasikan keramik lantai (lihat Gambar 1). Panjang jarum diasumsikan lebih kecil atau sama dengan jarak antar garis paralel. Jika percobaan menjatuhkan jarum dilakukan secara berulang-ulang, probabilitas (p) jarum akan menyentuh atau memotong garis dapat diperoleh dari hasil bagi jumlah jarum menyentuh atau memotong garis (NI) dibagi dengan jumlah percobaan (NT), atau P = NI/NT. Dilihat dari prosedurnya, percobaan jarum Buffon adalah simulasi Monte Carlo, karena kita menggunakan angka acak dan sampel acak untuk memperkirakan hasil percobaan.

Untuk mensimulasikan percobaan ini, kita harus dapat menempatkan jarum secara acak, relatif terhadap garis. Dalam percobaan fisik, hal ini tidak sulit dilakukan, kita hanya perlu menjatuhkan jarum pada bidang yang sudah ditentukan. Tetapi dalam simulasi komputer percobaan akan berbeda. Jarum pada bidang harus ditempatkan secara unik, untuk itu kita harus menentukan lokasi spesifik jarum. Anggap lokasi jarum terhadap garis mempunyai titik tengah m dan sudut θ. Untuk memenuhi posisi acak, variabel jarak diperlakukan sebagai variabel acak dan berdistribusi uniform.

Kita hanya perlu mempertimbangkan satu area yang diapit oleh dua garis, karena area lainnya biasanya duplikat dari area ini. Begitu titik tengah jarum m sudah ditentukan, kita harus menentukan garis mana dari antara kedua garis tersebut yang terdekat. Posisi acak bersifat simetris, oleh karena itu kita hanya memerlukan setengah dari jarak kedua garis. Oleh karena itu a yang merupakan jarak dari m ke garis adalah variabel acak berdistribusi uniform pada kisaran 0 – d/2. Karena sifat simetris, θ juga variabel acak yang berdistribusi uniform pada kisaran 0 - π radian.

Diberikan a dan θ acak, metode untuk menentukan apakah jarum menyentuh atau memotong garis adalah sebagai berikut:hitunglah proyeksi vertikal jarak m ke akhir jarum sebagai (l/2) sin θ, dan bandingkan dengan jarak a. Jika a ≤ (l/2) sin θ, jarum menyentuh atau memotong garis, seperti yang ditunjukkan di atas. Jika a > (l/2) sin θ, jarum tidak menyentuh atau memotong. Untuk menyelesaikan pengembangan model, kita harus menentukan rata-rata nilai a dan θ.
Untuk mendapatkan sampel acak a dan θ, akan lebih baik menggunakan bilangan pseudo-random, r, dengan 0 ≤ r ≤ 1. Kemudian kita dapat mendefinisikan nilai a dan θ untuk percobaan tertentu sebagai :
a = (d/2)r
θ = π r
kisaran a dan θ yang diinginkan adalah:
0 ≤ a ≤ d/2
0 ≤ θ ≤ π
Logika pemrograman untuk mensimulasikan percobaan jarum. Running akan dilakukan sebanyak 3000 kali dengan panjang jarum (l) = 10cm dan jarak garis (d) = 20cm. Hasil simulasi memperkirakan p (probabilitas jarum akan menyentuh atau memotong garis) sebesar 0.3133. Pertanyaan berikutnya adalah seberapa akurat perkiraan ini?

Keakuratan p ditentukan oleh jumlah ulangan setiap percobaan yang disimulasikan. Dalam pembentukan selang kepercayaan untuk presisi ini, hal berikut dilakukan. Jatuhnya jarum merupakan percobaan Bernoulli, jumlah kesuksesan (NI) dalam ulangan NT adalah variabel acak Binomial, dan P = NI/NT yang merupakan penduga bagi parameter Binom p (probabilitas sukses).

Program simulasi menggunakan FORTRAN adalah sbb:
C PERMASALAHAN JARUM BUFFON
TYPE *, ‘MASUKKAN PANJANG JARUM, LEBAR AREA (JARAK ANTARA DUA GARIS), JUMLAH PERCOBAAN’
TYPE *,
READ *,FNEEDLE,DIST,NTRIALS
TYPE*,PANJANG JARUM = ‘,FNEEDLE, ‘LEBAR AREA = ‘,DIST, ‘JUMLAH PERCOBAAN = ‘,NTRIALS
WRITE (6,100) FNEEDLE,DIST,NTRIALS
100 FORMAT (‘ PANJANG JARUM = ‘,F7.0,’LEBAR AREA = ‘,F7.0, ‘JUMLAH PERCOBAAN =’,I6)
DO 1 I=1,NTRIALS
Y=RAN(ISEED)
A=Y*DIST/2
Y=RAN(ISEED)
THETA=Y*3.1417
IF(A.LE.(FNEEDLE/2.)*SIN(THETA)) THEN
CROSS=CROSS+1
END IF
IF(MOD(I,50) .EQ.0) THEN
TYPE *,’PERCOBAAN NO. = ‘,I,’FRACTION CROSSING= ‘,CROSS/FLOAT (I)
101 FORMAT(‘ PERCOBAAN NO.= ‘,I,’ FRACTION CROSSING= ‘F5.4)
END IF
1 CONTINUE
THEO_PROB=2.*FNEEDLE/(3.1417*DIST)
TYPE *,’PELUANG TEORITIS= ‘,THEO_PROB
WRITE(6,102) THEO_PROB
102 FORMAT(‘ PROB. TEORITIS= ‘,F6.5)
END
Sebelum mengembangkan model simulasi kompleks, kita bicarakan dulu list processing dalam simulasi. Untuk model simulasi sederhana, kita dapat menemukan tidak ada list atau maksimum hanya satu list record dengan 1 atribut. Tapi untuk model simulasi kompleks kita harus berhadapan dengan beberapa list yang memuat banyak records juga dengan banyak atribut. Sering pemrosesan FIFO (First In First Out) tidak efisien. Jika jumlah besar informasi ini tidak disimpan dan dimanipulasi secara efisien, eksekusi model akan membutuhkan waktu yang lama dan memori penyimpanan yang besar akan mengakibatkan model simulasi tidak layak.
Ada dua cara penyimpanan list records dalam komputer yaitu alokasi sekuensial dan terhubung (linked).
Pendekatan alokasi-sekuensial meletakkan records berdekatan secara fisik dalam lokasi penyimpanan, satu demi satu record sesuai dengan hubungannya. Dalam pendekatan alokasi penyimpanan terhubung, setiap record memuat atribut dan pointer (link). Pointer menunjukkan relasi logik dari satu record ke record lainnya dalam list. Sehingga record dalam list yang saling berhubungan tidak harus diletakkan berdekatan. Pendekatan kedua ini (alokasi penyimpanan terhubung) lebih disukai dalam pemodelan simulasi karena memiliki beberapa keuntungan, yaitu:
1. waktu pemrosesan yang dibutuhkan untuk jenis list tertentu dapat dikurangi secara signifikan.
2. pemrosesan list-kejadian untuk model simulasi dimana daftar (list) kejadian memuat sejumlah besar record kejadian secara simultan dapat dipercepat
3. untuk beberapa model simulasi, kapasitas memori komputer yang dibutuhkan untuk menyimpan bisa lebih kecil.
4. menyediakan kerangka umum yang memungkinkan menyimpan dan memanipulasi banyak daftar secara simultan dengan mudah, dimana records dalam daftar berbeda dapat diproses dengan cara berbeda.

Apa aja ya yang berhubungan ma simulasi….?

Diarsipkan di bawah: Aplikasi Simulasi — lialio at 10:27 pm on Jumat, Agustus 28, 2009

Ilustrasi: Solaris

salah satu aplikasi simulasi adalah solaris…

Solaris menggunakan penjadwalan berdasarkan prioritas dimana yang mempunyai prioritas yang lebih tinggi dijalankan terlebih dahulu. Informasi tentang penjadwalan kernel thread dapat dilihat dengan ps -elcL.

Kernel Solaris adalah fully preemtible, artinya semua thread, termasuk thread yang mendukung aktifitas kernel itu sendiri dapat ditunda untuk menjalankan thread dengan prioritas yang lebih tinggi.

Gambar 16.5. Penjadwalan Solaris

c316-f05-solarisscheduling2

Solaris mengenal 170 prioritas yang berbeda, 0-169. Terbagi dalam 4 kelas penjadwalan yang berbeda:

  1. Real time (RT). Thread di kelas RT memiliki prioritas yang tetap dengan waktu kuantum yang tetap juga. Thread ini memiliki prioritas yang tinggi berkisar antara 100-159. Hal inilah yang membuat proses waktu nyata memiliki response time yang cepat. Proses waktu nyata akan dijalankan sebelum proses-proses dari kelas yang lain dijalankan sehingga dapat menghentikan proses di system class. Pada umumnya, hanya sedikit proses yang merupakan real time class.
  2. System (SYS). Solaris menggunakan system class untuk menjalankan kernel proses, seperti penjadwalan dan paging daemon. Threads di kelas ini adalah “bound” threads, berarti bahwa mereka akan dijalankan sampai mereka di blok atau prosesnya sudah selesai. Prioritas untuk SYS threads berkisar 60-99. Sekali dibangun, prioritas dari sistem proses tidak dapat dirubah. System class dialokasikan untuk kernel use( user proses berjalan di kernel mode bukan di system class).
  3. Time Sharing (TS). Time sharing class merupakan default class untuk proses dan kernel thread yang bersesuaian. Time slices masing-masing proses dibagi berdasarkan prioritasnya. Dalam hal ini, prioritas berbanding terbalik dengan time slices-nya. Untuk proses yang prioritasnya tinggi mempunyai time-slices yang pendek, dan sebaliknya proses dengan prioritas yang rendah mempunyai time slices yang lebih panjang. Besar prioritasnya berada antara 0-59. Proses yang interaktif berada di prioritas yang tinggi sedangkan proses CPU-bound mempunyai prioritas yang rendah. Aturan penjadwalan seperti ini memberikan response time yang baik untuk proses yang interaktif, dan troughput yang baik untuk proses CPU-bound.
  4. Interactive (IA). Kelas Interaktif menggunakan aturan yang sama dengan aturan dengan kelas kelas time sharing, tetapi kelas ini memberikan prioritas yang tinggi untuk aplikasi jendela ( windowing application) sehingga menghasilkan performance yang lebih baik. Seperti TS, range IA berkisar 0-59.

    Tabel 16.2. Solaris dispatch table for interactive and time sharing threads

    Priority Time quantum Time quantum expired return from sleep
    0 200 0 50
    5 200 0 50
    10 160 0 51
    15 160 5 51
    20 120 10 52
    25 120 15 52
    30 80 20 53
    35 80 25 54
    40 40 30 55
    45 40 35 56
    50 40 40 58
    55 40 45 58
    59 20 49 59


    Keterangan:

    • Priority: prioritas berdasarkan kelas untuk time sharing dan interactive class. Nomor yang lebih tinggi menunjukkan prioritas yang lebih tinggi.
    • Time quantum: waktu kuantum untuk setiap prioritas. Dapat diketahui bahwa fungsi waktu kuantum berbanding terbalik dengan prioritasnya.
    • Time quantum expired: Prioritas terbaru untuk thread yang telah habis time slices-nya tanpa diblok. Dapat dilihat dari tabel bahwa thread yang CPU-bound tetap mempunyai prioritas yang rendah.
    • Return from sleep: Prioritas thread yang kembali dari sleeping(misalnya menunggu dari M/K). Seperti yang terlihat dari tabel ketika M/K berada di waiting thread, prioritasnya berada antara 50-59, hal ini menyebabkan response time yang baik untuk proses yang interaktif.
  5. Fixed Priority (FX). Thread di kelas fixed priority memiliki range prioritas (0-59) yang sama seperti di time-sharing class; tetapi, prioritas mereka tidak akan berubah.
  6. Fair Share Scheduler (FSS). Thread yang diatur oleh FSS dijadwalkan berdasar pembagian sumber daya dari CPU yang tersedia dan dialokasikan untuk himpunan proses-proses (yang dikenal sebagai project). FS juga berkisar 0-59. FSS and FX baru mulai diimplementasikan di Solaris 9.

Seperti yang telah diketahui, setiap kelas penjadwalan mempunyai himpunan dari prioritas-prioritas. Tetapi, penjadwal mengubah class-specific priorities menjadi global priorities kemudian memilih thread dengan prioritas paling tinggi untuk dijalankan. Thread yang dipilih tersebut jalan di CPU sampai thread tersebut (1) di- block, (2) habis time slices-nya, atau (3) dihentikan oleh thread dengan prioritas yang lebih tinggi. Jika ada beberapa thread dengan prioritas yang sama, penjadwal akan menggunakan Round-Robin queue. Seperti yang pernah dijelaskan sebelumnya, Solaris terdahulu menggunakan many-to-many model tetapi solaris 9 berubah menggunakan one-to-one model.

Halaman Berikutnya »