scipy minimize当目标函数需要参数、当约束条件特别特别多时

from scipy.optimize import minimize

求解



官方说明文档

简单开一下开头

 官方下面有例子会让人容易明白

注意我们的目的是:为了求出让fun函数最小的最优解x

当遇见目标函数fun带了很多外来参数的时候

以及约束很多很多假设有100个的时候,怎么实现呢

1、优化函数带参数

但是当fun函数是带参数的时候怎么办呢,参数当然可以是一个数,也可能是数组矩阵等。

比如说我们可以随便定义一个目标函数:

def fun(x, funarg1, funarg2):

    loss1 = funarg1.dot(x)

    loss2 = (x[0] - max(funarg2))**2 + (x[1] - 2.5)**2

    return loss1 + loss2

2、当有很多很多约束,可以采用约束也带参数的方法

注意:eq表示 本约束函数目标等于0 ; ineq 表示 约束函数目标大于等于0

网上多数例子的约束都是不带参数的,只有x本身,约束函数也想要带参数该怎么写

相当于要构建很多个约束,总不能全都一个写吧

例如的实现方法

cons_temp = []

for carg1, carg2, carg3 in arg_all:
    cons_temp.append(
    {'type': 'ineq', 'fun': lambda x, carg1:  x[0] - 2 * x[1] + carg1, 'args': (carg1)},
    {'type': 'ineq', 'fun': lambda x, carg2, carg3: -x[0] - carg2 + carg3,  'args': (carg2, carg3)})

cons = tuple(cons_temp)

3、求解上面目标函数及约束

res = minimize(fun, x0, args=(funarg1, funarg2), constraints=cons)

x0是x初始猜测值

res.x就是求解的结果

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值