#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, но я так думаю.