Selasa, 14 Desember 2010

Bilangan Random dengan Java

Salah satu penerapan dari Mata Kuliah Model dan Simulasi adalah Penerapan Model Matematika, contohnya membuat algoritma untuk memecahkan masalah dan kemudian menuangkannya dalam suatu bahasa pemrograman tertentu, sehingga masalah pun terpecahkan, Contohnya seperti berikut yaitu permasalahan untuk memunculkan bilangan random atau bilangan acak yang secara otomatis muncul atau ditampilkan oleh program atau suatu model matematika yang telah di tuangkan ke dalam koding pemrograman.

Apa Fungsinya bilangan ramdom??.. jawabnya mudah sekali, Anda tahu Pulsa Fisik atau Voucher Pulsa?.. kode yang Anda gosok dalam voucher tersebut merupakan implementasi dari bilangan random, sehingga tidak ada duplikat Voucher Code sehingga Operator tidak dapat mengalami kerugian akibat dari suatu pihak yang menebak-nebak kode voucher... okeh...

1. Yang paling sederhana adalah menggunakan math.random dari java :

A. Menampilkan Bilangan Random

import java.math.*;

package pelajaranjava;
import java.math.*;

public class Main {


public static void main(String[] args) {

double angka = Math.random()*11;

System.out.println(Math.ceil(angka));


}

}

Penjelasan Skrip


Math.random()*11; =Menghasilkan nilai random dengan nilai yang paling terbesar adalah 10


Math.ceil(angka); =Menghasilkan bilangan bulat terkecil dari variabel angka yang bertipe Double yang menampung nilai random


double angka = Math.random()*11; =Menghasilkan nilai random dengan nilai yang paling terbesar adalah 10 kemudian ditampung oleh variabel angka dengan tipe double


System.out.println(Math.ceil(angka)); = Menampilkan bilangan bulat terkecil dari variabel angka

B. Mencari Nilai Maksimum dari Bilangan Random 1-100

import javax.swing.*;
public class Maksimum
{
public static void main (String[ ] args)
{
int[ ] nilai = new int [10];
int nilaiMaks;


//Memperoleh bilangan random

for (int i = 0; i < 10; i++) nilai[i] = (int) (100 * Math.random()); // Mencari maksimum nilaiMaks = nilai[0];
for (int i = 0; i nilaiMaks) nilaiMaks = nilai[i]; }
System.out.println(“Nilai maksimum = ” + nilaiMaks); } }


2. Untuk membuat/menampilkan bilangan random dengan java adalah dengan menggunakan class java.util.Random Pertama Kita buat dulu Kelas untuk meng-generate bilangan random nya:

1. import java.util.*;
2.
3. public class RandomGenerator {
4. private static Random random = new Random();
5. 6. public static String generateActivationCode(int length) {
7. String code = new String("");
8. for (int i = 0; i < length; i++) {
9. code += (char) (random.nextInt(10) + '0');
10. }
11. return code;
12. }
13. }


Setelah itu Kita Bbuat Main Class untuk memanggil class diatas :
  1. public class TestRandom {
  2. public static void main(String[] args) {
  3. RandomGenerator random = new RandomGenerator();
  4. for (int i = 0; i < 10; i++) {
  5. System.out.println("" + random.generateActivationCode(6) + "");
  6. }
  7. }
  8. }
Contoh di atas adalah untuk men-generate bilangan random 6 digit sebanyak 10 bilangan. Untuk men-generate bilangan random dengan jumlah digit tertentu dan dalam jumlah tertentu kita tinggal mengubah parameter dan jumlah pengulangannya.

Hasilnya :


3. Berikut ada 1 contoh lagi penggunaan dari class Random

  1. import java.util.Random;
  2. public class ContohRandom {
  3. public static void main(String[] args) {
  4. Random objRandom = new Random();
  5. //Cetak 10 pasangan angka random Float dan Gaussian
  6. for (int i = 0; i < 10; i++) {
  7. System.out.println("Random Float = " + objRandom.nextFloat());
  8. System.out.println("Random Gaussian = " + objRandom.nextGaussian());
  9. }
  10. }
  11. }
