发布于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
我们的目标是要找到的价值观y1
和y2
不同的对x1
和x2
。
这就是我到目前为止
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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!