楼主: stonexu1984
2497 7

求助如何用matlab解CDaR这个LP [推广有奖]

  • 0关注
  • 3粉丝

博士生

80%

还不是VIP/贵宾

-

威望
0
论坛币
288 个
通用积分
0.0001
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
2010 点
帖子
252
精华
1
在线时间
85 小时
注册时间
2006-4-15
最后登录
2020-6-12

楼主
stonexu1984 发表于 2007-4-4 01:35:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

max 1/dC *Y(N)*x

s.t. e+[1/(1-a)*N]*sum[z(k))]<= v*C

z(k)>= u(k)-y(k)*x-e

z(k)>=0

u(k)>=y(k)*x

u(k)>=u(k-1)

u(0) = 0

x(min) <= x <= x(max)

就是这么样的东西,最后要求的是x,但是s.t.当中是z(k),似乎有两个LP在里面,matlab(是linprog?)里如何定义那么多限制条件啊?

谢谢啦!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB matla atlab CDaR Atl 求助 MATLAB CDaR

沙发
irvingy 发表于 2007-4-4 10:04:00
以下是引用stonexu1984在2007-4-4 1:35:00的发言:

max 1/dC *Y(N)*x

s.t. e+[1/(1-a)*N]*sum[z(k))]<= v*C

z(k)>= u(k)-y(k)*x-e

z(k)>=0

u(k)>=y(k)*x

u(k)>=u(k-1)

u(0) = 0

x(min) <= x <= x(max)

就是这么样的东西,最后要求的是x,但是s.t.当中是z(k),似乎有两个LP在里面,matlab(是linprog?)里如何定义那么多限制条件啊?

谢谢啦!

这个没有做过,不过可以说一下

\zeta,z_k, u_k和x_k一样都视作变量,objective function里面只出现x_k,要补上\zeta,z_k和u_k的系数,全部都是0

这样所有的constraints可以写成A * v <= b,v = (\zeta,z_k,u_k,x_k),所以假如你每天一个y,N又狠多的话,会是一个无比巨大的矩阵

我怀疑即使matlab可以做,也要花一点时间。University of Florida那些人是用的现成的软件包,CPLEX,C++调用

顺便,上次你问egarch,我回了,你看到没

藤椅
stonexu1984 发表于 2007-4-4 12:35:00

哦,再补充一下, 应该是用linprog还是fminsearch?

x,e,u,z都是参数,只是目标方程里只有x

另外, u(k)=max{y(j)*x} 1<=j<=k,我本来以为这个很好做就省了,后来发现不对劲,y(j)是个1*m(资产数量)的vector, x(weight)是个m*1的vector,而x正好是我们要求的,这样算max(y*x)怎么算得出啊? 我以为可以写成max(y)*x...

原来你也知道是UFL那三个家伙啊, CDaR这个东西, 我看过一篇文章叫:基于CDaR的投资组合优化模型,作者颜立军,唐邵玲.里面他们用matlab做了,但是没有程序.我很想知道用matlab怎么做.

egarch的看到了,谢谢!

板凳
irvingy 发表于 2007-4-4 13:09:00

他用z_k,u_k,目的就是去掉约束条件里面的max(y_j * x),z_k,u_k都是auxiliary variables,需要和x,\zeta一起解出来

你把v = (x,z,u,\zeta)看成一个整个要求的向量

objective function现在就是

1/dC * y_N * x + 0 * z + 0 * u + 0 * \zeta

0是1 by N vector,z,u都是N by 1 vector,y_N是1 by m vector,x是m by 1 vector

相当于c * v,c是(y_N,0),1 by (m + 2 * N + 1) vector,v是(x, z,u,\zeta),(m + 2 * N + 1) by 1 vector

然后把所有的约束条件写成A * v <= b的形式,比如第二条z_k >= u_k - y_k * x - \zeta,现在写成

- y_{1,1} * x_1 - y_{1,2} * x_2 - ... - y_{1,m} * x_m + 1 * z_1 + 0 * z_2 + ... + 0 * z_N + 1 * u_1 + 0 * u_2 + ... + 0 * u_N - \zeta <= 0

- y_{2,1} * x_1 - y_{2,2} * x_2 - ... - y_{2,m} * x_m + 0 * z_1 + 1 * z_2 + ... + 0 * z_N + 0 * u_1 + 1 * u_2 + ... + 0 * u_N - \zeta <= 0

...

- y_{N,1} * x_1 - y_{N,2} * x_2 - ... - y_{N,m} * x_m + 0 * z_1 + 0 *z_2 + ... + 1 * z_N + 0 * u_1 + 0 * u_2 + ... + 1 * u_N - \zeta <= 0

以此类推,所以你最后拿到一个巨大的sparse matrix A

最后的形式是

max c * v

s.t. A * v <= b

标准的linear programming,用linprog

[此贴子已经被作者于2007-4-4 13:17:03编辑过]

报纸
stonexu1984 发表于 2007-4-4 13:38:00

啊...我以为求最大最小值都是用fminsearch! 两者区别大么?

我没用过linprog,在linprog里还是用optimset定义option的约束条件?

比如你说的第二个约束条件

如果N很大的话,难道需要用循环定义?

地板
irvingy 发表于 2007-4-4 14:17:00

这个不好用fminsearch,fminsearch是unconstrained,能用linear programming当然用了,这个早就被研究的透透的了,各种解法都成熟,fminsearch是numerical optimization,local search,optimization的最后一条路。optimset定义的是optimization的选项,比如tolerance,要不要display,等等,不是定义constraint matrix A的。

定义A不用循环,matlab里能不用就不用,其实那些条件都是有规律的,以第二个为例,假如你已经有y了,N by m,一行就是一天,一列就是1个asset

A = [-y, eye(N), eye(N), -ones(N, 1)];

b = zeros(N, 1);

其他的写出以后按行加上去,最后用一下A = sparse(A),可能解的时候快一点

还有linprog是minimization,所以要把max c * v换成min - c * v

7
stonexu1984 发表于 2007-4-4 14:37:00

哈哈,还没睡啊?你在加州吧,我这都3点半了

[此贴子已经被作者于2007-4-4 15:30:29编辑过]

8
irvingy 发表于 2007-4-4 23:15:00
以下是引用stonexu1984在2007-4-4 14:37:00的发言:

哈哈,还没睡啊?你在加州吧,我这都3点半了

齐家沟,晚你一小时

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-9 15:25