Как векторизовать Юлию Выпуклые ограничения неравенства
Я пытаюсь векторизовать ограничение неравенства, сравнивая два Convex
типы. С одной стороны, у меня есть Convex.MaxAtom
с, а с другой стороны, у меня есть Variable
s. Я хочу сделать что-то вроде следующего:
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]