(農業)情報工学・課題 (2020/11/05)
追加修正あります(2020/11/05-授業終了後)

水稲の生育予測プログラムの作成(2)(JSVersion)

授業で説明した改良モデル例
授業中に説明した改良モデル(Calc02-2.html)
このモデルに、「高温障害」を追加して提出して下さい。
なお、応用課題(挑戦したい人向け)としては、「登熟終了後の胴割れ米」「収穫日の順延モデル」の組み込みに挑戦しても良い。
改良型生育モデル
今回は、水稲の生育を予想するプログラムに改良を加える。基本とする考え方は、先週の【積算気温モデル】をベースにしている。
今回の課題では、品質と収量に関するモデルを組み込んでみる。また、日本の様々な地方(寒冷地や暖地)での栽培も模式化してみたい。 ただ、複雑なモデルを複数組み合わせて同時に動作させた場合、結果の評価が難しくなるため、それぞれのモデル自体は単純化している。そのため、現実の挙動とは異なる場合も含まれると思うが、あくまでモデル構築実験と割り切って理解して欲しい。

今回の課題で取り扱うのは、先週と同じく「単純積算気温モデル」とする。
代表的な品種である「コシヒカリ」を考え、田植えからの積算気温が1700度で出穂し、その後1000度で登熟が完了して、収穫日となるという前提は、先週と同一である。
今回は、さらに、収量(yield)に影響を与える因子(yieldFactor)と、価格(price)又は品質に影響を与える因子(priceFactor)をモデル化する。当初の因子は、どちらも初期値を1.0とし、影響があれば、少しずつ(0.001 から 0.1)程度、値を変化させる。
具体例で示す。(モデル化する場合には、自分で重要と思った物を組み込む。複数の因子をモデル化する事が好ましいが、ここに例示したすべての因子をモデル化しなくても無い。)
  1. 幼苗期に低温に晒されたため発生する生育障害 : 田植え後20日以内に例えば平均気温が15度以下(又は最低気温が10度以下)になった場合、1日につき(あるいは1度につき)yieldFactorを、0.01減らす。
  2. 登熟期の低温で発生する「イモチ」病 : 出穂後、平均気温が25度を下回った場合、yieldFactorを0.01減らす。【サンプルでは、予めこのモデルが組み込んである。なお平均気温25度でと言う条件のみでイモチが発生する可能性は低いが(実際には、降水との関連もある)、プログラムの動作チェックのためにこの設定にしている。】
  3. 夏場の高温に晒された事による食味の低下 : 平均気温が28度を超えた場合、priceFactorを0.01減らす。
  4. 収穫日の当日雨が降った事による、胴割れ米の発生 : 収穫予定日の降水量が3mmを超えた場合、priceFactorを0.05減らす。収穫可能日まで、それを続ける。この場合、収穫可能日は、一日ずつ変化することになる。
  5. その他にも、コメの生育に関する各種の知見がある。興味のある人は、いろいろと、モデル化してみよう。
また、今回は気象データを複数用意した。自分のモデルが、どの地方で、高い売り上げとなるかを考えてみたい。気温データとしては札幌、十日町(新潟)、東京、滋賀(彦根)、宮崎。年としては、1993,1994,1995,1997,2003,2015,2016年のデータが用意してある。
なお2016年のみ閏年なので2月29日のデータが存在している。そのため、2016年のデータを利用するときは、田植え日を一日ずらす、結果の解釈の日付は一日ずらす。などの必要がある。
これ以外の地域のデータを作成することも可能なので、余裕と興味のある人は、いろいろな地方のデータを用いて、自分のモデルがどのような挙動を示すかを、調べて欲しい。但し、データに欠測値(空白や他の記号など)があると、今回のプログラムではエラーとなる。アメダスの生データは、そういった欠測値がかなり紛れ込んでいる。自分でデータを取得する際には、注意しよう。なお実用的なプログラムの場合、欠測値の取り扱いは、内挿、あるいは、平年値での代替などの方法がある。(内挿の方が簡単であり、また、欠測値が少ない場合には推定精度も高い)。(気象業務上の平年値は近年の30年間の平均値としている。但し平年値の見直しは10年に一度なので、現在用いられている平年値は1981年ー2010年の平均である。)
プログラムの動作
今回の課題プログラム(Calc02.htmlの説明)は、前回とほぼ同様の動作を行う。
動作手順は次の通りである。
  1. HTMLとしての設定
  2. ファイル読込ボタン、実行ボタンなどの配置
  3. JavaScript開始
  4. ファイル内容の表示関数
  5. 動作表示の確認関数(デバッグプリント)
  6. 共通情報の表示関数
  7. 計算結果の表示関数
  8. 実行ボタンクリック時の関数
  9. fileReaderイベント時の実行関数
    ここが、生育シミュレーション本体
  10. 初期設定・地域・品種データ・定植日の指定
  11. 気象データの読み込み(ファイル入力)
    今回は、気温3要素(最低、最高、平均)、降水量
  12. 日付ループの開始
  13. 田植え後、出穂に必要な積算気温の計算開始
    積算気温が出穂積算気温(1700)を超えたら出穂日!
    ※もし、田植え後の低温(後述)モデルを組み込む場合はここ
  14. 出穂後、登熟に必要な積算気温の計算開始
    積算気温が登熟積算気温(1000)を超えたら登熟日!
    ※今回は、ここに「テスト用イモチモデル」が組み込んである
  15. 日付ループ終了
    年収の計算と結果の書き出し
  16. 気温データファイル内容の書き出し関数
  17. JavaScript終了
  18. body終了
  19. HTML終了
