Python实现多维背包问题MKP算法(1)——动态多维背包

问题描述

MKP多维背包问题,特殊的背包问题,是著名的整数规划问题。要求从多个限制条件中选出满足所有条件的最佳组合,并计算出最优价值。

解题思路

对一个属性进行不超过限制条件的选择(即01背包问题的列出可能性),最后求多个属性的交集,在交集中找到最大价值即可。

代码实现

创建输入文本
输入数据:(第一行第一个是商品个数,第二个是属性个数,第三个是计算出的最优价值;第二行是6个商品每一个的价值;第三行到倒数第二行是属性;最后一行是限制条件,最后一行第一个数是第一个属性的限制条件,第二是第二个属性的限制条件,以此类推,数据格式如下,不要有多余的空格或者空行。)
6 10 3800
100 600 1200 2400 500 2000
8 12 13 64 22 41
8 12 13 75 22 41
3 6 4 18 6 4
5 10 8 32 6 12
5 13 8 42 6 20
5 13 8 48 6 20
0 0 0 0 8 0
3 0 4 0 8 0
3 2 4 0 8 4
3 2 4 8 8 4
80 96 20 36 44 48 10 18 22 24

输出数据:

商品的个数为: 6 属性的个数为: 10
价值分别为: [100.0, 600.0, 1200.0, 2400.0, 500.0, 2000.0]
选择第 2 个商品 | 选择第 3 个商品 | 选择第 6 个商品 |
最大价值为 3800.0 元

import pandas #需要导入库
import numpy #需要导入库
import time
start = time.time()

class MKP_Object:
    def allPossibility(restrict,attribute, nums):
        #寻找满足限制条件的组合
        parameter1 = [[]]
        element = []
        for i in range(nums):
            parameter2 = []
            for j in parameter1:
                element=j+[i]
                if sum(attribute[element])

该算法借鉴了同学思路,我修改了大部分算法以及数据结构,修改成了自己的思路。如有想法请在评论区发表,一起交流学习

你可能感兴趣的:(算法,Python,多维背包问题,Python,多维背包问题,MKP,Python,MKP)