Seite 1 von 1

Random Liste für verschiedene Gruppen erstellen/Präferenzenliste

Verfasst: Montag 13. Juni 2016, 17:22
von Anaconda2016
Hallo zusammen, ich benutze derzeit Anaconda2, um unter anderem den Deferred Acceptance Algorithm mit uniform tie-breaking laufen zu lassen. Bisher habe ich ein Programm gefunden, wo die Studenten für die Schulen in zwei Gruppen aufgeteilt werden. Das Prinzip von dem Algorithmus ist ja, dass die Studenten nach einer Prioritätsliste den Schule zugeordnet werden, wobei die Studenten selber Präferenzen über die Schule haben. Bisher ist es im Programm zu progammiert, dass die Studenten und Schulen zweidimensional zufällig auf einer Map dargestellt werden, und die Schulen teilen die Studenten dann für sich jeweils in zwei Gruppen ein:\\

Code: Alles auswählen

def district_priorities(n, a, grid_fun = gen_grid):
    A = []

    capacity = n/a + 1
    if n % a == 0:
        capacity = n/a

    Q = [capacity] * a

    school_grid, student_grid = grid_fun(n, a)
    s2d_map = student_to_district_map(school_grid, student_grid)

    for school in range(a):
        rank = {}
        for student in range(n):
            if s2d_map[student] == school : %hier wird geprüft, ob der Student in der "walk zone" ist und eine höhere priorität genießt, 0 heißt hier höher, da es später noch umgedreht wird
                rank[student] = 0
            else :
                rank[student] = 1
        A.append(rank)

    if VERBOSE:
        print 'School Priorities'
        printS(A)
        print 'Capacities:', Q
        

    return A, Q, [s2d_map, school_grid, student_grid]


Das heißt wenn man z.B. zwei Stunden und zwei Schule hätte mit folgenden Koordinaten: Studenten x1,x2=(0,1 ; 1,0) und schulen s1,s2=(0,1 ; 1,0) mit jeweils einem Platz, hätte man als Prioritätenliste für die schulen: s1: x1=0 , x2=1 s2: x1=1, x2=1

Allerdings möchte ich das ganze jetzt nicht mehr von irgendeiner walkzone abhängig machen, sondern irgendwie eine gleiche Prioritätenliste für alle Schule erstellen, wo allerdings durch den zufall bestimmt wird, wer höhere prioriät hat und dies nicht von der distanz abhängig ist, und nach Möglichkeit das ganze nicht in zwei Gruppen aufteilen, sondern in 6-10 gruppen, also rank[student]=0, rank[student]=1, rank[student])2,...
Das Ergebnis wären dann also Prioritätenlisten über Gruppen von Studenten, wobei diese noch nichtmals die selbe Gruppengrößen haben sollten. Hat jemand eine Idee, wie ich das in diesem Programm einbinden kann? ich wäre sehr hilfreich, habe mit Mühe und Not das Programm einigermaßen verstanden, kann es aber auf Grund mangelnder Kenntnisse nicht selber umschreiben

Re: Random Liste für verschiedene Gruppen erstellen/Präferenzenliste

Verfasst: Samstag 18. Juni 2016, 14:04
von Anaconda2016
Hallo nochmal, funktioniert folgendes Programm, oder habe ich einen denkfehler? als eingabe sind n und a integers von 100 bis 5, n= anzahl der studenten und a= anzahl der schulen

Code: Alles auswählen

A = []

    capacity = n/a + 1
    if n % a == 0:
        capacity = n/a

    Q = [capacity] * a


	school_grid, student_grid = grid_fun(n, a)
   	 s2d_map = student_to_district_map(school_grid, student_grid)

    
     
       r1= {}
       r2={}
       r3={}
       r4={}
       r1=n/4
       r2=n/2
       r3=3*n/4
       r4=n
       for school in range(a):
        	rank = {}
        		for student in range(n): 
        			if student <= r1:
                			rank[student] = 0
            			if student <=r2:
                			rank[student] = 0.25
           			 if student <=r3:
            				rank[student] =0.75     
           			 else :
               				 rank[student] = 1
    
       
        		A.append(rank)
     if VERBOSE:
        print 'School Priorities'
        printS(A)
        print 'Capacities:', Q
        

    return A, Q, [s2d_map, school_grid, student_grid]
also hier würden die Studenten in 4 rankringgruppen aufgeteilt werden und das ganze wird in der Matrix A gespeichert, richtig?

Re: Random Liste für verschiedene Gruppen erstellen/Präferenzenliste

Verfasst: Freitag 8. Juli 2016, 14:56
von Anaconda2016
hat sich erledigt, beiträge können gelöscht werden