質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

解決済

1回答

1582閲覧

Pythonで最適化問題を解く際のパッケージに関して

退会済みユーザー

退会済みユーザー

総合スコア0

import

自身のプラットフォーム・プログラム・データセットに対して、外部ソースを取り込むプロセスをimportと呼びます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

3クリップ

投稿2018/01/12 01:58

編集2018/01/17 03:08

###質問内容
Pythonで最適化問題のナップザック問題を解こうとしています。
以下のサイトを参考にしているのですが、「ortoolpy」パッケージのknapsack関数での実装とpulpパッケージをインポートして計算する実装のコードの違いがよくわかりません。
なぜ2つの方法があり、どちらの方が優れているのでしょうか(実行速度が早い等)。

ソースコードは以下のサイトから引用しています。
組み合わせ最適化を使おう

###該当のソースコード

python

1from ortoolpy import knapsack 2size = [21, 11, 15, 9, 34, 25, 41, 52] 3weight = [22, 12, 16, 10, 35, 26, 42, 53] 4capacity = 100 5knapsack(size, weight, capacity) 6>>> 7(105, [0, 1, 3, 4, 5])

python

1from pulp import * 2size = [21, 11, 15, 9, 34, 25, 41, 52] 3weight = [22, 12, 16, 10, 35, 26, 42, 53] 4capacity = 100 5r = range(len(size)) 6m = LpProblem(sense=LpMaximize) # 数理モデル 7x = [LpVariable('x%d'%i, cat=LpBinary) for i in r] # 変数 8m += lpDot(weight, x) # 目的関数 9m += lpDot(size, x) <= capacity # 制約 10m.solve() 11print((value(m.objective), [i for i in r if value(x[i]) > 0.5])) 12>>> 13(105.0, [0, 1, 3, 4, 5])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

knapsack関数での実装の場合、関数にデータを渡すだけで結果を取り出せています。
一方で、
pulpパッケージ利用した場合は、どのように問題を数学的に表現するかを検討する必要があります。
それがコードとしてあらわされている内容になります。

このケースの場合、knapsack関数での実装内容とまったく等しい内容がコード部分に記載されていますから、どちらが優れているなどの優劣はコード自体には存在しないことになります。

しいてこの二つのケースでpulp側のメリットをあげるとすれば、pulpのみのほうは、「importするライブラリがひとつ少なくてすむ」点はメリットといえなくもないです。

なぜ、二つの方法があるか?という点については、関数(やライブラリ)をなぜ作るのか?という問いの回答に近いといえます。

専用の関数(やライブラリ)を作れば、その関数にデータを渡すだけで回答がえられますが、専用関数がなければ、自分でどのように処理するかをすべてきめなくてはいけません。

料理に例えれば、材料をすべて決まった大きさにきって箱に入れるとカレーが自動的にできる箱が専用関数といえます。
専用関数がなければ、煮るだけでよいのか、炒める必要があるのかなど、カレーの製作プロセスを自分ですべて考える必要があります。その手間を省いてくれる分、専用関数は楽チンですね。

投稿2018/01/23 07:05

yag1kaz

総合スコア253

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/23 10:08

大変わかりやすいご回答をいただきましてありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問