Algorithmus Krankenhausbelegung

Brainiac

Bekanntes Mitglied
Ich habe folgende Ausgangssituation:

1..n Patienten haben 1..6 Krankheiten

Die Krankheiten haben eine Behandlungsdauer, und einen bestimmten Behandlungsraum.

Das Krankenhaus hat 1..n Behandlungsräume.

Ich suche nun einen Algorithmus der der die 1..n Patienten möglichst effizient durch das Krankenhaus schiebt. (Traum wäre, wenn man dem später noch verschiedene Kriterien mitgeben könnte, aber das ist Zukunftsmusik)

Bin ich da im Bereich NP Schwer?

Ich weiß im Moment nicht so wirklich wie ich da Anfangen soll. Irgendwelche Hinweise, wie und wo ich da suchen kann? Stichworte oder ähnliches.
 
Zuletzt bearbeitet von einem Moderator:

ThreadPool

Bekanntes Mitglied
Na da hast du dir ja was rausgesucht. Schau mal nach "scheduling problems" in Bezug zum Operations Research. Das was du da hast scheint eine Art "job shop scheduling"-Problem zu sein, also das Verteilen von "Arbeit" auf eine bestimmte Anzahl von Maschinen mit dem Ziel die Durchlaufzeit zu minimieren.
 

Brainiac

Bekanntes Mitglied
So danke euch für die Schubser in die richtige Richtung. Das wird wohl was komplexer, so wie es ausschaut. Ist wohl absolutes Forschungsgebiet. Zumindest finde ich nur universitäres Material dazu.
 

muckelzwerg

Bekanntes Mitglied
Noch bist Du nicht im Bereich NP-schwer sondern im Bereich "lass uns mal genauer hinschauen.

Du musst das Problem noch besser formalisieren.
1..n Patienten und 1..n Räume oder 1..m Räume?
Wieviele Krankheiten gibt maximal, bzw. was ist die Menge der Krankheiten, die behandelt werden kann?
Hat jeder Raum eine Liste von Krankheiten, die dort behandelt werden können? Oder gibt es für jede Krankheit genau einen Raum?
...
Was ist gesucht?
"Effizient" ist ungefähr so wie "geht nicht" als Fehlermedlung. ;)
Wenn Du etwas optimieren willst, dann musst Du eine Kostenfunktion aufstellen, mit der man Arbeiten kann.
Vielleicht die Leerlaufzeiten der Räume, oder die Wartezeiten der Patienten, oder doch was anderes?


Dann kannst Du schauen, ob Du Dein Problem irgendwo bei Schedulingproblemen wiederfindest.
Als Buchreferenz ist da meist Gary, Johnson "Computers and Intractability" angesagt. Da gibt es eine große Liste mit solchen Problemen.
Im Netz findest Du aber auch viel.

Wenn Du Dein Problem auf ein bekanntes Problem übertragen kannst, dann musst Du mal schauen, was es da für Möglichkeiten gibt.
Evlt. existiert ein Scheduling-Verfahren, das optimal ist. Vielleicht hast Du aber auch richtig Pech.
Versuch zusätzliche Randbedingungen zu ermitteln, mit denen das Problem vielleicht ein anderer zu behandelnder Spezialfall wird.
Das angesprochene TSP z.B. ist NP-hart, aber bei metrischem TSP sieht es schon wieder anders aus.
Da musst Du dann mal nach Approximationsverfahren schauen.
 

Brainiac

Bekanntes Mitglied
Also es sind 1..n Patienten mit 1 bis 6 Krankheiten. Bei den Krankheiten sind es dann 1 bis m verschiedene. Jede Krankheit benötigt genau einen Behandlungsraum. Jeder Behandlungsraum kann aber mehr als eine Krankheit behandeln.
Im Krankenhaus gibt es von jedem Behandlungsraum mind. einen. Aber es können auch mehr sein. Es muss aber nicht von jeder Sorte gleich viele geben.

Soviel nochmal zum Problem
 

muckelzwerg

Bekanntes Mitglied
Komm schon, das kannst Du noch besser.
Jeder Patient hat 1..6 (unterschiedliche) Krankheiten.
Wenn m > 6 dann hat trotzdem kein Patient mehr als 6 Krankheiten?
Wenn m < 6 dann hat kein Patient mehr als m Krankheiten?

