Εργασία SocialInfluence [2014-15]

Εργασία SocialInfluence [2014-15]

Δημοσίευσηαπό pefraimi » 18 Μάιος 2015, 18:46

Εδώ μπορείτε να υποβάλετε ερωτήσεις σχετικά με την εργασία SocialInfluence.
pefraimi
Sr. Member
 
Δημοσιεύσεις: 333
Εγγραφή: 01 Νοέμ 2008, 14:59

Re: Εργασία SocialInfluence [2014-15]

Δημοσίευσηαπό Serendipity » 09 Ιουν 2015, 15:59

Καλησπέρα!

Όσον αφορά τον τύπο των γραφημάτων στα οποία θα διαγωνιστούμε, το είπαμε νομίζω χτες στο μάθημα, αλλά θέλω να το επιβεβαιώσω :
θα είναι τα TwoWheels(7)
TwoWheels(15)
BarabasiAlbert(25, 2, 1, 1.0)
BarabasiAlbert(25, 2, 2, 1.0)
BarabasiAlbert(150, 2, 1, 1.0)
BarabasiAlbert(150, 2, 2, 1.0)
και 2 άγνωστα τύπου BarabasiAlbert?
Serendipity
Newbie
 
Δημοσιεύσεις: 14
Εγγραφή: 18 Ιουν 2009, 16:45

Re: Εργασία SocialInfluence [2014-15]

Δημοσίευσηαπό James » 09 Ιουν 2015, 16:39

Serendipity έγραψε:Καλησπέρα!

Όσον αφορά τον τύπο των γραφημάτων στα οποία θα διαγωνιστούμε, το είπαμε νομίζω χτες στο μάθημα, αλλά θέλω να το επιβεβαιώσω :
θα είναι τα TwoWheels(7)
TwoWheels(15)
BarabasiAlbert(25, 2, 1, 1.0)
BarabasiAlbert(25, 2, 2, 1.0)
BarabasiAlbert(150, 2, 1, 1.0)
BarabasiAlbert(150, 2, 2, 1.0)
και 2 άγνωστα τύπου BarabasiAlbert?

Θα είναι ορισμένα γραφήματα τύπου TwoWheels (με διαφορετικό πλήθος κόμβων, όχι απαραίτητα 7 και 15), ορισμένα BarabasiAlbert με άγνωστες παραμέτρους (μεγαλύτερη βαρύτητα από τα TwoWheels), και 1 ή 2 άγνωστα γραφήματα που δεν είναι BarabasiAlbert αλλά πραγματικά κοινωνικά δίκτυα και δε γνωρίζετε τίποτε άλλο για αυτά ούτε έχετε κώδικα δημιουργίας τους. Οι παράμετροι δημιουργίας γραφημάτων στον κώδικα είναι ενδεικτικές, μην περιμένετε όμως ακραίες διαφοροποιήσεις σε αυτές για το πρωτάθλημα.
(Μόνο) James
Άβαταρ μέλους
James
Διαχειριστής
 
Δημοσιεύσεις: 1740
Εγγραφή: 08 Ιαν 2008, 22:29
Φοιτητής ΗΜΜΥ: Όχι

Re: Εργασία SocialInfluence [2014-15]

Δημοσίευσηαπό James » 11 Ιουν 2015, 21:37

Ο αριθμός (δηλαδή το id) του εκάστοτε κόμβου θα προκύπτει πάντα ο ίδιος? π.χ. στο TwoWheels(7) ο κόμβος 15 θα είναι πάντα ο κεντρικός (και στο πρωτάθλημα)? Επίσης, οι κόμβοι 1 και 8 δεν υπάρχουν?

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

Για το πρωτάθλημα όμως θα χρειαστεί λίγη προσοχή. Αν το ίδιο instance του framework (μία συγκεκριμένη εκτέλεση της εφαρμογής) δημιουργήσει πάνω από ένα γραφήματα, τα IDs των κόμβων θα πρέπει να είναι μοναδικά ανάμεσα σε όλα τα γραφήματα με αποτέλεσμα αν για παράδειγμα δημιουργήσω 2 γραφήματα TwoWheels(7), τα ID του δεύτερου θα ξεκινάνε από το 16. Αυτό μπορείτε να το επιβεβαιώσετε με την παρακάτω μέθοδο:

Κώδικας: Επιλογή όλων
Graph g = TwoWheels.generate(7);
System.out.println(g.getVertices().toString());
Graph g2 = TwoWheels.generate(7);
System.out.println(g2.getVertices().toString());

η οποία εκτυπώνει

Κώδικας: Επιλογή όλων
[2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15]
[16, 19, 18, 21, 20, 22, 25, 24, 27, 26, 29, 28, 30]

Η απάντηση, οπότε, στην ερώτηση είναι όχι, στο πρωτάθλημα δεν είναι εγγυημένο ότι στο TwoWheels(7) ο 15 θα είναι ο κεντρικός διότι θα δημιουργηθούν πολλαπλά γραφήματα στο ίδιο instance του framework και γενικά δε θα πρέπει να βασιστείτε καθόλου στο ID του κόμβου. Για να βρείτε, πχ στο TwoWheels ποιος είναι ο κεντρικός μπορείτε να βρείτε αυτόν με το μεγαλύτερο PageRank με χρήση της PageRank.execute.

Στην isInterrupted() αν ο παίκτης την ελέγχει στη getMove() έχει χρόνο να ενημερώσει την κίνησή του, εφόσον επιστρέψει true? Γιατί απ'ότι φαίνεται αυτό δεν επιτρέπεται, οπότε για ποιο λόγο υπάρχει η συνάρτηση?

Εφόσον η isInterrupted() επιστρέψει true, πράγματι, είναι ήδη αργά για τον παίκτη να ενημερώσει την κίνησή του. Ο λόγος που υπάρχει είναι επειδή τις περισσότερες φορές απλώς χρειαζόμαστε να γνωρίζουμε πότε ο παίκτης εξάντλησε το χρόνο του ώστε να σταματήσει τις επαναλήψεις του και να τερματίσει (αλλιώς πώς θα το ξέραμε;). Αν είναι μέρος της στρατηγικής σας και χρειάζεστε ένα μηχανισμό που να σας ειδοποιεί λίγο πριν λήξει ο χρόνος και όχι εκπρόθεσμα, θα πρέπει να χρησιμοποιήσετε τη μέθοδο με την System.currentTimeMillis() που κάναμε στην v1.2.
(Μόνο) James
Άβαταρ μέλους
James
Διαχειριστής
 
Δημοσιεύσεις: 1740
Εγγραφή: 08 Ιαν 2008, 22:29
Φοιτητής ΗΜΜΥ: Όχι

Μέλη σε σύνδεση

Μέλη σε αυτή την Δ. Συζήτηση : Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης