Τετάρτη 19 Δεκεμβρίου 2012

RideSharing

ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΗΣ RIDESHARING ΣΤΗ ΠΛΑΤΦΟΡΜΑ ANDROID, H OΠΟΙΑ ΘΑ ΕΠΩΦΕΛΕΙΤΑΙ ΑΠΟ ΤΟ MAP-REDUCE FRAMEWORK ΩΣΤΕ ΝΑ ΠΡΟΣΔΙΟΡΙΣΕΙ ΤΗ ΒΕΛΤΙΣΤΗ ΕΠΙΛΟΓΗ ΤΑΞΙ ΠΟΥ ΧΡΕΙΑΖΟΝΤΑΙ ΓΙΑ ΝΑ ΜΕΤΑΦΕΡΟΥΝ ΤΟΥΣ ΧΡΗΣΤΕΣ


ΕΙΣΑΓΩΓΗ

Στην εργασία αυτή έχουμε να υλοποιήσουμε μια εφαρμογή που θα τρέχει στο κινητό κάθε χρήστη, ο οποίος θα μπορεί να εισάγει την διαδρομή που θέλει να κάνει, δίνοντας το σημείο εκκίνησης και τερματισμού. 

Το πρόβλημα που έχουμε να αντιμετωπίσουμε, είναι αφού πρώτα εισάξει ο χρήστης το σημείο εκκίνησης και τερματισμού και αφού προσδιοριστεί η λίστα με τα ταξί που βρίσκονται σε κοντινή απόσταση από αυτόν (π.χ μικρότερη από κάποια km), θα πρέπει να προσδιοριστεί ο αριθμός των χρηστών που μπορεί ένα ταξί να εξυπηρετήσει με βάση επικαλυπτόμενες διαδρομές.
Δηλαδή τα σημεία εκκίνησης και τερματισμού των χρηστών που θα εξυπηρετήσει το ταξί, θα ανήκουν είτε πάνω πάνω στη διαδρομή πού κάνει το ταξί, είτε σε μια κοντινή απόσταση από αυτή.


 ΣΧΕΤΙΚΟ ΣΕΝΑΡΙΟ ΧΡΗΣΗΣ:


Ο χρήστης - user στέλνει αίτημα στον server. Ο Server - Master αφού λάβει τα δεδομένα από το user είναι υπεύθυνος να αποφασίσει έναν αριθμό από Workers - κινητά τα οποία θα εκτελέσουν τη Μap συνάρτηση και έναν αριθμό από Workers - κινητά που θα εκτελέσουν τη Reduce συνάρτηση. 

Άρα θα πρέπει να δημιουργήσουμε τις εξείς κλάσεις:



  1. Τη κλάση ChatServer και ChatServerThread στις οποίες θα επιτυγχάνεται η σύνδεση του χρήστη - user με τον Server - Master, καθώς και των Workers με τον Server, που θα υλοποιούν τις Map και Reduce συναρτήσεις.
  2. Tη κλάση ClientActivity που είναι η αίτηση για σύνδεση του client με τον Server.
  3. Mια κλάση FindPlaceActivity που θα εμφανίζει στο χρήστη - user τον ανάλογο χάρτη.
  4. Μια κλάση Place, στην οποία ο χρήστης θα πρέπει να εισάγει τη διαδρομή που θέλει να κάνει, δίνοντας το σημέιο εκκίνησης και τερματισμού. Αυτό θα γίνεται εισάγοντας τα latitude και longitude το σημείου εκκίνησης και τερματισμού που θέλει να ακολουθήσει ο χρήστης. Τα σημεία εκκίνησης θεωρούμε ότι ανήκουν σε ένα προκαθορισμένο σύνολο ( πιάτσες ταξί).
  5. Μια κλάση RandomPointGenerator, μέσα στην οποία θα εντοπίζονται τυχαία σημεία στο χάρτη, που θα απεικονίζουν τη τοποθεσία των ταξί τη συγκεκριμένη στιγμή.
  6. Tη κλάση MapWorkerActivity, στην οποία θα προσδιορίζεται το σύνολο των ταξί που μπορούν να εξυπηρετήσουν τη διαδρομή του χρήστη βάση της κοντινότερης διαδρομής από το σημείο εκκίνησης του χρήστη.
  7. Τη κλάση ReduceWorkerActivity η οποία θα παίρνει όλα τα ενδιάμεσα αποτελέσματα, δηλαδή τις διαδρομές που μπορεί να εξυπηρετήσει ένα ταξί (ΜapWorkerActivity) και θα υπολογίζει τη βέλτιστη διαδρομή που θα πρέπει να ακολουθήσει επιλέγοντας χρήστες που τα σημεία εκκίνησης και τερματισμού ανήκουν στη διαδρομή που θα κάνει το ταξί είτε βρίσκονται σε κοντινή απόσταση, δηλαδή διαδρομές που επικαλύπτονται.

Τα αποτελέσματα θα  παραδίδονται στο χρήστη για να αποφασίσει αν αποδέχεται την επιλογή.

AΡΧΙΤΕΚΤΟΝΙΚΗ:




Επεξήγηση της αρχιτεκτονικής του συστήματος - Εισαγωγή σε δομές του συστήματος

1)public class ChatServer implements Runnable {

     public static void main(String args[])
     public ChatServer(int port) 
     public void run() 
     public void start()
     public void stop()
     public int findClient(int ID) 
     public synchronized String handle(int ID, String input)
     public synchronized void handleConnectionType(int ID , String ConnectionType)
     private void addThread(Socket socket)
     public void ShowConnectionTypes()    

public class ChatServerThreat extends Thread{
    public ChatServerThread(ChatServer _server, Socket _socket)
    public void send(String msg)
    public String receive() 
    public int getID() 
    public void run()
    public void openStreams() throws IOException 

2)
public class ClientActivity extends Activity {
   public void onCreate(Bundle savedInstanceState) 
   
3)
public class FindPlaceActivity extends MapActivity {
   public void onCreate(Bundle savedInstanceState)
   public void initializeMap()
   public void findLocation(String locationName)
   
4)
public class Place{
    public Place(String name, String coords)
    public Place(String name,double lat,double lng)

5)
public class RandomPointGenerator {
    public static Location getLocation(Location location, int radius) {    
     
6)
public class MapWorkerActivity extends Activity {

7)
public class ReduceWorkerActivity extends Activity{








**Οποιαδήποτε αλλαγή, κάθε σημαντικό βήμα ή και πρόβλημα θα αναρτάται στο blog αυτό, γι’αυτό ενδέχεται να παρουσιαστούν αλλαγές στο παρόν κείμενο.