为优化变量命名索引
创建名为指数
优化变量可以使用名称索引元素。你可以给的名字,当你创建一个变量或之后。例如,在创建变量名称。
x = optimvar (“x”,(“联合”,“汉莎”,“维珍航空”])
x = 1 x3 OptimizationVariable数组属性:Array-wide属性:名称:“x”型:“连续”IndexNames: {{} {1 x3细胞}}Elementwise属性:下界:[负负无穷到负无穷到]UpperBound:[正正正]看到变量与显示。看到与showbounds界限。
optimvar
自动地图名称指定索引数字的顺序变量。例如,“联合”
对应于指数1,“汉莎”
对应索引2,“维珍航空”
对应于指数3。显示最后一个变量进行确认。
显示(x (3))
[x(“维珍航空”)]
索引名称的元素让你地址x
通过索引名称。例如:
路线= 2 * x (“联合”)+ 3 * x (“维珍航空”)
线性OptimizationExpression路线= 2 *(“联合”)+ 3 * x(“维珍航空”)
您可以创建或修改索引名称在您创建一个变量。然而,你不能改变大小的一个优化变量后施工。所以你可以改变指数名称只有通过设置新名称索引相同的大小与原始变量。例如:
x = optimvar (“x”3 2);x。IndexNames = {{的第一行,“row2”,“row3”},{“col1”,“col2”}};
你可以设置单独每个维度的索引名称:
x.IndexNames {1}= {的第一行,“row2”,“row3”};x.IndexNames {2}= {“col1”,“col2”};
你也可以设置一个特定的元素的索引名称:
x.IndexNames {1}{2} =“importantRow”;
检查索引变量的名称。
x.IndexNames {1}
ans =1 x3单元格{“第一行”}{‘importantRow} {' row3 '}
x.IndexNames {2}
ans =1 x2单元格{' col1} {' col2 '}
使用指定的索引
您可以创建和调试一些问题很容易通过使用命名索引变量。例如,考虑的变量x
索引的名称var
:
var = {“P1”,“P2”,“I1”,“I2”,“C”,“LE1”,“LE2”,“HE1”,“何”,…“HPS”,“议员”,“有限合伙人”,BF1的,“BF2”,“EP”,“页”};x = optimvar (“x”var,下界的,0);
创建,一个目标函数和线性约束x
通过使用指定的索引。
x (“P1”)。下界= 2500;x (“I2”)。UpperBound = 244000;linprob = optimproblem;linprob。目标= 0.002614 * x (“HPS”)+ 0.0239 * x (“页”)+ 0.009825 * x (“EP”);linprob.Constraints。cons1 = x (“I1”)- - - x (“HE1”)< = 132000;
您可以使用字符串(”“
)或特征向量(' '
不加选择地)指数变量。例如:
x (“P2”)。下界= 3000;x (“议员”)。下界= 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(何)0 < = x (HPS) 271536 < = x(议员)0 < = x(“有限合伙人”)0 < = x (BF1) 0 < = x (BF2) 0 < = x (EP) 0 < = x (PP)
没有区分变量指定一个字符串,如x (“P2”)
和变量指定一个特征向量,如x(“议员”)
。
因为命名索引变量有数字等价物,您可以使用普通的总和和结肠运营商即使你有叫指数变量。例如,您可以限制这些形式:
若干(x) =和< = 100;显示(若干)
x (P1) + (P2) + x (I1) + (I2) + x (“C”) + (LE1) + x (LE2) + (HE1) + x(何)+ (HPS) + x(“议员”)+(“有限合伙人”)+ x (BF1的)+ (BF2) + x (EP) + (PP) < = 100
y = optimvar (“y”,{“红色”,“绿色”,“蓝”},{“塑料”,“木”,“金属”},…“类型”,“整数”,下界的,0);constr2 = y (“红色”:)= = (5、7、3);显示(constr2)
(1,1)y(“红”、“塑料”)= = 5 (1、2)y(“红”,“木”)= = 7 (1、3)y(“红”,“金属”)= = 3
查看解决方案与指标变量
创建和使用命名索引变量解决优化问题。问题是最大化profit-weighted水果流向不同的机场,受到约束加权流动。
rng (0)%的再现性p = optimproblem (“ObjectiveSense”,“最大化”);流= optimvar (“流”,…{“苹果”,“橘子”,“香蕉”,“浆果”},{“纽约”,“bo”,“宽松”},…下界的0,“类型”,“整数”);p。目标=总和(总和(兰德(4,3)。*流));p.Constraints。纽约= rand(1,4)*flow(:,“纽约”)< = 10;p.Constraints。BOS= rand(1,4)*flow(:,“bo”)< = 12;p.Constraints。宽松的= rand(1,4)*flow(:,“宽松”)< = 35;索尔=解决(p);
使用intlinprog解决问题。LP:最优的客观价值是-1027.472366。使用子启发式:发现1解决方案。上限是-1027.233133。相对差距是0.00%。找到最优解。Intlinprog停在根节点,因为客观价值差距公差内的最优值,选择。AbsoluteGapTolerance = 0(默认值)。在宽容intcon变量是整数,选项。IntegerTolerance = 1 e-05(默认值)。
找到最优的纽约和洛杉矶橘子和草莓。
[idxFruit, idxAirports] = findindex(流,{“橘子”,“浆果”},{“纽约”,“宽松”})
idxFruit =1×22 4
idxAirports =1×21 3
orangeBerries = sol.flow (idxFruit idxAirports)
orangeBerries =2×2980.0000 - 70.0000 0
这意味着没有橘子要显示纽约
,70个浆果纽约
980个橙子要宽松的
,不去浆果宽松的
。
列表的最优流如下:
果机场
- - - - - - - - - - - - - - -
浆果纽约
苹果BOS
橙子松懈
idx = findindex(流,{“浆果”,“苹果”,“橘子”},{“纽约”,“bo”,“宽松”})
idx =1×34 5 10
optimalFlow = sol.flow (idx)
optimalFlow =1×370.0000 28.0000 980.0000
这意味着70个浆果会显示纽约
,28日苹果要BOS
,980橙子要宽松的
。