Wednesday, 27 February 2019

Machine Learning(ML) හදුනා ගනිමු(1 කොටස)


Machine Learning(ML) කියන්නේ Expert System වලට වැටෙන Artificial Intelligent වල ඇති එක් කොටසකි.මෙමගින් පද්ධති වලට ස්වයංකීය ඉගෙනීමේ හැකියවක් හා අත්දැකීම් ගොඩනගා ගැනීමේ හැකියාවක් යන්ත්‍රයකට ලබා දේ. මෙය දත්ත වලට ප්‍රවේශ කළ හැකි මෘදුකාංග සංවර්ධනය ඉලක්ක කරගෙන ඒ දත්ත භාවිතයෙන් තමාම ස්වයංක්‍රීයව ඉගෙන්වීම සිදුවේ. ඒ කියන්නේ යන්ත්‍රයට තනියම ඉගෙන ගැනීමේ හැකියාව ලබා දීමයි.  


Artificial Intelligent කියන්නේ කෘතිම බුද්ධිය නම් Machine Learning(ML) නම් එයට ඇති ඉගෙනගැනී‍මේ හැකියාවයි. දත්තයි මොළයයි තිබුණට මදී  ඉගෙනුමයි ඒවායින් වඩාත් නිවැරදි තීරණ ගැනිම ඉතා වැදගත්

ඉගෙනුම ක්‍රියාවලිය දත්ත හා නිිරික්ෂණයන්, අත්දැකීම් අධීක්ෂණයෙන්‍, pattern වලට අනුව අනාගතයට වඩාත් සුදුසුම තීරණයන් ගොඩනගනු ලබයි. මෙහි ප්‍රධාන අරමුණ වන්නේ පරිගණකයකට මිනිස් මැදිහත් වීමකින් හෝ ක්‍රියාවලි අධාරයෙන් සැකසීම්  නොකොට පරිගණකයන්ට ස්වයංකීයව ඉගෙනීමට ඉඩ ලබා දීමයි.

Machine Learning ප්‍රඩාන වශයෙන් කොටස් 3කට කැඩෙනවා. ඒවාට  Learning methods කියලා කියනවා.
  • Supervised Learning
  • Unsupervised Learning
  • Reinforcement learning

Supervised Learning

මෙහිදී label කරන ලද නිදර්ශනයක් භාවීතයෙන් පරණ දත්ත වල සිට අලුත් දත්ත දක්වා ඉගැන්වීම් වලින් අනාගතය අවස්ථාවන් ගැන අනාවැකි ලබා ගැනීම සිදුකරයි.  ආරම්භයේ්දී training data set(input කරන data) විශ්ලේශණය කරමින් අනාවැකි Output කරන්න සූත්‍රයක්(function) හදාගන්නවා. ඉදිරියට එන දත්ත ලබා ගන්නවා වගේම අලුත් train කරන data එකක් compare කරලා දෝෂ නිර්ණය කිරීම ද මෙහි භාවිතා වන algorithm වලින් සිදුකරයි. එම ලබාගත් දෝෂයන් ට  අදාලව model යන් modify(වෙනස්) වේ.

මේකෙදී input data හා output data දෙකම වැදගත් සංරචක දෙකකි.

උදාහරණ

  • ඉදිරි කාළගුණ වර්තාව
  • ඉදිරි මාස 6ක කොටස් වෙළද පලේ කොටසක මිළ ගණන ය කිරීම.

ඉහත ලේබල් කරනවා කියන එකෙන් අදහස් කරන්නේ දත්ත කුමන වර්ගයේ දත්තයක්ද කියා හදුනා ගැනීමයි. උදාහරණයක්  ලෙස සැබෑ ජීවිතයේදී බල්ලන් ගත්විට, බල්ලකු හදුනා ගැනීමට බල්ලා ලෙස නම් කරගත් දත්ත උපකාරීවේ. එහි පූසා හදුනාගැනීමට පුසා කියා නම්කර ගත් දත්ත, කුරුල්ලා හදුනාගැනීමට කුරුල්ලා කියා නම්කර ගත් දත්ත අඩංගු වේ. මෙය ලේබල් කිරීම කියා හදුන්වයි.

Unsupervised Learning

