Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen

Einführung

1962 sprachen D. Gale und L. S. Shapley die Frage der stabilen Ehe an. Für diese Reihe von Leistungen wurde Chaprey 2012 mit dem Nobelpreis für Wirtschaft ausgezeichnet.

Das Problem der stabilen Ehe ist wie folgt. (Aus Wikipedia)

Ein Beispiel für ein stabiles Eheproblem sind N Männer und N Frauen sowie die Wunschliste jedes Einzelnen. Die Wunschliste ist eine Liste, in der alle unterschiedlichen Geschlechter in voller Reihenfolge nach den Vorlieben jedes Einzelnen angeordnet sind. Die Lösung für das Problem der stabilen Ehe ist die stabile Übereinstimmung. Zum Beispiel für das Problem der stabilen Ehe Ein Paar, das Ihnen besser gefällt als die andere Person, die Sie gerade bilden (im Folgenden als blockierendes Paar bezeichnet). Eine nicht vorhandene Übereinstimmung wird als stabile Übereinstimmung bezeichnet.

Das Problem der stabilen Ehe ist eine Art stabiles Matching-Problem, und das Problem des stabilen Matchings ist weit verbreitet, beispielsweise die Zuweisung von angehenden Ärzten an Krankenhäuser und Universitätsstudenten an Labors. Die Zuweisung von Auszubildenden wird in den Vereinigten Staaten seit etwa 1950 verwendet und seit kurzem in Japan eingesetzt.

Das Problem des stabilen Abgleichs wird durch [Stable_Matching] von ortoolpy von Python (http://qiita.com/Tsutomu-KKE@github/items/2ec5f7626054f4b4de63) gelöst. tun können. Probieren wir es aus.

Löse mit Python

Stable_Matching von ortoolpy kann nur gelöst werden, wenn die Anzahl der Auszubildenden und Beauftragten gleich ist. Wenn hier die Anzahl der akzeptablen Ziele A 2 ist, erstellen wir einen Dummy des Zuweisungsziels wie Zuweisungsziel A_0 und Zuweisungsziel A_1 und stimmen mit diesen überein. Definieren Sie eine Methode stabile_matching2, die ein solches erweitertes stabiles Übereinstimmungsproblem löst.

python3


from itertools import accumulate
from ortoolpy import stable_matching
def stable_matching2(prefs, prefl, capa):
    """
Asymmetrische Anpassung
    prefs:Präferenz für den Einsatzort des Auszubildenden
    prefl:Präferenz für Auszubildende(Alle Aufgaben haben die gleiche Präferenz)
    capa:Akzeptable Anzahl der Beauftragten
    """
    acca = list(accumulate([0] + capa[:-1])) #Kumulativ akzeptable Anzahl
    idx = [i for i, j in enumerate(capa) for _ in range(j)] #Dummy-Zuweisungsziel → Zuweisungsziel-Konvertierungsliste
    prefs = [[j+acca[i] for i in pr for j in range(capa[i])] for pr in prefs] #Dummy Auswahl
    res = stable_matching([prefl] * len(prefl), prefs)
    return{k:idx[v] for k, v in res.items()} #Bringen Sie den Dummy zum Original zurück

Erstellen Sie eine zufällige Frage.

python3


lab_capa = [2, 3, 3, 2] #Akzeptable Anzahl der Beauftragten
ns, nl = sum(lab_capa), len(lab_capa) #Anzahl der Auszubildenden und Anzahl der Aufgaben

import numpy as np
np.random.seed(1)
def shuffled(n):
    """0..n-Mische und kehre zurück 1"""
    a = np.arange(n)
    np.random.shuffle(a)
    return a.tolist()
performance = shuffled(ns) #Präferenz für Auszubildende
preferences = [shuffled(nl) for i in range(ns)] #Präferenz für den Einsatzort

print(performance)
print(preferences)
>>>
[2, 9, 6, 4, 0, 3, 1, 7, 8, 5]
[[2, 0, 1, 3], [3, 0, 1, 2], [3, 1, 2, 0], [3, 1, 0, 2], [1, 3, 2, 0],
 [3, 0, 2, 1], [3, 2, 1, 0], [1, 0, 2, 3], [0, 3, 1, 2], [2, 0, 3, 1]]

Lösen Sie das Ergebnis und zeigen Sie es an.

python3


res = stable_matching2(preferences, performance, lab_capa)
for k, v in res.items():
    print('medizinischer Assistenzarzt%d ->Zugewiesen an%d'%(k,v))
>>>
Auszubildender 0->Zugewiesen an 2
Auszubildender 1->Zugewiesen an 0
Auszubildender 2->Zugewiesen an 3
Auszubildender 3->Zugewiesen an 1
Auszubildender 4->Zugewiesen an 1
Auszubildender 5->Zugewiesen an 2
Auszubildender 6->Zugewiesen an 3
Auszubildender 7->Zugewiesen an 1
Auszubildender 8->Zugewiesen an 0
Auszubildender 9->Zugewiesen an 2

Beziehung zur Kombinationsoptimierung

Das stabile Übereinstimmungsproblem ist ein Problem, das nach Übereinstimmungen sucht, ohne Paare zu blockieren, und was uns wichtig ist, ist der relative Wert der Präferenzreihenfolge. Wenn die Präferenz in erster Linie ein absoluter Wert ist, wird sie zu einem Gewichtsanpassungsproblem des Kombinationsoptimierungsproblems.

Der absolute Wert ist beispielsweise die Pendelzeit vom Wohnort des Auszubildenden zum Einsatzort. Zu diesem Zeitpunkt ist das Problem der Minimierung der gesamten Pendelzeit aller Auszubildenden ein Gewichtsanpassungsproblem, das durch das Edmonds-Verfahren oder dergleichen gelöst werden kann.

Die Lösung des Gewichtsanpassungsproblems ist eine stabile Anpassung, aber die Lösung des stabilen Anpassungsproblems ist nicht immer die optimale Lösung des Gewichtsanpassungsproblems.

Immerhin sieht es so aus:

Sie können sich wahrscheinliche Gewichte vorstellen → Problem der Gewichtsanpassung Das genaue Gewicht ist unbekannt, aber die Reihenfolge ist bekannt → Stabiles Übereinstimmungsproblem

Referenz Erfahren Sie mehr über die Liebe, während Sie das Problem der stabilen Ehe lösen und die Haskell-Programmierung einführen das ist alles

Recommended Posts