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]])
基于Scipy的过滤效率优化:Python实现

原文地址: http://www.cveoy.top/t/topic/fNzS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录