首页 > 解决方案 > 如何在“pyscipopt”中创建变量向量?

问题描述

有没有办法在构造问题时创建一批变量pysciopt?我正在构建一个整数编程问题,我当前的解决方案涉及一个循环,它addVar需要我需要的尽可能多的变量。我有数百万像素作为变量,因此多次调用函数的 Pythonic 开销是问题的主导因素。这是我的代码现在所做的:

from pyscipopt import quicksum


def main():
    """Entry point."""
    print('build problem')
    N = 10000
    model = Model()
    x_list = []
    y_list = []
    for i in range(N):
        x_list.append(model.addVar(f'x{i}', vtype='B'))
        y = float(i)
        y_list.append(y)

    model.addCons(quicksum(x_list) <= int(N*.1))
    model.setObjective(
        quicksum(x_list[i]*y_list[i] for i in range(N)), "maximize")
    print('start optimize')
    model.optimize()
    sol = model.getBestSol()
    print('solved')
    print(sum(sol[x_list[i]]*y_list[i] for i in range(N)))

我想做的是用类似的东西替换循环model.addVectorOfVar(n=N, pre='x', vtype='B')。这样的事情可能吗?

标签: pythonoptimizationpyscipopt

解决方案


推荐阅读