Использование Python Ray с объектом модели CPLEX - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь распараллелить взаимодействие с объектом 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)

В двух словах, я делаю в двух словах создание модельного объекта, некоторых переменных, а затем создание циклов в течение нескольких недель для создания ограничения.Я подставляю свою переменную, вычисляю некоторые точечные произведения и применяю ограничение.Я хотел бы иметь возможность создавать ограничение параллельно, потому что это занимает некоторое время, но пока мой код просто зависает, и я не уверен почему.

Я не знаю, должен ли я возвращать объект моделив моей функции, потому что по умолчанию метод m.add_constraint изменяет объект на месте.Но в то же время я знаю, что Рэй возвращает ссылки на удаленное значение, так что, да, не уверен, что там должно происходить.

Это вообще допустимое использование луча?Разумно ли ожидать, что можно будет изменить объект CPLEX таким образом (или любой другой произвольный объект python)?

Я новичок в Рэе, поэтому, возможно, я все неправильно структурирую, или, может быть, это никогда не сработает для X, Y и Z причины, которую также было бы полезно знать.

...