クイックノート

ちょっとした発見・アイデアから知識の発掘を

ChatGPTに桜前線のシミュレーションを作ってもらった

子供にプログラムを教えるのに良い題材はないかと思っていた時、
ふと思いついたのが桜前線のシミュレーションでした。

気温が徐々に上がっていくという繰り返し処理と、
気温が開花の温度に達したかどうかという条件判定という要素が自然に入りますし、
南から北に向かって桜が咲いていくというのは、
見た目としても分かりやすいのではないかと思ったのです。

思いついたは良いもののプログラム書くの面倒だなと思い、
ChatGPTさんに丸投げしてみました。

以降では、ChatGPTのプロンプトとその出力結果を掲載します。

プロンプト

# プログラム作成

桜前線シミュレーションのプログラムを作成して下さい。仕様は以下の通りです。

# 仕様

- 日本地図の形にセルを並べる
- 各セルは「気温」の値を持つ
- 「気温」の値が一定以上の場合、そのセルをピンクで表示する
- 「気温」は地図の南から北にかけて低くなる
- 時間経過と供に「気温」の全セル平均値が増加する

仕様書というほどのものでも無いですが、
ほぼ最小限の要件だけ箇条書きで並べたような形です。

ChatGPTの出力

それで出力されたのが下のコードです。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors


# パラメータ
map_size = 50  # 地図のサイズ
init_temp = 30.0  # 初期温度
cooling_rate = 0.01  # 冷却率
threshold = 25.0  # 表示の閾値


# 地図の初期化
temp_map = np.ones((map_size, map_size)) * init_temp
for i in range(map_size):
    temp_map[:, i] -= cooling_rate * i


# メインループ
fig, ax = plt.subplots()
for step in range(100):
    # 気温の更新
    temp_map -= cooling_rate
    temp_map[:, :5] = init_temp  # 地図の南端部は一定温度にする

    # 地図の描画
    ax.clear()
    ax.imshow(temp_map, cmap="coolwarm", norm=colors.Normalize(vmin=0, vmax=40))

    # ピンク色で表示するセルの決定
    pink_cells = np.argwhere(temp_map >= threshold)

    # ピンク色でセルを塗る
    for cell in pink_cells:
        ax.add_patch(plt.Rectangle(cell - 0.5, 1, 1, fill=True, color='pink'))

    # グラフの表示
    plt.title(f"Step {step}")
    plt.show(block=False)
    plt.pause(0.1)

plt.show()

上のプログラムは「ちゃんと動く」のですが、
パラメータの値が良くなくて、最初から全てピンクだったり、
気温が上昇するのではなく下降するパラメーターになっています。

プログラムの実行結果

パラメータを修正して実行した結果が下の動画です。


www.youtube.com

日本地図の形という仕様は無視されてますが、
下から上に向かってピンク色が登っていく動きが実現されています。

まとめ

結果としては、パラメータの微調整は自分でしないといけませんでしたが、
それなりのものが自動で出来上がりました。
簡単なお遊びのプログラムはChatGPTに任せてしまっても良いかもしれません。

プライバシーポリシー