主要内容

命名索引用于优化变量

创建命名指数

优化变量可以使用名称进行索引元素。您可以在创建变量或之后提供名称。例如,在创建变量时给出名称。

x = Optimvar('X',[“联合的”“汉莎航空”“维珍空气”])
x = 1x3具有属性的优化阵列:数组范围属性:名称:'x'类型:'连续'索引name:{{} {1x3 cell}}元素属性:低行:[-inf -inf -inf]上行:[infinf inf]看到展示变量。看到展示的边界。

优越的自动映射您指定为索引号码的名称按变量的顺序。例如,“联合的”对应于索引1,“汉莎航空”对应于索引2,和“维珍空气”对应于索引3.显示此最后变量进行确认。

展示(x(3))
[x('Virgin Air')]

索引名称使您能够解决元素X通过索引名称。例如:

路线= 2 * x(“联合的”)+ 3 * x(“维珍空气”
路线=线性优化表达2 * x('United')+ 3 * x('Virgin Air')

创建变量后,您可以创建或更改索引名称。但是,您无法在构造后更改优化变量的大小。因此,您只能通过设置索引与原始变量相同大小的新名称来更改索引名称。例如:

x = Optimvar('X',3,2);x.indexnames = {{'row1''row2''row3'},{'col1''col2'}};

您可以单独为每个维度设置索引名称:

x.indexnames {1} = {'row1''row2''row3'};x.indexnames {2} = {'col1''col2'};

您还可以为特定元素设置索引名称:

x.indexnames {1} {2} ='重要的是';

检查变量的索引名称。

x.indexnames {1}
ans =.1x3细胞{'Row1'} {'重要的东西'} {'row3'}
x.indexnames {2}
ans =.1x2细胞{'col1'} {'col2'}

使用命名索引

您可以通过使用命名索引变量轻松创建和调试一些问题。例如,考虑变量X这是由名称索引的vars.

vars = {'p1''p2''i1''i2''C''le1''le2''he1''他'......'hps''MPS''lps''bf1''bf2''EP''pp'};x = Optimvar('X',vars,'indowbound',0);

创建界限,客观函数和线性约束X通过使用命名索引。

X('p1').lowerbound = 2500;X('i2').pperbound = 244000;linprob = OptimProblem;linprob.objective = 0.002614 * x('hps')+ 0.0239 * x('pp')+ 0.009825 * x('EP');linprob.constraints.cons1 = x('i1') - X('he1')<= 132000;

您可以使用字符串()或字符向量('')在索引变量下不分青红皂白地。例如:

X(“p2”).LowerBound = 3000;X('MPS').LowerBound = 271536;showbounds(x)
2500 <= x('p1')3000 <= x('p2')0 <= x('i1')0 <= x('i2')<= 244000 0 <= x('c')0 <= x('le1')0 <= x('le2')0 <= x('he1')0 <= x('he2')0 <= x('hps')271536 <= x('mps')0 <= x('lps')0 <= x('bf1')0 <= x('bf2')0 <= x('ep')0 <= x('pp')

您使用字符串指定的变量没有区别,例如X(“P2”)以及您用字符向量指定的变量,例如X('MPS')

由于命名索引变量具有数字等价物,因此即使您已命名为索引变量,也可以使用普通的求和和冒号运算符。例如,您可以拥有这些表单的约束:

constr = sum(x)<= 100;展示(约束)
x('p1')+ x('p2')+ x('i1')+ x('i2')+ x('c')+ x('le1')+ x('le2')+ x('he1')+ x('he2')+ x('hps')+ x('mps')+ x('lps')+ x('bf1')+ x('bf2')+ x('EP')+ x('pp')<= 100
y = Optimvar('是',{'红色的''绿色''蓝色的'},{'塑料''木头''金属'},......'类型''整数''indowbound',0);constr2 = y(“红色的”,:) == [5,7,3];展示(CONTRACH2)
(1,1)y('红色','塑料')== 5(1,2)y('红色','木')== 7(1,3)y('红色','金属')== 3.

查看索引变量的解决方案

使用命名索引变量创建和解决优化问题。问题是最大限度地提高水果的利润加权流量,对各种机场受到加权流量的约束。

RNG(0)重复性的%p = OptimProblem('ObjectiveSense''最大化');flow = Optimvar('流'......{'苹果''橘子''香蕉''浆果'},{'纽约''bos''lax'},......'indowbound',0,'类型''整数');p.Objective = Sum(Sum(Rand(4,3)。*流量));p.constraints.nyc = rand(1,4)* flow(:,'纽约')<= 10;p.constraints.bos = rand(1,4)* flow(:,'bos')<= 12;p.constraints.lax = rand(1,4)*流量(:,'lax')<= 35;sol =解决(p);
使用intlinprog解决问题。LP:最佳目标值为-1027.472366。启发式:发现1个解决方案使用ZI轮。上限为-1027.233133。相对间隙为0.00%。找到最佳解决方案。intlinprog在根节点停止,因为客观值在最佳值的间隙容忍度范围内,Options.absolutegAppolerance = 0(默认值)。INTCON变量在容差,选项中是整数.inteGertolerance = 1E-05(默认值)。

找到纽约和洛杉矶的橘子和浆果的最佳流动。

[IDXFRUIT,IDXAIRPORTS] = findIndex(流量,{'橘子''浆果'},{'纽约''lax'})
Idxfruit =.1×22 4.
Idxairports =.1×21 3.
Orangeberries = sol.flow(Idxfruit,Idxairports)
橙莓=2×20 980.0000 70.0000 0

此显示意味着没有橙子将会到纽约,70个浆果将会去纽约,980个橘子将会去l,没有浆果会去l

列出以下最佳流程:

水果机场

----- ----------

浆果纽约

苹果博斯

橘子宽松

idx = findindex(flow,{'浆果''苹果''橘子'},{'纽约''bos''lax'})
Idx =.1×34 5 10.
OptimalFlow = sol.flow(idx)
OptimalFlow =.1×370.0000 28.0000 980.0000

该显示器意味着70个浆果将会进入70个浆果纽约,28苹果将会去博斯,980个橘子将会去l

也可以看看

|

相关话题