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