Was ist das für eine Variante des Rucksackproblems?

  • Hi,
    Hab hier ne Frage die nicht wirklich was mit VDR zu tun hat aber ich weis das es hier genug fähige Programmiere gibt :)
    Ich hab folgende Problemstellung:


    Rucksack mit einem Fassungsvermögen von W einheiten (is egal was für ne einheit :) )
    jetzt hab ich mehrer Gegenstände G1,G2,G3...Gn, die alle eine bestimmte Menge an Einheiten im Rucksack benötigen. Alle passen nicht rein und jeder soll höchstens 1. mal reingemacht werden. Es gibt kein Profit wie beim originalen Rucksackproblem, jeder Gegenstand ist gleichwertig. Jetzt suche ich einen Algorithmus der ohne Bruteforce die bestmögliche Füllung des Rucksacks mit den Gegenständen rausbekommt. Also, der das Fassungsvermögen so gut wie möglich Ausschöpft. Es können auch Gegenstände übrig bleiben, hauptsache es wird so viel Fassungsvermögen wie möglich benutzt.
    Bei 10 Gegenstände würde das mit Bruteforce (also alle Möglichkeiten ausprobieren) ja noch gehen, aber bei mehrern 100 wären das ja schon zielich viele Berechnungen.


    Gefunden habe ich dazu natürlich erst mal das Rucksack-problem, aber da wird mit Profit gerechnet. Dann das Change-Making Problem, aber da dürfen Gegenstände (Münzen) mehrmals verwendet werden. Und ein Code-Beispiel hab ich für beides noch nicht wirklich gefunden.


    Gibt es denn genau für mein Problem auch einen Namen? oder hat sogar jemand nen Algorithmus dafür?


    Gruß
    MaN

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • Na da hätte ich doch was für dich. Haben das an der Uni in Algorithmik behandelt. Ich hoffe du kannst Java lesen :)


    VDR #1:
    SW: LINVDR 0.7 (2.6.20.1 @Dr. Seltsam) VDR 1.4.5-2-extp22 + Mahlzeit-ISO 3.2
    HW: Asus Pundit-R - Pentium III 2GHz - 7'' TFT für GraphTFT - Nexus-S Rev. 2.3
    VDR #2 (Client):
    SW: LinVDR 0.7 (2.6.17.3 @Dr. Seltsam) VDR 1.4.0-1 + DXR3 @Dr. Seltsam
    HW: T-Online Streaming Box S-100 - Pentium M 788MHz - DXR3 Karte - 1GB CF
    Registered User: #1096

  • OK viele dank, das schau ich mir gleich mal an (mit syntaxhighliting aber :D )


    Ist das jetzt genau das Problem oder nur ne variante?


    Gruß
    MaN

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • ich denke das dürfte es sein:
    http://web.informatik.uni-bonn…f#search=%22binpacking%22


    (ich vermute du versuchst, wie du eine CD/DVD möglichst voll brennen kannst :) )

    Software: VDR 1.4.3, mp3, osdpip, streamdev-server, femon, wapd, X11, Wireless Keyboard Kernel: 2.6.18
    Hardware: 1x DVB-S v 1.3, 1x Skystar 2, Celeron@2GHz, 256 MB RAM, 4 HDs Raid1/5, Total: 600 GB, Asus P4S533 cmi8738 & LAN on board 6 PCI
    40" Sammelbestellungs-LCD an ATI Radeon 9550 DVI-Out + tvtime, 70 cm TV an J2-RGB-Out
    Organisator der ersten und zweiten VDR-Sanitizer Sammelbestellung.
    In progress: POV-ION 330 - MediaPointer MP-S2 - vdr 1.7.9 - vdr-xine(vdpau)

  • leider darf es immer nur ein Behälter sein! Beim Binpacking wird ja so wie ich das gesehen hab alles auf so wenig wie mögiche Behälter verteilt. Bei mir geht es einfach nur darum so wenig wie möglich ungenutzten Rest in EINEM Behälter/Rucksack übrig zu lassen.

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • hmm, riecht auch irgendwie nach NP...
    schau dir mal das an: http://de.wikipedia.org/wiki/K…ollst%C3%A4ndige_Probleme
    Ich denke dass da deins auch wo dabei ist :) ausserdem lassen sich ja alle diese Probleme "ganz einfach" untereinander transformieren.


    Gruß
    Roland

    Software: VDR 1.4.3, mp3, osdpip, streamdev-server, femon, wapd, X11, Wireless Keyboard Kernel: 2.6.18
    Hardware: 1x DVB-S v 1.3, 1x Skystar 2, Celeron@2GHz, 256 MB RAM, 4 HDs Raid1/5, Total: 600 GB, Asus P4S533 cmi8738 & LAN on board 6 PCI
    40" Sammelbestellungs-LCD an ATI Radeon 9550 DVI-Out + tvtime, 70 cm TV an J2-RGB-Out
    Organisator der ersten und zweiten VDR-Sanitizer Sammelbestellung.
    In progress: POV-ION 330 - MediaPointer MP-S2 - vdr 1.7.9 - vdr-xine(vdpau)

  • Hmmm,


    mit schwacher Erinnerung an theoInf würde ich sagen, es handelt sich hierbei um das Knapsack-Problem. NP ist auf jedenfall schonmal die richtige Adresse. Was wiederum heisst, einen effizienten Algorithmus wird man da nicht so leicht finden... Brute Force gehört nicht zu den effizienten.


    Aber Knuth und Konsorten (Sedgewick) sollten da hilfreich sein, vermute ich mal.


    rael

  • hmm... ich bin leider kein studierter Informatiker und finde es nicht gerade soo einfach was zu transformieren. (bin Schüler des Informationstechnischen Gymnasium und besuche jetzt dann die 12. Klasse :D )


    Ich finde jedenfalls nicht wirklich mein Problem...


    Knapsack: man rechnet mit Profit.
    Change-Making: Gegenstände(Münzen) dürfen nicht nur einmal verwendet werden.
    Bin-Packing: es stehen mehrere Behälter zur Verfügung.

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • Zitat

    hmm... ich bin leider kein studierter Informatiker und finde es nicht gerade soo einfach was zu transformieren.


    Soo einfach ist es auch meistens nicht (deshalb auch die " )


    Evtl kannst du das Binpacking Problem darauf abbilden (einfach den Bin nehmen der am vollsten ist)
    Damit dies auch immer richtig ist, muss man evtl Tricks anwenden, z.B zu den vorhandenen Paketen noch weitere hinzufügen, so dass die Bins auch (rand)voll werden.
    wenn man nämlich beliebig große Pakete mit Gesamtvolumen von 1,1 Bins versucht zu verteilen, erreicht man u.U. einen Füllgrad von 0,55 pro Bin...


    [edit]
    Eigentlich müsste es ja mittels Rucksackproblem lösbar sein:
    Gewicht=Gewinn
    Schranke für Gewicht = Rucksackgröße
    Gewinn wird maximiert, somit wird Rucksack maximal gefüllt

    Software: VDR 1.4.3, mp3, osdpip, streamdev-server, femon, wapd, X11, Wireless Keyboard Kernel: 2.6.18
    Hardware: 1x DVB-S v 1.3, 1x Skystar 2, Celeron@2GHz, 256 MB RAM, 4 HDs Raid1/5, Total: 600 GB, Asus P4S533 cmi8738 & LAN on board 6 PCI
    40" Sammelbestellungs-LCD an ATI Radeon 9550 DVI-Out + tvtime, 70 cm TV an J2-RGB-Out
    Organisator der ersten und zweiten VDR-Sanitizer Sammelbestellung.
    In progress: POV-ION 330 - MediaPointer MP-S2 - vdr 1.7.9 - vdr-xine(vdpau)

    Einmal editiert, zuletzt von pram ()

  • Zitat

    Original von TKONeo
    Na da hätte ich doch was für dich. Haben das an der Uni in Algorithmik behandelt. Ich hoffe du kannst Java lesen :)
    [...]


    Könntest du die Ausgaben ein wenig erklären? Ich kann da im moment noch nicht so viel damit anfangen...


    am anfang z.B. wird die größe des Rucksacks von 1 bis meiner Angabe Hochgezählt. Was hat das für ein Sinn?


    Und dann steht für jedes Element eine Matrix mit -1 0 und 1... Was soll die mir sagen? Und am Schluss die Partitions-Elemente?


    Gruß
    MaN

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.



  • Die idee ist nicht schlecht, da sollte ich mir mal gedanken drüber machen!

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • Du kannst eine beliebige Implementation des Rucksack Problems nehmen. Die Gewichte und maximal Grenze hast du ja vorgeben. Als Nutzen weist du jedem Element 1 zu.


    Kleinere Probleme kannst du mit einem Brute-Force ansatz angehen. Ansonsten würde ich mal nach Branch-and-Bound (Branch-And-Cut) Algorithmen googlen.

    VDR: P3 650 passiv, 256 MB RAM, 40GB System HDD, 180 GB video0 HDD, TT1.5 + AVBoard
    gen2vdr 1.2 mit VDR 1.4.7
    HDVDR in spe: AMD Athlon II X2 245e (2x 2.9GHz, 45W TDP), Gigabye GA-880GA-UD3H, 4 GB DDR3-RAM, 2TB HDD (WD EARS), Technotrend S2-3200)

  • dummerweise hab ich immer noch keine in c++ gefunden! :(

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • Du wirst doch als Schüler eines " Informationstechnischen Gymnasiums" in der Lage sein aus den genannten Quellen den benötigten Algorithmus in C++ zu implementieren?!


    Wenn es eine Schulaufgabe ist um so wichtiger!


    P.S. C++ und Java liest sich ähnlich :]

  • ne Schulaufgabe ist das nicht... Sowas kompliziertes würden wir wahrscheinlich in der 13. nichtmal durchnehmen (leider :( ). Also mit Profit wäre das glaub ich auch kein Problem, aber ich kann mir das einfach nicht vorstellen ohne... Wenn man das grafisch darstellen will wie in http://www-i1.informatik.rwth-…e/~algorithmus/algo15.php dann ist das ja einfach eine Linie auf der ein paar Punkte sind, da der Profit fehlt. Und da ist dann mein Problem: was sind dann die Pareto-optimalen Punkte?? Das würde mir sicher schon ein wenig helfen.

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

  • Dann hast Du nur Pareto-Optimale Punkte (siehe die rote Linie)


    Du könntest auch eine Art "Tiefensuche" implementieren. Da liegt die Komplexität aber immer noch bei ~ O( n log n ).


    Was besseres fällt mir spontan nicht ein.


    Gruß
    Andreas

  • Beim Knapsack-Problem gibt es bisher keine exakte Lösung ohne alle Möglichkeiten zu probieren.


    Es gibt Näherungsverfahren die schneller sind.


    Ein Russe hat mal einen Algorithmus veröffentlicht der angeblich schneller sein soll. Das würde eine Menge Probleme in der Informatik lösen.


    Es wurde aber nach langer Zeit ein Fehler in dem Algorithmus gefunden glaube ich.


    Grüße Bernd

    VDR : POV Atom 330-1 Mainboard, MSI TV@nywhere Satellite II, 2 GB RAM, natürlich mit yaVDR 0.61. Heimkino mit Onkyo AVR, Nubert-Surround-Boxen und JVC Beamer mit 4K und HDR. HD-VDR für Newbies: www.partyfotos.de/vdr


  • O(n log n) wäre immerhin einiges besser als O(n^n) oder sowas (bruteforce)



    könnte man das ganze auch als Subset-Sum Problem sehen?

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

    Einmal editiert, zuletzt von MaN ()

  • Also nur her mit weiteren Tipps :)

    Bilder meines Lüfterlosen eigenbau VDRs an dem ich momentan baue.

    Mein VDR:
    Asus A7N8X-VM/400, AMD Athlon XP 1700+ JIUHB DLT3C, 768MB DDR, 250GB HDD, DVB-S FF 1.3, Skystar 2.6d, 27x4 LCD mit SMD LED Hintergrundbeleuchtung, Rasputin Hardware-Wakeup, 7" TFT für GraphTFT, AVBoard.
    Debian 4.0, Kernel 2.6.19, VDR 1.4.4
    Alles im Selbstgebauten Alu-gehäuse.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!