在CPLEX模型Obj中使用Python-Ray

2024-04-19 08:10:42 发布

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

我正在尝试并行化与Python对象的交互,这在计算上是昂贵的。我想用雷来做这件事,但到目前为止我的努力已经失败了。你知道吗

这个对象是一个CPLEX模型对象,我正在尝试为条件列表添加一组约束。你知道吗

以下是我的设置:

import numpy as np
import docplex.mp.model as cpx
import ray

m = cpx.Model(name="mymodel")

def mask_array(arr, mask_val):
    array_mask = np.argwhere(arr == mask_val)
    arg_slice = [i[0] for i in array_mask]
    return arg_slice

weeks = [1,3,7,8,9]
const = 1.5
r = rate = np.array(df['r'].tolist(), dtype=np.float)
x1 = m.integer_var_list(data_indices, lb=lower_bound, ub=upper_bound)
x2 = m.dot(x1, r)

@ray.remote
def add_model_constraint(m, x2, x2sum, const):
    m.add_constraint(x2sum <= x2*const)
    return m

x2sums = []
for w in weeks:
    arg_slice = mask_array(x2, w)
    x2sum = m.dot([x2[i] for i in arg_slice], r[arg_slice])
    x2sums.append(x2sum)

#: this is the expensive part 
for x2sum in x2sums:
    add_model_constraint.remote(m, x2, x2sum, const)

简而言之,我要做的是创建一个模型对象,一些变量,然后在一系列的星期内循环,以建立一个约束。我将变量子集,计算一些点积并应用约束。我希望能够并行创建约束,因为这需要一段时间,但到目前为止,我的代码只是挂起,我不知道为什么。你知道吗

我不知道是否应该在函数中返回model对象,因为默认情况下,m.add\u约束方法会就地修改对象。但同时我知道Ray返回对远程值的引用,所以是的,不确定那里应该发生什么。你知道吗

这是对雷的有效使用吗?期望能够以这种方式修改CPLEX对象(或任何其他任意python对象)是合理的吗?你知道吗

我是新来的雷,所以我可能是结构这一切都错了,或者这可能永远不会为X,Y,Z的原因,这也将是很好的了解。你知道吗


Tags: 对象inimportaddformodelnparg