Algo zur Bildung von Organigrammen

Hallo zusammen,

hatte mal was ähnliches unter „EXCEL“ (Ziel VBA) gepostet aber keine brauchbare Antwort erhalten (nur zum Zeichnen!). Außerdem gehts ja um den Algorhitmus, die Sprache für das Programm ist mE eher Nebensache, daher nun hier ein Versuch.

Die meisten werden Organigramme kennen. Letztlich sind das mehr oder weniger schöne Darstellungen von Bäumen. Aber wenn man nur einen Baum hat, also Eltern/Kind Beziehungen, wie „konstruiert“ man ein Organigramm?

Also:
Gegeben sei ein beliebig tiefer Baum, der in jedem Ast beiliebig tief sein kann.

Die Maximale Breite ist die Anzahl der Knoten, würde aber kein schönes Bild ergeben, da manche Äste sehr kurz sein können.

Wie aber bestimmt man einen möglichst „schmalen“ Baum? Also einen Baum, bei dem Knoten kurzer Äste über Enkeln breiter Äste hängen.

Auch über Ideen hierzu würde ich mich sehr freuen!

mfg

Dirk.Pegasus

Das Problem ist komplex, aber auch längst noch nicht vollständig determiniert. Eine Lösung hängt noch von mehreren (durchaus gängigen) Nebenbedingungen ab:

A Forderung, dass alle Knoten gleicher Hierarchiestufe aller Äste in einer Ebene stehen sollen oder zulassen, dass in verschiedenen Ästen Knoten gleicher Hierarchiestufe in verschiedenen Ebenen liegen dürfen

B Forderung, dass senkrechte Linien keine Winkelverläufe besitzen dürfen

C Forderung, dass innerhalb eines Astes die Knoten einer Hierarchiestufe in einer Ebene liegen müssen, oder zulassen, dass innerhalb eines Astes Knoten einer Hierarchiestufe auf mehrere Ebenen verteilt werden dürfen

D Forderung, dass in allen Ästen keine Hierarchiestufen ausgelassen werden dürfen

E Anwendung o.g. Forderungen nur auf einen Teil der Hierarchiestufen / Äste

Diese Nebenbedingungen beschreiben in etwa dem Designspielraum, den sich Organigraphen üblicherweise herausnehmen, wenn der Platz nicht reicht. Sicher kann man noch weitere finden.

Zwei einfache Fälle seien schon mal angedacht, wenn auch noch weit weg von einem Algorithmus:

Wenn nur die (durchaus gängige) Nebenbedingung A gelten soll, dass alle Knoten gleicher Hierarchiestufe in einer Ebene stehen sollen, dann ist die minimale Breite des Baumes offenbar durch die Anzahl von Knoten in der reichsten Hierarchiestufe gegeben. In diesem Fall lautet das Problem also: Welcher Algorithmus liefert einen Baum, der der minimalen Breite möglichst nahe kommt? Dazu hätte ich ansatzweise eine Strategie, die sich womöglich zu einem Algorithmus entwickeln ließe:

  1. Echte Organigramme haben meist die Eigenschaft, dass in der untersten Ebene die meisten Knoten liegen. Man beginne dann mit der untersten Ebene. Nach oben hin ergänzt man zunächst die Knoten, die den Knoten der untersten Ebene übergeordnet sind. Jeweils zwischen zwei solchen Knoten ist Platz (oder man schafft den Platz) für die Knoten solcher Äste, die in der zweituntersten Ebene enden. Dann geht man mit der drittuntersten Ebene genauso vor, usw. bis zur Wurzel.

  2. Sollte die insgesamt reichste Hierarchiestufe nicht die unterste sein, beginne mit dieser Hierarchiestufe. Nach oben hin gehe man vor wie unter 1. Nach unten hin (hier ist kein besonderes Gedränge mehr zu erwarten) hänge man an die Knoten der reichsten Hierachiestufe zunächst die längsten Restäste, danach ergänze man die Restäste an den Knoten der zweituntersten Hierarchieebene. Jeweils zwischen 2 längsten Restästen füge man einen Ast ein, der in der zweituntersten Hierarchieebene endet, und ergänze dann an den Knoten der drittuntersten Ebene die fehlenden (einstufigen) Restäste. Fahre dann mit der drittuntersten Hierarchieebene fort usw. bis zum Erreichen der reichsten Ebene (die ja schon komplett ist).

