Как векторизовать Юлию Выпуклые ограничения неравенства

Я пытаюсь векторизовать ограничение неравенства, сравнивая два Convex типы. С одной стороны, у меня есть Convex.MaxAtomс, а с другой стороны, у меня есть Variables. Я хочу сделать что-то вроде следующего:

using Convex
N = 10
t = Variable(1)
v = Variable(N)
x = Variable(1)
z = rand(100)

problem = minimize(x)
problem.constraints += [t >= 0]

ccc = Vector{Convex.MaxAtom}(N)
for i = 1:N
    c = -(1. + minimum(x.*z))
    cc = t + c
    ccc[i] = max(cc,0.)
end
problem.constraints += [ccc <= v]

но я получаю следующую ошибку в последнем ограничении:

ERROR: LoadError: MethodError: no method matching isless(::Complex{Int64}, ::Int64)

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

for i = 1:N
      problem.constraints += [ccc[i] <= v[i]]
end

Я пытаюсь избежать этого, потому что в конечном итоге мои 10 будут намного больше.

1 ответ

Решение

В этом случае (благодаря доктору Уделлу) он работает как векторизация

c = -(1. + xisim + minimum(x.*z))
cc = t + c
ccc = max(cc,0.)
problem.constraints += [ccc <= v]
Другие вопросы по тегам