繁体   English   中英

在 MATLAB 中搜索 max-min

[英]Searching for max-min in MATLAB

我正在编写一个 matlab 代码,用于计算最大最小值。 我正在使用matlab的“fminimax”来解决以下问题:

 ki=G(i,:);
 ki(i)=0;
 fs(i)=-((G(i,i)*pt(i)+sum(ki.*pt)+C1)-(C2*(sum(ki.*pt)+C1)));

G:是系统矩阵。 pt:是优化变量。

当使用实际系统矩阵时,“fminimax”在一次迭代后停止并返回“pt”的初始值,无论“pt”的初始值是什么,即找不到解。 (初始值在文档中定义为 X0)。 系统有如下参数:G的顺序为e-11,pt的顺序为e-1,c1的顺序为e-14。
当我尝试随机生成的测试矩阵和不同的参数时,“fminimax”找到了问题的解决方案,并且一切正常。 g按e-2的顺序,pt按e-2的顺序,c1按e-7的顺序。
我尝试缩放实际系统:“fminimax”持续了不止一次迭代,但是,它仍然返回pt的初始值,即找不到解决方案。
我尝试使用“选项”[StepTolerance、OptimalityTolerance、ConstraintTolerance 和 functiontolerance] 更改“fminmax”的容差。 根本没有影响。 仍然没有解决方案。

我认为问题可能是“fminimax”的精度没有那么高,或者不适合解决问题。 我认为它也很慢。
我下载了 CPLX,我想使用我在书中找到的方法将 max-min 问题转换为线性规划。 但是,当我在一个简单的 minimax 上尝试我的代码时,它没有给出相同的解决方案。

我想过使用 CVX 为例,但问题不是凸的。

可能是什么问题?
PS 系统矩阵 G 有不同的实现,我尝试了其中的一些。 然而,“fminimax”对所有这些都以相同的方式响应,即它无法找到合适的解决方案。

我不相信优化求解器坏了。 如果问题是非凸的,则可以有多个局部极小值。 鉴于您提供的信息,我们无法知道您是否从初始条件开始。

您需要开始的第一个地方是从优化退出条件中获取更多信息......它是否因为达到迭代限制而完成? (我希望不是,因为它没有进行很多迭代)...它是否因为达到了容差而完成(例如,函数的变化没有超过 xxxx)? 或者它可能找不到可行的解决方案? (我不知道您是否有任何需要满足的限制)。

很有可能,我猜你是在没有意识到的情况下从本地最小化开始的。 因此,您需要通过查看在初始猜测中评估的函数的雅可比来确定您是否确实处于局部极小值。 要么通过分析计算它,要么使用有限步逼近法......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM