Find numeric index equivalents of named index variables

Create an optimization variable named `colors`

that is indexed by the primary additive color names and the primary subtractive color names. Include `'black'`

and `'white'`

as additive color names and `'black'`

as a subtractive color name.

colors = optimvar('colors',["black","white","red","green","blue"],["cyan","magenta","yellow","black"]);

Find the index numbers for the additive colors `'red'`

and `'black'`

and for the subtractive color `'black'`

.

[idxadd,idxsub] = findindex(colors,{'red','black'},{'black'})

`idxadd = `*1×2*
3 1

idxsub = 4

Create an optimization variable named `colors`

that is indexed by the primary additive color names and the primary subtractive color names. Include `'black'`

and `'white'`

as additive color names and `'black'`

as a subtractive color name.

colors = optimvar('colors',["black","white","red","green","blue"],["cyan","magenta","yellow","black"]);

Find the linear index equivalents to the combinations `["white","black"]`

, `["red","cyan"]`

, `["green","magenta"]`

, and `["blue","yellow"]`

.

idx = findindex(colors,["white","red","green","blue"],["black","cyan","magenta","yellow"])

`idx = `*1×4*
17 3 9 15

Create and solve an optimization problem using named index variables. The problem is to maximize the profit-weighted flow of fruit to various airports, subject to constraints on the weighted flows.

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. LP: Optimal objective value is -1027.472366. Heuristics: Found 1 solution using rounding. Upper bound is -1027.233133. Relative gap is 0.00%. Cut Generation: Applied 1 mir cut, and 2 strong CG cuts. Lower bound is -1027.233133. Relative gap is 0.00%. Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).

Find the optimal flow of oranges and berries to New York and Los Angeles.

[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.0000
70.0000 0

This display means that no oranges are going to `NYC`

, 70 berries are going to `NYC`

, 980 oranges are going to `LAX`

, and no berries are going to `LAX`

.

List the optimal flow of the following:

`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.0000 28.0000 980.0000

This display means that 70 berries are going to `NYC`

, 28 apples are going to `BOS`

, and 980 oranges are going to `LAX`

.

Create named index variables for a problem with various land types, potential crops, and plowing methods.

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);

Set the initial point to a zero array of the correct size.

x0.xcrop = zeros(size(xcrop));

Set the initial value to 3000 for the `"wheat-onion"`

and `"wheat-lentil"`

crops that are planted in any dry condition and are plowed traditionally.

[idxLand, idxCrop, idxPlough] = findindex(xcrop, ["dry-good","dry-poor"], ... ["wheat-onion","wheat-lentil"],"tradition"); x0.xcrop(idxLand,idxCrop,idxPlough) = 3000;

Set the initial values for the following three points.

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];

`var`

— Optimization variable`OptimizationVariable`

objectOptimization variable, specified as an `OptimizationVariable`

object. Create `var`

using `optimvar`

.

**Example: **`var = optimvar('var',4,6)`

`strindex`

— Named indexcell array of character vectors | character vector | string vector | integer vector

Named index, specified as a cell array of character vectors, character
vector, string vector, or integer vector. The number of
`strindex`

arguments must be the number of dimensions
in `var`

.

**Example: **`["small","medium","large"]`

**Data Types: **`double`

| `char`

| `string`

| `cell`

`numindex`

— Numeric index equivalentinteger vector

Numeric index equivalent, returned as an integer vector. The number of output arguments must be one of the following:

The number of dimensions in

`var`

. Each output vector`numindexj`

is the numeric equivalent of the corresponding input argument`strindexj`

.One. In this case, the size of each input

`strindex`

`j`

must be the same for all`j`

, and the output satisfies the linear indexing criterion`var(numindex(j)) = var(strindex1(j),...,strindexk(j))`

for all`j`

.

A modified version of this example exists on your system. Do you want to open this version instead?

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.

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Select web siteYou can also select a web site from the following list:

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

- 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)