全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 悬赏大厅 求助成功区
1289 6
2020-10-01
悬赏 200 个论坛币 已解决
我正在用python进行规划求解,本人愚钝能力实在有限,无法利用官方发布的使用文档,请为我提供一个简单的代码,谢谢,请不要使用一些复杂的代码,本人lambda函数都不大会用,如果一定要使用请详细说明步骤
要求:使用scipy库进行最优求解即可
数据已经上传:
题目:e=r_jsvalue-x1*r_lg+x2*r_lv+x3*r_mg+x4*r_mv+x5*r_sg+x6*r_sv+x7*rbond
      约束条件:x1+x2+x3+x4+x5+x6+x7=1
                且x1>0,x2>0,x3>0,x4>0,x5>0,x6>0,x7>0
       求使var(e)最小的x组合
如果用stata的解决的话也行,谢谢各位
附件: 您需要登录才可以下载或查看附件。没有帐号?我要注册

最佳答案

岁馀。 查看完整内容

代码可以直接用 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 ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-10-1 19:53:36
代码可以直接用

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]))
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-1 19:58:16
excel我会用,但是我想用python和stata解决
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-10 23:31:13
不知道对不对,python的话可能只会得到局部最优解,得看初始值,代码如下:
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]))

结果:
x1 = 0.14285714285711149
x2 = 0.14285714285740694
x3 = 0.14285714285645784
x4 = 0.14285714285641232
x5 = 0.14285714285604822
x6 = 0.14285714285606066
x7 = 0.14285714286050216
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-13 21:14:11
岁馀。 发表于 2020-10-11 16:13
代码可以直接用

import pandas as pd
谢谢,请问这个得到的是局部最优解嘛?我也用了python得到的是局部最优解,初始设置会影响结果
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-10-23 09:40:52
曾宇轩1997 发表于 2020-10-13 21:14
谢谢,请问这个得到的是局部最优解嘛?我也用了python得到的是局部最优解,初始设置会影响结果
我也不知道是不是局部最优,要全局最优的话我也没什么办法,一般局部最优就可以了,或者用遗传算法试试,不过就把问题复杂化了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群