我目前正在研究一個需要bin包裝問題變化的問題。我的問題不同,因爲垃圾箱的數量是有限的。我有三個垃圾箱,其中最小的一個將物品放入的成本最低,中型垃圾箱比小型垃圾箱稍貴,第三個垃圾箱理論上具有無限容量,但放置物品的成本過高。bin可變bin成本和大小的bin包裝Python查詢
我能夠在網上找到一個Python腳本,以類似的方式解決了bin問題。我的問題是如何重寫腳本以接近我原來的問題?有問題的腳本使用相同的垃圾箱。
我已經在最下面列出了一些線條來討論如何選擇垃圾桶。此外,是否有辦法爲每個垃圾箱設置單獨的約束?感謝所有的幫助!
from openopt import *
N = 30 #Length of loan dataset
items = []
for i in range(N):
small_vm = {
'name': 'small%d' % i,
'cpu': 2,
'mem': 2048,
'disk': 20,
'n': 1
}
med_vm = {
'name': 'medium%d' % i,
'cpu': 4,
'mem': 4096,
'disk': 40,
'n': 1
}
large_vm = {
'name': 'large%d' % i,
'cpu': 8,
'mem': 8192,
'disk': 80,
'n': 1
}
items.append(small_vm)
items.append(med_vm)
items.append(large_vm)
bins = {
'cpu': 48*4, # 4.0 overcommit with cpu
'mem': 240000,
'disk': 2000,
}
p = BPP(items, bins, goal = 'min')
r = p.solve('glpk', iprint = 0)
print(r.xf)
print(r.values) # per each bin
print "total vms is " + str(len(items))
print "servers used is " + str(len(r.xf))
for i,s in enumerate(r.xf):
print "server " + str(i) + " has " + str(len(s)) + " vms"
##OP Interjection: Ideally my bins would look something like:
bin1 = {
'size': 10000,
'cost': 0.01*item_weight,
}
bin2 = {
'size': 20000,
'cost': 0.02*item_weight,
}
bin3 = {
'size': 100000,
'cost': 0.3*item_weight,
}