数学建模社区-数学中国

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

作者: majiancumt    时间: 2009-12-21 21:27
标题: 求动态规划的MATLAB程序,要通用性强的
求动态规划的MATLAB程序,要通用性强的如dynprog
作者: hugoczx    时间: 2009-12-21 23:20
有是有                              0 o  q, a4 F& j: g
不过不能白给!
作者: pigyoung    时间: 2009-12-22 23:33
楼上啊楼上。。。。。。。。你为啥和我想的一样呢?
作者: majiancumt    时间: 2009-12-29 21:08
回复 2# hugoczx
1 O' P6 s: h3 ?4 S0 m$ ?% p6 C% @( `/ P

/ B: s. j9 z5 V6 w# J/ s# }- u    那卖给我吧,邮箱majiancumt@126.com
作者: hugoczx    时间: 2009-12-29 23:39
回复 4# majiancumt ; Q7 D  y) B( T- f* P& I
- j+ i/ y7 l0 j0 @+ Y* m

# S9 o6 m0 ]" U! v) a. N    已经邮件了!
作者: majiancumt    时间: 2010-3-12 23:15
回复 5# hugoczx
+ ?0 e; e( m, r. c5 E4 V1 U
, h0 w2 p% _7 J: Q  B+ ^9 i. \6 K' r+ l4 B
    没收到,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)      
    " c6 z. z# O' j6 m
  2. % [p_opt,fval]=dynprog(x,DecisFun,ObjFun,TransFun)
    - g( c- k+ P+ k* i, M- X
  3. % 自由始端和终端的动态规划,求指标函数最小值的逆序算法递归
    1 p% u  W& b3 A" l& A* R- T
  4. % 计算程序。x是状态变量,一列代表一个阶段状态;M-函数1 A$ H( M5 ?! b, }% _! X
  5. % DecisFun(k,x)由阶段k的状态变量x求出相应的允许决策变量;5 T' J: V3 s. c
  6. % M-函数ObjFun(k,x,u)是阶段指标函数,M-函数TransFun(k,x,u)
    & d: n' _( u! \2 |3 t5 `
  7. % 是状态转移函数,其中x是阶段k的某状态变量,u是相应的决策变量;
    & b2 H- O$ M) P. Q. `" r
  8. % 输出p_opt由4列构成,p_opt=[序号组;最优策略组;最优轨线组;! p9 u  ~7 v* h) C( J
  9. % 指标函数值组];fval是一个列向量,各元素分别表示p_opt各/ t* L4 O; R7 b0 @& v
  10. % 最优策略组对应始端状态x的最优函数值;  X2 r5 K1 X3 r
  11. %( G8 h# r. P/ S( G
  12. %例(参看胡良剑等编《数学实验--使用MATLAB》P180
    : d1 Q* E1 a% Z: w2 {
  13. %先写3个函数) E5 u) ~/ {9 K+ ]9 A4 ]' U
  14. %                 eg13f1_2.m. ^7 k; L2 Y# z, e' _
  15. %    function u=DecisF_1(k,x)9 r4 s. h9 ]6 n& V& C
  16. %    在阶段k由状态变量x的值求出其相应的决策变量所有的取值
    / u) x% ]+ ?6 e$ I/ m, j' O$ z
  17. %    c=[70,72,80,76];q=10*[6,7,12,6];# q0 R, n1 ~3 x8 ^
  18. %    if q(k)-x<0,u=0:100;       %决策变量不能取为负值
    2 ~- X1 Y% h6 T/ l% ^
  19. %    else,u=q(k)-x:100;end;     %产量满足需求且不超过100; }* p" L; k) l6 [8 V  v! n
  20. %    u=u(:);
    # `: g, \0 j! A( X3 @6 T
  21. %                 eg13f2_2.m, \1 `7 T5 g1 Q. _  s* K
  22. %    function v=ObjF_1(k,x,u)
    " n& d# Z8 B+ Q2 F5 ?4 f, Q" J
  23. %    阶段k的指标函数% y! O4 |0 H4 O* H5 R! p. J4 x* e
  24. %    c=[70,72,80,76];v=c(k)*u+2*x;
    ! c5 |* Z9 b( N2 ~* m$ p' k2 e
  25. %                 eg13f3_2.m( u, |, d. F5 v4 x4 B
  26. %    function y=TransF_1(k,x,u)
    % ]  t; r) [) b) g# d1 X* F& d
  27. %     状态转移方程3 r; }8 m4 b' y% w& G! U1 R8 g
  28. %     q=10*[6,7,12,6];y=x+u-q(k);
    ; K1 C4 j! t; ^: L
  29. %调用DynProg.m计算如下:
    " _/ F; A  O/ {0 ~1 l* b0 E
  30. %    clear;x=nan*ones(14,4);% x是10的倍数,最大范围0≤x≤130,) o7 O; D+ E$ q9 f
  31. %       %因此x=0,1,...13,所以x初始化取14行,nan表示无意义元素  j. b5 t8 u$ D9 }: v
  32. %    x(1:7,1)=10*(0:6)';     % 按月定义x的可能取值% A5 G8 w4 Y' ?- l% ^1 }5 V4 _
  33. %    x(1:11,2)=10*(0:10)';x(1:12,3)=10*(2:13)';
    ( t9 B' [! L- i0 t/ j3 X" G
  34. %    x(1:7,4)=10*(0:6)';+ ?! V% }7 Y" P! H$ e" J
  35. %    [p,f]=dynprog(x,'eg13f1_2','eg13f2_2','eg13f3_2')- ~, t; x, k% h5 O: @& D
  36. ; a1 ]' b6 r+ N3 E
  37. % By X.D. Ding June 2000$ [0 c: `+ Z/ Q8 P, Y+ M& `) h

  38. ; q- D# i3 B  U% }2 [
  39. k=length(x(1,:));f_opt=nan*ones(size(x));d_opt=f_opt;2 a1 z3 f+ s1 u) {
  40. t_vubm=inf*ones(size(x));x_isnan=~isnan(x);t_vub=inf;9 x" {1 o. F+ N7 w& r
  41. % 计算终端相关值. X% _$ v0 v- e9 }1 g7 T
  42. tmp1=find(x_isnan(:,k));tmp2=length(tmp1);
    + o( d2 [2 m1 s* `5 a/ ^
  43. for i=1:tmp2
    . T" g$ {3 m+ m1 s2 D: T  P
  44.    u=feval(DecisFun,k,x(i,k));tmp3=length(u);
    0 ?, m1 C8 n6 F% P
  45.    for j=1:tmp3& V: V  h4 Y: G
  46.          tmp=feval(ObjFun,k,x(tmp1(i),k),u(j));. {- l  z/ B' V3 P
  47.          if tmp<=t_vub, % v, x& o2 R. L* q, X
  48.             f_opt(i,k)=tmp;d_opt(i,k)=u(j);t_vub=tmp; 8 v' v. ?& ^- {$ N2 A( J
  49. end;end;end
    + o- Y7 G! m# Y9 K
  50. % 逆推计算各阶段的递归调用程序
    - Z& V: o0 g+ a
  51. for ii=k-1:-1:1
    ! m8 F* S) T4 W4 \- d
  52.    tmp10=find(x_isnan(:,ii));tmp20=length(tmp10);4 x$ `7 E0 t/ R# L" k  S5 X
  53.    for i=1:tmp20" Q& g  A$ E! l0 T0 U
  54.       u=feval(DecisFun,ii,x(i,ii));tmp30=length(u);# W- _* L4 R8 Z4 E) S' X
  55.       for j=1:tmp30
    / e) x$ c5 l& g; @& U7 U! e
  56.          tmp00=feval(ObjFun,ii,x(tmp10(i),ii),u(j));1 P$ a0 a8 _7 X! I2 ]+ p  f2 a
  57.          tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j));, l% t3 F. L( h5 c! X8 a
  58.          tmp50=x(:,ii+1)-tmp40;0 C/ C- m3 b  B$ h7 g8 h1 l
  59.          tmp60=find(tmp50==0);
    , L2 L: h) P1 h8 q
  60.          if ~isempty(tmp60),( E, n3 x( P8 R5 ^% G' y# c8 o
  61.             tmp00=tmp00+f_opt(tmp60(1),ii+1);    $ r9 {, H( X% @& I% }% Q+ g
  62.             if tmp00<=t_vubm(i,ii)7 T- C1 n9 w9 v# b
  63.                f_opt(i,ii)=tmp00;d_opt(i,ii)=u(j);: @  ?# ~- e: G6 G# E" d
  64.                t_vubm(i,ii)=tmp00;
    8 I) T* I0 V4 j' _
  65. end;end;end;end;end;& Q, Y$ r1 m* X* N+ ?
  66. fval=f_opt(tmp1,1);/ ^! U, O, ^1 Z# R0 @* K3 K7 T
  67. % 记录最优决策、最优轨线和相应指标函数值3 x7 R! [1 r; a( [4 ^$ \2 H6 X
  68. p_opt=[];tmpx=[];tmpd=[];tmpf=[];$ [9 R# h3 b' h. ]& l" y1 i
  69. tmp0=find(x_isnan(:,1));tmp01=length(tmp0);
    3 m$ s+ c  [3 s# n7 B: g$ @# ~
  70. for i=1:tmp01,
    2 s$ t% @/ [4 r
  71.   tmpd(i)=d_opt(tmp0(i),1);
      o# o3 v" |! K' ]6 ?" S
  72.   tmpx(i)=x(tmp0(i),1);9 U9 f, p) [) X6 [, J) T" p( v
  73.   tmpf(i)=feval(ObjFun,1,tmpx(i),tmpd(i));
    . u" \$ A# F, ]7 ?" \
  74.   p_opt(k*(i-1)+1,[1,2,3,4])=[1,tmpx(i),..." E* t+ t, X4 C0 s
  75. tmpd(i),tmpf(i)];
    / ~% M4 g3 V* u) i5 E: J4 K
  76.   for ii=2:k
    * U. ~: T0 b3 B" e1 L/ b
  77.      tmpx(i)=feval(TransFun,ii-1,tmpx(i),tmpd(i));
    - j8 L' Z- {- V; Q0 y1 j
  78.      tmp1=x(:,ii)-tmpx(i);tmp2=find(tmp1==0);
    . C) k. {' K4 @+ x
  79.      if ~isempty(tmp2)
    2 P& ]& g" M( J3 `$ }
  80.         tmpd(i)=d_opt(tmp2(1),ii);
    2 y& {8 u$ m) M# p5 A; Y% ^- J
  81.      end;
    : x" G- K& _+ U% u9 F/ J& W0 J* {; ]
  82.      tmpf(i)=feval(ObjFun,ii,tmpx(i),tmpd(i));* y4 B4 @+ Z) Q
  83.      p_opt(k*(i-1)+ii,[1,2,3,4])=[ii,tmpx(i),...3 Q  W' \" V8 ^- \
  84. tmpd(i),tmpf(i)];5 l$ {* {; G$ f- f
  85. end;end;! R* q9 T+ R% q$ G0 r
复制代码

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

作者: 张坤14    时间: 2014-10-5 12:51
hugoczx 发表于 2009-12-21 23:20 3 x/ p1 y# i9 s' B) a  r) T2 H
有是有                              ) A, Z( }- |. ]& Z: N/ }* ?6 D9 K
不过不能白给!

8 ?: ?% ~: a$ g' m同求动态规划的源程序,现在其他的算法基本上都可以集成,就是动态规划没有了。希望大神赐教,我的qq邮箱1240258213@qq.com,谢谢。关于其他算法的集成, 可以与大神共享。
作者: 无语的昭昭    时间: 2015-2-4 20:47
额额额,其他地方很多啊6 ~4 S' q0 B% f% v( d% a





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