Jun 13

T0553 – SISTEM MULTIMEDIA

LAPORAN PEMBUATAN PROJECT APLIKASI

“Nightmare”

 logo BINUS FC bg white

 

Kelas : 04PLT

Kelompok 3 

David Febryanto (1601222070)

Edward Ivan Fadli (1601218874)

Sudiarto Winata (1601223786)

Kenzu Pangestu (1601224864)

Wira Adi Putra(1601223451)

———————————————————————————————————————————————————-

A. Deskripsi Aplikasi

            Aplikasi yang kami buat pada kali ini memiliki keterkaitan dengan project video yang telah kami buat sebelumnya, yaitu bertemakan horror. Nama aplikasi yang kami buat saat ini adalah Nightmare Aplikasi ini berawal dari tampilan welcome yang memberikan suasana yang menyeramkan, sesuai dengan temanya agar dapat memberikan suasana horror bagi para user.

            Setelah user masuk atau meng-klik enter, user dapat melihat trailer, detail-detail dan rating dari lima film horror terbaik secara terpisah. Selain itu, user juga dapat melihat review dari kelima film tersebut secara keseluruhan melalui pilihan “Our review”, yang kemudian akan menampilkan video yang merupakan project video yang telah kami buat sebelumnya. Terakhir, “Click to subscribe” dapat digunakan juga untuk berlangganan secara langsung pada aplikasi Nightmare untuk mendapatkan informasi terbaru ke depannya.

B. Pembuatan Aplikasi

Aplikasi Multimedia yang kami buat ini menggunakan Adobe Flash CS3 Professional version 9.0 sebagai toolnya.

2014-06-08_175234

 

2014-06-13_094646

Gambar diatas adalah saat kami melakukan pengaturan layer dan frame dalam aplikasi yang kami buat.

Pada gambar di bawah ini, kami menggunakan script pada pembuatan aplikasi ini supaya bisa menjalankan fungsi pada button serta pengaturan pada frame.

2014-06-08_175359

C. Screenshot Aplikasi 

Screenshot (144)

[1] Gambar diatas adalah bagian awal dari aplikasi Nightmare. Ketika user melakukan klik pada logo Nightmare, maka user akan masuk ke bagian credits. Logo Nightmare tidak hanya ada di bagian ini, namun ada di bagian lain dan akan memberikan akses yang sama juga (ke bagian credits). Ketika pintu di-klik, maka user akan masuk ke bagian selanjutnya.

Screenshot (149)

[2] Gambar diatas adalah bagian credits ketika logo Nightmare di-klik. Pada bagian Credits ini terdapat nama-nama anggota kelompok pembuat aplikasi Nightmare ini. User dapat meng-klik Back to home apabila ingin kembali lagi ke halaman utama.

Note : Logo Nightmare pada tampilan diatas ini tidak memberikan akses apa-apa.

Screenshot (145)

[3] Gambar diatas ini adalah bagian Home pada aplikasi Nightmare. Pada bagian Home ini, terdapat tombol “Click here to subscribe” dan “Select a Movie” serta terdapat logo Nightmare untuk menampilkan credits.

Click here to subscribe : Akses ke form subscribe. User akan diminta untuk mengisi nama dan email agar dapat berlangganan dengan Nightmare.

Select a Movie : User memilih film sesuai dengan kemauan sehingga dapat melihat trailer dan detailnya. Terdapat “Our Review” dalam pilihan tersebut yang berarti itu adalah video kompilasi dari 5 film horror yang kami sediakan dan dibuat dalam bentuk review singkat.

Screenshot (147)

[4] Gambar diatas adalah tampilan apabila user meng-klik Our Reviews saat memilih film. Kelima film horror akan ditampilkan dan user dapat melihat trailer secara keseluruhan beserta review singkat dari kami mengenai kelima film tersebut secara personal.

Screenshot (146)

[5] Gambar diatas merupakan salah satu bagian pada saat salah satu film di-klik. Saat film di-klik maka akan muncul cover film, judul, detail, rating, logo Nightmare, dan tombol subscribe.

Screenshot (148)

[6] Gambar diatas merupakan bagian yang muncul ketika user melakukan klik pada button “Click here to subscribe”. Pada bagian ini terdapat form yang  berisi nama dan email. Kami memberikan validasi pada nama untuk tidak boleh menginput angka dan kami melakukan validasi pada email juga untuk diinput dengan format yang benar / sesuai dengan email. Setelah itu, anda dapat melakukan subscribe dengan meng-klik Subscribe.

Screenshot (150)

[7] Setelah melakukan klik pada button “Subscribe” maka akan muncul tulisan “Thanks for subscribe” dan anda bisa melakukan klik pada button Back to home. Dengan demikian anda telah berlangganan dengan Nightmare.

[8] Logo Aplikasi kami, Nightmare 

Nightmare logo

 

 

 

 

 

 

 

 

 

Link Download Aplikasi “Nightmare” :  Nightmare Project

May 31

Rangkuman Pertemuan 22 mengenai Natural Language Processing : 

1. Text Classification 

Text Classification atau Text Categorization adalah suatu proses pengelompokan dokumen, yang dalam tugas akhir ini adalah konten web page, ke dalam beberapa kelas yang telah ditentukan. Jika tidak ada overlap antar kelas, yaitu setiap dokumen hanya dikelompokan kedalam satu kelas maka text categorization ini disebut single label text categorization . Text categorization bertujuan untuk menemukan model dalam mengkategorisasikan teks natural language. Model tersebut akan digunakan untuk menentukan kelas dari suatu dokumen.

