主要内容

比较的速度coneprog算法

这个例子显示了时间的解决方案coneprog各种尺寸和所有算法的问题LinearSolver选择。问题是找到一个指向一个椭球的距离点的地方n维度和椭球由锥约束约束矩阵的行。选择(n, m) =我*(100年,20)从1到10。的define_problem辅助函数在这个例子创建指定值的问题,n和随机数生成器的种子。10个条目的函数创建伪随机锥1在每个矩阵的行和至少两个条目在每一列,并确保第一个矩阵的列(致密)1的列。

准备问题数据

设置参数生成函数的问题。

n = 100;m = 20;种子= 0;

设置实验运行十大小问题。

numExper = 10;

创建的完整列表LinearSolver选项值。

linearSolvers = {“汽车”,“增强”,“正常”,“舒尔”,“prodchol”};

对于这些数据,“汽车”设置的原因coneprog使用“prodchol”线性规划求解,所以你获得这两个值基本相同的结果。

创建结构来保存生成的数据和时间每次运行的迭代次数。

时间=结构();s =”“;时间。numExper probsize = repmat(年代,1);%初始化时间结构零。solver_i = linearSolvers时间。(solver_i {1}) = 0 (numExper, 1);结束iter =结构();iter。numExper probsize = repmat(年代,1);solver_i = linearSolvers iter (solver_i {1}) = 0 (numExper, 1);结束

热身解算器

获得有意义的时间比较,运行解决(电话coneprog)几次没有计时结果。这种“热身”准备解决有效地使用数据,并预填充内部即时编译器。

[概率,x0] = define_problem (m, n,种子);选择= optimoptions (“coneprog”,“显示”,“关闭”);i = 1: 4溶胶=解决(x0,概率“选项”、选择);结束

解算器运行

上运行解决所有的问题在记录解决方案时间和迭代解算器需要的数量。

我= 1:numExper%增加大小的生成问题。[概率,x0] = define_problem (m *我,n *我,种子);time.probsize (i) = num2str (m *我)+“x”+ num2str (n *我);iter.probsize (i) = num2str (m *我)+“x”+ num2str (n *我);%为每个算法解决产生的问题和测量时间。solver_i = linearSolvers选项。LinearSolver = solver_i {1};抽搐(~、~、~、输出)=解决(x0,概率“选项”、选择);时间。(solver_i {1}) (i) = toc;iter (solver_i {1}) (i) = output.iterations;结束结束

显示结果

显示计时结果。的probsize列显示大小的问题“m x n”,在那里锥约束和数量吗n是变量的数量。

时间表= struct2table(时间)
时间表=10×6表probsize汽车增强正常舒尔prodchol __________ ________ ________ ____说“20 x100”“40 x200型”0.028701 0.020335 0.042185 0.022258 0.018266 0.019167 0.21417 0.063392 0.01956 0.030663“60×”0.026849 0.38047 0.11627 0.02042 0.027778 80 x400“0.032513 0.65735 0.23975 0.023377 0.034159 0.040358 1.2081 0.42095 0.026024 0.038788“100 x500”“120 x600”0.089219 2.8035 0.92355 0.033922 0.0909“140”x700 0.098881 7.4664 2.1049 0.046021 0.10043 0.11053 8.7302 2.908 0.054712 0.11306“160 x800”“180 x900分辨率下玩”0.11439 10.485 3.5668 0.056406 0.11708 0.099195 6.7833 3.6698 0.053792 0.097791“200 x1000”

最短的时间出现在汽车,舒尔,prodchol列。的汽车prodchol算法是相同的问题,所以任何时间的差异是由于随机效应。出现在最长的倍增强列,而正常的列时间中间。

计时结果的差异是由于不同的速度为每个迭代或由于迭代次数为每个解算器吗?显示相应的迭代计算表。

itertable = struct2table (iter)
itertable =10×6表probsize汽车增强正常舒尔prodchol __________ ___ _____ _____ _____ ________”20 x100”8 8 8 8 8“40 x200型”11 11 11 11 11“60×”8 8 8 8 8 8 8 8 8 8“80 x400”“100 x500”8 8 8 8 8“120 x600”19日11 11 11 19“140”x700 17 18 17 15 17“160 x800”16 16 16“180 x900分辨率下玩”14十四14 13 14“200 x1000”10 10 10 10 10

对于这个问题,没有明确的迭代次数相关问题的大小,这是一个典型的使用的内点算法的特征coneprog。迭代的数量几乎是相同的所有算法的每一行。的舒尔prodchol迭代速度这个问题比其他算法。

Helper函数

下面的代码创建define_problemhelper函数。

函数[概率,x0] = define_problem (m, n,种子)% % %生成下面的优化问题% % %% % %分钟t% % %酸处理% % % | | Ax - b | | < =γ% % % | | x - xbar | | < = t% % %% % %,找到最接近的一个给定的椭球(| | Ax-b | | < =γ)% % % xbar给定的输入点。% % %rng(种子);%的目标矩阵非零的总数在每一行% 10 0% + 2在每一列非零% +一个密集的第一列。numNonZeros = 10 * m + 2 * n + m;一个= spalloc (m, n, numNonZeros);%为每一行生成10 0。i = 1: m p = randperm (n, 10);(我,p) = 1;结束%为每一列生成2 0。j = 2: n p = randperm (m, 2);(p, j) = 1;结束%的第一列是稠密的。(:1)= 1;b = 1 (m, 1);γ= 10;%找到椭球外的一个点。xbar =兰迪([10]-10年,n, 1);规范(A * xbar - b) < =伽马xbar = xbar +兰迪([10]-10年,n, 1);结束%定义锥的问题。概率= optimproblem (“描述”,“距离最小化椭球”);x = optimvar (“x”n);t = optimvar (“t”);概率。目标= t;prob.Constraints。soc1 =规范(x - xbar) < = t;prob.Constraints。soc2 =规范(A * x - b) < =伽马;x0。x =稀疏(n, 1);x0。t = 0;结束

另请参阅

相关的话题