在MATLAB中搜索max-min

时间:2017-01-16 10:09:17

标签: matlab optimization minimax

我正在写一个matlab代码,我计算max-min。 我正在使用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为例,但问题不是凸起的。

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

1 个答案:

答案 0 :(得分:0)

我不相信优化解算器已被破坏。如果问题是非凸的,那么可以有多个局部最小化器。鉴于您提供的信息,我们无法知道您是否在初始条件下开始。

首先需要启动的是从优化退出条件中获取更多信息...是否已完成,因为它达到了迭代限制? (我希望不要因为它没有进行多次迭代)...它是否因为容差被击中而完成(例如,函数的变化不超过xxxx)?或许它找不到可行的解决方案? (我不知道你是否有任何需要满足的限制)。

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