最近の更新 (Recent Changes)

2014-01-01
2013-01-04
2012-12-22
2012-12-15
2012-12-09

Wikiガイド(Guide)

サイドバー (Side Bar)


← 前のページに戻る

2.5 漁獲量(Lotka-Volterraの方程式)

2.5.1 Lotka-Volterraの方程式とは

バルカン半島とイタリア半島に挟まれたアドリア海は水産資源に恵まれた漁業の盛んな海でした。 しかし、第一次世界大戦が始まると,漁民が兵士として出征してしまい、その海域での漁業は行われなくなります。

そして、数年後に第一次世界大戦が終わると漁民達も戻り、漁業が再開されました。

漁民達は何年も魚は獲っていなかったのだから、さぞや魚が増えているだろうと期待して海にでましたが、 不思議なことに漁獲量は以前より減っていたのです。

なぜ、漁業が中止になっていたのにもかかわらず、漁獲量が却って減ってしまったのだろうか?

しかも、なぜか漁の対象の魚は減っているのに、魚の捕食者のサメの割合は増えていたのです。

イタリア人の生態学者ダンコナ (D'Ancona) は, アドリア海の漁獲量の統計を取った結果, 当時有名であったイタリア人の数学者ボルテラ (Senator Vito Volterra) にこの謎について 相談しました。

ボルテラは、この現象を捕食者と被食者の関係について数理的に解析します。

被食者が増えるとそれを餌とする捕食者が増え、 捕食者が増えすぎると、被食者が大量に食べられて減ります。

被食者が減ると、捕食者も餌が減るため自然に減少します。

すると、捕食者が少ないうちに被食者が増え...

このように、被食者の魚の個体数と、それを食べるサメなどの捕食者の個体数は相互に依存し、 自然状態で周期的に変動することがわかりました。

ボルテラは、それらを解析することにより、被食者と捕食者の個体数が、自然状態で周期的に変動するという Lotka-Volterra方程式を導き、1926年に発表しました。 アメリカの統計学者 ロトカ (Alfred J. Lotka)は、独立して独自に同様の方程式を考案した功績により、 ボルテラと共に方程式の名前に冠されています。

2.5.2 Lotka-Volterraの方程式

ここでは以下のLotka-Volterraの連立常微分方程式を使います。


   dx
  -- = x * (α - β * y)
  dt

  dy
  -- = - y * (γ - δ * x)
  dt

xは、被食者の個体数です。

yは、捕食者の個体数です。

tは、時間です。

α、β、γ、δはパラメタです。

αは、被食者の増加に、βは捕食者による被食者の減少に関連します。

γは、捕食者の減少に、δは被食者の増加による捕食者の増加に関連します。

非線形な微分方程式ですが、デカルト言語で数値計算すれば解を求めることができます。

2.5.3 ソース

以下にLotka-Volterra方程式を数値計算するソースを示します。


/* Lotka-voterra O.D.E */

?  ::sys <PrintResultOff>
   <letf #α = 2>
   <letf #β = 0.002>
   <letf #γ = 1>
   <letf #δ = 0.001>
   <letf #xi 1000>
   <letf #yi 3000>
   <setVar var_x #xi>
   <setVar var_y #yi>

   <letf #w 0.001>
   <letf #interval 100>

   <print "t,shark,fish" >

   ::sys <ODE (#t 0 25 #w)
        <var_x #x>
        <var_y #y>

        <letf #dx = #x * (#α - #β * #y)>
        <letf #dy = -#y * (#γ - #δ * #x)>

        ::sys <integral #x2 #dx #xi>
        ::sys <integral #y2 #dy #yi>

        ::sys <ODEprint #interval #t "," #y2 "," #x2 >

        <setVar var_x #x2>
        <setVar var_y #y2>
  >
  ;


パラメタは、 α = 2, β = 0.002, γ = 1, δ = 0.001 に設定しています。

x が、サメ(shark)の個体数であり、初期値は1000匹にします。

y が、魚(fish)の個体数であり、初期値は3000匹にします。

  今回の計算では、定期的に振動するような結果になるため、計算誤差を防ぐ目的で、0 から 25 までの範囲を0.001 刻みで細かく計算しています。 しかし、計算結果をグラフにする場合には、そのような細かな計算の大量の結果は不要なため、ODEprint述語を使い 100(#intervalに設定)ごとに 結果を出力することによって、計算結果を1/100に減らしています。

2.5.4 実行結果とグラフ

ソースを"Lotka-Volterra.dec"という名前で保存して実行します。


$ descartes Lotka-Volterra.dec >Lotka-Volterra.csv

Lotka-Volterra.csv を、Excelで読み込んでグラフにしました。


  LotkaVolterra.jpg

サメ(shark)が減少すると、魚(fish)が急激に増えていきます。 すると、サメが豊富な魚を食べて、急激に増えていき 魚は逆に急激に減少します。

このような増減をサメと魚で周期的に繰り返すことがグラフから読み取れます。

上のグラフで5年のところでは豊漁であったのに、次の年には極端な不漁になって 漁民は1年で何故こうも漁獲量が変化するかに悩むことになるのでしょう。