matlab运行所有linprog算法(是否有matlab算法列表?)

matlab运行所有linprog算法(是否有matlab算法列表?),matlab,optimization,linear-programming,Matlab,Optimization,Linear Programming,Matlab提供了求解线性规划的多种算法。 例如,MatlabR2012B提供:“活动集”、“信赖域反射”、“内点”、“内点凸”、“levenberg-marquardt”、“信赖域狗腿”、“lm线搜索”或“sqp” 但是其他版本的Matlab支持不同的算法 我想在用户Matlab版本支持的所有算法上运行一个循环。我希望它们的顺序与Matlab的推荐顺序相同 我想实现如下内容: i=1; x=[]; while (isempty(x)) options=optimset(options,

Matlab提供了求解线性规划的多种算法。 例如,MatlabR2012B提供:“活动集”、“信赖域反射”、“内点”、“内点凸”、“levenberg-marquardt”、“信赖域狗腿”、“lm线搜索”或“sqp”

但是其他版本的Matlab支持不同的算法

我想在用户Matlab版本支持的所有算法上运行一个循环。我希望它们的顺序与Matlab的推荐顺序相同

我想实现如下内容:

i=1;
x=[];
while (isempty(x))
    options=optimset(options,'Algorithm',Here_I_need_a_list_of_Algorithms(i))
    x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options);
end
r2012balgos = {'active-set', 'trust-region-reflective', 'interior-point', 'interior-point-convex', 'levenberg-marquardt', 'trust-region-dogleg', 'lm-line-search', 'sqp'};

...

r2017aalgos = {...};

v = ver('matlab');

switch v.Release
    case '(R2012b)'
        algos = r2012balgos;
    ....
    case '(R2017a)'
        algos = r2017aalgos;
end

% loop through each of the algorithms
在99%的情况下,此代码应等同于

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options);
但有时由于数值问题,该算法返回空数组(exitflag-4)。如果有机会,其他算法之一可以找到一个解决方案,我想尝试他们也

所以我的问题是: 是否有可能自动获得安装的Matlab版本支持的所有linprog算法的列表,如Matlab推荐的那样

我认为在其他情况下,循环使用所有算法也是有意义的。例如,当您需要非常精确的数据并且有很多时间时,您可以全部运行这些数据,然后评估哪一个可以提供最佳结果。
或者,如果你想找到哪种算法对具有特定结构的LPs来说是最好的,那么你想循环所有算法

据我所知,没有自动的方法可以做到这一点。如果您真的想这样做,最简单的方法是转到联机文档,检查以前的版本(联机文档适用于旧版本,而不仅仅是最新版本),并构造一些如下变量:

i=1;
x=[];
while (isempty(x))
    options=optimset(options,'Algorithm',Here_I_need_a_list_of_Algorithms(i))
    x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options);
end
r2012balgos = {'active-set', 'trust-region-reflective', 'interior-point', 'interior-point-convex', 'levenberg-marquardt', 'trust-region-dogleg', 'lm-line-search', 'sqp'};

...

r2017aalgos = {...};

v = ver('matlab');

switch v.Release
    case '(R2012b)'
        algos = r2012balgos;
    ....
    case '(R2017a)'
        algos = r2017aalgos;
end

% loop through each of the algorithms
看起来很无聊,但应该只需要30分钟

不过,有一个原因是MathWorks没有像你希望的那样简单,因为你所要求的并不是一个好主意

在一种算法找到解决方案而其他算法没有找到解决方案的情况下,构建人工问题是可能的。但在实践中,通常如果推荐的算法没有找到一个解决方案,这并不意味着你应该切换算法,它表明你的问题没有很好地制定,你应该考虑修改它,也许通过修改一些约束,或重新制定目标函数。 毕竟,为什么要停止循环使用替代算法呢?为什么不循环使用许多其他选项的值,例如约束公差、优化公差、最大功能评估次数等。?这些可能和选择算法一样有可能影响事情。很快你就会运行一个优化算法来搜索你原始优化的元参数空间


这不是一个很好的计划-最好只选择一个推荐的算法,坚持下去,如果事情没有解决,那么就专注于改进问题的公式,而不是过度调整优化本身。

我对matlab不太熟悉,但a只为我显示了对偶单纯形和两个内点算法,这是我所期望的(你真的在谈论LPs吗?)。当然,大多数非线性方法也可以解决LPs,但我不建议这样做。我不知道这些实现有多好,但LPs不应该太麻烦(除了非常不稳定的公式)。我会尝试双单纯形和内点ALG,而忽略其他一切!(这也简化了关于准确性的推理)@sascha不幸的是,我的旧MatlabR2012B中没有实现对偶单纯形。但是您是对的,在当前的MatlabR2017A中,双单纯形是默认的。你是对的,仅适用于LPs•大尺度内点•中尺度活动集•中尺度单纯形是有用的选择,因为我原始问题中提到的一些算法不是LP-Solver。在我的算法中,LPs的公式化方式在理论上必须有解。但在不到1%的情况下,我得到一个exitflag-4:Exiting:无法收敛,因为原始残差、对偶残差或上界可行性为NaN。(当然,我检查了解算器输入中没有NAN。)我在互联网上找到的关于exitflag-4的唯一一件事是它似乎是matlab解算器的一个bug。exitflag-4可以通过改变参数来避免吗?如果你有exit flag-4,这意味着你在优化过程中得到了NaN,并且它不能继续。当然,这可能是一个bug,但这不太可能,而且你提到的链接中没有任何东西表明这一点。更有可能的是,您已经以某种方式制定了问题,使得NaN在某些点上是正确的。也许改变参数意味着这些点被避免了。或者,您可以重新设置问题,使NAN不会出现。为了帮助诊断问题,为什么不尝试将
显示
选项设置为
iter detailed
,以便您可以准确地看到每次迭代中发生的情况。我猜你会发现NaN是正确的,这将帮助你重新组织事情,使它们不会继续发生。