Python 如何用OpenOpt解决三维多仓装箱问题
我正在学习优化,我是OpenOpt的新手 我想表示每个进程都有3个资源使用指示器(CPU、内存和网络)的进程,我想根据以下限制将N个进程分配给组/箱:Python 如何用OpenOpt解决三维多仓装箱问题,python,mathematical-optimization,bin-packing,Python,Mathematical Optimization,Bin Packing,我正在学习优化,我是OpenOpt的新手 我想表示每个进程都有3个资源使用指示器(CPU、内存和网络)的进程,我想根据以下限制将N个进程分配给组/箱: sum(cpu) within a group < 100 sum(mem) within a group < 100 sum(net) within a group < 100 Minimize(number of groups) or maximize the sum of each resource within a gr
sum(cpu) within a group < 100
sum(mem) within a group < 100
sum(net) within a group < 100
Minimize(number of groups) or maximize the sum of each resource within a group.
奎斯顿:我怎么能做到?如果无法使用OpenOpt实现这一点,是否有其他库可以帮助我实现这一点
这里是我的初始代码:
非常感谢 想法是为每个项目分配一个权重(在这种情况下,所有项目都是相同的),并最大化受约束限制的项目数量 以下是创建项目的方式:
def gen_vms():
tg = tracegen.TraceGenerator()
trace = tg.gen_trace()
items = [{
'name': 'item %d' % i,
'weight': 1,
'cpu': t[0],
'mem': t[1],
'disk': t[2],
'net': t[3],
'n': 1
} for i,t in islice(enumerate(trace), 200)]
return items
def add_constraint(values, constraint):
return values[constraint] < 99
def add_constraints(values, constraint_list):
return [add_constraint(values, constraint) for constraint in constraint_list]
def gen_costraints(constraint_list):
global constraints
constraints = lambda values: (add_constraints(values, constraint_list))
这就是约束的创建方式:
def gen_vms():
tg = tracegen.TraceGenerator()
trace = tg.gen_trace()
items = [{
'name': 'item %d' % i,
'weight': 1,
'cpu': t[0],
'mem': t[1],
'disk': t[2],
'net': t[3],
'n': 1
} for i,t in islice(enumerate(trace), 200)]
return items
def add_constraint(values, constraint):
return values[constraint] < 99
def add_constraints(values, constraint_list):
return [add_constraint(values, constraint) for constraint in constraint_list]
def gen_costraints(constraint_list):
global constraints
constraints = lambda values: (add_constraints(values, constraint_list))
有关如何执行此操作的更多详细信息,请参见此处:在gist中lib.tracegen.tracegen来自何处?您可以直接在github上浏览特定提交中的代码(它不是gist,而是完整的repo)。如果要查找tracegen.py,可以在此处找到: