Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

マルチスタートの開始点を設定する

スタートポイントを設定する4つの方法

ローカル ソルバーに使用する開始点を MultiStart に指示する方法は 4 つあります。

  • 正の整数 k を渡します。MultiStart は、RandomStartPointSet オブジェクトと problem 構造体を使用しているかのように、k - 1 開始ポイントを生成します。MultiStart は、problem 構造体の x0 開始ポイントも使用するため、合計 k 開始ポイントが生成されます。

  • RandomStartPointSet オブジェクト を渡します。

  • CustomStartPointSet オブジェクト を渡します。

  • RandomStartPointSet および CustomStartPointSet オブジェクトの セル配列 を渡します。実行したい特定のポイントがあるが、MultiStart に他のランダムな開始ポイントも使用させたい場合は、セル配列を渡します。

メモ

MultiStart がすべての開始点を使用するか、境界またはその他の不等式制約を満たす点のみを使用するかを制御できます。詳細については、フィルター開始点(オプション)を参照してください。

開始点の正の整数

k開始点に対してMultiStartを実行する構文は

[xmin,fmin,flag,outpt,allmins] = run(ms,problem,k);

正の整数 k は、MultiStart が使用する開始点の数を指定します。MultiStart は、問題の次元と problem 構造の境界を使用して、ランダムな開始点を生成します。MultiStart は、k - 1 のランダムな開始点を生成し、problem 構造の x0 開始点も使用します。

開始点の RandomStartPointSet オブジェクト

次のように RandomStartPointSet オブジェクトを作成します。

stpoints = RandomStartPointSet;

次のように、RandomStartPointSet から始めて MultiStart を実行します。

[xmin,fmin,flag,outpt,allmins] = run(ms,problem,stpoints);

デフォルトでは、RandomStartPointSet オブジェクトは 10 個の開始点を生成します。NumStartPoints プロパティを使用して開始点の数を制御します。たとえば、40 個の開始点を生成するには、次のようにします。

stpoints = RandomStartPointSet('NumStartPoints',40);

RandomStartPointSet の代わりに ArtificialBound を設定できます。この ArtificialBound は、問題構造からの境界と連動して機能します。

  • コンポーネントに境界がない場合、RandomStartPointSet は下限として -ArtificialBound を使用し、上限として ArtificialBound を使用します。

  • コンポーネントに下限 lb はあるが上限がない場合、 RandomStartPointSet は上限として lb + 2*ArtificialBound を使用します。

  • 同様に、コンポーネントに上限 ub があり、下限がない場合、 RandomStartPointSet は下限として ub - 2*ArtificialBound を使用します。

たとえば、ArtificialBound50100 開始ポイントを生成するには、次のようにします。

stpoints = RandomStartPointSet('NumStartPoints',100, ...
    'ArtificialBound',50);

RandomStartPointSet オブジェクトは、問題構造内の x0 ポイントと同じ次元の開始点を生成します。list を参照してください。

開始点の CustomStartPointSet オブジェクト

特定の開始点のセットを使用するには、次のようにポイントを CustomStartPointSet に配置します。

  1. 開始点をマトリックスに配置します。マトリックスの各行は 1 つの開始点を表します。MultiStart は、StartPointsToRun プロパティによるフィルタリングに従って、マトリックスのすべての行を実行します。詳細については、マルチスタートアルゴリズムを参照してください。

  2. マトリックスから CustomStartPointSet オブジェクトを作成します。

    tpoints = CustomStartPointSet(ptmatrix);

たとえば、各ポイントのコンポーネントが 10 に等しく、平均が 25 の指数分布変数を加えた 40 個の 5 次元ポイントのセットを作成します。

pts = -25*log(rand(40,5)) + 10;
tpoints = CustomStartPointSet(pts);

次のように、CustomStartPointSet から始めて MultiStart を実行します。

[xmin,fmin,flag,outpt,allmins] = run(ms,problem,tpoints);

CustomStartPointSet オブジェクトから元の点の行列を取得するには、list を使用します。

pts = list(tpoints); % Assumes tpoints is a CustomStartPointSet

CustomStartPointSet には StartPointsDimensionNumStartPoints という 2 つのプロパティがあります。これらのプロパティを使用して、CustomStartPointSet オブジェクトを照会できます。たとえば、例の tpoints オブジェクトには次のプロパティがあります。

tpoints.StartPointsDimension
ans =
     5
tpoints.NumStartPoints
ans =
    40

開始点のオブジェクトのセル配列

特定の開始点のセットとランダムに生成されたいくつかの点を使用するには、RandomStartPointSet または CustomStartPointSet オブジェクトのセル配列を渡します。

たとえば、開始点の CustomStartPointSet オブジェクト の 40 個の特定の 5 次元ポイントと RandomStartPointSet の 40 個の追加の 5 次元ポイントの両方を使用するには、次のようにします。

pts = -25*log(rand(40,5)) + 10;
tpoints = CustomStartPointSet(pts);
rpts = RandomStartPointSet('NumStartPoints',40);
allpts = {tpoints,rpts};

allpts セル配列から MultiStart を実行します。

% Assume ms and problem exist
[xmin,fmin,flag,outpt,allmins] = run(ms,problem,allpts);

関連するトピック