データ包絡分析
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[page back>ゼミ]]
*目次 [#f7a36e1d]
#CONTENTS
**1. はじめに [#tccc846c]
今回のデータ包絡問題のお話についてwikiを書く必要ある?と思...
**2. 目標 [#cf4603fb]
pythonプログラミングにより複数のインジケーターの組み合わ...
**3. データ包絡分析とは [#i67428c5]
Data Envelopment Analysis(DEA)の日本語略で,多入力多出力な...
データ包絡問題で解く分数計画問題は制約条件を増やすことで...
#ref(DEA_LP.pdf,,参考資料)
ということで,以下ではpythonで線形計画法を解いていく.
**4. 環境構築 [#b2acd992]
***実行環境 [#pbbe27cc]
今回はpython version 3.8.5でやっていく.まったく同じ環境じ...
pythonのバージョンはコマンドプロンプトで
python -V
で確認できる.
***環境構築手順 [#kecf4eb2]
pythonで線形計画問題を解くことのできるpulpパッケージが存...
pip install pulp
コマンドプロンプトで上記を実行.さらに動かすプログラムの中...
pip install pandas
環境構築は以上.pulpで線形計画問題を解きたいとき,基本的にp...
**5. 実行 [#ia49e5a8]
環境構築は済んだのでいよいよ実行に移ります.
***使用ファイル [#oe10ace9]
実行するpythonファイルは以下.今回はcsvファイルからデータ...
#ref(DEA3.py,,pythonファイル);
#ref(hyouka.csv,,csvファイル);
クリックでダウンロードできる.
***コードの説明 [#iea1c03b]
pythonファイルの中身を説明する.
import pulp
import pandas as pd
pulpとpandasを使うためにインポート.
dea_df = pd.read_csv('C:/Users/takky/富山県立大学/3年後...
in_df = dea_df[['Exposure Time [%]','Max. Drawdown [%]',...
out_df = dea_df[['Equity Final [$]','Equity Peak [$]','R...
指定したcsvファイルからデータを取ってきてin_dfとout_dfに...
problem = pulp.LpProblem('DEA_problem',pulp.LpMaximize)
線形計画問題の宣言.線形計画問題に名前を「DEA_problem」と...
u_in = []
for j in range(num_in):
exec(f"u_{j} = pulp.LpVariable('u_{j}', 0, 50 ,'C...
u_in.append(u_0)
u_in.append(u_1)
u_in.append(u_2)
u_in.append(u_3)
u_in.append(u_4)
u_in_df = pd.DataFrame(u_in)
u_in_df = u_in_df.T
v_out = []
for j in range(num_out):
exec(f"v_{j} = pulp.LpVariable('v_{j}', 0, 50 ,'C...
v_out.append(v_0)
v_out.append(v_1)
v_out.append(v_2)
v_out.append(v_3)
v_out.append(v_4)
v_out.append(v_5)
v_out.append(v_6)
v_out_df = pd.DataFrame(v_out)
v_out_df = v_out_df.T
変数の宣言.ひとつの線形計画問題を解くにあたって,その中で...
problem += (out_df.iat[i,0]*v_out_df.iat[0,0])
+ (out_df.iat[i,1]*v_out_df.iat[0,1])
+ (out_df.iat[i,2]*v_out_df.iat[0,2])
+ (out_df.iat[i,3]*v_out_df.iat[0,3])
+ (out_df.iat[i,4]*v_out_df.iat[0,4])
+ (out_df.iat[i,5]*v_out_df.iat[0,5])
+ (out_df.iat[i,6]*v_out_df.iat[0,6])
目的関数を宣言.目的関数の宣言はproblem+=(式)でできるので...
ここの部分をfor文で回そうとしたがそうすると,目的関数が上...
for j in range(num_sitenn):
problem += ((in_df.iat[j,0] * u_in_df.iat[0,0])
+ (in_df.iat[j,1] * u_in_df.iat[0,1])
+ (in_df.iat[j,2] * u_in_df.iat[0,2])
+ (in_df.iat[j,3] * u_in_df.iat[0,3])
+ (in_df.iat[j,4] * u_in_df.iat[0,4]))
- ((out_df.iat[j,0]*v_out_df.iat[0,0])
+ (out_df.iat[j,1]*v_out_df.iat[0,1])
+ (out_df.iat[j,2]*v_out_df.iat[0,2])
+ (out_df.iat[j,3]*v_out_df.iat[0,3])
+ (out_df.iat[j,4]*v_out_df.iat[0,4])
+ (out_df.iat[j,5]*v_out_df.iat[0,5])
+ (out_df.iat[j,6]*v_out_df.iat[0,6])) >= 0
problem += (in_df.iat[i,0] * u_in_df.iat[0,0])
+ (in_df.iat[i,1] * u_in_df.iat[0,1])
+ (in_df.iat[i,2] * u_in_df.iat[0,2])
+ (in_df.iat[i,3] * u_in_df.iat[0,3])
+ (in_df.iat[i,4] * u_in_df.iat[0,4]) == 1
for j in range(num_in):
problem += u_in_df.iat[0,j] >= 0
for j in range(num_out):
problem += v_out_df.iat[0,j] >= 0
制約条件の宣言.制約条件はproblem += (式) >= (式) のような...
すべての宣言が完了したのであとは問題を解くだけ.
problem.solve()
問題を解くのは簡単でproblem.solve()と入力すればOK.~
あとは計算した結果をresultリストに格納してprintしているだ...
***実行する前にやってほしいこと [#w474bbad]
実行する前にコードのcsvファイルのパスを指定している部分を...
FileNotFoundError: [Errno 2] No such file or directory:
こんな感じのエラーが出ます.
***実行 [#x2533237]
コマンドプロンプトなどを開いて先ほどダウンロードしたpytho...
cd C:\Users\~
ディレクトリを移動したら
python DEA3.py
で実行できる.
**6. 結果 [#e8972c52]
結果を載せます.
**7. 今後の課題 [#z71c6019]
今回,データ包絡問題(実際やってることは線形計画問題)を実装...
さすがに今のままだと使い物にならないので今後はいかに実行...
いろいろ試してみることがありそうなので今後試してみたとき...
**8. 2021年1月更新 [#u6a96db6]
データ包絡問題の考え方の中に,いままで解いてきた線形計画問...
ということでpythonで双対系として解くコードを実装したので...
#ref(sotui2.py,,更新プログラム)~
***補足 [#x20d0fc6]
上記の双対系のプログラムですが,普通に線形計画問題のを解く...
終了行:
[[page back>ゼミ]]
*目次 [#f7a36e1d]
#CONTENTS
**1. はじめに [#tccc846c]
今回のデータ包絡問題のお話についてwikiを書く必要ある?と思...
**2. 目標 [#cf4603fb]
pythonプログラミングにより複数のインジケーターの組み合わ...
**3. データ包絡分析とは [#i67428c5]
Data Envelopment Analysis(DEA)の日本語略で,多入力多出力な...
データ包絡問題で解く分数計画問題は制約条件を増やすことで...
#ref(DEA_LP.pdf,,参考資料)
ということで,以下ではpythonで線形計画法を解いていく.
**4. 環境構築 [#b2acd992]
***実行環境 [#pbbe27cc]
今回はpython version 3.8.5でやっていく.まったく同じ環境じ...
pythonのバージョンはコマンドプロンプトで
python -V
で確認できる.
***環境構築手順 [#kecf4eb2]
pythonで線形計画問題を解くことのできるpulpパッケージが存...
pip install pulp
コマンドプロンプトで上記を実行.さらに動かすプログラムの中...
pip install pandas
環境構築は以上.pulpで線形計画問題を解きたいとき,基本的にp...
**5. 実行 [#ia49e5a8]
環境構築は済んだのでいよいよ実行に移ります.
***使用ファイル [#oe10ace9]
実行するpythonファイルは以下.今回はcsvファイルからデータ...
#ref(DEA3.py,,pythonファイル);
#ref(hyouka.csv,,csvファイル);
クリックでダウンロードできる.
***コードの説明 [#iea1c03b]
pythonファイルの中身を説明する.
import pulp
import pandas as pd
pulpとpandasを使うためにインポート.
dea_df = pd.read_csv('C:/Users/takky/富山県立大学/3年後...
in_df = dea_df[['Exposure Time [%]','Max. Drawdown [%]',...
out_df = dea_df[['Equity Final [$]','Equity Peak [$]','R...
指定したcsvファイルからデータを取ってきてin_dfとout_dfに...
problem = pulp.LpProblem('DEA_problem',pulp.LpMaximize)
線形計画問題の宣言.線形計画問題に名前を「DEA_problem」と...
u_in = []
for j in range(num_in):
exec(f"u_{j} = pulp.LpVariable('u_{j}', 0, 50 ,'C...
u_in.append(u_0)
u_in.append(u_1)
u_in.append(u_2)
u_in.append(u_3)
u_in.append(u_4)
u_in_df = pd.DataFrame(u_in)
u_in_df = u_in_df.T
v_out = []
for j in range(num_out):
exec(f"v_{j} = pulp.LpVariable('v_{j}', 0, 50 ,'C...
v_out.append(v_0)
v_out.append(v_1)
v_out.append(v_2)
v_out.append(v_3)
v_out.append(v_4)
v_out.append(v_5)
v_out.append(v_6)
v_out_df = pd.DataFrame(v_out)
v_out_df = v_out_df.T
変数の宣言.ひとつの線形計画問題を解くにあたって,その中で...
problem += (out_df.iat[i,0]*v_out_df.iat[0,0])
+ (out_df.iat[i,1]*v_out_df.iat[0,1])
+ (out_df.iat[i,2]*v_out_df.iat[0,2])
+ (out_df.iat[i,3]*v_out_df.iat[0,3])
+ (out_df.iat[i,4]*v_out_df.iat[0,4])
+ (out_df.iat[i,5]*v_out_df.iat[0,5])
+ (out_df.iat[i,6]*v_out_df.iat[0,6])
目的関数を宣言.目的関数の宣言はproblem+=(式)でできるので...
ここの部分をfor文で回そうとしたがそうすると,目的関数が上...
for j in range(num_sitenn):
problem += ((in_df.iat[j,0] * u_in_df.iat[0,0])
+ (in_df.iat[j,1] * u_in_df.iat[0,1])
+ (in_df.iat[j,2] * u_in_df.iat[0,2])
+ (in_df.iat[j,3] * u_in_df.iat[0,3])
+ (in_df.iat[j,4] * u_in_df.iat[0,4]))
- ((out_df.iat[j,0]*v_out_df.iat[0,0])
+ (out_df.iat[j,1]*v_out_df.iat[0,1])
+ (out_df.iat[j,2]*v_out_df.iat[0,2])
+ (out_df.iat[j,3]*v_out_df.iat[0,3])
+ (out_df.iat[j,4]*v_out_df.iat[0,4])
+ (out_df.iat[j,5]*v_out_df.iat[0,5])
+ (out_df.iat[j,6]*v_out_df.iat[0,6])) >= 0
problem += (in_df.iat[i,0] * u_in_df.iat[0,0])
+ (in_df.iat[i,1] * u_in_df.iat[0,1])
+ (in_df.iat[i,2] * u_in_df.iat[0,2])
+ (in_df.iat[i,3] * u_in_df.iat[0,3])
+ (in_df.iat[i,4] * u_in_df.iat[0,4]) == 1
for j in range(num_in):
problem += u_in_df.iat[0,j] >= 0
for j in range(num_out):
problem += v_out_df.iat[0,j] >= 0
制約条件の宣言.制約条件はproblem += (式) >= (式) のような...
すべての宣言が完了したのであとは問題を解くだけ.
problem.solve()
問題を解くのは簡単でproblem.solve()と入力すればOK.~
あとは計算した結果をresultリストに格納してprintしているだ...
***実行する前にやってほしいこと [#w474bbad]
実行する前にコードのcsvファイルのパスを指定している部分を...
FileNotFoundError: [Errno 2] No such file or directory:
こんな感じのエラーが出ます.
***実行 [#x2533237]
コマンドプロンプトなどを開いて先ほどダウンロードしたpytho...
cd C:\Users\~
ディレクトリを移動したら
python DEA3.py
で実行できる.
**6. 結果 [#e8972c52]
結果を載せます.
**7. 今後の課題 [#z71c6019]
今回,データ包絡問題(実際やってることは線形計画問題)を実装...
さすがに今のままだと使い物にならないので今後はいかに実行...
いろいろ試してみることがありそうなので今後試してみたとき...
**8. 2021年1月更新 [#u6a96db6]
データ包絡問題の考え方の中に,いままで解いてきた線形計画問...
ということでpythonで双対系として解くコードを実装したので...
#ref(sotui2.py,,更新プログラム)~
***補足 [#x20d0fc6]
上記の双対系のプログラムですが,普通に線形計画問題のを解く...
ページ名: