HRPその1(cvxoptのインストール)

やりたいこと

Hierarchical Risk Parityなるものを勉強する!

正直、難しいことはわからないが、とりあえずgithubに落ちているコードを理解することを目的とする!!

参考コード

参考というか、これを写経しながら、勉強する!

github.com

今回やること

ライブラリのインストール!

参考コードの対応部分

import scipy.cluster.hierarchy as sch
import numpy as np
import pandas as pd
from datetime import date
from matplotlib import pyplot as plt
import cvxopt as opt
from cvxopt import blas, solvers
from alpha_vantage.timeseries import TimeSeries
import ffn
import config

やること

  1. インストールしていなかったライブラリをインストール

  2. インストールしたライブラリを動かしてみる

インストールしていなかったライブラリはcvxopt

alpha_vantageは株価取得できるAPIらしい。今回は株価とかのデータは自前のやつで用意するので、ここは割愛。

cvxopt

なんか以前にインストールで手間取ったcvxpyと響きが似ていてとても嫌な気分

cvxoptの使い方については、Qiitaにまとめてくれている人がいた!偉人!!

Pythonの数理最適化用ライブラリCVXOPTの使用例 - Qiita

cvxoptを試してみる

上の記事を参考に実際にやってみた

P = matrix(np.diag([1.0,-1.0]))
q = matrix(np.array([3.0,4.0]))
p1 = matrix(np.array([[-1.0, 0.0],[2.0,3.0]]).astype(np.float))
p2 = matrix(np.array([1.0,1.0]))
p3 = matrix(np.array([[-2.0,0.0]]).astype(np.float))
p4 = matrix(np.array([3.0]))
sol = opt.solvers.qp(P, q, A = p1, b = p2, G = p3, h = p4)
print(sol)
print(sol['x'])
print(sol['primal objective'])

結果

     pcost       dcost       gap    pres   dres
 0:  1.0000e+00  2.2204e-16  1e+00  8e-17  8e-01
 1:  1.0000e+00  9.9000e-01  1e-02  0e+00  8e-03
 2:  1.0000e+00  9.9990e-01  1e-04  1e-16  8e-05
 3:  1.0000e+00  1.0000e+00  1e-06  1e-16  8e-07
 4:  1.0000e+00  1.0000e+00  1e-08  7e-17  8e-09
Optimal solution found.
{'x': <2x1 matrix, tc='d'>, 'y': <2x1 matrix, tc='d'>, 's': <1x1 matrix, tc='d'>, 'z': <1x1 matrix, tc='d'>, 'status': 'optimal', 'gap': 1.0000000000000037e-08, 'relative gap': 1.0000000100000038e-08, 'primal objective': 1.0, 'dual objective': 0.99999999, 'primal infeasibility': 7.401486830834377e-17, 'dual infeasibility': 7.99999997569013e-09, 'primal slack': 1.0000000000000002, 'dual slack': 1.0000000000000035e-08, 'iterations': 4}
[-1.00e+00]
[ 1.00e+00]

1.0
  • 気づいたこと(多分そういうことだと思う)

    • 最適化問題を解く上で投入する配列は、matrixを用いて作成する

    • 制約条件は、式の形で表さない。引数で投入する。

現在のコード

import scipy.cluster.hierarchy as sch
import numpy as np
import pandas as pd
import datetime as date
import matplotlib.pyplot as plt
import cvxopt as opt