设置背包问题中物品数量的最小和最大约束

2024-09-28 20:20:42 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用google或tools解算器设置背包中物品的最小和最大数量(或固定常量)的约束

我也很乐意接受任何不使用Google ORTools解算器的解决方案的建议

from ortools.algorithms import pywrapknapsack_solver
solver = pywrapknapsack_solver.KnapsackSolver(
    pywrapknapsack_solver.KnapsackSolver.
    KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER, 'KnapsackExample')

values = [10, 15,1, 5, 7]
weights = [ [4, 5, 1, 2, 3],
            [1, 1, 1, 1, 1]]
capacities = [ 6, 4 ]
solver = pywrapknapsack_solver.KnapsackSolver(
        pywrapknapsack_solver.KnapsackSolver
        .KNAPSACK_MULTIDIMENSION_BRANCH_AND_BOUND_SOLVER,
        'Multi-dimensional solver')
solver.Init(values, weights, capacities)
computed_value = solver.Solve()
packed_items = []
packed_weights = []
total_weight = 0
print('Total value =', computed_value)
for i in range(len(values)):
    if solver.BestSolutionContains(i):
        packed_items.append(i)
        packed_weights.append(weights[0][i])
        total_weight += weights[0][i]
print('Total weight:', total_weight)
print('Packed items:', packed_items)
print('Packed_weights:', packed_weights)

Tags: branchvalueitemstotal算器valuesprintsolver