can you add probability to a for loop?

3 visualizaciones (últimos 30 días)
Kitt
Kitt el 26 de Jul. de 2024
Comentada: dpb el 27 de Jul. de 2024
I have a very long and complex fitness function that I want to add even more complexity to, and I'm wondering if I can shortcut it.
The basic idea is that an individual has to choose between two patches to forage in and the patches can now have a varying probability, either high or low, of finding food.
I want the combination of probabilities to be different from each other, that is
p1 = prob of finding food in patch 1 = hi or lo
p2 = prob of finding food in patch 2 = hi or lo
(p1,p2) combinations
30% chance of (hi,lo)
25% chance of (hi,hi)
25% chance of (lo,lo)
20% chance of (lo,hi)
The most straight forward way would just be adding it up
total fitness Fd = 0.3(F1) + 0.25(F2) + 0.25(F3) + 0.2(F4)
My code for fitness is already very long with only one combination of finding food probabilities. Is there a way I could do a for loop with these combinations and add in that probability or do I have to go the long way around?
  2 comentarios
Matt J
Matt J el 26 de Jul. de 2024
What is "the long way around"?
Kitt
Kitt el 26 de Jul. de 2024
Fdd(i,j,k,tt)= (1-u1)*( ...
b(tt)*(...
m1(tt)*(...
p(z1(j),k)*(n1(tt)*state1 + (1-n1(tt))*state2)+...
(1-p(z1(j),k))*(n2(tt)*state3 + (1-n2(tt))*state4) ...
)+...
(1-m1(tt))*(...
p2(z2(j),k)*(n1(tt)*state5 + (1-n1(tt))*state6)+...
(1-p2(z2(j),k))*(n2(tt)*state7 + (1-n2(tt))*state8) ...
) ...
)+...
(1-b(tt))*( ...
m2(tt)*(...
p3(j,y1(k))*(n1(tt)*state9 + (1-n1(tt))*state10)+ ...
(1-p3(j,y1(k)))*(n2(tt)*state11 + (1-n2(tt))*state12) ...
)+ ...
(1-m2(tt))* ...
(p4(j,y2(k))*(n1(tt)*state13 + (1-n1(tt))*state14)+...
(1-p4(j,y2(k)))*(n2(tt)*state15 + (1-n2(tt))*state16) ...
) ...
) ...
);
This is the fitness with p1 (represented here as n1) and p2 (represented here as n2) being static. I would do this 4 times with a combination of n1=0.9 or 0.3 and n2=0.9 or 0.3
I know that's a totally valid way of doing it, but I want to try and learn how to do this in a more efficient way if possible.

Iniciar sesión para comentar.

Respuestas (1)

dpb
dpb el 27 de Jul. de 2024
Editada: dpb el 27 de Jul. de 2024
Are F1, F2, ..computationally different other than the two probabilities I gather from the above?
If not, encapsulate the calculation in a function and just call the function with the combinations and return in an array
HL=[0.9 0.3];
P=unique(combnk([HL HL],2),'rows');
W=[0.25; 0.20; 0.30; 0.25];
N=size(W,1);
F=zeros(N,1);
for i=1:N
F(i)=functionF(P(i,:));
end
Fd=dot(W,F);
  4 comentarios
Kitt
Kitt el 27 de Jul. de 2024
Okay, I'll ask my PI if this is something that I could do. Thanks, I never would've thought that was possible!
dpb
dpb el 27 de Jul. de 2024
Isn't guaranteed that it can be done; I've not read the code thoroughly enough to fully follow the logic, but there's at least a chance.
I'd be pretty sure it could be turned into the looping construct with the function first shown, however, which would go a long way towards getting you to the point you need...

Iniciar sesión para comentar.

Categorías

Más información sobre Agriculture en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by