14가져오기matplotlib.pyplot
asplt
15from게임
가져오기GamsModifier, GamsWorkspace
22upper(s,s) '코바르 행렬의 일부'
23lower(s,s) '코바르 행렬의 일부';
29covar(s,s) '수익률의 공분산 행렬(상위)';
31$데이터가 설정되지 않은 경우 $abort '제공된 데이터 파일에 대한 포함 파일 이름이 없습니다'
52obj.. z =e= 람다*ret - (1-람다)*var;
54예산.. 합계(s, x(s)) =e= 1.0;
56varcon.. var =e= sum(upper(s,t), x(s)*covar(s,t)*x(t)) +
57sum(lower(s,t), x(s)*covar(t,s)*x(t));
59retcon..ret =e= 합계(들, 평균(들)*x(들));
64if__name__ ==
"__main__":
65sys_dir = sys.argv[1]
iflen(sys.argv) > 1
그밖에 없음
66work_dir = sys.argv[2]
iflen(sys.argv) > 2
그밖에 "."
67ws = GamsWorkspace(system_directory=sys_dir,working_directory=work_dir)
69작업 = ws.add_job_from_string(GAMS_MODEL)
71opt.all_model_types =
"conopt"
74경로(ws.system_directory,
"api파일",
"데이터",
"markowitz.gdx"),
75경로(ws.working_directory,
"markowitz.gdx"),
78markowitz_path = 경로(ws.working_directory,
"markowitz.gdx").resolve()
79opt.defines[
"데이터"] = f
'"markowitz_path"'
81cp = ws.add_checkpoint()
83mi = cp.add_modelinstance()
84l = mi.sync_db.add_parameter(
"람다", 0,
"")
85mi.instantiate(
"markowitz는 nlp max z를 사용합니다", GamsModifier(l))
91l.add_record().value = 0
93min_ret = mi.sync_db[
"ret"].first_record().level
94data_points.append((min_ret, mi.sync_db[
"var"].first_record().level))
95l.first_record().value = 1
97max_ret = mi.sync_db[
"ret"].first_record().level
98data_points.append((max_ret, mi.sync_db[
"var"].first_record().level))
105간격 = [((0.0, min_ret), (1.0, max_ret))]
113min_l, min_ret = i[0][0], i[0][1]
114max_l, max_ret = i[1][0], i[1][1]
116l_val = (min_l + max_l) / 2
117l.first_record().value = l_val
123cur_ret = mi.sync_db[
"ret"].first_record().level
124data_points.append((cur_ret, mi.sync_db[
"var"].first_record().level))
127 iffabs(cur_ret - min_ret) > 간격:
128intervals.append(((min_l, min_ret), (l_val, cur_ret)))
129 iffabs(cur_ret - max_ret) > 간격:
130intervals.append(((l_val, cur_ret), (max_l, max_ret)))
133data_points.sort(키=
람다tup: tup[0])
134ret = [x[0]
forx
in데이터_포인트]
135var = [x[1]
용x
에데이터_포인트]
136plt.plot(ret, var, marker=
".", 마커 크기=10)
139plt.savefig(경로(ws.working_directory,
"그림"))