const boxes = {'labore-8': { id: 'labore-8', value: 587, weight: 16 },
'qui-21': { id: 'qui-21', value: 409, weight: 11 },
'iure-16': { id: 'iure-16', value: 920, weight: 133 },
'delectus-23': { id: 'delectus-23', value: 727, weight: 137 },
'quam-13': { id: 'quam-13', value: 414, weight: 67 },
'aut-11': { id: 'aut-11', value: 255, weight: 28 },
'ipsum-22': { id: 'ipsum-22', value: 765, weight: 360 },
'voluptas-15': { id: 'voluptas-15', value: 624, weight: 257 },
'quasi-18': { id: 'quasi-18', value: 800, weight: 498 },
'sunt-5': { id: 'sunt-5', value: 583, weight: 290 },
'reiciendis-1': { id: 'reiciendis-1', value: 641, weight: 383 },
'assumenda-17': { id: 'assumenda-17', value: 858, weight: 755 },
'occaecati-24': { id: 'occaecati-24', value: 716, weight: 552 },
'nobis-12': { id: 'nobis-12', value: 634, weight: 575 },
'corporis-0': { id: 'corporis-0', value: 675, weight: 793 },
'dolorum-6': { id: 'dolorum-6', value: 478, weight: 618 },
'esse-9': { id: 'esse-9', value: 483, weight: 759 },
'distinctio-4': { id: 'distinctio-4', value: 317, weight: 340 },
'doloremque-7': { id: 'doloremque-7', value: 332, weight: 731 },
'pariatur-10': { id: 'pariatur-10', value: 280, weight: 559 },
'consequuntur-14': { id: 'consequuntur-14', value: 215, weight: 740 },
'reiciendis-20': { id: 'reiciendis-20', value: 110, weight: 292 },
'recusandae-19': { id: 'recusandae-19', value: 73, weight: 493 },
'quae-3': { id: 'quae-3', value: 80, weight: 672 },
'corrupti-2': { id: 'corrupti-2', value: 7, weight: 901 }
}
const MAX_B = 934
const maxWeight = [...Object.values(boxes)].reduce((s, { weight: w }) => s + w, 0)
const MAX_A = maxWeight // 10050
let candidates = new Map([[0, { value: 0, weight: 0, ids: ['identitybox'] }]])
let best = {
value: 0
}
for (const box of Object.values(boxes)) {
const next = new Map([...candidates.entries()])
for (const candidate of candidates.values()) {
const weight = candidate.weight + box.weight
if (weight > MAX_B) {
continue
}
const value = candidate.value + box.value
if (!next.has(weight) || value > next.get(weight).value) {
const betterCandidate = { value, weight, ids: [box.id, ...candidate.ids] }
if (value > best.value) {
const P_A = maxWeight - weight
if (P_A < MAX_A) {
console.log('improve', { P_A, betterCandidate })
best = betterCandidate
}
}
next.set(weight, betterCandidate)
}
}
candidates = next
}
improve {
P_A: 10049,
betterCandidate: {
value: 4264,
weight: 911,
ids: [
'sunt-5',
'voluptas-15',
'quam-13',
'delectus-23',
'iure-16',
'qui-21',
'labore-8',
'identitybox'
]
}
}
from sage.numerical.knapsack import knapsack
knapsack(seqboites, max=934)
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :