Found an issue with the book? Report it on Github.

이주가 있는 로트카-볼테라(Lotka-Volterra with Migration)

이주가 있는 로트카-볼테라(Lotka-Volterra with Migration)

이 섹션에서는 이미 수행한 작업을 기반으로 재사용 가능한 구성 요소 모델을 구축하는 방법을 이해하기 위해 Lotka-Volterra 모델을 다시 한 번 다시 살펴보겠습니다.그 다음 단계로 개별 지역에 대한 재사용 가능한 모델(각각 일반적인 인구 역학이 있음)을 만든 다음 이러한 지리적 지역을 마이그레이션(이주) 모델과 함께 연결할 것입니다.

두 종의 지역(Two Species Region)

이 섹션의 모델은 모두 일반적인 Lotka-Volterra 개체군 역학을 사용하여 두 개체군(하나는 토끼이고 다른 하나는 여우)으로 구성된 지역을 나타내는 다음 모델을 사용합니다.모델의 모델리카 소스 코드는 다음과 같습니다.

within ModelicaByExample.Subsystems.LotkaVolterra.Components;
model TwoSpecies "Lotka-Volterra two species configuration"
  // Import several component models from ModelicaByExample.Components.LotkaVolterra
  import ModelicaByExample.Components.LotkaVolterra.Components.RegionalPopulation;
  import ModelicaByExample.Components.LotkaVolterra.Components.Reproduction;
  import ModelicaByExample.Components.LotkaVolterra.Components.Starvation;
  import ModelicaByExample.Components.LotkaVolterra.Components.Predation;

  parameter Real alpha=0.1 "Birth rate";
  parameter Real gamma=0.4 "Starvation coefficient";
  parameter Real initial_rabbit_population=10 "Initial rabbit population";
  parameter Real initial_fox_population=10 "Initial fox population";
  parameter Real beta=0.02 "Prey (rabbits) consumed";
  parameter Real delta=0.02 "Predators (foxes) fed";

  ModelicaByExample.Components.LotkaVolterra.Interfaces.Species rabbits
    "Population of rabbits in this region"
    annotation ...
  ModelicaByExample.Components.LotkaVolterra.Interfaces.Species foxes
    "Population of foxes in this region"
    annotation ...
protected
  RegionalPopulation rabbit_population(
      initial_population=initial_rabbit_population,
      init=RegionalPopulation.InitializationOptions.FixedPopulation) "Rabbit population"
    annotation ...
  Reproduction reproduction(alpha=alpha) "Reproduction of rabbits"
    annotation ...
  RegionalPopulation fox_population(
      init=RegionalPopulation.InitializationOptions.FixedPopulation,
      initial_population=initial_fox_population)
    annotation ...
  Starvation fox_starvation(gamma=gamma) "Starvation of foxes"
    annotation ...
  Predation fox_predation(beta=beta, delta=delta)
    "Foxes eating rabbits"
    annotation ...
equation
  connect(reproduction.species, rabbit_population.species)
    annotation ...
  connect(fox_predation.a, rabbit_population.species)
    annotation ...
  connect(fox_starvation.species, fox_population.species)
    annotation ...
  connect(fox_population.species, fox_predation.b)
    annotation ...
  connect(rabbit_population.species, rabbits)
    annotation ...
  connect(fox_population.species, foxes)
    annotation ...
end TwoSpecies;

이 구성 요소의 다이어그램은 다음과 같이 렌더링됩니다.

Region containing rabbits and foxes

이 모델은 섹션 뒤에 제시하는 모델에서 지역 인구 역학의 기초로 사용합니다.

연결되지 않은 지역(Unconnected Regions)

4개의 연결되지 않은 영역으로 구성된 모델을 구축하는 것으로 시작하겠습니다. 이러한 모델의 모델리카 소스 코드는 매우 간단합니다.

within ModelicaByExample.Subsystems.LotkaVolterra.Examples;
model UnconnectedPopulations "Several unconnected regional populations"
  Components.TwoSpecies A "Region A"
    annotation ...
  Components.TwoSpecies B "Region B"
    annotation ...
  Components.TwoSpecies C "Region C"
    annotation ...
  Components.TwoSpecies D "Region D"
    annotation ...
  annotation ...
end UnconnectedPopulations;

이 모델의 다이어그램은 똑같이 간단합니다.

Four unconnected regional populations

이 모델을 시뮬레이션하는 경우 각 모집단은 초기 조건이 동일하므로 동일한 궤적을 따라야 합니다. 다음 선도는 이것이 사실임을 보여줍니다.

/static/_images/Uncon.svg

잠시 후 마이그레이션의 영향을 살펴보겠습니다. 그러나 마이그레이션이 미치는 영향을 충분히 이해하려면 서로 다른 지역의 진화에 약간의 차이점을 도입해야 합니다. 따라서 UnconnectedPopulations 모델의 초기 조건을 수정하여 일부 지역적 변형을 도입해 보겠습니다.

within ModelicaByExample.Subsystems.LotkaVolterra.Examples;
model InitiallyDifferent "Multiple regions with different initial populations"
  extends UnconnectedPopulations(
    B(initial_rabbit_population=5, initial_fox_population=12),
    C(initial_rabbit_population=12, initial_fox_population=5),
    D(initial_rabbit_population=7, initial_fox_population=7));
end InitiallyDifferent;

이 모델을 시뮬레이션하면 각 지역의 인구 역학이 약간씩 다릅니다.

/static/_images/ID.svg

이주(Migration)

이제 4개의 연결되지 않은 지역에서 인구 역학을 시뮬레이션했으므로 이주가 이러한 역학에 미칠 수 있는 영향에 주목하는 것이 필요합니다.

마이그레이션을 위해 다음 모델리카 모델을 살펴보겠습니다.

within ModelicaByExample.Subsystems.LotkaVolterra.Components;
model Migration "Simple 'diffusion' based model of migration"
  parameter Real rabbit_migration=0.001 "Rabbit migration rate";
  parameter Real fox_migration=0.005 "Fox migration rate";
  ModelicaByExample.Components.LotkaVolterra.Interfaces.Species rabbit_a
    "Rabbit population in Region A"
    annotation ...
  ModelicaByExample.Components.LotkaVolterra.Interfaces.Species rabbit_b
    "Rabbit population in Region B"
    annotation ...
  ModelicaByExample.Components.LotkaVolterra.Interfaces.Species fox_a
    "Fox population in Region A"
    annotation ...
  ModelicaByExample.Components.LotkaVolterra.Interfaces.Species fox_b
    "Fox population in Region B"
    annotation ...
equation
  rabbit_a.rate = (rabbit_a.population-rabbit_b.population)*rabbit_migration;
  rabbit_a.rate + rabbit_b.rate = 0 "Conservation of rabbits";
  fox_a.rate = (fox_a.population-fox_b.population)*fox_migration;
  fox_a.rate + fox_b.rate = 0 "Conservation of foxes";
  annotation ...
end Migration;

이 모델은 연결된 지역에서 토끼와 여우의 개체수를 살펴보고 지역 간 개체수 차이에 비례하는 이동 속도를 지정합니다.즉, 한 지역에 다른 지역보다 더 많은 토끼가 있으면 토끼는 인구가 많은 지역에서 인구가 적은 지역으로 이동합니다.이것은 사실상 이동의 "확산" 모델이며 반드시 생태학에 기반을 둔 것은 아닙니다.지역 간 인구 역학을 변경하기 위해 각 지역에서 구현된 효과 위에 추가 효과를 추가할 수 있는 방법의 예로 간단히 소개하는 것 입니다.

이전에 연결되지 않은 지역을 마이그레이션 경로와 연결하면 다음 예시와 같습니다.

within ModelicaByExample.Subsystems.LotkaVolterra.Examples;
model WithMigration "Connect populations by migration"
  extends InitiallyDifferent;
  Components.Migration migrate_AB "Migration from region A to region B"
    annotation ...
  Components.Migration migrate_BC "Migration from region B to region C"
    annotation ...
  Components.Migration migrate_CD "Migration from region C to region D"
    annotation ...
equation
  connect(migrate_CD.rabbit_b, D.rabbits) annotation ...
  connect(migrate_CD.rabbit_a, C.rabbits) annotation ...
  connect(migrate_BC.rabbit_b, C.rabbits) annotation ...
  connect(migrate_CD.fox_b, D.foxes) annotation ...
  connect(migrate_BC.fox_b, C.foxes) annotation ...
  connect(migrate_CD.fox_a, C.foxes) annotation ...
  connect(migrate_BC.fox_a, B.foxes) annotation ...
  connect(migrate_BC.rabbit_a, B.rabbits) annotation ...
  connect(migrate_AB.fox_b, B.foxes) annotation ...
  connect(migrate_AB.rabbit_b, B.rabbits) annotation ...
  connect(migrate_AB.fox_a, A.foxes) annotation ...
  connect(migrate_AB.rabbit_a, A.rabbits) annotation ...
end WithMigration;

결과 시스템 다이어그램은 다음과 같습니다.

Four regional populations with migration paths

이 시스템을 시뮬레이션하면 서로 다른 지역의 인구 역학이 동기화되지 않은 상태에서 시작하지만 결국에는 반복되는 패턴으로 안정화되는 것을 볼 수 있습니다.

/static/_images/WM.svg

결론(Conclusion)

이전에는 Lotka-Volterra 방정식을 포식, 기아 및 번식을 나타내는 구성 요소로 전환했습니다. 이 섹션에서 이러한 구성 요소 모델을 사용하여 특정 지역의 인구 역학을 나타내는 하위 시스템 모델을 구축한 다음,이러한 하위 시스템을 서로 다른 지역 간의 마이그레이션 효과를 구성한 계층적 시스템 모델로 연결할 수 있었습니다.