Beberapa metode text categorization yang sering dipakai antara lain : k- Nearest Neighbor, Naïve Bayes, Support Vektor Machine, Decision Tree, Neural Networks, Boosting.

Dalam pengaplikasian text categorization terdapat beberapa tahap, yaitu : 

>>Preprocessing

Tahap pertama dalam text categorization adalah dokumen preprocessing adalah :

1. Ekstrasi Term

Ekstrasi term dilakukan untuk menentukan kumpulan term yang mendeskripsikan dokumen. Kumpulan dokumen di parsing untuk menghasilkan daftar term yang ada pada seluruh dokumen. Daftar term yang dihasilkan disaring dengan membuang tanda baca, angka, simbol dan stopwords. Dalam tugas akhir ini akan dibahas juga mengenai pengaruh stopwords removal terhadap hasil klasifikasi. Berikut ini merupakan penjelasan singkat mengenai stopwords.

Kebanyakan bahasa resmi di berbagai negara memiliki kata fungsi dan kata sambung seperti artikel dan preposisi yang hampir selalu muncul pada dokumen teks. Biasanya kata-kata ini tidak memiliki arti yang lebih di dalam memenuhi kebutuhan seorang searcher di dalam mencari informasi. Kata-kata tersebut (misalnya a, an, dan on pada bahasa Inggris) disebut sebagai Stopwords.

Sebuah sistem Text Retrieval biasanya disertai dengan sebuah Stoplist. Stoplist berisi sekumpulan kata yang ‘tidak relevan’, namun sering sekali muncul dalam sebuah dokumen. Dengan kata lain Stoplist berisi sekumpulan Stopwords.

Stopwords removal adalah sebuah proses untuk menghilangkan kata yang ‘tidak relevan’ pada hasil parsing sebuah dokumen teks dengan cara membandingkannya dengan Stoplist yang ada.

2. Seleksi Term

Jumlah term yang dihasilkan pada feature ekstrasi dapat menjadi suatu data yang berdimensi cukup besar. Karena dimensi dari ruang feature merupakan bag-of-words hasil pemisahan kata dari dokumennya. Untuk itu perlu dilakukan feature selection untuk mengurangi jumlah dimensi.

3. Representasi Dokumen

Supaya teks natural language dapat digunakan sebagai inputan untuk metode klasifikasi maka teks natural language diubah kedalam representasi vektor. Dokumen direpresentasikan sebagai vektor dari bobot term, dimana setiap term menggambarkan informasi khusus tentang suatu dokumen. Pembobotan dilakukan dengan melakukan perhitungan TFIDF. Term beserta bobotnya kemudian disusun dalam bentuk matrik.

>>Training Phase

Tahap kedua dari text categorization adalah training. Pada tahap ini system akan membangun model yang berfungsi untuk menentukan kelas dari dokumen yang belum diketahui kelasnya. Tahap ini menggunakan data yang telah diketahui kelasnya (data training) yang kemudian akan dibentuk model yang direpresantasikan melalui data statistik berupa mean dan standar deviasi masing-masing term pada setiap kelas.

>>Testing Phase

Tahap terakhir adalah tahap pengujian yang akan memberikan kelas pada data testing dengan menggunakan model yang telah dibangun pada tahap training. Tujuan dilakukan testing adalah untuk mengetahui performansi dari model yang telah dibentuk. Dengan beberapa parameter pengukuran yaitu akurasi, precision, recall, dan f-measure.

proses kategorisasi teks

 

2. Information Retrieval

Information Retrieval digunakan untuk menemukan kembali informasi-informasi yang relevan terhadap kebutuhan pengguna dari suatu kumpulan informasi secara otomatis. Salah satu aplikasi umum dari sistem temu kembali informasi adalah search-engine atau mesin pencarian yang terdapat pada jaringan internet. Pengguna dapat mencari halaman-halaman Web yang dibutuhkannya melalui mesin tersebut.

Ukuran efektifitas pencarian ditentukan oleh precision dan recall. Precision adalah rasio jumlah dokumen relevan yang ditemukan dengan total jumlah dokumen yang ditemukan oleh search-engine. Precision mengindikasikan kualitas himpunan jawaban, tetapi tidak memandang total jumlah dokumen yang relevan dalam kumpulan dokumen.

\mbox{Precision}=\frac{|\{\mbox{relevant documents}\}\cap\{\mbox{documents retrieved}\}|}{|\{\mbox{documents retrieved}\}|}

Recall adalah rasio jumlah dokumen relevan yang ditemukan kembali dengan total jumlah dokumen dalam kumpulan dokumen yang dianggap relevan.

\mbox{Recall}=\frac{|\{\mbox{relevant documents}\}\cap\{\mbox{documents retrieved}\}|}{|\{\mbox{relevant documents}\}|}

Dalam Information Retrieval, mendapatkan dokumen yang relevan tidaklah cukup. Tujuan yang harus dipenuhi adalah bagaimana mendapatkan doukmen relevan dan tidak mendapatkan dokumen yang tidak relevan. Tujuan lainnya adalah bagaimana menyusun dokumen yang telah didapatkan tersebut ditampilkan terurut dari dokumen yang memiliki tingkat relevansi lebih tingi ke tingkat relevansi rendah. Penyusunan dokumen terurut tersebut disebut sebagai perangkingan dokumen. Model Ruang Vektor dan Model Probabilistik adalah 2 model pendekatan untuk melakukan hal tersebut.

