Εύρεση του βέλτιστου σταθμού φόρτισης με το Kinetica

1
Εύρεση του βέλτιστου σταθμού φόρτισης με το Kinetica

Βρίσκεστε σε ένα ηλεκτρικό αυτοκίνητο που είναι σχεδόν αφόρτιστο. Υπάρχουν αρκετοί σταθμοί φόρτισης στους οποίους μπορείτε να σταματήσετε. Ποιο να επιλέξετε καθ‘ οδόν προς τον προορισμό σας;

Σε αυτήν την επίδειξη, χρησιμοποιούμε το API γραφήματος της Kinetica για να δημιουργήσουμε μια αναπαράσταση γραφήματος 1,2 εκατομμυρίων κόμβων του οδικού δικτύου μέσα και γύρω από το Ντιτρόιτ. Στη συνέχεια, χρησιμοποιούμε αυτό το δίκτυο γραφημάτων για να βρούμε τη βέλτιστη διαδρομή μεταξύ ενός σημείου πηγής και προορισμού, επιλέγοντας τον καλύτερο σταθμό φόρτισης από 268 διαφορετικές επιλογές. Επαναλαμβάνουμε αυτούς τους υπολογισμούς κάθε 5 δευτερόλεπτα χρησιμοποιώντας μια διαδικασία SQL με νέα σύνολα σημείων προέλευσης και προορισμού που προέρχονται από ένα θέμα του Κάφκα.

Υπάρχουν τρία βήματα σε αυτή την ανάλυση.

  1. Βρείτε τη συντομότερη διαδρομή από το σημείο πηγής προς όλους τους σταθμούς φόρτισης που βρίσκονται εντός εμβέλειας (δηλαδή πριν αδειάσει το αυτοκίνητο).
CREATE OR REPLACE TABLE ev_route_optimization.source_to_charging_path AS
    SELECT * 
    FROM TABLE (
        SOLVE_GRAPH
        (
            GRAPH => 'ev_route_optimization.mm_lakes',
            SOLVER_TYPE => 'SHORTEST_PATH',
            SOURCE_NODES => INPUT_TABLE(
                SELECT ST_GEOMFROMTEXT(source_pt) AS WKTPOINT 
                FROM ev_route_optimization.source_dest 
                ORDER BY TIMESTAMP DESC -- Find the latest source record
                LIMIT 1
            ),
            DESTINATION_NODES => INPUT_TABLE(
                SELECT 
                    Longitude AS X,
                    Latitude AS Y 
                FROM ev_route_optimization.mm_evcharging
            ),
            OPTIONS => KV_PAIRS(max_solution_radius="2400")
        )
    );
  1. Υπολογίστε την αντίστροφη συντομότερη διαδρομή από όλους τους σταθμούς φόρτισης μέχρι τον προορισμό.
    CREATE OR REPLACE TABLE ev_route_optimization.charging_to_dest_path AS
    SELECT * 
    FROM TABLE (
        SOLVE_GRAPH
        (
            GRAPH => 'ev_route_optimization.mm_lakes',
            SOLVER_TYPE => 'INVERSE_SHORTEST_PATH',
            SOURCE_NODES => INPUT_TABLE(
                SELECT ST_GEOMFROMTEXT(dest_pt) AS WKTPOINT 
                FROM ev_route_optimization.source_dest 
                ORDER BY TIMESTAMP DESC -- Find the latest destination record
                LIMIT 1
            ),
            DESTINATION_NODES => INPUT_TABLE(
                SELECT 
                    Longitude AS X,
                    Latitude AS Y 
                FROM ev_route_optimization.mm_evcharging
            )
        )
    );
  1. Συνδυάστε τα δύο για να βρείτε τη βέλτιστη διαδρομή με το χαμηλότερο συνολικό κόστος.
INSERT INTO ev_route_optimization.optimal_route /* ki_hint_update_on_existing_pk */  
    SELECT * 
    FROM
    (
        WITH temp (id_with_min_cost) AS
        (
            SELECT arg_min(s1+s2,id1) as id_with_min_cost FROM
                (SELECT  SOLVERS_NODE_COSTS as s1, SOLVERS_NODE_ID as id1, * from ev_route_optimization.source_to_charging_path),
                (SELECT  SOLVERS_NODE_COSTS as s2, SOLVERS_NODE_ID as id2, * from ev_route_optimization.charging_to_dest_path)
            WHERE id1 = id2
        )
        SELECT 
            1 as pk_id,     --this is the primary key so we will always be overwriting this record
            s1.wktroute as wkt1,
            s2.wktroute as wkt2,
            st_linemerge(st_collect(s1.wktroute,s2.wktroute)) as wkt_full
        FROM 
            ev_route_optimization.source_to_charging_path s1, 
            ev_route_optimization.charging_to_dest_path s2,
            temp 
        WHERE 
            s1.SOLVERS_NODE_ID = temp.id_with_min_cost and
            s2.SOLVERS_NODE_ID = temp.id_with_min_cost
    );

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

Ολόκληρη η ανάλυση γίνεται με SQL σε μια μικρή παρουσία του Kinetica στο Azure. Έχουμε ρυθμίσει όλα τα δεδομένα έτσι ώστε το παράδειγμα να είναι πλήρως αναπαραγώγιμο. Ακολουθήστε τις παρακάτω οδηγίες για να το δοκιμάσετε μόνοι σας.

Δοκιμάστε το μόνοι σας

Το μόνο που χρειάζεστε για να ξεκινήσετε είναι μια παρουσία του Kinetica και το αρχείο του βιβλίου εργασίας.

Το αρχείο του βιβλίου εργασίας είναι διαθέσιμο εδώ.

Το Kinetica είναι διαθέσιμο μέσω του Azure και του AWS ως διαχειριζόμενη υπηρεσία, μπορεί επίσης να εγκατασταθεί και να εκτελεστεί στον τοπικό σας υπολογιστή ως κοντέινερ Docker. Ακολουθήστε τις οδηγίες εδώ για να εγκαταστήσετε το Kinetica.

Εάν έχετε οποιεσδήποτε ερωτήσεις, μπορείτε να επικοινωνήσετε μαζί μας Χαλαρότητα και θα επικοινωνήσουμε άμεσα μαζί σας.

Δείτε το demo

Schreibe einen Kommentar