can you add probability to a for loop?

1 Ansicht (letzte 30 Tage)
Kitt
Kitt am 26 Jul. 2024
Kommentiert: dpb am 27 Jul. 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 Kommentare
Matt J
Matt J am 26 Jul. 2024
What is "the long way around"?
Kitt
Kitt am 26 Jul. 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.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

dpb
dpb am 27 Jul. 2024
Bearbeitet: dpb am 27 Jul. 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 Kommentare
Kitt
Kitt am 27 Jul. 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 am 27 Jul. 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...

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Agriculture finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by