Model ruang vektor dan model probabilistik adalah model yang menggunakan pembobotan kata dan perangkingan dokumen. Hasil retrieval yang didapat dari model-model ini adalah dokumen terangking yang dianggap paling relevan terhadap query.

Dalam model ruang vektor, dokumen dan query direpresentasikan sebagai vektor dalam dalam ruang vektor yang disusun dalam indeks term, kemudian dimodelkan dengan persamaan geometri. Sedangkan model probabilistik membuat asumsi-asumsi distribusi term dalam dokumen relevan dan tidak relevan dalam orde estimasi kemungkinan relevansi suatu dokumen terhadap suatu query.

 

3. HITS Algorithm

Hyperlink-Induced Topic Search (HITS) adalah sebuah algoritma analisis link halaman Web, yang merupakan pendahulu dari PageRank. Ide di balik Dengan kata lain, sebuah hub baik mewakili halaman yang menunjuk ke halaman lain, dan otoritas yang baik mewakili halaman yang dihubungkan oleh banyak hub berbeda.

Algoritma ini melakukan serangkaian iterasi, masing-masing terdiri dari dua langkah dasar, yaitu :

  1. Authority Update :
    Memperbarui skor Authority setiap node untuk menjadi sama dengan jumlah dari Hub Skor dari setiap node yang menunjuk ke itu. Artinya, node diberi skor otoritas tinggi dengan menjadi terhubung ke halaman yang dikenali sebagai hub untuk informasi.
  1. Hub Update :
    Memperbarui setiap node Hub Skor menjadi sama dengan jumlah dari Otoritas Skor dari setiap node yang menunjuk ke. Artinya, node diberi skor tinggi hub dengan menghubungkan ke node yang dianggap otoritas pada subjek.

Algoritma Hyperlink Induced Topic Search (HITS) Kleinberg memberikan gagasan baru tentang hubungan antara hubs dan authorities. Dalam algoritma HITS, setiap simpul (situs) p diberi bobot hub (xp) dan bobot authority (yp).

Pada akhirnya, algoritma HITS ini menghasilkan sebuah daftar singkat yang terdiri dari situs-situs dengan bobot hub terbesar serta situs-situs dengan bobot authority terbesar. Yang menarik dari algoritma HITS adalah: setelah memanfaatkan kata kunci (topik yang dicari) untuk membuat himpunan akar (root) R, algoritma ini selanjutnya sama sekali tidak mempedulikan isi tekstual dari situs-situs hasil pencarian tersebut.

Dengan kata lain, HITS murni merupakan sebuah algoritma berbasis link setelah himpunan akar terbentuk. Walaupun demikian, secara mengejutkan HITS memberikan hasil pencarian yang baik untuk banyak kata kunci.

Sebagai contoh, ketika dites dengan kata kunci “search engine”, lima authorities terbaik yang dihasilkan oleh algoritma HITS adalah Yahoo!, Lycos, AltaVista, Magellan, dan Excite – padahal tidak satupun dari situs-situ tersebut mengandung kata “search engine”.

 

4. Prolog

Prolog  adalah singkatan daripada PROgramming in LOGic. Prolog merupakan  satu ide yang dicetuskan pada awal 1970an untuk menggunakan logika  sebagai bahasa pemprograman. Mereka yang bertanggungjawab dalam  pengembangan ide ini ialah Robert Kowalski dari Edinburgh dalam aspek  teori dan Colmerauer dari Marseilles dalam aspek implementasi.

Prolog biasanya dikaitkan dengan berlogika dan merupakan bahasa pemprograman untuk  perhitungan simbolik dan tak-berangka. Prolog paling sesuai untuk  menyelesaikan masalah yang berkaitan dengan objek dan hubungan  antara objek, masalah persamaan corak, masalah penjejakan ke  belakang dan masalah yang informasinya tidak lengkap.

Algoritma dalam Prolog terdiri dari logika dan kontrol. Logika merupakan  fakta dan peraturan yang menerangkan apa yang seharusnya dilakukan  oleh algoritma. Sedangkan kontrol merupakan cara algoritma bisa Munir: Pengenalan Bahasa Prolog 2
diimplementasikan dengan menggunakan peraturan. Sintaks yang  dibentuk dalam Prolog adalah dalam bentuk klausa atau formula First  Order Predicate Logic.

Prolog adalah bahasa pemrograman logika atau di sebut juga sebagai bahasa non-procedural. Namanya diambil dari bahasa Perancis programmation en logique (pemrograman logika).  Bahasa ini diciptakan oleh Alain Colmerauer dan Robert Kowalski sekitar tahun 1972 dalam upaya untuk menciptakan suatu bahasa pemrograman yang memungkinkan pernyataan logika alih-alih rangkaian perintah untuk dijalankan komputer.

Berbeda dengan bahasa pemrograman yang lain, yang menggunakan algoritma konvensional sebagai teknik pencariannya seperti pada Delphi, Pascal, BASIC, COBOL danbahasa pemrograman yang sejenisnya, maka prolog menggunakan teknik pencarian yang di sebut heuristik (heutistic) dengan menggunakan pohon logika.

http://www.binus.ac.id/

May 08

1. Apa yang dimaksud supervised learning, unsupervised learning dan reinforcement learning?berikan contoh masing-masing?

Jawaban : 

Supervised learning merupakan suatu pembelajaran yang terawasi dimana jika output yang diharapkan telah diketahui sebelumnya. Biasanya pembelajaran ini dilakukan dengan menggunakan data yang telah ada. Pada metode ini, setiap pola yang diberikan kedalam jaringan saraf tiruan telah diketahui outputnya. Satu pola input akan diberikan ke satu neuron pada lapisan input. Pola ini akan dirambatkan di sepanjang jaringan syaraf hingga sampai ke neuron pada lapisan output. Lapisan output ini akan membangkitkan pola output yang nantinya akan dicocokkan dengan pola output targetnya. Apabila terjadi perbedaan antara pola output hasil pembelajaran dengan pola output target, maka akan muncul error. Dan apabila nilai error ini masih cukup besar, itu berarti masih perlu dilakukan pembelajaran yang lebih lanjut.

Contoh algoritma jaringan saraf tiruan yang menggunakan metode supervised learning adalah :

– Hebbian (Hebb rule)

– Perceptron

– Adaline

– Boltzman

– Hapfield

– Backpropagation.

Unsupervised learning merupakan pembelajaran yang tidak terawasi yang tidak memerlukan target output. Pada metode ini tidak dapat ditentukan hasil seperti apa yang diharapkan selama proses pembelajaran. Nilai bobot yang disusun dalam proses range tertentu tergantung pada nilai output yang diberikan. Tujuan metode uinsupervised learning ini agar kita dapat mengelompokkan unit-unit yang hampir sama dalam satu area tertentu. Pembelajaran ini biasanya sangat cocok untuk klasifikasi pola.

Contoh algoritma jaringan saraf tiruan yang menggunakan metode unsupervised ini adalah :

– Competitive

– Hebbian

– Kohonen

– LVQ(Learning Vector Quantization) 

– Neocognitron

Unsupervised-Learning2

Reinforcement Learning adalah salah satu paradigma baru di dalam learning theory. RL  dibangun dari proses mapping (pemetaan) dari situasi yang ada di environment (states)  ke bentuk aksi (behavior) agar dapat memaksimalkan reward. Agent yang bertindak  sebagai sang learner tidak perlu diberitahukan behavior apakah yang akan sepatutnya  dilakukan, atau dengan kata lain, biarlah sang learner belajar sendiri dari  pengalamannya. Ketika ia melakukan sesuatu yang benar berdasarkan rule yang kita
tentukan, ia akan mendapatkan reward, dan begitu juga sebaliknya.

RL secara umum terdiri dari 4 komponen dasar, yaitu :
1. Policy : kebijaksanaan
2. Reward function
3. Value function
4. Model of environment

Policy adalah fungsi untuk membuat keputusan dari agent yang menspesifikasikan  tindakan apakah yang mungkin dilakukan dalam berbagai situasi yang ia jumpai. Policy  inilah yang bertugas memetakan perceived states ke dalam bentuk aksi. Policy bisa  berupa fungsi sederhana, atau lookup table. Policy ini merupakan inti dari RL yang  sangat menentukan behavior dari suatu agent.

Reward function mendefinisikan tujuan dari kasus atau problem yang dihadapi. Ia  mendefinisikan reward and punishment yang diterima agent saat ia berinteraksi dengan  environment. Tujuan utama dari rewar d function ini adalah memaksimalkan total  reward pada kurun waktu tertentu setelah agent itu berinteraksi.

Value function menspesifikasikan fungsi akumulasi dari total reward yang didapatkan  oleh agent. Jika reward function berbicara pada masing-masing partial time dari proses  interaksi, value function berbicara pada long-term dari proses interaksi.

Model of environment adalah sesuatu yang menggambarkan behavior dari environment.  Model of environment ini sangat berguna untuk mendesain dan merencanakan behavior  yang tepat pada situasi mendatang yang memungkinkan sebelum agent sendiri  mempunyai pengalaman dengan situasi itu. Saat masa-masa awal RL dikembangkan,  model of environment yang ada berupa trial and error. Namun modern RL sekarang  sudah mulai menjajaki spektrum dari low -level, trial and error menuju high-level,
deliberative planning.

Reinforcement-Learning3

2. Apa yang dimaksud dengan Learning Decision Tree dan berikan contohnya?

Learning Decision Tree adalah salah satu  metode belajar yang sangat populer dan banyak digunakan secara praktis. Metode ini  merupakan metode yang berusaha  menemukan fungsi-fungsi pendekatan yang  bernilai diskrit dan tahan terhadap data-data  yang terdapat kesalahan (noisy data) serta  mampu mempelajari ekspresi-ekspresi  disjunctive (ekspresi OR). Iterative  Dychotomizer version 3 (ID3) adalah salah  satu jenis Decision tree yang sangat populer.

Konsep Decision Tree adalah mengubah data menjadi pohon keputusan  (decision tree) dan aturan-aturan keputusan  (rule).

DATA >> DECISION TREE >> RULE

Decision tree adalah struktur flowcart  yang mempunyai tree(pohon), dimana setiap  simpul internal menandakan suatu tes  atribut,setiap cabang merepresentasikan hasil  tes, dan simpul daun merepresentasikan kelas  atau distribusi kelas. Alur pada decision tree  ditelusuri dari simpul ke akar ke simpul daun  yang memegang prediksi kelas untuk contoh  tersebut. Decision tree mudah untuk dikonversi  ke aturan klasifikasi (classification rule).  Konsep data dalam decision tree dinyatakan  dalam bentuk tabel dengan atribut dan record.

Contoh :

1. DATA SAMPLE

1

