Main Content

findindex

Encontrar equivalentes de índice numérico de variables de índice con nombre

Descripción

ejemplo

[numindex1,numindex2,...,numindexk] = findindex(var,strindex1,strindex2,...,strindexk) encuentra los equivalentes de índice numérico de las variables de índice con nombre en la variable de optimización var.

ejemplo

numindex = findindex(var,strindex1,strindex2,...,strindexk) encuentra los equivalentes de índice lineal de las variables de índice con nombre.

Ejemplos

contraer todo

Cree una variable de optimización llamada colors que esté indexada por los nombres de colores primarios aditivos y los nombres de colores primarios sustractivos. Incluya 'black' y 'white' como nombres de colores aditivos y 'black' como un nombre de color sustractivo.

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

Busque los número de índice para los colores aditivos 'red' y 'black' y para el color sustractivo 'black'.

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

     3     1

idxsub = 4

Cree una variable de optimización llamada colors que esté indexada por los nombres de colores primarios aditivos y los nombres de colores primarios sustractivos. Incluya 'black' y 'white' como nombres de colores aditivos y 'black' como un nombre de color sustractivo.

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

Busque los equivalentes de índice lineal para las combinaciones ["white","black"], ["red","cyan"], ["green","magenta"] y ["blue","yellow"].

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

    17     3     9    15

Cree y resuelva un problema de optimización utilizando variables de índice con nombre. El problema consiste en maximizar el flujo de fruta ponderado según beneficios a varios aeropuertos, sujeto a restricciones en los flujos ponderados.

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 ZI round.                                                 
                   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 intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05.

Encuentre el flujo óptimo de naranjas y bayas a Nueva York y Los Ángeles.

[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

Esta visualización indica que no se envían naranjas a NYC, se envían 70 bayas a NYC, se envían 980 naranjas a LAX y no se envían bayas a LAX.

Enumere el flujo óptimo de las siguientes frutas:

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

Esta visualización indica que se envían 70 bayas a NYC, se envían 28 manzanas a BOS y se envían 980 naranjas a LAX.

Cree variables de índice con nombre para un problema con varios tipos de terrenos, cultivos potenciales y métodos de labranza.

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

Establezca el punto inicial en un arreglo cero del tamaño correcto.

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

Establezca el valor inicial en 3000 para los cultivos de "wheat-onion" y "wheat-lentil" que se siembran en cualquier condición de secano y que se labran de manera tradicional.

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

Establezca los valores iniciales para los tres puntos siguientes.

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

Argumentos de entrada

contraer todo

Variable de optimización, especificada como un objeto OptimizationVariable. Cree var utilizando optimvar.

Ejemplo: var = optimvar('var',4,6)

Índice con nombre, especificado como un arreglo de celdas de vectores de caracteres, vector de caracteres, vector de cadenas o vector de enteros. El número de argumentos strindex debe ser el número de dimensiones en var.

Ejemplo: ["small","medium","large"]

Tipos de datos: double | char | string | cell

Argumentos de salida

contraer todo

Equivalente de índice numérico, devuelto como un vector de enteros. El número de argumentos de salida debe ser uno de los siguientes:

  • El número de dimensiones en var. Cada vector de salida numindexj es el equivalente numérico del argumento de entrada strindexj correspondiente.

  • Uno. En este caso, el tamaño de cada strindexj de entrada debe ser el mismo para todo j y la salida satisface el criterio de indexación lineal.

    var(numindex(j)) = var(strindex1(j),...,strindexk(j)) para todo j.

Historial de versiones

Introducido en R2018a