Ein Behandlungsraum kann 1..x unterschiedliche Krankheiten behandeln.
"Es gibt von jedem Behandlungsraum mind. einen" was meinst Du damit? Dass es für jede Krankheit mindestens einen Raum gibt, in dem sie behandelt werden kann?
So wie Du das schreibst, klingt es nach Typen von Behandlungsräumen.
Bei m verschiedenen Krankheiten gibt es |P(m)| = 2^|m| verschiedene Räume (Potenzmenge). Das würde bedeuten bei 10 verschiedenen Krankheiten gibt es genau 1024 Räume.
Ist es nicht eher
"für jede Krankheit gibt es einen Raum, der mindestens diese Krankheit (und vielleicht auch andere) behandelt"?

Mach Dir mal ein Modell für die Abbildungen von Patienten auf Räume bzw. umgekehrt.
Wenn Patient P1 mit Krankheit K1 behandelt wird ist damit die Behandlung aller P1Kx blockiert. Räume die sonst nichts zu tun haben, warten dann während auf den Raum von P1 noch ein anderer Patient wartet, der eine andere Krankheit hat.
Wenn Raum R1 belegt ist, dann warten alle Patienten, die nur noch Krankheiten haben, die in R1 behandelt werden können.
...

Und nach wie vor die wichtigste Frage:
Was soll optimiert werden, was soll "effizient" gemacht werden?
Wartezeit der Patienten verringern? Durchschnittliche? Maximale? ...
Patientendurchsatz des Krankenhauses erhöhen?
Auslastung der Räume maximieren?
...

Und welche Größenordnungen hast Du? VIELLEICHT hast Du ja glück und kommst trotz nichtpolynomieller deterministischer Zeit noch hin. (ist aber eher unwahrscheinlich)
 

Brainiac

Bekanntes Mitglied
Es gibt bei der ganzen Geschichte ein Level. Je größer desto mehr Patienten, Krankheiten und Räume stehen an.
Im Moment gibt es 122 Krankheiten. Jeder Krankheit hat ihre Behandlungszeit. Je Patient kommen 1 bis 6 verschiedene vor (es kann keine Krankheit doppelt vorkommen, aber es könnten alle Krankheiten für den selben Behandlungsraum sein).
Wenn die aktuell mögliche Anzahl an Krankheiten größer 6 ist hat ein Patient max. 6 Krankheiten.
Wenn die anzahl möglicher Krankheiten < 6 ist, hat kein Patient mehr als die mögliche Anzahl an Krankheiten.

Dein Zitat:
Wenn m > 6 dann hat trotzdem kein Patient mehr als 6 Krankheiten?
Wenn m < 6 dann hat kein Patient mehr als m Krankheiten?
JA

Es gibt 14 verschieden Behandlungsräume, auf die sich die Krankheiten verteilen. Jede Krankheit hat einen Behandlungsraum, aber jeder Behandlungsraum hat mehrere Krankheiten.
Im Krankenhaus gibt es nun eine beliebige Anzahl und Kombination dieser Behandlungsräume (in gewissen Grenzen, da das Krankenhaus nicht unendlich Platz hat, aber sollten nicht viel mehr als max. 60 sein. Wobei eher wengier.)
Die Patienten Anzahl ist theoretisch beliebig. Im Schnitt so gegen ~100 tendierend. Jeder Patient bringt Punkte und Geld. Allerdings erst wenn alle seine Krankheiten behandelt sind. Für den ersten Ansatz soll so optimiert werden, das alle Patienten in der kürzesten Gesamtbehandlungszeit durchs Krankenhaus sind. Wenn eine Gesamtbehandlungszeit > 24h (oder noch besser auswählbar) rauskommt, sollte entweder nach Punkten oder Geld optimiert werden können (in der gewählten Gesamtbehandlungszeit).

Jeder Behandlungsraum kann gleichzeitig nur einen Patienten aufnehmen. Und jeder Patient kann nur in einem Behandlungsraum sein. Nach jeder einzeln Krankheit kann der Raum gewechselt werden. Krankheiten die im gleichen Raum behandelt werden, können nicht in beliebiger Reihenfolge behandelt werden sondern nur in Richtung 1 nach 6.

So hoffe das ganze nun ausführlich genug formuliert zu haben. Ganz schön kompliziert das was man im Kopf hat und einem klar ist, sauber definiert zu Papier zu bringen.

@Edit: Frage Ergänzt
 
Zuletzt bearbeitet:

Brainiac

Bekanntes Mitglied
@Muckelzwerg keine Idee mehr? Oder fehlt noch was?

Alls job shop scheduling algorithmen gehen irgendwie davon aus, das die Maschienen auf denen gearbeitet wird gleich sind. Das ist ja bei mir anders. Maschine = Behandlungsraum. Oder hab ich da nen Denkfehler?
 
P

Pippl

Gast
Wenn ein Patient in einem Raum wegen mehreren Krankheiten behandelt wird gibt es zwischen den einzelnen Behandlungen (welche ja unterschiedlich dauern können) noch eine Wartezeit? (wegen Behandlungsraum säubern, neue Behandlungsgerätschaft holen usw.)

Wechselt ein Patient den Raum ist es wichtig zu beachten das ein Wechsel auch seine Zeit dauert?
 

Brainiac

Bekanntes Mitglied
Wenn ein Patient in einem Raum wegen mehreren Krankheiten behandelt wird gibt es zwischen den einzelnen Behandlungen (welche ja unterschiedlich dauern können) noch eine Wartezeit? (wegen Behandlungsraum säubern, neue Behandlungsgerätschaft holen usw.)
Wenn es sinn macht den Patienten mit all seinen Krankheiten für einen Raum auf einmal zu behandeln, geschieht dies in einem Rutsch. Keine Wartezeit, oder ähnliches. Die Sekunde, in der die eine Behandlung fertig ist, startet die nächste.

Wechselt ein Patient den Raum ist es wichtig zu beachten das ein Wechsel auch seine Zeit dauert?
Nein das eigentliche Wechseln erfordert keine Zeit. Bzw. muss nicht mitberücksichtigt werden. Wenn hier mal längere Pausen entstanden wären. Würde einfach auf die aktuelle Menge an Patienten mit ihren Krankheiten optimiert. Sprich man würde einen neuen Abarbeitungsplan berechnen. Sofern das nicht mehrere Stunden dauern würde.

P.S: Dabei gehts um ein Browsergame. Nicht um die Planung eines Realenkrankenhausablaufes. Kapi Hospital - Browsergames - Jetzt kostenlos im Browser spielen!
 

muckelzwerg

Bekanntes Mitglied
Puah, also wie gesagt, Du musst das Problem irgendwie formal zu packen kriegen.
Such mal nach Scheduling-Problemen und schau, ob Du Deinen Fall darauf übertragen kannst.
Wir hatten mal einen Fall, da ging es um die Migration von Anwendungen auf mehreren virtuellen Maschinen. Die Anwendung hatten verschiedene Anforderungen an Speicher und Prozessorleistung.
Da wurde auf das Bin-Packing Problem übertragen.
Als drittes schau mal nach Algorithmen für Warteschlangen.
Mit Scheduling Problems, multidimensional bin packing problems und Queueing Problems solltest Du schon was finden.
Den Gary & Johnson gibts auch als "Studentenversion", da kannst Du auch mal suchen.

Ich kann mir vorstellen, dass Du sogar mehr als nur eines dieser Probleme vor Dir hast.
Mehrdimensionale Anforderungen und mehrdimensionale, begrenzte Ressourcen ist schon kein Kindergarten mehr.
Für die weitere Vorgehensweise solltest Du auf jeden Fall den Brute-Force implementieren und dann an die Stelle kommen, wo die Rechenleistung nicht mehr ausreicht.

Also entwirf mal ein Format für die Ausgabe. Was soll das Verfahren am Ende abliefern? Das muss ja eine Reihenfolge von Zuordnungen Patient -> Raum sein.
Und dann schreibst Du einen einfachen Algorithmus, der JEDE mögliche Lösung (also jede mögliche Behandlungsreihenfolge) ausprobiert und deren Bewertung ermittelt.
Es wird da einen Punkt geben, ab dem die Rechenzeit nicht mehr ausreicht. Also fang mit kleinen Mengen an.