මෙහිදී label කරන ලද නිදර්ශනයන් හා වර්ගීකණය දත්ත සලකා නොබැලේ.  රැස් කරගත් දත්ත වලින් Pattern එකක් හදුනා ගැනීමට මෙහි ඇති algorithm භාවිතා කරයි.

මේකෙදී input data පමණක් වැදගත් සංරචකයක් වේ.

උදාහරණ
  • සමාජ ජාල අඩවියක එකට බැදුණු කණ්ඩායම් සෙවීම.
  • e-commerce website එකක recommendation system

Reinforcement Learning

මෙහිදි agent කෙනෙකු යොදාගැනීම සිදුවේ. agent විසින් actions ගොඩනගමින් සිදුවන errors හා ලබාගන්නා reward සලකා බලමින් environment  එකත් එක්ක සම්බන්ධ වේ. Trial(පරික්ෂාවන්) and error search(දෝෂ සෙවීම) and delayed reward(ප්‍රමාදිති ප්‍රතිඑල) මෙයට සුවිශේෂි ලක්ෂණ වේ.

උදාහරණ
  • ස්වයංක්‍රිය ධාවනය වන මෝටර් රථ
  • Chess, Car, Pacman වැනි Game සදහා
මෙම පාඩම් මාලාව ඉදිරියට ගෙනයාම ඉල්ලුම මත තීරණය කෙරේ.

Sunday, 24 February 2019

Access Modifiers හදුනාගනිමු


දී ඇති class කට යම් class එකක්, constructorඑකක්, attributeඑකක් හෝ method එකක් ප්‍රවේෂ කළ හැකිදැයි බලන්නේ මෙම Access Modifiers වලිනි.


Public

ඕනෑම code එකකට මෙමගින් අර්ථ දක්වන Members(attributes and methods) ලට ප්‍රවේශ විමට ඉඩ ලබා දේ. එහිදි  code එක තියෙන් තැනවත් package එක වත් අදාළ වෙන්නේ නැහැ. ඒ කියන්නේ වෙන වෙන class වලට හා වෙන වෙත් package වලට public වලින් අර්ථ දක්වන Members ලට ප්‍රවේශ කරන්න පුලුවන් බවයි.

  1. public class Clock {
  2.     public long time = 0;
  3. }


  4. public class ClockReader {
  5.     Clock clock = new Clock();

  6.     public long readClock{
  7.         return clock.time;
  8.     }
  9. }

ඉහත උදහරණය සලකමු. line 2 දී time කියලා variable එක අර්ථ දක්වලා තියෙනවා. line 7 දී Clock කියන class  එක refer කරලා clock නමින් Clock object එකක් හදලා තියෙනවා. line 9 දී  readClock method එක තුළින් Clock එකේ time එකේ data කෙළින්ම ලබාගන්නවා.

Private

මෙමගින් අර්ථ දක්වන Members(attributes and methods) ලට ප්‍රවේශ විමට  හැකිවන්නේ එම Members ලා අයත් වන class එකේම අනෙක් Members ලටම පමණි.
උදා:

public class Person {
    private long age= 0;
}

මෙහි time කියන variable එකට Access කළ හැක්කේ Clock කියනclass එකේ members ලටම පමණී. නමුත්  accessor methods හරහා මෙම variable එකට ප්‍රවේශ විය හැක. එය Encapsulation කතා කරන ලදී. 

Constructor එකක් private වුනොත් එකකෙන් කියන්නේ ඒ Constructor එක  පිටත ඇති වෙන class එකක define කරන්න බැරි බවයි. එය ගතහැකි වන්නේ ඒ class එකේම ඇති වෙනත් Constructor එකකින් හෝ වෙනත් static method එකකිනි.
  1.  public class Man {
  2.     private int age= 0;

  3.     private Man(intage) {
  4.         this.age= age;
  5.     }

  6.     public Man(int age, int timeOffset) {
  7.         this(age);
  8.         this.age+= timeOffset;
  9.     }

  10.     public static Man newAge() {
  11.         return new Clock(System.currentTimeMillis());
  12.     }

  13. }

