Hallo kosta,
schön, dass auch "Studierte" den Weg hier her finden.
Lang, lang ist es her, dass ich mich mit dem Thema deiner Anfrage auseinander gesetzt habe.
Pronto hat sich leider scheinbar Sang und Klanglos verabschiedet, nachdem ihm niemand direkt
eine Lösung für "sein" Problem in den Schoss geschmießen hat.
Obwohl er ja eigentlich sein "Wissen" teilen wollte ...
Es wäre schön, wenn du deine Erkenntnisse aus Studium und "Forschung" zwischendurch in eigenen Beiträgen
hier im Forum "veröffentlichen" würdest und damit das Forum bereichern könntest.
Damit wäre auch anderen (nicht Studierten) aus dem Forum die Möglichkeit gegeben, dir eventuell zu antworten.
Für eine Antwort besteht natürlich keine Garantie. Vielfach werden die Beiträge auch "nur" gelesen und die Informationen
mehr oder minder dankbar angenommen aber aus Angst vor einer eventuellen "Blamage" nicht geantwortet.
Doch manchmal können sich gerade aus unkonventionelle Antworten oder Fragen neue Erkenntnisse und Blickwinkel ergeben.
Zitat:1) Gibt es einen Greedy Alg. für die Garantie 5 aus 6 oder eine andere Methode ?? Ich will nur 1 5-er haben.
Es gibt nicht "den" Greedy-Algorithmus für 5aus5 oder "den" Greedy-Algorithmus für 5aus6.
"Greedy" beschreibt nur die "globale" Vorgehensweise.
Bei Prontos Weg benutzt du die Erste noch "freie", nicht verwendete Kombination, um weiter zu kommen.
Eigentlich der "schnellste" Weg um zu "einer" Lösung zu kommen.
Keine weiteren Prüfungen, stur die erste "Freie" aus Allen und Hurka.
Der Weg führt eventuell sogar zur "besten" Lösung. In den meisten Fällen aber nicht. Wie du schon festgestellt hast.
Denn es kann sein, dass eine erst später auf der Liste stehende Kombination zum Zeitpunkt der Auswahl mehr "neue"
Kombis abdeckt als eben diese erste freie Kombination.
Wenn der Prozess später komplett durchlaufen ist und du dein System hast, dann sieht das mit den, durch die jeweilig
ausgewählten Reihen alleinig abgedeckten Kombinationen schon wieder ganz anders aus.
Im Laufe des Prozesses führt jede neu ausgewählte Reihe bei den bereits gewählten Reihen zur Veränderung der Anzahl von den,
nur durch diese Reihe alleinig, abgedeckten Kombinationen.
Das ist dir auch bei deinem Vorgehen 5aus6 für 12 Zahlen "passiert". Es kommt, wenn man bereits ausgewählte Kombinationen
zwischenzeitlich nicht überprüft, zur mehrfachen Abdeckung einzelner Möglichkeiten (z.B. in deinem Fall am Ende 2*5er).
Genauso können in dem "System" am Ende Kombinationen sein, die durch ebenfalls erfolgte Abdeckung von späteren Reihen,
gar keine "neuen" bzw. eben gar keine (0 Nummer) alleinige Abdeckung mehr enthalten und somit auch entfernt werden könnten.
Alle Kombinationen, die sie zum Zeitpunkt der Auswahl abgedeckt haben, werden auch von später gewählten nochmals abgedeckt.
Also überflüssig.
Ein Greedy-Algorithmus prüft vor der Auswahl erst mal, welche der noch "freien" Möglichkeiten die meisten(!) "neuen"
Kombinationen abdecken "würde". Er erstellt eine Art Favoriten-Liste neben der Liste aller noch zur Auswahl stehenden Kombinationen.
Er benötigt dafür natürlich auch noch eine aktuelle(!) Liste, welche gewünschten Kombination bereits abgedeckt sind.
Aus diesen momentanen Favoriten nimmt er dann die erste Kombination. Hier kann man später dann Versuchsweise per Random nicht
die Erste sondern Eine aus der Liste auswählen. Vielleicht steht aber zwischenzeitlich auch mal nur 1 Kombi als Favorit auf der Liste.
Da gibt es dann nicht viel zu "wählen".
Eine Randomauswahl hat, auch hier nicht immer von Vorteil, Auswirkung auf den weiteren Auswahlprozess.
Nach der Auswahl und der Streichung aller nun neu abgedeckten Kombinationen wird eine neue(!) Favoriten-Liste aus den
verbleibenden "freien" Möglichkeiten für die nächst Auswahl erstellt.
In einer Art Pseudo-Code:
Benötigt:
"Basis"-Kombinationen, aus denen das System erstellt werden soll.
In der Regel das entsprechende Vollsystem, hier 6 aus 10 (210) bzw. 6 aus 12 (924),
"sortiert" Lexikographisch, Colex, Gray, Random oder was einem sonst noch einfällt.
Die gewählte "Sortierung" über den ganzen Prozess beibehalten.
Liste der abzudeckenden Kombinationen,
bei x aus 5 alle 5 aus 10 (252) bzw. 5 aus 12 (792)
für x aus 6 alle 6(!) aus 10 (210) bzw. 6(!) aus 12 (924)
Liste der benutzten Kombinationen, unser System.
Beim Start deckt jede mögliche Kombination gleich viele Möglichkeiten ab.
Die Wahl der ersten Reihe unseres Systems ist also egal.
Aufnahme der gewählten Kombination in unser System.
Kennzeichnung der entsprechenden Basis-Kombination als genutzt.
z.B. bei 5 aus 6 :
Alle abzudeckenden 6er(!) Kombinationen durchlaufen und die als "covered" kennzeichnen, die im Vergleich mit unserer
ausgewählten Kombination mindestens 5 Treffer oder mehr(!) haben.
Alle noch nicht als genutzt gekennzeichneten Basis-Kombinationen durchlaufen und prüfen.
Welche dieser Kombinationen deckt die meisten, noch nicht als covered gekennzeichneten, "neuen" Kombinationen ab ?
Jeweils(!) die Kombinationen aus der Liste der abzudeckenden Kombinationen zählen, die nicht als gecovered gekennzeichnet
sind und mindestens (in unserem Beispiel) in 5 oder mehr(!) Zahlen mit der gerade getesteten Basis-Kombination übereinstimmen.
Falls mehrere Basis-Kombinationen den gleichen "Bestwert" haben, eine Favoriten-Liste erstellen.
Durch die unterschiedliche "Vorsortierung" der Basis-Kombinationen (Lex, Colex usw.) entstehen Favoriten-Listen
mit unterschiedlichen Reihenfolgen. Dadurch erfolgt eine unterschiedliche Auswahl der "nächsten" Kombination.
Der "normale" "gierige" Greedy-Algorithmus nimmt nur von den "Besten" die erste Möglichkeit.
Auch eine Möglichkeit für eine unterschiedliche Auswahl ist an diesem Punkt eine Zufalls gesteuerte Wahl.
An Stelle der "Vorsortierung". Nicht zusätzlich.
Weiter mit der Aufnahme der gewählten Kombination in unser System.
usw. bis alle abzudeckenden Kombinationen als covered gekennzeichnet sind.
Beispiel zum Vergleich mit Prontos "Auswahlmethode"
für 5 aus 6 bei 10 Zahlen: Greedy 15 Reihen
Angezeigt in den einzelnen Reihen:
Ausgewählte Kombination (Lexikographisch laufende Nummer aller möglichen Kombinationen 6 aus 10 = ings. 210 Möglichkeiten)
gewählte Kombination selber, aus den möglichen 6er Kombinationen (Voll-System)
Anzahl der "neu" abgedeckten und zu streichenden 5 aus 6 Kombinationen zum Zeitpunkt der Auswahl(!), 5 oder mehr Treffer
Anzahl der noch verbleibenden nicht abgedeckten ®eihen bzw. Kombinationen. Gesamtanzahl hier ebenfalls(!) 210 Möglichkeiten (x aus 6)
Entschuldige die "lückenhafte" Darstellung der (8 ), sonst wird daraus = 8)
1 : 1 2 3 4 5 6 (25) R (185)
32 : 1 2 3 7 8 9 (25) R (160)
113 : 1 4 5 7 8 10 (25) R (135)
174 : 2 4 6 7 9 10 (25) R (110)
201 : 3 5 6 8 9 10 (25) R (85)
14 : 1 2 3 4 8 10 (13) R (72)
56 : 1 2 5 6 7 8 (13) R (59)
76 : 1 3 4 5 7 9 (13) R (46)
149 : 2 3 5 6 7 10 (10) R (36)
165 : 2 4 5 6 8 9 (10) R (26)
61 : 1 2 5 6 9 10 (9) R (17)
81 : 1 3 4 6 7 8 (9) R (8 )
104 : 1 3 6 8 9 10 (4) R (4)
132 : 2 3 4 5 7 9 (2) R (2)
161 : 2 3 7 8 9 10 (2) R (0)
Durch "Modifikation" des Algorithmus mit Zufallsauswahl, ständige "Prüfung" bereits ausgewählter Kombinationen auf den "aktuellen" Stand
der noch alleinig abgedeckten Kombis, Streichung von 0-Nummern, Tausch gegen "bessere" Kombinationen - eine noch nicht ausgewählte
Kombination deckt mehr Kombis ab als eine bereits gewählte (Achtung! Es sind nicht unbedingt die selben abgedeckten Kombinationen) ,
kann man nach mehrfachem Durchlauf auch 14 Reihen erreichen. :tanz:
Bei der Entfernung oder Tausch einer Kombination aus dem System die "Berichtigung" der Liste "abgedeckter Kombination" nicht vergessen !!
Ebenso natürlich die Kennzeichnung "genutzt" wieder entfernen.
Für 5aus6 mit 12 Zahlen in 6er Reihen (924 Möglichkeiten) "sollte" dein Ergebnis so aussehen (Greedy einfach = 46 Reihen):
1 : 1 2 3 4 5 6 (37) R (887)
65 : 1 2 3 7 8 9 (37) R (850)
84 : 1 2 3 10 11 12 (37) R (813)
353 : 1 4 5 7 8 10 (37) R (776)
370 : 1 4 5 9 11 12 (37) R (739)
447 : 1 6 7 8 11 12 (37) R (702)
628 : 2 4 6 7 9 10 (37) R (665)
670 : 2 5 6 8 9 11 (37) R (628 )
762 : 3 4 6 8 9 12 (37) R (591)
792 : 3 5 6 7 10 11 (37) R (554)
424 : 1 5 6 9 10 12 (33) R (521)
473 : 2 3 4 5 7 12 (33) R (488 )
512 : 2 3 4 8 10 11 (33) R (455)
924 : 7 8 9 10 11 12 (33) R (422)
252 : 1 3 4 7 9 11 (29) R (393)
673 : 2 5 6 8 10 12 (29) R (364)
133 : 1 2 4 8 9 12 (25) R (339)
163 : 1 2 5 7 10 11 (25) R (314)
292 : 1 3 5 8 9 10 (25) R (289)
385 : 1 4 6 8 10 11 (25) R (264)
572 : 2 3 6 9 11 12 (25) R (239)
255 : 1 3 4 7 10 12 (21) R (218 )
297 : 1 3 5 8 11 12 (21) R (197)
633 : 2 4 6 7 11 12 (21) R (176)
841 : 4 5 6 7 8 9 (21) R (155)
875 : 4 5 9 10 11 12 (19) R (136)
50 : 1 2 3 6 7 8 (17) R (119)
540 : 2 3 5 7 9 12 (17) R (102)
180 : 1 2 6 7 9 10 (11) R (91)
478 : 2 3 4 5 9 10 (11) R (80)
824 : 3 6 7 8 10 12 (11) R (69)
606 : 2 4 5 7 8 11 (10) R (59)
413 : 1 5 6 7 9 12 (9) R (50)
727 : 3 4 5 6 10 11 (9) R (41)
242 : 1 3 4 6 9 11 (6) R (35)
574 : 2 3 7 8 9 10 (6) R (29)
90 : 1 2 4 5 6 12 (5) R (24)
771 : 3 4 7 8 9 11 (5) R (19)
161 : 1 2 5 7 9 11 (4) R (15)
199 : 1 2 7 8 10 11 (4) R (11)
513 : 2 3 4 8 10 12 (3) R (8 )
850 : 4 5 6 7 11 12 (3) R (5)
68 : 1 2 3 7 8 12 (2) R (3)
23 : 1 2 3 4 9 10 (1) R (2)
176 : 1 2 6 7 8 9 (1) R (1)
312 : 1 3 6 8 9 10 (1) R (0)
Mit Modifikation (nur Kontrolle und Entfernung "schlechterer" Kombinationen) sind am Ende 45 Reihen möglich:
1 : 1 2 3 4 5 6 (37) R (887)
.65 : 1 2 3 7 8 9 (37) R (850)
.84 : 1 2 3 10 11 12 (37) R (813)
.353 : 1 4 5 7 8 10 (37) R (776)
370 : 1 4 5 9 11 12 (37) R (739)
.447 : 1 6 7 8 11 12 (37) R (702)
628 : 2 4 6 7 9 10 (37) R (665)
670 : 2 5 6 8 9 11 (37) R (628 )
762 : 3 4 6 8 9 12 (37) R (591)
792 : 3 5 6 7 10 11 (37) R (554)
.424 : 1 5 6 9 10 12 (33) R (521)
.473 : 2 3 4 5 7 12 (33) R (488 )
512 : 2 3 4 8 10 11 (33) R (455)
924 : 7 8 9 10 11 12 (33) R (422)
252 : 1 3 4 7 9 11 (29) R (393)
673 : 2 5 6 8 10 12 (29) R (364)
133 : 1 2 4 8 9 12 (25) R (339)
163 : 1 2 5 7 10 11 (25) R (314)
292 : 1 3 5 8 9 10 (25) R (289)
385 : 1 4 6 8 10 11 (25) R (264)
572 : 2 3 6 9 11 12 (25) R (239)
255 : 1 3 4 7 10 12 (21) R (218 )
297 : 1 3 5 8 11 12 (21) R (197)
84 Aus "System" entfernt
633 : 2 4 6 7 11 12 (21) R (193)
.841 : 4 5 6 7 8 9 (21) R (172)
353 Aus "System" entfernt
551 : 2 3 5 9 10 12 (19) R (170)
865 : 4 5 7 8 10 12 (18 ) R (152)
50 : 1 2 3 6 7 8 (17) R (135)
65 Aus "System" entfernt
413 : 1 5 6 7 9 12 (15) R (133)
447 Aus "System" entfernt
534 : 2 3 5 7 8 9 (16) R (130)
424 Aus "System" entfernt
81 : 1 2 3 9 10 11 (15) R (128 )
841 Aus "System" entfernt
857 : 4 5 6 9 10 11 (17) R (125)
473 Aus "System" entfernt
337 : 1 4 5 6 7 8 (17) R (123)
473 : 2 3 4 5 7 12 (15) R (108 )
190 : 1 2 6 8 10 12 (13) R (95)
443 : 1 6 7 8 9 11 (11) R (84)
245 : 1 3 4 6 10 12 (10) R (74)
327 : 1 3 7 8 11 12 (9) R (65)
606 : 2 4 5 7 8 11 (9) R (56)
820 : 3 6 7 8 9 10 (9) R (47)
100 : 1 2 4 5 9 10 (7) R (40)
518 : 2 3 4 10 11 12 (7) R (33)
198 : 1 2 7 8 9 12 (6) R (27)
722 : 3 4 5 6 8 11 (6) R (21)
195 : 1 2 6 10 11 12 (4) R (17)
735 : 3 4 5 7 9 11 (4) R (13)
824 : 3 6 7 8 10 12 (4) R (9)
60 : 1 2 3 6 9 11 (2) R (7)
121 : 1 2 4 7 8 9 (2) R (5)
610 : 2 4 5 7 9 12 (2) R (3)
661 : 2 5 6 7 8 11 (2) R (1)
5 : 1 2 3 4 5 10 (1) R (0)
Durch Modifikation nur Randomauswahl der jeweiligen Favoriten erreicht man nach vielen Versuchen 40 Reihen.
Zwischenzeitlich aber auch 50, 47, 48, 46, 43 usw. Zufall eben ...
Bei Random und Kontrolle mit Tausch und Entfernung am Ende auch 40 Reihen, aber "schneller".
Wenn man das Ganze dann doch lange genug laufen lässt, "schafft" man eventuell auch die schon bekannten 38 Reihen.
Nur selten ist es möglich, das Mathematische Minimum (wie kommst du eigentlich auf Minimal 25 bei 5aus6 mit 12 Zahlen ?)
bei größeren Zahlenmengen und einer höheren Anzahl von Möglichkeiten wirklich zu erreichen.
Die um 19. Hundert irgendwas von Prof. Rudolf Steiner gefundenen Systeme sind so ein seltener Fall.
Die ergeben sich auch nur unter ganz bestimmten Bedingungen. Das wurde eben von diesem Matheprof bewiesen.
:da: Und ohne Computer !!!!
Doch in den meisten Fällen geht die Berechnung eben nicht auf, da es unweigerlich zu Überschneidungen bei der Abdeckung kommt.
Auch mir kam mal vor Ewigkeiten die Idee, selber ein Program zur Systemerstellung zu schreiben.
Wie wohl so jedem, der sich mit dem Thema beschäftigt und ein paar Kenntnisse der Programmierung hat. :D
Einmal um die Vorgehensweisen besser zu verstehen, um mir Schreibarbeit zu ersparen und um meine Programmierkenntnisse zu verbessern.
Fast alle Systeme mit wenig Möglichkeiten und/oder kleinen Zahlenmengen sind schon lange an ihre mathematischen Grenzen gebracht.
Schön bei LaJolla zu sehen. Was nicht weiter "verbessert" werden kann, ist in einer etwas dickeren Schrift in der Tabelle eingetragen.
Da ich aber mein Hauptproblem der Geschwindigkeit (bei der Berechnung bzw. den Vergleichen) in hohen Zahlenbereichen bisher immer
noch nicht lösen konnte, habe ich das Projekt erstmal wieder zurückgestellt. Und "arbeite" selber überwiegend mit Covermaster.
Genauso, wie auch der Platzbedarf der sich zu "merkenden" Tabellen ein, im wahrsten Sinne des Wortes, "großes" Problem werden kann,
ist der Zeitaufwand der immer wieder benötigten Vergleichsfunktion "der" Knackpunkt für einen praktikablen Einsatz.
Vielleicht hast du da als studierter Informatiker ja bessere und schnellere Algorithmen z.B. für einfache Schleifendurchläufe und
Vergleiche. Bei der hohen Anzahl von benötigten Durchläufen summiert sich da schon die kleinste Verbesserung.
Wäre doch auch ein schönes Threadthema für dich. Selber Prof und Lehrer für uns Unwissende.
Aber so beschrieben, dass auch Laien zumindest eine Chance haben, die Ausführungen zu verstehen.
Kleine Programmiertricks, Ideen zur Abkürzung der Prozedur (welche Prüfschritte oder Vergleiche könnten entfallen), ...
Zitat:2) Ist es möglich die 132 Reihen aus C(12,6,5,5) zu verwenden und mit einer Methode diese auf z.B 38 Reihen des C(12,6,5,6) zu kürzen ??
Leider ist mir derzeit keine solche Methode bekannt, ich würde sie aber gerne auch selber kennen, falls es sie gibt.
Falls du also bei deinen weiteren Recherchen darauf stößt, ...
.. stelle sie doch bitte in einem eigenen Thread im Forum vor.
Es gibt zwar viele Formeln oder Gesetze in der Kombinatorik, mit deren Hilfe man Untersysteme aus bestehenden Systemen
extrahieren kann, aber 5aus6 aus einem 5aus5 Steiner ???
Doch man könnte ja auch mal eine Greedysuche nur auf diese Zahlenbasis (und eben nicht auf alle Möglichkeiten) loslassen ... :was:
Das ist natürlich das Schöne, wenn man Programme selber schreibt.
Man kann z.B. die Basis der Suche verändern. Schon bei der Grundlage, aus der ein eventuelles System zusammengestellt werden soll,
eine "Vorauswahl" treffen. Ob es dann allerdings "aufgeht" ist die andere Frage.
Wenn ich z.B. schon bei den Basiskombinationen sage, keine Drillinge, so kann ich nie eine Garantie 3aus3 erreichen ...
Zitat:Gerade suche ich Informationen über "simulated annealing" um es fürs "Covering Design" einzusetzen
Zu deinem "Problem" simulated annealing und Beschreibung/Algorithmus/Pseudocode.
Die "Ersten", die meines Wissens nach auf die Idee gekommen sind, das für das Set-Cover Problem einzusetzen waren
Kari J. Nurmela und Patric R.J. Ostergard aus Finnland. :da: 1993
Haben, glaube ich, sogar ihre Abschlussarbeit darüber geschrieben.
Ihr Programm Cover32 ist normalerweise irgendwo im Netz noch mit(!) Quellcode zu finden.
OK habe es schon
http://www.tcs.hut.fi/Software/old/cover/cover.zip
Genauso wie verschieden Publikationen z.B. nurmela93constructing.pdf oder "New coverings of t-Sets" und und
Habe nicht mehr alle Titel im Kopf.
Aber in diesen Dokumentationen zu ihrem Programm wird die Vorgehensweise sehr gut beschrieben.
Da das Programm intern mit Integer-Variablen arbeitet, eine komplette Kombination in einer Integer kodiert,
ist die Grenze bei 32 Zahlen im System.
Direkte Links zu den Dokumentationen habe ich zur Zeit keine, da musst du leider doch noch ein wenig suchen ...
Hoffe das "hilft" erst mal ... :bier:
Gruß Jaera