量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程

这篇具有很好参考价值的文章主要介绍了量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。



前言

提示:包含pyQUBO用法:

最近MathorCup2023的A题刚好是投资组合的QUBO建模,刚好有篇日文文章是讲这个的,直接翻译过来。供大家参考。【因为还没有获得作者同意,暂且没有把文章设置为翻译,之后会设置成翻译,或者再加一下自己的东西变成原创。】

《量子アニーリングを用いたポートフォリオ最適化 – 量子アニーリングソリューションコンテスト》
https://qard.is.tohoku.ac.jp/T-Wave/?p=1987

一、什么是投资组合优化?

  • 什么是投资组合优化?

投资组合优化是在考虑风险和收益的情况下寻找资产(投资组合)的最佳组合。投资组合优化有多种理论,但这次我们基于现代投资组合理论进行投资组合优化。

  • 什么是现代投资组合理论?

这是对现代投资组合理论(又名现代投资理论)的描述。

它基于美国哈里·马科维茨于 1950 年代建立的多元化投资理论。为了在资产管理中期望一定的回报同时抑制价格波动风险,将大量股票和多种资产分散投资为一个投资组合是有效的。除了价格波动风险及其包含率外,它由表示任何两个问题之间价格变动的连贯性的相关系数决定。他因在投资理论方面的开创性工作而获得 1990 年诺贝尔经济学奖。

然而,该理论建立在不切实际的假设之上,例如假设股票的价格波动风险从过去到未来都不会发生变化。为此,2008年雷曼震荡后,众多金融资产之间的相关系数增加,同时价格波动的风险也增加,也有人指出该理论的局限性,认为有局限性。

二、投资组合优化建模

1. 目标函数:回报

最大化回报和最小化风险(协方差)被视为最佳投资组合措施。
代表收益回报的目标函数如下:

量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程

2.约束函数:风险

量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程

3.最终优化目标函数

上面两个函数相加就是最终优化的目标函数。
量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程
系数A应根据重点是最大化回报还是最小化风险来调整。

三、基于PyQUBO实现

1. 获取数据

首先,使用pandas_datareader 从yahoo finance 获取股价数据。
这一次,我们将使用具有代表性的美国股票指数 DOW30 指数中包含的 30 只股票的 2018 年数据来优化投资组合。

import pandas_datareader.data as web
import datetime

start = datetime.datetime(2018, 1, 2)
end = datetime.datetime(2018, 12, 31)
DOW30 = ['AAPL','AMGN','AXP','BA','CAT','CRM','CSCO','CVX','DIS','GS','HD','HON', 'IBM','INTC','JNJ','JPM','KO','MCD','MMM','MRK','MSFT','NKE', 'PG','TRV','UNH','V','VZ','WBA','WMT']
stockcodes = DOW30+DOW30

data = web.DataReader(DOW30, 'yahoo', start, end)
df_price_DOW30 = data['Adj Close']

2. 数据处理

从前面得到的股价数据中,求出每只股票每天的几何平均收益和协方差矩阵。

  • 补充(什么是几何平均数?)
    量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats.mstats import gmean 

df_price0 = pd.merge(df_price, df_price, on='Date')
rates = []

for sc in stockcodes:
    df = df_price.loc[:,sc]
    return_rate = np.zeros(len(df.values))
    for k in range(len(df.values)-1):
        return_rate[k+1] = (df[k+1] - df[k])/df[k]
  
    rates.append(return_rate)

N = len(stockcodes)

list_price_start = np.zeros(N)
for n in range(N):
    list_price_start[n] = df_price.loc['2018-01-02',stockcodes][n]
    
list_price_end = np.zeros(N)
for n in range(N):
    list_price_end[n] = df_price.loc['2018-12-31',stockcodes][n]

#求几何平均w1
for k in range(N):
    for n in range(len(rates[1])):
                   rates[k][n] = rates[k][n]+1

w_1 = np.zeros(N)
for k in range(N):
    w_1[k] = gmean(rates[k])

w = np.zeros(N)
for n in range(N):
    w[n] = w_1[n]-1

for k in range(N):
    for n in range(len(rates[1])):
                   rates[k][n] = rates[k][n]-1

3. 目标函数PyQUBO实现

根据之前获得的每只股票的每日几何平均收益和协方差矩阵,准备使用 PyQUBO 进行优化的目标函数。


from pyqubo import Array, Constraint, Placeholder, solve_qubo

x = Array.create('x', shape=N, vartype='BINARY')# 二值变量

K = 1000 #投资额
constr = (((np.dot(x,list_price_start))-0.9*K)/10)**2 #预算约束

#回报部分的目标函数
cost = 0
for i in range(N):
    cost = cost - w[i]*x[i]
#风险部分的约束函数
cost2 = 0
for i in range(N):
    for j in range(N):
        cost2 = cost2 +x[i]*x[j]*np.sum((rates[i]-w[i])*(rates[j]-w[j]))/len(rates[i])
#整体的目标函数
cost_func = 2*cost + cost2 + Placeholder('a')*Constraint(constr, label='Kconstr') 
model = cost_func.compile()
max_coeff = np.max(abs(w))

#调整约束强度
feed_dict = {'a': 17.0*max_coeff}
qubo, offset = model.to_qubo(feed_dict=feed_dict)

4. OpenJij实施优化

