Как кодировать суммирование, когда его нижняя граница является вектором?
Для кодирования задачи планирования производства я использую "Джулию". В формулах есть формула с нижней границей, которая является вектором. Пожалуйста, посмотрите вложение
,
Когда я хочу ввести этот вектор как нижнюю границу суммирования, программа выдает ошибку, что границы суммирования должны быть масштабирующими
,
1 ответ
Синтаксис в квадратных скобках устарел некоторое время назад - в текущей версии Julia и JuMP (Julia 0.6.0, JuMP 0.18.0) при его запуске работает следующее:
using JuMP
using Cbc
bar = Model(solver=CbcSolver())
# data
N = 3
M = 3
W = 3
K = 3
T = 77
s = ones(3,3)
@variable(bar, x[1:N,1:M,1:K,1:T],Bin)
p = reshape( [
[[9,7,12]; [10,6,8]; [8,10,9]];
[[6,5,9]; [8,4,6]; [6,8,6]];
[[4,4,5]; [4,3,4]; [5,3,5]]],
3,3,3)
for t = 1:T
@constraint(bar,
sum( ( ( (x[i, j, k, t] * k
for h = t:t + p[i, j, k] + 1 )
for j = 1:M)
for k = 1:K)
for i = 1:N) == 0)
end
solve(bar)
Если использование текущих версий не является вариантом, также должен работать обычный старый цикл for:
(... same stuff as before up to the for loop ...)
for t = 1:T
s = 0.0
for j = 1:M
for k = 1:K
for i = 1:N
for h = t:t + p[i, j, k] + 1
s += k*x[i,j,k,t]
end
end
end
end
@constraint(bar, s == 0)
end
Что в любом случае, возможно, более читабельно, чем первая формулировка. Дайте мне знать, если ни одна из этих версий не сработает для вас, тогда мы можем посмотреть дальше.
PS Если вы спросите что-нибудь о фрагменте кода, снимок экрана - это хорошо, но фактический код - лучше, тогда нам не нужно вводить все заново:)