Задача "Хищник-Жертва" состоит в том, что у нас есть две группы рыб: травоядные и хищники. Каждый день травоядные плодятся, их количество увеличивается на определённый процент. В то же время хищники постоянно умирают, их количество уменьшается, но если они съедят несколько травоядных, их количество увеличится. Также нужно учитывать то, что травоядные не могут плодиться вечно: чем больше их количество, тем медленнее они плодятся, т. к. страдают от перенаселённости.Изменение количества рыб можно представить такой формулой:
При этом число a должно быть чуть больше 1, число b должно быть в несколько десятков раз меньше числа а, число с будет чуть ниже 1, а число d - не больше 1.
Так выглядит код в Scilab:
Подбирая разные значения a, b , c и d, я получил такие графики:
В результате мы видим, что на первых трёх картинках, у нас были значения смертности хищников 0.8 и 0.9, и поэтому хищники плодились слишком быстро и съели всю рыбу.
А на четвёртом графике я снизил этот параметр до 0.5, хищники стали умирать быстрее, и поэтому травоядные рыбы успевали плодиться и выжили.
- травоядные: xn+1=(a-b*xn)*xn-d*xn*yn;
- хищники: yn+1=c*yn+d*xn*yn;
При этом число a должно быть чуть больше 1, число b должно быть в несколько десятков раз меньше числа а, число с будет чуть ниже 1, а число d - не больше 1.
Так выглядит код в Scilab:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Модель хищник-жертва | |
//a-Коэффициент роста количества травоядных | |
//b-Коэффициент перенаселённости | |
//c-Коэффициент смертности хищников | |
//d-Вероятность съедения жертвы хищником | |
function fish(a, b, c, d) | |
//Задаём массив для травоядных и даём начальное значение 0 | |
x=zeros(100,0); | |
//Задаём массив для хищников и даём начальное значение 0 | |
y=zeros(100,0); | |
//Начальное количество травоядных | |
x(1)=100; | |
//Начальное количество хищников | |
y(1)=10; | |
//Задаём цикл | |
for i=2:100 | |
x(i)=round((a-b*x(i-1))*x(i-1)-d*x(i-1)*y(i-1)); | |
y(i)=round(c*y(i-1)+d*x(i-1)*y(i-1)); | |
end | |
t=[1:100]; | |
clf; | |
plot(t, x,'g', t, y,'r'); | |
set(gca(),"grid",[1 1]); | |
xlabel("Дни"); | |
ylabel("Кол-во рыб"); | |
legend(['травоядные';'хищники']); | |
title(msprintf('Модель Хищник-Жертва a=%f b=%f c=%f d=%f', a, b, c, d)); | |
endfunction | |
А на четвёртом графике я снизил этот параметр до 0.5, хищники стали умирать быстрее, и поэтому травоядные рыбы успевали плодиться и выжили.
Комментариев нет:
Отправить комментарий