这一次,我们将使用 SQA(模拟量子退火)库 OpenJij 来执行优化。

from openjij import SQASampler
sampler = SQASampler(num_sweeps=3000)
R = 300
sampleset = sampler.sample_qubo(qubo,num_reads=R)
print(sampleset.record)

最终原文还有很多可视化分析,大家用Google翻译,边翻边看吧。

总结

  • 成本最低的投资组合并未显示出稳定的结果,但频率评估的投资组合始终优于 Dow30指数。
  • 即使应用于不同年份的数据,频率评级的投资组合也匹配或优于Dow30 指数。
  • 当应用于另一年的数据时,它很少被 Dow30Index 显着击败。

这个文章整体比较简单,主要是给大家提供个PyQUBO的例子。文章来源地址https://www.toymoban.com/news/detail-435768.html

到了这里,关于量子退火Python实战(3):投资组合优化(Portfolio) MathorCup2023特供PyQUBO教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 量子退火算法入门(1) : QUBO是什么?

    量子计算机是利用“量子叠加”,“纠缠”等量子力学现象实现并行计算的计算机。传统计算机需要大量时间才能得出答案的问题,量子计算机可能会在短时间内解决,因此有望在各个领域得到应用。根据解决问题的方法,量子计算机可以大致分为量子门法(门:gate)和量子

    2023年04月16日
    浏览(44)
  • 量子退火算法入门(3):整数分割问题的QUBO建模

    QUBO建模最重要的就是,把建模对象中的变量映射为binary(0/1 或者 -1/+1)的变量。我先从简单的问题开始说明,让大家有些直观感受。整数分割问题就是一个非常简单,并容易理解的例子。此文参考了日本NTT公司的量子计算指南文档[*1]。 整数分割问题定义: 判断能否将一个

    2024年02月01日
    浏览(39)
  • 量子退火算法入门(4):旅行商问题的QUBO建模「上篇」

    旅行商问题,是一个经典的组合优化问题,而且是著名NP问题之一。如下图所示 ,可以想象,有A,B,C,D,E 五个地点,我们想找到一条路径,从地点A出发,经过剩余四个地点,然后回到地点A,从所有可能路径中找到距离最短的一条路径。本章借用了文献[*1]的图表。 最简单

    2023年04月18日
    浏览(38)
  • 量子退火算法入门(7):如何QUBO中的三次多项式怎么转换?

    本文还是大部分截图来自于:《最適化問題とWildqatを用いた量子アニーリング計算入門》 https://booth.pm/ja/items/1415833 终于有人问到怎么将QUBO中的三次多项式转换为二次多项式了。直接以一个例题开始讲解。中间会用到之前文章里的知识,大家最好读了该系列前两篇之后,再阅

    2023年04月14日
    浏览(41)
  • DARPA加大拓扑量子投资!联合微软开发公用事业规模量子计算机

    内容来源: 量子前哨(ID:Qforepost) 编辑 丨 慕一   编译/排版 丨沛贤 深度好文:1500字丨10分钟阅读 美国政府根据近期的量子技术成果和构建量子计算机的详细计划,加大了对微软Azure量子的资助。 美国国防高级研究计划局 (DARPA) 执行了一项计划,旨在确定建造和运行公用

    2024年04月09日
    浏览(104)
  • 【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析

    2023 年MathorCup 高校数学建模挑战赛——大数据竞赛赛道B:电商零售商家需求预测及库存优化问题电商平台存在着上千个商家,他们会将商品货物放在电商配套的仓库,电商平台会对这些货物进行统一管理。通过科学的管理手段和智能决策,大数据智能驱动的供应链可以显著降

    2024年02月08日
    浏览(68)
  • AI人工智能中的概率论与统计学原理与Python实战:35. Python实现量子计算与量子机器学习...

    量子计算和量子机器学习是人工智能领域的一个重要分支,它们利用量子物理现象来解决一些传统计算方法无法解决的问题。量子计算的核心是量子比特(qubit),它可以存储多种信息,而不是传统的二进制比特(bit)。量子机器学习则利用量子计算的优势,为机器学习问题提供更

    2024年04月14日
    浏览(59)
  • 数学建模——模拟退火优化投影寻踪

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档   在考虑综合评价的时候,我们使用了各自主观、客观的方法去求解权重,客观权重的计算依靠着数据本身的分布来决定,有时候会出现各种各样不可抗拒的意外情况,其中在熵权法的解释在就有提到

    2024年02月11日
    浏览(51)
  • 智能优化算法学习笔记(2)–模拟退火算法(SA)

    模拟退火算法( Simulated Annealing ,简称 SA )的思想最早是由 Metropolis 等提出的。其出发点是基于物理中固体物质的退火过程与一般的组合优化问题之间的相似性。模拟退火算法是一种通用的优化算法,其物理退火过程由以下三部分组成: 加温过程 。其目的是增强粒子的热运

    2024年02月05日
    浏览(50)
  • 智能算法系列之基于粒子群优化的模拟退火算法

      本篇是智能算法(Python复现)专栏的第四篇文章,主要介绍粒子群优化算法与模拟退火算法的结合,以弥补各自算法之间的不足。   在上篇博客【智能算法系列之粒子群优化算法】中有介绍到混合粒子群优化算法,比如将粒子更新后所获得的新的粒子,采用模拟退火的思

    2024年02月11日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包