【发布时间】:2017-11-05 15:07:41
【问题描述】:
Matlab 提供了多种求解线性规划的算法。 例如 Matlab R2012b 提供:'active-set'、'trust-region-reflective'、'interior-point'、'interior-point-convex'、'levenberg-marquardt'、'trust-region-dogleg'、'lm -line-search' 或 'sqp'。
但其他版本的 Matlab 支持不同的算法。
我想在用户 Matlab-Version 支持的所有算法上运行一个循环。我希望它们像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
在 99% 的情况下,这段代码应该等价于
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options);
但有时由于数值问题(exitflag -4),算法会返回一个空数组。如果其他算法之一有可能找到解决方案,我也想尝试一下。
所以我的问题是: 是否有可能自动获取已安装的 Matlab 版本支持的所有 linprog 算法的列表,如 Matlab 推荐的那样。
我认为循环遍历所有算法在其他场景中也很有意义。例如,当您需要非常精确的数据并且有很多时间时,您可以将它们全部运行,然后评估哪个会给出最好的结果。 或者想遍历所有算法,如果想找出哪种算法最适合具有某种结构的 LP。
【问题讨论】:
-
我对 matlab 不是很熟悉,但是 quick check 对我来说只显示了对偶单纯形和两个内点算法,这是我所预料的(你真的在谈论 LP 吗?)。当然,大多数非线性方法也可以解决 LP,但我不建议这样做。我不知道这些实现有多好,但 LP 应该不会太麻烦(除了非常不稳定的配方)。我会尝试双单纯形和内点算法,而忽略其他一切! (这也简化了关于准确性的推理)
-
@sascha 不幸的是,我的旧 Matlab R2012b 中没有实现双单形。但你是对的,双单形是当前 Matlab R2017a 的默认设置。你是对的,仅适用于 LP •大规模内点 •中规模活动集 •中规模单纯形是有用的选项,因为我最初的问题中提到的一些算法不是 LP 求解器。跨度>
标签: matlab optimization linear-programming