Я пытаюсь установить ограничение, которое зависит от минимизированного значения функции.Как установить ограничение, зависящее от временной минимизированной функции?
Проблемы у меня есть следующий характер:
Fmin = минимизировать (d1x1 + d2x2 ... + d5x5)
Где я хочу optmize со следующими ограничениями:
x1+X2+x3+x4+x5 = 1
0.003 <x1 .. X5 < 0.05
d1x1/fmin = y1
(d2x2+d3x4)/fmin = y2
(d4x4+d5x5)/fmin = y3
Здесь в этом случае y1 .. yn являются скалярными константами.
The problem I am having is that I dont know how to setup the A_ub or A_eq
In linprog so that B_ub = y1*fmin for d1x1 for example.
Так или иначе мне нужно определить:
x1d1/Fmin = y1 в качестве одного из ограничений.
Здесь оптимальный вектор значений будет (d1 .. dn). Однако это также должно удовлетворять ограничению d1/minimized (d1 .. dn) = y1 в качестве примера здесь.
Как мне настроить это? Какой оптимизатор я использую?
Я могу сделать это очень легко с помощью excel solver - но теперь я хочу закодировать это в python. Я пытаюсь использовать scipy.linprog, но я не уверен, что это проблема линейного программирования или мне нужно использовать другой подход. Я не могу придумать способ настройки ограничений в linprog для этой проблемы. Может кто-нибудь мне помочь ?
Я попытался использовать scipy.linprog, где я могу настроить первые два ограничения, но в то же время поставил под сомнение настройку последних. Я даже не уверен, что мне нужно использовать linprog для этого или нет. Больше, чем основанный на коде - его подход, который я действительно переживаю. – DrBug
@DrBug Что такое 'y1',' y2' и 'y3'? Переменные или константы? ** Если ** они являются константами, тогда вы можете переписать ограничение как 'd4x4 + d5x5 = y3 * sumof (...)', которое является линейным, если 'yi' являются переменными, ограничение которых ** не ** линейно, и, следовательно, вы должны использовать что-то более мощное, как квадратичный решатель. – Bakuriu
Спасибо Bakuriu. y1 .. y3 - постоянные. Однако термин sumof также включает переменные, которые я пытаюсь свести к минимуму (d1 .. dn). В этом случае первое ограничение, с которым я борюсь, на самом деле (d1x1 + d2x2)/(минимизированная функция). – DrBug