<commit_before>Begriffe:
- Anbieter: anbietender Agent
- Skilleinheit: ein Stück eines bestimmten Skills
- Skillbündel: ein Agent und die Anzahl von ihm zur Verfügung gestellter
  Skilleinheiten
- Kapazität: Anzahl der Skilleinheiten, die ein Agent zur Verfügung
  stellen kann
- Anfangskapazität: Kapazität, die ein Agent hat, wenn er noch keine
  Skilleinheiten zur Verfügung stellt (im Rahmen einer Allokation)
- individuelle Allokation: Zuordnung von Skillbündeln zu einer
  Baustelle
- Allokation: alle individuellen Allokationen zusammen
- Bedarf: Anzahl der Skilleinheiten, die eine Baustelle benötigt

Was macht der Algorithmus?
-> GRASP, aber nicht mit lokaler Suche, sondern mit Tabu-Suche
-> nicht ganz so wie in den Folien, da unsere Koalition anders
   funktioniert
1. Finde zufällige Allokation.
2. Mache Tabu-Suche mit dieser Allokation. – Abbruch nach bestimmter
   Zeit.
3. Speichere bestes Ergebnis der Tabu-Suche.
4. Fange von vorne an.

Finden zufälliger Allokation:
- gibt keinen besten Agenten wie in der Folie
- haben schon einen Algorithmus -> randomisieren
    -> Agenten mit geringstem Abstand nur mit bestimmter Wkt zuordnen
    -> nicht komplette Kapazität, sondern zufälliges Bündel
- nicht bis Bedarf aller Baustellen gedeckt (falls möglich), sondern bis
  zu bestimmter Anzahl von Zuordnungsoperationen (Parameter)

Tabu-Suche:
1. Habe initiale Allokation.
2. Finde ähnliche Allokationen (Nachbarschaft).
3. Wähle beste davon, sofern sie nicht vor kurzem erst besucht wurde.
   Falls mehrere gleich: zufällig
4. Fange von vorne an.

Nachbarschaft generieren:
- habe bestimmte Allokation
- wende Operation auf Allokation an
- Wie können wir Allokation geringfügig verändern?
    - ein Skillbündel aus individueller Allokation entfernen
    - individueller Allokation ein Skillbündel hinzufügen, bis
      Anbieter erschöpft
    - Teil bestimmter Größe eines Skillbündels aus individueller
      Allokation entfernen
    - individueller Allokation ein Skillbündel bestimmter Größte
      (maximal bis zur Erschöpfung des Anbieters) hinzufügen
    - Skillbündel bestimmter Größe (maximal individuelle Allokation der
      Geber- bzw. Bedarf der Nehmerbaustelle) zwischen Baustellen
      austauschen
    - Skillbündel zwischen Baustellen verschieben
    - Austausch von Skillbündel zwischen Baustelle und Reservoir

Fragen:
- Lassen wir Überallokation zu? Macht keinen Sinn, da nur Kosten und
  kein Nutzen.
- Skillreservoir als Baustelle modellieren?
- Lassen wir Operationen zu, die die Nettoauszahlung einer individuellen
  Allokation negativ machen?
    - Gegeben Allokation A1 mit positivem Wert v(A1). Anwendung einer
      Operation führt zu Allokation A2 mit negativem Wert.
        - Kann es eine Operation geben, die zu A3 führt mit v(A3) >
          v(A1)?
        - Kann das auch ohne negative Zwischenschritte erreicht werden?
- Müssen wir zusammengesetzte Operationen implementieren?
    - Wenn eine Baustelle

Anpassung naiver Lösungen:
- ?

Aufgaben (@AOTBaustellen):
- Planung und Design #Planung:BC
- bisherigen Code und Datenstrukturen umschreiben, sodass wir den Rest
  möglichst einfach machen können #Rewrite:AB
