(ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Smalltalk
Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 02.04.2023 12:51:32

Hallo chrbr,

habe gerade Dein Skript gefunden und getestet und bin beeindruckt, wie du einen Algorithmus zur Ermittlung der Cliquen entwickelt und mit Python umgesetzt hast :THX: . Ich selbst hatte eine eigene Idee für einen Algorithmus aus Bequemlichkeit nicht weiterverfolgt – nachdem ich entdeckt hatte, dass networkx mir einiges an Mühe ersparen konnte.

Interessant finde ich, dass dein Algorithmus quasi "subtraktiv" vorgeht, während mir ein "additiver" Ansatz vorschwebte. Du gehst von der Gesamtmenge der mit der Hauptpflanze verträglichen Pflanzen aus und baust sukzessive Konflikte ab, bis zuletzt die Cliquen/Mischkulturen übrig bleiben. Meine (nicht ausgeführte) Idee war hingegen, mit den kleinstmöglichen Cliquen – also den vetrtäglichen Früchtepaaren – zu beginnen und diese so lange sukzessive und konfliktfrei um einzelne Pflanzen zu erweitern, bis ich die maximalen Mischkulturen erhalte. Spontan und vom Gefühl her erscheint mir dein Ansatz effizienter zu sein.

Im Übrigen ist dein Post, finde ich, auch eine verdienstvolle Zusammenfassung der Problemstellung und der bisherigen Lösungswege. Nur eine kleine Korrektur möchte ich anbringen.
chrbr hat geschrieben: ↑ zum Beitrag ↑
01.04.2023 22:07:47
Jede beliebige Kombination der Pflanzen aus der Liste der 11 Arten findet sich entweder in friends.csv oder enemies.csv wieder.
Das stimmt nicht ganz. Es hatte einer längeren Diskussion mit michaa7 bedurft, bis ich begriffen hatte, dass auch neutrale/undefinierte Pflanzenpaare zugelassen sein sollen. In unserem Beispiel kommt, um nur ein Beispiel zu nennen, das Paar (Dattel, Papaya) weder in "friends.csv" noch in "enemies.csv" vor. Aber unsere Skripte berücksichtigen dies ja: Alle Pflanzen einer Mischkultur müssen explizit mit der Hauptpflanze befreundet sein, dürfen aber untereinander auch in neutraler Beziehung stehen.

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 02.04.2023 13:46:39

Hallo Huo,
vielen Dank für die Blumen, aber ohne deine Referenzimplementierung mit networkx wäre ich nicht so schnell so weit gekommen.
Huo hat geschrieben: ↑ zum Beitrag ↑
02.04.2023 12:51:32
Meine (nicht ausgeführte) Idee war hingegen, mit den kleinstmöglichen Cliquen – also den vetrtäglichen Früchtepaaren – zu beginnen und diese so lange sukzessive und konfliktfrei um einzelne Pflanzen zu erweitern, bis ich die maximalen Mischkulturen erhalte.
Den Ansatz bin ich auch zuerst angegangen. Irgendwie habe ich aber immer in was-wäre-wenn Sackgassen verrannt. Beim subtraktiven Ansatz hat man am Anfang nur eine Gruppe. Wenn man dann die richtige Idee hat (wie immer aus wirren Geschmiere als Ideenküche) geht es ganz einfach.

Wahrscheinlich versuche ich mich nochmal mit dem additiven Ansatz. Insgesamt fand ich die Aufgabe sehr interessant. Vorhin habe ich mich nochmal durch den Thread gescrollt und gesehen, dass von anderen Usern bestimmt Algorithmen erwähnt wurden. Das gibt wieder etwas zu lesen. Es ist auch nicht unwahrscheinlich, dass ich das Rad zum x-ten mal neu erfunden habe :mrgreen: .

Nochmals vielen Dank für deine Initiative. Ich habe viel gelernt.

Viele Grüße,
Christoph

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von curt123 » 02.04.2023 15:07:22

Huo hat geschrieben: ↑ zum Beitrag ↑
02.04.2023 12:51:32
Alle Pflanzen einer Mischkultur müssen explizit mit der Hauptpflanze befreundet sein, dürfen aber untereinander auch in neutraler Beziehung stehen.
Als Priorisierung nachvollziehbar, aber die weiteren Möglichkeiten könnten (m.E. sinnvollerweise) auch noch differenziert werden.

Bei Dattel bekommt man als mögliche Mischkulturen angezeigt: ['Dattel', 'Guave'] und ['Ananas', 'Dattel', 'Feige', 'Ingwer'].

Wenn nun Guave als Ergänzung bevorzugt wird und noch was dazu darf, wäre Mango (als Freund von Guave) besonders als hilfreich zu berücksichtigen:
Guave mögliche Mischkulturen: ['Dattel', 'Guave', 'Mango'] und ['Baobab', 'Dattel', 'Guave', 'Jackfrucht']

Die Kombination von Dattel, Guave und Mango dürfte anderen möglichen "neutraleren" Kombinationen vorzuziehen sein, ist aber unter Dattel nicht sichtbar.

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 02.04.2023 18:24:30

curt123 hat geschrieben: ↑ zum Beitrag ↑
02.04.2023 15:07:22
Guave mögliche Mischkulturen: ['Dattel', 'Guave', 'Mango']
Die Kombination wird tatsächlich nicht gelistet, Du Adlerauge :THX: . Das liegt daran, dass Enemies und Friends nicht komplementär sind. Dattel, Guave und Mango sind zwar keine Enemies untereinander. Aber die Kombination Dattel, Mango ist nicht in Friends gelistet. Ich meine, michaa7 wollte im Laufe des Threads auch neutrale Kombination von Pflanzen berücksichtigen. Vielleicht liegt die sind die Dateien nicht komplementär auf Grund von Versuchen.

Wenn ich Mango, Dattel an friends.csv anhänge, dann bekomme ich trotzdem die Kombination Dattel, Guave, Mango nicht. Wenn ich aber Dattel, Mango an friends.csv anhänge schon. Da scheint noch ein Fehler in der Datenaufbereitung im Eingang zu sein.

Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 03.04.2023 08:32:38

chrbr hat geschrieben: ↑ zum Beitrag ↑
02.04.2023 18:24:30
Wenn ich Mango, Dattel an friends.csv anhänge, dann bekomme ich trotzdem die Kombination Dattel, Guave, Mango nicht. Wenn ich aber Dattel, Mango an friends.csv anhänge schon. Da scheint noch ein Fehler in der Datenaufbereitung im Eingang zu sein.
Das kann ich nicht reproduzieren, weder mit deinem noch mit meinem Skript. Die Reihenfolge (Mango,Dattel oder Dattel,Mango) spielt keine Rolle. Man muss nur aufpassen, dass man nach dem Komma kein Leerzeichen setzt, die Pflanzennamen einheitlich groß schreibt und sich auch sonst nicht vertippt.

Ich glaube, curt123 wollte auch keinen Fehler entdeckt haben, sondern nur eine zusätzliche Möglichkeit anregen, die Mischkulturen (bei Bedarf) auch um Pflanzen zu erweitern, die weder Freunde noch Feinde der Hauptpflanze sind, was mir prinzipiell sinnvoll erscheint.

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 03.04.2023 10:21:26

Huo hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 08:32:38
Man muss nur aufpassen, dass man nach dem Komma kein Leerzeichen setzt, ...
Das war mein Fehler. :facepalm:

curt123
Beiträge: 704
Registriert: 19.10.2018 12:49:35
Wohnort: NRW

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von curt123 » 03.04.2023 11:55:54

Huo hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 08:32:38
Ich glaube, curt123 wollte auch keinen Fehler entdeckt haben, sondern nur eine zusätzliche Möglichkeit anregen, die Mischkulturen (bei Bedarf) auch um Pflanzen zu erweitern, die weder Freunde noch Feinde der Hauptpflanze sind, was mir prinzipiell sinnvoll erscheint.
Ja. Ich hatte einmal unstimmige, später nicht reproduzierbare, Ergebnisse. Ob durch falsche Eingabe, oder Umgebung oder durch das (womöglich bereits durch mich veränderte) Skript konnte ich nicht klären. Im Skript habe ich z.B. in Zeile 119 ein exit() durch sys.exit() ersetzt, ein Kommentarblock per """ bietet sich wohl auch an, aber darum ging es mir nicht.

Es scheint mir sinnvoll, Freunde von Freunden der Hauptpflanze anders zu bewerten als neutrale Pflanzen, weil sie die Überlebenswahrscheinlichkeit (o.ä., etwa Ertrag) der Hauptpflanze ebenfalls wohl erhöhen.

Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 03.04.2023 12:38:11

curt123 hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 11:55:54
Es scheint mir sinnvoll, Freunde von Freunden der Hauptpflanze anders zu bewerten als neutrale Pflanzen, weil sie die Überlebenswahrscheinlichkeit (o.ä., etwa Ertrag) der Hauptpflanze ebenfalls wohl erhöhen.
Ja, man könnte (unter Wahrung der Übersichtlichkeit :wink:) zusätzlich zu den Mischkulturen ausgeben, welche enthaltenen Pflanzen explizit miteinander befreundet sind.

Mit der von michaa7 vorgegebenen Ungleichbehandlung von Hauptpflanze (alle Nachbarn müssen seine Freunde sein) und Nachbarpflanzen (dürfen untereinander auch neutral sein) habe ich von Anfang an etwas gefremdelt. Ginge es nur um eine Denksport- oder Programmieraufgabe, würde ich die Party-Interpretation vorziehen. Ich empfinde es als realitätsnah, dass Anna zu ihrem Geburtstag nur Gäste einladen will, mit denen sie befreundet ist – während diese untereinander nicht unbedingt alle befreundet sein oder sich überhaupt kennen müssen (nur explizit miteinander verfeindete Gäste sollen halt nicht gemeinsam auf die Party kommen :wink: ).

michaa7
Beiträge: 4946
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von michaa7 » 03.04.2023 13:27:35

Huo hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 12:38:11
curt123 hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 11:55:54
Es scheint mir sinnvoll, Freunde von Freunden der Hauptpflanze anders zu bewerten als neutrale Pflanzen, weil sie die Überlebenswahrscheinlichkeit (o.ä., etwa Ertrag) der Hauptpflanze ebenfalls wohl erhöhen.
Das ist theoretisch vielleicht richtig. Praktisch willst du einfach keine Pflanze die explizit als störend/weniger gut verträglich gilt.
...
Huo hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 12:38:11
Ich empfinde es als realitätsnah, dass Anna zu ihrem Geburtstag nur Gäste einladen will, mit denen sie befreundet ist – während diese untereinander nicht unbedingt alle befreundet sein oder sich überhaupt kennen müssen (nur explizit miteinander verfeindete Gäste sollen halt nicht gemeinsam auf die Party kommen :wink: ).
Das ist doch aber wohl die praxisnahe Version genau dieser etwas abstrakteren Version:
Huo hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 12:38:11
von michaa7 vorgegebenen Ungleichbehandlung von Hauptpflanze (alle Nachbarn müssen seine Freunde sein) und Nachbarpflanzen (dürfen untereinander auch neutral sein)
Nicht?
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 03.04.2023 16:10:49

Hallo liebe Co-User,
nun haue ich nochmal einen Block dazwischen.
Huo hat geschrieben: ↑ zum Beitrag ↑
02.04.2023 12:51:32
Interessant finde ich, dass dein Algorithmus quasi "subtraktiv" vorgeht, während mir ein "additiver" Ansatz vorschwebte.
Nach vielen Ansätzen ist mit nun eine Idee für einen additiven Algorithmus gekommen. Das folgende Beispiel ist mal wieder die bewährte Ananas.
Im Fall dieses einfachen Szenarios mit den logischen Beziehungen verträglich oder unverträglich kann man das Problem auch additiv lösen. Voraussetzung ist, dass man die Operationen von Einfügen und Entfernen in beliebiger Reihenfolge durchführen kann

Ausgangspunkt ist wieder die Liste der mit der Hauptfrucht verträglichen Pflanzen. Hier dient die Ananas als Beispiel. Dazu kommt eine Tabelle der mit der Hauptfrucht verträglichen Pflanzen, die sich aber untereinander nicht vertragen.

Gute Nachbarn:

Code: Alles auswählen

Baobab, Dattel, Feige, Kiwi, Litschi, Papaya
Darunter harmonieren nicht:

Code: Alles auswählen

['Baobab', 'Kiwi']
['Baobab', 'Papaya']
['Dattel', 'Kiwi']
['Feige', 'Kiwi']
['Feige', 'Papaya']
['Kiwi', 'Litschi']
Aus Platzgründen werden nun nur die ersten drei Buchstaben der Pflanzen angegeben. Einerkombinationen kann man sich in diesem Beispiel sparen, weil es keine Nachbarpflanze zur Ananas gibt, die sich aber mit keiner anderen Pflanze verträgt.

Für die Zweierkombinationen reicht es, nur die Nachbarn nach rechts zu kombinieren. Die Nachbarn nach links wurden schon vorher untersucht.

Zweierkombinationen

Code: Alles auswählen

(Bao,Dat) (Bao,Fei) (Bao,Lit) (Dat,Fei) (Dat,Lit) (Dat,Pap) (Fei,Lit) (Kiw,Pap) (Lit,Pap)
Für die weiteren Schritte werden die vorher ermittelten Kombinationen mit allen Sorten ergänzt, die noch nicht in der vorher ermittelten Kombination enthalten sind. Gibt es mit der Ergänzung keinen Konflikt, so ist eine neue Kombination mit einem zusätzlichen Element ermittelt. Eine nicht mehr erweiterbare Kombination stellt dagegen schon eine Clique dar. Für die nächste Iteration wird die Gruppe der neuen Kombinationen um doppelte Einträge bereinigt.

Dreierkombinationen

Code: Alles auswählen

(Bao,Dat) -> (Bao,Dat,Fei) (Bao,Dat,Lit)
(Bao,Fei) -> (Bao,Fei,Dat) (Bao,Fei,Lit)
(Bao,Lit) -> (Bao,Lit,Dat) (Bao,Lit,Fei)
(Dat,Fei) -> (Dat,Fei,Bao) (Dat,Fei,Lit)
(Dat,Lit) -> (Dat,Lit,Bao) (Dat,Lit,Fei) (Dat,Lit,Pap)
(Dat,Pap) -> (Dat,Pap,Lit)
(Fei,Lit) -> (Fei,Lit,Bao) (Fei,Lit,Dat)
(Kiw,Pap) -> Nicht erweiterbar
(Lit,Pap) -> (Lit,Pap,Dat)
Doppelte Einträge entfernt

Viererkombinationen

Code: Alles auswählen

(Bao,Dat,Fei) -> (Bao,Dat,Fei,Lit)
(Bao,Dat,Lit) -> (Bao,Dat,Lit,Fei)
(Bao,Fei,Lit) -> (Bao,Fei,Lit,Dat)
(Dat,Fei,Lit) -> (Dat,Fei,Lit,Bao)
(Dat,Lit,Pap) -> Nicht erweiterbar
Doppelte Einträge entfernt:

Fünfergruppen

Code: Alles auswählen

(Bao,Dat,Fei,Lit) -> Nicht erweiterbar
Die Liste der ermittelten Gruppen ist nun noch ohne die Hauptfrucht

Code: Alles auswählen

Elemente in Gruppe | Gruppen
-------------------|------------------
Einzelne Sorten    |    -
Zweiergruppen      | (Kiw,Pap)
Dreiergruppen      | (Dat,Lit,Pap)
Vierergruppen      | (Bao,Dat,Fei,Lit)
Die Liste möglicher Mischkulturen stimmt für dieses Beispiel mit den anderen Methoden überein:
['Ananas', 'Kiwi', 'Papaya']
['Ananas', 'Dattel', 'Litschi', 'Papaya']
['Ananas', 'Baobab', 'Dattel', 'Feige', 'Litschi']

Ein Python Skript zu diesem Algorithmus ist noch nicht erstellt.

Viele Grüße,
Christoph

Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 04.04.2023 13:11:23

Hallo chrbr,

du kniest dich ja richtig hinein in die Mischbeet-Algorithmik. Jetzt hast du auch ein "additives" Verfahren ausgearbeitet und wie immer sehr übersichtlich dargestellt. :THX:

Von meiner Seite zwei Anmerkungen zum Algorithmus:
chrbr hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 16:10:49
Für die Zweierkombinationen reicht es, nur die Nachbarn nach rechts zu kombinieren. Die Nachbarn nach links wurden schon vorher untersucht.
Ich frage mich, ob es nicht auch bei allen weiteren Kombinationen (Dreier-, Vierer- etc.) genügt, sich auf die lexikalisch geordneten Kombinationen zu beschränken, also auf mögliche konfliktfreie Erweiterungen nur "nach rechts" zu prüfen. So würde man sich erstens einige Tests und zweitens die Entfernung von doppelten Einträgen ersparen (da jeweils nur die wohl-geordneten Kombinationen ausgegeben werden).

So sähe das Verfahren für die Dreierkombinationen aus:

(Bao,Dat) -> (Bao,Dat,Fei) (Bao,Dat,Lit)
(Bao,Fei) -> (Bao,Fei,Lit)
(Bao,Lit) -> [keine Dreiergruppe (Bao,Lit,X) mit X > Lit]
(Dat,Fei) -> (Dat,Fei,Lit)
(Dat,Lit) -> (Dat,Lit,Pap)
(Dat,Pap) -> [muss nicht geprüft werden, da keine Pflanze X > Pap existiert]
(Fei,Lit) -> [keine Dreiergruppe (Fei,Lit,X) mit X > Lit]
(Kiw,Pap) -> [muss nicht geprüft werden, da keine Pflanze X > Pap existiert]
(Lit,Pap) -> [muss nicht geprüft werden, da keine Pflanze X > Pap existiert]


Es werden ohne Dubletten alle fünf Dreierkombinationen ermittelt. Ein gewisses Problem stellt bei diesem Verfahren allerdings dar, dass unter den nicht geprüften Kombinationen (hier: Zweierkombinationen, rote Schrift) ja die nicht erweiterbaren als Mischkulturen ausgegeben werden sollen. In unserem Beispiel erkennt man relativ schnell, dass (Kiw,Pap) – anders als (Dat,Pap) und (Lit,Pap) – nicht in den gefundenen Dreierkombis als Teilmenge enthalten ist und deshalb eine nicht erweiterte Clique/Mischkultur darstellt.

Zweite Anmerkung:
chrbr hat geschrieben: ↑ zum Beitrag ↑
03.04.2023 16:10:49
Fünfergruppen

Code: Alles auswählen

(Bao,Dat,Fei,Lit) -> Nicht erweiterbar
Wird nur eine einzige Clique/Gruppe mit n Knoten/Pflanzen ausgegeben, muss diese nicht explizit auf Erweiterbarkeit geprüft werden. Gäbe es eine Erweiterung auf n+1 Knoten, müssten ja bereits alle ihre Teilmengen mit n Knoten als n-Gruppen gefunden worden sein und das wären genau n+1 Teilmengen.

Gruß an alle Hirnverknoter
Huo

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 04.04.2023 15:43:44

Huo hat geschrieben: ↑ zum Beitrag ↑
04.04.2023 13:11:23
Ich frage mich, ob es nicht auch bei allen weiteren Kombinationen (Dreier-, Vierer- etc.) genügt, sich auf die lexikalisch geordneten Kombinationen zu beschränken, also auf mögliche konfliktfreie Erweiterungen nur "nach rechts" zu prüfen. So würde man sich erstens einige Tests und zweitens die Entfernung von doppelten Einträgen ersparen (da jeweils nur die wohl-geordneten Kombinationen ausgegeben werden).
Da bin ich mir noch nicht sicher. Für die Implementierung mit Python würde ich als Datenbasis für jeden Schritte sets von sortierten lists oder vielleicht tupeln verwenden. Damit würde man doppelte Einträge automatisch entfernen. Es ist eine Eigenschaft von sets, dass es keine doppelten Einträge gibt. Leider kann man in sets nicht jeden Datentyp verwenden. sets von sets gehen zum Beispiel nicht. Es gibt noch viel zu wühlen :mrgreen: .

Vielen Dank für deine Anregungen,
Christoph

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 04.04.2023 16:46:40

Huo hat geschrieben: ↑ zum Beitrag ↑
04.04.2023 13:11:23
Ich frage mich, ob es nicht auch bei allen weiteren Kombinationen (Dreier-, Vierer- etc.) genügt, sich auf die lexikalisch geordneten Kombinationen zu beschränken, also auf mögliche konfliktfreie Erweiterungen nur "nach rechts" zu prüfen.
Das funktioniert bei dem Beispiel auch. Dabei habe ich zunächst die nicht nach rechts erweiterbaren Gruppen gespeichert. Dadurch war im letzten Schritte eine zusätzliche Untersuchung nach Teilmengen erforderlich. Dabei entfernt wurden tatsächlich nur die nicht nach rechts erweiterbaren Gruppen.

Es sollte nach dem Beispiel also reichen, die Gruppen nur nach rechts zu erweitern. Zum automatischen Vergleich mit allen anderen Hauptpflanzen wäre mal wieder ein Skript fällig.

tobo
Beiträge: 2373
Registriert: 10.12.2008 10:51:41

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von tobo » 04.04.2023 16:50:27

chrbr hat geschrieben: ↑ zum Beitrag ↑
04.04.2023 15:43:44
Es ist eine Eigenschaft von sets, dass es keine doppelten Einträge gibt. Leider kann man in sets nicht jeden Datentyp verwenden. sets von sets gehen zum Beispiel nicht.
Für diese Fälle (dict, set), dass man einen unveränderlichen set-Datentyp benötigt, benutzt man ein frozenset.

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 05.04.2023 02:12:47

tobo hat geschrieben: ↑ zum Beitrag ↑
04.04.2023 16:50:27
Für diese Fälle (dict, set), dass man einen unveränderlichen set-Datentyp benötigt, benutzt man ein frozenset.
Ich muss zugeben, dass ich mich bisher nur mit Listen, Dictionaries und Datentypen für Numpy durch meine Python Projekte gemogelt habe. Bevor ich mit Python angefangen habe war ich meist mit Tcl/Tk unterwegs.

Irgendwann war ich der Meinung, dass ich mal ergründen sollte, worin überhaupt Vorteile in der hochgelobten Objektorientierten Programmierung liegen sollte. Mit C++ und Qt hatte ich schon einmal Berührung. Das erschien mir als Laie sehr komplex. Also viel meine Wahl auf Python.

Und was ist geeigneter als Objekt als elektronische Bauteile? Jedes (lineare) Bauteil lässt sich durch ein Paar Parameter wie Widerstand, Kapazität, Induktivität und parasitäre Elemente beschreiben. Das Ganze ist natürlich auch noch frequenzabhängig. Geeignet ist dabei die Darstellung in einer Y-Matrix pro Bauteil. Die Y-Matrizen füllen dann die Y-Matrix der Gesamtschaltung. Die wird invertiert und schon ist man fast fertig.

Der Charme ist der, dass alle Bauteile sich mit einer Y-Matrix beschreiben lassen, deren Inhalt von der Bauteilart und dessen Parameter abhängt. Ich finde das ein gutes Beispiel für Objekte.

Später habe ich dann einiges an Signalverarbeitung mit Numpy gemacht und auch Skripte für automatische Messungen. Aber nichts hatte mit komplizierten Datenstrukturen zu tun. Aber man lernt ja gerne dazu.

Vielen Dank für den Hinweis,
Christoph

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 06.04.2023 11:01:11

So, nun habe ich auch ein Skript für den additiven Algorithmus erstellt. Siehe NoPaste-Eintrag41885. Ein Vergleich mit dem Skript von Huo über alle möglichen Hauptpflanzen ergibt wieder bis auf gelegentliche Unterschiede in der Reihenfolge der Ausgaben keinen Unterschied. Die Begrenzung der Suche in der Kandidatenliste nur nach rechts wie weiter oben vorgeschlagen habe ich nicht implementiert.
tobo hat geschrieben: ↑ zum Beitrag ↑
04.04.2023 16:50:27
Für diese Fälle (dict, set), dass man einen unveränderlichen set-Datentyp benötigt, benutzt man ein frozenset.
Das habe ich beherzigt. Für den ersten Ansatz habe ich Listen, for Schleifen und jede Menge if Abfragen verwendet, weil ich damit sicherer bin. Mit set und frozenset ist meiner bescheidenen Meinung nach deutlich eleganter. Trotzdem ist die eine oder andere Stelle noch holprig.

Vielen Dank für die vielen Anregungen,
Christoph

Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 06.04.2023 23:01:10

Hallo chrbr,

so ganz zuverlässig läuft dein Skript garten-additiv bei mir nicht. Beispiel Ananas: Meistens werden alle drei Mischkulturen ausgegeben – manchmal allerdings nur die erste Mischkultur oder die ersten beiden Mischkulturen. Vielleicht kannst du es reproduzieren, wenn du das Skript mit dem Parameter "Ananas" mal zehn oder zwanzig Mal hintereinander ausführst :?: .

Ich habe nur ganz kurz über den Code geschaut. Ich vermute, das Phänomen der uneinheitlichen Ausgaben liegt daran, dass die Reihenfolge, in der die Schleife "for group in sgroups: ..." (Zeilen 102 - 117) die einzelnen frozensets aus "sgroups" abarbeitet, nicht bei jeder Skriptausführung gleich ist. Im ungünstigsten Fall wird etwa bei der Überprüfung der Zweiergruppen auf mögliche Erweiterungen die einzige nicht-erweiterbare Zweiergruppe (Kiwi,Papaya) zuletzt verarbeitet. Dann bleibt die boolesche Variable "erweitert" auf "False" stehen und die übergeordnete while-Schleife "while erweitert: ..." (Zeilen 99 - 117) bricht zu früh ab.

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 07.04.2023 01:23:10

Huo hat geschrieben: ↑ zum Beitrag ↑
06.04.2023 23:01:10
Im ungünstigsten Fall wird etwa bei der Überprüfung der Zweiergruppen auf mögliche Erweiterungen die einzige nicht-erweiterbare Zweiergruppe (Kiwi,Papaya) zuletzt verarbeitet. Dann bleibt die boolesche Variable "erweitert" auf "False" stehen und die übergeordnete while-Schleife "while erweitert: ..." (Zeilen 99 - 117) bricht zu früh ab.
Das schaue ich mir auf jeden Fall an. Das "erweitert" ist eigentlich so gedacht, dass es auf "True" steht, wenn in einem Schritt mindestens eine Gruppe erweitert werden kann.

EDIT: Die Iteration soll ja einen Schritt weiter geführt werden, wenn irgendeine Gruppe sich erweitern lies. Das "erweitert" bezog sich aber darauf, ob genau eine Gruppe sich mit mindestens einer Pflanze erweitern lies. Dazu hatte ich schon "etwas_erweiterbar" definiert aber nicht verwendet. Nun funktionieren auch 100 Testläufe. Das berichtigte Skript ist nun NoPaste-Eintrag41887. Der Link auf den Vorgänger ist umgestellt, so dass er in einem Monat gelöscht wird.

Vielen Dank für die Fehlermeldung,
Christoph

Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 07.04.2023 09:34:09

Prima, jetzt läuft das Skript offensichtlich ohne Aussetzer :THX:. Über die verwaiste Variable "etwas_erweiterbar" in der ersten Version hatte ich mich bereits gewundert, jetzt macht sie Sinn. Für mich kann das Skript auch eine Anregung sein, mich mit den mir bislang unbekannten frozensets zu befassen, vielen Dank.

Huo
Beiträge: 792
Registriert: 26.11.2017 14:03:31
Wohnort: Freiburg

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von Huo » 09.04.2023 09:59:21

Statt auf meine zusammenfantasierten exotischen Pflanzennachbarn habe ich unsere Skripte mal auf eine echte Mischkulturtabelle angewendet:
https://fryd.app/media/pages/magazin/mi ... elle-1.pdf

Am Beispiel von Radicchio:

Code: Alles auswählen

$ mischkultur.py Radicchio
Gute Nachbarn von Radicchio:
Broccoli, Buschbohnen, Erbse, Fenchel, Gurke, Kohlrabi, Kopfkohl, Lauch, Mangold, Petersilie

Darunter harmonieren nicht:
['Broccoli', 'Kohlrabi']
['Broccoli', 'Kopfkohl']
['Buschbohnen', 'Erbse']
['Buschbohnen', 'Fenchel']
['Buschbohnen', 'Lauch']
['Erbse', 'Lauch']
['Fenchel', 'Kohlrabi']
['Fenchel', 'Kopfkohl']
['Kohlrabi', 'Kopfkohl']

Mögliche Mischkulturen:
['Broccoli', 'Buschbohnen', 'Gurke', 'Mangold', 'Petersilie', 'Radicchio']
['Buschbohnen', 'Gurke', 'Kohlrabi', 'Mangold', 'Petersilie', 'Radicchio']
['Buschbohnen', 'Gurke', 'Kopfkohl', 'Mangold', 'Petersilie', 'Radicchio']
['Erbse', 'Gurke', 'Kohlrabi', 'Mangold', 'Petersilie', 'Radicchio']
['Erbse', 'Gurke', 'Kopfkohl', 'Mangold', 'Petersilie', 'Radicchio']
['Gurke', 'Kohlrabi', 'Lauch', 'Mangold', 'Petersilie', 'Radicchio']
['Gurke', 'Kopfkohl', 'Lauch', 'Mangold', 'Petersilie', 'Radicchio']
['Broccoli', 'Erbse', 'Fenchel', 'Gurke', 'Mangold', 'Petersilie', 'Radicchio']
['Broccoli', 'Fenchel', 'Gurke', 'Lauch', 'Mangold', 'Petersilie', 'Radicchio']

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 09.04.2023 11:35:25

Huo hat geschrieben: ↑ zum Beitrag ↑
09.04.2023 09:59:21
Am Beispiel von Radicchio:
Interessant, neutrale Pflanzen wie die Aubergine zählt nicht zu den friends. Die enemies und friends sind nicht komplementär. Aber so bekommt man trotzdem viele Mischkulturen angeboten, bei denen das Ergebnis dann wirklich optimal ist.

michaa7
Beiträge: 4946
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von michaa7 » 09.04.2023 16:00:36

@ Huo

mich würde immer noch interessieren was du dazu sagst?
viewtopic.php?p=1324107#p1324107

Weiter habe ich die letzten Tage realistische freund/feind Tabellen angelegt, die ich eigentlich hier posten wollte. Allerdings ist mir wohl - und das hatte ich die ganze Zeit befürchtet - ein Fehler passiert, dass ich nämlich schlechte Paarungen in die Liste der Guten Paarungen kopiert hatte, oder umgekehrt, oder beides. Jedenfalls kann ich jetzt die Listen mit über 1000 friends- und ca 500 enemie-Paarungen wegschmeissen und alles nochmal neu machen.

Bemerkt habe ich es bei der Ausführung von Huo's script welches sinnvollerweise prüft ob es gleiche Einträge in beiden Dateien gibt.

Dieser Fehler war auch der Grund, warum ich irgendwann irgendwo gute Beziehung durch ein "+" und negative durch ein "-" gekennzeichnet habe:

Pflanze1-Pflanze2
Pflanze1+Pflanze3
...
usw.

Das System mit zwei unterschiedlichen Dateien ist eben wenig/gar nicht fehlertolerant. Passiert ein Fehler wird der nur entdecke falls es auch wirklich eine Doublette in der anderen Datei gibt(was nicht zwingend der Fall ist). Wertet man nur eine Tabelle aus ist das noch begrenzt überschaubar. Ich habe über 10 Tabellen und Listen ausgewertet. Da ist nichts mehr nachvollziehbar.

Falls ihr noch Interesse und eine Idee habt wie man Paarungen fehlertolerant speichern kann wäre das in der Praxis sehr hilfreich. Im Grunde geht das ja gar nicht anders als die Qualität Freund oder Feind in der Paarung selbst auszudrücken und nicht ausschließlich über den Dateinamen.
Ich verstehe, vermute zumindest, dass das die bisherigen Lösungen nicht vereinfacht ;-)
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 09.04.2023 17:23:16

michaa7 hat geschrieben: ↑ zum Beitrag ↑
09.04.2023 16:00:36
mich würde immer noch interessieren was du dazu sagst?
Ich bin zwar nicht Huo, aber Huos Beispiel mit den vielen Gemüsesorten zeigt doch, dass Du recht hast. So lange man genügend "Nur Freunde" Kombinationen findet brauch man keine Mischkulturen mit "Freuden oder Neutral". So hat man bessere Ernte Ergebnisse, Robustheit usw. Wenn man kaum oder keine Mischkulturen mit "Nur Freunde" hat muss man die Situation anders bewerten oder die Kriterien für Freundschaft herabsetzten.
michaa7 hat geschrieben: ↑ zum Beitrag ↑
09.04.2023 16:00:36
Dieser Fehler war auch der Grund, warum ich irgendwann irgendwo gute Beziehung durch ein "+" und negative durch ein "-" gekennzeichnet habe:

Pflanze1-Pflanze2
Pflanze1+Pflanze3
...
usw.
michaa7 hat geschrieben: ↑ zum Beitrag ↑
09.04.2023 16:00:36
Ich verstehe, vermute zumindest, dass das die bisherigen Lösungen nicht vereinfacht ;-)
Meiner Meinung nach vereinfacht das die Lösung. Man liest eine Datei, die Pflanzen mit + kommen zu den Friends, die mit - zu den Enemies und das war es. Zugegebenermaßen warst Du mir mit der Idee weit voraus. Da habe ich noch gemeint, die Algorithmen sind nur sinnvoll, wenn Friends und Enemies komplementär sind.

Der Unterschied vom alten und neuen Vorgehen zu Bildung von Mischkulturen ist nach meinem Verständnis nun wie folgt:
  • Früher durften die Freunde der Hauptpflanze keine Enemies sein.
  • Nun müssen die Freunde der Hauptpflanze auch untereinander Freunde sein.
Dann würde aber auch eine Friends Datei ausreichen. Im Fall von "Früher" ist eine Datei mit "+" und "-" sicher die beste Lösung, auch für den Fall, dass man mal beide Versionen haben will oder muss. Dann bräuchte das Skript noch einen Kommandozeilenparameter mehr.

Viele Grüße,
Christoph

michaa7
Beiträge: 4946
Registriert: 12.12.2004 00:46:49
Lizenz eigener Beiträge: MIT Lizenz

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von michaa7 » 09.04.2023 17:36:18

chrbr hat geschrieben: ↑ zum Beitrag ↑
09.04.2023 17:23:16
Dann würde aber auch eine Friends Datei ausreichen.
Nein.
Weil Pflanzen nicht zwingend "Freunde" sein müssen um gegenüber der Hauptpflanze nützlich zu sein. Aber vielleicht hast du doch recht und ich verstehe nur deinen Algorithmus nicht ( was definitiv der Fall ist ;-) )
Aber so wie ich das "überblicke" habe eben ich meine Zweifel an deiner Aussage ;-)

BTW: wenn man in der Ausgabe die Konflikte sehen könnte wäre das in der Praxis durchaus hilfreich.

Ich werde die Tage mit etwas mehr Sicherheitskopien nochmals die Tabellen auswerten. Mal schaun wie ich das etwas fehlerresistenter hinbekomme ...
gruß

michaa7

-------------------------------
Menschen ändern gelegentlich ihre Ansichten, aber nur selten ihre Motive. (Oskar Negt)

chrbr
Beiträge: 626
Registriert: 29.10.2022 15:53:26

Re: (ad acta) Datenbankdarstellung für Mischkultur (Kleingarten)

Beitrag von chrbr » 09.04.2023 18:08:43

michaa7 hat geschrieben: ↑ zum Beitrag ↑
09.04.2023 17:36:18
Weil Pflanzen nicht zwingend "Freunde" sein müssen um gegenüber der Hauptpflanze nützlich zu sein. Aber vielleicht hast du doch recht und ich verstehe nur deinen Algorithmus nicht ( was definitiv der Fall ist ;-) )
Aber so wie ich das "überblicke" habe eben ich meine Zweifel an deiner Aussage ;-)
Inzwischen bin ich der Meinung, dass wir das gleiche Bild haben. Nur bin ich nicht immer fähig, meine Ansicht für andere verständlich auszudrücken. :THX:

Antworten