【问题标题】:Matlab fmincon Not Yielding Global Maximum/MinimumMatlab fmincon 不产生全局最大值/最小值
【发布时间】:2014-09-10 20:28:10
【问题描述】:

我是 matlab 新手,如果问题很愚蠢,我深表歉意。我正在使用fmincon 函数推导出 矩阵(X)的元素,该矩阵将在非负约束下最大化以下目标函数,并且:

在哪里

在我曾经这样做的代码中使用了fmincon,因为目标函数是非线性的:

function optim = optim(m,n)
A= ones(1,m*n);
b = 100;
z = zeros(m,n);
in = inf(m,n);
X = ones(m,n);

[x, bestval] = fmincon(@myfun2,X,A,b,[],[],z,in,[])

  function f = myfun2(x)
  Alpha = 5;
  %kappa = 5;
  zeta = 5;
  beta = 0.90909;
  delta = 0.4;
  gamma = 0.4;
  pf = 1;
  pw = 1;

  for i= 1:m
     f=0;
     sum(i)=0;
        for j=1:n
        sum(i) = sum(i) +((beta^(i-1))*(-1)*(zeta)*(((Alpha*pf.*((x(i,j)).^delta))- 
                 (pw.*x(i,j)))^gamma));

         end
     f = f+sum(i)
   end

 end
end

当代码针对 5x5 矩阵 (optim(5,5)) 运行时,得到的解决方案是 x =

1.5439    1.5439    1.5439    1.5439    1.5439
1.5439    1.5439    1.5439    1.5439    1.5439
1.5439    1.5439    1.5439    1.5439    1.5439
1.5439    1.5439    1.5439    1.5439    1.5439
3.1748    3.1748    3.1748    3.1748    3.1748


bestval =

-31.8780 

但这不是全局最小值 - 正如边际条件指定的全局最小值(对于第一行):

每行以此类推。我们也会为每一列:

对于第一列,依此类推。结果矩阵不满足这些条件。我已经查看了堆栈溢出中的相关问题以及文档,但我不知道如何获得更好的结果。代码有问题吗?可以调整代码以获得更好的结果吗?

我可以将边际条件设为停止条件吗?我该如何去做。或者我可以以某种方式使用雅可比吗?任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 如果你有一个非凸最小化问题,那么你不能保证像fmincon 这样的基于梯度的求解器会返回全局最优解。相反,您可能会获得局部最优解。

标签: matlab optimization matrix mathematical-optimization minimization


【解决方案1】:

没有任何优化技术可以保证返回全局最小值。如果 Hessian 是正定的,则​​某些算法可以保证找到局部最小值,但是如果局部最小值是全局最小值,则没有数学方法可以仅从函数值及其 n 次导数中确定。

现在关于您的终止条件。您可以将选项结构传递给 fmincon,它具有控制 fmincon 操作的参数。您可以选择最适合您的问题的不同算法。我会阅读有关此选项结构的文档,看看是否有任何适合您尝试做的事情。

http://www.mathworks.com/help/optim/ug/optimoptions.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2014-12-15
    • 2011-04-09
    • 1970-01-01
    • 2017-01-04
    • 2017-02-12
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多