lingo 投资组合问题
铝合金般你琴姐
2024-09-28 03:47:28
最佳回答
观察下a*x*r-(1-a)*x*q=x*(a*r-(1-a)*q);当a=0,a*r-(1-a)*q=-q;当a=1,a*r-(1-a)*q=r;那么0<=a<=1,则有-q(i)<=a*r(i)-(1-a)*q(i)<=r(i);我们由不同的i对a*r(i)-(1-a)*q(i)=m(i)的大小排序,假设对输入的a,存在m(1),m(2)……m(10),这10个值里面最大的是m(k),1<=k<=10,则要使@sum(stocks:a*x*r-(1-a)*x*q)=@sum(stocks:x(a*r-(1-a)*q))最大,而@sum(stocks:x)=m,假设m存在分量dx,那么应该尽量把dx分配到x(k)上去,即dx(a*r(k)-(1-a)*q(k)),比分配到其他x(j)有效,即比dx(a*r(j)-(1-a)*q(j))增加的多,所以最终结果是将m=1全部分配到x(k)上。随着改变a来调节m(k)最大值出现的位置,x(k)=1将取不同的k值。例如:model:sets: stocks/1..10/:x,q,r;endsetsdata: m=1; a=?; r=0.389776165,0.097561267,0.023470243,0.281206808,0.390689223,1.081013575,0.048511427,0.062998466,0.068605725,0.068982759;q=0.161831268,0.14801282,0.127808518,0.13004923,0.19365783,0.255347072,0.120788376,0.151881205,0.167771785,0.198562765;enddata[obj] max=@sum(stocks:a*x*r-(1-a)*x*q);@sum(stocks:x)=m;@for(stocks:@bnd(0,x,1));@bnd(0,a,1);end 输入0.01,结果:x(7)=1;输入0.1,结果:x(4)=1;输入0.2,结果:x(6)=1;希望我的分析对你有所帮助! 20210311