Denksport: Radialer Bestplatz-Algorithmus

Irgendjemand_1 hat gesagt.:
Aber leider ist es jetzt fast schon zu spät, wenn die die Lösung fast schon haben ... ;)
Naja, das ist dann eine mögliche Lösung, die bestimmt nicht mal perfekt ist (bezweifle auch, dass es die perfekte Lösung gibt). Dazu kommen dann noch Konfigurationsmöglichkeiten (Raumplanung etc.), Darstellung der Informationen, Performancetuning etc. - da gäb es genug zu tun!
 
Pendergast hat gesagt.:
Naja, das ist dann eine mögliche Lösung, die bestimmt nicht mal perfekt ist (bezweifle auch, dass es die perfekte Lösung gibt). Dazu kommen dann noch Konfigurationsmöglichkeiten (Raumplanung etc.), Darstellung der Informationen, Performancetuning etc. - da gäb es genug zu tun!

Schon, aber das Thema wurde jetzt ja schon ausreichend besprochen und verschiedene Lösungssätze geliefert.

Naja ok das ist vielleicht sogar ganz gut ;) Aber die - ich hab sie mir nciht angeschaut - fast funktionierenden Funktionen etc. sind ja schon fertig.
 
So.. das ganze artet ja schon in ein wissenschaftliches Experiment aus :)
Werde mir mal den Code von hpvw zu Gemüte führen.
(Danke vorweg an dieser Stelle).

Zum Thema Contest:
Solche Problemstellungen sind sicher spannend. Und das ganze nach bester Performance bewerten (hab sowas ähnliches schon für Primzahlen im Contest Forum vorgeschlagen).

Und ich denke das diese Thematik so komplex ist, dass die beste Lösung sicher noch lange nicht gefunden ist :)
 
So.. hab den Code von hpvw nun genommen und noch ein wenig "interaktion" eingefügt...
Damit kann man das ganze besser testen:
URL: http://www.powerticket.net/TESTbestplatzcalc3.php

Dabei stehen wir nun vor zwei Problemen:
1. Die Berechnung passt nicht immer (mit 3 Plätzen werden die weiter hinten gereihten gewählt).
2. Die Berechnung ist ein ziemlicher Performancefresser... Möglicherweise kann man das noch verbessern!?

Ciao,
Mike
 
Noch was:
Bei hpvw`s Code setzt er die Priorität "links" höher als die Priorität "oben"....
Und mit den Parametern "bester Platz" konnte ich das Verhalten leider nicht ändern...
(sofern Du y=reihen und x=plätze angenommen hast)...
 
Ich habe den Code eben mal erweitert. Und zwar habe ich eine zufällige Ausgangsmatrix eingeführt, um auch anhand anderer Fälle zu testen:
PHP:
//statt $pl=..
$pl=array();
$mx = 11;
$my = 8;
$full = 20;
for ($x=0;$x<$mx;$x++) {
    for ($y=0;$y<$my;$y++) {
        $pl[$y][$x]=(rand(0,100)>$full)?1:0;
    }
}
Dabei ist mir aufgefallen, dass die Zuordnung schlechter wird, je mehr freie Plätze es gibt. Das liegt offensichtlich daran, dass man mit den Plätzen in der Ausgangspopulation leben muss, da keine neuen hinzugefügt werden (im Code-Kommentar angesprochene Zuwanderung).
Problematisch ist sicherlich auch, dass bei der Ausgangspopulation in keiner Weise berücksichtigt wird, dass möglichst viele Plätze im genetischen Code auftauchen. Ist der Raum relativ leer, ist die Chance sehr groß, dass einige Plätze gar nicht erst berücksichtigt werden können. An diesen Punkten könnte man weiterarbeiten, um den Algorithmus zu verbessern.
Auch an der Bewertung könnte man noch verbessern, da dort nicht der ideale Wert einer Gruppe ermittelt wird, sondern die Distanz der Gruppe in der zufälligen Reihenfolge, wie sie im Gencode auftaucht berechnet wird.
Bei der Rekombination könnte man sich bemühen, dass man Pärchen nicht nur zufällig bildet, sondern auch Gruppen als mom und dad zusammenführt, die verhältnismäßig dicht beieinander sitzen.

Gruß hpvw

EDIT: Verdammt seit ihr schnell
 
Verbesserungswürdig. Gebt mal 5 ein. Da s 1 - 10, 2 - 10, 3 - 10, 3 - 9, 4 - 9
wären besser.
Naja soll nicht beleidigend sein, aber ist halt so ;)
Ich find das an sich ganz gut gelungen - Für eine alpha-version allemale
 
Das klingt hier ja wie bei der Einwanderungsbehörde (Mutter, Vater, kinder, zeugung.. :)
Vor allem den Codekommentar finde ich gut:

//die bessere Hälfte bleibt erhalten und zeugt Kinder
lol..

Spass beiseite.. Die aktuelle Version mit den Zufalls-Array ist wieder online:
http://www.powerticket.net/TESTbestplatzcalc3.php

Leider versteh ich von dem genetischen Code im Moment überhaupt nichts :(

Ciao,
Mike
 
Ein genetischer Algorithmus ist ja auch kein Optimierungsverfahren, sondern eine Heuristik.
Dieses Beispiel sollte auch nur eine Idee sein, nicht mal eine Alpha-Version.
Wenn man die Mutationskriterien geschickt programmiert und die Berechnung der Fitness (im Beispiel die Distanz) besser der Problemstellung anpasst, führen genetische Algorithmen i.d.R. in verhältnismäßig kurzer Zeit zu Ergebnissen, die nahe am Optimum sind.
Durch die deutliche Trennung der Bewertung von der Ermittlung und weiteren Parametern gibt es eine Menge Schrauben, an denen man drehen kann.
Höchstwahrscheinlich muss man insbesondere die Größe der Population und die Anzahl der Generationen von der Anzahl freier Plätze abhängig machen und ggf. sogar bei fast leerem Saal auf andere Algorithmen zurückgreifen.
Auf jeden Fall sind die oben bereits angesprochen Schwachstellen noch auszubessern und (sollte man bei dieser Art der Fitnessberechnung bleiben) die Distanzparameter anzupassen.

Gruß hpvw
 
So...
Was ich nicht ganz durchblicke sind die Angaben der Distanzmatrix:

//Distanzmatrix (horizontal, vertikal, diagonal,
// Faktor für Entfernung vom Nullpunkt)
$di = array(1,1.3,1.5,0.1);
Ist ein Wert mit 4 Werten.. aber was gibt der vierte an

Folgendes Problem ist noch aufgetreten (wie schon erwähnt): Er bevorzugt links vor oben.. (d.h. er beginnt seine Berechnung an der linken seite und nicht oben)...

LG
Mike
 
Zurück