今回は天気予報のアルゴリズムを検討します。
天気予報のアルゴリズム
天気予報と聞くと、スーパーコンピュータで複雑な計算をイメージしますよね。
今回製作したブレッドボード回路では、取得するデータも限られていますし、そもそもマイコンではそれほど複雑な計算はできません。
そこで、今回はもっとシンプルで、リソースの少ないマイコンでも実装可能なアルゴリズムを使って天気予報のプログラムを作成したいと思います。
前回の記事で、気圧と天気の関係を調べました。
100%の精度というわけではありませんが、次のように気圧が上昇するスピードが速いときは晴れ、下降するスピードが遅いときは雨になる傾向があります。

この気圧の変化に着目した天気予報は昔から研究されていて、その中でも有名な「Zambretti(ザンブレッティ)の天気予測」という道具があります。
最初に、この「道具」とはどのようなものかみていきましょう!
Zambretti Forecaster(ザンブレッティ天気予測)
「天気予測の道具」と聞くと、機械仕掛けのガジェットのようなものに思えてしまいますが、実物は円盤に文字が書かれていて、そこから天気を読み取る、という道具です。
著作権の所在がわからないので画像は載せていませんが、いくつかのサイトに画像がありますので参考にしてみてください。
次のリンクの英語版ウィキペディアには簡単な解説があります。
https://en.wikipedia.org/wiki/Zambretti_Forecaster
また、次のサイトではより詳しい画像や解説があります。(英語ですが…)

