findindex
名前付きインデックス変数と等価な数値インデックスの検索
構文
説明
例
加法的な原色の名前と減法的な原色の名前によってインデックス付けされる最適化変数 colors を作成します。加法的な色の名前として "black" と "white" を、減法的な色の名前として "black" を含めます。
colors = optimvar("colors",["black","white","red","green","blue"],["cyan","magenta","yellow","black"]);
加法的な色 "red" と "black"、および減法的な色 "black" のインデックス番号を検索します。
[idxadd,idxsub] = findindex(colors,["red","black"],["black"])
idxadd = 1×2
3 1
idxsub = 4
加法的な原色の名前と減法的な原色の名前によってインデックス付けされる最適化変数 colors を作成します。加法的な色の名前として "black" と "white" を、減法的な色の名前として "black" を含めます。
colors = optimvar("colors",["black","white","red","green","blue"],["cyan","magenta","yellow","black"]);
["white","black"]、["red","cyan"]、["green","magenta"]、および ["blue","yellow"] の組み合わせと等価な線形インデックスを検索します。
idx = findindex(colors,["white","red","green","blue"],["black","cyan","magenta","yellow"])
idx = 1×4
17 3 9 15
名前付きインデックス変数を使用して、最適化問題を作成して解きます。問題は、収益で重み付けされた、さまざまな空港へのフルーツのフローを最大化することです。これはそれぞれの重み付きフローへの制約に従います。
rng(0) % For reproducibility p = optimproblem(ObjectiveSense="maximize"); flow = optimvar("flow", ... ["apples", "oranges", "bananas", "berries"], ["NYC", "BOS", "LAX"], ... LowerBound=0,Type="integer"); p.Objective = sum(sum(rand(4,3).*flow)); p.Constraints.NYC = rand(1,4)*flow(:,"NYC") <= 10; p.Constraints.BOS = rand(1,4)*flow(:,"BOS") <= 12; p.Constraints.LAX = rand(1,4)*flow(:,"LAX") <= 35; sol = solve(p);
Solving problem using intlinprog.
Running HiGHS 1.11.0: Copyright (c) 2025 HiGHS under MIT licence terms
MIP has 3 rows; 12 cols; 12 nonzeros; 12 integer variables (0 binary)
Coefficient ranges:
Matrix [4e-02, 1e+00]
Cost [1e-01, 1e+00]
Bound [0e+00, 0e+00]
RHS [1e+01, 4e+01]
Presolving model
3 rows, 12 cols, 12 nonzeros 0s
3 rows, 12 cols, 12 nonzeros 0s
Solving MIP model with:
3 rows
12 cols (0 binary, 12 integer, 0 implied int., 0 continuous, 0 domain fixed)
12 nonzeros
Src: B => Branching; C => Central rounding; F => Feasibility pump; J => Feasibility jump;
H => Heuristic; L => Sub-MIP; P => Empty MIP; R => Randomized rounding; Z => ZI Round;
I => Shifting; S => Solve LP; T => Evaluate node; U => Unbounded; X => User solution;
z => Trivial zero; l => Trivial lower; u => Trivial upper; p => Trivial point
Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | Work
Src Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | LpIters Time
J 0 0 0 0.00% inf 945.5907645 Large 0 0 0 0 0.0s
S 0 0 0 0.00% 1079.371705 1027.233133 5.08% 0 0 0 0 0.0s
1 0 1 100.00% 1027.233133 1027.233133 0.00% 0 0 0 3 0.0s
Solving report
Status Optimal
Primal bound 1027.23313332
Dual bound 1027.23313332
Gap 0% (tolerance: 0.01%)
P-D integral 7.11520598605e-05
Solution status feasible
1027.23313332 (objective)
0 (bound viol.)
0 (int. viol.)
0 (row viol.)
Timing 0.01 (total)
0.00 (presolve)
0.00 (solve)
0.00 (postsolve)
Max sub-MIP depth 0
Nodes 1
Repair LPs 0 (0 feasible; 0 iterations)
LP iterations 3 (total)
0 (strong br.)
0 (separation)
0 (heuristics)
Optimal solution found.
Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 1e-06. The intcon variables are integer within tolerance, options.ConstraintTolerance = 1e-06.
ニューヨークとロサンゼルスへのオレンジとベリーの最適フローを求めます。
[idxFruit,idxAirports] = findindex(flow, ["oranges","berries"], ["NYC", "LAX"])
idxFruit = 1×2
2 4
idxAirports = 1×2
1 3
orangeBerries = sol.flow(idxFruit, idxAirports)
orangeBerries = 2×2
0 980
70 0
この表示は、NYC 向けのオレンジは 0、70 のベリーが NYC 向け、980 のオレンジが LAX 向けで、LAX 向けのベリーは 0 であることを示しています。
次の最適なフローをリストします。
Fruit Airports
----- --------
Berries NYC
Apples BOS
Oranges LAX
idx = findindex(flow, ["berries", "apples", "oranges"], ["NYC", "BOS", "LAX"])
idx = 1×3
4 5 10
optimalFlow = sol.flow(idx)
optimalFlow = 1×3
70 28 980
この表示は、70 のベリーが NYC 向け、28 のアップルが BOS 向けで、980 のオレンジが LAX 向けであることを示しています。
さまざまな地表タイプ、候補となる作物、耕起方法を伴う問題の名前付きインデックス変数を作成します。
land = ["irr-good","irr-poor","dry-good","dry-poor"]; crops = ["wheat-lentil","wheat-corn","barley-chickpea","barley-lentil","wheat-onion","barley-onion"]; plow = ["tradition","mechanized"]; xcrop = optimvar("xcrop",land,crops,plow,LowerBound=0);
初期点を正しいサイズのゼロ配列に設定します。
x0.xcrop = zeros(size(xcrop));
従来どおりに耕作され、乾燥状態で植えられる "wheat-onion" および "wheat-lentil" 作物の場合は、初期値を 3000 に設定します。
[idxLand, idxCrop, idxPlough] = findindex(xcrop, ["dry-good","dry-poor"], ... ["wheat-onion","wheat-lentil"],"tradition"); x0.xcrop(idxLand,idxCrop,idxPlough) = 3000;
以下の 3 つの点の初期値を設定します。
Land Crops Method Value dry-good wheat-corn mechanized 2000 irr-poor barley-onion tradition 5000 irr-good barley-chickpea mechanized 3500
idx = findindex(xcrop,... ["dry-good","irr-poor","irr-good"],... ["wheat-corn","barley-onion","barley-chickpea"],... ["mechanized","tradition","mechanized"]); x0.xcrop(idx) = [2000,5000,3500];
入力引数
最適化変数。OptimizationVariable オブジェクトとして指定します。optimvar を使用して、var を作成します。
例: var = optimvar("var",4,6)
名前付きインデックス。文字ベクトルの cell 配列、文字ベクトル、string ベクトルまたは整数ベクトルとして指定します。strindex 引数の数は、var の次元の数に一致しなければなりません。
例: ["small","medium","large"]
データ型: double | char | string | cell
出力引数
等価の数値インデックス。整数ベクトルとして返されます。出力引数の数は、次のいずれかでなければなりません。
varの次元の数。各出力ベクトルnumindexjは、対応する入力引数strindexjに等価な数値です。1。この場合、各入力
strindexjのサイズはすべてのjで同じでなければなりません。また、出力は線形インデックス付け条件を満たします。var(numindex(j)) = var(strindex1(j),...,strindexk(j))(すべてのjについて)
バージョン履歴
R2018a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)