数学建模社区-数学中国

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

作者: majiancumt    时间: 2009-12-21 21:27
标题: 求动态规划的MATLAB程序,要通用性强的
求动态规划的MATLAB程序,要通用性强的如dynprog
作者: hugoczx    时间: 2009-12-21 23:20
有是有                              , P6 |6 e  w1 I
不过不能白给!
作者: pigyoung    时间: 2009-12-22 23:33
楼上啊楼上。。。。。。。。你为啥和我想的一样呢?
作者: majiancumt    时间: 2009-12-29 21:08
回复 2# hugoczx
# K2 g' m4 c+ X6 _4 H2 d5 {9 h% O3 e* B3 }0 P1 E1 y

  p1 \! N, B8 q( \    那卖给我吧,邮箱majiancumt@126.com
作者: hugoczx    时间: 2009-12-29 23:39
回复 4# majiancumt + R& g4 c. ?  ^/ i8 y$ f- ^

( A( J9 [9 G- h4 E2 M+ O* Y$ t4 C% x( M1 A% F4 Z! }
    已经邮件了!
作者: majiancumt    时间: 2010-3-12 23:15
回复 5# hugoczx $ D. X9 F  c+ H  s

" d/ w0 B3 _; o) J& u+ K7 n5 o# ?. b- c0 t
    没收到,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)      
    8 B  i' J$ W+ V/ ~1 {! Z
  2. % [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun). A& M' q2 m$ I2 ]/ V! a: L; e
  3. % 自由始端和终端的动态规划,求指标函数最小值的逆序算法递归' N; J+ d6 d, R0 {7 x# K$ c
  4. % 计算程序。x是状态变量,一列代表一个阶段状态;M-函数$ J9 t% A0 m5 \- W1 F- e' y3 ^
  5. % DecisFun(k,x)由阶段k的状态变量x求出相应的允许决策变量;8 U" }; K( t+ r) Z, R5 e- X+ n
  6. % M-函数ObjFun(k,x,u)是阶段指标函数,M-函数TransFun(k,x,u)% ^0 B- `# D( O
  7. % 是状态转移函数,其中x是阶段k的某状态变量,u是相应的决策变量;
    ( g* ~# e2 f* K
  8. % 输出p_opt由4列构成,p_opt=[序号组;最优策略组;最优轨线组;
    % v( ~! Y9 ^6 N; ~( b
  9. % 指标函数值组];fval是一个列向量,各元素分别表示p_opt各4 D6 ~$ E2 u- T3 \# y# m
  10. % 最优策略组对应始端状态x的最优函数值;, t3 Q% Z, u  [( c" J' p
  11. %
    2 A* w+ k2 Q& j& V
  12. %例(参看胡良剑等编《数学实验--使用MATLAB》P180
    ) I3 f. V9 ]' |* i- c$ X
  13. %先写3个函数
    " g! l( k9 o4 e. a1 r5 X7 u; p
  14. %                 eg13f1_2.m
    * W) z) f7 m3 U- e
  15. %    function u=DecisF_1(k,x)
    8 n# `( G1 F( E* E3 Y8 v
  16. %    在阶段k由状态变量x的值求出其相应的决策变量所有的取值
    ( U6 e0 x( ?3 ^8 k6 ?# Y
  17. %    c=[70,72,80,76];q=10*[6,7,12,6];
    & T, s' r& f6 y
  18. %    if q(k)-x<0,u=0:100;       %决策变量不能取为负值
    3 A* H- @7 h. Q
  19. %    else,u=q(k)-x:100;end;     %产量满足需求且不超过100* E' V6 {  Q3 e8 |. z
  20. %    u=u(:);- \& ?3 U) z3 }* f3 J
  21. %                 eg13f2_2.m
    + w0 U8 b2 y* v
  22. %    function v=ObjF_1(k,x,u)( Q* R5 B1 W1 E$ k
  23. %    阶段k的指标函数
    ' j9 B8 {1 p% n* R7 X3 q0 T
  24. %    c=[70,72,80,76];v=c(k)*u+2*x;
    : |% _, ]& ?0 I9 s* H8 D2 X( G
  25. %                 eg13f3_2.m7 L& w" y. `5 ?) X% v
  26. %    function y=TransF_1(k,x,u)
    $ h- [  o" T- o. `8 E/ ]
  27. %     状态转移方程4 i, C: G0 T$ S
  28. %     q=10*[6,7,12,6];y=x+u-q(k);
    0 b/ g1 _# Z2 v& i1 M
  29. %调用DynProg.m计算如下:- E# S; m% O' j. }
  30. %    clear;x=nan*ones(14,4);% x是10的倍数,最大范围0≤x≤130,6 O' R  K% N) P" H8 _
  31. %       %因此x=0,1,...13,所以x初始化取14行,nan表示无意义元素# h  h0 ~; u1 f4 p& W4 [
  32. %    x(1:7,1)=10*(0:6)';     % 按月定义x的可能取值! ?' W' T+ d  i! w
  33. %    x(1:11,2)=10*(0:10)';x(1:12,3)=10*(2:13)';3 G) G- P3 J0 Z( T, ^7 l+ s
  34. %    x(1:7,4)=10*(0:6)';
    - }, Z  @4 r8 U3 g, H# Z
  35. %    [p,f]=dynprog(x,'eg13f1_2','eg13f2_2','eg13f3_2')
    ! r8 I# g; c4 Y4 l  u: O
  36. # p% e- m( q' o2 ^0 F( t8 c$ I) S
  37. % By X.D. Ding June 2000
    7 E" d" w  Q( g" T3 c. t* L3 Z. d

  38. - ?" z4 D  C. O6 o& }
  39. k=length(x(1,:));f_opt=nan*ones(size(x));d_opt=f_opt;
    # c+ X3 g! Q; S) j0 R5 Y! b% K
  40. t_vubm=inf*ones(size(x));x_isnan=~isnan(x);t_vub=inf;4 `$ @* z8 p$ ~, A
  41. % 计算终端相关值" ?' m# K' I* D4 ]9 j! L, r- C/ @( j
  42. tmp1=find(x_isnan(:,k));tmp2=length(tmp1);
    , c* Y6 ]+ B. R& U9 o
  43. for i=1:tmp2. n  a' X. \" w: k& y
  44.    u=feval(DecisFun,k,x(i,k));tmp3=length(u);/ z, ^) p# I; ]! T. |- R
  45.    for j=1:tmp3" W0 \, }, M  [& Z
  46.          tmp=feval(ObjFun,k,x(tmp1(i),k),u(j));
    ! G* J0 P  f( ~
  47.          if tmp<=t_vub,
    . H+ E1 S" Y" O
  48.             f_opt(i,k)=tmp;d_opt(i,k)=u(j);t_vub=tmp; $ L$ U9 J$ Z  j" E
  49. end;end;end$ d# e' a" P0 M  ?
  50. % 逆推计算各阶段的递归调用程序
    5 t; s1 S0 _5 u% W
  51. for ii=k-1:-1:17 {5 R: f% i% K4 D
  52.    tmp10=find(x_isnan(:,ii));tmp20=length(tmp10);
    5 ]" v& G  ?2 J
  53.    for i=1:tmp20
    ; ]  r2 _0 g* e' |, B5 M. k
  54.       u=feval(DecisFun,ii,x(i,ii));tmp30=length(u);. ?( _0 C9 P4 v9 I
  55.       for j=1:tmp30
    1 [4 B. c8 t$ d1 J8 S  B5 }, t( {7 [
  56.          tmp00=feval(ObjFun,ii,x(tmp10(i),ii),u(j));
    ) H/ m4 l, ]! q9 A7 C
  57.          tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j));
    8 [' v7 _! W- H) ^' }
  58.          tmp50=x(:,ii+1)-tmp40;* C. V, R  @0 [
  59.          tmp60=find(tmp50==0);
    6 ?$ d/ ]$ R2 N" I
  60.          if ~isempty(tmp60),1 c. n& l& `' v4 {# w
  61.             tmp00=tmp00+f_opt(tmp60(1),ii+1);   
      i! Q, I1 N4 {
  62.             if tmp00<=t_vubm(i,ii)
    & q0 d- L; W7 Z: {5 _5 ?6 c( f
  63.                f_opt(i,ii)=tmp00;d_opt(i,ii)=u(j);$ r. f$ L/ Y& ~* L* p
  64.                t_vubm(i,ii)=tmp00;
    1 q6 j+ B! U" y/ c2 H3 |
  65. end;end;end;end;end;
    & Z* m- m+ R5 h  u, w
  66. fval=f_opt(tmp1,1);
    : k9 F# {9 v2 @0 D, S4 r% i
  67. % 记录最优决策、最优轨线和相应指标函数值8 j% v' s. j6 o- j0 W
  68. p_opt=[];tmpx=[];tmpd=[];tmpf=[];# d8 x! R& R9 \3 {
  69. tmp0=find(x_isnan(:,1));tmp01=length(tmp0);
    0 m. M0 J5 |' F
  70. for i=1:tmp01,. y) m9 q/ |: S; f
  71.   tmpd(i)=d_opt(tmp0(i),1); : [0 [! E; F* ?2 F  V- o
  72.   tmpx(i)=x(tmp0(i),1);- k; J" ^# Q/ w: B( P: O. B4 ^
  73.   tmpf(i)=feval(ObjFun,1,tmpx(i),tmpd(i));
    9 ~; C/ d# |7 ]7 J* l
  74.   p_opt(k*(i-1)+1,[1,2,3,4])=[1,tmpx(i),..." c  f3 ^& o) u. r, P: T
  75. tmpd(i),tmpf(i)];7 T3 u/ Z# _% }4 U; u/ `1 n) E
  76.   for ii=2:k
    / l0 q4 Y6 N2 v5 n$ u
  77.      tmpx(i)=feval(TransFun,ii-1,tmpx(i),tmpd(i));) X: M5 q" a8 R% t  F) E: J. |* D
  78.      tmp1=x(:,ii)-tmpx(i);tmp2=find(tmp1==0);+ r' Q! Y! D* E1 X$ R5 K
  79.      if ~isempty(tmp2)
    8 y4 ?& L- ^7 ~
  80.         tmpd(i)=d_opt(tmp2(1),ii);0 |1 A6 y. ~1 o3 W, ^
  81.      end;
    . o7 p; I$ F# E, y3 C7 f9 [
  82.      tmpf(i)=feval(ObjFun,ii,tmpx(i),tmpd(i));
    & s* s' l9 M# k2 B5 N: W
  83.      p_opt(k*(i-1)+ii,[1,2,3,4])=[ii,tmpx(i),...
      i) `1 L8 t( t# `0 b
  84. tmpd(i),tmpf(i)];4 p0 b* O. t0 }9 J/ G8 a! s
  85. end;end;# `  M9 q& ~' @0 _, |
复制代码

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

作者: 张坤14    时间: 2014-10-5 12:51
hugoczx 发表于 2009-12-21 23:20
1 G! s- a- L) @6 R; R2 v, n9 i有是有                              
! _. B, Q+ v; s' k* I不过不能白给!
/ `  j  L) \4 \7 N# q$ m
同求动态规划的源程序,现在其他的算法基本上都可以集成,就是动态规划没有了。希望大神赐教,我的qq邮箱1240258213@qq.com,谢谢。关于其他算法的集成, 可以与大神共享。
作者: 无语的昭昭    时间: 2015-2-4 20:47
额额额,其他地方很多啊
/ C7 i& G( b% f) |




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