Zambretti Forecasterは、1920年ごろに作られたもので、主に「気圧」「気圧の傾向」「風向」の3種類のデータから天気を予測する手法です。(「季節」データも使用することがあるようです)
もともとは、航海士などが使う携帯用の気圧計の文字盤に書かれていた予報文が元になっているようで、気圧と風向きのデータから将来の天気を予測するための、「経験則の集大成」のようなものです。
今回製作したブレッドボードでは気圧データが取得できますので、このZambretti Forecasterを参考にすれば十分天気予測が可能なはずです!
そこで、このアルゴリズムはどのようなものか確認していきましょう!
Zambretti Forecasterのアルゴリズム
Zambretti Forecasterでは次のように天気を予測します。
使用するデータ
Zambretti Forecasterの天気予測には次のデータを使用します。(季節データも使用するケースもあるようです)
- 現在の気圧
- 気圧の傾向(上昇、安定、下降)
- 風向き (北、南など)
アルゴリズム
アルゴリズムの核となるのは、「現在の気圧」と「気圧の傾向」から「基準となる数値」を算出し、その数値を「風向き」や「季節」で補正して予測結果を導き出す、という流れです。
具体的な予測ステップを確認していきましょう!
気圧がどのように変化しているかを判断します。一定時間(例えば過去3時間)の気圧の変化を観測して、次の3種類に分類します。
- 上昇:気圧が上がっている状態(一般的に天候の回復を示唆します)
- 安定:気圧にあまり変化がない状態
- 下降:気圧が下がっている状態(天候の悪化を示唆します)
次に、Z値と呼ばれる、予測をするための基準となる数値を計算します。
計算式はいくつかあるようですが、例えば次のような計算方法です。
最初に現在の気圧を元にして、気圧を補正します。
P = (現在の気圧) * pow(
1 - (0.0065 * elevationM) / (tempC + (0.0065 * elevationM) + 273.15),-5.257 )
);
次に、気圧の傾向の判断に応じてを上の式で求めたPを元にZ値を計算します。
- 上昇:185 − 0.16 × P
- 安定:144 − 0.13 × P
- 下降:127 − 0.12 × P
Z値を計算後、「風向き」と「季節」データにより補正を行います。
細かい計算方法は省略しますが、例えば次のように計算します。
「風向き」は、例えば南風のときはZ値に1を足します。これは、暖かく湿った空気をもたらし、天候が悪化する(雨が降りやすくなる)傾向があることによりZ値を少し補正します。
「季節」は、例えば暖かい期間のときはZ値から1を引きます。これは、暖かい期間は南側の高気圧に覆われることが多く、このため冬に比べて天候は比較的安定する傾向があるためです。
算出したZ値に応じて、天気予測表から今後の天気を予測します。
気圧が下降している場合
Z値 | 予測 |
---|---|
1 | 安定した晴れ |
2 | 晴れ |
3 | 不安定な晴れ |
4 | 概ね晴れ、のちに雨 |
5 | 不安定な天気 (にわか雨など) |
6 | 不安定な天気、のちに雨 |
7 | 時々雨、のちに悪化 |
8 | 時々雨 |
9 | 雨 |
気圧が安定している場合
Z値 | 予測 |
---|---|
10 | 安定した晴れ |
11 | 晴れ |
12 | 晴れ、にわか雨の可能性あり |
13 | 概ね晴れ、 にわか雨の可能性あり |
14 | 晴れ、時々にわか雨 |
15 | 天気変わりやすく一時的に雨 |
16 | 不安定な天気で時々雨 |
17 | 雨が降ったり止んだり |
18 | 雨 |
19 | 嵐 |
気圧が上昇している場合
Z値 | 予測 |
---|---|
20 | 安定した晴れ |
21 | 晴れ |
22 | 概ね晴れ |
23 | 天気回復、概ね晴れ |
24 | 晴れ、にわか雨の可能性 |
25 | 天気回復、 にわか雨の可能性 |
26 | 天気変わりやすいが回復傾向 |
27 | 不安定な天気、のちに回復 |
28 | 不安定な天気、回復可能性 |
29 | 不安定な天気、 時々日が差す |
30 | かなり不安定だが 時々日が差す |
31 | 雨、回復可能性 |
32 | 大雨、嵐 |
Zambretti Forecasterではこのように予測しますが、今回製作したブレッドボードでは次の課題があります。
- 「風向き」のデータは取得できない
- 「季節」データは設定できるが現在の回路では現実的ではない
- Zambretti Forecasterでは細かい天気予測はできるが、今回製作したブレッドボードの2色LEDで表現できるのは「晴れ」「曇り」「雨」の3種類が限界。
そこで、Zambretti Forecasterのアルゴリズムを大幅に改変?して、プログラムに実装することにしたいと思います。
実装するアルゴリズム
Zambretti Forecasterアルゴリズムの核となる部分は、「現在の気圧」と「気圧の傾向」から天気予測をするという点です。
この考え方と似た、より簡単なアルゴリズムがあります。
そのアルゴリズムで「晴れ」「曇り」「雨」の3種類の天気予測をしてみたいと思います。
天気は、気圧が高いと晴れの確率が高く、低いと雨の確率が高くなります。
また、前回の記事で確認したように、気圧変化が早いと天気が変わりやすい傾向がありました。
簡単なアルゴリズムでは「現在の気圧」と「気圧変化の速さ」から天気予測を行います。
予測は次のステップで行います。
前回の記事で確認した通り、気圧の変化が速いと天気が変わりやすくなります。
そこで、次のように気圧変化の速さを判断します。
判断結果に応じて天気変化のトレンドを判断することにします。(具体的な数値はプログラム内で変更できるようにします)
過去3時間の気圧変化 | 気圧変化の速さの判断 |
---|---|
± 1.6hPa未満 | ゆるやかな変化 (現在の天気が継続する) |
± 1.6hPa以上 | 速い上昇または下降 (近いうちに天気が変化する) |
次に、現在の気圧から、高気圧帯にいるのか低気圧帯にいるのか判断します。
現在の気圧値 | 現在の気圧帯 |
---|---|
1015hPa以上 | 高気圧 |
1000〜1015hPa | 普通 |
1000hPa未満 | 低気圧 |
「気圧変化の速さ」と「現在の気圧帯」から、天気傾向を判断します。
現在の気圧帯 | 気圧変化 速い上昇 | 気圧変化 ゆるやか | 気圧変化 速い下降 |
---|---|---|---|
高気圧 (1015hPa以上) | 晴れ (継続) | 晴れ (継続) | 曇り (悪化傾向) |
普通 (1000〜1015hPa) | 晴れ (回復傾向) | 曇り (継続) | 雨 (悪化傾向) |
低気圧 (1000hPa未満) | 曇り (回復傾向) | 雨 (継続) | 雨 (継続) |
ステップ3で判断した天気傾向では、曇りでも悪化傾向と回復傾向があります。それぞれ雨、晴れと予報した方が良さそうですが、このあたりは運用しながらアルゴリズムを調整していくのが良いかな、と思います。
2色LEDで表現できる色は3色ですので、曇りの2つの状態は区別せず、次のように天気予測表示をしたいと思います。
天気傾向 | LED点灯色 |
---|---|
晴れ | 赤 |
曇り(天気回復傾向) | 紫 (赤と青を同時点灯) |
曇り(天気悪化傾向) | |
雨 | 青 |
アルゴリズムとしては上のステップになりますが、パラメータはプログラム内で変更できるようにしたいと思います。
更新履歴
日付 | 内容 |
---|---|
2018.10.12 | 新規投稿 |
2025.8.25 | 天気予測アルゴリズムをZambretti Forecasterの簡易版に変更 |