Вы использовали модель mod
в макросе @constraint
. Это не было определено. Вы должны создать его, если используете JuMP.
using JuMP
mod = Model()
Вы предварительно инициализировали tam
и tar
как два размерных массива размером 1x5 (матрицы). Я думаю, что вам нужен одномерный массив, поскольку вы обращаетесь к ним как к векторам:
tam = zeros(Float64,5)
tar = zeros(Float64,5)
Вы не определили переменные m
и r
в вашей модели:
@variable(mod, m[i=1:Section, t=1:Horizon])
@variable(mod, r[i=1:Section, t=1:Horizon])
Наконец, вы можете захотеть, чтобы JuMP решил вашу модель, это можно сделать с помощью:
using GLPK # feel free here to use the solver you prefer
optimize!(mod, with_optimizer(GLPK.Optimizer))
И печать решений:
if termination_status(mod) == MOI.OPTIMAL
optimal_solution = value.(m), value.(r)
optimal_objective = objective_value(mod)
@show optimal_solution
@show optimal_objective
else
error("The model was not solved correctly.")
end
Весь рабочий код (Julia v1.1.0, JuMP v0.19.0, GPLK v0.9.1):
Horizon = 12
Section = 5
TBetPM = [4 6 9 8 5]
LPM = [1 4 5 4 4]
MaxPM = [9 8 7 10 6]
PrevPM = [3 3 2 5 2]
using JuMP
using GLPK # feel free here to use the solver you prefer
mod = Model()
tam = zeros(Float64,5)
for i in 1:Section
tam[i] = TBetPM[i]-LPM[i]
end
tar = zeros(Float64,5)
for i=1:Section
tar[i] = pi*(MaxPM[i] - PrevPM[i]) - LPM[i]
end
@variable(mod, m[i=1:Section, t=1:Horizon])
@variable(mod, r[i=1:Section, t=1:Horizon])
@constraint(mod, [i=1:Section],
sum(m[i,t] for t in 1:Horizon if t <= tam[i]) >= 1)
@constraint(mod, [i=1:Section],
sum(r[i,t] for t in 1:Horizon if t <= tar[i]) >= 1)
# Solve model and printing solution
optimize!(mod, with_optimizer(GLPK.Optimizer))
if termination_status(mod) == MOI.OPTIMAL
optimal_solution = value.(m), value.(r)
optimal_objective = objective_value(mod)
@show optimal_solution
@show optimal_objective
else
error("The model was not solved correctly.")
end
Я не знаю, происходит ли это из-за копирования / вставки или чего-то еще, но вы должны сделать отступ в своем коде, даже если его компиляция не обязательна: p