HyperStudyを利用した地球上の標高最高地点探索


この記事ではHyperStudyとPythonを連携して、地球上の標高最高地点の探索をする方法を記載します。

設計変数は緯度、経度として、目的関数は標高の最大化です。

標高を取得する関数をどうするか

標高の最大化をするためには、緯度、経度を引数としてその地点の標高が得られる関数を見つける必要があります。少し調べてみると、有償のサービスとしては、Google Elevation APIがあります。試すには有償のサービスは敷居が高いので、無償で使えるサービスを探してみると、Open-ElevationというAPIサービスがありました。こちらは寄付を募っていますが、無償での利用も可能なものでした。使い方については、こちらに記載があります通り、URLの特定の箇所に、緯度、経度を入力してアクセスすると、標高のデータがJSON形式で返答されるというものです。

このAPIをHyperStudyから利用できれば最適化探索をすることができます。そこで、pythonで、APIへアクセスする関数を記述しそのpythonスクリプトをPreference Fileに登録することで、HyperStudyで関数として呼び出せるようにします。これにより、HyperStudyでOpen-ElevationのAPIの利用が可能になります。この方法では登録されたpythonスクリプトがHyperStudyから関数として呼び出すことができますので、ほかにもいろいろな使い道がありそうです。

Pythonスクリプトの説明

標高を取得するためのpythonスクリプトの簡単な解説を記載します。

#APIでのやり取りで利用するrequestsモジュールと結果を処理するjsonモジュールを利用します。
import requests
import json
#関数を定義します。ここでは、緯度経度を指定すると、returnで標高が返ってくるように記載をしています。
def getElev(lat,lon):
    response = requests.get(f'https://api.open-elevation.com/api/v1/lookup?locations={lat:.6f},{lon:.6f}').json()
    return response['results'][0]['elevation']

Preference Fileへの記載

Preference Fileを下記のように記載します。

*Id("HyperStudy v14.0")
    *BeginDefaults()
        *BeginPlotDefaults()
            *RegisterPythonFunction("getElev","./python_f.py",2)
        *EndPlotDefaults()
    *EndDefaults()

HyperStudyでのPreferences File利用の設定

Preferences Fileを使用するにチェック

Preferences Fileの設定

Preferences Fileの設定で、先に作成したPreferences Fileを選択します。




これにより、地球の標高の探索を実施できる環境が整いました。

HyperStudyでstudyを作成

モデル定義

Internal Mathを選択

入力変数の定義

緯度経度をそれぞれ望む範囲で指定。初期値も設定。今回の例では全球を範囲として、初期値を三島市役所近辺にしました。

出力応答の定義

下図のようにpythonで定義し、登録した関数を利用します。

結果

本件ではARSM, GRSM, GAの最適化アルゴリズムを試してみました。地球上の標高最高地点の探索結果は下記のようになりました。

 

アルゴリズム

緯度(度)

経度(度)

標高(m)

計算時間

ARSM

32.803843

88.683524

5131

31

GRSM

32.271017

85.406759

5353

110

GA

34.344347

85.840275

6440

53

google earthで確認すると下図のように、どのアルゴリズムでもデフォルト設定ではチベット高原までは近づくことができますが、ヒマラヤ山脈にまでたどり着くことはできませんでした。また、時間はかかりますが、GAは他のアルゴリズムよりも1000m以上標高の高い箇所を見つけることができました。

パラメータを変更することで結果がどのように変わるかというのも試してみると面白いかもしれません。こちらに→HyperStudyのアーカイブファイルのダウンロードリンクを記載してますので、ご興味のある方はお試しいただくことが可能です。