ChatGPTを使ってAIに数値流体解析(CFD)のプログラミングをお願いする

CAEと機械学習

2022年末ごろから、ChatGPTが便利だと話題になっています。

今回は、ChatGPTにお願いしてCFDのプログラミングをやってもらいました。

ChatGPTとは

ChatGPTはOpenAIによってトレーニングされた大型の言語モデルです。ChatGPTは人工知能を使ってテキストデータを生成することができます。

ユーザーが入力したテキストに基づいて、ChatGPTは最も適切な返答を生成します。ChatGPTは多様なタスク(FAQの回答、文書生成、文章の生成など)に使用されており、APIを介してアプリケーションやウェブサイトと統合することができます。

ChatGPTはプログラム生成にも使える

ChatGPTは拡張可能な技術であり、新しいデータセットをトレーニングすることによって、専門分野のタスクに特化することができます。

ChatGPTはコードの構造やプログラミング言語の知識を持っているため、コードを生成するタスクにも利用できます。また、開発者が新しいトレーニングデータを与えることによって、ChatGPTを特定のタスクや言語に特化させることもできます。

しかし、ChatGPTが生成するコードの信頼性や実行可能性は保証されていないため、開発者は生成されたコードを適切なテストとレビューが必要です。

chatGPTを使って数値流体解析

Pythonを使った数値流体解析は「Pythonで学ぶ流体力学の数値計算法」という書籍もあり、私も過去に独学で勉強していました。

一方で、ChatGPTが自動でプログラムを生成してくれるのであれば、Pythonプログラムを学ばなくても、アイデアだけ与えて生成すればよいのではないか、という思いに至ります。

「20×20の2次元格子について、有限体積法で流速分布を計算するプログラムをpythonで書いてください」と注文すると、以下のような回答が返ってきます。

ChatGPTの回答

以下は有限体積法を用いて20×20の流速分布を計算するプログラムの例です。

import numpy as np

# 格子数
nx = 20
ny = 20

# 格子間隔
dx = 1.0
dy = 1.0

# 流速ベクトル
u = np.zeros((nx, ny))
v = np.zeros((nx, ny))

# 境界条件
u[:, 0] = 1.0  # 左端は固定流速
v[0, :] = 0.0  # 上端は固定流速

# 有限体積法計算
for i in range(1, nx-1):
    for j in range(1, ny-1):
        u[i, j] = (u[i-1, j] + u[i+1, j]) / 2.0 - (v[i, j+1] - v[i, j-1]) / (2.0 * dx)
        v[i, j] = (v[i, j-1] + v[i, j+1]) / 2.0 - (u[i+1, j] - u[i-1, j]) / (2.0 * dy)

# 結果の出力
print("u:")
print(u)
print("v:")
print(v)

実行すると、uとvの2次元配列に流速分布が出力されます。

可視化機能の追加

結果の配列だけ見ても何か分からないので、可視化の機能を追加します。

「先ほどのプログラムの出力結果をmatplotlibで可視化する機能を追加してください」とリクエストして、出力結果を可視化する機能を付けてもらいました。

import numpy as np
import matplotlib.pyplot as plt

# 格子数
nx = 20
ny = 20

# 格子間隔
dx = 1.0
dy = 1.0

# 流速ベクトル
u = np.zeros((nx, ny))
v = np.zeros((nx, ny))

# 境界条件
u[:, 0] = 1.0  # 左端は固定流速
v[0, :] = 0.0  # 上端は固定流速

# 有限体積法計算
for i in range(1, nx-1):
    for j in range(1, ny-1):
        u[i, j] = (u[i-1, j] + u[i+1, j]) / 2.0 - (v[i, j+1] - v[i, j-1]) / (2.0 * dx)
        v[i, j] = (v[i, j-1] + v[i, j+1]) / 2.0 - (u[i+1, j] - u[i-1, j]) / (2.0 * dy)

# 可視化
x = np.linspace(0, nx*dx, nx)
y = np.linspace(0, ny*dy, ny)
X, Y = np.meshgrid(x, y)

plt.quiver(X, Y, u, v)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Flow Distribution")
plt.show()

同じチャットの中であれば、ユーザが話した内容を記憶しており、「先ほどのプログラム」と言えば理解してくれます。

ほかにも、注釈をつけて、などでプログラムの解釈性を上げることも可能です。

また、チャットの実行ごとに生成されるプログラムの中身が若干異なるようで、注文の仕方などを変えて、意図したプログラムを作ってもらえるようにトライ&エラーを行っています。

創作物についての著作権は明示されていないようで、生成物を商用利用しても問題ないように見えます。

人間がプログラミングすることは無くなる?

簡単なプログラムを作るだけであれば、問題なくコーディングができます。知識ベースでプログラムを作るため、理論が明確なものをプログラムにすることは自動化できそうです。

一方で、計算的な処理は苦手なようで、ある変数だけを2倍にして、などの指示は、自身でプログラムを編集したほうが早いかもしれません。

完全にプログラムの知識がなくても良い状態、には未達ですが、人間がAIに取って代わられる未来が近づいています。

関連記事

コメント

タイトルとURLをコピーしました