Ich habe ein normales Zuordnungsproblem, wo ich Arbeiter mit Jobs abgleichen möchte. Aber es gibt mehrere Arten von Jobs, jeder mit einer bestimmten Anzahl von Positionen. Zum Beispiel würde ich 10.000 Erbauer, 5.000 Schweißer usw. benötigen. Jeder Arbeiter hat natürlich die gleiche Vorliebe für jede Position der gleichen Art von Arbeit.Zuordnungsfehler, wenn Jobs mehr als einmal verfügbar sind
Mein aktueller Ansatz ist es, den ungarischen Algorithmus zu verwenden und einfach die Matrixspalten zu erweitern, um das zu berücksichtigen. Zum Beispiel hätte es 10.000 Builder-Spalten, 5.000 Schweißer usw. Natürlich mit O (n^3) und einer Matrix, die so groß ist, kann das Erhalten von Ergebnissen eine Weile dauern.
Gibt es eine Variation des ungarischen Algorithmus oder eine andere, die die Tatsache nutzt, dass es mehrere Verbindungen zu einem Jobknoten geben kann? Oder sollten Sie lieber in Monte-Carlo- oder genetische Suchbaum-Algorithmen schauen?
edit:
Formale Beschreibung als Sascha vorgeschlagen:
Set W für Arbeiter, J für Arbeitsplätze, Gewichtsfunktion für die Bevorzugung, Funktion
für die Menge der verfügbaren Arbeitsplätze
So die Funktion, die ich minimieren wollen wäre:
wo
Einschränkungen wären:
und
wie von Yay gefragt, wäre es in Ordnung, wenn sie für einen Tag oder zwei auf einer normalen Verbraucher Maschine laufen. Momentan gibt es 50.000 Arbeiter mit 10 Arten von Jobs und insgesamt 50.000 Jobs. Also ist die Matrix 50k x 50k (erweitert) im Falle des ungarischen Algorithmus, den ich gerade benutze, oder 50k x 10 für LP mit der zusätzlichen Bedingung , während
und Präferenzwerte in der Matrix von 0-100 gehen .
Formalisieren Sie Ihr Problem, um mehr Hilfe zu bekommen. Dieses Problem sollte leicht durch lineare Programmierung gelöst werden, ich möchte es nicht codieren, es sei denn, es gibt diese informelle Beschreibung. (Für das klassische Zuweisungs-Problem sind LP-Solver oft sogar schneller als der dedizierte ungarische Algorithmus.) – sascha
Hinzugefügt formailazation, ich hoffe nur, dass es korrekt ist. – user2368505
Dies sieht jetzt eher wie ein Transportproblem aus. Vielleicht möchten Sie einen vernünftigen LP-Solver in Betracht ziehen, da dies sowohl Zuordnungs- als auch Transportprobleme (und andere Variationen) zulässt. –