Ada 10 variabel yang digunakan  untuk dasar mengambil keputusan. Kelas keputusan ada dua yaitu Menunggu/Tidak di sebuah restoran

Alt : Alternate ;

Bar : ada bar atau tidak ;

Fri : Weekend ;

Hun : Hungry ;

Pat:  pengunjung ;

Price : harga ;

Rain;

Res : Reservation ;

Type : tipe restoran ;

Est : estimated time

2. DECISION TREE RESULT

1 (1)

Kotak yang diarsir adalah daun . Kotak tanpa arsiran adalah akar atau cabang . Pola untuk mengubah menjadi RULE adalah :

1)      Akar/Cabang adalah proposisi pembentuk frase IF

2)      Daun adalah proposisi pembentuk Frase THEN

Contoh :

1)      IF Patron = None THEN Wait = False

2)      IF Patron = Full and Hungry = Yes and Type = French Then  wait = true

3)      IF Patron = Full and Hungry = Yes and Type = Thai and Fri/Sat = yes  Then  wait = true

dst.

www.binus.ac.id

Mar 27

T0553 – SISTEM MULTIMEDIA

LAPORAN PEMBUATAN VIDEO

04PLT

Kelompok 3:

David Febryanto (1601222070)

Edward Ivan Fadli (1601218874)

Sudiarto Winata (1601223786)

Kenzu Pangestu (1601224864)

Wira Adi Putra(1601223451)

 

Latar Belakang & Deskripsi Video

Setiap film pasti mempunyai genre. Genre tersebut bisa saja action, romantic, drama, comedy, bahkan horror. Disini saya akan membahas salah satu dari genre tersebut yang saya anggap cukup menarik untuk dibahas, yaitu genre horror.

Horror, seperti yang kita ketahui adalah genre yang memang berbau “seram” atau dapat memancing rasa takut pada diri kita. Horror biasanya diaplikasikan melalui suatu film yang memiliki sebuah cerita yang menyeramkan dan penuh misteri akan kematian, baik itu fiksi ataupun kenyataan. Biasanya ada beberapa film horror yang memang “based on true story” atau cerita nyata yang membuat penontonnya semakin merasakan aura yang menakutkan.

Namun disini saya akan membahas lebih kepada pengaplikasian genre horror ke dalam bentuk video singkat. Video singkat yang kami (kelompok 3) buat berisikan tentang 5 film horror terbaik dimana setiap filmnya kami berikan rating secara rata-rata beserta review singkat. Untuk penilaian film horror yang kami buat, setiap anggota kelompok kami (termasuk saya) menilai setiap film sesuai masing-masing persepsi sehingga lebih fair dan akan memberikan hasil nilai yang lebih subjektif.

Video singkat yang kami buat ini bertujuan agar para penonton yang sudah menonton ataupun yang belum dapat menyaksikan beberapa film horror yang sudah kami rekomendasikan. Film horror yang kami rekomendasikan semuanya sudah pernah tayang di layar lebar / bioskop sehingga kualitas film yang ditayangkan setidaknya memang terjamin “horror”nya (namun semuanya kembali kepada persepsi setiap penonton).

Kami juga ingin membuat para penonton tetap dapat menikmati film horror, karena film horror tidak selalu menimbulkan efek negatif bagi seseorang. Penonton dapat merasakan efek positif seperti menguji adrenalinnya dan memiliki keberanian yang lebih dalam kehidupan sehari-hari. Memicu adrenalin dapat membuat penonton lebih sigap dan siaga dalam keadaan apapun. Jadi menurut kami, film horror merupakan salah satu genre film yang menarik, walaupun beberapa orang mungkin tidak menyukai film horror (mempunyai phobia terhadap hantu yang berlebihan).

Spesifikasi Video

Video singkat yang kami buat berdurasi : 9 menit 57 detik, dimana isi dari video singkat tersebut terdiri dari Introduction atau pengenalan anggota kelompok kami, kemudian dilanjutkan dengan Content Video tersebut yang berisi 5 film horror terbaik menurut versi kami beserta rating masing-masing film dan juga review dari setiap anggota kelompok kami. Akhirnya, video singkat tersebut kami tutup dengan Credits yang berisi tentang peran dari anggota kelompok kami dalam pembuatan film tersebut beserta detail video. Perlu diketahui bahwa video singkat yang kami buat menggunakan software SONY Vegas Movie Studio HD Platinum (v.11.0).

Storyboard & Documentation 

Berikut adalah dokumentasi dari pembuatan video beserta beberapa bagian pada kontennya :

1

2

3

4

5

Berikut adalah videonya :

http://www.youtube.com/watch?v=mNh9CRYwbZE&feature=youtu.be

Mar 17

Soal : 

1. Apa yang dimaksud Adversarial Search & Constraint Satisfaction Problems? Berikan contoh?

2. Apa itu Propositional Logic?Berikan contoh?

3. Buat coding (Boleh C, C++ atau Java) untuk  Algoritma A & Algoritma A* (A Star)?

Jawaban : 

1. Adversarial Search merupakan sebuah metode yang mencari berbagai kemungkinan / solusi yang ada dalam sebuah masalah. Penggunaan dasarnya dalam permainan adalah menghitung sebuah kemungkinan untuk mendapatkan langkah yang terbaik agar dapat memaksimalkan hasil yang didapat dalam permainan tersebut menggunakan informasi yang tersedia. Algoritma yang biasanya digunakan dalam Adversarial Search adalah MiniMax dan Alpha Beta Pruning

Contoh Adversarial Search : Chess (Catur), Gambling dan Tic-Tac-Toe

Constraint Satisfaction Problem (CSP) merupakan pendekatan masalah secara matematis yang didefinisikan sebagai sebuah kumpulan dari objek-objek dimana keadaannya harus memenuhi sejumlah batasan, persyaratan ataupun kriteria. Ada dua variasi dari CSP, yaitu Dynamic CSP dan Flexible CSP.

Contoh Constraint Satisfaction Problem : 

 a. The n-Queen Problem

 Pada dasarnya, terdapat ratu sejumlah n dimana ratu-ratu tersebut tidak boleh berada pada kondisi tertentu. Kondisi tertentu yang dimaksud disini adalah seperti : Terdapat ratu yang berada di baris yang sama dengan ratu yang lainnya. Selain tidak boleh berada di baris yang sama, ratu-ratu tersebut tidak boleh berada di kolom yang sama dan diagonal yang sama / sejajar diagonal. Ketika semua ratu berada posisi yang aman / tidak berada pada kondisi tersebut, maka masalah telah terselesaikan.

b. Crossword puzzle 

Kita diminta untuk melengkapi sebuah puzzle dengan kata yang ada

      1   2   3   4   5
    +---+---+---+---+---+	Given the list of words:
  1 | 1 |   | 2 |   | 3 |		AFT	LASER
    +---+---+---+---+---+		ALE	LEE
  2 | # | # |   | # |   |		EEL	LINE
    +---+---+---+---+---+		HEEL	SAILS
  3 | # | 4 |   | 5 |   |		HIKE	SHEET
    +---+---+---+---+---+		HOSES	STEER
  4 | 6 | # | 7 |   |   |		KEEL	TIE
    +---+---+---+---+---+		KNOT
  5 | 8 |   |   |   |   |
    +---+---+---+---+---+	
  6 |   | # | # |   | # |       The numbers 1,2,3,4,5,6,7,8 in the crossword
    +---+---+---+---+---+       puzzle correspond to the words 
				that will start at those locations.

c. Cryptography problem 

		S E N D
		M O R E
	      =========
	      M O N E Y

Kita diminta untuk menggantikan setiap huruf dengan digit yang berbeda sehingga hasil jumlah dari huruf tersebut benar / sesuai.

d. Map coloring problem

Kita diberikan sebuah map, contohnya seperti bentuk planar graph. Kita diminta untuk mewarnai map tersebut dengan menggunakan 3 warna saja : Hijau, Merah, dan Biru, sehingga tidak ada negara yang mempunyai warna yang sama dengan negara di sebelahnya.

2. Propositional Logic adalah sebuah representasi dari logika paling sederhana yang mempelajari cara untuk menggabungkan dan mengubah pernyataan / proposisi untuk membentuk pernyataan yang lebih rumit / kompleks. Propositional logic juga dikenal sebagai Sentential Logic. Propositional logic  menggunakan propositional connective untuk menentukan kebenaran dari sebuah pernyataan kompleks dari nilai kebenaran yang direpresentasikan oleh pernyataan lain yang lebih sederhana.

Bagan Operator Penghubung : 

Operator Penghubung

Bagan Tabel Kebenaran :

Tabel Kebenaran

Contoh dari Propositional Logic :

P1 : Jika mahasiswa itu mengambil jurusan TI, maka dia berasal dari jurusan IPA

P2 : David mengambil jurusan TI

——————————————————————————–

C : David berasal dari jurusan IPA

Pernyataan diatas dapat dianalogikan seperti berikut :

p = Mengambil jurusan TI

q = Berasal dari jurusan IPA

P1 : p -> q

P2 : p

———

C : q

3.  Algoritma A (Menggunakan Java) :

import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Comparator;
import java.util.PriorityQueue;

public class BestFirstSearch

