やること
Snowflakeで数理最適化の問題を解いてみるで解いた最適化問題の中でも少し難しい整数計画問題をSnowflake を用いて解いてみる.少し難しい理由は,こちら明日から役立つ「オペレーションズ・リサーチ概論」を視聴いただければ幸いである.
サンプルコード
以下,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, cat="Integer") # 変数
y = LpVariable("y", lowBound=0, cat="Integer") # 変数
m += x + y # 目的関数
m += x + 4 * y <= 8 # 制約条件1
m += 2 * x + y <= 8 # 制約条件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
問題規模が小さいため,あまり比較にはならないが,線形計画問題に比べ,整数計画問題のほうが計算時間が少し大きいことがわかる.計算量が大きな問題(NP困難問題)では,この比にならない計算時間がかかる(問題規模が小さい場合においても,現実的な時間では解けないことが多い).