ඉහත උදාහරණය සලකන්න. line 4 දී Constructor, private  වෙලා තියෙනවා. එයින් කියැවෙන්නේ ඒ  Constructor වෙනත් Class එකක define කරන්න බැරි බවයි. line 8 දී ඊළග Constructor එක define එක තියෙනවා, ඒක publicවෙලායි තියෙන්නේ. එකේ අදහස ඒ  Constructor වෙනත් ඕනෑම Class එකක define කරන්න පුලුවන් බවයි.  line 9 දී  line 4 හි ඇති Constructor එක "this" keyword එකෙන් අරගෙන තියෙනවා. line 13 දී private වුන Constructor එක static method එකකින් අරගෙන තියෙනවා.

මෙය වෙනත් class එකක පහත ආකර දෙකනේ කැමති විදිහකට define කරන්න පුලුවන්.
පළමු ආකාරය - public constructor යොදාගෙන.
Man m1=new Man(27, 3);
දෙවන ආකාරය - static method යොදාගෙන.
Man m2=Man.newAge();

Protected

මේක ටිකක් වෙනස්ම access modifier එකක් වෙනවා. මේ තරමක් default එකට ටිකක් සමාන වුනත් Inheritance වලදී ටිකක් වෙනස්. protected වලින් define කරන member කෙනෙක් ට access  කරන්න හැකි වෙන්නේ ඒ package එකේ ඇති ඕනෑම Class  එකකට හා වෙනත් package  එකක ඇති sub class(child class) එකකටම පමණී. 

උදා1.
  1. public class Clock {
  2.     protected long time = 0;    // time in milliseconds
  3. }

  4. public class SmartClock() extends Clock{
  5.     public long getTimeInSeconds() {
  6.         return this.time / 1000;
  7.     }
  8. }
ඉහත උදාහරණයේ දැක්වෙන්නේ එකම package එකේ දී sub class එකක් super class එකේ protected වූ time කියන variable එකට access කරන ආකාරයයි. 

උදා2.
  1. package p1; 
  2. public class Clock {
  3.     protected long time = 0;    // time in milliseconds
  4. }

  1. package p2; 
  2. import p1.*; 
  3. public class SmartClock() extends Clock{
  4.     public long getTimeInSeconds() {
  5.         return this.time / 1000;
  6.     }
  7. }
ඉහත උදාහරණයේ දැක්වෙන්නේ  වෙනස්ම package දෙකකදී sub class එකක් super class එකේ protected වූ time කියන variable එකට access කරන ආකාරයයි. 



උදා3.
  1. public class Clock {
  2.     protected long time = 0;    // time in milliseconds
  3. }

  4. public class SmartClock(){
  5.     Clock  clock=new Clock  ();
  6.     public long getTimeInSeconds() {
  7.         return clock.time / 1000;
  8.     }
  9. }

ඉහත උදාහරණයේ දැක්වෙන්නේ එකම package එකේ දී sub class එකක් නොවන විට එක class එකක protected වූ time කියන variable එකට අනෙක්  class එක access කරන ආකාරයයි. 

default 

මෙය package modifier කියලත් හදුන්වනවා. මෙයට වෙනම keyword එකක් නැහැ. හිස් අවකාශයකින් දකවනවා. සෑම විටම එකම package එකේ classes අතර data වලට access කිරීමේ හැකියාව ලබා දේ. නමුත් වෙනත් package වල  data වලට access  කිරීමට  කුමන අයුරිකින් වත් නොහැක.
එය protected මෙන් sub class එකකට එකකින් ලැබෙන්නාක් මෙන් ලබා ගතනොහැක.

public class Clock {
    long time = 0;
}
public class ClockReader {
    Clock clock = new Clock();
    public long readClock{
        return clock.time;
    }
}
ඉහත උදාහරණයේ දැක්වෙන්නේ එකම package එකේ දී sub class එකක් super class එකේ default වූ time කියන variable එකට access කරන ආකාරයයි. 

Class Access Modifiers

class එකේ membersලා define කරන්න ඉහත සියලුම Modifiers භාවිතා කළත් 
class හදද්දි ඒ Modifiers සියල්ලම භාවිතා කරන්න බැහැ. Private හා Protected යන Modifiers දෙකම class එකක් හදන්න යොදාගන්නේ නැහැ. ඒවා යෙදීමෙන් code වලංගු භාවය නැතිවේ.

බොහෝ විට class එකක් හදන්න යොදාගන්නේ public හා default modifiers ය. යම් modifier එකක් class  එකකට යෙදෙන විට class  එකේ membersලට modifier  දී තිබුණත් මුලින්ම class  එකේ ඇති modifier එක සලකා බැලේ පසුව තමා class  එකේ members ලගේ modifier සලකා බලන්නේ.

