# AMPL Model by Vivek S. Mahanta # # Copyright (C) 2008 Drexel University # All Rights Reserved # # Permission to use, copy, modify, and distribute this software and # its documentation for any purpose and without fee is hereby # granted, provided that the above copyright notice appear in all # copies and that the copyright notice and this # permission notice appear in all supporting documentation. # Source: # Matthias Ehrgott, Rafail N. Gasimov',"Multiobjective Programming and # Multiattribute Utility Functions in Portfolio Optimization" set A; # asset categories set T := {1973..1994}; # years param Ret default 0.05; param M default 100; param k default 5; param Wmin default 0.05; param R {T,A}; param P{A}; # Price of the assets param u {j in A} := (sum{i in T} R[i,j])/card(T); param Rtilde{i in T, j in A} := R[i,j] - u[j]; var t >= 0; var w{A} >= 0; var d{A} binary; #param uw # := sum{j in A} u[j]*w[j]; #param wQw # := sum{i in T} (sum{j in A} Rtilde[i,j]*w[j])^2/(card(T) - 1); # param y {j in A} integer; minimize risk: t; subject to prob_const: (sum{j in A} u[j]*w[j]) - (sum{i in T} (sum{j in A} Rtilde[i,j]*w[j])^2/(card(T) - 1))^0.5 >= Ret; subject to t_const: t >= (sum{i in T} (sum{j in A} Rtilde[i,j]*w[j])^2/(card(T) - 1))^0.5; subject to tot_mass: sum{j in A} w[j] = 1; subject to w_d {j in A}: w[j] <= d[j]; subject to wmin_d {j in A}: Wmin*d[j] <= w[j]; subject to count_assets: sum{j in A} d[j] = k; data; set A := US_3-MONTH_T-BILLS US_GOVN_LONG_BONDS SP_500 WILSHIRE_5000 NASDAQ_COMPOSITE LEHMAN_BROTHERS_CORPORATE_BONDS_INDEX EAFE GOLD; param R: US_3-MONTH_T-BILLS US_GOVN_LONG_BONDS SP_500 WILSHIRE_5000 NASDAQ_COMPOSITE LEHMAN_BROTHERS_CORPORATE_BONDS_INDEX EAFE GOLD := 1973 1.075 0.942 0.852 0.815 0.698 1.023 0.851 1.677 1974 1.084 1.020 0.735 0.716 0.662 1.002 0.768 1.722 1975 1.061 1.056 1.371 1.385 1.318 1.123 1.354 0.760 1976 1.052 1.175 1.236 1.266 1.280 1.156 1.025 0.960 1977 1.055 1.002 0.926 0.974 1.093 1.030 1.181 1.200 1978 1.077 0.982 1.064 1.093 1.146 1.012 1.326 1.295 1979 1.109 0.978 1.184 1.256 1.307 1.023 1.048 2.212 1980 1.127 0.947 1.323 1.337 1.367 1.031 1.226 1.296 1981 1.156 1.003 0.949 0.963 0.990 1.073 0.977 0.688 1982 1.117 1.465 1.215 1.187 1.213 1.311 0.981 1.084 1983 1.092 0.985 1.224 1.235 1.217 1.080 1.237 0.872 1984 1.103 1.159 1.061 1.030 0.903 1.150 1.074 0.825 1985 1.080 1.366 1.316 1.326 1.333 1.213 1.562 1.006 1986 1.063 1.309 1.186 1.161 1.086 1.156 1.694 1.216 1987 1.061 0.925 1.052 1.023 0.959 1.023 1.246 1.244 1988 1.071 1.086 1.165 1.179 1.165 1.076 1.283 0.861 1989 1.087 1.212 1.316 1.292 1.204 1.142 1.105 0.977 1990 1.080 1.054 0.968 0.938 0.830 1.083 0.766 0.922 1991 1.057 1.193 1.304 1.342 1.594 1.161 1.121 0.958 1992 1.036 1.079 1.076 1.090 1.174 1.076 0.878 0.926 1993 1.031 1.217 1.100 1.113 1.162 1.110 1.326 1.146 1994 1.045 0.889 1.012 0.999 0.968 0.965 1.078 0.990 ; param P:= US_3-MONTH_T-BILLS 100 US_GOVN_LONG_BONDS 32 SP_500 78 WILSHIRE_5000 56 NASDAQ_COMPOSITE 43 LEHMAN_BROTHERS_CORPORATE_BONDS_INDEX 100 EAFE 55 GOLD 78; solve; display t,d, w; printf: "Return = %10.7f \n", sum{j in A} u[j]*w[j]*P[j];