我創建了一個模型來解決Julia中的線性程序。我首次解決了線性程序,但相同的代碼不適用於修改後的程序。你能弄清楚發生了什麼事嗎? 謝謝! 工作正常的代碼:相同的代碼在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>:?
我知道問題在於約束,但是這部分代碼是相同的,並且不起作用。你能不能告訴我發生了什麼事?