Matrix 跳跃目标函数中的矩阵向量积,其中矩阵为变量

Matrix 跳跃目标函数中的矩阵向量积,其中矩阵为变量,matrix,julia,multiplication,julia-jump,objective-function,Matrix,Julia,Multiplication,Julia Jump,Objective Function,我正在用Julia编写一个使用JuMP的优化程序。我的Julia版本是1.3.1,JuMP版本是0.21.2 我的一个变量是矩阵,在我的例子中,它是一个方便的结构 using JuMP using LinearAlgebra c1H = Vector(1:3) model = Model() @variable(model, GiH[1:10, 1:3] >= 0) test = rand(10,3) 在目标函数中,我将矩阵乘以一个(参数)向量,然后对结果项的项求和。我想这样写:

我正在用Julia编写一个使用JuMP的优化程序。我的Julia版本是1.3.1,JuMP版本是0.21.2

我的一个变量是矩阵,在我的例子中,它是一个方便的结构

using JuMP
using LinearAlgebra

c1H = Vector(1:3)

model = Model()
@variable(model, GiH[1:10, 1:3] >= 0)

test = rand(10,3)
在目标函数中,我将矩阵乘以一个(参数)向量,然后对结果项的项求和。我想这样写:

@objective(model, Min, sum(GiH*c1H))
这相当于

@objective(model, Min, ones(10)'*(GiH*c1H))
当我将变量矩阵替换为数字矩阵
test
时,这运行良好。 然而,我用变量矩阵GiH得到了误差

MethodError: no method matching similar(::Array{Float64,1}, ::Type{GenericAffExpr{Float64,VariableRef}}, ::Array{Int64,1})
Closest candidates are:
  similar(::Array{T,1}, ::Type) where T at array.jl:331
  similar(::Array, ::Type, !Matched::Tuple{Vararg{Int64,N}}) where N at array.jl:334
  similar(::AbstractArray, ::Type{T}) where T at abstractarray.jl:626
  ...
*(::JuMP.Containers.DenseAxisArray{VariableRef,2,Tuple{Array{Int64,1},Array{Int64,1}},Tuple{Dict{Int64,Int64},Dict{Int64,Int64}}}, ::Array{Float64,1}) at matmul.jl:51
top-level scope at rewrite.jl:227
top-level scope at macros.jl:762
发生了什么事?似乎跳跃变量矩阵没有定义矩阵乘法

我知道我可以用嵌套的
sum(…for…
来代替这个矩阵乘法,但是我想知道是否可以用不同的方法来实现

解决方案

@objective(model, Min, ones(10)'*(GiH*c1H))
对我有用。我使用的是juliav1.4和JuMP v0.21.2

解决方案

@objective(model, Min, ones(10)'*(GiH*c1H))
对我有用。我使用的是juliav1.4和JuMP v0.21.2