Original von Rho0
das ist das knapsack problem, und das ist np-schwer. insofern, schau, was du bei wiki rausziehen kannst, ansonsten sind meine vorschläge:
- code einen greedy algorithmus
- benutze einen genetischen algorithmus a la "nsga 2"
- benutze "simulated annealing"
- benutze "particle swarms"
- formuliere es als integer linear problem und benutze einen solver wie "lpsolve"
ich persönlich würde wohl einen greedy algorithmus coden, und dann lpsolve benutzen. bei genetischen algorithmen oder particle swarms ist das komplizierte vernünftige regeln zu formulieren, wie die lösungen "mutieren".
aja, "nsga 2" und "lpsolve" sind freeware, aber du brauchst dann halt noch nen c/c++-compiler. soweit ich weiß gibt s in python auch genetische algorithmen, und ziemlich sicher gibt s in python auch nen lp-solver.
ok, hier gibt s nen lp-solver für python.
Sehr gute Antwort!
Am einfachsten ist es wohl direkt einen LP-Solver daher zunehmen, den du mit deiner zusätzlichen Nebenbedingung fütterst.
Diese nutzen dann schon alle Tricks, die es gibt (Branch & Bound, LP Relaxation, Schnitte,...)
Wenn du dann die Formulierung aus dem pdf nimmst, dann fehlt noch
\sum_{i=0}^n x_i = 10
Wenn du nur kleine Instanzen hast, kannst du es damit optimal lösen.
Wenn es größere Probleme werden, empfehle ich auf die Optimalität zu verzichten und eine 1+\epsilon - Approximation zu nehmen.
Es ist dann fast egal, wie klein \epsilon ist - das Problem wird dann ziemlich zügig gelöst, da es polynomiell wird.