Anda di halaman 1dari 12

TUGAS MOBILE COMPUTING

NEAREST NEIGHBOUR ALGORITHM

Dosen: Prof. Dr. Ir. Teddy Mantoro, MSc

Nama :Agus Riyanto


Nim :1511601252
Kelas :TI
Program Pasca Sarjana Magister Komputer
Universitas Budi Luhur
2017
Diasumsikan data pada sinyal strength dan signal quality didapat dari table berikut iini:

ALGORITMA

1. Input Data dan tampilkan data hasil input

input data signal strength pada ruang A

input data signal strenght pada ruang B

input data signal quality pada ruang A

input data signal quality pada ruang B

tampilkan data signal strength pada ruang A

tampilkan data signal strenght pada ruang B

tampilkan data signal quality pada ruang A

tampilkan data signal quality pada ruang B

2. Hitung Rata-rata

hitung rata-rata signal strength pada ruang A

hitung rata-rata signal strength pada ruang B

hitung rata-rata signal quality pada ruang A

hitung rata-rata signal quality pada ruang B

3. Hitung Standar Deviasi

hitung standar deviasi signal strength pada ruang A

hitung standar deviasi signal strength pada ruang B

hitung standar deviasi signal quality pada ruang A

hitung standar deviasi signal quality pada ruang B


Signal Strength Signal Quality Room

AP1 AP2 AP3 AP4 AP5 AP6 AP1 AP2 AP3 AP4 AP5 AP6 Name

45 67 23 87 66 23 11 22 33 44 55 66 A

34 65 77 3 53 43 34 45 12 26 64 98 A

12 34 56 23 67 77 72 23 78 90 45 89 B

54 45 23 65 12 45 65 65 86 67 50 54 B

4. Normalisasi

lakukan normalisasi tiap data signal strength pada ruang A

lakukan normalisasi tiap data signal strength pada ruang B

lakukan normalisasi tiap data signal quality pada ruang A

lakukan normalisasi tiap data signal quality pada ruang B

5. Euclidean Distance dan bandingkan

hitung euclidean distance pada ruang A

hitung euclidean distance pada ruang B

bandingkan euclidean distance pada ruang A dan B

jika euclidean distance A < euclidean distance B maka user ada di ruang A

jika euclidean distance A > euclidean distance B maka user ada di ruang B

