Matlab fmincon不产生全局最大值/最小值

时间:2014-09-10 20:28:11

标签: matlab optimization matrix mathematical-optimization minimization

我是matlab的新手,如果问题很愚蠢,请道歉。我正在使用fmincon函数来导出m x n矩阵(X)的元素,这些元素将最大化以下目标函数,并受到非负性约束,并且:

sum(x_{ij}) < 100

{f(x(1,1))+(f(x(1,2))+...+f(x(1,n))} + Beta*{f(x(2,1))+(f(x(2,2))+...+f(x(2,n))}+...+(Beta^(m-1))*{f(x(m,1))+(f(x(m,2))+...+f(x(m,n))}

,其中

f(xij)=zeta*[((alpha*pf*(xij^delta))-(pw*xij))^gamma]

在我以前的代码中使用了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 

但这不是一个全球性的最小值 - 因为边际条件指定的是全局最小值(第一行):

f'(x11)=...=f'(x1n)

每一行等等。我们也会为每一栏提供:

f'(x11)=beta*f'(x21)=...=(beta^m-1)*f'(xm1)

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

我可以将边际条件作为停止条件,我该怎样才能做到这一点。或者我可以用某种方式使用雅可比行列式吗?任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

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

关于你的终止条件。您可以将选项结构传递给fmincon,它具有控制fmincon操作的参数。您可以选择其他算法以最适合您的问题。我会阅读这个选项结构的文档,看看是否有任何符合你想要做的事情。

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