{
private PriorityQueue<Vertex> priorityQueue;
private int heuristicvalues[];
private int numberOfNodes;

public static final int MAX_VALUE = 999;

public BestFirstSearch(int numberOfNodes)
{
this.numberOfNodes = numberOfNodes;
this.priorityQueue = new PriorityQueue<Vertex>(this.numberOfNodes,
new Vertex());
}

public void bestFirstSearch(int adjacencyMatrix[][], int[] heuristicvalues,int source)
{
int evaluationNode;
int destinationNode;
int visited[] = new int [numberOfNodes + 1];
this.heuristicvalues = heuristicvalues;

priorityQueue.add(new Vertex(source, this.heuristicvalues));
visited = 1;

while (!priorityQueue.isEmpty())
{
evaluationNode = getNodeWithMinimumHeuristicValue();
destinationNode = 1;

System.out.print(evaluationNode + “\t”);
while (destinationNode <= numberOfNodes)
{
Vertex vertex = new Vertex(destinationNode,this.heuristicvalues[destinationNode]);
if ((adjacencyMatrix[evaluationNode][destinationNode] != MAX_VALUE
&& evaluationNode != destinationNode)&& visited[destinationNode] == 0)
{
priorityQueue.add(vertex);
visited[destinationNode] = 1;
}
destinationNode++;
}
}
}

private int getNodeWithMinimumHeuristicValue()
{
Vertex vertex = priorityQueue.remove();
return vertex.node;
}

public static void main(String… arg)
{
int adjacency_matrix[][];
int number_of_vertices;
int source = 0;
int heuristicvalues[];

Scanner scan = new Scanner(System.in);
try
{
System.out.println(“Enter the number of vertices”);
number_of_vertices = scan.nextInt();
adjacency_matrix = new int[number_of_vertices + 1][number_of_vertices + 1];
heuristicvalues = new int[number_of_vertices + 1];

System.out.println(“Enter the Weighted Matrix for the graph”);
for (int i = 1; i <= number_of_vertices; i++)
{
for (int j = 1; j <= number_of_vertices; j++)
{
adjacency_matrix[i][j] = scan.nextInt();
if (i == j)
{
adjacency_matrix[i][j] = 0;
continue;
}
if (adjacency_matrix[i][j] == 0)
{
adjacency_matrix[i][j] = MAX_VALUE;
}
}
}
for (int i = 1; i <= number_of_vertices; i++)
{
for (int j = 1; j <= number_of_vertices; j++)
{
if (adjacency_matrix[i][j] == 1 && adjacency_matrix[j][i] == 0)
{
adjacency_matrix[j][i] = 1;
}
}
}

System.out.println(“Enter the heuristic values of the nodes”);
for (int vertex = 1; vertex <= number_of_vertices; vertex++)
{
System.out.print(vertex + “.”);
heuristicvalues[vertex] = scan.nextInt();
System.out.println();
}

System.out.println(“Enter the source “);
source = scan.nextInt();

System.out.println(“The graph is explored as follows”);
BestFirstSearch bestFirstSearch = new BestFirstSearch(number_of_vertices);
bestFirstSearch.bestFirstSearch(adjacency_matrix, heuristicvalues,source);

} catch (InputMismatchException inputMismatch)
{
System.out.println(“Wrong Input Format”);
}
scan.close();
}
}

class Vertex implements Comparator<Vertex>
{
public int heuristicvalue;
public int node;

public Vertex(int node, int heuristicvalue)
{
this.heuristicvalue = heuristicvalue;
this.node = node;
}

public Vertex()
{

}

@Override
public int compare(Vertex vertex1, Vertex vertex2)
{
if (vertex1.heuristicvalue < vertex2.heuristicvalue)
return -1;
if (vertex1.heuristicvalue > vertex2.heuristicvalue)
return 1;
return 0;
}

@Override
public boolean equals(Object obj)
{
if (obj instanceof Vertex)
{
Vertex node = (Vertex) obj;
if (this.node == node.node)
{
return true;
}
}
return false;
}
}

Algoritma A* (Menggunakan C++) :

#include <iostream>
#include <queue>
#include <math.h>
#include <iomanip>
#include <string>
#include <ctime>

using namespace std;

const int m=60; // vertical size size of the map
const int n=60; // horizontal size of the map
static int map[n][m];
static int closed_nodes_map[n][m]; // map of closed (tried-out) nodes
static int open_nodes_map[n][m]; // map of open (not-yet-tried) nodes
static int dir_map[n][m]; // map of directions
const int dir=8; // number of possible directions to go at any position
// if dir==4
//static int dx[dir]={1, 0, -1, 0};
//static int dy[dir]={0, 1, 0, -1};
// if dir==8
static int dx[dir]={1, 1, 0, -1, -1, -1, 0, 1};
static int dy[dir]={0, 1, 1, 1, 0, -1, -1, -1};

class node
{
// current position
int xPos;
int yPos;
// total distance already travelled to reach the node
int level;
// priority=level+remaining distance estimate
int priority; // smaller: higher priority

public:
node(int xp, int yp, int d, int p)
{xPos=xp; yPos=yp; level=d; priority=p;}

int getxPos() const {return xPos;}
int getyPos() const {return yPos;}
int getLevel() const {return level;}
int getPriority() const {return priority;}

void updatePriority(const int & xDest, const int & yDest)
{
priority=level+estimate(xDest, yDest)*10; //A*
}

// give better priority to going strait instead of diagonally
void nextLevel(const int & i) // i: direction
{
level+=(dir==8?(i%2==0?10:14):10);
}

// Estimation function for the remaining distance to the goal.
const int & estimate(const int & xDest, const int & yDest) const
{
static int xd, yd, d;
xd=xDest-xPos;
yd=yDest-yPos;

// Euclidian Distance
d=static_cast<int>(sqrt(xd*xd+yd*yd));

// Manhattan distance
//d=abs(xd)+abs(yd);

// Chebyshev distance
//d=max(abs(xd), abs(yd));

return(d);
}
};

// Determine priority (in the priority queue)
bool operator<(const node & a, const node & b)
{
return a.getPriority() > b.getPriority();
}

// A-star algorithm.
// The route returned is a string of direction digits.
string pathFind( const int & xStart, const int & yStart,
const int & xFinish, const int & yFinish )
{
static priority_queue<node> pq[2]; // list of open (not-yet-tried) nodes
static int pqi; // pq index
static node* n0;
static node* m0;
static int i, j, x, y, xdx, ydy;
static char c;
pqi=0;

// reset the node maps
for(y=0;y<m;y++)
{
for(x=0;x<n;x++)
{
closed_nodes_map[x][y]=0;
open_nodes_map[x][y]=0;
}
}

// create the start node and push into list of open nodes
n0=new node(xStart, yStart, 0, 0);
n0->updatePriority(xFinish, yFinish);
pq[pqi].push(*n0);
open_nodes_map[x][y]=n0->getPriority(); // mark it on the open nodes map

// A* search
while(!pq[pqi].empty())
{
// get the current node w/ the highest priority
// from the list of open nodes
n0=new node( pq[pqi].top().getxPos(), pq[pqi].top().getyPos(),
pq[pqi].top().getLevel(), pq[pqi].top().getPriority());

x=n0->getxPos(); y=n0->getyPos();

pq[pqi].pop(); // remove the node from the open list
open_nodes_map[x][y]=0;
// mark it on the closed nodes map
closed_nodes_map[x][y]=1;

// quit searching when the goal state is reached
//if((*n0).estimate(xFinish, yFinish) == 0)
if(x==xFinish && y==yFinish)
{
// generate the path from finish to start
// by following the directions
string path=””;
while(!(x==xStart && y==yStart))
{
j=dir_map[x][y];
c=’0′+(j+dir/2)%dir;
path=c+path;
x+=dx[j];
y+=dy[j];
}

// garbage collection
delete n0;
// empty the leftover nodes
while(!pq[pqi].empty()) pq[pqi].pop();
return path;
}

// generate moves (child nodes) in all possible directions
for(i=0;i<dir;i++)
{
xdx=x+dx[i]; ydy=y+dy[i];

if(!(xdx<0 || xdx>n-1 || ydy<0 || ydy>m-1 || map[xdx][ydy]==1
|| closed_nodes_map[xdx][ydy]==1))
{
// generate a child node
m0=new node( xdx, ydy, n0->getLevel(),
n0->getPriority());
m0->nextLevel(i);
m0->updatePriority(xFinish, yFinish);

// if it is not in the open list then add into that
if(open_nodes_map[xdx][ydy]==0)
{
open_nodes_map[xdx][ydy]=m0->getPriority();
pq[pqi].push(*m0);
// mark its parent node direction
dir_map[xdx][ydy]=(i+dir/2)%dir;
}
else if(open_nodes_map[xdx][ydy]>m0->getPriority())
{
// update the priority info
open_nodes_map[xdx][ydy]=m0->getPriority();
// update the parent direction info
dir_map[xdx][ydy]=(i+dir/2)%dir;

// replace the node
// by emptying one pq to the other one
// except the node to be replaced will be ignored
// and the new node will be pushed in instead
while(!(pq[pqi].top().getxPos()==xdx &&
pq[pqi].top().getyPos()==ydy))
{
pq[1-pqi].push(pq[pqi].top());
pq[pqi].pop();
}
pq[pqi].pop(); // remove the wanted node

// empty the larger size pq to the smaller one
if(pq[pqi].size()>pq[1-pqi].size()) pqi=1-pqi;
while(!pq[pqi].empty())
{
pq[1-pqi].push(pq[pqi].top());
pq[pqi].pop();
}
pqi=1-pqi;
pq[pqi].push(*m0); // add the better node instead
}
else delete m0; // garbage collection
}
}
delete n0; // garbage collection
}
return “”; // no route found
}

int main()
{
srand(time(NULL));

// create empty map
for(int y=0;y<m;y++)
{
for(int x=0;x<n;x++) map[x][y]=0;
}

// fillout the map matrix with a ‘+’ pattern
for(int x=n/8;x<n*7/8;x++)
{
map[x][m/2]=1;
}
for(int y=m/8;y<m*7/8;y++)
{
map[n/2][y]=1;
}

// randomly select start and finish locations
int xA, yA, xB, yB;
switch(rand()%8)
{
case 0: xA=0;yA=0;xB=n-1;yB=m-1; break;
case 1: xA=0;yA=m-1;xB=n-1;yB=0; break;
case 2: xA=n/2-1;yA=m/2-1;xB=n/2+1;yB=m/2+1; break;
case 3: xA=n/2-1;yA=m/2+1;xB=n/2+1;yB=m/2-1; break;
case 4: xA=n/2-1;yA=0;xB=n/2+1;yB=m-1; break;
case 5: xA=n/2+1;yA=m-1;xB=n/2-1;yB=0; break;
case 6: xA=0;yA=m/2-1;xB=n-1;yB=m/2+1; break;
case 7: xA=n-1;yA=m/2+1;xB=0;yB=m/2-1; break;
}

cout<<”Map Size (X,Y): “<<n<<”,”<<m<<endl;
cout<<”Start: “<<xA<<”,”<<yA<<endl;
cout<<”Finish: “<<xB<<”,”<<yB<<endl;
// get the route
clock_t start = clock();
string route=pathFind(xA, yA, xB, yB);
if(route==””) cout<<”An empty route generated!”<<endl;
clock_t end = clock();
double time_elapsed = double(end – start);
cout<<”Time to calculate the route (ms): “<<time_elapsed<<endl;
cout<<”Route:”<<endl;
cout<<route<<endl<<endl;

// follow the route on the map and display it
if(route.length()>0)
{
int j; char c;
int x=xA;
int y=yA;
map[x][y]=2;
for(int i=0;i<route.length();i++)
{
c =route.at(i);
j=atoi(&c);
x=x+dx[j];
y=y+dy[j];
map[x][y]=3;
}
map[x][y]=4;

// display the map with the route
for(int y=0;y<m;y++)
{
for(int x=0;x<n;x++)
if(map[x][y]==0)
cout<<”.”;
else if(map[x][y]==1)
cout<<”O”; //obstacle
else if(map[x][y]==2)
cout<<”S”; //start
else if(map[x][y]==3)
cout<<”R”; //route
else if(map[x][y]==4)
cout<<”F”; //finish
cout<<endl;
}
}
getchar(); // wait for a (Enter) keypress
return(0);
}