我创建了一个模型来解决 Julia 中的线性程序。我第一次解决了线性程序,但相同的代码不适用于修改后的程序。你能弄清楚发生了什么吗?谢谢!工作正常的代码:
m = Model()
@variable(m, x[1:77] >= 0)
for i in nutrients
@constraint(m, dot(data[:, i], x) >= lower[i])
end
@objective(m, Min, sum(dot(c, x)))
status = solve(m)
for i in 1:77
if getvalue(x[i]) > 0
println("Take ", getvalue(x[i]), " dollars of ", foods[i], " every day.")
end
end
println("The total cost for each day is ", getobjectivevalue(m), " dollars.")
println("The total cost for the whole year is ", getobjectivevalue(m) * 365, " dollars.")
这是结果:
Take 0.02951906167648827 dollars of Wheat Flour (Enriched) every day.
Take 0.0018925572907052643 dollars of Liver (Beef) every day.
Take 0.011214435246144865 dollars of Cabbage every day.
Take 0.005007660466725203 dollars of Spinach every day.
Take 0.061028563526693246 dollars of Navy Beans, Dried every day.
The total cost for each day is 0.10866227820675685 dollars.
The total cost for the whole year is 39.66173154546625 dollars.
这是不起作用的代码:
m1 = Model()
for i in 1:77
if i == a
@variable(m1, x[i] == 0)
elseif i == b
@variable(m1, x[i] == 0)
else
@variable(m1, x[i] >= 0)
end
end
for i in nutrients
@constraint(m1, dot(data[:, i], x) >= lower[i])
end
@objective(m1, Min, sum(dot(c, x)))
status = solve(m1)
for i in 1:77
if getvalue(x[i]) > 0
println("Take ", getvalue(x[i]), " dollars of ", foods[i], " every day.")
end
end
println("The total cost for each day is ", getobjectivevalue(m1), " dollars.")
println("The total cost for the whole year is ", getobjectivevalue(m1) * 365, " dollars.")
这是错误消息:
MethodError: no method matching dot(::NamedArrays.NamedArray{Any,1,Array{Any,1},Tuple{DataStructures.OrderedDict{Any,Int64}}}, ::JuMP.JuMPArray{JuMP.Variable,1,Tuple{Int64}})
Closest candidates are:
dot(::AbstractArray{T,1}, ::AbstractArray{T,1}) at linalg/generic.jl:302
dot{T,S,N}(::Array{T,N}, ::JuMP.JuMPArray{S,N,NT<:Tuple{Vararg{T,N}}}) at /Users/yiboliu/.julia/v0.5/JuMP/src/operators.jl:299
dot{T,S,N}(::JuMP.JuMPArray{T,N,NT<:Tuple{Vararg{T,N}}}, ::JuMP.JuMPArray{S,N,NT<:Tuple{Vararg{T,N}}}) at /Users/yiboliu/.julia/v0.5/JuMP/src/operators.jl:301
in macro expansion; at /Users/yiboliu/.julia/v0.5/JuMP/src/macros.jl:400 [inlined]
in macro expansion; at ./In[23]:13 [inlined]
in anonymous at ./<missing>:?
我知道问题出在限制条件下,但是那部分代码是相同的,并且不起作用。你能告诉我发生了什么吗?