• Tidak ada hasil yang ditemukan

Implementasi Algoritma Greedy Dan Algoritma Floyd – Warshall Untuk Menentukan Jarak Terpendek (Studi Kasus : Beberapa Apotek Terkenal Di Kota Medan)

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Algoritma Greedy Dan Algoritma Floyd – Warshall Untuk Menentukan Jarak Terpendek (Studi Kasus : Beberapa Apotek Terkenal Di Kota Medan)"

Copied!
22
0
0

Teks penuh

(1)

LISTING PROGRAM

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

ActivityMainBinding binding =

DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main);

GeneralHandler handler = new GeneralHandler(MainActivity.this); binding.setHandler(handler);

public class LokasiActivity extends AppCompatActivity {

final int GPS_PERMISSION = 1; MapFragment mapFragment; GoogleMap map;

Location mLastLocation;

LocationManager mLocationManager; Button btnSetLokasi;

(2)

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_lokasi);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); btnSetLokasi = (Button) findViewById(R.id.btn_set_lokasi); btnSetLokasi.setOnClickListener(new View.OnClickListener() { @Override

ActivityCompat.requestPermissions(LokasiActivity.this, new

String[]{Manifest.permission.ACCESS_FINE_LOCATION,

(3)

lng = mLastLocation.getLongitude(); map.addMarker(new MarkerOptions() .draggable(true)

.position(new

LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude())) .title("Posisi Anda"));

map.animateCamera(CameraUpdateFactory.newCameraPosition(position), null); }

private Location getLastKnownLocation() {

mLocationManager = (LocationManager)

getApplicationContext().getSystemService(LOCATION_SERVICE);

(4)

import android.support.v4.app.Fragment;

public class HasilActivity extends AppCompatActivity {

List<Node> allNode;

List<Connection> allConnection; Rute rute;

/*

* Limit titik bertujuan untuk menentukan berapa titik terdekat * yang akan dianggap sebagai tetangga dari sebuah node

*/

ListRouteFragment listRouteFragment; Double jarak = 0.0;

long waktu = 0; @Override

(5)
(6)
(7)

import android.widget.Button;

public class HalamanPencarian extends AppCompatActivity {

private final int ALGORITMA_GREEDY = 0;

private final int ALGORITMA_FLOYD = 1;

private Integer idTujuan, algo; List<Node> allNode;

List<Connection> allConnection; Button btnSearch;

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true); setContentView(R.layout.activity_halaman_pencarian);

(8)

spinnerAlgo = (Spinner) findViewById(R.id.spinner_algoritma); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, algoritma);

spinnerAlgo.setAdapter(adapter);

spinnerAlgo.setOnItemSelectedListener(new

AdapterView.OnItemSelectedListener() {

spinnerTujuan.setOnItemSelectedListener(new

AdapterView.OnItemSelectedListener() {

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data); if (requestCode == 101 && resultCode == RESULT_OK) {

Log.d("RESULT_OK", "Latitude : " + data.getDoubleExtra("lat",

0) + " Longitude : " + data.getDoubleExtra("lng", 0)); TextView textView = (TextView)

findViewById(R.id.tv_position);

latitude = data.getDoubleExtra("lat", 0); longitude = data.getDoubleExtra("lng", 0);

String teks = "Lat : " + String.format("%.2f", latitude) + " Long : " + String.format("%.2f", longitude);

(9)

protected Object doInBackground(Object[] params) {

* Created by codetorium on 13/05/17. */

public class Rute implements Serializable {

List<Node> rute;

(10)

nama = "";

public void setTetangga(List<Node> tetangga) { this.tetangga = tetangga;

}

public double euclidean(Node a, Node b){

double derajatKeKM = 111.319;

(11)

}

public double euclidean(LatLng latLng){

double derajatKeKM = 111.319;

return (Math.sqrt(Math.pow(this.getLat() - latLng.latitude, 2) + Math.pow(this.getLng() - latLng.longitude, 2))) * derajatKeKM;

}

public Double getJarak(Node node){

if(node.getId() == this.getId()) return 0.; if(this.getTetangga().indexOf(node) == -1 &&

node.getTetangga().indexOf(this) == -1) return Double.POSITIVE_INFINITY; return euclidean(this, node);

} }

7.

Connection.Java

package com.example.codetorium.projekulfa.Model;

/**

* Created by codetorium on 28/04/17. */

public class Connection {

private int id, idAwal, idTujuan;

public int getId() {

return id; }

public void setId(int id) { this.id = id;

}

public int getIdAwal() {

return idAwal; }

public void setIdAwal(int idAwal) {

this.idAwal = idAwal; }

public int getIdTujuan() {

return idTujuan; }

public void setIdTujuan(int idTujuan) {

this.idTujuan = idTujuan; }

}

8.

DatabaseHelper.Java

package com.example.codetorium.projekulfa.Helper;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import com.example.codetorium.projekulfa.Model.Connection;

import com.example.codetorium.projekulfa.Model.Node;

import java.util.ArrayList;

(12)

/**

* Created by codetorium on 08/05/17. */

public class DatabaseHelper {

private AssetHelper assetHelper; private SQLiteDatabase db;

public DatabaseHelper(Context context){

assetHelper = new AssetHelper(context);

public List<Connection> getAllConnection(){ List<Connection> result = new ArrayList<>();

* Created by codetorium on 08/05/17. */

public class AssetHelper extends SQLiteAssetHelper {

private static final String DB_NAME = "apotek.sqlite";

(13)

public AssetHelper(Context context){

super(context, DB_NAME, null, DB_VERSION); }

}

10.

RouteFragment.Java

package com.example.codetorium.projekulfa.Helper;

import android.content.Context;

import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

/**

* Created by codetorium on 08/05/17. */

public class AssetHelper extends SQLiteAssetHelper {

private static final String DB_NAME = "apotek.sqlite";

private static final int DB_VERSION = 1;

public AssetHelper(Context context){

super(context, DB_NAME, null, DB_VERSION); }

}

11.

ListRouteFragment.Java

package com.example.codetorium.projekulfa.Fragment;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ListView;

import android.widget.TextView;

import com.example.codetorium.projekulfa.Adapter.RouteAdapter;

import com.example.codetorium.projekulfa.Model.Node;

import com.example.codetorium.projekulfa.Model.Rute;

import com.example.codetorium.projekulfa.R;

import java.util.List;

/**

* A simple {@link Fragment} subclass. */

public class ListRouteFragment extends Fragment {

Rute rute;

public ListRouteFragment() {

// Required empty public constructor }

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) { // Inflate the layout for this fragment

(14)

container, false);

rute = (Rute) getArguments().getSerializable("rute"); RouteAdapter routeAdapter = new RouteAdapter(getActivity(),

rute.getRute());

ListView lvRute = (ListView) view.findViewById(R.id.listview_rute); lvRute.setAdapter(routeAdapter); return view;

} }

12.

Greedy.Java

package com.example.codetorium.projekulfa.Algorithm;

import android.util.Log;

import com.example.codetorium.projekulfa.Model.Node;

import java.util.ArrayList;

import java.util.List;

/**

* Created by codetorium on 28/04/17. */

public class Greedy {

List<Node> open, closed;

double totalJarak;

long totalWaktu;

public Greedy() {

this.open = new ArrayList<>(); this.closed = new ArrayList<>(); this.totalWaktu = 0;

this.totalJarak = 0; }

public double getTotalJarak() {

return totalJarak; }

public void setTotalJarak(double totalJarak) {

this.totalJarak = totalJarak; }

public long getTotalWaktu() {

return totalWaktu; }

public void setTotalWaktu(long totalWaktu) {

this.totalWaktu = totalWaktu; }

public List<Node> cariRute(Node awal, Node tujuan) { long start = System.currentTimeMillis();

double jarakMinimum;

(15)

boolean adaTetangga = true;

* Created by codetorium on 28/04/17. */

//TODO:Floyd - Warshall Diatur lagi

(16)

double totalJarak;

long totalWaktu;

public Floydwarshall(List<Node> allNode){ this.allNode = allNode;

public List<Node> cariRute(Node awal, Node tujuan){ List<Node> result = new ArrayList<>(); floydObjects[k][i].jarak != Double.POSITIVE_INFINITY) {

(17)

kj = floydObjects[k][j].jarak; if(ij > ik + kj){

floydObjects[i][j].rute.clear();

floydObjects[i][j].rute.addAll(floydObjects[i][k].rute);

floydObjects[i][j].rute.addAll(floydObjects[k][j].rute); floydObjects[i][j].jarak = ik + kj; }

} } }

int indexFrom, indexTo;

indexFrom = allNode.indexOf(awal); indexTo = allNode.indexOf(tujuan); if(indexFrom == -1 || indexTo == -1){

Log.d("ERROR_INDEX", "NODE TIDAK DITEMUKAN DALAM ALL NODE"); }

List<Node> rute = floydObjects[indexFrom][indexTo].rute; totalJarak = floydObjects[indexFrom][indexTo].jarak; Node prevNode = new Node();

prevNode.setId(-1); for(Node node : rute){

if(prevNode.getId() == node.getId()) continue; result.add(node);

prevNode = node; }

long end = System.currentTimeMillis(); this.totalWaktu = end - start;

for(Node node : result){

Log.d("FLOYD", node.getNama()); }

return result; }

}

14.

RouteAdapter.java

package com.example.codetorium.projekulfa.Adapter;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

import com.example.codetorium.projekulfa.Model.Node;

import com.example.codetorium.projekulfa.R;

import java.util.ArrayList;

import java.util.List;

(18)

* Created by codetorium on 11/05/17. */

public class RouteAdapter extends BaseAdapter {

List<Node> rute; Context context;

LayoutInflater inflater;

public RouteAdapter(Context context, List<Node> rute){ this.rute = new ArrayList<>(rute);

public View getView(int position, View convertView, ViewGroup parent) {

(19)

import android.view.View;

* Created by codetorium on 09/05/17. */

public class SpinnerAdapter extends BaseAdapter {

List<Node> allNode; Context context;

LayoutInflater inflater;

public SpinnerAdapter(Context context, List<Node> allNode){ this.context = context;

public View getView(int position, View convertView, ViewGroup parent) { tvNama.setText(allNode.get(position).getNama());

String latLng = "Latitude : " + String.format(Locale.UK, "%.2f",

allNode.get(position).getLat()) +

" Longitude : " + String.format(Locale.UK, "%.2f", allNode.get(position).getLng());

tvLatLng.setText(latLng);

tvKet.setText(allNode.get(position).getKet()); return view;

(20)

16.

ViewPageAdapter.Java

package com.example.codetorium.projekulfa.Adapter;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

/**

* Created by codetorium on 11/05/17. */

public class ViewPagerAdapter extends FragmentPagerAdapter {

List<Fragment> fragmentList; List<String> pageTitle;

public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragmentList, List<String> pageTitle) {

super(fm);

this.fragmentList = fragmentList; this.pageTitle = pageTitle; }

@Override

public Fragment getItem(int position) { return fragmentList.get(position); }

@Override

public int getCount() {

return fragmentList.size(); }

@Override

public CharSequence getPageTitle(int position) { return pageTitle.get(position);

} }

17.

GeralAdapter.Java

package com.example.codetorium.projekulfa.ActionHandler;

import android.content.Context;

import android.content.Intent;

import com.example.codetorium.projekulfa.View.HalamanPencarian;

import com.example.codetorium.projekulfa.View.LokasiActivity;

/**

* Created by codetorium on 28/04/17. */

public class GeneralHandler {

Context context;

public GeneralHandler(Context context){

this.context = context; }

public void pengujianOnClick(){

(21)

context.startActivity(halamanPencarian); }

public void cariLokasi(){

Intent halamanLokasi = new Intent(context, LokasiActivity.class); context.startActivity(halamanLokasi);

(22)

DAFTAR RIWAYAT HIDUP

Nama

:

Khairina Ulfa Nst

Tempat /Tgl Lahir

:

Medan, 15 Oktober 1993

Jenis Kelamin

:

Perempuan

Agama

:

Islam

Tinggi Badan

:

156 cm

Berat Badan

:

57 Kg

Status

:

Belum Menikah

Warga Negara

:

Indonesia

Alamat

:

Jl. HM Yamin, Medan

Kode Pos : 20233

Telepon

:

0813 6135 3279

E-mail

:

[email protected]

1999

2005

:

SD 060852 Medan

(Berijazah)

2005

2008

:

MTsN 2 Medan

(Berijazah)

2008

2011

:

MAN 1 Medan

(Berijazah)

2011

2014

:

Politeknik Negeri Medan

(Berijazah)

2014

Sekarang

:

Universitas Sumatera Utara

(Mahasiswa)

DATA PRIBADI

Referensi

Dokumen terkait

Start User mengakses Sistem Pencarian Halte Terdekat Halaman Home Input Posisi User Sistem akan memulai pencarian untuk menemukan Halte Terdekat Informasi tentang Trans

Berdasarkan beberapa penelitian tersebut, pada penelitian ini akan mengkaji masalah pencarian rute terpendek yang dapat dilalui oleh bus wisata di Kabupaten Banyumas yang

Adapun saran Penulis untuk Penelitian selanjutnya yang berkaitan dengan Aplikasi Pencarian Rute Terpendek Apotek di Kota Kendari dengan Menggunakan Algoritma

Tahap awal dari pencarian rute terpendek yaitu dengan mencari rute-rute yang menuju ke Air Terjun Waimarang dengan jarak, waktu dan biaya yang lebih sedikit..

Pengujian link failure dilakukan untuk mengetahui seberapa cepat waktu yang diperlukan algoritma routing dalam menemukan jalur tependek yang baru jika terjadi pemutusan

Adapun saran Penulis untuk Penelitian selanjutnya yang berkaitan dengan Aplikasi Pencarian Rute Terpendek Apotek di Kota Kendari dengan Menggunakan Algoritma

Pada tahap ini, pengujian dilakukan terhadap kinerja dari aplikasi driver pastifresh.id sejauh mana aplikasi ini dapat digunakan sesuai dengan yang diharapkan, dengan mencoba

Berdasarkan latar belakang dan rumusan masalah yang telah dipaparkan sebelumnya, maka tujuan dari penelitian ini adalah untuk mengetahui jalur terpendek evakuasi