Hasilnya sebagai beriku : (tiap kali eksekusi maka berubah-ubah hasilnya - random)

  1. Random Float = 0.46137494
  2. Random Gaussian = 0.19129395789596115
  3. Random Float = 0.79352367
  4. Random Gaussian = 0.2553390959612054
  5. Random Float = 0.6459138
  6. Random Gaussian = -1.8578221330769598
  7. Random Float = 0.7674308
  8. Random Gaussian = 0.13942810028379926
  9. Random Float = 0.39630258
  10. Random Gaussian = -1.8724192706456557
  11. Random Float = 0.95785886
  12. Random Gaussian = 0.8083143472565751
  13. Random Float = 0.6814118
  14. Random Gaussian = -1.4436771221509253
  15. Random Float = 0.17211175
  16. Random Gaussian = -1.4963856699604225
  17. Random Float = 0.0025584698
  18. Random Gaussian = 0.7271306516826876
  19. Random Float = 0.28490603
  20. Random Gaussian = -0.07706790659581358
4. Saya juga menemukan tutorial penerapan dari random number untuk implementasi pada keamanan password ataupun Kriptografi, berikut contoh nya, menggunakan SecureRandom :

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class SecureRandomNumber {

private static final String SHA1_PRNG = "SHA1PRNG";

// Default here is 64-bits of random goodness.
private static final int DEFAULT_RANDOM_SIZE = 64;

private static final char HEX_DIGIT [] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};

// This ins't thread safe but we probably don't really care
// since all we're doing is reading a bunch of random numbers
// out of the generator.
private static final SecureRandom sRandom__;
static {
try {
sRandom__ = SecureRandom.getInstance( SHA1_PRNG );
} catch ( NoSuchAlgorithmException e ) {
throw new Error(e);
}
}

/**
* Get the number of next random bits in this SecureRandom
* generators' sequence.
* @param size how many random bits you want
* @return
* @throws IllegalArgumentException if the arg isn't divisible by eight
*/
public static byte [] getNextSecureRandom ( int bits ) {

// Make sure the number of bits we're asking for is at least
// divisible by 8.
if ( (bits % 8) != 0 ) {
throw new IllegalArgumentException("Size is not divisible " +
"by 8!");
}

// Usually 64-bits of randomness, 8 bytes
final byte [] bytes = new byte[ bits / 8 ];

// Get the next 64 random bits. Forces SecureRandom
// to seed itself before returning the bytes.
sRandom__.nextBytes(bytes);

return bytes;

}

/**
* Convert a byte array into its hex String
* equivalent.
* @param bytes
* @return
*/
public static String toHex ( byte [] bytes ) {

if ( bytes == null ) {
return null;
}

StringBuilder buffer = new StringBuilder(bytes.length*2);
for ( byte thisByte : bytes ) {
buffer.append(byteToHex(thisByte));
}

return buffer.toString();

}

/**
* Convert a single byte into its hex String
* equivalent.
* @param b
* @return
*/
private static String byteToHex ( byte b ) {
char [] array = { HEX_DIGIT[(b >> 4) & 0x0f],
HEX_DIGIT[b & 0x0f] };
return new String(array);
}

