基于Scipy的过滤效率优化:Python实现
import numpy as np
from scipy.optimize import minimize
# 定义公式中的系数
gongyi_houdu = [0.05419093, 0.00184155, -0.86020508]
gongyi_kongxilv = [7.50643042e+01, 3.51974149e-01, 2.60499105e-02, -1.54168336e-03, -1.75355368e-04, -8.89120195e-06]
gongyi_yasuohuitan = [4.39577299e+01, 1.15386219e+00, 5.88017537e-02, -2.07223498e-02, 2.06636726e-05, -3.10795521e-05]
# 定义目标函数
def obj(X):
x = X[0]
y = X[1]
xx = X[0] ** 2
xy = X[0] * X[1]
yy = X[1] ** 2
# 计算公式中的各个变量
houdu = -0.8602 + 0.0542 * x + 0.0018 * y
kongxilv = 7.50643042e+01 + 3.51974149e-01 * x + 2.60499105e-02 * y - 1.54168336e-03 * xx - 1.75355368e-04 * xy - 8.89120195e-06 * yy
yasuohuitan = 4.39577299e+01 + 1.15386219e+00 * x + 5.88017537e-02 * y - 2.07223498e-02 * xx + 2.06636726e-05 * xy - 3.10795521e-05 * yy
# 标准化处理
houdu = (houdu - 2.6076) / 0.4792901
kongxilv = (kongxilv - 95.88) / 0.798759455
yasuohuitan = (yasuohuitan - 86.6072) / 1.218528894
# 计算综合指标
zhuyi = -0.650110206 * houdu - 0.612391423 * kongxilv + 0.449814923 * yasuohuitan
zhuer = 0.190957569 * houdu + 0.441310513 * kongxilv + 0.87680114 * yasuohuitan
# 计算过滤效率
guolvxiaolv = 50.157818 + 2.54363681 * zhuyi - 1.93778788 * zhuer - 0.61286059 * zhuyi ** 2 + 1.13540646 * zhuyi * zhuer
return -guolvxiaolv
# 定义约束条件
def con1(X):
return X[0]
def con2(X):
return 100 - X[0]
def con3(X):
return X[1]
def con4(X):
return 2000 - X[1]
mycons = ({'type': 'ineq', 'fun': lambda x: con1(x)},
{'type': 'ineq', 'fun': lambda x: con2(x)},
{'type': 'ineq', 'fun': lambda x: con3(x)},
{'type': 'ineq', 'fun': lambda x: con4(x)}
)
# 设置初始值和边界
x0 = [30, 1000]
bound = [(20, 40), (800, 1200)]
# 定义回调函数
xcall = []
def callback(x):
xcall.append(x)
# 进行优化
res = minimize(obj, x0, bounds=bound, constraints=mycons, options={'disp': True, 'maxiter': 200}, callback=callback)
# 输出结果
print(res.fun, '
', res.success, '
', res.x, res.message)
# 保存中间结果
for i in range(len(xcall)):
if (i % 10 == 0):
np.savetxt('中间结果' + str(i) + '.csv', [xcall[i]])
原文地址: http://www.cveoy.top/t/topic/fNzS 著作权归作者所有。请勿转载和采集!