PSEUDOCODE (PASCAL)
procedure Generate;
var i: integer;
ssa, ssb, sqa, sqb : integer;
begin
//-----inisialisasi
lbSSA.Clear;
lbSSB.Clear;
//----- generate data signal strength di room a
for i := 1 to 10 do
begin
ssa := random(100);
lbSSA.Items.Add(inttostr(ssa));
end;
//----- generate data signal strength di room b
for i := 1 to 10 do
begin
ssb := random(100);
lbSSB.Items.Add(inttostr(ssb));
end;
//----- generate data signal quality di room a
lbSQA.Clear;
for i := 1 to 10 do
begin
sqa := random(100);
lbSQA.Items.Add(inttostr(sqa));
end;
//----- generate data signal quality di room b
lbSQB.Clear;
for i := 1 to 10 do
begin
sqb := random(100);
lbSQB.Items.Add(inttostr(sqb));
end;
end;
procedure Calculate;
var i : integer ;
totssa, totssb, totsqa, totsqb : integer;
avgssa, avgssb, avgsqa, avgsqb : real;
stdssa, stdssb, stdsqa, stdsqb : real;
ssna, ssnb, sqna, sqnb : real ;
distancea, distanceb : real;
begin
//------ inisialisasi
totssa:=0; totssb:=0; totsqa:=0; totsqb:=0;
avgssa:=0; avgssb:=0; avgsqa:=0; avgsqb:=0;
stdssa:=0; stdssb:=0; stdsqa:=0; stdsqb:=0;
ssna:=0; ssnb:=0; sqna:=0; sqnb:=0;
distancea:=0; distanceb:=0;
//----- hitung total
for i := 0 to lbssa.Items.Count-1 do
begin
totssa:=totssa+strtoint(lbssa.Items[i]);
end;
for i := 0 to lbssb.Items.Count-1 do
begin
totssb:=totssb+strtoint(lbssb.Items[i]);
end;
for i := 0 to lbsqa.Items.Count-1 do
begin
totsqa:=totsqa+strtoint(lbsqa.Items[i]);
end;
for i := 0 to lbsqb.Items.Count-1 do
begin
totsqb:=totsqb+strtoint(lbsqb.Items[i]);
end;
edtotssa.Text:=inttostr(totssa);
edtotssb.Text:=inttostr(totssb);
edtotsqa.Text:=inttostr(totsqa);
edtotsqb.Text:=inttostr(totsqb);
//------hitung rata-rata
avgssa:=totssa/10;
edavgssa.Text:=floattostr(avgssa);
avgssb:=totssb/10;
edavgssb.Text:=floattostr(avgssb);
avgsqa:=totsqa/10;
edavgsqa.Text:=floattostr(avgsqa);
avgsqb:=totsqb/10;
edavgsqb.Text:=floattostr(avgsqb);
//----- hitung standar deviasi
for i := 0 to lbssa.Items.Count-1 do
begin
stdssa:=(stdssa+sqr((strtofloat(lbssa.Items[i])-avgssa)))/9;
end;
for i := 0 to lbssb.Items.Count-1 do
begin
stdssb:=(stdssb+sqr((strtofloat(lbssb.Items[i])-avgssb)))/9;
end;
for i := 0 to lbsqa.Items.Count-1 do
begin
stdsqa:=(stdsqa+sqr((strtofloat(lbsqa.Items[i])-avgsqa)))/9;
end;
for i := 0 to lbsqb.Items.Count-1 do
begin
stdsqb:=(stdsqb+sqr((strtofloat(lbsqb.Items[i])-avgsqb)))/9;
end;
edstdssa.Text:=floattostr(sqrt(stdssa));
edstdssb.Text:=floattostr(sqrt(stdssb));
edstdsqa.Text:=floattostr(sqrt(stdsqa));
edstdsqb.Text:=floattostr(sqrt(stdsqb));
//-----hitung normalisasi
for i := 0 to lbssa.Items.Count-1 do
begin
ssna:=(strtofloat(lbssa.Items[i])-avgssa)/stdssa;
lbSSNA.Items.Add(floattostr(ssna)) ;
end;
for i := 0 to lbssb.Items.Count-1 do
begin
ssnb:=(strtofloat(lbssb.Items[i])-avgssb)/stdssb;
lbSSNB.Items.Add(floattostr(ssnb)) ;
end;
for i := 0 to lbsqa.Items.Count-1 do
begin
sqna:=(strtofloat(lbsqa.Items[i])-avgsqa)/stdsqa;
lbSQNA.Items.Add(floattostr(sqna)) ;
end;
for i := 0 to lbsqb.Items.Count-1 do
begin
sqnb:=(strtofloat(lbsqb.Items[i])-avgsqb)/stdsqb;
lbSQNB.Items.Add(floattostr(sqnb)) ;
end;
//----- hitung euclidean distance
for i:=0 to lbssna.Items.Count-1 do
begin
distancea:=distancea+sqr(strtofloat(lbssna.Items[i])-
strtofloat(lbsqna.items[i]));
end;
for i:=0 to lbssnb.Items.Count-1 do
begin
distanceb:=distanceb+sqr(strtofloat(lbssnb.Items[i])-
strtofloat(lbsqnb.items[i]));
end;
eddistancea.Text:=floattostr(sqrt(distancea));
eddistanceb.Text:=floattostr(sqrt(distanceb));
//-----kesimpulan
if distancea<distanceb then
edconclusion.Text:='User is in Room A'
else if distancea>distanceb then
edconclusion.Text:='User is in Room B'
else
edconclusion.Text:='Not Defined';
end;
SOURCE CODE (DELPHI/LAZARUS)
unit Main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
lbSSA: TListBox;
Label1: TLabel;
Label2: TLabel;
lbSSB: TListBox;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
lbSQA: TListBox;
lbSQB: TListBox;
GroupBox3: TGroupBox;
buGenerate: TButton;
edAVGSSA: TEdit;
Label5: TLabel;
Label6: TLabel;
edAVGSSB: TEdit;
Label7: TLabel;
Label8: TLabel;
edSTDSSA: TEdit;
edSTDSSB: TEdit;
Label9: TLabel;
Label10: TLabel;
edAVGSQA: TEdit;
edAVGSQB: TEdit;
Label11: TLabel;
edSTDSQA: TEdit;
edSTDSQB: TEdit;
Label12: TLabel;
Button1: TButton;
Label13: TLabel;
edTotSSA: TEdit;
Label14: TLabel;
edTotSSB: TEdit;
Label15: TLabel;
edTotSQA: TEdit;
Label16: TLabel;
edTotSQB: TEdit;
GroupBox4: TGroupBox;
Label17: TLabel;
Label18: TLabel;
lbSSNA: TListBox;
lbSSNB: TListBox;
GroupBox5: TGroupBox;
Label19: TLabel;
Label20: TLabel;
lbSQNA: TListBox;
lbSQNB: TListBox;
GroupBox6: TGroupBox;
Label27: TLabel;
Label28: TLabel;
edDistanceA: TEdit;
edDistanceB: TEdit;
Label21: TLabel;
edConclusion: TEdit;
procedure buGenerateClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.buGenerateClick(Sender: TObject);
var i: integer;
ssa, ssb, sqa, sqb : integer;
begin
//-----inisialisasi
lbSSA.Clear;
lbSSB.Clear;
//----- generate data signal strength di room a
for i := 1 to 10 do
begin
ssa := random(100);
lbSSA.Items.Add(inttostr(ssa));
end;
//----- generate data signal strength di room b
for i := 1 to 10 do
begin
ssb := random(100);
lbSSB.Items.Add(inttostr(ssb));
end;
//----- generate data signal quality di room a
lbSQA.Clear;
for i := 1 to 10 do
begin
sqa := random(100);
lbSQA.Items.Add(inttostr(sqa));
end;
//----- generate data signal quality di room b
lbSQB.Clear;
for i := 1 to 10 do
begin
sqb := random(100);
lbSQB.Items.Add(inttostr(sqb));
end;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
var i : integer ;
totssa, totssb, totsqa, totsqb : integer;
avgssa, avgssb, avgsqa, avgsqb : real;
stdssa, stdssb, stdsqa, stdsqb : real;
ssna, ssnb, sqna, sqnb : real ;
distancea, distanceb : real;
begin
//------ inisialisasi
totssa:=0;
totssb:=0;
totsqa:=0;
totsqb:=0;
avgssa:=0;
avgssb:=0;
avgsqa:=0;
avgsqb:=0;
stdssa:=0;
stdssb:=0;
stdsqa:=0;
stdsqb:=0;
ssna:=0;
ssnb:=0;
sqna:=0;
sqnb:=0;
distancea:=0;
distanceb:=0;
lbSSNA.Clear;
lbSSNB.Clear;
lbSQNA.Clear;
lbSQNB.Clear;
//----- hitung total
for i := 0 to lbssa.Items.Count-1 do
begin
totssa:=totssa+strtoint(lbssa.Items[i]);
end;
for i := 0 to lbssb.Items.Count-1 do
begin
totssb:=totssb+strtoint(lbssb.Items[i]);
end;
for i := 0 to lbsqa.Items.Count-1 do
begin
totsqa:=totsqa+strtoint(lbsqa.Items[i]);
end;
for i := 0 to lbsqb.Items.Count-1 do
begin
totsqb:=totsqb+strtoint(lbsqb.Items[i]);
end;
edtotssa.Text:=inttostr(totssa);
edtotssb.Text:=inttostr(totssb);
edtotsqa.Text:=inttostr(totsqa);
edtotsqb.Text:=inttostr(totsqb);
//------hitung rata-rata
avgssa:=totssa/10;
edavgssa.Text:=floattostr(avgssa);
avgssb:=totssb/10;
edavgssb.Text:=floattostr(avgssb);
avgsqa:=totsqa/10;
edavgsqa.Text:=floattostr(avgsqa);
avgsqb:=totsqb/10;
edavgsqb.Text:=floattostr(avgsqb);
//----- hitung standar deviasi
for i := 0 to lbssa.Items.Count-1 do
begin
stdssa:=(stdssa+sqr((strtofloat(lbssa.Items[i])-avgssa)))/9;
end;
for i := 0 to lbssb.Items.Count-1 do
begin
stdssb:=(stdssb+sqr((strtofloat(lbssb.Items[i])-avgssb)))/9;
end;
for i := 0 to lbsqa.Items.Count-1 do
begin
stdsqa:=(stdsqa+sqr((strtofloat(lbsqa.Items[i])-avgsqa)))/9;
end;
for i := 0 to lbsqb.Items.Count-1 do
begin
stdsqb:=(stdsqb+sqr((strtofloat(lbsqb.Items[i])-avgsqb)))/9;
end;
edstdssa.Text:=floattostr(sqrt(stdssa));
edstdssb.Text:=floattostr(sqrt(stdssb));
edstdsqa.Text:=floattostr(sqrt(stdsqa));
edstdsqb.Text:=floattostr(sqrt(stdsqb));
//-----hitung normalisasi
for i := 0 to lbssa.Items.Count-1 do
begin
ssna:=(strtofloat(lbssa.Items[i])-avgssa)/stdssa;
lbSSNA.Items.Add(floattostr(ssna)) ;
end;
for i := 0 to lbssb.Items.Count-1 do
begin
ssnb:=(strtofloat(lbssb.Items[i])-avgssb)/stdssb;
lbSSNB.Items.Add(floattostr(ssnb)) ;
end;
for i := 0 to lbsqa.Items.Count-1 do
begin
sqna:=(strtofloat(lbsqa.Items[i])-avgsqa)/stdsqa;
lbSQNA.Items.Add(floattostr(sqna)) ;
end;
for i := 0 to lbsqb.Items.Count-1 do
begin
sqnb:=(strtofloat(lbsqb.Items[i])-avgsqb)/stdsqb;
lbSQNB.Items.Add(floattostr(sqnb)) ;
end;
//----- hitung euclidean distance
for i:=0 to lbssna.Items.Count-1 do
begin
distancea:=distancea+sqr(strtofloat(lbssna.Items[i])-
strtofloat(lbsqna.items[i]));
end;
for i:=0 to lbssnb.Items.Count-1 do
begin
distanceb:=distanceb+sqr(strtofloat(lbssnb.Items[i])-
strtofloat(lbsqnb.items[i]));
end;
eddistancea.Text:=floattostr(sqrt(distancea));
eddistanceb.Text:=floattostr(sqrt(distanceb));
//-----kesimpulan
if distancea<distanceb then
edconclusion.Text:='User is in Room A'
else if distancea>distanceb then
edconclusion.Text:='User is in Room B'
else
edconclusion.Text:='Not Defined';
end;
end.

Uji coba

Gambar 1. User berada diruang A


Gambar 2. User berada di ruang B

Anda mungkin juga menyukai