主要内容

优化变量的命名索引

创建名为指数

优化变量可以使用索引元素的名称。可以在创建变量时或之后指定名称。例如,在创建变量时给出名称。

x = optimvar (“x”,[“联合”“汉莎”“维珍航空”])
arraywide properties: Name: 'x' Type: 'continuous' IndexNames: {{} {1x3 cell}} Elementwise properties: LowerBound: [-Inf -Inf -Inf] UpperBound: [Inf Inf Inf]参见variables with show。参见带showbounds的bounds。

optimvar按变量的顺序自动将指定的名称映射到索引号。例如,“联合”对应于索引1,“汉莎”对应于索引2,和“维珍航空”对应索引3。显示最后一个变量以进行确认。

显示(x (3))
[x(“维珍航空”)]

的元素的索引名称使您能够寻址x通过索引名称。例如:

路线= 2 * x (“联合”) + 3 * x (“维珍航空”
2*x('美联航')+ 3*x('维珍航空')

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

x = optimvar (“x”3 2);x.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(“议员”)

因为已命名的索引变量具有数值等价物,所以即使已经有了已命名的索引变量,也可以使用普通的求和和冒号操作符。例如,你可以有这些形式的约束:

Constr = sum(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

带索引变量的视图解决方案

创建并解决一个使用命名索引变量的优化问题。问题是如何在加权流量受到限制的情况下,使各机场的水果利润加权流量最大化。

rng (0)%的再现性p = optimproblem (“ObjectiveSense”“最大化”);流= optimvar (“流”...“苹果”“橘子”“香蕉”“浆果”},{“纽约”“bo”“宽松”},...下界的0,“类型”“整数”);p.Objective =总和(总和(兰德(4,3)。*流));p.Constraints.NYC =兰德(1、4)*流(:,“纽约”) < = 10;p.Constraints.BOS =兰德(1、4)*流(:,“bo”) < = 12;p.Constraints.LAX =兰德(1、4)*流(:,“宽松”) < = 35;索尔=解决(p);
使用intlinprog解决问题。LP:最佳目标值为-1027.472366。启发式:用ZI轮找到1个解。上界为-1027.233133。相对差距为0.00%。找到最优解。Intlinprog在根节点处停止,因为目标值在最佳值(选项)的间隙容忍范围内。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。

找出橙子和浆果流向纽约和洛杉矶的最佳流量。

[idxFruit,idxAirports] = findindex(flow, {)“橘子”“浆果”},{“纽约”“宽松”})
idxFruit =1×22 4
idxAirports =1×21 3
= sol.flow(idxFruit, idxAirports)
orangeBerries =2×20 980.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个苹果BOS980个橙子宽松的

另请参阅

|

相关的话题

Baidu
map