Aus dieser Strategie des „kürzerer Ast zwischen zwei längere (oder, falls es nicht genug längere gibt, gleichlange) Äste“ könnte man durch Vergabe von „Bewertungen“ der Äste diejenigen Ast-Nachbarn finden, die besonders gut nebeneinander passen (Lücken füllen). Mögliche Bewertungen von Ästen könnten die Eigenschaften „schlank“, „Speckringe“, „bauchlastig“, „kegelförmig“, „kopflastig“ usw. sein. Die Auswahl von optimalen Nachbarn würde dann etwa lauten: Kopflastig neben kegelförmig, schlank neben bauchlastig, etc.

Wenn zusätzlich zu A die (durchaus gängige) Nebenbedingung B aufgestellt wird, dass die senkrechten Linien keine Winkelverläufe haben dürfen, dann ist die Breite des Baumes offenbar durch die [Summe über (die maximale Anzahl von Knoten eines Astes) je Hierarchiestufe] eindeutig bestimmt. In diesem Fall ist das Problem also gelöst, die Lösungsmenge enthält alle Permutierungen von Astdarstellungen (Beispiel Ahnentafel).

Wenn die Nebenbedingungen C, D oder E ins Spiel kommen, wird es allerdings sehr unübersichtlich…

Gruß, multze

Danke und eine erste Idee?
Hallo Multze,

vielen Dank für die ausführliche Antwort. Um meine Antwort auf das wesentlich zu raffen daher stark gekürzt.

Das Problem ist komplex, aber auch längst noch nicht
vollständig determiniert. Eine Lösung hängt noch von mehreren
(durchaus gängigen) Nebenbedingungen ab:

Hab die Nebenbedingungen mal „gesetzt“, hoffe es gibt nun eine deterministische Lösung…

A ja
B Forderung, dass senkrechte Linien keine Winkelverläufe
besitzen dürfen

das verstehe ich nicht. Über Knoten hinweg? Ich dachte an ein „Kirschenmodell“, wo an einem Knoten n Knoten hängen und die n Kinder haben können. zusammen mit meinen restlichen Annahmen sollte es damit eine eindeutige Lösung geben.

C ja (später mal sehen …)

D ein Ast endet ggfs. auf der ersten Ebene.

E nein, alle sind gleich!

Designspielraum

da will ich mal (noch) nicht dran denken. Meine Kirschen sind alle gleich!

zu 1 und 2: Ich glaube nicht, dass die reichste Ebene (auch wenn die Blätter nicht senkrecht angeordnet werden) immer die „Breiteste“ oder wichtigste ist. Was mir gefällt, ist der Ansatz von unten nach oben zu arbeiten und ggfs. „Platz zu schaffen“.

Erste Idee:
Initilaisierung: Linke untere Kirsche ist der Anfang. Knoten dürber, Geschwister dran, Knoten in die Mitte.

Elter des Knoten ermitteln. Dessen Kinder ermitteln und dranhängen, Knoten „zentrieren“ (nach rechts schieben).

dann rekursiv Kinder und Kindeskinder etc abarbeiten.nach jedem Geschwistersatz alle Eltern bis zur aktuellen Wurzel korrigieren.

immer höher, bis Root erreicht ist.

Mögliche Bewertungen von Ästen könnten die
Eigenschaften „schlank“, „Speckringe“, „bauchlastig“,

naja, dachte schin du meinst mich … :wink:

„kegelförmig“, „kopflastig“ usw. sein. Die Auswahl von
optimalen Nachbarn würde dann etwa lauten: Kopflastig neben
kegelförmig, schlank neben bauchlastig, etc.

Wenn die Nebenbedingungen C, D oder E ins Spiel kommen, wird
es allerdings sehr unübersichtlich…

