"MOSEK" (最適化メソッド)
詳細
- MOSEKは,実数および混合整数の変数を持つ大規模で疎な線形および二次の最適化問題と,実変数を持つ円錐最適化問題のための商用ソルバである.
- MOSEKは,実数値の円錐問題に加え,線形,二次,指数,累乗の円錐との組合せで混合整数変数も扱うことができる.
- MOSEKのライセンスの取得に関する情報は,MOSEKのライセンスを取得するのページを参照されたい.
- Method"MOSEK"は,任意の凸最適化関数で,また適切な問題についてはNMinimizeおよび関連関数で使うことができる.
- 次は,"MOSEK"メソッドの可能なオプションと対応するデフォルト値である.
-
MaxIterations Automatic 使用する最大反復回数 Tolerance Automatic 内部的な比較の許容範囲 Method Automatic MOSEKサブメソッド
例題
すべて開く すべて閉じる例 (2)
スコープ (17)
適用可能な関数 (8)
NMaximizeを"MOSEK"メソッドで使い,線形制約に従って
を最大化する:
NMaximize[{1 - Abs[x + 2 y], {x + y == 1, x - y ≤ 2}}, {x, y}, Method -> "MOSEK"]ConvexOptimizationを使って,半径
,中心
の円板上で
を最小化する:
ConvexOptimization[ -Log[x + y], {x, y}∈Disk[{2, 2}], {x, y}, Method -> "MOSEK"]ConvexOptimization[ -Log[x + y], {x, y}∈Disk[{2, 2}], {x, y}, {"PrimalMinimumValue", "PrimalMinimizer"}, Method -> "MOSEK"]ConicOptimizationを使い,
と
に従って
を最小化する:
ConicOptimization[t, {{x, y}∈Disk[{1, 1}], x + y^1.5 ≤ t}, {x, y, t}, Method -> "MOSEK"]ConicOptimization[t, {{x, y}∈Disk[{1, 1}], x + y^1.5 ≤ t}, {x, y, t}, "DualMaximizer", Method -> "MOSEK"]SemidefiniteOptimizationを使い,半正定値行列制約
に従って
を最小化する:
constraint = VectorGreaterEqual[{{{x, 1}, {1, y}}, 0}, {"SemidefiniteCone", 2}]SemidefiniteOptimization[x + 2y, constraint, {x, y}, Method -> "MOSEK"]SecondOrderConeOptimizationを使い,
に従って
を最小化する:
SecondOrderConeOptimization[x + y, {Norm[{x, y}] ≤ 1, x + y == 1 / 2, y ≥ 0}, {x, y}, Method -> "MOSEK"]c = {1, 1};
{Subscript[a, 1], Subscript[b, 1], Subscript[α, 1], Subscript[β, 1]} = {{{1, 0}, {0, 1}}, 0, 0, 1};
{Subscript[a, 2], Subscript[b, 2], Subscript[α, 2], Subscript[β, 2]} = {0, 0, {0, 1}, 0};{Subscript[a, 3], Subscript[b, 3], Subscript[α, 3], Subscript[β, 3]} = {{{1, 1}}, {-1 / 2}, 0, 0};SecondOrderConeOptimization[c, {{Subscript[a, 1], Subscript[b, 1], Subscript[α, 1], Subscript[β, 1]}, {Subscript[a, 2], Subscript[b, 2], Subscript[α, 2], Subscript[β, 2]},
{Subscript[a, 3], Subscript[b, 3], Subscript[α, 3], Subscript[β, 3]}}, Method -> "MOSEK"]QuadraticOptimizationを使い,
と
に従って
を最小化する:
QuadraticOptimization[x^2 + y^2, {x + y == 2, 0 ≤ y ≤ 2}, {x, y}, Method -> "MOSEK"]{q, c} = {{{2, 0}, {0, 2}}, {0, 0}};
{a, b} = {{{0, 1}, {0, -1}}, {0, 2}};
{Subscript[a, eq], Subscript[b, eq]} = {{{1, 1}}, {-2}};QuadraticOptimization[{q, c}, {a, b}, {Subscript[a, eq], Subscript[b, eq]}, Method -> "MOSEK"]LinearOptimizationを使い,
に従って
を最小化する:
LinearOptimization[x + y, {x + 2y ≥ 3, x ≥ -1}, {x, y}, Method -> "MOSEK"]LinearOptimization[{1, 1}.v, {{1, 2}, {1, 0}}.v{3, -1}, v, Method -> "MOSEK"]GeometricOptimizationを使い,外周が最大で1になるようにして長方形の面積を最大にする:
GeometricOptimization[(1/w h), {2w + 2h ≤ 1}, {h, w}, Method -> "MOSEK"]スケーラブルな問題 (9)
制約条件
に従ってTotal[x]を最小化する.ベクトル変数
は非負の値で使う:
n = 1000;
m = 2000;BlockRandom[constants = {a == RandomReal[1, {m, n}], b == RandomReal[1, m]}, RandomSeeding -> 123];LinearOptimization[Total[x], {constants, a.x + b1}, {
x∈Vectors[n, NonNegativeReals]}, "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTiming制約条件
に従ってTotal[x]を最小化する.
は非負の整数値ベクトルとする:
n = 100;
m = 100;BlockRandom[constants = {a == RandomReal[1, {m, n}], b == RandomReal[1, m]}, RandomSeeding -> 123];LinearOptimization[Total[x], {constants, a.x + b1}, {
x∈Vectors[n, NonNegativeIntegers]}, "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTimingベクトル変数
を使い,制約条件
に従ってTotal[x]を最小化する:
n = 1000;
m = 2000;BlockRandom[constants = {a == RandomReal[1, {m, n}], b == RandomReal[1, m]}, RandomSeeding -> 123];SecondOrderConeOptimization[Total[x], {constants, Norm[a.x - b] ≤ 10}, x, "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTiming1000次元単位球体内にある点の整数値の座標の合計を最小化する:
SecondOrderConeOptimization[Total[x], Norm[x] ≤ 1, x∈Vectors[1000, Integers], "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTiming制約条件
に従い.疎な半定値対称行列
について
を最小化する:
n = 1000;
m = 500;
Q = SparseArray[{{i_, i_} -> 10, {i_, j_} /; Abs[i - j] == 10 -> -1}, {n, n}];BlockRandom[constants = {a == RandomReal[1, {m, n}], b == RandomReal[1, m]}, RandomSeeding -> 123];QuadraticOptimization[x.Q.x, {constants, a.x + b1}, x, "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTiming大きい疎な行列
,
,
について,制約条件
に従って
を最小化する:
n = 50000;
q = SparseArray[{{i_, i_} -> 100., {i_, j_} /; Abs[j - i] == 1000 -> -1.}, {n, n}];c = ConstantArray[-1., n];
a = SparseArray[{{i_, i_} -> 1., {i_, j_} /; j == i + 1 -> -2., {i_, j_} /; j == i + 2 -> 1.}, {n - 2, n}];
b = ConstantArray[0, n - 2];QuadraticOptimization[{q, c}, {a, b}, "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTiming疎な半定値対称行列
について,Total[x]≥1に従ってx.Q.x+Total[x]を最小化する:
n = 200;
Q = SparseArray[{{i_, i_} -> 10, {i_, j_} /; Abs[i - j] == 10 -> -1}, {n, n}];QuadraticOptimization[x.Q.x + Total[x], Total[x] ≥ 1, x∈Vectors[n, Integers], "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTiming非負の実数項を含む
行列
が与えられたとき,同様な行列
の二乗和(フロベニウスノルムの二乗)を最小にする正の項を持つ対角行列
を求める:
n = 50;
A = BlockRandom[10 ^ RandomReal[{-5, 5}, {n, n}], RandomSeeding -> 1234];
を
の対角項とする.
は正なので
の項は
である.したがって,積の項は
である:
GeometricOptimization[Sum[Indexed[A, {i, j}]^2(Indexed[d, {i}]^2/Indexed[d, {j}]^2), {i, 1, n}, {j, 1, n}], {}, {d∈Vectors[n]}, Method -> "MOSEK"]//AbsoluteTimingn = 1000;{a, b} = BlockRandom[{RandomReal[{-1, 1}, {n, n}], Range[n]}, RandomSeeding -> 123];ConvexOptimization[Norm[ap.x - bp, 1.5], {ap == a, bp == b}, {x}, "PrimalMinimumValue", Method -> "MOSEK"]//AbsoluteTimingテクニカルノート
関連するガイド
-
▪
- 凸最適化
関連するワークフロー
- MOSEKのライセンスを取得する
関連するワークフロー
▪