Vollständige Version anzeigen : [PHP] Passender Algorithmus zu Auswahlproblem mit 4 Abhängigkeiten


GaYlORd
07.11.2014, 11:28

Hi Leute,

stehe vor einem Problem:
Ich habe in der Datenbank Elemente (150 Stück) mit 4 Eigenschaften.
Der Nutzer muss einen ca. Wert für diese Eigenschaften definieren (Abweichung je nach Eigenschaft von +/- 5%).

Wenn der Nutzer das getan hat, sollen passende Elemente ausgewählt werden (ein Element kann öfter ausgewählt werden - max. Zahl eines einzelnen Elements ist ebenfalls in der Datenbank), die aufsummiert den Gesamtwert (inkl. 5% Toleranzbereich) nicht übersteigen und am Ende sollen eine Liste mit der passende Empfehlung ausgegeben werden.

Der Nutzer kann gerne 10 Sekunden oder mehr warten bis ein Ergebnis geliefert wird. Ich muss ja alle Elemente miteinander vergleichen, um die sinnvollste Kombination auszuwählen.
Erstmal Optional: Das ganze muss 7mal 3mal durchlaufen für früh, mittag, abend und montag bis sonntag. Dabei soll aber nicht 2mal an verschiedenen Tagen oder an einem Tag zu anderer Zeit das selbe ausgewählt werden dürfen (bzw. ist das auch festgelegt).

Jetzt meine Frage: Wie gehe ich da im sinnvollsten vor? Welcher Algorithmus ist für das Problem am besten geeignet (schön wäre mit Toleranzbereich)?
Einfach in ein Array packen und durchschleifen und mit if else vergleichen wird wohl zu lange dauern ;) Hat jemand eine intelligente Lösung dazu?


Danke!
Schöne Grüße
gl

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Murdoc
07.11.2014, 11:38

Toleranzbereich kannst du mit der Funktion BETWEEN angeben.

SELECT *
FROM tbl
WHERE
foo BETWEEN min AND max


min und max solltest du mit einer simplen Prozentrechnung ausrechnen können.
Wenn PHP als Vermittler dient kannst du bereits vorab ausrechnen, oder andernfalls im SQL-Query.

min = wert - wert * ;05
max = wert + wert * ;05


Welche Einträge bereits angezeigt wurden kannst du mit einem Zeitstempel abfragen.
Mit dem lässt sich ermitteln ob und zu welcher Uhrzeit der Eintrag zuletzt angezeigt wurde.

AND timestmp < NOW() - INTERVAL 7 DAYS

Wie genau du das brauchst kannst du selbst nachlesen unter:
MySQL :: MySQL 5;5 Reference Manual :: 12;7 Date and Time Functions (;dev;mysql~com/doc/refman/5;5/en/date-and-time-functions;html)

Die Abfrage an sich wird nicht mehr als ein paar Millisekunden dauern ;)


GaYlORd
07.11.2014, 12:27

Hi Murdoc,

so simpel ist es dann leider doch nicht oder ich mach es mir einfach zu kompliziert ;)
Wie gesagt, ich muss die verschiedenen Elemente kombinieren können.

Ich machs mal mit einem Beispiel:
Das ganze soll ein Vorschlag für einen Ernährungsplan (früh, mittag und abend für 7 Tage) werden.
Kunde gibt seine Daten ein und ich habe die Werte als Tagesbedarf:
Eiweiß: 184 g
Kohlenhydrat: 50-100 g
Fett: 68 g
2230kcal

In der Datenbank stehen 150 Nahrungsmittel mit den Werten pro 100g.
Z;b;:
Produkt | kcal | eiweiß | kohlenhydrat | fett
Lachs | 65 | 15 | 0 | 0;5

Natürlich kann jemand 200g Lachs essen -> 2mal. Allerdings soll eben noch alles weitere so weit wie möglich aufgefüllt werden.

Hoffe jetzt wird eher klar, was ich vor habe.

Schöne Grüße
gl


Murdoc
07.11.2014, 13:26

Okay, ob sich das mit einem Query alleine lösen lässt weiß ich gerade nicht.
Datum der letzen Anzeige usw. sollte sich dennoch so wie oben beschrieben lösen lassen.

Zusätzlich kannst ja noch ein ORDER BY RAND() einbauen.

Um die Liste dann zu berechnen wird wohl ein Trial&Error Algorithmus herhalten müssen
if eiweiß_summe_aktuell + eiweiß_summe_eintrag <= eiweiß_summe_des_kunden
eintrag_mit_in_liste_aufnehmen()
else
nächsten_eintrag_testen()

Auf Anhieb fällt mir nix anderes ein, lasse mich aber liebend gern eines besseren belehren.

Vielleicht macht es auch noch Sinn die Einträge zu kategorisieren (hat viel Eiweiß und wenig Fett usw..;) und zu sortieren (in PHP) damit du beim erstellen der Liste noch prüfen kannst ob es sinnvoll ist was hinzuzufügen wenn man was anderes wegnimmt ...


Ähnliche Themen zu [PHP] Passender Algorithmus zu Auswahlproblem mit 4 Abhängigkeiten
  • [PHP] Abhängigkeiten [require/include(php)] finden
    Ich habe ein PHP-Script und möchte gerne die Abhängigkeiten der einzellnen php-Dateien voneinander feststellen. Konkret: ich habe eine php (zb index;php) und möchte jetzt wissen welche anderen php's alle benötigt werden für diese. Ich könnte jetzt natürlich per Hand alle includes/requir [...]

  • *.deb mit allen Abhängigkeiten installieren
    kurze frage: gibt es eine Möglichkeit ein *;deb mit allen Abhängigkeiten direkt zu installieren? wenn ich ein Paket manuell installieren möchte, es aber an den Abhängigkeiten scheitert, ist es ziemlich umständlich erst alle Pakete aufzuschreiben und über aptitude zu installieren. Daher d [...]

  • Mono - ungelöste Abhängigkeiten
    Hei Leute! Ich will auf meinem Server mod-mono installieren, dazu gebe ich ein: apt-get install libapache2-mod-mono ein. Dann kommt, dass ich ein paar mehr Pakete brauche, bis apt-get dann noch einige andere Pakete angehängt sind. Aber eine Fehlermeldung lässt sich nie beheben: Er braucht eine [...]

  • Ubuntu - Abhängigkeiten vermurkst
    Nabend, ich hab irgendwas falsch gemacht. Ich benutze Ubuntu 11;10 mit Gnome Shell und wollte den Fork Cinnamon ausprobieren. Hab laut einem Tutorial im Internet folgende Befehle ausgeführt: wget -O cinnamon_1;1;2_i386;deb (;goo~gl/s2is5) sudo dpkg -i cinnamon_1;1;2_i386;deb sudo apt-get i [...]



raid-rush.ws | Imprint & Contact pr