如何在 Julia/JuMP v 1.10 中求和
How to sum for all in Julia/JuMP v 1.10
我在以下帖子中看到过时的答案 ()
不幸的是,它已经 3 岁了,但这正是我想要的。然而,由于 sum() 函数在过去几年发生了变化,因此代码由于一些语法错误而失败。
对于我的代码,我发现 sum() 函数仅适用于一个索引变量 i,但如果我包含另一个变量 j,该函数将停止工作。如果有什么不同的话,我也在使用 jupyter notebook。有什么想法吗?
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)
对于这个代码示例,我收到了一个 "key not found" 错误
将变量定义更改为 one-dimensional,如下所示:
@variable(ZS, x[1:2])
@variable(ZS, y[1:2])
一切都应该按预期工作。
或者保留 x
和 y
二维并重新定义您的 objective 和约束,如下所示:
@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)
作为旁注,您可以像这样更简单地定义 P
:
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)
虽然运行时间很长...
我在以下帖子中看到过时的答案 (
对于我的代码,我发现 sum() 函数仅适用于一个索引变量 i,但如果我包含另一个变量 j,该函数将停止工作。如果有什么不同的话,我也在使用 jupyter notebook。有什么想法吗?
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)
对于这个代码示例,我收到了一个 "key not found" 错误
将变量定义更改为 one-dimensional,如下所示:
@variable(ZS, x[1:2])
@variable(ZS, y[1:2])
一切都应该按预期工作。
或者保留 x
和 y
二维并重新定义您的 objective 和约束,如下所示:
@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)
作为旁注,您可以像这样更简单地定义 P
:
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)
虽然运行时间很长...