- Finden initialer Allokation randomisieren #ZufälligeAllokation:AB
- GRASP schreiben (gegeben #TabuSuche) #GRASP:AB
- Tabu-Suche schreiben (gegeben #Nachbarschaft) #TabuSuche:CB
- Nachbarschaftsgenerator schreiben #Nachbarschaft:CC
- ausprobieren #Probelauf:AB
- naive Lösungen anpassen #Tweaking:CD<commit_msg>Add some more thoughts (neighbourhood, data structures)<commit_after>Begriffe:
- Anbieter: anbietender Agent
- Skilleinheit: ein Stück eines bestimmten Skills
- Skillbündel: ein Agent und die Anzahl von ihm zur Verfügung gestellter
  Skilleinheiten
- Kapazität: Anzahl der Skilleinheiten, die ein Agent zur Verfügung
  stellen kann
- Anfangskapazität: Kapazität, die ein Agent hat, wenn er noch keine
  Skilleinheiten zur Verfügung stellt (im Rahmen einer Allokation)
- individuelle Allokation: Zuordnung von Skillbündeln zu einer
  Baustelle
- Allokation: alle individuellen Allokationen zusammen
- vollständige individuelle Allokation: individuelle Allokation, die den
  Bedarf der Baustelle deckt
- Bedarf: Anzahl der Skilleinheiten, die eine Baustelle benötigt
- Brutto-Payoff: Payoff vor Abzug der Kosten
- Netto-Payoff: Payoff nach Abzug der Kosten

Was macht der Algorithmus?
-> GRASP, aber nicht mit lokaler Suche, sondern mit Tabu-Suche
-> nicht ganz so wie in den Folien, da unsere Koalition anders
   funktioniert
1. Finde zufällige Allokation.
2. Mache Tabu-Suche mit dieser Allokation. – Abbruch nach bestimmter
   Zeit.
3. Speichere bestes Ergebnis der Tabu-Suche.
4. Fange von vorne an.

Finden zufälliger Allokation:
- gibt keinen besten Agenten wie in der Folie
- haben schon einen Algorithmus -> randomisieren
    -> Agenten mit geringstem Abstand nur mit bestimmter Wkt zuordnen
    -> nicht komplette Kapazität, sondern zufälliges Bündel
- nicht bis Bedarf aller Baustellen gedeckt (falls möglich), sondern bis
  zu bestimmter Anzahl von Zuordnungsoperationen (Parameter)

Tabu-Suche:
1. Habe initiale Allokation.
2. Finde ähnliche Allokationen (Nachbarschaft).
3. Wähle beste davon, sofern sie nicht vor kurzem erst besucht wurde.
   Falls mehrere gleich: zufällig
4. Fange von vorne an.

Nachbarschaft generieren:
- habe bestimmte Allokation
- wende Operation auf Allokation an
- Wie können wir Allokation geringfügig verändern?
    - ein Skillbündel aus individueller Allokation entfernen
    - individueller Allokation ein Skillbündel hinzufügen, bis
      Anbieter erschöpft
    - Teil bestimmter Größe eines Skillbündels aus individueller
      Allokation entfernen
    - individueller Allokation ein Skillbündel bestimmter Größte
      (maximal bis zur Erschöpfung des Anbieters) hinzufügen
    - Skillbündel bestimmter Größe (maximal individuelle Allokation der
      Geber- bzw. Bedarf der Nehmerbaustelle) zwischen Baustellen
      austauschen
    - Skillbündel zwischen Baustellen verschieben
    - Austausch von Skillbündel zwischen Baustelle und Reservoir
- für jede Baustelle in Allokation:
    - für jeden Skill in Baustelle:
        - für jedes diesem Skill zugeordnete Bündel:
          entferne Bündel, speichere Ergebnis in Nachbarschaft
        - falls Bedarf an diesem Skill noch nicht gedeckt:
          alloziere jeweils einen der n nächsten Agenten im
          Reservoir, speichere alle Ergebnisse in Nachbarschaft

Fragen:
- Lassen wir Überallokation zu? Macht keinen Sinn, da nur Kosten und
  kein Nutzen.
- Skillreservoir als Baustelle modellieren?
- Lassen wir Operationen zu, die die Nettoauszahlung einer individuellen
  Allokation negativ machen?
    - Gegeben Allokation A1 mit positivem Wert v(A1). Anwendung einer
      Operation führt zu Allokation A2 mit negativem Wert.
        - Kann es eine Operation geben, die zu A3 führt mit v(A3) >
          v(A1)?
        - Kann das auch ohne negative Zwischenschritte erreicht werden?
        - Unwahrscheinlich.
        - Erstmal verbieten.
        - Doch, wir brauchen es. Wenn eine individuelle Allokation
          unvollständig ist, hat sie Brutto-Payoff 0, d. h. negativen
          Netto-Payoff. Diese Lösungen wollen wir in der Tabu-Suche
          berücksichtigen, also dürfen wir sie nicht verbieten.
- Müssen wir zusammengesetzte Operationen implementieren?
    - Prinzipiell sollten von der Tabu-Suche alle Lösungen gefunden
      werden.
    - Mit zusammengesetzten Operationen könnte das möglicherweise
      schneller gehen.
    - Erstmal die einfachen Operationen implementieren und sehen, wie es
      sich verhält.

Datenstrukturen:
- Reservoir: 
    - enthält Agenten, zugeordnet zu Skills
    - muss unterstützen: Entnahme von Skillbündeln, Hinzufügen von
      Skillbündeln = Verringerung, Erhöhung der Kapazität von Agenten
- Agenten
- Baustellen
- Skillkosten
- Tabuliste
    - enthält Allokationen, die nicht besucht werden dürfen
    - muss unterstützen: Hinzufügen und Entfernen von Allokationen,
      Anwesenheitskontrolle von Allokationen
    - eine Queue? Allokationen, die für eine bestimmte Zeitdauer drin
      sind, werden entfernt.
- Nachbarschaft
    - enthält Allokationen
    - muss unterstützen: Hinzufügen von Allokationen, finden der
      Allokation mit höchstem Payoff
- Allokation
    - enthält Zuordnung von Skillbündeln zu Baustellen
    - muss unterstützen: Zuordnung von Skillbündeln zu Baustelle,
      Entfernen von Skillbündeln von Baustelle, Berechnung des Payoffs

Anpassung naiver Lösungen:
- ?

Aufgaben (@AOTBaustellen):
- Planung und Design #Planung:BC(100 min)
- bisherigen Code und Datenstrukturen umschreiben, sodass wir den Rest
  möglichst einfach machen können #Rewrite:AB
- Finden initialer Allokation randomisieren #ZufälligeAllokation:AB
- GRASP schreiben (gegeben #TabuSuche) #GRASP:AB
- Tabu-Suche schreiben (gegeben #Nachbarschaft) #TabuSuche:CB
- Nachbarschaftsgenerator schreiben #Nachbarschaft:CC
- ausprobieren #Probelauf:AB
- naive Lösungen anpassen #Tweaking:CD
{'fraction_non_alphanumeric': 0.04539400665926748, 'fraction_numerical': 0.003551609322974473, 'mean_word_length': 3.9922437673130196, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1112581', 'n_tokens_mistral': 3065, 'n_tokens_neox': 3146, 'n_words': 1025}