用张量流中的等式和不等式实现约束优化

时间:2017-08-13 14:53:14

标签: matlab python-3.x tensorflow mathematical-optimization

我正在尝试学习张量流优化,因为我主要在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)

我想使用tensorflow实现上述优化。有没有办法复制它?

我遇到了this solution,但它只考虑了平等约束而不是不平等。

1 个答案:

答案 0 :(得分:0)

这是一个关于如何将Tensorflow优化器包装成更像您期望的优化器的教程:

https://pcess.github.io/tensorflow/

需要注意的关键是Tensorflow没有一个与Matlab优化器的工作方式类似的优化器。这是因为Tensorflow优化器基本上都是为解决随机梯度下降问题而设计的......也就是说,在评估整个函数时如何优化函数的计算成本太高。因此,您不仅需要为Tensorflow设置自己的停止条件,还需要告诉它如何处理相等约束。

您当然可以通过引入拉格朗日乘数来合并等式约束,但您必须手动执行此操作。

如果您只是想在Matlab之外执行优化,那么您应该尝试使用scipy.optimize.minimize中的一种方法。如果你绝对必须在Tensorflow中拥有它,那么你有很多工作要做。