Julia/JuMP v 1.10中如何求和

Julia/JuMP v 1.10中如何求和,julia,julia-jump,Julia,Julia Jump,我在下面的帖子中看到了一个过时的答案() 不幸的是,它已经3岁了,但这正是我想要的。但是,由于sum()函数在过去几年中发生了更改,因此代码由于一些语法错误而失败 对于我的代码,我发现sum()函数只对一个索引变量I起作用,但如果我包含另一个变量j,该函数将停止工作。如果有什么不同的话,我也在用jupyter笔记本。有什么想法吗 Using JuMP ZS = Model(with_optimizer(Gurobi.Optimizer)) P = [[10 -20]; [30 -40]

我在下面的帖子中看到了一个过时的答案() 不幸的是,它已经3岁了,但这正是我想要的。但是,由于sum()函数在过去几年中发生了更改,因此代码由于一些语法错误而失败

对于我的代码,我发现sum()函数只对一个索引变量I起作用,但如果我包含另一个变量j,该函数将停止工作。如果有什么不同的话,我也在用jupyter笔记本。有什么想法吗

Using JuMP
ZS = Model(with_optimizer(Gurobi.Optimizer))

P = [[10 -20];
    [30 -40]]

@variable(ZS, x[1,1:2])
@variable(ZS, y[1:2,1])


@objective(ZS, Max, sum(x[i]*P[i,j]*y[j] for i=1:2 for j=1:2)) 


@constraint(ZS, con1, x[1] + x[2] <= 1)
@constraint(ZS, con2, y[1] + y[2] <= 1)

optimize!(ZS)
使用跳转
ZS=模型(带有_优化器(Gurobi.optimizer))
P=[[10-20];
[30 -40]]
@变量(ZS,x[1,1:2])
@变量(ZS,y[1:2,1])
@目标(ZS,Max,sum(x[i]*P[i,j]*y[j]表示i=1:2表示j=1:2))

@约束(ZS,con1,x[1]+x[2]将变量的定义更改为一维,如下所示:

@variable(ZS, x[1:2])
@variable(ZS, y[1:2])
@objective(ZS, Max, sum(x[1,i]*P[i,j]*y[j,1] for i=1:2 for j=1:2)) 

@constraint(ZS, con1, x[1,1] + x[1,2] <= 1)
@constraint(ZS, con2, y[1,1] + y[2,1] <= 1)
julia> P = [10 -20
            30 -40]
2×2 Array{Int64,2}:
 10  -20
 30  -40
所有这些都应该像预期的那样起作用

或者将
x
y
保留为二维,并像这样重新定义您的目标和约束:

@variable(ZS, x[1:2])
@variable(ZS, y[1:2])
@objective(ZS, Max, sum(x[1,i]*P[i,j]*y[j,1] for i=1:2 for j=1:2)) 

@constraint(ZS, con1, x[1,1] + x[1,2] <= 1)
@constraint(ZS, con2, y[1,1] + y[2,1] <= 1)
julia> P = [10 -20
            30 -40]
2×2 Array{Int64,2}:
 10  -20
 30  -40

似乎需要更新for循环语法,并将解算器设置为非凸

我还建议对vars、exp等使用匿名标签,以便您可以根据需要更改它们

using JuMP
using Gurobi
ZS = Model(Gurobi.Optimizer)

set_optimizer_attribute(ZS, "NonConvex", 2)

P = [[10 -20];
    [30 -40]]

xs = @variable(ZS, x[1:2])
ys = @variable(ZS, y[1:2])


my_obj = @objective(ZS, Max, sum(x[i]*P[i,j]*y[j] for i in 1:2, j in 1:2)) 


con1 = @constraint(ZS,  x[1] + x[2] <= 1)
con2 = @constraint(ZS, , y[1] + y[2] <= 1)


optimize!(ZS)
使用跳转
使用古罗比
ZS=模型(Gurobi.Optimizer)
设置优化器属性(ZS,“非凸”,2)
P=[[10-20];
[30 -40]]
xs=@变量(ZS,x[1:2])
ys=@变量(ZS,y[1:2])
my_obj=@objective(ZS,Max,sum(x[i]*P[i,j]*y[j]代表1:2中的i,j代表1:2))

con1=@constraint(ZS,x[1]+x[2]谢谢,但是现在我有另一个错误,我认为这与我的目标函数没有正确实现有关,因为它有两个变量x和y。我现在收到这个错误:Gurobi.gurobier(10020,“目标Q不是PSD(需要7.0e+01的对角线调整)”)错误在于你的目标函数不是PSD(即半正定).Gurobi中的二次解算器支持PSD目标。如果目标不是PSD,则目标函数在可容许域中可能是非凸的,因此具有多个局部极小值。在这种情况下,如果要找到全局极小值,则需要使用一些全局优化例程。如果只需要局部极小值,则可以使用任何一般g辐射优化包。