2013-11-22 84 views
4

我想使用这个q-learning(强化学习)代码。这似乎是代码是正确的,但我得到的错误,我不知道为什么:强化学习

function q=ReinforcementLearning 

clc; 
format short; 
format compact; 
int state=0; 


R= [-inf,-inf,-inf,-inf, 0,-inf; 
-inf,-inf,-inf, 0,-inf, 100; 
-inf,-inf,-inf, 0,-inf,-inf; 
-inf, 0, 0,-inf, 0,-inf; 
    0,-inf,-inf, 0,-inf, 100; 
-inf, 0,-inf,-inf, 0, 100]; 

gamma=0.8; 

q=zero(size(R)); 
q1=one(size(R))*inf; 
count=0; 

for episode = 0:20000; 
y=randperm(size(R,1)); 
state=y(1); 

x=find(R(state,:)>=0); 
if size(x,1)>0, 
    x1=RandomPermutation(x); 
    x1=x1(1); 
end 

qMax=max(q,[],2); 
q(state,x1)=R(state,x1)+ gamma* qMax(x1); 
    int state=x1; 


if sum(sum(abs(q1-q)))<0.0001 && sum(sum(q>0)) 
    if count > 1000; 

     break 
    else 
     count=count+1; 
    end 
else 
    q1=q; 
    count=0; 
end 

end 

但我得到以下警告和错误:

enter code here 
Warning: The method char/int will be removed in a 
future relase. Use sym/int instead. For example 
int(sym('x^2')). 
> In char.int at 10 
    In ReinforcementLearning at 6 
Error using mupadmex 
Error in MuPAD command: Invalid integrand. [int] 
Error in sym/int (line 107) 
    rSym = 
    mupadmex('symobj::intindef',f.s,x.s,options); 
Error in char/int (line 12) 
y = int(sym(f),varargin{:}); 
Error in ReinforcementLearning (line 6) 
int state=0; 

该代码可在以下链接找到: http://people.revoledu.com/kardi/tutorial/ReinforcementLearning/Q-Learning-Matlab.htm

+0

'y = randperm(size(R,1))'是什么意思? 'R'已经是6 * 6的大小了。在重新洗牌时,它会产生另一个6 * 6的矩阵吗? –

回答

4

没有

int state=0; 
int state=x1; 

in matlab。这是C风格。在matlab中,int是一个内置的函数,意思是别的。 此外,它应该是

q=zeros(size(R)); 
q1=ones(size(R))*inf; 

记住下载他RandomPermutation功能,否则只要使用randperm代替。