Contenido principal

findindex

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

Descripción

[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.

ejemplo

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.
Running HiGHS 1.7.1: Copyright (c) 2024 HiGHS under MIT licence terms
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)
   12 nonzeros

        Nodes      |    B&B Tree     |            Objective Bounds              |  Dynamic Constraints |       Work      
     Proc. InQueue |  Leaves   Expl. | BestBound       BestSol              Gap |   Cuts   InLp Confl. | LpIters     Time

         0       0         0   0.00%   1160.150059     -inf                 inf        0      0      0         0     0.0s
 S       0       0         0   0.00%   1160.150059     1027.233133       12.94%        0      0      0         0     0.0s

Solving report
  Status            Optimal
  Primal bound      1027.23313332
  Dual bound        1027.23313332
  Gap               0% (tolerance: 0.01%)
  Solution status   feasible
                    1027.23313332 (objective)
                    0 (bound viol.)
                    0 (int. viol.)
                    0 (row viol.)
  Timing            0.00 (total)
                    0.00 (presolve)
                    0.00 (postsolve)
  Nodes             1
  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.

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