課題プログラムは、基本的に動作するようになっている。
しかし、今回のイモチモデルは、「平均気温が25度以下で収量(yield)が1%減少する」というモデルになっている。
これは、一般的なイモチ病の発生条件(降水があり、平均気温が20度から25度)に比べると単純化しているが、モデル動作チェックのためである。
【参考】今回のプログラムの最終的な出力は1haあたりの売上(10a当たり収穫量*10 x 60kgの価格/60)として産出している。日本の農家の平均耕作面積は2.98ha。つまり農家の売上は、ここで得られる数値の約3倍である。なお、価格と収量は2018年時点での標準的な数値である。
【反当収量】:1反(=10a)当たりの玄米の収穫量。現在では1反で10俵(600kg)取ることが目標である。なお農地を貸し出す場合の貸借料は1反で1俵が相場である。
【一合、一升、一斗、(一俵)、一石】: 1合は180ccであるが、玄米では約150gになる。1升は10合、1斗は10升(斗酒なお辞せず)、10斗で1石である。なお1俵は4斗である。
ここで1石とはどのくらいの玄米量であるか。1人が1食に食べる食事の量は1合弱が基本である。となると1年では1x3x365で1000合程度(1石)を食べることになる。(但し現在の茶碗では1合は茶碗2杯分程度に相当する。)ごはんとして食べるときは、水の量を白米の容積の1.2-1.4倍追加している。今、1.2倍とすると1合のご飯は(コメ150g+水180g)=330g程度になる。ちなみにココイチのカレーでの標準盛りのグラム数は300gである。(^・^)
プログラム中の、主要な変数名とその意味は、以下の通りである。
Variables in Calc02.html
変数名説 明備 考
Variety品種名プログラム冒頭で定義(コシヒカリ)
TaueDate田植え日(日付連番)プログラム冒頭で定義(109)
TargetEarTempSum出穂に必要な積算温度プログラム冒頭で定義(1700)
TargetToujukuTempSum登熟に必要な出穂後の積算温度プログラム冒頭で定義(1000)
currentEarTempSum出穂までの積算気温の作業用
targetEarTempSumと比較
計算中に利用
currentToujukuTempSum登熟に必要な積算気温の作業用
targetToujukuTempSumと比較
計算中に利用
yieldOfRice
Yield
平均的な収量(kg/10a)プログラム冒頭で定義(530kg)
priceOfRice
Price
平均的な価格(円:60kgあたり)プログラム冒頭で定義(13000円)
meteo[today][0]日付データ(dd/mm/yy)
文字列として収納
気象データファイルから読込
meteo[today][1]today日目(日付連番)の最低気温
366日型で提供
気象データファイルから読込
meteo[today][2]today日目(日付連番)の最高気温
366日型で提供
気象データファイルから読込
meteo[today][3]today日目(日付連番)の平均気温
366日型で提供
気象データファイルから読込
meteo[today][4]today日目(日付連番)の降水量
366日型で提供
気象データファイルから読込
shussuiDate出穂日(日付連番)計算して算出する
toujukuDate登熟日(日付連番)計算して算出する
shukakuDate収穫日(日付連番)計算して算出する
yieldFactor収量に影響を与えるファクター(因子)初期値は1.0で、影響があれば変化
priceFactor価格(品質)に影響を与えるファクター(因子)初期値は1.0で、影響があれば変化
annualSales1ha当たりの売り上げ金額(所得では無い)計算して算出する

<課題ファイルへのリンク>
課題プログラムとデータをまとめてダウンロードする!Rice02.zip
デスクトップにダウンロードすれば、解凍時にRice02フォルダが作成され、その中に以下の関連ファイルが保存される
これらの中で、1993年(平成5年)は日本が記録的な冷害を体験した年である。この年にはコメの生産量が約30%減となり、海外からコメを緊急輸入する事態となった。また、1994年は一転して猛暑の年であった。また、2016年はこれまでの観測で最も平均気温が高い年となった。
(参考:日本の平均気温の平年値との偏差は、1993(-0.52),1994(+0.56),1995(-0.19),1997(+0.10),2003(-0.06),2015(+0.69),2016(+0.88)となっている。気象庁ー日本の年平均気温偏差

なお、他の地点の気象データを手に入れたい場合には、次のウェブサイトから入手することが出来る。

課題の提出にあたって
プログラムはJavaScriptで作成する。
今回の課題の提出は、
  1. 作成したプログラム(Calc02.html)。必要に応じて注釈(コメント)を付けること。
  2. 実行結果(最低でも2つ以上の気象データで実行する)。テキストファイルまたはワードファイル
    実行結果には、自分の組み込んだモデルの説明と、結果の解釈を記述すること。
    【重要】自分の組み込んだモデルが、動作している事を確認する。
の2点を送信することである。
健闘を祈る。