У меня есть код Matlab, который использует fmincon
с некоторыми ограничениями.Так что я могу изменить код, который я думал о том, имеет ли значение положение строки в матрице условий A
Я настроил тестовый файл, чтобы я мог изменить некоторые переменные.Оказывается, что положение условия не имеет значения для результата, но количество строк в A и b играет роль.Я удивлен этим, потому что я ожидал бы, что строка с только нулями в A и b просто аннулируется.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
options1 = optimoptions('fmincon','Display','off');
A=zeros(2,2); %setup A
A(2,2)=1; %x2<0
b=[0 0]'; %setup b
x = fmincon(fun,[-1,2],A,b,[],[],[],[],[],options1);x
%change condition position inside A
A=zeros(2,2);
A(1,2)=1; %x2<0
b=[0 0]';
x = fmincon(fun,[-1,2],A,b,[],[],[],[],[],options1);x
% no change; the position doesn´t influence fmincon
%change row size of A
A=zeros(1,2);
A(1,2)=1; %x2<0
b=[0]';
x = fmincon(fun,[-1,2],A,b,[],[],[],[],[],options1);x
%change in x2
%increase size of A
A=zeros(10,2);
A(1,2)=1; %x2<0
b=[0 0 0 0 0 0 0 0 0 0]';
x = fmincon(fun,[-1,2],A,b,[],[],[],[],[],options1);x
%change in x2
Может кто-нибудь объяснить мне, почему на номер строки влияет fmincon?Что такое «правильное» число в А и В?Количество переменных или число условий?
РЕДАКТИРОВАТЬ По причинам полноты:
Я согласен, что возможны разные значения из-за итерационного процесса.Тем не менее я могу найти ситуации, когда разница больше допустимого:
Добавлена +log(x(2)
к функции:
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2+log(x(3));
options1 = optimoptions('fmincon','Display','off');
options = optimoptions('fmincon')
A=zeros(2,3); %setup A
A(2,3)=1; %x2<0
b=[0 0]'; %setup b
x = fmincon(fun,[-1,2,1],A,b,[],[],[],[],[],options1);x
%change row size of A
A=zeros(1,3);
A(1,3)=1; %x2<0
b=[0]';
x = fmincon(fun,[-1,2,1],A,b,[],[],[],[],[],options1);x
%change in x2
%increase size of A
A=zeros(10,3);
A(1,3)=1; %x2<0
b=[0 0 0 0 0 0 0 0 0 0]';
x = fmincon(fun,[-1,2,1],A,b,[],[],[],[],[],options1);x
%change in x2
x =
-0.79876 **0.49156** 2.3103e-11
x =
-0.79921 0.49143 1.1341e-11
x =
-0.80253 **0.50099** 5.8733e-12
Поддержка Matlab говорит мне, что матрица A не должна иметь больше строкчем условия.Каждое условие усложняет алгоритм.