JuMP环境中的逐元素乘法

时间:2018-08-15 08:45:38

标签: julia julia-jump

我正在尝试在JuMP环境中实现以下约束:

@constraint(m, ((c*x) + (p*o)) + (r.*z) - d .== g')

不幸的是,我收到以下错误ERROR: MethodError: no method matching append

但是,仅尝试按元素进行乘法运算不会返回任何错误并将错误正确地实现到模型中。

这是您正在与我合作的最小示例。

 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')

1 个答案:

答案 0 :(得分:2)

当在线性项上添加二次项并且二次项位于SQL> $sqlldr scott/tiger control=test01.ctl log=test01.log SQL*Loader: Release 11.2.0.2.0 - Production on Sri Kol 15 21:08:59 2018 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Commit point reached - logical record count 2 Commit point reached - logical record count 3 SQL> select * From test; ID ATTRB01 ---------- -------------------- 1 Alloc 2 Alloc 3 Alloc 宏内加法的右侧时,似乎存在问题。

有两种解决方案:

A。像这样先写二次项:

@constraint

B。在外部定义方程的LHS(现在术语的顺序不再重要)

@constraint(m, (r.*z) + ((c*x) + (p*o)) - d .== g')

请注意:您的问题是二次方的,因此constr = ((c*x) + (p*o)) + (r.*z) - d @constraint(m, constr .== g') 将无法解决,因为它不允许此类约束。