使用python scipy.optimize.minimize进行优化 |
您所在的位置:网站首页 › sci34区 › 使用python scipy.optimize.minimize进行优化 |
我想优化泵存储工厂的时间表。基本上有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 为单独文件,微信自动发给相应联系人 网友说:做开发,不被领导喜欢怎么办? 网友说:我奉劝各位,一定不能在职场透露自己的家庭条件 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |