Expert System Untuk Membantu Memilih Bahasa Pemrograman
Sistem Pakar (Expert System) adalah sistem informasi yang berisi dengan pengetahuan dari pakar sehingga dapat digunakan untuk konsultasi. Pengetahuan dari pakar di dalam sistem ini digunakan sebagi dasar oleh Sistem Pakar untuk menjawab pertanyaan (konsultasi).
Kepakaran (expertise) adalah pengetahuan yang ekstensif dan spesifik yang diperoleh melalui rangkaian pelatihan, membaca, dan pengalaman. Pengetahuan membuat pakar dapat mengambil keputusan secara lebih baik dan lebih cepat daripada non-pakar dalam memecahkan problem yang kompleks. Kepakaran mempunyai sifat berjenjang, pakar top memiliki pengetahuan lebih banyak daripada pakar yunior. Tujuan Sistem Pakar adalah untuk mentransfer kepakaran dari seorang pakar ke komputer, kemudian ke orang lain (yang bukan pakar).
Kepakaran (expertise) adalah pengetahuan yang ekstensif dan spesifik yang diperoleh melalui rangkaian pelatihan, membaca, dan pengalaman. Pengetahuan membuat pakar dapat mengambil keputusan secara lebih baik dan lebih cepat daripada non-pakar dalam memecahkan problem yang kompleks. Kepakaran mempunyai sifat berjenjang, pakar top memiliki pengetahuan lebih banyak daripada pakar yunior. Tujuan Sistem Pakar adalah untuk mentransfer kepakaran dari seorang pakar ke komputer, kemudian ke orang lain (yang bukan pakar).
Sistem pakar adalah suatu program komputer yang mengandung pengetahuan dari satu atau lebih pakar manusia mengenai suatu bidang spesifik. Jenis program ini pertama kali dikembangkan oleh periset kecerdasan buatan pada dasawarsa 1960-an dan 1970-an dan diterapkan secara komersial selama 1980-an. Bentuk umum sistem pakar adalah suatu program yang dibuat berdasarkan suatu set aturan yang menganalisis informasi (biasanya diberikan oleh pengguna suatu sistem) mengenai suatu kelas masalah spesifik serta analisis matematis dari masalah tersebut. Tergantung dari desainnya, sistem pakar juga mampu merekomendasikan suatu rangkaian tindakan pengguna untuk dapat menerapkan koreksi. Sistem ini memanfaatkan kapabilitas penalaran untuk mencapai suatu simpulan.
PROLOG
Prolog adalah bahasa pemograman logika,di sebut juga sebagai bahasa non-procedural. Bahasa pemrograman Prolog di ambil dari bahasa prancis yaitu programmation en logiquie (pemrograman logika).bahasa ini di buat oleh Alain Colmerauer dan Robert Kowalski sekitar tahun 1972 dalam upaya untuk menciptakan suatu bahasa pemrograman yang pernyataan logika alih-alih rangkaian perintah untuk di jalankan komputer. Prolog popular di Eropa untuk aplikasi Artificial intelligence.
Bahasa pemrograman prolog:
- Object oriented languange atau declarative languange.
- Tidak terdapat prosedur, tetapi hanya kumpulan data-data objek (fakta) yang akan diolah, dan relasi antar objek tersebut membentuk aturan yang diperlukan untuk mencari suatu jawaban
- Programmer menentukan tujuan (goal), dan komputer menentukan bagaimana cara mencapai tujuan tersebut serta mencari jawabannya.
- Dilakukan pembuktian terhadap cocok-tidaknya tujuan dengan data-data yang telah ada dan relasinya.
Aplikasi Prolog :
- Sistem Pakar (Expert System): Program menggunakan teknik pengambilan kesimpulan dari data-data yang didapat, layaknya seorang ahli. Contoh dalam mendiagnosa penyakit
- Pengolahan Bahasa Alami (Natural Languange Processing):Program dibuat agar pemakai dapat berkomunikasi dengan komputer dalam bahasa manusia sehari-hari, layaknya penterjemah.
- Robotik: Prolog digunakan untuk mengolah data masukan yang berasal dari sensor dan mengambil keputusan untuk menentukan gerakan yang harus dilakukan.
Untuk menjalankan bahasa pemograman prolog di butuhkan sebuah software SWI-prolog , sofeware SWI-prolog ini yang akan menterjemahkan dan merunning coding yang kita tulis.
berikut adalah contoh code aplikasi sistem pakar untuk membantu dalam memilih bahasa pemrograman:
main :-
intro,
reset_answers,
find_language(Language),
describe(Language), nl.
intro :-
write('Which programming language should I learn first?'), nl,
write('To answer, input the number shown next to each answer, followed by a dot (.)'), nl, nl.
find_language(Language) :-
language(Language), !.
% Store user answers to be able to track his progress
:- dynamic(progress/2).
% Clear stored user progress
% reset_answers must always return true; because retract can return either true
% or false, we fail the first and succeed with the second.
reset_answers :-
retract(progress(_, _)),
fail.
reset_answers.
% Rules for the knowledge base
language(python) :-
why(for_my_kids).
language(python) :-
why(i_dont_know).
language(java) :-
why(make_money),
which_platform(doesn_t_matter).
language(cpp) :-
why(make_money),
which_platform(gaming).
language(objectivec) :-
why(make_money),
which_platform(mobile),
which_mobile_os(ios).
language(java) :-
why(make_money),
which_platform(mobile),
which_mobile_os(android).
language(python) :-
why(make_money),
which_platform(facebook).
language(python) :-
why(make_money),
which_platform(google).
language(csharp) :-
why(make_money),
which_platform(microsoft).
language(objectivec) :-
why(make_money),
which_platform(apple).
language(javascript) :-
why(make_money),
which_platform(web),
web(front_end).
language(csharp) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(corporate),
think_about_microsoft(im_a_fan).
language(java) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(corporate),
think_about_microsoft(not_bad).
language(java) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(corporate),
think_about_microsoft(suck).
language(javascript) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(startup),
try_something_new(yes).
language(python) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(startup),
try_something_new(no),
favourite_toy(lego).
language(ruby) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(startup),
try_something_new(no),
favourite_toy(play_doh).
language(php) :-
why(make_money),
which_platform(web),
web(back_end),
want_to_work_for(startup),
try_something_new(no),
favourite_toy(old_ugly).
language(csharp) :-
why(make_money),
which_platform(enterprise),
think_about_microsoft(im_a_fan).
language(java) :-
why(make_money),
want_to_work_for(enterprise),
think_about_microsoft(not_bad).
language(java) :-
why(make_money),
want_to_work_for(enterprise),
think_about_microsoft(suck).
language(python) :-
why(just_for_fun),
prefer_to_learn(easy_way).
language(python) :-
why(just_for_fun),
prefer_to_learn(best_way).
language(java) :-
why(just_for_fun),
prefer_to_learn(harder_way),
car(auto).
language(c) :-
why(just_for_fun),
prefer_to_learn(harder_way),
car(manual).
language(cpp) :-
why(just_for_fun),
prefer_to_learn(hardest_way).
language(python) :-
why(im_interested),
prefer_to_learn(easy_way).
language(python) :-
why(im_interested),
prefer_to_learn(best_way).
language(java) :-
why(im_interested),
prefer_to_learn(harder_way),
car(auto).
language(c) :-
why(im_interested),
prefer_to_learn(harder_way),
car(manual).
language(cpp) :-
why(im_interested),
prefer_to_learn(hardest_way).
language(python) :-
why(improve_myself),
prefer_to_learn(easy_way).
language(python) :-
why(improve_myself),
prefer_to_learn(best_way).
language(java) :-
why(improve_myself),
prefer_to_learn(harder_way),
car(auto).
language(c) :-
why(improve_myself),
prefer_to_learn(harder_way),
car(manual).
language(cpp) :-
why(improve_myself),
prefer_to_learn(hardest_way).
% Questions for the knowledge base
question(why) :-
write('Why do you want to learn programming?'), nl.
question(which_platform) :-
write('Which platform/field?'), nl.
question(which_mobile_os) :-
write('Which OS?'), nl.
question(web) :-
write('Which "end"?'), nl.
question(want_to_work_for) :-
write('I want to work for...'), nl.
question(think_about_microsoft) :-
write('What do you think about Microsoft?'), nl.
question(try_something_new) :-
write('Do you want to try something new, with huge potential, but less mature?'), nl.
question(favourite_toy) :-
write('Which one is your favourite toy?'), nl.
question(prefer_to_learn) :-
write('I prefer to learn things...'), nl.
question(car) :-
write('Auto or Manual car?'), nl.
% Answers for the knowledge base
answer(for_my_kids) :-
write('For my kids').
answer(i_dont_know) :-
write('I don\'t know').
answer(make_money) :-
write('Make money').
answer(just_for_fun) :-
write('Just for fun').
answer(im_interested) :-
write('I\'m interested').
answer(improve_myself) :-
write('Improve myself').
answer(doesn_t_matter) :-
write('Doesn\'t matter, I just want $$$').
answer(gaming) :-
write('3D/Gaming').
answer(mobile) :-
write('Mobile').
answer(facebook) :-
write('Facebook').
answer(google) :-
write('Google').
answer(microsoft) :-
write('Microsoft').
answer(apple) :-
write('Apple').
answer(web) :-
write('Web').
answer(enterprise) :-
write('Enterprise').
answer(ios) :-
write('iOS').
answer(android) :-
write('Android').
answer(front_end) :-
write('Front-end (web interface)').
answer(back_end) :-
write('Back-end ("brain" behind a website)').
answer(startup) :-
write('Startup').
answer(corporate) :-
write('Corporate').
answer(im_a_fan) :-
write('I\'m a fan!').
answer(not_bad) :-
write('Not Bad').
answer(suck) :-
write('Suck').
answer(yes) :-
write('Yes').
answer(no) :-
write('No').
answer(lego) :-
write('Lego').
answer(play_doh) :-
write('Play-Doh').
answer(old_ugly) :-
write('I\'ve an old & ugly toy, but I love it so much!').
answer(easy_way) :-
write('The easy way').
answer(best_way) :-
write('The best way').
answer(harder_way) :-
write('The slightly harder way').
answer(hardest_way) :-
write('The really hard way (but easier to pick up other languages in the future)').
answer(auto) :-
write('Auto').
answer(manual) :-
write('Manual').
% Language descriptions for the knowledge base
describe(python) :-
write('Python'), nl,
write('Widely regarded as the best programming language for beginners'), nl,
write('Easiest to learn').
describe(java) :-
write('Java'), nl,
write('One of the most in demand & highest paying programming languages'), nl,
write('Slogan: write once, work everywhere').
describe(c) :-
write('C'), nl,
write('Lingua franca of programming language'), nl,
write('One of the oldest and most widely used language in the world').
describe(cpp) :-
write('C++'), nl,
write('Complex version of C with a lot more features'), nl,
write('Recommended only if you have a mentor to guide you').
describe(javascript) :-
write('JavaScript'), nl,
write('Most popular clients-side web scripting language'), nl,
write('A must learn for front-end web developer (HTML and CSS as well)').
describe(csharp) :-
write('C#'), nl,
write('A popular choice for enterprise to create websites and Windows application using .NET framework'), nl,
write('Similar to Java in basic syntax and some features').
describe(ruby) :-
write('Ruby'), nl,
write('Mostly known for its popular web framework, Ruby on Rails'), nl,
write('Focuses on getting things done').
describe(php) :-
write('PHP'), nl,
write('Suitable for building small and simple sites within a short time frame'), nl,
write('Supported by almost every web hosting services with lower price').
describe(objectivec) :-
write('Objective-C'), nl,
write('Primary language used by Apple for MacOSX & iOS'), nl,
write('Choose this if you want to focus on developing iOS or OSX apps only').
% Assigns an answer to questions from the knowledge base
why(Answer) :-
progress(why, Answer).
why(Answer) :-
\+ progress(why, _),
ask(why, Answer, [for_my_kids, i_dont_know, make_money, just_for_fun, im_interested, improve_myself]).
which_platform(Answer) :-
progress(which_platform, Answer).
which_platform(Answer) :-
\+ progress(which_platform, _),
ask(which_platform, Answer, [doesn_t_matter, gaming, mobile, facebook, google, microsoft, apple, web, enterprise]).
which_mobile_os(Answer) :-
progress(which_mobile_os, Answer).
which_mobile_os(Answer) :-
\+ progress(which_mobile_os, _),
ask(which_mobile_os, Answer, [ios, android]).
web(Answer) :-
progress(web, Answer).
web(Answer) :-
\+ progress(web, _),
ask(web, Answer, [front_end, back_end]).
want_to_work_for(Answer) :-
progress(want_to_work_for, Answer).
want_to_work_for(Answer) :-
\+ progress(want_to_work_for, _),
ask(want_to_work_for, Answer, [startup, corporate]).
think_about_microsoft(Answer) :-
progress(think_about_microsoft, Answer).
think_about_microsoft(Answer) :-
\+ progress(think_about_microsoft, _),
ask(think_about_microsoft, Answer, [im_a_fan, not_bad, suck]).
try_something_new(Answer) :-
progress(try_something_new, Answer).
try_something_new(Answer) :-
\+ progress(try_something_new, _),
ask(try_something_new, Answer, [yes, no]).
favourite_toy(Answer) :-
progress(favourite_toy, Answer).
favourite_toy(Answer) :-
\+ progress(favourite_toy, _),
ask(favourite_toy, Answer, [lego, play_doh, old_ugly]).
prefer_to_learn(Answer) :-
progress(prefer_to_learn, Answer).
prefer_to_learn(Answer) :-
\+ progress(prefer_to_learn, _),
ask(prefer_to_learn, Answer, [easy_way, best_way, harder_way, hardest_way]).
car(Answer) :-
progress(car, Answer).
car(Answer) :-
\+ progress(car, _),
ask(car, Answer, [auto, manual]).
% Outputs a nicely formatted list of answers
% [First|Rest] is the Choices list, Index is the index of First in Choices
answers([], _).
answers([First|Rest], Index) :-
write(Index), write(' '), answer(First), nl,
NextIndex is Index + 1,
answers(Rest, NextIndex).
% Asks the Question to the user and saves the Answer
ask(Question, Answer, Choices) :-
question(Question),
answers(Choices, 0),
read(Index),
parse(Index, Choices, Response),
asserta(progress(Question, Response)),
Comments
Post a Comment