Die schließ ich mal lieber aus

mfg

Dirk.Pegasus

Hi, Dirk,

ich denke, aus der Lösung deines Problems könnte man eine
Dissertation machen.

B Forderung, dass senkrechte Linien keine Winkelverläufe
besitzen dürfen

das verstehe ich nicht. Über Knoten hinweg? Ich dachte an ein
„Kirschenmodell“, wo an einem Knoten n Knoten hängen und die n
Kinder haben können. zusammen mit meinen restlichen Annahmen
sollte es damit eine eindeutige Lösung geben.

Die Hoffnung auf eine eindeutige Lösung kommt zu früh!
Ich habe mal ein Beispiel aus dem Leben gegriffen:

http://home.arcor.de/mucu/org1.jpg

Die Hauptabteilung hat zwei (Stabs-) Gruppen direkt zugeordnet.
Die Abteilung 7 hat die Gruppe 9 zugeordnet. Die Konstellation
macht, um Breite zu sparen, Winkelverläufe der Linien nötig.
Dies ist jedoch keineswegs daran gebunden, dass es Verbindungen
über Hierarchieebenen hinweg gibt wie bei einer Stabsgruppe,
dies zeigt z.B. die Verbindung von Gruppe 9 zu Untergruppe 16,
die, um Breite zu sparen, auch einen Winkelverlauf braucht.
Dies kann also auch in deinem Kirschenmodell vorkommen.

zu 1 und 2: Ich glaube nicht, dass die reichste Ebene (auch
wenn die Blätter nicht senkrecht angeordnet werden) immer die
„Breiteste“ oder wichtigste ist.

Hm. Gegen Glauben kann ich nicht argumentieren. Aber einig werden
sollten wir uns über folgenden Satz 1:

Wenn nur Voraussetzung A gilt, also alle Knoten einer Hierarchie-
stufe auch in einer Ebene dargestellt werden sollen, dann bestimmt
die reichste Hierarchiestufe die Minimalbreite der Darstellung.
Beweis: Alle Org-Einheiten einer Ebene müssen nebeneinander
dargestellt werden. Also ist die Darstellung mindestens so breit
wie die Anzahl der Org-Einheiten in der reichsten Ebene.

Eine Verbreiterung über die Breite der reichsten Ebene hinaus
lässt sich i.a. nur vermeiden, wenn man Winkelverläufe zwischen
den Ebenen zulässt.

Ob die reichste Ebene die wichtigste ist, weiß ich nicht. Das
ist eine Frage der Bewertung, und die mag jeder selbst so treffen
wie er mag. Ob sie die breiteste ist, weiß ich auch nicht. Aber
jedenfalls ist die Darstellung insgesamt nie schmaler als die
der reichsten Ebene.

Weil die reichste Ebene aber nach Satz 1 (ohne weitere Bedingungen)
diejenige ist, die die Mindestbreite der Darstellung bestimmt, beginnt
meine Strategie hier und bewegt sich von hier aus nach oben zur Wurzel
und nach unten zu den feinsten Verästelungen (wo wegen der geringeren
Knotenanzahl weniger Gedränge herrscht).

Was mir gefällt, ist der
Ansatz von unten nach oben zu arbeiten und ggfs. „Platz zu
schaffen“.

Erste Idee:
Initilaisierung: Linke untere Kirsche ist der Anfang. Knoten
dürber, Geschwister dran, Knoten in die Mitte.

Elter des Knoten ermitteln. Dessen Kinder ermitteln und
dranhängen, Knoten „zentrieren“ (nach rechts schieben).

dann rekursiv Kinder und Kindeskinder etc abarbeiten.nach
jedem Geschwistersatz alle Eltern bis zur aktuellen Wurzel
korrigieren.

immer höher, bis Root erreicht ist.

Es kann durchaus sein, dass dein Algorithmus in vielen praktischen
Fällen ein gutes Ergebnis liefert. Ob es ein optimales Ergebnis
ist, wissen wir noch nicht. Mein Optimierungsansatz, in jedem
Schritt kürzere Äste zwischen 2 längere zu setzen, um Lücken
füllen zu können, ist nicht erkennbar, aber ich habe auch keine
Beweise dafür, dass meine Strategie Vorteile bringt.

