Проблема с минимизацией функции с ограничениями с использованием Matlab, так как он возвращает то же значение, несмотря на значительные изменения в значениях функции - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь минимизировать функцию, показанную ниже как fun (a), и для различных вычисленных значений значений Gf_delta (1,2, ... 7) она возвращает определенный набор значений «a», которыйне меняется с изменением значений Gf_delta.

Изображение, прикрепленное в виде ссылки здесь, чтобы помочь лучше понять

a0 = [1,1,1,1,1,0.5,1];
fun = @(a) Gf_delta1*a(1)+Gf_delta2*a(2)+Gf_delta3*a(3)+Gf_delta4*a(4)+Gf_delta5*a(5)+Gf_delta6*a(6)+Gf_delta7*a(7)
A = []
B = []
Aeq = [1 2 1 0 0 0 0; 0 1 0 2 0 0 1; 0 0 0 0 2 2 0; 2 0 0 0 0 1 0]
Beq = [2,1,4,2]
lb = [0,0,0,0,0,0,0]
ub = []
options = optimoptions(@fmincon,'Algorithm','sqp-legacy','MaxIterations',1500)
a = fmincon(fun,a0,A,B,Aeq,Beq,lb,ub,[],options)

Любая помощь или предложение будут высоко оценены,спасибо.

1 Ответ

0 голосов
/ 15 октября 2018

добро пожаловать в StackOverflow.При попытке воспроизвести вашу проблему я получил разные результаты для разных значений Gf_delta.Смотрите следующую копию, вставленную в вывод командной строки:

>> Gf_delta = 1:7;
>> fun = @(a) Gf_delta*a.';
>> a = fmincon(fun,a0,A,B,Aeq,Beq,lb,ub,[],options)
a =

    1.0000    0.5000         0    0.2500    2.0000    0.0000         0

>> Gf_delta = -3:3;
>> fun = @(a) Gf_delta*a.';
>> a = fmincon(fun,a0,A,B,Aeq,Beq,lb,ub,[],options)
a =

    1.0000    0.2284    0.5433    0.3858    2.0000         0         0

Обратите внимание, что я заменил отдельные значения Gf_delta на вектор, который упрощает fun до умножения на вектор-вектор (но не меняетосновная проблема).Таким образом, причина тех же результатов оптимизации лежит где-то в другом месте.

Некоторые подсказки, где причина может лежать:

  1. Обратите внимание, что MATLAB хранит значения переменных, переданных anonmyousфункции во время декларации.Таким образом, изменение значений Gf_delta требует повторного создания fun (как в выводе консоли выше).На странице справки приведен пример, когда создается анонимная функция и параметры удаляются после нее.

  2. Возможно, ваша переменная Gf_delta изменяется незначительно или линейно-зависимым образом, так что решение этой задачи линейного программирования действительно остается прежним.

...