Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

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

对于可在任何干旱条件下种植的传统耕作农作物 "wheat-onion""wheat-lentil",将初始值设置为 3000。

[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 对象。使用 optimvar 创建 var

示例: var = optimvar('var',4,6)

命名索引,指定为字符向量元胞数组、字符向量、字符串向量或整数向量。strindex 参数的数目必须等于 var 中的维数。

示例: ["small","medium","large"]

数据类型: double | char | string | cell

输出参数

全部折叠

等效数值索引,以整数向量形式返回。输出参数的数目必须为下列值之一:

  • var 中的维数。每个输出向量 numindexj 是对应输入参数 strindexj 的等效数值索引。

  • 1。在这种情况下,对于所有 j,每个输入 strindexj 的大小必须相同,并且输出满足线性索引条件

    var(numindex(j)) = var(strindex1(j),...,strindexk(j))(对于全部 j)。

在 R2018a 中推出