Реализация ограниченной оптимизации с использованием как равенств, так и неравенств в тензорном потоке

Я пытаюсь изучить оптимизацию тензорного потока, поскольку я пишу код в основном в 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, то у вас впереди много работы.

Другие вопросы по тегам