findindex
Encontrar equivalentes de índice numérico de variables de índice con nombre
Sintaxis
Descripción
Ejemplos
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
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
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 salidanumindexj
es el equivalente numérico del argumento de entradastrindexj
correspondiente.Uno. En este caso, el tamaño de cada
strindex
j
de entrada debe ser el mismo para todoj
y la salida satisface el criterio de indexación linealvar(numindex(j)) = var(strindex1(j),...,strindexk(j))
para todoj
.
Historial de versiones
Introducido en 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.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)