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')
解决方案
@constraint
当您将二次项添加到线性项并且二次项位于宏内部加法的右侧时,似乎存在问题。
有两种解决方案:
A. 将二次项首先写成这样:
@constraint(m, (r.*z) + ((c*x) + (p*o)) - d .== g')
B.在外面定义方程的LHS(现在术语的顺序无关紧要)
constr = ((c*x) + (p*o)) + (r.*z) - d
@constraint(m, constr .== g')
作为旁注:你的问题是二次的,所以GLPKSolverLP
不会解决它,因为它不允许这样的约束。
推荐阅读
- laravel - Laravel 验证如果两个字段都为空则错误。但如果一个为空,则需要另一个
- python - 如何像普通的python文件一样运行gimp?
- c# - 在 ASP.NET MVC 中通过 JQuery AJAX 上传文件
- node.js - csv-parser 无法读取或打开此类 .csv 文件
- angular - 如何在我的角度应用程序中更改动画进度条的颜色
- c# - 超时时间为 0 的 ManualResetEvent.WaitOne() 返回意外错误,尽管已设置事件
- typescript - 获取对象中的属性,但显示未定义
- sas - 我想将 sas 代码转换为 R。通常是 intnx 函数
- java - 如何将 http 入口点设置到我的 java 应用程序
- python - 有没有办法在经过一段时间后禁用更新 (UpdateView) 和删除 (DeleteView) 功能?