Ich weiß nur, dass ein Baum durch alle bestehenden Beziehungen
eindeutig bestimmt ist. Die optimale Darstellung kann daher nur
eine (möglichst geschickte Permutation der Äste) mit Ausnutzung
des freien Raumes zwischen den großen Ästen sein. Und da hilft
es nicht, links unten anzufangen und systematisch vorzugehen,
sondern eine Strategie zur möglichst geschickten Raumnutzung
ist angesagt. Ich glaube allerdings, dass es dafür auch keinen
deterministischen sondern nur einen schrittweise optimierenden
Weg geben wird, ähnlich wie bei anderen Optimierungsproblemen.

Mögliche Bewertungen von Ästen könnten die
Eigenschaften „schlank“, „Speckringe“, „bauchlastig“,

naja, dachte schin du meinst mich … :wink:

„kegelförmig“, „kopflastig“ usw. sein. Die Auswahl von
optimalen Nachbarn würde dann etwa lauten: Kopflastig neben
kegelförmig, schlank neben bauchlastig, etc.

Nein, mit diesen Attributen habe ich nicht dich gemeint, nicht
einmal mich selbst, obwohl das eine oder andere zutrifft.

Gruß, multze

Hallo multze

ich denke, aus der Lösung deines Problems könnte man eine
Dissertation machen.

naja, ich als kleiner Ingenieur werd das nicht anfangen, aber veileicht kennst du ja jemanden …

http://home.arcor.de/mucu/org1.jpg
Hab ich mir angesehen. Du hats natürlich recht, dass diese Lösung „schmaler“ ist als mein Ansatz. Allerdings halt auch viel schwieriger. (Wie du ja auch schreibst) Deswegen will ich auch nicht diese strenge Version benutzen (vorerst :wink:).

Eine Verbreiterung über die Breite der reichsten Ebene hinaus
lässt sich i.a. nur vermeiden, wenn man Winkelverläufe

Wie gesagt, Winkelverläufe kommen später.

Es kann durchaus sein, dass dein Algorithmus in vielen
praktischen
Fällen ein gutes Ergebnis liefert. Ob es ein optimales
Ergebnis
ist, wissen wir noch nicht. Mein Optimierungsansatz, in jedem
Schritt kürzere Äste zwischen 2 längere zu setzen, um Lücken
füllen zu können, ist nicht erkennbar, aber ich habe auch
keine
Beweise dafür, dass meine Strategie Vorteile bringt.

Also werd ich das mal probieren. Danach werd ich dann mal nach eine Optimierung suchen. Erstmal ein Anfang. Vieleicht kann man, mit Winkelverläufen, dann optimieren in dem man Lücken sucht und sozusagen ineinander schiebt.

Nein, mit diesen Attributen habe ich nicht dich gemeint, nicht
einmal mich selbst, obwohl das eine oder andere zutrifft.

ok, und besten Dank erstmal, würde mich freuen, wenn das Thema zu einem „guten“ Ende fidnen würde.

mfg

Dirk.Pegasus

Hier noch eine Ergänzung zur minimalen Breite:

Satz 2: Bei einem Kirschenmodell (in dem keine Hierarchiestufen-Lücken existieren) lässt sich die minimale Breite der Darstellung (bestimmt durch die Anzahl Knoten in der reichsten Ebene) durch Winkelverläufe der Linien immer erreichen.
Beweis: Wegen der Baumstruktur lassen sich alle über- und untergeordneten Knoten stets so anordnen, dass sie mit Winkelverläufen von Linien verbunden werden können. Es gibt beim Kirschenmodell keine Überkreuzungen von Linien, keine Umweglinien (außen an der reichsten Ebene vorbei wie bei den Stabsgruppen) oder (gleichbedeutend mit Umweglinien) Zwischenknoten-Linien zwischen 2 Knoten der Ebene hindurch.

