程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

最小化受约束的功能

发布于2020-02-28 15:09     阅读(1305)     评论(0)     点赞(27)     收藏(2)


我正在尝试使用来解决约束优化问题, cipy.optimize.minimize但到目前为止没有成功。

具体来说,我想通过y1最小化目标函数y2

f(y1,y2)=(x1(y1,y2)-x1)^2+(x2(y1,y2)-x2)^2

受到约束:

y1*y2>0

我们的目标是要找到的价值观y1y2不同的对x1x2

这就是我到目前为止

def f(x1,x2):
    k=(x1(y1,y2)-x1)^2+(x2(y1,y2)-x2)^2
    return k

但是我不确定如何设置具有上述约束的函数:

def constraint(x):
    ....

一旦有了约束,以下语法正确吗?

optimize.minimize(f, np.array([0, 0]), method="SLSQP",
                  constraints={"fun": constraint, "type": "ineq"})

我是Python新手,因此将不胜感激。


解决方案


对于约束。文档

等式约束表示约束函数结果为零,而不等式表示约束函数结果为非负数。请注意,COBYLA仅支持不平等约束。

因此,您的约束只是一个必须为非负的函数。在您的情况下:

def constraint(y):
    return y[0] * y[1]

注意,该函数必须输入一个向量。例如:

def f(x):
    x1, x2 = x
    return x1**2 + x2**2

编辑使用试图拟合计算的数据与观察的数据的函数。

def calculated_x(y):
    """ example """
    y1, y2 = y
    x1 = 0.5 + 0.2 * y1 + 0.3 * y2
    x2 = 0.4 + 0.1 * y1 + 0.3 * y2

def f(y, x1, x2):
    x1_calc, x2_calc = calculated_x(y)
    return (x1- x1_calc)**2 + (x2 - x2_calc)**2

m = minimize(f, [0,0], args=(3,2), constraints=({'fun': lambda y: y[0] * y[1], 'type': 'ineq'},))
print(m)
>> array([3, 1.999999])

您还可以根据最小化来构建函数(上面的示例):

def minimize_y(x1, x2):
    # note that x1 and x2 become arguments
    m = minimize(f, [0,0], args=(x1,x2), constraints=({'fun': lambda y: y[0] * y[1], 'type': 'ineq'},)
    return m.x


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/236167/bf08fe9d848e3aab5bd4/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)