Трюк для указания нижней и верхней границы в задаче оптимизации

#algorithm #matlab #optimization #mathematical-optimization

#алгоритм #matlab #оптимизация #математическая оптимизация

Вопрос:

Я минимизирую (используя paretosearch функцию в MATLAB) две целевые функции, которые зависят от x и y .

Предположим, у нас есть ограничения 0<= x <=0.5 и 0.1<= y <= 0.3 . В этом случае мы можем просто определить нижнюю границу ( lb ) и верхнюю границу ( ub ) для конкретной задачи оптимизации следующим образом:

 lb = [0, 0.1];
ub = [0.5, 0.3]; 
  

Вместо этого предположим теперь, что у нас есть 0.04<= x <=0.5 и 0<= y <=x - 0.03 :

В этом случае мы имеем lb = [0.04, 0] , но что насчет ub ?

Я думаю, что минимальное значение x равно 0.04 , поэтому мы можем только принять 0<= y <= 0.01 , и мы можем отклонить все другие возможности для y . Но я считаю, что я очень ошибаюсь. Итак, как я могу определить (в MATLAB) a ub , который автоматически обновляется с каждым значением x ?

Любая помощь будет очень признательна!

Комментарии:

1. Какую функцию Matlab вы используете для оптимизации?

2. Верхние границы являются константами. Таким образом, условие y <= x - 0.03 должно быть указано как ограничение. Исходя из верхней границы x, вы можете сделать вывод: 0 <= y <= 0.47 (у большинства решателей LP есть хорошие предварительные решатели, которые сделают этот вывод для вас автоматически) Обратите внимание, что есть нечто, называемое VUB — переменные верхние границы. Я не думаю, что это играет здесь какую-либо роль.

3. @DavidEisenstat Я использую функцию paretosearch в MATLAB. Итак, на самом деле у меня есть две целевые функции, которые я хочу минимизировать (задача многоцелевой оптимизации), но я не включил это в свой вопрос.

4. @ErwinKalvelagen Спасибо за информацию. Не могли бы вы подробно объяснить, как вы получили 0 <= y <= 0.47?

5. x <= 0.5, y <= x-0.03 ==> y <= 0.5 - 0.03

Ответ №1:

paretosearch имеет форму paretosearch(fun, nvars,A,b), которая позволяет задавать линейные неравенства Ax ≤ b в матричном виде. Перепишите ограничение 0 ≤ y ≤ x − 0.03 как два: −y ≤ 0 и −x y ≤ − 0.03 , а затем выведите A = [0,-1;-1,1] и b = [0,-0.03] .

Комментарии:

1. Ах, хорошо, я понимаю. Я применю его в MATLAB и буду держать вас в курсе. Большое вам спасибо.

2. Итак, в этом случае я могу определить: lb = 0.04; ub = 0.5; A = [0, -1; -1, 1]; b = [0, -0.03]; Тогда: я могу написать: opts_ps.ParetoSetSize = 100; paretosearch(my_multiObjective_function, 2, [], [], [0,-1;-1,1], [0,-0.03], lb,ub,[], opts_ps); Я прав?

3. @Christina не эксперт Matlab, но я так думаю.