Satz 3: Bei Bäumen mit Herarchielücken in den Ästen wird die Minimalbreite nur durch Umweglinien bzw. Zwischenknoten-Linien verbreitert, die Knoten über Hierarchielücken verbinden.

Die Strategie, eine möglichst übersichtliche Darstellung zu finden, läuft also darauf hinaus, die Zahl und Länge der Winkelverläufe zu minimieren. Hm, einfacher scheint diese Optimierungsaufgabe auch nicht zu sein, aber man weiß jetzt wieder ein bisschen mehr über das Problem.

Die Strategie, mit den längsten Ästen zu beginnen und dann jeweils kürzere Äste dazwischen zu flicken, bleibt vielversprechend.

Gruß, multze

Ich habe einmal die Strategie „Längste Äste zuerst, den nächstkürzeren dazwischen, usf.“ auf das manuell und willkürlich entworfene Beispiel

http://home.arcor.de/mucu/org1.jpg

angewandt und als Ergebnis

http://home.arcor.de/mucu/org2.jpg

bekommen. Die Notwendigkeit, die Kästen 5 und 7 nach rechts herauszurücken, ergab sich beim Zwischenhängen der Äste 5 und 6, weil die Zwischenknoten-Linie des Astes 4 die Darstellung über die minimale Breite hinaus verbreitert (vgl. Satz 3).

Zumindest in diesem Beispiel ist das Ergebnis m.E. zufriedenstellend.

Gruß, multze

Hallo Helmut,

ich schreib das „hier oben“ da es ggfs. auch andere (neben der „wissenschaftlichen“ Diskussion) interessieren könnte.

Zumindest unter Office kann man ja Organigramme erstellen und diese dann „abgreifen“. Ich werde also zunächst versuchen ein Organigramm in Excel zu generieren, dann dessen „Struktur“ (insbesondere die realtiven Positionen) anzugreifen und das dann zum „Zeichnen“ verwenden.

Also: Das Organigramm-Objekt macht die Struktur, auf deren Basis ich dann „male“.

Allerdings löst es nicht die eigentliche Aufgabe!

mfg

Dirk.Pegasus

Hallo Helmut,

hab oben meine vorläufige Strategie gepostest, die allerdings keine Lösung, sondern einen Workaround darstellt. Um schnell ans gewünschte Ziel zu kommen werde ich diesen Weg für meine „Aufgabe“ weiter gehen.

Allerdings interssiert mich eine „echte“ Lösung, die aber wohl nur einen Teil der möglichen Punkte deiner Liste berücksichtigen wird. Da ich ohnehin gerade für mich ein XML-Editörchen bastle, kann ich das auf dieser Basis (sind ja auch nur Bäume) mal „entwickeln“ um eine alternative Darstellung zu erhalten.

Hast du die von die gezeigten Organigramme gemalt? Basierend auf deinen theoretischen Lösungen? Oder wie sind die entstanden?

mfg

Dirk.Pegasus

Hast du die von die gezeigten Organigramme gemalt? Basierend
auf deinen theoretischen Lösungen? Oder wie sind die
entstanden?

Genauso. Ich verwende für Organigramme seit vielen Jahren den ABC Flow Charter von Micrografx. Damit lassen sich einfach und schnell Flusspläne etc. zeichnen: Es gibt allerhand fertige Symbole für die Knoten, die Linien werden wie Gummibänder mitgezogen, wenn man an einem Knoten zieht, usw.

Außerdem habe ich einmal ein Ahnentafel-Programm geschrieben, mit dem ein bekannter Ahnenforscher (nachgewiesenermaßen gehört Karl der Große zu seinen Vorfahren) über 10000 Familienmitglieder verwaltet. Jeweils 4 Generationen (15 Personen) passen auf ein A4-Blatt…

Ich würde eine programmtechnischen Lösung mit einer datenbankbasierten Sprache angehen, also z.B. Access, Foxpro, xBase++. Bei großen Organigrammen muss die Ausgabe ja sicher auf mehrere Blätter ausgegeben werden, und da muss man vorher viel rechnen, damit es hinterher passt.

Gruß, multze