Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Julia-在跳转中使用跳转三角矩阵变量会导致糟糕的类型性能_Performance_Variables_Julia_Sparse Matrix_Julia Jump - Fatal编程技术网

Performance Julia-在跳转中使用跳转三角矩阵变量会导致糟糕的类型性能

Performance Julia-在跳转中使用跳转三角矩阵变量会导致糟糕的类型性能,performance,variables,julia,sparse-matrix,julia-jump,Performance,Variables,Julia,Sparse Matrix,Julia Jump,在下一个MWE上,@code_warntype返回错误的性能类型1469::JuMP.Containers.SparseAxisArray 而j从1到n而不是i+1到n的修改版本对于@codewarn_类型来说是非常好的 然而,我不能允许我的模型有将近两倍多的变量和超过一半的未使用变量。我用更大的实例运行这两个代码,性能很快就会下降。这是否意味着我应该忽略@code\u warntype告诉我的内容?如果是这样的话,这不是我第一次不得不忽略它,我发现如何理解@codewarn_类型的返回何时是有

在下一个MWE上,@code_warntype返回错误的性能类型1469::JuMP.Containers.SparseAxisArray

而j从1到n而不是i+1到n的修改版本对于@codewarn_类型来说是非常好的


然而,我不能允许我的模型有将近两倍多的变量和超过一半的未使用变量。我用更大的实例运行这两个代码,性能很快就会下降。这是否意味着我应该忽略@code\u warntype告诉我的内容?如果是这样的话,这不是我第一次不得不忽略它,我发现如何理解@codewarn_类型的返回何时是有意义的尤其不清楚。也许我应该问一个关于这个宏的更一般的问题,如何阅读和理解它?

嗯。我想我们已经解决了这个问题。注意,x是一个具体的类型,所以这只是Julia推理的失败。这也意味着,当x被传递给另一个函数(例如,add_constraint)时,它将是快速的

编辑:打开要讨论的问题:

以下是MWE:

using JuMP
function MWE(n)
    model = Model()
    @variable(model, x[i=1:n, j=i+1:n])
end
@code_warntype MWE(5)

要问的问题是:时差是否重要?如果只是稍微快一点,我会选择可读性更高的版本。

我会选择两倍多的变量,并给出将其值指定为0的约束。当解算器运行时,它将自动神奇地从模型中删除这些变量,这样优化时间就不会受到影响。@PrzemyslawSzufel,谢谢!这确实更快:但我很惊讶,人们应该这样编码,添加无用的变量,强制为零:你可以添加一个答案,如果这是最好的方式,我会选择它
function MWE_codewarntype_safe(n)
       m = Model(Gurobi.Optimizer)
       @variable(m, x[i=1:n, j=1:n], Bin)
       @variable(m, y[i=1:n], Bin)
end
@codewarn_type MWE(5)
using JuMP
function MWE(n)
    model = Model()
    @variable(model, x[i=1:n, j=i+1:n])
end
@code_warntype MWE(5)