使用python scipy.optimize.minimize进行优化

您所在的位置:网站首页 sci34区 使用python scipy.optimize.minimize进行优化

使用python scipy.optimize.minimize进行优化

2024-07-16 04:19:38| 来源: 网络整理| 查看: 265

我想优化泵存储工厂的时间表。基本上有96个已知价格(一天中的每个季度),该模型应确定是(1)泵,(2)涡轮机还是(3)每个相应季度不进行任何操作。因此,X有一些界限:-100

首先,我尝试了以下操作:

from scipy.optimize import minimize import numpy as np prices=np.array([[1.5,50,30]]) xp =np.array([[1.5,50,30]]) fun = lambda x: xp* prices #here xp and prices should be matrices cons = ({'type': 'ineq', 'fun': lambda x: (xp*0.25)=0}) bnds = ((0, None), (0, None), (0, None)) res = minimize(fun, (2, 0,0), method='SLSQP', bounds=bnds, constraints=cons)

但是,这将引发错误:

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) in () 10 bnds = ((0, None), (0, None), (0, None)) 11 ---> 12 res = minimize(fun, (2, 0,0), method='SLSQP', bounds=bnds, constraints=cons) /Users/ch/miniconda/envs/sci34/lib/python3.4/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options) 450 elif meth == 'slsqp': 451 return _minimize_slsqp(fun, x0, args, jac, bounds, --> 452 constraints, callback=callback, **options) 453 elif meth == 'dogleg': 454 return _minimize_dogleg(fun, x0, args, jac, hess, /Users/ch/miniconda/envs/sci34/lib/python3.4/site-packages/scipy/optimize/slsqp.py in _minimize_slsqp(func, x0, args, jac, bounds, constraints, maxiter, ftol, iprint, disp, eps, callback, **unknown_options) 375 376 # Now combine c_eq and c_ieq into a single matrix --> 377 c = concatenate((c_eq, c_ieq)) 378 379 if mode == 0 or mode == -1: # gradient evaluation required ValueError: all the input arrays must have same number of dimensions

我不知道为什么会出现此错误。有人可以给我提示吗?

解决方案

我将逐行检查您的代码,并重点说明一些问题:

from scipy.optimize import minimize import numpy as np prices=np.array([[1.5,50,30]]) xp =np.array([[1.5,50,30]])

prices并且xp是向量,而不是矩阵,用于np.array([1.5,50,30])声明向量

fun = lambda x: xp* prices #here xp and prices should be matrices

您的函数右侧不依赖x,因此您的函数只是常量。同样*是件明智的蟒蛇。您可以np.dot用来计算标量积。

fun = lambda x: np.dot(x, prices) cons = ({'type': 'ineq', 'fun': lambda x: (xp*0.25)=0})

这不是定义约束的方式。您可能要检查文档。不等式由一组函数表示g_i(x)。凡g_i(x) >= 0所有i。与上述问题相同:x在函数声明的右侧未使用。

cons = ({'type': 'ineq', 'fun': lambda x: -x*0.25 + 500}, {'type': 'ineq', 'fun': lambda x: x*0.25}) bnds = ((0, None), (0, None), (0, None))

很好,但是bnds = [(0,None)] * 3当向量变长时会派上用场。

res = minimize(fun, (2,0,0), method='SLSQP', bounds=bnds, constraints=cons)

函数和所有限制都是线性的x。因此,这是一个线性程序,SLSQP可能不是解决它的最佳方法。在此示例中,您可能想要查看scipy.optimize.linprog。

附带说明:我想这只是一个玩具示例。显然,此优化的结果是零向量。

结果如下:

njev: 3 x: array([ 0., 0., 0.]) nit: 3 status: 0 message: 'Optimization terminated successfully.' jac: array([ 1.5, 50. , 30. , 0. ]) success: True fun: 0.0 nfev: 15

程序员说:42岁了,突然觉得研发前途渺茫

中国程序员数量达755万,全球排名第二

为什么都说程序员找不到女朋友,但是身边程序猿的却没一个单身的?

程序员说:30岁以上你还死磕技术,别说拿高薪,可能你连饭碗都会保不住

程序员被开除,老板:“有你参与的项目全黄了!”

笑话:一个测试工程师走进一家酒吧

笑话:面试官:请拿出一段体现你水平的代码。我: sudo rm -rf /*面试官:这体现了你哪方面能力?

python精选:Python 办公实战!​按姓名拆分 Excel 为单独文件,微信自动发给相应联系人

网友说:做开发,不被领导喜欢怎么办?

网友说:我奉劝各位,一定不能在职场透露自己的家庭条件



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