exponenta event banner

findindex

Поиск числовых индексных эквивалентов именованных индексных переменных

Описание

пример

[numindex1,numindex2,...,numindexk] = findindex(var,strindex1,strindex2,...,strindexk) поиск числовых индексных эквивалентов именованных индексных переменных в переменной оптимизации var.

пример

numindex = findindex(var,strindex1,strindex2,...,strindexk) находит линейные индексные эквиваленты именованных индексных переменных.

Примеры

свернуть все

Создание переменной оптимизации с именем 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.
LP:                Optimal objective value is -1027.472366.                                         

Heuristics:        Found 1 solution using ZI round.                                                 
                   Upper 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).

Найдите оптимальный поток апельсинов и ягод в Нью-Йорк и Лос-Анджелес.

[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

Этот дисплей означает, что апельсины не собираются NYC, 70 ягод собираются NYC, 980 апельсинов собираются LAX, и никакие ягоды не собираются LAX.

Перечислите оптимальный поток:

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

Этот дисплей означает, что 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));

Установите начальное значение 3000 для "wheat-onion" и "wheat-lentil" посевы, которые высажены в любом сухом состоянии и распаханы традиционно.

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

Задайте начальные значения для следующих трех точек.

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 объект. Создать var использование optimvar.

Пример: var = optimvar('var',4,6)

Названный индекс, определенный как множество клетки векторов характера, вектора характера, натягивает вектор или целочисленный вектор. Количество strindex аргументы должны быть числом измерений в var.

Пример: ["small","medium","large"]

Типы данных: double | char | string | cell

Выходные аргументы

свернуть все

Числовой эквивалент индекса, возвращаемый как целочисленный вектор. Число выходных аргументов должно быть одним из следующих:

  • Количество размеров в var. Каждый выходной вектор numindexj числовой эквивалент соответствующего входного аргумента strindexj.

  • Один. В этом случае размер каждого входа strindexj должно быть одинаковым для всех jи выходной сигнал удовлетворяет критерию линейного индексирования

    var(numindex(j)) = var(strindex1(j),...,strindexk(j)) для всех j.

Представлен в R2018a