Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
MATLAB:一种特殊线性规划的快速高效求解方法_Matlab_Mathematical Optimization_Linear Programming - Fatal编程技术网

MATLAB:一种特殊线性规划的快速高效求解方法

MATLAB:一种特殊线性规划的快速高效求解方法,matlab,mathematical-optimization,linear-programming,Matlab,Mathematical Optimization,Linear Programming,我有一点编程经验,所以我很确定我没有以最佳方式编写问题代码,所以我很乐意听到任何提示 我有两个参数:问题的维度n和约束矩阵nxn其中n=2n。在我的例子中,B是对称的,只有正值。我需要解决以下问题 也就是说,我需要根据B(I,j)给出的成对距离约束,最大化某个平均距离 我现在的做法是实现linprog(-f,A,b)where f = ones([1,n])/n; f = [f -f] 及 而A的定义如下 A = zeros([N^2,N]); for i = 1:N for j =

我有一点编程经验,所以我很确定我没有以最佳方式编写问题代码,所以我很乐意听到任何提示

我有两个参数:问题的维度
n
和约束矩阵
nxn
其中
n=2n
。在我的例子中,
B
是对称的,只有正值。我需要解决以下问题

也就是说,我需要根据
B(I,j)
给出的成对距离约束,最大化某个平均距离

我现在的做法是实现
linprog(-f,A,b)
where

f = ones([1,n])/n;
f = [f -f]

A
的定义如下

 A = zeros([N^2,N]);
 for i = 1:N
  for j = 1:N
    if i ~= j
      A((i-1)*N + j,i)   =  1;
      A((i-1)*N + j,j)   = -1;
   end
 end
end

然而,当
n=500
时,即使是
a
的简单构造也需要相当长的时间,更不用说线性规划的解需要多长时间。非常感谢您提供的任何提示,请随时重新标记。

首先,请尝试构建
A
,如下所示:

AI = eye(N);
AV = ones(N, 1);
A = kron(AI, AV) - kron(AV, AI);

我认为它的运行速度应该至少比您创建它的方式快一个数量级。

除了以更有效的方式创建问题矩阵外,您可能还需要考虑使用MATLAB接口。我发现我的解决时间可以大大减少。根据问题的大小,您可能会看到另一个数量级的减少


如果您是一名学者,您可以免费获得CPLEX或Gurobi许可证,这将进一步缩短求解时间,而无需大量修改解算器参数。这对于您描述的大小的问题可能是必要的。

看起来您的解决方案的维度是2n。@Jacob:您是对的,修复了,谢谢您的建议,但令人惊讶的是,它比我的帖子中的
a
的原始定义运行得慢。例如,当
n=200
因此
n=400
时,原始代码在0.1秒内构造
A
,而您建议的代码在2秒内运行。如果您感兴趣,我可以提供m文件
AI = eye(N);
AV = ones(N, 1);
A = kron(AI, AV) - kron(AV, AI);