[英]Matlab fmincon Not Yielding Global Maximum/Minimum
我是Matlab的新手,如果这个问题很傻,我深表歉意。 我正在使用fmincon
函数来导出a的元素 矩阵(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
但这不是全局最小值-正如边际条件在全局最小值中指定的那样(对于第一行):
以此类推。 同样,我们将为每一列:
对于第一列,依此类推。 这些条件都不满足所产生的矩阵。 我已经看过堆栈溢出中的相关问题以及文档,并且我对如何获得更好的结果一无所知。 代码有问题吗? 可以对代码进行调整以获得更好的结果吗?
我可以将边际条件作为停止条件吗?我该如何去做。 或可以以某种方式使用雅可比行列式吗? 任何帮助,将不胜感激。 谢谢。
没有任何优化技术可以保证返回全局最小值。 如果Hessian是正定的,则可以保证某些算法找到局部最小值,但是,如果局部最小值是全局最小值,则没有数学方法只能从函数值及其n阶导数中确定。
现在,您的终止条件。 您可以将选项结构传递给fmincon,该结构具有控制fmincon操作的参数。 您可以选择其他算法以最适合您的问题。 我将阅读有关此选项结构的文档,然后查看是否有任何适合您尝试执行的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.