class එක default නම් එකේ members ලා public වුනත් නැතත් වෙනත් package වල class වලට ඒ members ලගේ data වලට access කරන්න බැහැ. එමෙන්ම class එක public වුනොත් class එකේ members ලගේ access modifiers සලකා බැලිය යුතුවේ.

සාරංශය

geeksforgeeks site එකෙන්

Saturday, 23 February 2019

Object Oriented Methodology


ලෝව මුල්ම කාලයේ බිහි වු(Machine language, Assembly language හැරුනු විට) ක්‍රමලේඛණ බොහොමයක් වස්තු පාදක කරගත් ඒවා නොවේ. එවැනි language හැදින්වූයේ Procedural හෝ Functional language කියාය. ප්‍රධාන වශයෙන් මෙහි variables, methods අර්ථ දැක්වීම් හා library import කිරීම් අඩංගු වේ.
මෙම Procedural languages පසු කලීනව, විශාල ක්‍රමලේඛණය පැමිණීමත් හා තාක්ෂණයේ දියුණුවත් සමග ඉවත් විය. නමුත් මෙම භාෂාවන් වර්ගය සුලු වශයෙන් භාවීතා වේ. අද වන විට වස්තු පාදක ක්‍රමලේඛණය පෙර තිබු Functional languages වල දුර්වලතා මග හරිමින් ක්‍රමලේඛ කරුවන් අතර ඉහල ජනප්‍රියතාවයක් හිමි කරගෙන තිබේ.
Object-oriented programming enables you to develop large-scale software and GUIs effectively
මෙයින් කියැවෙන්නේ වස්තු පාදක ක්‍රමලේඛණය මහා පරිමානයේ මෘදුකාංග හා අතුරු මූණත් කර්යක්ෂමව ගොඩනැංවීමට ඉඩ ලබා දෙන බවක්ය. Procedural languages වලදි code ලියැවුනේ එකම document එකේ line එකෙන් line එකට පහළට පහළට ගමන් කරන ලෙසිනි. මේකේදී හොද software එකක් ලියද්දී පේළිගාණ විශාල වෙනවා. එවිට දෝෂ(error එකක්) සොයා ගැනීම ටිකක් අපහසුයි.
මෙහි ඇතිවන අපහසුතා වූයේ,
1.       ක්‍රමලේඛය විශාල වන විට කියැවීමේ අපහසුව
2.       ක්‍රමලේඛය වෙනස් කිරීමේ අපහසුව
3.       තනි ගොනුවක ලියැවෙන නිසා memory එකේ අනවශ්‍ය ඉඩක් ගැනීම
ඉහත අපහසුතා මගින්
1.       කේත සම්පූර්ණයෙන් කියැවීම නිසා කාලය අපතේ යාම
2.       Line වැඩි නිසා කේත වල සංකිර්ණ තාවය වැඩියි
3.       වෙනස් කිරීමේ අපහසුව නිසා flexibility එක අඩුයි
Procedural languages වලට වැටෙන ක්‍රමලේඛන වන්නේ C, Pascal වැනි languages. දැනට  සුලු වශයෙන් ක්‍රමලේඛයන් මේවා යොදාගන්නවා. නමුත් Operating System, Hardware වලට, හා Microcontroller වල ක්‍රමලේඛ ලිවීම සදහා මෙම භාෂාවන් සුලබව යොදා ගන්නවා.
වස්තු පාදක ක්‍රමලේඛණයේදී එකම document එකේ ලියනවා වෙනුවට ඒ code එක document කිහිපයකට කඩලා ලියනවා. පසුව එ්වා අදාළ document එකක් සමගම සම්බන්ධ කරනවා. උදාහරණයක් ලෙස් Banking System සලකමු, එහි අතුරුමූණත සදහා එකක් document, කේත Operating System එකේ ධාවනය කරන්න තවත් document එකක් අදාල bank account වලට තවත්  document එකක්, transaction වලට තවත්  document එකක් හා user details වලට වෙනම එකක් සාදයි.

Sunday, 17 September 2017

Object Oriented Methodology

