JuMP 环境中的逐元素乘法
Element-wise multiplication in JuMP environment
我正在尝试在 JuMP 环境中实施以下约束:
@constraint(m, ((c*x) + (p*o)) + (r.*z) - d .== g')
不幸的是,我得到以下错误ERROR: MethodError: no method matching append
但是单独尝试逐元素乘法不会 return 任何错误并将其正确地实现到模型中。
这是我正在使用的最小示例。
m = Model(solver = GLPKSolverLP());
np = 3; #number of products
c = [3 7 5;
6 5 7;
3 6 5;
-28 -40 -32];
g = [200 200 200 -1500];
n = length(g);
o = [1 1 1]';
@variable(m, x[1:np] >= 0);
@variable(m, d[1:n] >= 0);
@variable(m, z[1:n] >= 0);
@variable(m, r[1:n] >= 0);
@variable(m, p[1:n,1:np] >= 0);
@objective(m, Min, sum(d));
@constraint(m, ((c*x) + (p*o)) + (r.*z) - d .== g')
当你将二次项添加到线性项时似乎有问题并且二次项在@constraint
宏中加法的右侧。
有两种解决方案:
一个。像这样先写二次项:
@constraint(m, (r.*z) + ((c*x) + (p*o)) - d .== g')
乙。在外部定义方程的 LHS(现在项的顺序无关紧要)
constr = ((c*x) + (p*o)) + (r.*z) - d
@constraint(m, constr .== g')
附带说明:你的问题是二次的,所以 GLPKSolverLP
不会解决它,因为它不允许这样的约束。
我正在尝试在 JuMP 环境中实施以下约束:
@constraint(m, ((c*x) + (p*o)) + (r.*z) - d .== g')
不幸的是,我得到以下错误ERROR: MethodError: no method matching append
但是单独尝试逐元素乘法不会 return 任何错误并将其正确地实现到模型中。
这是我正在使用的最小示例。
m = Model(solver = GLPKSolverLP());
np = 3; #number of products
c = [3 7 5;
6 5 7;
3 6 5;
-28 -40 -32];
g = [200 200 200 -1500];
n = length(g);
o = [1 1 1]';
@variable(m, x[1:np] >= 0);
@variable(m, d[1:n] >= 0);
@variable(m, z[1:n] >= 0);
@variable(m, r[1:n] >= 0);
@variable(m, p[1:n,1:np] >= 0);
@objective(m, Min, sum(d));
@constraint(m, ((c*x) + (p*o)) + (r.*z) - d .== g')
当你将二次项添加到线性项时似乎有问题并且二次项在@constraint
宏中加法的右侧。
有两种解决方案:
一个。像这样先写二次项:
@constraint(m, (r.*z) + ((c*x) + (p*o)) - d .== g')
乙。在外部定义方程的 LHS(现在项的顺序无关紧要)
constr = ((c*x) + (p*o)) + (r.*z) - d
@constraint(m, constr .== g')
附带说明:你的问题是二次的,所以 GLPKSolverLP
不会解决它,因为它不允许这样的约束。