Selbsttrainingsalgorithmus

8

Ich möchte einen selbst trainierenden Algorithmus für ein bestimmtes Problem entwickeln. Um die Dinge einfach zu halten, werde ich es auf ein einfaches Beispiel beschränken.

Update: Ich habe eine funktionierende Lösung als Antwort auf diese Frage hinzugefügt.

Sagen wir, ich habe eine riesige Liste von Entitäten, die aus einer Datenbank kommen. Jede Entität ist vom selben Typ und hat 4 Eigenschaften vom Typ Byte.

%Vor%

Nun möchte ich dynamisch eine oder mehrere Eigenschaften jeder Entität gegen eine einfache Bedingung testen. Das bedeutet im Grunde, dass ich alle möglichen Kombinationen aller Eigenschaften gegen diese Bedingung testen möchte.

Um das zu erreichen, habe ich eine Bitmaske für die Eigenschaften erstellt.

%Vor%

Und eine Methode hinzugefügt, um den maximalen Wert der Bitmaske zu erhalten. Das gibt 15 (1 + 2 + 4 + 8) für dieses Beispiel zurück.

%Vor%

In diesem Stadium bin ich in der Lage, alle Eigenschaftskombinationen mit einer einfachen Schleife zu durchlaufen. In einem Beispiel wird in der ersten Iteration die Eigenschaft Prop1 getestet, in der zweiten Iteration Prop2 wird getestet, in der dritten Iteration werden Prop1 und Prop2 getestet und so weiter.

%Vor%

Lasst uns nun die Entitäten ins Spiel bringen.

%Vor%

Nun, das funktioniert großartig, wenn meine Minimalwerte statisch sind.

Lasst uns jetzt komplizierter werden. Wie wir uns erinnern, testen wir in der ersten Iteration nur die Eigenschaft Prop1, da die Bitmaske 1 ist. Der Wertebereich für Prop1 ist 0..255. Ich habe auch einen Mindestwert für diese Eigenschaft definiert, der einen gültigen Bereich von 1..255 hat. Dieser Mindestwert ist nur ein Filter zum Überspringen von Entitäten in der foreach-Schleife.

Jetzt möchte ich die Eigenschaft Prop1 testen, während ich das Mindestlevel steigere. Diese Tests sind nicht Teil des Problems, daher nehme ich sie nicht in meine Proben auf.

%Vor%

Dies ist für eine einzelne Eigenschaft einfach. Bei der dritten Iteration muss ich mit 2 Eigenschaften, Prop1 und Prop2, umgehen, weil die Bitmaske 3 ist.

%Vor%

Wie Sie sehen können, teste ich in dieser Phase Prop1 und Prop2 jeder Entität gegen eine steigende Mindeststufe.

Da ich mit dynamisch generierten Sätzen multipler Eigenschaften zu tun habe, kann ich die while-Schleifen nicht in meinen Code einprogrammieren. Deshalb suche ich nach einer intelligenteren Lösung, um alle möglichen Kombinationen von Minimalwerten für die gegebene Eigenschaft (Bitmaske) zu testen.

    
endeffects 15.12.2015, 11:06
quelle

1 Antwort

1

Nach einer Pause habe ich eine Lösung gefunden, die meinen Anforderungen entspricht. Die Einschränkung ist, dass alle getesteten Eigenschaften vom selben Typ mit dem gleichen Wertebereich sein sollten, was für mich in meinem Fall in Ordnung ist, da alle Eigenschaften abstrakte Prozentwerte sind.

Übrigens bin ich mir nicht sicher, ob das Thema "Selbstlernalgorithmus" hier ein wenig irreführend ist. Es gibt eine Reihe von Möglichkeiten, eine solche Lösung zu implementieren. Wenn Sie jedoch nicht wissen, wie sich Ihre Daten verhalten und welche Auswirkungen die Werte haben, besteht die einfachste Lösung darin, alle möglichen Kombinationen zu erzwingen, um das am besten passende Ergebnis zu ermitteln. Das zeige ich hier.

Wie auch immer, zu Testzwecken habe ich meiner Entitätsklasse einen Zufallszahlengenerator hinzugefügt.

%Vor%

Meine Bitmaske bleibt unberührt.

%Vor%

Dann habe ich einige neue Erweiterungsmethoden hinzugefügt, um mit meiner Bitmaske umzugehen.

%Vor%

Dann habe ich einen Abfrage-Generator geschrieben

%Vor%

Und schließlich bin ich bereit, das Training zu leiten.

%Vor%     
endeffects 18.12.2015, 17:44
quelle