(農業)情報工学・課題 (2016/10/20)

水稲の生育ステージ予測プログラムの作成

積算温度とは
今回は、水稲の生育ステージを予測するプログラムを作成する。基本とする考え方は、<積算温度>モデルである。
積算温度(積算気温)とは、一定期間の気温(平均気温)の合計値のことである。例えば3日間の平均気温がそれぞれ15℃、20℃、18℃であった場合、15+20+18=53℃ となる。
植物の積算温度モデルとは、この積算温度の値が一定値を上回った場合に、生育ステージの変化が起こるという考え方である。言い換えれば、暖かい日が数日(〜数十日)継続すると、生育ステージが次の段階に進むという考え方である。この考え方は、例えば桜の開花予想などにも良く利用されている。イネの栽培の場合、定植(田植え)後の積算温度によって、出穂(しゅっすい)日と、収穫日を予測する手法が多く用いられている。
ただ、この積算温度についても、ある一定の温度(例えば15℃)以下では生育に寄与しないという考えから有効積算温度(15℃以上の気温部分についてのみ積算する)という考え方や、35度などといった高すぎる温度では、かえって生育にマイナスの要因になるとして、高温部での温度の寄与が低めになるような3次式を用いた積算温度モデル、などのバリエーションもある。また、成長率を気温による指数関数で表し、DVR(DeVelopment Ratio)を求め、その数値を積算して、DVI(DeVelopment Index)という数値を求めるDVIモデルという方式も広く使われている。
興味のある人は、インターネットなどで調べてみると良い。 DVIとDVR
また、単純積算温度モデルの場合であっても、幼苗期に低温に晒されると生育障害が発生したり、登熟期の低温で「イモチ」病にかかったり、不稔(結実不能)になったりと、さまざまな影響が考えられる。しかし、そういった効果のモデル化は基本モデルが完成してから追加してゆくこととしたい。(次回以降)

今回の課題で取り扱うのは「単純積算温度モデル」とする。
代表的な品種である「コシヒカリ」を考えると、田植えからの積算温度が1650度で出穂し、その後さらに950度の積算温度が追加されると登熟が完了して、収穫日となる。
具体的な計算の流れは次のようになる。
プログラムの動作
今回の課題プログラム(Model01.javaの説明)PDFファイルは、次のような動作を行う。
- 課題プログラム(ソースコード) : Model01.java
  1. 初期設定・変数の定義
  2. 地域・品種データ・定植日の読み込み(ファイル入力)
  3. 気温データの読み込み(ファイル入力)
  4. 積算温度の計算・出穂日、収穫日の決定
  5. 結果の出力(標準出力)
  6. 終了
課題プログラムは、4. 積算温度の計算・出穂日、収穫日の決定部分が未完成である。該当部分は、**** Today's Assignments **** となっている。
つまり、本プログラムの計算部分が、未完成のままにしてあるので、このまま実行すると、出穂日も収穫日も0のままとなってしまう。
この重要な部分を、各自、自分でプログラミングし、実行して提出することが課題である。
プログラムで用いられている主要な変数名とその意味は、以下の通りである。
Variables in Model01.java
変数名変数型説 明備 考
varietystirng品種名Parameters.txtから読込
areastirng栽培地域名Parameters.txtから読込
areacodeint栽培地域番号Parameters.txtから読込
taueint田植え日(日付連番)Parameters.txtから読込
at_eardouble出穂に必要な積算温度Parameters.txtから読込
at_harvestdouble登熟に必要な出穂後の積算温度Parameters.txtから読込
ta[i]double arrayi日目(日付連番)の平均気温
366日型で提供
気温ファイルから読込
Temp25.txt
SHUSSUI_BIint出穂日(日付連番) 計算して決定する
SHUKAKU_BIint収穫日(日付連番) 計算して決定する
c[i]int array各月の日数
応用課題用
プログラム中で定義済み

パラメータファイルの内容は次のようになっている
Parameters.txt
行番号変数名数値備 考
1areaSHIGA栽培地域名(表示のみ)
2areacode25地域番号名(表示のみ)
3tempfileTemp25.txt気温ファイル名(読み込みファイル名)
4varietyKOSHIHIKARI品種名(表示のみ)
5taue109田植え日(日付連番)(積算開始日)
6at_ear1650出穂に必要な積算温度(計算に利用)
7at_harvest950登熟に必要な出穂後の積算温度(計算に利用)

気温ファイルは、次のような構造をしている。
Temp25.txt
行番号数値説明
125県番号(25は滋賀県:計算では不使用)
2SHIGA地域名(SHIGA:計算では不使用)
34.51月1日の平均気温(以下、計算で利用)
44.41月2日の平均気温
----------
3684.412月31日の平均気温

<課題ファイルへのリンク:適当な場所(デスクトップなど)にフォルダ(Model01など)を作成して3つとも保存する>
課題プログラム(ソースコード) : Model01.java
パラメータファイル : Parameters.txt
気温ファイル(滋賀県) : Temp25.txt

