Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C# Baumstruktur aus Daten erzeugen: Eine Herausforderung! ;-) (https://www.delphipraxis.net/180623-baumstruktur-aus-daten-erzeugen-eine-herausforderung-%3B.html)

BUG 4. Jun 2014 00:27

AW: Baumstruktur aus Daten erzeugen: Eine Herausforderung! ;-)
 
Letztendlich ist halt wirklich die Frage, was du damit machen willst.

Wenn die Anzahl der Stationen klein ist oder die Eigenschaften der Verknüpfung günstig, dann macht es vielleicht wirklich Sinn, alle Pfade auszugeben. Bei mehr als ein paar dutzend Pfaden würde ich das aber bezweifeln.

Du könntest anstelle einzelnen Pfade auch einen Prefixbaum ausgeben, das würde die Sache dann deutlich übersichtlicher machen, in extremen Fällen würde es nicht helfen.

Es folgt: Werbung für theoretischere Informatik in der Industrie :wink:

Wenn du ein schönen Model suchst, um Abläufe mit komplexe Abhängigkeiten zu untersuchen, sind vielleicht Petri-Netze was für dich.
Je nach Ziel könntest du dich mit temporaler Logik auseinandersetzen, was Fragen erlaubt, die wie folgt aussehen: Kann es ein Werkstück geben, das Station 1 erreicht, nachdem es Station 2 in schlechter Qualität verlassen hat.
Bei kleineren Problem könnte man auch mit naiv implementierte Model-Checkern Spaß haben; für größere Probleme schadet etwas Rechenpower und eine clevere Implementierung nicht.

Phoenix 4. Jun 2014 06:47

AW: Baumstruktur aus Daten erzeugen: Eine Herausforderung! ;-)
 
Die Hinweise auf den Zustandsautomaten waren ja schon ein Volltreffer.
Schau Dir mal an, wie die Windows Workflow Foundation das abbildet. Die können die Wege ja auch alle durchvalidieren und auch in einem Workflow-Designer darstellen.

WF ist leider nicht Teil der .NET Foundation und damit (noch?) nicht Open Source, aber mit dotPeek kann man da dennoch ziemlich gut reingucken ;-)

jobo 4. Jun 2014 07:54

AW: Baumstruktur aus Daten erzeugen: Eine Herausforderung! ;-)
 
Zitat:

Zitat von Matze (Beitrag 1261260)
Stopp!
..aber mir geht's hauptsächlich darum, dass die Software intern "weiß", welche möglichen Wege es gibt ohne Visualisierung.

Äh, das weiß sie doch schon! Oder ist Deine Fahrplandarstellung nicht Bestandteil des Programmes?
Eine Liste von Start und Zielstationen, damit kann man sehr einfach feststellen, wo es von einem gegebenen Standpunkt hin gehen kann.

Ein Weg dagegen dürfte erstmal sehr uninteressant sein, da es einer Software selbst egal ist, wie der Weg sein könnte (erst Recht unter dynamischen Bedingungen)
Wenn es nicht um Visualisierung geht und auch nicht um Validierung: (mögliche) Wege werden doch erst spannend, wenn es um Optimierungen geht, Umwege, Teilebestandsprüfung, Vorbestellung usw.

Sir Rufo 4. Jun 2014 08:05

AW: Baumstruktur aus Daten erzeugen: Eine Herausforderung! ;-)
 
Kann es sein, dass es hier einen logischen Fehler gibt?
Code:
class FahrplanEintrag
{
    int QuellStation; // -1 = Keine Vorgeschichte, d.h. ZielStation = Start-Station
    int ZielStation;
    int Bedingung;
}

List<FahrplanEintrag> Fahrplan = new List<FahrplanEintrag>()
{
    new FahrplanEintrag() // Station 1 ???
    {
        QuellStation = -1,
        ZielStation = 1, // schon ein Ring !!!
        Bedingung = 0, // alle Teile
    },
    new FahrplanEintrag() // Station 2 ???
    {
        QuellStation = 1,
        ZielStation = 2, // wieder auf sich selber !!!
        Bedingung = 1, // nur Gutteile
    },
    new FahrplanEintrag() // Station 3 ???
    {
        QuellStation = 1,
        ZielStation = 1,
        Bedingung = 2, // nur Schlechtteile (erneute Bearbeitung in Station 1 zulässig)
    },
    new FahrplanEintrag() // Station 4 ???
    {
        QuellStation = 2,
        ZielStation = 3,
        Bedingung = 1, // nur Gutteile
    },
    // ...
}

Matze 4. Jun 2014 11:40

AW: Baumstruktur aus Daten erzeugen: Eine Herausforderung! ;-)
 
@SirRufo: Die Reihenfolge der Liste ist willkürlich.

Ich denke, ich bin auf dem richtigen Weg. Das hier liefert mir schon recht gute Ergebnisse:
Code:
private void GetWorkflowPath(GlobalTypesDatabase.WorkflowTreeNode node, List<int> UsedStations)
{
   UsedStations.Add(node.CurrentStation);

   foreach (var defSingleWf in _dbData.DefWorkflow)
   {
      if (defSingleWf.StationLogicalSrc == node.CurrentStation)
      {
         bool isJumpBack = UsedStations.IndexOf(defSingleWf.StationLogicalDest) != -1;

         GlobalTypesDatabase.WorkflowTreeNode newNode = new GlobalTypesDatabase.WorkflowTreeNode();
         newNode.CurrentStation = defSingleWf.StationLogicalDest;

         if (isJumpBack)
         {
            node.JumpBackToStation.Add(defSingleWf.StationLogicalDest);
         }
         else
         {
            node.TargetStations.Add(newNode);
            GetWorkflowPath(newNode, UsedStations);
         }
      }
   }
}
Grüße und nochmals vielen Dank für die zahlreichen Antworten!
Matze


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz