[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ソルバーが遅くなって使えない…』(kagemarucat)
すみません、どなたか教えてください。
ソルバーで使用して、
4000という数字に近い組み合わせを表示させていたのですが、
いつの間にかむちゃくちゃ遅くなってしまいました。
昨日までは早かったのに、今では使い物にならないくらい遅いです。
元のスピードに戻すことは出来ないでしょうか?
お願いします。、
< 使用 Excel:Excel2019、使用 OS:Windows10 >
遅くなったのではなく、たぶん以前と違う設定で実行したのだと思います。
同一手法で遅くなるというのは考えにくいですね。
今回の課題は、変数が13個だから、組み合わせは 2^13 = 8,192 とおりしかない。
13重のループを使った原始的方法でも
すべての組み合わせを作れば、結果は簡単にわかります。
ソルバーについての質問と考えて、
少しメモして、閲覧者の参考に供したい。
ソルバーが遅いというか、
採用する手法によって、分岐をどこまで細かくとって分析するか等が変わるので、
結果を出す時間は、それらの手法に応じて変動する、という認識が必要。
つまり、3つある"解決手法"のどれを選択するかが、かなり重要。
実行画面のインストラクションとして、
| 「解決方法」の選択には、
| ・滑らかな非線形を示すソルバー問題には 「GRG非線形」エンジン
| ・線形を示すソルバー問題には 「LP シンプレックス」エンジン
| ・滑らかではない非線形を示すソルバー問題には 「エボリューショナリ」エンジン
| を選択して下さい。
と書いてあるのでこれが全てだが、少し追記しておきます。
●「シンプレックス LP」
これは、線形計画問題において威力を発揮する伝統的方法。
今回のケースでは、非線形なので適当ではないと思う。
反応は早いものの、3960という解が最適と表示してしゃあしゃあとしている。
Excelのソルバーは必ずしも最適解を保証するものではないと知るべき。
特にこの問題に「シンプレックス LP」を使うのは不適当です。
●「GRG非線形」
これは非線形モデルに適用するもの。("一般化簡約勾配法"というのを利用するらしい)
これも、「滑らかな非線形」ではないので、手法選択の誤りということになる。
それでも動作させてみると、
初期値によっては、3919などを最適値として報告したりする。
初期値依存性が結構あるようです。
これを改善するため、オプションに、「マルチスタートを利用する」というのがある。
(初期値をいくつかランダムに生成して使うようです。)
逆に、このオプションを利用すると、精度は上がるものの、
時間が異常にかかる、容易に返ってこないこともある。今回もそのようだ。。
●「エボリューショナリー」
非線形モデルに対応可。("遺伝的アルゴリズム"を使用しているとのこと)
今回はこれを使うべき。
これは、時間を若干要すものの、3,985という最適解を表示する。
時間を縮小するには、オプションにある「改善が見られない最大時間」を変更する。
デフォルトでは30になっていたが、これを5などにすれば、早くに見切りをつけてくれる。
5にしても3,985を表示した。(それでも10秒近くかかりました)
■上記をひとことで言えば、今回の問題は、
・「エボリューショナリー」を使い、
・さらに、「改善が見られない最大時間」を5 に設定するとよい、
ということだが、全体の概要を頭に入れた方がよいと思う。
(余談)
ちなみに、Excelではないが、別の処理系でGLPKというfreeのソルバーを使って解いたところ、
0.007秒で結果(3985)が出た。道具によって、得られるものは変わってきます。
(γ) 2021/05/17(月) 08:38
最後まで細かな説明本当に感謝します!
(影猫) 2021/05/18(火) 21:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.