やること
以下のような高校数学でも習うような簡単な問題をSnowflake を用いて解いてみる.
今回解くのは,数理最適化の中でも簡単に解くことのできる,連続な線形最適化問題とする.数理最適化についてはUdemyでコンテンツを出しているため、こちら明日から役立つ「オペレーションズ・リサーチ概論」を視聴いただければ幸いである.
サンプルコード
以下,Python on Snowflake で動作するサンプルコードである.
Snowflake のデータベースへのアクセスは行っていないが,応用すれば,Snowflake のデータベースからデータを入力し,結果を書き込むことも可能である.
import snowflake.snowpark as snowpark
from snowflake.snowpark.functions import col
from pulp import LpMaximize, LpProblem, LpVariable, value
import pandas as pd
def main(session: snowpark.Session):
m = LpProblem(sense=LpMaximize) # 数理モデル
x = LpVariable("x", lowBound=0) # 変数
y = LpVariable("y", lowBound=0) # 変数
m += x + y # 目的関数
m += x + 2 * y <= 2 # 制約条件1
m += 2 * x + y <= 2 # 制約条件2
m.solve() # ソルバーの実行
results = [{'var': v.name, 'val': v.varValue} for v in m.variables()]
df_results = pd.DataFrame(results)
df_results.loc[len(df_results)] = ['opt',value(m.objective)]
dataframe = session.create_dataframe(df_results)
return dataframe