以系统方式为 fmincon 生成起点

计算科学 matlab 非线性规划 约束优化
2021-12-08 03:31:52

我正在尝试在 Matlab 中为我的优化问题生成起点。在这一点上,我并不担心可行性,而只是一种快速生成点的方法,我可以从中测试 fmincon 中可用的不同算法的性能。虽然我不担心可行性,但我不想使用随机数生成器,而是更愿意使用如下更“系统化”的方法。

作为一个简单的例子,假设我有 2 个决策变量 x1 和 x2,我可以为这 2 个变量中的每一个提供最小/最大范围。

喜欢,

xlow=[2,9];% 2 represents the min possible value of decision variable x1 and 9 represent the minimum possible value of x2;
xhigh=[5,16];% 5 represents the max possible value of decision variable x1 and so on;

我可以使用的一个起点是

Random_Point1=(x1ow+xhigh)/2;% centre of the rectangle formed by max/min of decision variables;

使用上述起点运行优化算法后,假设我想生成更多起点。现在我可以根据中点 Random_Point1 和 4 个原始顶点生成 4 个额外的起点(另一种思考方式是将原始矩形分成 4 个大小相等的较小矩形并找到每个矩形的中心)

Random_Point21 = (Random_Point1 + [xlow(1),xlow(2)])/2;
Random_Point22 = (Random_Point1 + [xlow(1),xhigh(2)])/2;
Random_Point23 = (Random_Point1 + [xhigh(1),xlow(2))/2;
Random_Point24 = (Random_Point1 + [xhigh(1),xhigh(2)])/2;

现在我再次运行具有以上 4 个起点的 fmincon。

在查看结果后,我决定生成更多的起点。这次我可以使用之前生成的上面的起点生成16个起点。考虑这个问题的方法是将原始矩形沿着各自的轴分成 16 个相等的部分,并找到 16 个矩形中每一个的中心

我将继续生成起点并运行 fmincon 直到我的解决方案被认为是令人满意的(我有一些关于何时要停止优化过程的标准)

我的问题是,我应该使用什么方法以最有效的方式(快速)生成这些起点。无论我写什么(类似于上面的硬编码)都绝对不是正确的方法。我想我需要使用递归

笼统地说明问题:-

a)假设我有 k 个决策变量,并且对于每个决策变量,我都有最小/最大范围

b)我想从生成中点开始(简单),然后在第一次迭代中生成 2^k 点,在第二次迭代中生成 2^(2k) 点,在第三次迭代中生成 2^(3K) 点等等.

请注意,在我的应用程序中,决策变量的数量预计不会很大(可能是 3 个或最多 4 个)。我所拥有的复杂性更多地是目标的函数形式,而不是决策变量的数量。我这样说是为了不用担心生成不切实际的起点数量(就像我将应用一个条件,如果在第 p 次迭代中,如果 2^((p-1)k) 大于 10K,则中止生成过程.

注意:我确实有一个工作模型,尽管有另一种方法,比如说 2 个具有给定最小值/最大值的决策变量,我想要 400 个起点。我将每个单独的决策变量除以 400 的平方根,对于所有结果组合,我将得到 400 分。我更喜欢使用替代方法,上面描述了其中一种方法。

0个回答
没有发现任何回复~