Python 如何用OpenOpt解决三维多仓装箱问题

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

我正在学习优化,我是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 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,可以在此处找到: