代码可以直接用
import pandas as pd
import numpy as np
from scipy.optimize import minimize
#提取数据
data=pd.read_excel('p.xls')
r_jsvalue = data.iloc[1:,2]
r_lg = data.iloc[1:,4]
r_lv = data.iloc[1:,6]
r_mg = data.iloc[1:,8]
r_mv = data.iloc[1:,10]
r_sg = data.iloc[1:,12]
r_sv = data.iloc[1:,14]
rbond = data.iloc[1:,16]
#目标函数
def objective(x):
e = x[0]*r_lg + x[1]*r_lv + x[2]*r_mg + x[3]*r_mv + x[4]*r_sg + x[5]*r_sv + x[6]*rbond
e_var = np.var(e)
return e_var
def constraint(x):
return x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]-1
#边界约束
b = (0.0, None) ##即决策变量的取值范围为大于等于0
bnds = (b, b, b, b, b, b, b)
con1 = {'type':'eq','fun':constraint}
cons = ([con1])
x0 = np.array([0, 0, 0, 0, 0, 0, 0]) #定义初始值
solution = minimize(objective, x0, method='SLSQP', bounds=bnds, constraints=cons)
x = solution.x
print('目标值: ' + str(objective(x)))
print('结果 ' ,solution.success)
print('x1 = ' + str(x[0]))
print('x2 = ' + str(x[1]))
print('x3 = ' + str(x[2]))
print('x4 = ' + str(x[3]))
print('x5 = ' + str(x[4]))
print('x6 = ' + str(x[5]))
print('x7 = ' + str(x[6]))



雷达卡



京公网安备 11010802022788号







