pandas 选择一个两列的数组,其中一列的和固定,另一列的和最小

xtfmy6hx  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(180)

该阵列具有两列,第一列表示CBM,第二列表示Price。
如何进行计算:当我需要一定数量的cbm时,同时需要最低的价格。

no    cbm     price     Y/N
 1    0.24     500 
 2    0.14     400 
 3    0.21     610 
 4    0.18     300 
 5    0.12     440 
 6    0.24     760

结果应为:应该选择哪一个,以使总CBM=0.8(± 0.08),并获得最低价格。
我在想让第三列填0或1,(找到加法和最接近某个值的数字组合),然后做每个解决方案的总成本比较。

isr3a4wc

isr3a4wc1#

感谢crx 91,这是一个线性规划问题--〉整数规划--〉0-1整数规划--〉背包问题。
纸浆包是有用的,下面是我写的一个python代码,只针对这个简单的question.(我在考虑更复杂的条件)

from pulp import *
    prob = LpProblem("re-assign", LpMinimize)
    weight=[0.25,0.32,0.4,0.4,0.4,0.4,0.4,0.4,0.45,0.46]
    cost=[120.2,148.2,120.2,120.2,125.9,120.2,120.2,120.2,120.2,120.2]

    status_metro=[LpVariable("x{}".format(i+1), cat="Binary") for i in range(len(weight))]

    prob +=pulp.lpSum([(i*cost1) for i ,cost1 in zip(status_metro,cost)])
    prob +=pulp.lpSum([(i*weight1) for i, weight1 in zip(status_metro,weight)])<=3.6
    prob +=pulp.lpSum([(i*weight1) for i , weight1 in zip(status_metro,weight)])>=3

    prob.solve()
    for v in prob.variables():
        print(v.name,"=",v.varValue)
    print("sum",pulp.value(prob.objective))

相关问题