යම් ක්‍රමලේඛයක් හොදින් වටහා ගැනීමට වස්තූ පාදක ක්‍රමලේඛය අවශ්‍ය වේ. මෙය හොදින් ප්‍රගුණ කළ හොත් ඔබට වඩා හොද ගුණාත්මක ක්‍රමලේඛ කිරීමේ හැකියාව ලැබෙනු ඇත. නමුත් මතක තබා ගන්න සෑම ක්‍රමලේඛන භෂාවක් ම OOP මූලධර්ම පිළිපදින්නේ නම් නැහැ. ඒවැනි ක්‍රමලේඛ භාෂාවන් නම් C ක්‍රමලේඛන භාෂාවයි. OOP වල ඇති වාසිය වන්නේ යළි භාවිතා කිරීමේ හැකියාවයි.
අපි පළමුව ඉගෙන ගන්න යන්නේ වස්තුවක් කියන්නේ මොකක්ද කියලයි. පරිසරයේ පවතින සියලුම දේවල් වස්තු ලෙස පවති. දන්නා උදාහරණ වලින් ගතහොත් Atlas chooty පෑන සලකමු. එය object එකකි. මෙය සමස්තයක් ලෙස ගතහොත් පෑන(pen) කියන class එකට වැටේ. පෑනකට වර්ණයක්, තීන්ත මට්ටමක්, වෙළද නාමයක් හා මිලක් පවති. මේවා object එකේ properties නැත්නම් attributes  ලෙස හදුන්වයි. මේවා පෑනෙන් පෑනට වෙනස් වේ. තවද පෑනෙන් ලීවීම කළ හැක. මෙය පැන කියන object එකේ method එකයි.

තවත් උදාහරණ
වස්තුව
Nissan Sunny
iPhone 7
Student
Singer Washing Machine
Class
Car
Phone
Person
Washing Machine
Attributes
Color, Number, Owner, Gear Type
type, color, brand name, price, features
Name, Date of birth, skin color, height, weight, blood group
Brand name, price, weight, warranty period
Properties
Start Engine, Break Car, Accelerate Car, Reverse Car, Do signal
Send Message, take a picture, call to other
Walk, talk, eat, etc.
Rinse clothes, dry clothes.


Class

සෑම වස්තුවක්ම Class එකකට අයත් වෙනවා. Class එකක් කියන්නේ හරියට අකෘතියක් (නැත්නම් පිඔුරක්) (class is a blueprint of the object) වගේ දෙයක්. මේ  Class එක වර්ග දෙකකට බෙදේ. Class එකක් ඒවා sub class හා super class වේ. class නිර්මාණය කිරීමට class කියන keyword භාවීතා වේ. පසුව class name එක ද සදහන් කළයුතුයි. attributes හා method කියන්නේ class එකේ සාමජිකන්ය. එමෙන්ම Class එකක් නැතුව වස්තුක් අර්ථ දැක්විය නොහැක. තවදුරටත් විස්තර කළහොත් class, data types පරිශිලකලයනට උචිත පරිදි නිපද වීමට යෙදා ගැනේ.

class Person{

}

Object

අප වස්තු නැත්නම් object ගැන ඉහත පුලුල්ව විස්තර කළා. Object කියන්නේ Class සදහා උදාහරණයන් වේ. උදාහරණ ලෙස ගත හොත්  මයිනා, කොහා හා දෙමලිච්චා යනු පක්ෂින්  කියන  class  සදහා උදාහරණ වේ. සැබෑ ජීවිතයේදී Objectක් භෞතික, සංකල්පීය හෝ මෘදුකාංග ලෙස පවති.

  • Creator objects: Humans, Employees, Students, Animal
  • Physical objects: Car, Bus, Plan
  •  Objects in computer system: Monitor, Keyboard, Mouse, CPU, Memory
p
Java වලදී Object එකක් new keyword මගින් අර්ථ දක්වයි.
Person person1=new Person();

Abstraction

ඔබට පුලුවන්ද පහත දෑ වර්ගීකරණය කරන්න?
  • ·         Elephant
  • ·         CD player
  • ·         Television

  • ·         Chair
  • ·         Table
  • ·         Tiger

