数学建模社区-数学中国

标题: 求动态规划的MATLAB程序,要通用性强的 [打印本页]

作者: majiancumt    时间: 2009-12-21 21:27
标题: 求动态规划的MATLAB程序,要通用性强的
求动态规划的MATLAB程序,要通用性强的如dynprog
作者: hugoczx    时间: 2009-12-21 23:20
有是有                              
# |* o0 l  B; O' N; p2 l不过不能白给!
作者: pigyoung    时间: 2009-12-22 23:33
楼上啊楼上。。。。。。。。你为啥和我想的一样呢?
作者: majiancumt    时间: 2009-12-29 21:08
回复 2# hugoczx
: O; R' t" t# D
% `: Q/ ~5 H9 f% u/ ^7 N0 O/ Y; A4 l2 g$ [, R4 D& M8 G; p
    那卖给我吧,邮箱majiancumt@126.com
作者: hugoczx    时间: 2009-12-29 23:39
回复 4# majiancumt
0 Q; j( K3 Y, S" o
8 F. b: U' j8 {  B( y/ S1 k/ J$ _) ?/ o! o
    已经邮件了!
作者: majiancumt    时间: 2010-3-12 23:15
回复 5# hugoczx + a0 V: q* M( A; e+ t- I; [

9 {4 D$ N4 e9 Z
5 G4 u* W3 ^% G% U    没收到,qq 879900626 盼望联系
作者: hnldcgh    时间: 2010-4-9 15:00
hugoczx给我一份吧,hnldcgh@163.com谢谢
作者: haoshuang3394    时间: 2010-4-23 11:43
干吗那么神秘?不就是一个资料吗?
作者: yuechenkai    时间: 2010-7-13 18:33
hugoczx给我一份吧,yuechenkai@163.com谢谢
作者: 王二你好    时间: 2010-7-18 18:26
这资料都搞的好神秘啊
作者: ranxh    时间: 2010-8-7 09:23
大家可以相互共享啥!
作者: yanfeiyunlian    时间: 2010-8-12 19:43
YUN ,怎么都这样啊
作者: tulian.2010    时间: 2010-8-15 02:12
现在正在学!!!!!!!!!!
作者: 16907860    时间: 2011-2-21 21:33
其实DP仅适用于小规模问题的求解,工程问题较困难!
作者: apouler    时间: 2011-4-11 13:15
还是分享吧,呵呵
作者: 梦雅沁    时间: 2011-8-2 20:48
我也想要 也给我吧  1454016909QQ的邮箱
作者: jmedwardliu1205    时间: 2011-9-1 23:16

作者: harry0326    时间: 2011-9-7 21:33
呵呵,动态规划是一门艺术不是技术,不可能有通解的,这句话是数学大师说的。具体哪个忘了,你们有?可能吗
作者: 花开终为败    时间: 2011-11-15 00:09

作者: sam_yat    时间: 2012-5-31 14:37
同学习下,希望有人解答。  
作者: danieldu    时间: 2012-5-31 22:40
看看看看那
作者: madio    时间: 2014-8-22 10:06
  1. function [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun)       5 b; @" N) U4 D, |9 A4 U  P6 Y
  2. % [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun)( ]: f5 d) y  z. M2 I$ q( ^# r
  3. % 自由始端和终端的动态规划,求指标函数最小值的逆序算法递归7 r, }4 d. m% x9 H6 R
  4. % 计算程序。x是状态变量,一列代表一个阶段状态;M-函数6 V# z" ]4 s$ @' I  W) ~. Z! {
  5. % DecisFun(k,x)由阶段k的状态变量x求出相应的允许决策变量;
    9 C* j5 ^) N; e9 O3 S8 _/ M
  6. % M-函数ObjFun(k,x,u)是阶段指标函数,M-函数TransFun(k,x,u)6 F" \/ B) b' Y
  7. % 是状态转移函数,其中x是阶段k的某状态变量,u是相应的决策变量;/ c6 t9 |# `1 M& h4 v+ ]6 X  |
  8. % 输出p_opt由4列构成,p_opt=[序号组;最优策略组;最优轨线组;8 l8 m$ q0 G. \: x
  9. % 指标函数值组];fval是一个列向量,各元素分别表示p_opt各
    / \5 B! ^5 S# m
  10. % 最优策略组对应始端状态x的最优函数值;; z: q" [; b9 K; Y- t
  11. %1 y9 v: k  M! ]9 G
  12. %例(参看胡良剑等编《数学实验--使用MATLAB》P180
    8 f1 y9 d) V' q' B
  13. %先写3个函数
    4 l7 |0 u$ ?/ X% j* f# h
  14. %                 eg13f1_2.m4 P- a% F& V  Y# S6 D$ b
  15. %    function u=DecisF_1(k,x)
    9 c2 w8 P0 G7 S8 l+ Z2 X
  16. %    在阶段k由状态变量x的值求出其相应的决策变量所有的取值
    . ~/ o+ U6 Q+ u/ C) w7 |
  17. %    c=[70,72,80,76];q=10*[6,7,12,6];7 v7 k7 I/ Z0 e; {
  18. %    if q(k)-x<0,u=0:100;       %决策变量不能取为负值
    3 R& l% C. Z' E: M+ _! ]7 z( E
  19. %    else,u=q(k)-x:100;end;     %产量满足需求且不超过100; |  n; M/ c4 e0 m/ e8 S# E' m
  20. %    u=u(:);
    7 ]- ]4 T- F. h. }- [. r$ J
  21. %                 eg13f2_2.m; M* B7 @9 }) i( G
  22. %    function v=ObjF_1(k,x,u)& c1 H! a1 Q+ F
  23. %    阶段k的指标函数
    8 K, }0 [: s! Y- ^7 @$ ]* J: \
  24. %    c=[70,72,80,76];v=c(k)*u+2*x;
    + Q/ Z" A" y3 W- @, O! U" @& d
  25. %                 eg13f3_2.m% N" H  T. D! F( d
  26. %    function y=TransF_1(k,x,u)
    6 ^: @1 d* }4 @0 U7 w. ~* R$ ~
  27. %     状态转移方程9 y# S6 ^2 U1 \' d, L+ Q' s
  28. %     q=10*[6,7,12,6];y=x+u-q(k);( }0 o8 E+ L; s7 W$ E* M4 j
  29. %调用DynProg.m计算如下:
    5 ]# {" d0 p1 @) h9 W& [2 P
  30. %    clear;x=nan*ones(14,4);% x是10的倍数,最大范围0≤x≤130,9 Q8 [) G  {. e; O
  31. %       %因此x=0,1,...13,所以x初始化取14行,nan表示无意义元素
    ( k% A7 V; X4 M" W. C, L; t
  32. %    x(1:7,1)=10*(0:6)';     % 按月定义x的可能取值
    $ I0 C6 w8 R& o% e9 E  n3 T
  33. %    x(1:11,2)=10*(0:10)';x(1:12,3)=10*(2:13)';' H( D4 i$ k6 y& F2 l- O, R9 O
  34. %    x(1:7,4)=10*(0:6)';
      m: n) E6 z; Y# i! Y, Q; L
  35. %    [p,f]=dynprog(x,'eg13f1_2','eg13f2_2','eg13f3_2'); K' {- j9 I& a

  36. $ h1 g6 V3 {7 x' J3 q! R0 e+ ~9 k
  37. % By X.D. Ding June 2000
    1 u# z; W, f* K, R0 h# }, T

  38. " O3 U  U) t3 }. r) \5 D
  39. k=length(x(1,:));f_opt=nan*ones(size(x));d_opt=f_opt;  j) a( h  F7 j3 n# i
  40. t_vubm=inf*ones(size(x));x_isnan=~isnan(x);t_vub=inf;8 N4 g; n/ Z+ R+ K  e
  41. % 计算终端相关值
    4 s' x  m& B# k' M
  42. tmp1=find(x_isnan(:,k));tmp2=length(tmp1);9 P. [* @: g( L8 d. g' Q, P5 U
  43. for i=1:tmp2  P1 j5 @! I2 C2 `! h+ W. K! n: j
  44.    u=feval(DecisFun,k,x(i,k));tmp3=length(u);. f7 T) y3 v0 `+ z1 V4 {6 l
  45.    for j=1:tmp3  b  Q3 t- T, T1 D! U9 ^4 M  _2 P
  46.          tmp=feval(ObjFun,k,x(tmp1(i),k),u(j));
      V  M' a. h) k& y" h
  47.          if tmp<=t_vub,   S9 m0 f& }7 V# j
  48.             f_opt(i,k)=tmp;d_opt(i,k)=u(j);t_vub=tmp;
    ) n6 R: t" ]8 c4 k- q
  49. end;end;end- r. ^4 H+ V+ A/ r4 o0 L
  50. % 逆推计算各阶段的递归调用程序% o2 B) g2 j, o
  51. for ii=k-1:-1:1
    " s- ^8 N# j. P( {
  52.    tmp10=find(x_isnan(:,ii));tmp20=length(tmp10);
    7 y; x/ v+ @% e" N/ Z
  53.    for i=1:tmp20
    ) Q) x* H! N- f* `# n, v7 O
  54.       u=feval(DecisFun,ii,x(i,ii));tmp30=length(u);; d: c: T  Y! M1 B# c- ]
  55.       for j=1:tmp30
    . s: C+ A1 r# n- _4 L
  56.          tmp00=feval(ObjFun,ii,x(tmp10(i),ii),u(j));
    1 |( w+ k; e! C* C! G
  57.          tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j));
    9 O; O* S( w* j: K4 v* i2 D
  58.          tmp50=x(:,ii+1)-tmp40;
    , U; m$ S" n8 m; b3 Y3 t$ g, p
  59.          tmp60=find(tmp50==0);+ Q& e, |1 V$ |; t
  60.          if ~isempty(tmp60),
    . h5 x' X# l/ W4 h5 o2 l8 L
  61.             tmp00=tmp00+f_opt(tmp60(1),ii+1);   
    2 c5 L4 l* e+ B
  62.             if tmp00<=t_vubm(i,ii)6 Q! F: f! T5 N3 P0 r7 C0 W; ]
  63.                f_opt(i,ii)=tmp00;d_opt(i,ii)=u(j);2 n$ Q$ P; u  [: h% p8 v
  64.                t_vubm(i,ii)=tmp00;
    : T' D( Q. J  E6 j. C4 Y
  65. end;end;end;end;end;
    ! g7 g: b4 V$ Q2 ^3 u4 n- G, f
  66. fval=f_opt(tmp1,1);2 t" q, u" q  R) a& P+ {
  67. % 记录最优决策、最优轨线和相应指标函数值5 E. V8 m- i0 S
  68. p_opt=[];tmpx=[];tmpd=[];tmpf=[];5 j) b) H4 o/ Q/ V+ j9 ^
  69. tmp0=find(x_isnan(:,1));tmp01=length(tmp0);4 C8 ?* u" S* x: C5 B- X
  70. for i=1:tmp01,2 Q" K# u+ C* \) I
  71.   tmpd(i)=d_opt(tmp0(i),1);
    ' \% N' k9 n7 _. ~, V6 y, I# M% F1 F
  72.   tmpx(i)=x(tmp0(i),1);
    + U* j0 [4 U# ^3 O+ M0 b
  73.   tmpf(i)=feval(ObjFun,1,tmpx(i),tmpd(i));
    : J6 U1 e0 e& _
  74.   p_opt(k*(i-1)+1,[1,2,3,4])=[1,tmpx(i),...
    ; F+ B" S1 c. [3 |* q8 f
  75. tmpd(i),tmpf(i)];& S: F+ q; O) `; D5 d: [7 v  A/ e8 o
  76.   for ii=2:k& w/ G0 ~  d' h
  77.      tmpx(i)=feval(TransFun,ii-1,tmpx(i),tmpd(i));( c: o7 D* d: ~6 M
  78.      tmp1=x(:,ii)-tmpx(i);tmp2=find(tmp1==0);5 R8 L* l: }5 G3 k& ^) K
  79.      if ~isempty(tmp2)& m4 s% p6 |/ [% ?
  80.         tmpd(i)=d_opt(tmp2(1),ii);
    " ]2 @: x2 W# Q; _( m# y- |
  81.      end;
    & @- W8 e* `7 ~7 D5 E5 ]
  82.      tmpf(i)=feval(ObjFun,ii,tmpx(i),tmpd(i));5 f& |* r* b# z- F, |( l/ U
  83.      p_opt(k*(i-1)+ii,[1,2,3,4])=[ii,tmpx(i),...
    ! V7 T, M5 T* r3 @$ X3 \
  84. tmpd(i),tmpf(i)];
    ; u; ~. A( `, N: X
  85. end;end;3 F& C! g9 N( h* o' S/ ^
复制代码

作者: m存在    时间: 2014-8-26 18:44

作者: 张坤14    时间: 2014-10-5 12:51
hugoczx 发表于 2009-12-21 23:20 ) W# Z; ~# j  C3 s
有是有                              
+ C8 X+ s: V5 F不过不能白给!

" ~8 g$ b  u- A5 |7 R1 R$ g同求动态规划的源程序,现在其他的算法基本上都可以集成,就是动态规划没有了。希望大神赐教,我的qq邮箱1240258213@qq.com,谢谢。关于其他算法的集成, 可以与大神共享。
作者: 无语的昭昭    时间: 2015-2-4 20:47
额额额,其他地方很多啊
$ W$ S% {3 I3 P




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5