gpt4 book ai didi

python - 从 PuLP 迁移到 Scipy

转载 作者:太空狗 更新时间:2023-10-30 03:03:18 25 4
gpt4 key购买 nike

我正在使用 PuLP 解决一些最小化问题有约束,上限和下限。它非常简单和干净。

但我只需要使用 Scipy 和 Numpy模块。

我在读: http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

Constrained minimization of multivariate scalar functions

但我有点迷茫......一些善良的灵魂可以张贴一个小例子这是 Scipy 中的 PuLP 吗?

提前致谢。毫米

from pulp import *

'''
Minimize 1.800A + 0.433B + 0.180C
Constraint 1A + 1B + 1C = 100
Constraint 0.480A + 0.080B + 0.020C >= 24
Constraint 0.744A + 0.800B + 0.142C >= 76
Constraint 1C <= 2
'''

...

最佳答案

考虑以下几点:

import numpy as np
import scipy.optimize as opt

#Some variables
cost = np.array([1.800, 0.433, 0.180])
p = np.array([0.480, 0.080, 0.020])
e = np.array([0.744, 0.800, 0.142])

#Our function
fun = lambda x: np.sum(x*cost)

#Our conditions
cond = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 100},
{'type': 'ineq', 'fun': lambda x: np.sum(p*x) - 24},
{'type': 'ineq', 'fun': lambda x: np.sum(e*x) - 76},
{'type': 'ineq', 'fun': lambda x: -1*x[2] + 2})


bnds = ((0,100),(0,100),(0,100))
guess = [20,30,50]
opt.minimize(fun, guess, method='SLSQP', bounds=bnds, constraints = cond)

需要注意的是,eq 条件应该等于零,而 ineq 函数将对任何大于零的值返回真。

我们得到:

  status: 0
success: True
njev: 4
nfev: 21
fun: 97.884100000000345
x: array([ 40.3, 57.7, 2. ])
message: 'Optimization terminated successfully.'
jac: array([ 1.80000019, 0.43300056, 0.18000031, 0. ])
nit: 4

仔细检查等式:

output = np.array([ 40.3,  57.7,   2. ])

np.sum(output) == 100
True
round(np.sum(p*output),8) >= 24
True
round(np.sum(e*output),8) >= 76
True

四舍五入来自双点精度误差:

np.sum(p*output)
23.999999999999996

关于python - 从 PuLP 迁移到 Scipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19664865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com