主要内容

Optimeq.

创建空优化平等数组

描述

Optimeq.初始化一组平等表达式。

小费

对于完整的工作流程,请参阅基于问题的优化工作流程或者基于问题的解决方程的工作流程

例子

eq.= OPTIMEQ(N创造一个N- 1个空的优化等式数组。用eq.初始化创建平等的循环。在优化问题中使用产生的相位作为约束,或者在方程问题中的等式。

例子

eq.= OPTIMEQ(Cstr.创建一系列索引的空优化平等Cstr.,字符向量或串向量的单元阵列。

如果Cstr.是1-by-NCstr., 在哪里NCstr.是元素的数量Cstr., 然后eq.也是1-by-NCstr.。除此以外,eq.NCstr.-By-1。

eq.= OPTIMEQ(Cstr.1,N2,......,Cstr.k)或者eq.= optimeq ({Cstr.1,Cstr.2,......,Cstr.k})或者eq.= OPTIMEQ([N1,N2,......,NK]),任何组合Cstr.N参数,创造一个NCstr.1-by-N2-by -...-逐渐NCstr.k阵列空优化平等,在哪里NCstr.是元素的数量Cstr.

例子

全部收缩

为库存模型创建平等约束。每个时期开始的货物库存等于上一期结束时的股票。在每个时期,库存增加并减少。变量股票是该股在期末。

n = 12;库存= Optimvar('股票',n,1,'类型''整数''indowbound',0);购买= Optimvar('买',n,1,'类型''整数''indowbound',0);卖= Optimvar('卖',n,1,'类型''整数''indowbound',0);initialStock = 100;Stockbalance = Optimeq(N,1);为了t = 1:n如果t == 1 Enterstock = InitialStock;别的Enterstock =库存(T-1);结尾Stockbalance(t)=库存(t)== enterstock +购买(t) - 卖(t);结尾表演(StockPalance)
(1,1) - (1)+销售(1)+库存(1)== 100(2,1)-Buy(2)+销售(2) - 库存(1)+库存(2)==0(3,1)-Buy(3)+销售(3) - 库存(2)+库存(3)== 0(4,1) - (4)+卖出(4) - 库存(3)+库存(4)== 0(5,1)-Buy(5)+销售(5) - 库存(4)+库存(5)== 0(6,1) - 布布(6)+卖(6)- 股票(5)+库存(6)== 0(7,1)-Buy(7)+销售(7) - 库存(6)+库存(7)== 0(8,1)-Buy(8)+ sell(8) - stock(7) + stock(8) == 0 (9, 1) -buy(9) + sell(9) - stock(8) + stock(9) == 0 (10, 1) -buy(10) + sell(10) - stock(9) + stock(10) == 0 (11, 1) -buy(11) + sell(11) - stock(10) + stock(11) == 0 (12, 1) -buy(12) + sell(12) - stock(11) + stock(12) == 0

包括优化问题中的约束。

prob = OptimProblem;prob.constraints.stockbalance = StockPalance;

而不是使用循环,您可以通过在变量上使用矩阵操作来创建相同的约束。

Stockbalance2 = Optimeq(12,1);t = 2:12;Stockbalance2(t)=库存(t)==库存(T-1)+购买(t) - 卖(t);Stockbalance2(1)=库存(1)== InitialStock + Buy(1) - 卖(1);

显示新约束。请注意,它们与约束相同Stockbalance.

表演(Stockbalance2)
(1,1) - (1)+销售(1)+库存(1)== 100(2,1)-Buy(2)+销售(2) - 库存(1)+库存(2)==0(3,1)-Buy(3)+销售(3) - 库存(2)+库存(3)== 0(4,1) - (4)+卖出(4) - 库存(3)+库存(4)== 0(5,1)-Buy(5)+销售(5) - 库存(4)+库存(5)== 0(6,1) - 布布(6)+卖(6)- 股票(5)+库存(6)== 0(7,1)-Buy(7)+销售(7) - 库存(6)+库存(7)== 0(8,1)-Buy(8)+ sell(8) - stock(7) + stock(8) == 0 (9, 1) -buy(9) + sell(9) - stock(8) + stock(9) == 0 (10, 1) -buy(10) + sell(10) - stock(9) + stock(10) == 0 (11, 1) -buy(11) + sell(11) - stock(10) + stock(11) == 0 (12, 1) -buy(12) + sell(12) - stock(11) + stock(12) == 0

通过使用矩阵操作,循环中的创建约束可以比创建约束更耗时。

为涉及机场之间的运输货物的问题创建索引的相等性。首先,创建代表机场的指数。

机场= [“松懈”“jfk”“ord”];

创建代表商品的指数从一个机场发货到另一个机场。

商品= [“电子产品”“食品”“服装”“原料”];

创建一个阵列,给出了每单位货物的重量。

重量= [1 20 5 100];

创建一个可变数组,表示要从每个机场运到彼此机场的货物的数量。数量(Airport1,Airport2,商品)代表数量商品发货机场1机场2.

数量= Optimvar('数量',机场,机场,商品,'indowbound',0);

创建平等约束,即从每个机场发货的货物权重的总和等于货物运输到机场的货物的重量总和。

eq = Optimeq(机场);Outweight = Optimexpr(大小(eq));Inweight = Optimexpr(大小(eq));为了i = 1:长度(机场)temp = Optimexpr;temp2 = Optimexpr;为了J = 1:长度(机场)为了K = 1:长度(货物)temp = temp +数量(i,j, K)*重量(K);Temp2 = Temp2 + quantities(j,i,k)*weights(k);结尾结尾超重(i)= temp;超重(i)= temp2;eq(i)=超重(i)==超重(i);结尾

检查平等。

显示(eq)
(“宽松”)数量(“肯尼迪”,“松懈”,“电子”)——数量(“奥德”、“松懈”,“电子”)+数量(“松懈”,“肯尼迪”,“电子”)+数量(“松懈”,“奥德”,“电子”)- 20 *数量(“肯尼迪”,“松懈”,“食品”)- 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“松懈”,“肯尼迪”,“食品”)+ 20 *数量(“松懈”,“奥德”,“食品”)- 5 *数量(“肯尼迪”、“松懈”,“衣服”)- 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“松懈”,“肯尼迪”,“衣服”)+ 5 *数量(“松懈”,“奥德”,“衣服”)- 100 *数量(“肯尼迪”、“松懈”,“原材料”)- 100 *数量(“奥德”、“松懈”,“原材料”)+ 100 *数量(“松懈”,“肯尼迪”,“原材料”)+ 100 *数量(“松懈”,“奥德”、“原材料”)= = 0(1,“肯尼迪”)数量(“肯尼迪”,“松懈”,“电子”)——数量(“松懈”,“肯尼迪”,“电子”)——数量(“奥德”、“肯尼迪”,“电子”)+数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“肯尼迪”,“松懈”,“食品”)- 20 *数量(“松懈”,“肯尼迪”、“食品”)- 20 *数量(“奥德”、“肯尼迪”,“食品”)+ 20 *数量(“肯尼迪”,“奥德”,“食品”)+ 5 *数量(“肯尼迪”、“松懈”,“衣服”)- 5 *数量(“松懈”,“肯尼迪”、“服装”)- 5 *数量(“奥德”、“肯尼迪”、“服装”)+ 5 *数量(“肯尼迪”,“奥德”,“衣服”)+ 100 *数量(“肯尼迪”、“松懈”,“原材料”)- 100 *数量(“松懈”,“肯尼迪”,“原材料”)- 100 *数量(“奥德”、“肯尼迪”,“原材料”)+ 100 *数量(“肯尼迪”,“奥德”,“原材料”)= = 0(1,“奥德”)数量(“奥德”、“松懈”,“电子”)+数量(“奥德”、“肯尼迪”、“电子”)——数量(“松懈”,“奥德”,“电子”)——数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“奥德”、“肯尼迪”,“食品”)- 20 *数量(“松懈”,“奥德”、“食品”)- 20 *数量(“肯尼迪”,“奥德”,“食品”)+ 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“奥德”、“肯尼迪”、“服装”)- 5 *数量(“松懈”,“奥德”,“衣服”)- 5 *数量(“肯尼迪”,“奥德”,“衣服”)+ 100 *数量(“奥德”、“松懈”,“原材料”)+ 100 *数量(“奥德”、“肯尼迪”,'Raw Materials') - 100*quantities('LAX', 'ORD', 'Raw Materials') = 0

避免嵌套为了循环,使用标准MATLAB®运算符表示平衡。通过在抵达机场指数上求和来创建出发量的阵列。挤压结果以删除单身尺寸。

离开=挤压(总和(数量,2));

计算偏离量的重量。

截止重量=离开*权重';

类似地,计算到达量的权重。

到达=挤压(总和(数量,1));Thangewights =到达*权重';

创建离去权重等于到达权重的约束。

eq2 =偏离重量==到达重量;

通过设置,包括相应的相应索引名称索引名称财产。

eq2.indexnames = {airports,{}};

显示新的平等。请注意,它们与先前的等于相同,而是转换向量。

展示(EQ2)
(“松懈”,1)数量(“肯尼迪”、“松懈”,“电子”)——数量(“奥德”、“松懈”,“电子”)+数量(“松懈”,“肯尼迪”,“电子”)+数量(“松懈”,“奥德”,“电子”)- 20 *数量(“肯尼迪”、“宽松”、“食品”)- 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“松懈”,“肯尼迪”、“食品”)+ 20 *数量(“松懈”,“奥德”,“食品”)- 5 *数量(“肯尼迪”、“松懈”,“衣服”)- 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“松懈”,“肯尼迪”,“衣服”)+ 5 *数量(“松懈”,“奥德”,“衣服”)- 100 *数量(“肯尼迪”、“松懈”,“原材料”)- 100 *数量(“奥德”、“松懈”,“原材料”)+ 100 *数量(“松懈”,“肯尼迪”,“原材料”)+ 100 *数量(“松懈”,“奥德”、“原材料”)= = 0(“肯尼迪”,1)数量(“肯尼迪”,“松懈”,“电子”)——数量(“松懈”,“肯尼迪”,“电子”)——数量(“奥德”、“肯尼迪”,“电子”)+数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“肯尼迪”,“松懈”,“食品”)- 20 *数量(“松懈”,“肯尼迪”、“食品”)- 20 *数量(“奥德”、“肯尼迪”,“食品”)+ 20 *数量(“肯尼迪”,“奥德”,“食品”)+ 5 *数量(“肯尼迪”、“松懈”,“衣服”)- 5 *数量(“松懈”,“肯尼迪”、“服装”)- 5 *数量(“奥德”、“肯尼迪”、“服装”)+ 5 *数量(“肯尼迪”,“奥德”,“衣服”)+ 100 *数量(“肯尼迪”、“松懈”,“原材料”)- 100 *数量(“松懈”,“肯尼迪”,“原材料”)- 100 *数量(“奥德”、“肯尼迪”,“原材料”)+ 100 *数量(“肯尼迪”,“奥德”,“原材料”)= = 0(奥德,1)数量(“奥德”、“松懈”,“电子”)+数量(“奥德”、“肯尼迪”、“电子”)——数量(“松懈”,“奥德”,“电子”)——数量(“肯尼迪”,“奥德”,“电子”)+ 20 *数量(“奥德”、“松懈”,“食品”)+ 20 *数量(“奥德”、“肯尼迪”,“食品”)- 20 *数量(“松懈”,“奥德”、“食品”)- 20 *数量(“肯尼迪”,“奥德”,“食品”)+ 5 *数量(“奥德”、“松懈”,“衣服”)+ 5 *数量(“奥德”、“肯尼迪”、“服装”)- 5 *数量(“松懈”,“奥德”,“衣服”)- 5 *数量(“肯尼迪”,“奥德”,“衣服”)+ 100 *数量(“奥德”、“松懈”,“原材料”)+ 100 *数量(“奥德”、“肯尼迪”,'Raw Materials') - 100*quantities('LAX', 'ORD', 'Raw Materials') = 0

通过使用矩阵操作,循环中的创建约束可以比创建约束更耗时。

输入参数

全部收缩

约束尺寸的大小,指定为正整数。

  • 的大小CONSTRIC = OPTIMEQ(n)N-By-1。

  • 的大小CONSTR = OPTIMEQ(N1,N2)n1.-经过-N2.

  • 的大小CONSTRIC = OPTIMEQ(N1,N2,...,NK)n1.-经过-N2.-By -...-NK.

例子:5.

数据类型:双倍的

索引的名称,指定为字符向量或字符串向量的单元格数组。

例子:{'红色','orange','green','blue'}

例子:[“红色”;“橙色”;“绿色”;“蓝色”]

数据类型:细绳|细胞

输出参数

全部收缩

平等,作为空的返回优化等级大批。用eq.初始化创建平等的循环。

例如:

x = Optimvar('X',8);eq = OPTIMEQ(4);为了k = 1:4 eq(k)= 5 * k *(x(2 * k) -  x(2 * k-1))== 10  -  2 * k;结尾

尖端

  • 您可以使用OptimConstr.代替Optimeq.为方程问题的优化问题或方程创建平等约束。

在R2019B中介绍