如何用OpenOp解决三维多装箱问题

2024-09-28 21:03:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习优化,我是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.

理想情况下,我希望有这种类型的输出:

^{pr2}$

我该怎么做?如果用OpenOpt无法做到这一点,有没有其他lib可以帮助我呢?在

这里是我的初始代码: https://github.com/vonpupp/mdbp/blob/master/ksp_2.py

非常感谢!在


Tags: of内存网络net进程group资源cpu
1条回答
网友
1楼 · 发布于 2024-09-28 21:03:55

这样做的目的是为每个项目分配一个权重(在本例中,所有项目都是相同的),并最大化受约束限制的项目数。在

项目的创建方式如下:

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

约束是如何创建的:

^{pr2}$

解决过程如下:

def solve_host():
    global items
    global constraints
    p = KSP('weight', list(items), constraints = constraints)
    result = p.solve('glpk', iprint = -1)

有关如何执行此操作的详细信息,请参阅此处:https://github.com/vonpupp/2013-sbrc-experiments/blob/e2e8a2be320c8f77d67a5bc6bb822510564e80f3/myksp_oo.py

相关问题 更多 >