4

Ich bin neu in genetischen Algorithmen und ich wurde beauftragt, einen genetischen Algorithmus zu implementieren, um die Reihenfolge der Anfragen pro Wochentag einer Apotheke zu optimieren. Lassen Sie mich zunächst das Problem erklären:Genetischer Algorithmus: Anfrage Optimierung

Es gibt 9 Familien, die Anfragen an jedem Tag einer Arbeitswoche (Montag bis Freitag) ausgestellt werden. Die Apotheke kann nur 1 bis 3 Familien pro Tag besuchen, nicht mehr und nicht weniger und sie können keine Familie in derselben Woche wiederholen. Das Hauptziel besteht darin, den besten Tag für jede zu besuchende Familie zu optimieren, damit die Apotheke die maximalen Anfragen pro Woche mit den Einschränkungen des Problems erfüllt. Die Eingabe in den Optimierungsalgorithmus ist der jährliche Mittelwert jeder Anzahl von Anforderungen, die von jeder Familie ausgegeben werden. Zum Beispiel:

(lassen Sie sich mit nur drei Familien arbeiten, um das Beispiel zu vereinfachen):

Eingang:

                |   Mo   |   Di   |   Mi   |   Do   |   Fr
F1       |         |     |           |         | F2     | 20         | 12     | 0         | 1       | 2
F3   | 2             | 0       | 0           | 19     | 3

Mögliche Lösung:

| Mon Di | Mi | Do | Fr
|               | F2     | F1     | F3     |

Bis jetzt habe ich das ganze Konzept der Genetik und der genetischen Algorithmen studiert. Ich habe mich mit der Partikelschwarmoptimierung beschäftigt, aber da meine Zeit ziemlich kurz ist, habe ich mich für ein Framework entschieden. Ich benutze JGAP, aber mein Hauptproblem ist, wie ich eine mögliche Lösung darstelle?Ich meine, wie sollte ich die Gene auf dem Chromosom organisieren, das für die Paarung, Zucht usw. verwendet wird? Ich habe bereits eine Fitness-Funktion entwickelt, aber ich kann die Gene nicht so codieren, wie ich es wollte. Irgendwelche Vorschläge?

+1

von dem, was Sie beschrieben haben und das Beispiel gegeben, ich denke, dieses Problem ist eine lineare kombinatorische Optimierung Problem und kann durch geeignete Methoden wie Simplex oder Rucksack-Algorithmen gelöst werden (nicht ganz sicher, welche war in diesem speziellen Fall) . Müssen Sie GA benutzen oder ist das Ihr Wunsch für dieses Projekt? – posdef

+0

Produzieren Sie jede Woche einen neuen Zeitplan oder sortieren Sie mehrere Wochen im Voraus aus? – Alain

+2

Mit 9 Familien an 5 Tagen gibt es höchstens 5^9, 1 Million, Lösungen. Das ist nicht so viel, ein einfaches BFS sollte den Trick machen. Oder nicht? – Ishtar

Antwort

1

In welcher Weise stelle ich eine mögliche Lösung vor?

Jede Familie sollte an einem Tag geplant werden. So können Sie speichern, an welchem ​​Tag jede Familie geplant ist. Ein Gen, wäre eine der 5 Tage, ein Chrom 9 davon haben würde, ein für jede Familie

  1 2 3 4 5 6 7 8 9 
Chrome M T T F W H T M T 

So Familie 1 am Montag, Familie 2 und 3 am Dienstag, etc. sollten Sie verhängen alle andere Einschränkungen (The pharmacy can only attend 1 to 3 families per day) in der Fitness-Funktion.

könnte eine andere Kodierung

sein
M1 M2 M3 T1 T2 T3 W1 W2 W3 ... F2 F3 
1 2 - - 5 - 9 - 3 ... 4 - 

Sie würden also alle möglichen Termine nehmen und leer in den Familien, oder sie füllen halten. In diesem Fall sollte die Fitnessfunktion sicherstellen, dass jede Familie genau einen Termin hat.