我正在使用 MATLAB 的优化工具箱“fmincon”,但我遇到了下一个问题:
我有 6 个参数要改变,其中一些参数的变化最大是偶数,从 4 到 16(这个值可以变化,但总是会变化为偶数)。所以让我们像这样定义它们:
x1=[4:2:16];
x2=[4:2:16];
另外几个变量必须在 300 到 1500 之间变化,步长为 100,我的意思是:
x3=[300:100:1500];
x4=[300:100:1500];
最后一对只是在 4 到 6 之间变化,如下所示:
x5=4:6;
x6=4:6;
参数限制如下:
x1<=x2
x3<=x4
x5<=x6
这里很重要的一点是,导致的变化fmincon
不能做出很小的变化,我的意思是,它的第一个值x1
是4
,不可能4.0000000001
,因为在我的目标函数中,变化不会产生任何影响;还有我的问题,因为步骤太少了,所以变化不会产生任何效果,算法停止,说目标函数没有变化。
我已经设置了fmincon
, DiffMinChange=1
, 并且适用于第一次迭代,并且它们开始执行的步骤太少了。这是初始配置fmincon
:
options1 = optimset('Display','iter',...
'Algorithm','sqp','PlotFcns',@optimplotfval,...
'MaxIter',400,'MaxFunEvals',2000,'DiffMinChange',1);
最初的限制是:
A=[1 -1 0 0 0 0;0 0 1 -1 0 0;0 0 0 0 1 -1];
b=[0;0;0];
更清楚地说,我正在寻找的是制作 3 个范围,让我们定义如下:
R1=[x1:2:x2];
R2=[x3:100:x4];
R3=[x5:x6];
编辑 1:您可能知道目标函数的每次评估大约需要 2-3 小时。
如你所见,最后我要找的是一个区间的变化,因此开始的限制不能大于顶部的限制,否则排名将为空。