adding linear interpolation to a fitness equation
Show older comments
So I'm creating a dynamic state-variable model and I want to add in a forgetting rate for an informational state, however that'll make the values non-integers and thus I need to do linear interpolation. How do I add that in to my fitness equation?
Sorry for the overwhelming amount of code
%constants
m1=0.9;
m2=0.3;
n1=0.3;
n2=0.9;
b=0.9;
crit=3;
cap=15;
term=20;
%arrays and zeros
opt=zeros(cap,cap, cap,term);
Fd=zeros(cap, cap, cap,term);
Fdd=zeros(cap,cap,cap,term);
Fdb=zeros(cap,cap, cap,term);
Fdbb=zeros(cap,cap,cap,term);
Ft=zeros(cap,cap,cap,term);
x=linspace(1,cap,cap)';
z=linspace(1,cap,cap)';
y=linspace(1,cap,cap)';
f=@(x,y) x-y;
M=f(z.',y);
p=zeros(size(M));
p2=zeros(size(M));
p3=zeros(size(M));
p4=zeros(size(M));
p5=zeros(size(M));
%z and y
z1=z+1; %dem went to patch 1 and found food
z1(z1>cap)=cap;
z2=z-1; %dem went to patch 1 and didn't find food
z2(z2<1)=1;
zp=(z1+1); %dem went to patch 1 and found food; obs went to patch 1 and found food
zp(zp>cap)=cap;
zpp=(z1-1); %dem went to patch1 and found food; obs went to patch 1 and didn't find food
zpp(zpp<1)=1;
zd=(z2+1); %dem went to patch1 and didn't find food; obs went to patch 1 and found food
zd(zd>cap)=cap;
zdd=(z2-1); %dem went to patch 1 and didn't find food; obs went to patch 1 and didn't find food
zdd(zdd<1)=1;
zg=(z+1); %obs went to patch 1 and found food
zg(zg>cap)=cap;
zgg=(z-1); %obs went to patch 1 and didn't find food
zgg(zgg<1)=1;
y1=y+1; %dem went to patch 2 and found food
y1(y1>cap)=cap;
y2=y-1; %dem went to patch 2 and didn't find food
y2(y2<1)=1;
yp=(y1+1); %dem went to patch 2 and found food; obs went to patch 2 and found food
yp(yp>cap)=cap;
ypp=(y1-1); %dem went to patch 2 and found food; obs went to patch 2 and didn't food
ypp(ypp<1)=1;
yd=(y2+1); %dem went to patch 2 and didn't find food; obs went to patch 2 and found food
yd(yd>cap)=cap;
ydd=(y2-1); %dem went to patch 2 and didn't find food; obs went to patch 2 and didn't find food
ydd(ydd<1)=1;
yg=(y+1); %obs went to patch 2 and found food
yg(yg>cap)=cap;
ygg=(y-1); %obs went to patch 2 and didn't find food
ygg(ygg<1)=1;
%physical states
xp=x-1-1+3; %obs watched dem and found food
xp(xp>cap)=cap;
xpp=x-1-1; %obs watched dem and didn't find food
xpp(xpp<1)=1;
xd=x-1+3; %obs didn't watch and found food
xd(xd>cap)=cap;
xdd=x-1; %obs didn't watch and didn't find food
xdd(xdd<1)=1;
%specify fitness
Fd(x<=crit,:, :, :)=0;
Fd(x>crit,:,:,:)=1;
Fdb(x<=crit,:,:,:)=0;
Fdb(x>crit,:,:,:)=1;
%specify prob matrix of going to patch 1 for obs
for j=1:15
for k=1:15
if M(j,z1(k))>0
p(j,z1(k))=0.9;
elseif M(j,z1(k))<0
p(j,z1(k))=0.1;
else
p(j,z1(k))=0.5;
end
if M(j,z2(k))>0
p2(j,z2(k))=0.9;
elseif M(j,z2(k))<0
p2(j,z2(k))=0.1;
else
p2(j,z2(k))=0.5;
end
if M(y1(j),k)>0
p3(y1(j),k)=0.9;
elseif M(y1(j),k)<0
p3(y1(j),k)=0.1;
else
p3(y1(j),k)=0.5;
end
if M(y2(j),k)>0
p4(y2(j),k)=0.9;
elseif M(y2(j),k)<0
p4(y2(j),k)=0.1;
else
p4(y2(j),k)=0.5;
end
if M(y(j),z(k))>0
p5(y(j),z(k))=0.9;
elseif M(y(j),z(k))<0
p5(y(j),z(k))=0.1;
else
p5(y(j),z(k))=0.5;
end
end
end
%fitness equations for watching a dem (Fdd) and not watching a dem (Fdbb)
for tt=19:-1:1
for i=1:15
for j=1:15
for k=1:15
Fdd(i,j,k,tt)= b*(...
m1*(...
p(j,z1(k))*(n1*Fd(xp(i),zp(j),y(k),tt+1) + (1-n1)*Fd(xpp(i),zpp(j),y(k),tt+1))+...
(1-p(j,z1(k)))*(n2*Fd(xp(i),z1(j),yg(k),tt+1) + (1-n2)*Fd(xpp(i),z1(j),ygg(k),tt+1)))+...
(1-m1)*(...
p2(j,z2(k))*(n1*Fd(xp(i),zd(j),y(k),tt+1) + (1-n1)*Fd(xpp(i),zdd(j),y(k),tt+1))+...
(1-p2(j,z2(k)))*(n2*Fd(xp(i),z2(j),yg(k),tt+1) + (1-n2)*Fd(xpp(i),z2(j),ygg(k),tt+1))...
))+...
(1-b)*( ...
m2*(...
p3(y1(j),k)*(n1*Fd(xp(i),zg(j),y1(k),tt+1) + (1-n1)*Fd(xpp(i) ,zgg(j),y1(k),tt+1))+ ...
(1-p3(y1(j),k))*(n2*Fd(xp(i),z(j),yp(k),tt+1) + (1-n2)*Fd(xpp(i) ,z(j),ypp(k),tt+1)))+ ...
(1-m2)*(p4(y2(j),k)*(n1*Fd(xp(i),zg(j),y2(k),tt+1) + (1-n1)*Fd(xpp(i),zgg(j),y2(k),tt+1))+...
(1-p4(y2(j),k))*(n2*Fd(xp(i),z(j),yd(k),tt+1) + (1-n2)*Fd(xpp(i),z(j),ydd(k),tt+1))));
Fdbb(i,j,k,tt)= p5(j,k)*( ...
n1*Fdb(xd(i),zg(j),y(k),tt+1) + (1-n1)*Fdb(xdd(i),zgg(j),y(k),tt+1) ...
)+...
(1-p5(j,k))*( ...
n2*Fdb(xd(i),z(j),yg(k),tt+1) + (1-n2)*Fdb(xdd(i),z(j),ygg(k),tt+1)) ...
;
%optimal decision and fitness
if Fdd(i,j,k,tt)>Fdbb(i,j,k,tt)
opt(i,j,k,tt)=1;
Ft(i,j,k,tt)=Fdd(i,j,k,tt);
elseif Fdd(i,j,k,tt)<Fdbb(i,j,k,tt)
opt(i,j,k,tt)=2;
Ft(i,j,k,tt)=Fdbb(i,j,k,tt);
elseif Fdd(i,j,k,tt)==Fdbb(i,j,k,tt)
opt(i,j,k,tt)=3;
Ft(i,j,k,tt)=Fdd(i,j,k,tt);
end
end
end
end
end
I would like to add in a forgetting rate so that it looks more like this:
l=0.95;
zp=l*(z1+1); %dem went to patch 1 and found food; obs went to patch 1 and found food
zp(zp>cap)=cap;
zpp=l*(z1-1); %dem went to patch1 and found food; obs went to patch 1 and didn't find food
zpp(zpp<1)=1;
zd=l*(z2+1); %dem went to patch1 and didn't find food; obs went to patch 1 and found food
zd(zd>cap)=cap;
zdd=l*(z2-1); %dem went to patch 1 and didn't find food; obs went to patch 1 and didn't find food
zdd(zdd<1)=1;
zg=l*(z+1); %obs went to patch 1 and found food
zg(zg>cap)=cap;
zgg=l*(z-1); %obs went to patch 1 and didn't find food
zgg(zgg<1)=1;
%this would be added to the y's as well
How do I edit the fitness equation to add in linear interpolation?
note that Fdd is a 4-D matrix, because it has a physical state (x), two infomational states (z and y), and then time (t)
most of the interpolation I see modifies 1-D matrices
4 Comments
Sam Chak
on 7 May 2024
@Kitt: So I'm creating a dynamic state-variable model and I want to add in a forgetting rate for an informational state, however that'll make the values non-integers and thus I need to do linear interpolation. How do I add that in to my fitness equation?
Hi, to be honest, I'm a bit confused. Based on the keyword 'state-variable', I assume you want to create a state-space model, which is typically described by ordinary differential equations. Is that correct?
If so, how are the 'forgetting rate' and 'fitness equation' related to the state-space model? I'm trying to understand the connection between them.
Kitt
on 7 May 2024
Sam Chak
on 7 May 2024
Hi @Kitt
No worries, and there's no need to apologize. It was actually my mistake to confuse the dynamic state-variable model with a state-space representation. Thank you for clarifying that for me.
However, if you could revise/update your Question/Problem to include some mathematical equations for the fitness, demonstrator forage, and informational states, it would allow others to verify your code against the provided mathematical equations.
Kitt
on 7 May 2024
Accepted Answer
More Answers (0)
Categories
Find more on Deep Learning Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!