課題の提出にあたって
プログラムはJAVAで作成する。
今回のModel01.javaをダブルクリックしてXcodeで開き、編集して保存すると良い。ただし、コメントに日本語を用いた場合は、文字コード(UTF-8)の設定に気を付ける必要がある。
JAVAの使い方は、はいぱーワークブック:プログラミング体験などで復習して欲しい。
  1. 今回のファイルを保存したフォルダに移動する。
    今回は、デスクトップに作成したModel01の中に保存したとする。
    [localhost:~] user% cd Desktop
    [localhost:~] user% cd Model01
  2. Javaプログラムを作成・修正(デバッグ)する。(XCode又はエディターを使う)
  3. Javaプログラムをコンパイルする。
    [localhost:~] user% javac Model01.java
    コンパイルの場合には、ファイル名として拡張子(.java)が必要。 ここで、プログラムミスがあれば、いろいろとエラーメッセージが表示される。
    そのまま、次のプロンプトが表示されれば、コンパイル成功である。失敗していれば、3,に戻る。
  4. javaプログラムを実行する。
    [localhost:~] user% java Model01
    実行時には、拡張子(.class)は不要。
  5. 以上の様に、2.プログラムの作成・編集、3.コンパイル、4.実行、することである。なお、上記の4.の段階で、他のファイルにリダイレクトすれば、結果をファイル出力として入手できる。
    【例】[localhost:~] user% java Model01 > kekka01.txt とすれば、結果はファイルkekka01.txtとして入手できる。
今回の課題
今回の課題は、
  1. 作成したプログラム(ソースコード)。コードには、必要に応じて注釈(コメント)を付けること。(Model01.java)
  2. 実行結果(kekka.txt)
の2点を、ITC-LMSの課題として、提出することである。健闘を祈る。

応用課題としては、田植え日、出穂日、収穫予定日などを、○月○日の形式で出力することである。 現在は、1月1日を1日目とする、日付連番で出力されている。
JAVAの基礎(文法)
超簡略JAVA文法(pdf)
参考リンク: とほほのJAVA入門
ターミナルの利用方法
シェルプログラムの基礎
今回のJAVAプログラミングでは、ターミナルを利用して作業する。
ターミナル環境は、マウスをクリックしてパソコンを操作するGUI(Graphical User Interface)とは異なり、キーボードで入力したコマンドを使ってパソコンを操作するCUI(Character User Interface)である。直感的な操作方法ではないため、ある程度のコマンドを覚えないと操作が難しいが、JAVAプログラムの作成などは、容易に出来るという利点がある。また、Unix, linux, MacOSにおいても、ほぼ、共通的に使えるので、やはり、一応の基礎は押さえておく必要がある。Windowsの場合には、若干、コマンド体系が異なる(MS-DOSのコマンド)が、これも重要であるので、機会があれば目を通しておくと良い。ここでは、順にターミナルの起動方法、基本的なコマンド、JAVAのコンパイルと実行について述べる。必要に応じて、はいぱーワークブックの14:ファイルシステム< 及び、15:コマンドを参考にすること。
【自宅や自分のMacでの利用】
Mac OSのVersion 10.6 以降では、標準でJDKがインストールされていない。 そのため、JavaのJDKをインストールすることで、実習のjava課題が可能になる。
【自宅や自分のWindowsでの利用】
管理者権限のあるWindowsの場合、JavaのJDKをインストールすることで、実習のjava課題が可能になる。以下は、Windows7環境でのJDKの利用方法である。

ECCのWindowsでJavaの演習を行う
(以下の説明は2013年時点では不要です。Windows環境でもJavaのJDKがインストールされているようです。)
東大の教育用計算機の環境では、JavaのJDKがインストールされていない。しかし、Mathematicaの中にjavaの開発環境(javac.exe)が存在している。そのため、自分のコマンドプロンプトにおいて、コマンドの検索パスにmathematicaのディレクトリを追加すれば、東大のWindows環境でもjavaのコンパイルを行う事が出来る。その方法は、次の通りである。
コマンドターミナルを開き、次のsetコマンドを実行すれば良い。
set Path=%Path%;c:\Program Files\Wolfram Research\Mathematica\8.0\SystemFiles\Java\windows\bin
なお、このバッチファイル(add_javac.bat)を右クリックで保存し、コマンドターミナル内で実行しても良い。( 2012年11月2日現在 )

【参考】(どうしても日本語を使いたい人へ)
Xcodeで日本語を取り扱う場合には、次の方法でXcodeの文字コードを変更する必要がある。デフォルトはUTF-8となっているが、コマンドラインでjavacによるコンパイル、実行を行うためには、shift-JIS(MacOS)に変更すると良い。
手順

なお、結果をテキストファイル(拡張子が.txt)にリダイレクトして作成しても、それをダブルクリックで開く事が出来ない。という状態が出る人がいる。これは、Macの標準テキストエディターである、「テキストエディット」の設定を変更する事によって解決可能である。
テキストエディットをアプリケーションメニューから選択して開く。
メニューバーの「テキストエディット」→「環境設定」→「開く/保存」→「ファイルを開くとき」→「UTF-8」に設定すると良い。