0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SnowflakeAdvent Calendar 2024

Day 19

Snowflakeで数理最適化の問題(整数計画問題)を解いてみる

Posted at

やること

Snowflakeで数理最適化の問題を解いてみるで解いた最適化問題の中でも少し難しい整数計画問題をSnowflake を用いて解いてみる.少し難しい理由は,こちら明日から役立つ「オペレーションズ・リサーチ概論」を視聴いただければ幸いである.

image.png

サンプルコード

以下,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

image.png

問題規模が小さいため,あまり比較にはならないが,線形計画問題に比べ,整数計画問題のほうが計算時間が少し大きいことがわかる.計算量が大きな問題(NP困難問題)では,この比にならない計算時間がかかる(問題規模が小さい場合においても,現実的な時間では解けないことが多い).

  • 線形計画問題
    image.png
  • 整数計画問題
    image.png
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?