0

我想计算这里显示的函数 CROSS-IN-TRAY 的最大值:

托盘交叉公式

所以我在Matlab中做了这个功能:

function f = CrossInTray2(x)
%the CrossInTray2 objective function
%
f = 0.0001 *(( abs(sin(x(:,1)).* sin(x(:,2)).*exp(abs(100 - sqrt(x(:,1).^2 + x(:,2).^2)/3.14159 ))      )+1 ).^0.1);
end

我将整个公式乘以 (-1),所以函数是反转的,所以当我要寻找反转公式的最小值时,它实际上是原始公式的最大值。

然后,当我使用优化工具并选择 GA 算法并将下限和上限定义为 -3 和 3 时,它显示了大约 60 次迭代后的结果,大约为 0.13,最终点类似于 [0, 9.34]。最后一点怎么可能不在边界定义的范围内?这个函数的实际最大值是多少?

4

1 回答 1

1

最大值为 (0,0)(实际上,当一输入为 0 时,并且周期性地为 pi 的倍数)。否定后,您正在寻找一个正数的最小值。只看外部绝对值,它显然不能低于 0。当任何一个值为sin(x)0 时都会发生这种情况。插入,你有f_min = f(0,0) = .0001(0 + 1)^0.1 = 1e-4

这个表达式很容易评估和绘制二维网格。这样做直到你弄清楚你在看什么,以及大概的答案应该是什么,然后才调用一个实际的优化器。GA 听起来不太适合像这样相对平滑的表达式。您得到奇怪答案的原因是只有一个输入参数必须为 0。一旦优化器找到其中一个,另一个输入可以是任何东西。

于 2016-05-04T19:42:57.847 回答