/**
* An example showing how to use SecureRandomNumber.
* @param args
*/
public static void main ( String [] args ) {

for ( int i = 0; i < randbytes =" SecureRandomNumber.">

Embed System - Sistem Terintegrasi

Di Dalam konteks sistem informasi, sistem terintegrasi (integrated system) merupakan sebuah rangkaian proses untuk menghubungkan beberapa sistem-sistem komputerisasi dan software aplikasi baik secara fisik maupun secara fungsional. Sistem terintegrasi akan menggabungkan komponen sub-sub sistem ke dalam satu sistem dan menjamin fungsi-fungsi dari sub sistem tersebut sebagai satu kesatuan sistem.

Sebuah Embedded system adalah sistem komputer yang dirancang untuk melakukan satu atau beberapa fungsi khusus dengan komputasi real-time. Embedded sistem merupakan satu kesatuan dari perangkat yang lengkap termasuk hardware dan komponen mekanis, namun tidak seperti komputer yang umum, misalnya komputer pribadi (PC) yang dirancang untuk menjadi fleksibel dan untuk memenuhi berbagai kekeperluan. Embedded system digunakan untuk mengontrol perangkat sesuai dengan rancangan awalnya.


Sistem terintegrasi merupakan tantangan menarik dalam software development karena pengembangannya harus terus mengacu pada konsistensi sistem, agar sub-sub sistem yang sudah ada dan tetap dimanfaatkan secara operasional masih tetap berfungsi sebagaimana mestinya baik ketika proses mengintegrasikan sistem maupun setelah terintegrasi. Tantangannya adalah bagaimana merancang sebuah mekanisme mengintegrasikan sistem-sistem tersebut dengan effort paling minimal – bahkan jika diperlukan, tidak harus melakukan refactoring atau re-developing lagi sistem-sistem yang sudah ada.


Ada beberapa metode yang dapat dipergunakan dalam membangun sistem terintegrasi, sebagaimana yang direferensikan berdasarkan artikel dari Wikipedia yaitu :

* Vertical Integration, merupakan proses mengintegrasikan sub-sub sistem berdasarkan fungsionalitas dengan menghubungkan sub-sub sistem yang sudah ada tersebut supaya bisa berinteraksi dengan sistem terpusat dengan tetap berpijak pada arsitektur sub sistem yang lama. Metode ini memiliki keuntungan yaitu dapat dilakukan dengan cepat dan hanya melibatkan beberapa entitas development yang terkait dalam proses pembuatan sistem lama. Kelemahannya, metode ini tidak memungkinkan untuk mengimplementasikan fungsi-fungsi baru atau proses bisnis baru ke dalam sub-sistem yang sudah ada – karena effort lebih tinggi ada di proses “mempelajari” arsitektur sistem lama dan menjadikannya acuan untuk membuat sistem terintegrasi. Untuk menghadirkan ekspansi fungsionalitas atau proses bisnis baru adalah harus membuat sub-sistem baru.
* Star Integration, atau lebih dikenal sebagai spaghetti integration, adalah proses mengintegrasikan sistem dengan cara menghubungkan satu sub sistem ke semua sub-sub sistem lainnya. Sebuah fungsi bisnis yang diimplementasikan dalam sebuah sub sistem akan di-broadcast ke semua sub-sub sistem lain yang dependen terhadap fungsi bisnis tersebut supaya dapat dipergunakan sebagaimana mestinya. Untuk integrasi sistem dengan ruang lingkup kecil atau menengah dan dengan pemisahan fungsi bisnis yang jelas dan spesifik, metode integrasi ini layak untuk dipertimbangkan. Namun jika fungsi bisnis banyak terlibat di beberapa sub sistem secara dependen, pada akhir proses integrasi sistem akan terlihat sedikit “kekacauan” dalam diagram – proses interkoneksi antar sub sistem akan tampak seperti spaghetti. Efeknya, biaya perawatan dan ekspansi sistem di masa yang akan datang akan memerlukan effort yang sangat berat untuk mempelajari skema integrasi sistem berikut dependency-nya.
* Horizontal Integration, atau ada yang mengistilahkan dengan Enterprise Service Bus (ESB), merupakan sebuah metode yang mengintegrasikan sistem dengan cara membuat suatu layer khusus yang berfungsi sebagai interpreter, dimana semua sub-sub sistem yang sudah ada akan berkomunikasi ke layer tersebut. Model ini lebih menawarkan fleksibilitas dan menghemat biaya integrasi, karena yang perlu difokuskan dalam implementasi proses pengintegrasian hanya layer interpreter tersebut. Untuk menangani ekspansi proses bisnis juga hanya perlu diimplementasikan di layer interpreter itu juga, dan sub sistem baru yang akan menangani interface dari proses bisnis ekstensi tersebut akan berkomunikasi langsung ke layer dan layer akan menyediakan keperluan-keperluan data/interface untuk sub sistem lain yang memerlukannya.

Metode Enterprise Service Bus (ESB) ini – seperti yang dilansir dari Wikipedia juga – memiliki banyak kelebihan jika diadopsi dalam merancang arsitektur sistem terintegrasi, yaitu antara lain :

1. Lebih cepat dalam melakukan penyesuaian dengan sistem yang telah ada
2. Meningkatkan fleksibilitas, mudah untuk diperbaharui mengikuti perubahan keperluan sistem (system requirements)
3. Membuat standar sistem sehingga bisa diaplikasikan di sub sistem mana pun
4. Porsi pekerjaan software development lebih banyak di “konfigurasi” daripada “menulis code” untuk integrasi
5. Dapat diterapkan mulai ruang lingkup kecil hingga di level enterprise

Namun metode horizontal integration atau Enterprise System Bus (ESB) yang tampaknya ideal ini bukan berarti tidak ada kelemahan. Beberapa kelemahan yang cukup signifikan pengaruhnya antara lain :

1. Pembuatan standar sistem dalam Enterprise Message Model banyak berkutat di aspek analisis dan manajerial, biaya analisis benar-benar tinggi karena perlu berkolaborasi dengan analis-analis yang bertanggung jawab terhadap arsitektur dan desain sistem-sistem yang telah ada.
2. Secara khusus memerlukan perangkat keras (hardware) yang spesifik, seperti misalnya business-logic-server yang independen dan tidak integral dengan salah satu atau sebagian dari sub sistem yang telah ada.
3. Perlu tambahan tenaga (SDM) berupa Middleware Analyst yang akan mengkonfigurasi, merawat, dan mengoperasikan layer Enterprise Service Bus.
4. Karena biasanya ESB mempergunakan XML sebagai bahasa komunikasi antar sistem, tentu akan memerlukan resources dan komputasi berlebih untuk melakukan parsing-reparsing dalam komunikasi data.
5. Memerlukan effort yang cukup tinggi dalam mengimplementasikan ESB karena cukup banyak layer/tingkatan aplikasi yang harus ditangani, tidak hanya aplikasi-aplikasi interface dari sub-sub sistem saja, melainkan juga layer interpreter yang juga memiliki karakteristik sebagai aplikasi juga.

Embedded system dikendalikan oleh satu atau lebih prosesor yang biasanya berupa mikrokontroler atau Pengolah Sinyal Digital (Digital Signal Processing). Dirancang untuk menangani tugas tertentu, yang mungkin memerlukan prosesor yang sangat kuat. Misalnya, pengendalian lalu lintas udara, meskipun melibatkan komputer mainframe.
Karena embedded sistem didedikasikan untuk tugas-tugas tertentu, rancangannya dapat dioptimalkan untuk mengurangi ukuran dan biaya produk dan meningkatkan kehandalan dan kinerja. Beberapa embedded system diproduksi secara massal dengan pertimbangan dari skala ekonomi.
Contoh aplikasi dari embedded system diantaranya perangkat portable seperti jam digital dan MP3 player. Dan untuk aplikasi yang lebih besar misalnya seperti pengontrol lampu lalu lintas, pengontrol pabrik, atau sistem pengendalian pembangkit listrik tenaga nuklir. Kompleksitasnya bervariasi mulai dari yang sederhana dengan satu chip mikrokontroler hingga aplikasi yang sangat rumit dengan beberapa unit, peripheral dan jaringan yang besar terpasang di dalam suatu wadah khusus.

TIPE MODEL

Apa itu Model?
  1. Suatu representasi sederhana dari sebuah sistem (atau proses atau
    teori), bukan sistem itu sendiri.
  2. Model-model tidak harus memiliki seluruh atribut; mereka disederhanakan,
    dikontrol, digeneralisasi, atau diidealkan.
  3. Untuk sebuah model yang akan digunakan, seluruh sifat-sifat relevantnya
    harus ditetapkan dalam suatu cara yang praktis, dinyatakan dalam
    suatu set deksripsi terbatas yang masuk akal (reasonably).
  4. Sebuah model harus divalidasi.
  5. Setelah divalidasi, sebuah model dapat digunakan untuk menyelidiki
    danmemprediksi perilaku-perilaku (sifat) sistem, atau menjawab ”whatif
    questions” untuk mempertajam pemahaman, pelatihan, prediksi, dan
    evaluasi alternatif.
Model dibagi menjadi 2 Kategori Besar yaitu :
1. Model Fisik / Physical Model :
- adalah suatu model yang dapat terlihat oleh mata dan juga terdefinisi oleh pikiran. Model fisik dibagi menjadi :
a. Model Ikonik (Iconic model)
Model iconik adalah perwakilan fisik dari beberapa hal baik dalam bentuk ideal maupun dalam skala yang berbeda. Model iconik memiliki karakteristik yang sama dengan hal yang diwakili, dan terutama sangat sesuai untuk menerangkan kejadian pada waktu yang spesifik. Model iconik dapat berdimensi dua (foto dan peta) atau tiga dimensi (prototip mesin dan alat).

b. Model Analog
Model Analog dapat mewakili situasi dinamis, yaitu keadaan berubah menurut waktu. Model analog lebih sering dipakai daripada model ikonik karena kemampuannya untuk mengetengahkan karakteristik dan kejadian yang dikaji. Contoh model analog adalah kurva permintaan, kurva distribusi frekuensi pada statistik dan diagram alir.

2. Model Simbolik (Mathematic Model)
Model simbolik adalah model yang menggunakan simbol-simbol untuk menggambarkan suatu sistem. Misalnya diagram alir proses, diagram tata letak fasilitas, diagram organisasi. Model simbolik banyak digunakan untuk dokumentasi pada perancangan suatu sistem dan proses rekayasa ulang.
Kelamahan model simbolik :
- Sangat sederhana / tidak detil
- Hanya memberikan gambaran elemen-elemen, jenis aktivitas dan hubungan antar elemen tetapi tidak dapat menggambarkan dinamika sistem.
Model simbolik dikelompokan menjadi :
a. Model ststik
Model statik myaitu repreesentatsi sistem pada waktu tertentu, atau model yang digunakan untuk mempersentasikan sistem dimana waktu tidak mempunyai peranan. Model statik memberikan informasi tentang peubah-peubah model hanya pada titik tunggal dari waktu. Contoh model statik yaitu simulasi Monte Carlo (simulasi perilaku sistem Fisika dan Matematika).
b. Model dinamik
Model dinamik yaitu representasi sistem sepanjang pergantian waktu ke waktu. Model dinamik lebih sulit dan mahal pembuatannya, namun memberikan kekuatan yang lebih tinggi pada analisis dunia nyata. Contohnya sistem Conveyor di pabrik.

c. Model Deterministik
Model Deterministik yaitu model simulasi yang tidak mengandung komponen yang sifatnya probabilistik (random) dan output yang telah dapat ditentukan begitu sejumlah input dan hubungan tertentu dimasukkan. Output yang diperoleh akan tetap sama jika inputnya sama walaupun diproses ulang. Model determinsitik memusatkan penelaahannya pada faktor-faktor kritis yang diasumsikan mempunyai nilai eksak tertentu pada waktu yang spesifik. Contoh model pada program Linear dan PERT.

d. Model Probabilistik
Model Probabilistik adalah model simulasi yang mengandung input-input probabilistik (random) dan output yang dihasilkan pun sifatntya random atau model yang mendasarkan pada teknik peluang dan memperhitungkan ketidakmenetuan (uncertanty).

e. Model Desktiptif
Model Desktiptif yaitu sebuah model dibuat hanya untuk semacam deskripsi matematis dari kondisi dunia nyata dan banyak dipakai untuk mempermudah penelaahan suatu permasalahan. Model ini dapat diselesaikan secara eksak serta mampu mengevaluasi hasilnya dari berbagai pilihan data input.

f. Model Optimalisasi
Model Optimalisasi adalah model perbandingan antara alternatif yang dilakukan. Solusi dari model optimalisasi adalah merupakan nilai optimum yang tergantung pada nilai input. Contoh Non-Linear programming.