Первая ошибка появляется в этой строке:
for i in 1:turnos+1,j in 1:empleados
@constraint(m,x[i,j] + x[i,j-1] + x[i,j+1] <= 2)
end
В Julia массивы обычно индексируются, начиная с 1 (ищите индексацию на основе 1). Это отличается от других языков, таких как Python.
Это означает, что если ваш массив имеет размер (30,26), вы можете использовать только индексы от 1 до 30 в первом измерении и от 1 до 26 лет во втором.
Ваша переменная x
имеет размер 30x26
, но в вашем цикле вы пытаетесь вызвать элемент x[1,0]
(потому что вы спрашиваете x[i,j - 1]
, а j начинается с 1). Как только вы исправите это, переформулировав свои индексы или свой диапазон, вы столкнетесь с другой проблемой с частью x[i,j+1]
, потому что вы попытаетесь получить доступ к x[1,27]
, который также не существует. Вам также нужно исправить диапазон i, который в настоящее время идет от 1 до 31 в первом индексе (for i in 1:turnos + 1
). Это также нарушит ваш код, потому что ваш массив имеет только размер 30 в первом измерении.
Наконец, в последней строке вы строите
@constraint(m, sum(x[i,:]) for i in i:turnos >=requerimiento[i])
Это даст ошибку из-за того, что вы просите i
перейти от i
к другому значению, что не имеет смысла.
Так что вам нужно только внимательно следить за тем, как вы выполняете итерациюмассивы.
Один из способов заставить эту линию работать:
for i in 1:turnos,j in 2:empleados-1
@constraint(m,x[i,j] + x[i,j-1] + x[i,j+1] <= 2)
end
Но я не понимаю вашу модель, поэтому не знаю, пытаетесь ли вы это сделать,Лучший совет, который я могу вам дать, - лучше ознакомиться с индексированием официальных документов на простых примерах.