කොපමන class  ප්‍රමාණයක් ඔබ හදුනා ගත්තද? එයට දෙන උත්තරය මෙවැනී එකක් විය හැක. ඒවා Animal, Furniture, හා Electronic items ය. එය ලබාගන්නේ සමාන ගති ලක්ෂණ සලකා කාණ්ඩ වලට වෙන් කිරීමෙනි. මෙය වියුක්තකරණය නැතහොත් Abstraction ලෙස හදුන්වයි. 

මෙය තවත් නිදසුන් ගතහොත් මෝටර් රථය සලකමු. එය පදවන මගියා මෝටර් රථයෙන් break, reverse කරන්න දන්නා නමුත් එය සිදුවන අන්තර් ක්‍රියාකාරිත්වය නොදනී. එලෙස  මුලු ක්‍රියාකාරිත්වය නොදක්වා  එය අදහසක් ලෙස  ගෙන දැක්වීම  Abstraction වේ.



Inheritance

classes අතර parent–child relationship විස්තර කරන්නේ මෙමගින්. ඇත්තෙන්ම මෙය අවශ්‍ය වන්නේ parent class තුළ ඇති ලක්ෂණයන් child class වලටත් ලබාදීමටය. එමගින් දත්ත නැවත නැවත අර්ථ දැක්වීම අඩු කළ හැක. parent class 1කට child class එකක් හෝ කිහිපයක් තිබිය හැක. නමුත් child class 1කට parent class ගණන සැලකිය යුත්තේ යෙදාගන්නා ක්‍රමලේඛව වර්ගය අනුවය. JAVA හා C# වැනි ක්‍රමලේඛන තුළ parent class ගණන 1ක් වන අතර C++ වැනි ක්‍රමලේඛ වල එය 1ක් හෝ කිහිපයක් වේ. ඒ කියන්නේ multiple inheritance සංකල්පය JAVA හා C# වල සහය නොදක්වන බවයි.
 තවත් දෙයක් නම් parent අර්ථ දැක්වු දේ child ට වෙනස් කර භාවිතා කළ හැකි අතර child ට අලුතින් දෑ එක් කල හැක. අනෙක් විශේෂ දේ නම් parentට childගේ දේවල් ලබා ගත නොහැකි වීමයි.

ඉහත උදාහරණය සලකමු.  Vehicle කියන්නේ Road Vehicle, Air Vehicle, Water Vehicle යන class තුනේ parent class එකයි. මෙම child classටම තියෙන්නේ Vehicle ලක්ෂණයි. ඒ කියන්නේ color, price, engine type, maximum speed ආදීයයි. මේවා Vehicle හි අර්ථ දක්වනවා මෙන්ම child වලදී දත්ත ලබා දේ. එනම් Road Vehicle හීදි එක maximum speed එක 120 දිය හැක. Road Vehicle කියන්නේ Bus හා Motor Bike වල parent class එකයි. ඒ class දෙකට තියෙන්නේ Road Vehicle හි ලක්ෂණයන්ය.

බොහෝ තැන් වලදී parent class එකක් super class ලෙසද child class එකක් sub class එකක් ලෙසද හදුන්වයි.

Inheritance පහත ආකාරයේ හැඩ ගනී.
Types of Inheritance
tutorialpoint site 

Encapsulation

ක්‍රමලේඛයේ දත්ත වල ආරක්ෂාව ගැන සලකා බලන්නේ මෙතැනෙනි. මෙම OOP වල එක් පහසුකමකි. දත්ත බාහිර ලෝකයෙන් සැගවීම Encapsulation වේ. මෙම දත්ත වලට ප්‍රවේශ වීමට නම් ඊට අදාළ method භාවිතා කළයුතුයි. මෙම සුවිශේෂී method හදුන්වන්නේ getters හා setters කියාය. තවද constructor මගින් ද ලබා දෙන අවස්ථාද ඇත.

Polymorphism 

object එකක් බහු ආකාරයක් ලබාගැනීමේ හැකියාව polymorphism(බහුරූපතාව) ලෙස හදුන්වයි. බහුලව භාවීතා වන්නේ parent class යොදා ගෙන child class object අර්ථ දක්වන ආකාරයයි. IS-A වැටෙන සියලුම සබදතා polymorphic වේ. 
Polymorphism හි ප්‍රධනා වශයෙන් සිද්ධ වෙන්නේ super class reference එකක් යොදා ගෙන sub class එකක functions ක්‍රියත්මක කරවීමයි.