Julia 相同的代码没有';I don’我在茱莉亚工作不连贯

Julia 相同的代码没有';I don’我在茱莉亚工作不连贯,julia,linear-programming,ijulia-notebook,julia-jump,Julia,Linear Programming,Ijulia Notebook,Julia Jump,我在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

我在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.")
结果是:

每天摄入0.02951906167648827美元的小麦面粉(浓缩)。
每天吃0.0018925572907052643美元的肝(牛肉)。
每天吃0.011214535246144865美元的卷心菜。
每天吃0.005007660466725203美元的菠菜。
每天吃0.061028563526693246美元的海军蓝豆子,晒干。
每天的总费用为0.10866227820675685美元。
全年总费用为39.66173154546625美元。
这是不起作用的代码:

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:没有匹配点的方法(::NamedArray.NamedArray{Any,1,Array{Any,1},Tuple{DataStructures.orderedict{Any,Int64}}},::JuMP.JuMPArray{JuMP.Variable,1,Tuple{Int64})
最接近的候选人是:
点(::AbstractArray{T,1},::AbstractArray{T,1})位于linalg/generic.jl:302

dot{T,S,N}(::Array{T,N},::JuMP.JuMPArray{S,N,NT错误消息表示尝试调用
dot()
函数与函数被告知的期望值不符。这可能是因为输入计数错误,或者输入类型与期望值不符。由于代码在顶层是相同的,我们可以假设是后一种解释,可能是类型有问题


首先检查错误输出以确定是哪个点函数调用引起的(您似乎有两个),然后在调用之前插入一行,以输出有关将要使用的输入的信息。您可以使用
typeof()
函数。然后将发送的内容与
dot()进行比较
确实需要。

在同一个模型中不能有两个
@variable
方法调用,因为它们每次都会定义不同的变量。因此,
m1
中的整个
for…end
循环必须替换为

@variable(m1, x[1:77] >= 0)
@constraint(m1, x[a] == 0)
@constraint(m1, x[b] == 0)
(我想
a
b
已在其他地方定义)