首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求解Sympy中的简单凸优化

求解Sympy中的简单凸优化
EN

Stack Overflow用户
提问于 2019-04-12 09:30:37
回答 1查看 572关注 0票数 1

我正试图解一组简单的方程。手动找到解决方案很简单,但是我想用同情来学习这个工具。

代码语言:javascript
复制
from sympy import symbols,solve,Le,Eq
l,x = symbols('lamda x')
f0 = x**2+1
f1 = (x-2)*(x-4); feasible_set = Le(f1,0);
lagrange = f0 + l*f1
stationary_lagrangian = Eq(lagrange.diff(x),0)
solve([feasible_set,stationary_lagrangian])

上面的代码给出了错误NotImplementedError: inequality has more than one symbol of interest.

问题1:为什么会这样?不等式只包含x,而不包含lamda

问题2:是否有可能用另一种方式解决同样的问题?

问题的背景,如果你有兴趣的话

代码语言:javascript
复制
minimize (over x \in R)
    x^2 + 1
subject to
    (x-2)(x-4) <= 0

。。然后从KKT条件中应用平稳性和原始可行性。

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 12:43:22

正如注释中提到的那样,sympy.solve解决了等式系统的问题。所以应该是,

代码语言:javascript
复制
from sympy import solve, var, symbols, diff
x = var('x',real=True);
f = x**2+1
g = (x-2)*(x-4)

l = symbols('lambda', real = True)
lagrange = f - l* g
grad = [diff(lagrange,x)]
kkt_eqs = grad + [g]
extremum_points = solve(kkt_eqs, [x, l], dict=True) 

编辑:现在,从极值点,你必须找到最小。

代码语言:javascript
复制
f_x_ = min(ele[x]**2 + 1 for ele in stationary_points)
minimum = [ele[x] for ele in stationary_points if ele[x]**2+1 == f_x_]
print(minimum)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55648586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档