MATLABの最適化ツールボックス「fmincon」を使っているのですが、次の問題があります。
変化させるパラメーターは 6 つあります。そのうちの 2 つは 4 から 16 までの偶数で変化します (この値は変化する可能性がありますが、常に偶数で変化します)。したがって、次のように定義しましょう。
x1=[4:2:16];
x2=[4:2:16];
別の 2 つの変数は、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];
EDIT 1:目的関数の各評価には約2〜3時間かかることを知っているかもしれません。
ご覧のとおり、最後に私が探しているのは間隔の変化です。そのため、最初の制限は上の制限より大きくすることはできません。そうでない場合、ランクは空になります。