Edit: Ist ja vielleicht nur ein Browserspiel, aber das ändert nichts an den Problemen die dahinterstehen.
Das hättest Du aber auch gleich sagen können.
So oder so ist das kein einfaches Problem und mit der Lösung kann man nicht nur bei Browsergames schummeln, sondern auch Geld verdienen.
Deswegen musst Du ab hier, dann mal selbst weiterschaffen.
 
Zuletzt bearbeitet:

Shulyn

Bekanntes Mitglied
Mir ist das auch noch zu ungenau...
Kannst du evtl einen Konkreten Fall beschreiben?
Bsp.:
Wir haben 4 Patienten. A - D.
Diese haben folgende Krankheiten :
A = 1,2
B = 1,4
c = 1
D 1,2,3,4,5,6

Es stehen folgende Räume zur verfügung :
Raum 1, Raum 2, Raum 3
Raum 1 Heilt = Krankheit 1,2
Raum 2 Heilt = Krankheit 2,3,4
Raum 3 Heilt = Krankheit 1,2,3,4,5,6

Die Behandlungsdauer für die Räume ist wie folgt :
Raum 1 = 1h
Raum 2 = 6h
Raum 3 = 24h


Jetzt könntest du nach ver. Zielen die "belegung" Planen.
Max Ausnutzung der Räume,
Min. Wartezeit für Patienten,
Min. Behandlungsdauer
Max. Behandlungsdauer (Patienten die langen Behandelt werden bringen mehr Geld?!? )
oder oder oder...

Wo ich mir das alles so durch den Kopf gehen lasse, das hört sich etwas nach Theme Hospital ? Wikipedia an ^^
 
Zuletzt bearbeitet:
P

Pippl

Gast
Mir stellt sich nur noch eine Frage:

Es gibt den Patienten A, welcher die Krankheiten 1,2,5,10 hat

Nun gibt es zwei Behandlungsräume
Behandlungsraum 1 heilt Krankheit 1, 5 und
Behandlungsraum 2 heilt Krankheit 2, 10

Der Patient wird in Behandlungsraum 1 geschickt und es wird die Krankheit 1 geheilt. Muss er jetzt erst gegen Krankheit 2 behandelt werden bevor er gegen Krankheit 5 behandelt werden kann oder ist es nur wichtig das erst Krankheit 1 und dann Krankheit 5 behandelt wird?

Die Behandlungsdauer für die Räume ist wie folgt :
Raum 1 = 1h
Raum 2 = 6h
Raum 3 = 24h

Beachte jede Krankheit hat einen Behandlungsdauer, nicht der Raum!

Irgentwie fehlt mir noch das Ziel. Was soll erreicht werden?
Er hat das Ziel erst später gepostet ;-)
... . Jeder Patient bringt Punkte und Geld. Allerdings erst wenn alle seine Krankheiten behandelt sind. Für den ersten Ansatz soll so optimiert werden, das alle Patienten in der kürzesten Gesamtbehandlungszeit durchs Krankenhaus sind. ...

Wobei hier unklar ist ob jeder Patient gleich viel Punkte/Geld bringt wenn er von allen Krankheiten geheilt wird oder es auf die Dauer des Aufenthalt im Krankenhaus (kann ja sein das er x Stunden nicht behandelt wird weil alles voll) und die behandelten Krankheiten ankommt?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4
G k nearest neighbor algorithmus Allgemeine Java-Themen 7
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
T Problem RSA-Algorithmus in Java? Allgemeine Java-Themen 2
minzel Hash-Algorithmus Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
K Algorithmus Allgemeine Java-Themen 10
C Algorithmus für Array Allgemeine Java-Themen 9
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J fällt euch ein Algorithmus ein? Allgemeine Java-Themen 4
S Algorithmus für Sudoku Allgemeine Java-Themen 17
N Euklidischer Algorithmus in Java und keine Terminierung. Allgemeine Java-Themen 7
F Algorithmus für Sortierung gesucht Allgemeine Java-Themen 15
T Algorithmus verbessern Allgemeine Java-Themen 10
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
U Ford-Fulkerson Algorithmus gesucht Allgemeine Java-Themen 1
U Dijkstra Algorithmus gesucht Allgemeine Java-Themen 4
D Algorithmus für die Erkennung fehlerhafter Eingaben Allgemeine Java-Themen 4
I hash-algorithmus Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben