4

编辑:我已经将我的问题编辑得更具体,因为 horchler 的评论帮助我开始了。

我在 excel 中有数据,用于进行优化分析。在 excel 中,使用求解器很容易:我可以选择一个带有公式的单元格,然后选择我需要更改的单元格并添加约束,然后最小化。但是,当谈到 Matlab 的优化过程时,我迷失了。该文档似乎仅提供了分析简单的单行函数(如 f(x) = -(x1)(x2)(x3))的优化问题示例。我无法弄清楚如何在我自己的案例中应用这些示例。

我试图最大化的功能相对复杂。作为输入,它采用许多标量变量以及包含计算中使用的数据的多个结构。

我的问题是我试图通过改变三个标量变量来最大化函数的值,同时保持其他输入变量不变(因为它们是数据)。更具体地说,我的函数看起来像:

function x = NameOfFunction (w1, w2, w3, a, b, c, Structure1, Structure2, Structure3)

我想通过仅更改变量 w1、w2 和 w3 来最大化 x。换句话说,我想让 Matlab 告诉我使 x 最大化的 w1、w2 和 w3 的值,同时保留所有其他变量。非常感谢任何见解。

4

1 回答 1

5

没有约束

您可能最终会使用MATLABfminconfminunc在 MATLAB 中找到解决方案。例如,fminunc由于它的语法不那么杂乱,因此可以先在名为“NameOfFunction.m”的单独文件中定义成本函数:

function cost = NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3)
% Your code goes here, just remember that you return a scalar-valued cost from
% this function.

请注意,fminunc类似将尝试最小化此成本函数。如果您需要最大化它,那么只需将最终成本乘以最后-1。接下来,在主文件中创建函数句柄:

h = @(w)NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3);

w您要优化的变量向量在哪里:

w = [w1, w2, w3];

w就您而言,这基本上将您的函数及其所有输入掩盖为您想要优化的函数fminunc。这允许您将参数abcStructureStructure2Structure3传递给您的成本函数,NameOfFunction而无需fminunc触摸它们。您现在可以调用fminunc您的句柄,并对您的向量进行初步猜测w

w0 = [w1_init, w2_init, w3_init];
[w, fval] = fminunc(h, w0);

并且应该找到最小化(注意,它寻找最小值)您的成本函数的向量fminunc的最佳值。w

有约束

在这种情况下,您fmincon最有可能使用。如果您的约束以您正在优化的每个参数的上限和下限的形式出现,则将它们放入向量中:

ub = [w1_upper, w2_upper, w3_upper];
lb = [w1_lower, w2_lower, w3_lower];

并调用与使用之前相同的句柄fmincon

[w, fval] = fmincon(h, w0, [], [], [], [], lb, ub);

上面的四个[]s 只是你不使用的参数的占位符。fmincon也可以处理更复杂的约束;查看文档(在本讨论开始时链接)以获取更多详细信息。

于 2013-07-02T02:01:30.820 回答