ページ移動:JavaScriptを有効にして下さい!
18.実行速度改良&汎用化

実行速度改良

いろいろ試してみると、解の求まり方が、PCの性能により異なるように見られます。

たとえば、同一のOfficeバージョンおよびソルバーの設定でも、高性能PCと比較して低性能PCではより時間が掛かる」だけでは無く、
解が求まらない場合があります。

ただし、その場合でも、「改善が見られない最大時間」(以降、「最大時間」と呼称)を大きくすることで解に達し易くなるようです。
  右図赤枠


PC性能と、「最大時間」の値について

最大時間の設定値 短時間 30~60 長時間 120~300
低性能PC 途中で計算が終了して解が得られない場合がある。 解が求まる可能性大
高性能PC 短時間で解が求まる可能性大 解が求まった後でも、終了までに時間が掛かる 

よって、「最大時間」を試行回数に応じて大きくしていくようにすると、「容易に解が求まり易い場合は短時間で、求まりにくい場合は、長時間掛かるがいつかは求まる。」とすることが出来そうです。

具体的には、初期値30から始めて、試行回数が増えるに従って、
「最大時間」を30,60,120,240と大きくしていきます。(最大値300)

下図の赤枠内が、「最大時間」の初期設定と、試行回数に応じて倍増していく処理。下図赤枠

  SolverGet関数は、ソルバーの設定値を取得する関数
  SolverOptions関数は、ソルバーのパラメータを設定する関数


 









補足:サブルーチン名の変更

処理内容と名前が不一致のため、名前を変更

Private Function SolverDialog(
  ↓
Public Function Solver_Solve(


計測結果

けっこう、ばらつきがあります。



・・・同一Officeでも挙動が異なることから、SolverアドインはOfficeではなく、OSバージョンに依存しているようにも思われます。
(ただし、「ソルバー」アドイン自体はOfficeディレクトリに存在。不可解)

汎用化

ソルバーの設定パラメータを見ると、目的値は名前で参照されますが、変化させるセルのアドレスは即値に展開されてしまいます。
・・・ 変化させるセルは固定値ではなく、数式で作成しているため、名前で参照できないようです。

このままでは、変化させるセルを拡張/縮小した場合に、パラメータを変更する必要があります。
かといって、固定範囲とするとする場合、同じく、変化させるセルを拡張/縮小した場合に名前範囲を再定義する必要があります。

よって、ここでは、プログラムによりパラメータのセルアドレスを名前で設定します。

これにより、変化させるセル範囲を変更しても、名前の再定義やソルバーパラメータの再設定が不要となります。

下図がソルバーのパラメータを設定する部分。SolverOptions関数の例を参考。



  SolverGet関数は、ソルバーの設定値を取得する関数
  SolverOptions関数は、ソルバーのパラメータを設定する関数


ページ移動:JavaScriptを有効にして下さい!

関連

×
PageTop