Реализация ограниченной оптимизации с использованием как равенств, так и неравенств в тензорном потоке
Я пытаюсь изучить оптимизацию тензорного потока, поскольку я пишу код в основном в Matlab.
Мой код Matlab:
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [0.5,0];
A = [1,2];
b = 1;
Aeq = [2,1];
beq = 1;
x = fmincon(fun,x0,A,b,Aeq,beq)
Я хочу реализовать вышеописанную оптимизацию, используя тензор потока. Есть ли способ повторить это?
Я сталкивался с этим решением, но оно учитывает только ограничение равенства, а не неравенство.
1 ответ
Вот один урок о том, как превратить оптимизатор Tensorflow во что-то более похожее на ожидаемый оптимизатор:
https://pcess.github.io/tensorflow/
Ключевым моментом, который стоит отметить, является то, что Tensorflow не имеет оптимизатора, который функционирует подобно тому, как работают оптимизаторы Matlab. Это связано с тем, что оптимизаторы Tensorflow по существу все предназначены для решения проблемы стохастического градиентного спуска... то есть, как оптимизировать функцию, когда оценка всей функции является слишком дорогой в вычислительном отношении. Следовательно, вам нужно будет не только установить собственные условия остановки для Tensorflow, но и указать, как справляться с ограничениями равенства.
Вы, конечно, можете включить ограничения равенства, введя множители Лагранжа, но вам придется сделать это вручную.
Если вы просто заинтересованы в выполнении оптимизации вне Matlab, вам следует попробовать один из методов в scipy.optimize.minimize. Если вам абсолютно необходимо иметь его в Tensorflow, то у вас впереди много работы.